403Webshell
Server IP : 104.21.93.192  /  Your IP : 216.73.216.73
Web Server : LiteSpeed
System : Linux premium900.web-hosting.com 4.18.0-553.22.1.lve.1.el8.x86_64 #1 SMP Tue Oct 8 15:52:54 UTC 2024 x86_64
User : redwjova ( 1790)
PHP Version : 8.1.32
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : ON |  Sudo : OFF |  Pkexec : OFF
Directory :  /home/redwjova/clevorio.com/wp-content/themes/smart-mag/lib/vendor/plugins/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/redwjova/clevorio.com/wp-content/themes/smart-mag/lib/vendor/plugins/bunyad-amp.zip
PK.3Y5{�bunyad-amp/amp.php<?php
/**
 * Add AMP support to your WordPress site.
 * 
 * Version: 2.5.2
 * License: GPLv2 or later
 */

define( 'AMP__FILE__', __FILE__ );
define( 'AMP__DIR__', dirname( __FILE__ ) );
define( 'AMP__VERSION', '2.5.2' );

/**
 * Errors encountered while loading the plugin.
 *
 * This has to be a global for the sake of PHP 5.2.
 *
 * @var WP_Error $_amp_load_errors
 */
global $_amp_load_errors;

$_amp_load_errors = new WP_Error();

if ( version_compare( phpversion(), '7.4', '<' ) ) {
	$_amp_load_errors->add(
		'insufficient_php_version',
		sprintf(
			/* translators: %s: required PHP version */
			__( 'The AMP plugin requires PHP %s. Please contact your host to update your PHP version.', 'amp' ),
			'7.4+'
		)
	);
}

// See composer.json for this list.
$_amp_required_extensions = array(
	// Required by FasterImage.
	'curl'   => array(
		'functions' => array(
			'curl_close',
			'curl_errno',
			'curl_error',
			'curl_exec',
			'curl_getinfo',
			'curl_init',
			'curl_setopt',
		),
	),
	'dom'    => array(
		'classes' => array(
			'DOMAttr',
			'DOMComment',
			'DOMDocument',
			'DOMElement',
			'DOMNode',
			'DOMNodeList',
			'DOMXPath',
		),
	),
	'filter' => array(
		'functions' => array(
			'filter_var',
		),
	),
	// Required by PHP-CSS-Parser.
	'iconv'  => array(
		'functions' => array( 'iconv' ),
	),
	'libxml' => array(
		'functions' => array( 'libxml_use_internal_errors' ),
	),
	'spl'    => array(
		'functions' => array( 'spl_autoload_register' ),
	),
);
$_amp_missing_extensions = array();
$_amp_missing_classes    = array();
$_amp_missing_functions  = array();
foreach ( $_amp_required_extensions as $_amp_required_extension => $_amp_required_constructs ) {
	if ( ! extension_loaded( $_amp_required_extension ) ) {
		$_amp_missing_extensions[] = "<code>$_amp_required_extension</code>";
	} else {
		foreach ( $_amp_required_constructs as $_amp_construct_type => $_amp_constructs ) {
			switch ( $_amp_construct_type ) {
				case 'functions':
					foreach ( $_amp_constructs as $_amp_construct ) {
						if ( ! function_exists( $_amp_construct ) ) {
							$_amp_missing_functions[] = "<code>$_amp_construct</code>";
						}
					}
					break;
				case 'classes':
					foreach ( $_amp_constructs as $_amp_construct ) {
						if ( ! class_exists( $_amp_construct ) ) {
							$_amp_missing_classes[] = "<code>$_amp_construct</code>";
						}
					}
					break;
			}
		}
		unset( $_amp_construct_type, $_amp_constructs );
	}
}
if ( count( $_amp_missing_extensions ) > 0 ) {
	$_amp_load_errors->add(
		'missing_extension',
		sprintf(
			/* translators: %s is list of missing extensions */
			_n(
				'The following PHP extension is missing: %s. Please contact your host to finish installation.',
				'The following PHP extensions are missing: %s. Please contact your host to finish installation.',
				count( $_amp_missing_extensions ),
				'amp'
			),
			implode( ', ', $_amp_missing_extensions )
		)
	);
}
if ( count( $_amp_missing_classes ) > 0 ) {
	$_amp_load_errors->add(
		'missing_class',
		sprintf(
			/* translators: %s is list of missing extensions */
			_n(
				'The following PHP class is missing: %s. Please contact your host to finish installation.',
				'The following PHP classes are missing: %s. Please contact your host to finish installation.',
				count( $_amp_missing_classes ),
				'amp'
			),
			implode( ', ', $_amp_missing_classes )
		)
	);
}
if ( count( $_amp_missing_functions ) > 0 ) {
	$_amp_load_errors->add(
		'missing_class',
		sprintf(
			/* translators: %s is list of missing extensions */
			_n(
				'The following PHP function is missing: %s. Please contact your host to finish installation.',
				'The following PHP functions are missing: %s. Please contact your host to finish installation.',
				count( $_amp_missing_functions ),
				'amp'
			),
			implode( ', ', $_amp_missing_functions )
		)
	);
}

unset( $_amp_required_extensions, $_amp_missing_extensions, $_amp_required_constructs, $_amp_missing_classes, $_amp_missing_functions, $_amp_required_extension, $_amp_construct_type, $_amp_construct, $_amp_constructs );

/**
 * Displays an admin notice about why the plugin is unable to load.
 *
 * @since 1.1.2
 * @internal
 * @global WP_Error $_amp_load_errors
 */
function _amp_show_load_errors_admin_notice() {
	global $_amp_load_errors;
	?>
	<div class="notice notice-error">
		<p>
			<strong><?php esc_html_e( 'AMP plugin unable to initialize.', 'amp' ); ?></strong>
			<ul>
			<?php foreach ( array_keys( $_amp_load_errors->errors ) as $error_code ) : ?>
				<?php foreach ( $_amp_load_errors->get_error_messages( $error_code ) as $message ) : ?>
					<li>
						<?php echo wp_kses_post( $message ); ?>
					</li>
				<?php endforeach; ?>
			<?php endforeach; ?>
			</ul>
		</p>
	</div>
	<?php
}

// Abort if dependencies are not satisfied.
if ( ! empty( $_amp_load_errors->errors ) ) {
	add_action( 'admin_notices', '_amp_show_load_errors_admin_notice' );

	if ( ( defined( 'WP_CLI' ) && WP_CLI ) || 'true' === getenv( 'CI' ) || 'cli' === PHP_SAPI ) {
		$messages = array( __( 'AMP plugin unable to initialize.', 'amp' ) );
		foreach ( array_keys( $_amp_load_errors->errors ) as $error_code ) {
			$messages = array_merge( $messages, $_amp_load_errors->get_error_messages( $error_code ) );
		}
		$message = implode( "\n * ", $messages );
		$message = str_replace( array( '<code>', '</code>' ), '`', $message );
		$message = html_entity_decode( $message, ENT_QUOTES, 'UTF-8' );

		if ( ! class_exists( 'WP_CLI' ) ) {
			echo "$message\n"; // phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped

			exit( 1 );
		}

		WP_CLI::warning( $message );
	}

	return;
}

/**
 * Print admin notice if plugin installed with incorrect slug (which impacts WordPress's auto-update system).
 *
 * @since 1.0
 * @internal
 */
function _amp_incorrect_plugin_slug_admin_notice() {
	$actual_slug = basename( AMP__DIR__ );
	?>
	<div class="notice notice-warning">
		<p>
			<?php
			echo wp_kses_post(
				sprintf(
					/* translators: %1$s is the current directory name, and %2$s is the required directory name */
					__( 'You appear to have installed the AMP plugin incorrectly. It is currently installed in the <code>%1$s</code> directory, but it needs to be placed in a directory named <code>%2$s</code>. Please rename the directory. This is important for WordPress plugin auto-updates.', 'amp' ),
					$actual_slug,
					'amp'
				)
			);
			?>
		</p>
	</div>
	<?php
}

// +EDIT: Not required
// if ( 'amp' !== basename( AMP__DIR__ ) ) {
// 	add_action( 'admin_notices', '_amp_incorrect_plugin_slug_admin_notice' );
// }

require_once AMP__DIR__ . '/vendor/autoload.php';

register_activation_hook( __FILE__, 'amp_activate' );

register_deactivation_hook( __FILE__, 'amp_deactivate' );

add_action( 'plugins_loaded', 'amp_bootstrap_plugin', defined( 'PHP_INT_MIN' ) ? PHP_INT_MIN : ~PHP_INT_MAX ); // phpcs:ignore PHPCompatibility.Constants.NewConstants.php_int_minFound
PK.3Y1��u&
&
bunyad-amp/bunyad-amp.php<?php
/**
 * Plugin Name: Bunyad AMP 
 * Description: Add AMP support to your WordPress site. This is modified version.
 * Plugin URI: https://amp-wp.org
 * Author: ThemeSphere, AMP Project Contributors
 * Author URI: https://github.com/ampproject/amp-wp/graphs/contributors
 * Version: 2.5.2
 * License: GPLv2 or later
 * Requires at least: 5.3
 * Requires PHP: 7.4
 *
 * @package AMP
 */

function bunyad_amp_conflict_notice() {
	?>
	<div class="notice notice-error">
		<p><?php esc_html_e('Bunyad AMP for WordPress conflicts with the plugin AMP. Please disable plugin named "AMP".', 'amp'); ?></p>
	</div>
	<?php
}

if (function_exists('amp_init')) {
	add_action('admin_notices', 'bunyad_amp_conflict_notice');
	return;
}

/**
 * Setup default options for the plugin
 */
function bunyad_amp_setup_default_options() {

	$options = get_option('amp-options');
	if (!$options || !array_key_exists('user_modified', $options)) {
		$options['all_templates_supported'] = 0;
		$options['supported_post_types'] = array(
			'post', 'page'
		);
		$options['mobile_redirect'] = 0;
	}

	$options['plugin_configured'] = true;
	update_option('amp-options', (array) $options);
}

// Setup default options on a plugin update as the older versions didn't have this.
add_action('upgrader_process_complete', function($object, $data = array()) {

	// Only for plugin updates
	if ($data['type'] !== 'plugin') {
		return;
	}

	if (!isset($data['plugins']) && !isset($data['plugin'])) {
		return;
	}

	// Bulk has it in 'plugins'
	$data['plugins'] = !empty($data['bulk']) ? $data['plugins'] : (array) $data['plugin'];

	$bunyad_amp = plugin_basename(__FILE__);
	if (!in_array($bunyad_amp, $data['plugins'])) {
		return;
	}

	bunyad_amp_setup_default_options();

}, 10, 2);

// Configure defaults on activatation.
register_activation_hook(__FILE__, 'bunyad_amp_setup_default_options');

/**
 * Hook into options update to set a user updated flag.
 * 
 * This is needed to prevent overriding user settings on an upgrade or 
 * reactivation of the plugin.
 */
add_filter('pre_update_option_amp-options', function($options) {

	$option_mod = false;
	if (defined('REST_REQUEST') && REST_REQUEST) {
		$route = $GLOBALS['wp']->query_vars['rest_route'];

		if ($route && preg_match('#amp/(.+?)/options#', $route)) {
			$option_mod = true;
		}
	}

	if (!$option_mod) {
		return $options;
	}

	// Set flag.
	$options['user_modified'] = true;
	return $options;
});

// This is used to recognize Bunyad AMP is active.
defined('BUNYAD_AMP') || define('BUNYAD_AMP', 1);

// The plugin file
require_once dirname(__FILE__) . '/amp.php';PK.3Y)�m�FFbunyad-amp/LICENSE                    GNU GENERAL PUBLIC LICENSE
                       Version 2, June 1991

 Copyright (C) 1989, 1991 Free Software Foundation, Inc., <http://fsf.org/>
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users.  This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it.  (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.)  You can apply it to
your programs, too.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.

  To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.

  For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have.  You must make sure that they, too, receive or can get the
source code.  And you must show them these terms so they know their
rights.

  We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.

  Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software.  If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.

  Finally, any free program is threatened constantly by software
patents.  We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary.  To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.

  The precise terms and conditions for copying, distribution and
modification follow.

                    GNU GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License.  The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language.  (Hereinafter, translation is included without limitation in
the term "modification".)  Each licensee is addressed as "you".

Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.

  1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.

You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.

  2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) You must cause the modified files to carry prominent notices
    stating that you changed the files and the date of any change.

    b) You must cause any work that you distribute or publish, that in
    whole or in part contains or is derived from the Program or any
    part thereof, to be licensed as a whole at no charge to all third
    parties under the terms of this License.

    c) If the modified program normally reads commands interactively
    when run, you must cause it, when started running for such
    interactive use in the most ordinary way, to print or display an
    announcement including an appropriate copyright notice and a
    notice that there is no warranty (or else, saying that you provide
    a warranty) and that users may redistribute the program under
    these conditions, and telling the user how to view a copy of this
    License.  (Exception: if the Program itself is interactive but
    does not normally print such an announcement, your work based on
    the Program is not required to print an announcement.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.

In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:

    a) Accompany it with the complete corresponding machine-readable
    source code, which must be distributed under the terms of Sections
    1 and 2 above on a medium customarily used for software interchange; or,

    b) Accompany it with a written offer, valid for at least three
    years, to give any third party, for a charge no more than your
    cost of physically performing source distribution, a complete
    machine-readable copy of the corresponding source code, to be
    distributed under the terms of Sections 1 and 2 above on a medium
    customarily used for software interchange; or,

    c) Accompany it with the information you received as to the offer
    to distribute corresponding source code.  (This alternative is
    allowed only for noncommercial distribution and only if you
    received the program in object code or executable form with such
    an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for
making modifications to it.  For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable.  However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.

If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.

  4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License.  Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.

  5. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Program or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.

  6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.

  7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all.  For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded.  In such case, this License incorporates
the limitation as if written in the body of this License.

  9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time.  Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

Each version is given a distinguishing version number.  If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation.  If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.

  10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission.  For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this.  Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.

                            NO WARRANTY

  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.

  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    {description}
    Copyright (C) {year}  {fullname}

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License along
    with this program; if not, write to the Free Software Foundation, Inc.,
    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:

    Gnomovision version 69, Copyright (C) year name of author
    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License.  Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.

You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary.  Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
  `Gnomovision' (which makes passes at compilers) written by James Hacker.

  {signature of Ty Coon}, 1 April 1989
  Ty Coon, President of Vice

This General Public License does not permit incorporating your program into
proprietary programs.  If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library.  If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

PK.3Y��@�,�,bunyad-amp/readme.txt=== AMP ===
Contributors: google, xwp, rtcamp, automattic, westonruter, albertomedina, schlessera, delawski, swissspidy, pierlo, joshuawold, thelovekesh
Tags: page experience, performance, amp, mobile, optimization, accelerated mobile pages
Requires at least: 5.3
Tested up to: 6.4
Stable tag: 2.5.2
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Requires PHP: 7.4

An easier path to great Page Experience for everyone. Powered by AMP.

== Description ==

[Page Experience](https://developers.google.com/search/docs/guides/page-experience) (PX) is a set of ranking signals—including [Core Web Vitals](https://web.dev/vitals/#core-web-vitals) (CWV)—measuring the user experience of interacting with a web page. AMP is a powerful tool which applies many optimizations and best practices automatically on your site, making it easier for you to achieve good page experience for your visitors. The official AMP Plugin, supported by the AMP team, makes it easy to bring the power of AMP to your WordPress site, seamlessly integrating with the normal publishing flow and allowing the use of existing themes and plugins.

https://www.youtube.com/watch?v=s52JNMT59s8&list=PLXTOW_XMsIDRGRr5QDffrvND8Qh1RndFb

For more videos like this, check out the ongoing [AMP for WordPress video series](https://www.youtube.com/playlist?list=PLXTOW_XMsIDRGRr5QDffrvND8Qh1RndFb).

The plugin's key features include:

1. **Automate the process of generating AMP-valid markup as much as possible**, letting users follow the standard workflows they are used to in WordPress.
2. **Provide effective validation tools** to help users deal with AMP incompatibilities when they happen, including mechanisms for **identifying**, **contextualizing**, and **resolving issues caused by validation errors**.
3. **Provide development support** to make it easier for WordPress developers to build AMP-compatible ecosystem components and build websites and solutions with AMP-compatibility built-in.
4. **Support the serving of AMP pages** to make it easier for site owners to take advantage of mobile redirection, AMP-to-AMP linking, and generation of optimized AMP by default (via PHP port of AMP Optimizer).
5. **Provide a turnkey solution** for segments of WordPress creators to be able to go from zero to publishing AMP pages in no time, regardless of technical expertise or availability of resources.

The official AMP plugin for WordPress is a powerful tool that helps you build user-first WordPress sites, that is, sites that are fast, beautiful, secure, engaging, and accessible. A user-first site will deliver experiences that delight your users and therefore will increase user engagement and the success of your site. And, contrary to the popular belief of being only for mobile sites (it doesn't stand for Accelerated _Mobile_ Pages anymore!), AMP is a fully responsive web component framework, which means that you can provide AMP experiences for your users on both mobile and desktop devices.

= AMP Plugin Audience: Everyone =

This plugin can be used by both developers and non-developer users:

- If you are a developer or tech savvy user, you can take advantage of advanced developer tools provided by the AMP plugin to fix validation issues your site may have and reach full AMP compatibility.
- If you are not a developer or tech savvy user, or you just simply don't want to deal with validation issues and tackling development tasks, the AMP plugin allows you to assemble fully AMP-compatible sites with different configurations taking advantage of AMP-compatible components. The plugin helps you to deal with validation issues by removing invalid AMP markup in cases where it is possible, or altogether suppressing AMP-incompatible plugins on AMP pages.

The bottom line is that regardless of your technical expertise, the AMP plugin can be useful to you.

= Template Modes =

The official AMP plugin enables site owners to serve AMP to their users in different ways, which are referred to as template modes: Standard, Transitional, and Reader. The differences between them are in terms of the number of themes used (one or two), and the number of versions of the site (non-AMP, AMP). Each template mode brings its own value proposition and serves the needs of different scenarios in the large and diverse WordPress ecosystem. And in all cases, the AMP plugin provides as much support as possible in terms of automating the generation of AMP pages, as well as keeping the option chosen AMP valid. In a nutshell, the available template modes are the following:

**Standard Mode**: This template mode is the ideal, as there is only one theme for serving requests and a single version of your site: the AMP version. Besides enabling all of your site to be AMP-first, this has the added benefit of reducing development and maintenance costs. This mode is the best choice for sites where the theme and plugins used in the site are fully AMP-compatible. It&#39;s also a good option if some components are not AMP-compatible but the site owner has the resources or the know-how to fix them. See our [showcase](https://amp-wp.org/showcases/?template_mode=standard) of sites using Standard mode.

**Transitional Mode**: In this mode there is also a single theme used, but there can be two versions of each page: AMP and non-AMP. The active theme is used for serving the AMP and non-AMP versions of a given URL. This mode is a good choice if the site uses a theme that is not fully AMP compatible, but the functional differences between the AMP and non-AMP pages are acceptable (due to graceful degradation). In this case, users accessing the site from mobile devices can get the AMP version and get an optimized experience which also retains the look and feel of the non-AMP version. Check out our [showcase](https://amp-wp.org/showcases/?template_mode=transitional) of sites using Transitional mode.

**Reader Mode**: In this mode there are two different themes, one for AMP pages and another for non-AMP pages, and therefore there are also two versions of the site. This mode may be selected when the site is using an AMP-incompatible theme, but the level of incompatibilities is significant without graceful degradation. It's also a good choice if you are not technically savvy (or simply do not want to deal with the incompatibilities) and therefore want simplified and robust workflows that allow you to take advantage of AMP with minimal effort.

Different modes would be recommended in different scenarios, depending on the specifics of your site and your role. As you configure the plugin, it will suggest the mode that might be best for you based on its assessment of the theme and plugins used on your site. And, independently of the mode used, you have the option of serving all or only a portion of your site as AMP. This gives you all the flexibility you need to get started enabling AMP on your site progressively.

= AMP Ecosystem =

It is possible today to assemble great looking user-first sites powered by the AMP plugin by picking and choosing themes and plugins from a growing AMP-compatible ecosystem. In this context, the AMP plugin acts as an orchestrator of the overall AMP content creation and publishing process; it serves as a validator and enforcer making it easier to not only get to AMP experiences, but to maintain them with confidence.

Many popular theme and plugin developers have taken efforts to support the official AMP plugin. If you are using a theme like Astra or Newspack, or if you are using plugins like Yoast or WP Forms — they will work out of the box! You can see the [growing list](https://amp-wp.org/ecosystem/) of tested themes and plugins.

= AMP Development =

Although there is a growing ecosystem of AMP-compatible WordPress components, there is still a ways to go before majority AMP compatibility in the ecosystem. If you are a developer, or you have the resources to pursue development projects, you may want in some cases to develop custom plugin or theme to serve your specific needs. The official AMP plugin can be of great help to you by providing powerful and effective developer tools that shed light into the AMP development process as it is done in WordPress. This includes mechanisms for detailing the root causes of validation issues, the contextual space to understand them properly, and methods to deal with them during the process of achieving full AMP compatibility. Read more about [Developer Tools](https://amp-wp.org/documentation/getting-started/developer-tools/).

= Getting Started =

To learn more about the plugin and start leveraging its capabilities to power your AMP publishing workflow, check [the official AMP plugin product site](https://amp-wp.org/).

If you are a developer, we encourage you to [follow along](https://github.com/ampproject/amp-wp) or [contribute](https://github.com/ampproject/amp-wp/wiki/Contributing) to the development of this plugin on GitHub.

We have put up a comprehensive [FAQ page](https://amp-wp.org/documentation/frequently-asked-questions/) and extensive documentation to help you start as smoothly as possible.

But if you need some help, we are right here to support you in the plugin's [support forum](https://wordpress.org/support/plugin/amp/), as well as through [GitHub issues](https://github.com/ampproject/amp-wp/issues) (for technical bugs and feature requests). And our thriving [AMP Expert ecosystem](https://amp-wp.org/ecosystem/amp-experts/) has indie freelancers to enterprise grade agencies in case you need commercial support!

== Installation ==

1. Upload the folder to the `/wp-content/plugins/` directory.
2. Activate the plugin through the "Plugins" menu in WordPress.
3. Navigate to AMP > Settings in the WordPress admin to configure the plugin; use the onboarding wizard there for guided setup.

== Frequently Asked Questions ==

Please see the [FAQs on amp-wp.org](https://amp-wp.org/documentation/frequently-asked-questions/). Don't see an answer to your question? Please [search the support forum](https://wordpress.org/support/plugin/amp/) to see if it has already been discussed. Otherwise, please [open a new support topic](https://wordpress.org/support/plugin/amp/#new-post).

== Screenshots ==

1. New onboarding wizard to help you get started.
2. Built for developers and non-technical content creators alike.
3. Theme selection to enhance the Reader mode experience.
4. Preview how your site looks across desktop and mobile before finalising changes.
5. Customize the design of AMP pages in the Customizer.
6. Reopen the onboarding wizard, change individual options, or manage advanced settings.

== Changelog ==

**Version 2.5.1 is a maintenance and security release which fixes a reflected XSS vulnerability when mobile redirection is enabled.** For prior affected versions, the fix is backported to new patch releases: v2.0.12, v2.1.5, v2.2.5, v2.3.1, and v2.4.3. These are available in the WordPress.org Plugin Directory but not on GitHub.

For the plugin’s changelog, please see [the Releases page on GitHub](https://github.com/ampproject/amp-wp/releases).

== Upgrade Notice ==

If you currently use older versions of the plugin in Reader mode, it is strongly encouraged to pick a Reader theme instead of using the legacy Reader templates. You may also want to switch to Standard mode or Transitional mode if you have AMP-compatible theme and plugins.
PK.3Yߜ���bunyad-amp/uninstall.php<?php
/**
 * Plugin uninstall file.
 *
 * @package AMP
 */

namespace AmpProject\AmpWP;

// If uninstall.php is not called by WordPress, then die.
if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
	die;
}

require_once dirname( __FILE__ ) . '/includes/uninstall-functions.php';

if ( is_multisite() && ! wp_is_large_network() ) {
	$site_ids = get_sites(
		[
			'fields'                 => 'ids',
			'number'                 => '',
			'update_site_cache'      => false,
			'update_site_meta_cache' => false,
		]
	);
	$site_ids = ( ! empty( $site_ids ) && is_array( $site_ids ) ) ? $site_ids : [];

	foreach ( $site_ids as $site_id ) {
		switch_to_blog( $site_id );
		remove_plugin_data();
	}
	restore_current_blog();
} else {
	remove_plugin_data();
}
PK.3Y�Sn��*bunyad-amp/assets/css/admin-tables-rtl.css.column-error_status .dashicons-editor-help{color:#767676}.source>.dashicons{margin-left:5px}.column-source .dashicons-admin-plugins,.column-sources_with_invalid_output .dashicons-admin-plugins{color:#64a2e9}.column-source .dashicons-admin-appearance,.column-sources_with_invalid_output .dashicons-admin-appearance{color:#ebb04f}.column-sources_with_invalid_output .dashicons-wordpress-alt,.dashicons-wordpress-alt{color:#92b371}.amp-logo-icon{background-color:initial;background-image:url(../images/amp-logo-icon.svg);background-size:20px 20px;display:inline-block;height:20px;width:20px}.column-error_status .error-status{display:inline-block;line-height:20px;margin-right:10px;position:relative;vertical-align:top}td.column-found_elements_and_attributes div{margin-bottom:.6rem}.column-error_status .dashicons-flag.new{color:#d98501}.column-error_status .dashicons-yes.new{color:red}.column-error_status .dashicons-warning.rejected{color:#68c6ff}.column-sources .source,.column-sources_with_invalid_output .source{display:block}.column-sources .source+.source,.column-sources_with_invalid_output .source+.source{margin-top:8px}.wrap .wp-heading-inline+.page-title-action{margin-right:1rem}.tooltip[hidden]{visibility:hidden}PK.3YS4���&bunyad-amp/assets/css/admin-tables.css.column-error_status .dashicons-editor-help{color:#767676}.source>.dashicons{margin-right:5px}.column-source .dashicons-admin-plugins,.column-sources_with_invalid_output .dashicons-admin-plugins{color:#64a2e9}.column-source .dashicons-admin-appearance,.column-sources_with_invalid_output .dashicons-admin-appearance{color:#ebb04f}.column-sources_with_invalid_output .dashicons-wordpress-alt,.dashicons-wordpress-alt{color:#92b371}.amp-logo-icon{background-color:initial;background-image:url(../images/amp-logo-icon.svg);background-size:20px 20px;display:inline-block;height:20px;width:20px}.column-error_status .error-status{display:inline-block;line-height:20px;margin-left:10px;position:relative;vertical-align:top}td.column-found_elements_and_attributes div{margin-bottom:.6rem}.column-error_status .dashicons-flag.new{color:#d98501}.column-error_status .dashicons-yes.new{color:red}.column-error_status .dashicons-warning.rejected{color:#68c6ff}.column-sources .source,.column-sources_with_invalid_output .source{display:block}.column-sources .source+.source,.column-sources_with_invalid_output .source+.source{margin-top:8px}.wrap .wp-heading-inline+.page-title-action{margin-left:1rem}.tooltip[hidden]{visibility:hidden}PK.3Y�hk�yy'bunyad-amp/assets/css/amp-admin-rtl.css.plugin-icon{object-fit:contain}.plugin-card{position:relative}.plugin-action-buttons .dashicons-external,.theme-browser .theme .dashicons-external{margin-right:5px;vertical-align:text-bottom}.theme-browser .theme .theme-screenshot img{height:100%;object-fit:contain}.amp-extension-card-message{background-color:#fff;border-radius:15px;clear:both;color:#3c434a;padding:0;position:absolute;right:-10px;text-align:center;top:-10px}.amp-logo-icon{background-color:initial;background-image:url(../images/amp-logo-icon.svg);background-size:30px;cursor:pointer;display:inline-block;height:30px;vertical-align:middle;width:30px}.amp-logo-icon.small{background-size:15px 15px;height:15px;width:15px}.plugin-install-tab-amp-compatible .plugin-card-bottom{display:none}.amp-extension-card-message .tooltiptext{background-color:#000c;border-radius:6px;color:#fff;min-width:200px;padding:5px;position:absolute;right:40px;text-align:center;visibility:hidden;width:60%;z-index:1}.tooltiptext:after{border:7px solid #0000;border-left-color:#000c;content:"";left:100%;position:absolute;top:10px}.amp-extension-card-message:hover .tooltiptext{visibility:visible}PK.3YwGC�xx#bunyad-amp/assets/css/amp-admin.css.plugin-icon{object-fit:contain}.plugin-card{position:relative}.plugin-action-buttons .dashicons-external,.theme-browser .theme .dashicons-external{margin-left:5px;vertical-align:text-bottom}.theme-browser .theme .theme-screenshot img{height:100%;object-fit:contain}.amp-extension-card-message{background-color:#fff;border-radius:15px;clear:both;color:#3c434a;left:-10px;padding:0;position:absolute;text-align:center;top:-10px}.amp-logo-icon{background-color:initial;background-image:url(../images/amp-logo-icon.svg);background-size:30px;cursor:pointer;display:inline-block;height:30px;vertical-align:middle;width:30px}.amp-logo-icon.small{background-size:15px 15px;height:15px;width:15px}.plugin-install-tab-amp-compatible .plugin-card-bottom{display:none}.amp-extension-card-message .tooltiptext{background-color:#000c;border-radius:6px;color:#fff;left:40px;min-width:200px;padding:5px;position:absolute;text-align:center;visibility:hidden;width:60%;z-index:1}.tooltiptext:after{border:7px solid #0000;border-right-color:#000c;content:"";position:absolute;right:100%;top:10px}.amp-extension-card-message:hover .tooltiptext{visibility:visible}PK.3Y�-O�pp.bunyad-amp/assets/css/amp-block-editor-rtl.css.wp-core-ui .amp-wrapper-post-preview{margin-left:6px;margin-right:-6px}.wp-core-ui .amp-editor-post-preview{align-items:center;border-bottom-right-radius:0;border-top-right-radius:0;height:34px;justify-content:center;margin-left:0!important;padding:6px 12px}.wp-core-ui .amp-editor-post-preview svg{height:18px;margin:0;width:18px}.wp-core-ui .edit-post-header .editor-post-preview{height:34px}.amp-unavailable-notice{margin:5px 0 2px;width:100%}.amp-unavailable-notice details>summary{cursor:pointer;font-weight:700;-webkit-user-select:none;user-select:none}.amp-unavailable-notice details[open]>summary{margin-bottom:1em}PK.3YwюDoo*bunyad-amp/assets/css/amp-block-editor.css.wp-core-ui .amp-wrapper-post-preview{margin-left:-6px;margin-right:6px}.wp-core-ui .amp-editor-post-preview{align-items:center;border-bottom-left-radius:0;border-top-left-radius:0;height:34px;justify-content:center;margin-right:0!important;padding:6px 12px}.wp-core-ui .amp-editor-post-preview svg{height:18px;margin:0;width:18px}.wp-core-ui .edit-post-header .editor-post-preview{height:34px}.amp-unavailable-notice{margin:5px 0 2px;width:100%}.amp-unavailable-notice details>summary{cursor:pointer;font-weight:700;-webkit-user-select:none;user-select:none}.amp-unavailable-notice details[open]>summary{margin-bottom:1em}PK.3Y&-y,,2bunyad-amp/assets/css/amp-block-validation-rtl.css.amp-toolbar-icon svg{fill:#000}.amp-toolbar-broken-icon svg{fill:none}.amp-plugin-icon{align-items:center;display:flex;height:100%;justify-content:center;position:relative;width:100%}.amp-plugin-icon--has-badge svg{margin-right:-5px}.is-pressed .amp-plugin-icon:not(.amp-plugin-icon--broken) svg{fill:#fff}.amp-status-icon path{fill:#005af0}.amp-status-icon:after{background:#bb522e;border-radius:50%;content:"";display:block;height:12px;left:-6px;opacity:0;position:absolute;top:-3px;transform:scale(0);transition:opacity .12s ease-out,transform .18s ease-out;width:12px}.amp-status-icon.amp-status-icon--broken:after{opacity:1;transform:none}.amp-error-count-badge{align-items:center;background:#bb522e;border:2px solid #0000;border-radius:8px;color:#fff;display:flex;flex-shrink:0;font-size:10px;height:16px;justify-content:center;left:-6px;position:absolute;top:-5px;width:16px}.is-pressed .amp-error-count-badge{border-color:#1e1e1e}.amp-sidebar__errors-list,.amp-sidebar__errors-list-item{margin-bottom:0;margin-top:0}.amp-sidebar__errors-list-item>.components-panel__body{border-top-width:0}.amp-sidebar__options{margin:12px 8px}.sidebar-notification{display:flex;margin-top:15px;min-height:67px;position:relative}.sidebar-notification.is-loading{align-items:center}.sidebar-notification__icon{align-items:center;border-radius:50%;display:flex;flex:0 0 auto;height:24px;justify-content:center;margin:0 0 0 12px;position:relative;width:24px}.sidebar-notification__icon *{height:100%;width:100%}.sidebar-notification__content{display:flex;flex-direction:column}.sidebar-notification__content>p{margin:0}.sidebar-notification__action,.sidebar-notification__content>p+p{margin-top:4px}.sidebar-notification.is-small{min-height:36px}.sidebar-notification.is-small .sidebar-notification__content{padding-top:4px}.sidebar-notification.is-small .sidebar-notification__content p{font-size:11px}.sidebar-notifications-container .sidebar-notification{padding:14px 18px}.sidebar-notifications-container .sidebar-notification:first-child{margin-top:0}.sidebar-notifications-container.is-shady{background:#f4f4f4;border-bottom:1px solid #e3e4e7;padding:18px 10px}.sidebar-notifications-container.is-shady .sidebar-notification{background:#fff;border-radius:15px;overflow:hidden}.amp-spinner-container{align-items:center;display:flex;justify-content:center}.amp-spinner-container--inline{display:inline-flex;margin:0 .5em;vertical-align:middle}.amp-spinner-container .components-spinner{margin:0}.amp-error .components-panel__body-toggle.components-button{padding-left:14px;padding-right:14px}.amp-error.components-panel__body.is-opened>.components-panel__body-title{margin-bottom:10px}.amp-error__panel-title{align-items:baseline;display:flex;flex-flow:row nowrap;font-size:13px;font-weight:400;line-height:1.5;width:calc(100% - 32px)}.amp-error__icons{align-items:center;display:flex;flex:0 0 auto;flex-flow:column nowrap;padding-left:.5rem;position:relative;top:-1px}.amp-error__error-type-icon{align-items:center;background-color:currentColor;border:1px solid;border-radius:12px;color:#707070;display:flex;height:24px;justify-content:center;width:24px}.amp-error__title{flex:1 1 auto;font-size:13px;line-height:1.4}.amp-error:not(.is-opened) .amp-error__title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.amp-error code{white-space:nowrap}.amp-error__block-type-description{align-items:center;display:flex;margin-left:2px}.amp-error__block-type-icon{align-items:center;display:inline-flex;height:10px;margin-right:5px;width:24px}.amp-error__block-type-icon .block-editor-block-icon{background:#f0f0f1;background:#00000012;border-radius:5px;padding:2px}.amp-error__details dt{float:right;font-weight:600}.amp-error__details dt:after{content:":";margin-left:7px}.amp-error__details dd{margin-bottom:8px;margin-right:0}.amp-error__kept-removed{display:flex}.amp-error__kept-removed--kept>span,.amp-error__kept-removed--removed>span{align-items:center;background:#fcddd3;border-radius:5px;display:flex;height:24px;justify-content:center;margin-right:5px;margin-top:-5px;transform:translateY(2px);width:24px}.amp-error__kept-removed--removed>span{background:#d2e5e5}.amp-error__actions{display:flex;justify-content:space-between}.amp-error__actions>*+*{margin-right:10px}.components-button.amp-error__select-block{align-items:center;display:inline-flex}.amp-error__details-link svg{height:15px;margin-right:6px;width:15px}.amp-error__select-block svg{fill:none;margin-left:9px}.amp-error__details-link{align-items:center;display:flex}.amp-error__details-link svg path{fill:currentColor}.amp-error .components-panel__body-title,.amp-error .components-panel__body-title:hover{border-right:4px solid #0000}.amp-error--reviewed .components-panel__body-title{background:#f4f4f4}.amp-error--reviewed .components-panel__body-title:hover{background:#e8e8e8}.amp-error--new .amp-error__title{font-weight:700}.amp-error--removed .components-panel__body-title,.amp-error--removed .components-panel__body-title:hover{background:#f8f8f8}.amp-error--removed.amp-error--kept .components-panel__body-title,.amp-error--removed.amp-error--kept .components-panel__body-title:hover{border-right-color:#c2c2c2}.amp-error--removed .amp-error__title{color:grey}.amp-error--removed .amp-error__icons{opacity:.4}.amp-error--kept .components-panel__body-title,.amp-error--kept .components-panel__body-title:hover{border-right-color:#d54e21}PK.3Y$^((.bunyad-amp/assets/css/amp-block-validation.css.amp-toolbar-icon svg{fill:#000}.amp-toolbar-broken-icon svg{fill:none}.amp-plugin-icon{align-items:center;display:flex;height:100%;justify-content:center;position:relative;width:100%}.amp-plugin-icon--has-badge svg{margin-left:-5px}.is-pressed .amp-plugin-icon:not(.amp-plugin-icon--broken) svg{fill:#fff}.amp-status-icon path{fill:#005af0}.amp-status-icon:after{background:#bb522e;border-radius:50%;content:"";display:block;height:12px;opacity:0;position:absolute;right:-6px;top:-3px;transform:scale(0);transition:opacity .12s ease-out,transform .18s ease-out;width:12px}.amp-status-icon.amp-status-icon--broken:after{opacity:1;transform:none}.amp-error-count-badge{align-items:center;background:#bb522e;border:2px solid #0000;border-radius:8px;color:#fff;display:flex;flex-shrink:0;font-size:10px;height:16px;justify-content:center;position:absolute;right:-6px;top:-5px;width:16px}.is-pressed .amp-error-count-badge{border-color:#1e1e1e}.amp-sidebar__errors-list,.amp-sidebar__errors-list-item{margin-bottom:0;margin-top:0}.amp-sidebar__errors-list-item>.components-panel__body{border-top-width:0}.amp-sidebar__options{margin:12px 8px}.sidebar-notification{display:flex;margin-top:15px;min-height:67px;position:relative}.sidebar-notification.is-loading{align-items:center}.sidebar-notification__icon{align-items:center;border-radius:50%;display:flex;flex:0 0 auto;height:24px;justify-content:center;margin:0 12px 0 0;position:relative;width:24px}.sidebar-notification__icon *{height:100%;width:100%}.sidebar-notification__content{display:flex;flex-direction:column}.sidebar-notification__content>p{margin:0}.sidebar-notification__action,.sidebar-notification__content>p+p{margin-top:4px}.sidebar-notification.is-small{min-height:36px}.sidebar-notification.is-small .sidebar-notification__content{padding-top:4px}.sidebar-notification.is-small .sidebar-notification__content p{font-size:11px}.sidebar-notifications-container .sidebar-notification{padding:14px 18px}.sidebar-notifications-container .sidebar-notification:first-child{margin-top:0}.sidebar-notifications-container.is-shady{background:#f4f4f4;border-bottom:1px solid #e3e4e7;padding:18px 10px}.sidebar-notifications-container.is-shady .sidebar-notification{background:#fff;border-radius:15px;overflow:hidden}.amp-spinner-container{align-items:center;display:flex;justify-content:center}.amp-spinner-container--inline{display:inline-flex;margin:0 .5em;vertical-align:middle}.amp-spinner-container .components-spinner{margin:0}.amp-error .components-panel__body-toggle.components-button{padding-left:14px;padding-right:14px}.amp-error.components-panel__body.is-opened>.components-panel__body-title{margin-bottom:10px}.amp-error__panel-title{align-items:baseline;display:flex;flex-flow:row nowrap;font-size:13px;font-weight:400;line-height:1.5;width:calc(100% - 32px)}.amp-error__icons{align-items:center;display:flex;flex:0 0 auto;flex-flow:column nowrap;padding-right:.5rem;position:relative;top:-1px}.amp-error__error-type-icon{align-items:center;background-color:currentColor;border:1px solid;border-radius:12px;color:#707070;display:flex;height:24px;justify-content:center;width:24px}.amp-error__title{flex:1 1 auto;font-size:13px;line-height:1.4}.amp-error:not(.is-opened) .amp-error__title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.amp-error code{white-space:nowrap}.amp-error__block-type-description{align-items:center;display:flex;margin-right:2px}.amp-error__block-type-icon{align-items:center;display:inline-flex;height:10px;margin-left:5px;width:24px}.amp-error__block-type-icon .block-editor-block-icon{background:#f0f0f1;background:#00000012;border-radius:5px;padding:2px}.amp-error__details dt{float:left;font-weight:600}.amp-error__details dt:after{content:":";margin-right:7px}.amp-error__details dd{margin-bottom:8px;margin-left:0}.amp-error__kept-removed{display:flex}.amp-error__kept-removed--kept>span,.amp-error__kept-removed--removed>span{align-items:center;background:#fcddd3;border-radius:5px;display:flex;height:24px;justify-content:center;margin-left:5px;margin-top:-5px;transform:translateY(2px);width:24px}.amp-error__kept-removed--removed>span{background:#d2e5e5}.amp-error__actions{display:flex;justify-content:space-between}.amp-error__actions>*+*{margin-left:10px}.components-button.amp-error__select-block{align-items:center;display:inline-flex}.amp-error__details-link svg{height:15px;margin-left:6px;width:15px}.amp-error__select-block svg{fill:none;margin-right:9px}.amp-error__details-link{align-items:center;display:flex}.amp-error__details-link svg path{fill:currentColor}.amp-error .components-panel__body-title,.amp-error .components-panel__body-title:hover{border-left:4px solid #0000}.amp-error--reviewed .components-panel__body-title{background:#f4f4f4}.amp-error--reviewed .components-panel__body-title:hover{background:#e8e8e8}.amp-error--new .amp-error__title{font-weight:700}.amp-error--removed .components-panel__body-title,.amp-error--removed .components-panel__body-title:hover{background:#f8f8f8}.amp-error--removed.amp-error--kept .components-panel__body-title,.amp-error--removed.amp-error--kept .components-panel__body-title:hover{border-left-color:#c2c2c2}.amp-error--removed .amp-error__title{color:grey}.amp-error--removed .amp-error__icons{opacity:.4}.amp-error--kept .components-panel__body-title,.amp-error--kept .components-panel__body-title:hover{border-left-color:#d54e21}PK.3Y�8�~~3bunyad-amp/assets/css/amp-customizer-legacy-rtl.css.devices-wrapper{position:relative}.amp-toggle{display:inline-block;height:15px;position:absolute;right:-47px;top:15px;width:30px}.amp-toggle input,.amp-toggle input.disabled{height:100%;margin:0;opacity:0;padding:0;position:absolute;right:0;top:0;width:100%;z-index:1}.amp-toggle .slider{background-color:#555d66;border-radius:34px;bottom:0;cursor:pointer;left:0;position:absolute;right:0;top:0;transition:.3s;transition-property:background-color,transform,opacity}.amp-toggle input:active,.amp-toggle input:focus{outline:none}.amp-toggle input:active+.slider,.amp-toggle input:focus+.slider,.amp-toggle input:hover+.slider{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px #1e8cbecc}.amp-toggle .slider:before{background-color:initial;background-image:url(../images/amp-white-icon.svg);background-size:13px 13px;border-radius:50%;content:"";height:13px;position:absolute;right:1px;top:1px;transition:.3s;width:13px}.amp-toggle input:checked+.slider{background-color:#0379c4}.amp-toggle input:checked+.slider:before{transform:translateX(-15px)}.amp-toggle input.disabled+.slider{opacity:.7}.amp-toggle .tooltip{background:#191e23;bottom:25px;color:#fff;cursor:default;display:none;font-size:13px;padding:15px;position:absolute;right:-115px;text-align:center;width:230px;z-index:1}.amp-toggle .tooltip a{color:#00a0d2}.amp-toggle .tooltip a:active,.amp-toggle .tooltip a:focus,.amp-toggle .tooltip a:hover{color:#54cbf1}.amp-toggle .tooltip:before{border:solid;border-color:#191e23 #0000;border-width:8px 8px 0;bottom:-8px;content:"";position:absolute;right:120px}.js .accordion-section-title:after{z-index:0}.wp-core-ui .wp-full-overlay .collapse-sidebar{padding:9px 10px}#customize-footer-actions .collapse-sidebar-label{display:none}.wp-full-overlay-footer .devices{box-shadow:none}.devices-wrapper .preview-desktop{border-right:1px solid #ddd!important}.wp-full-overlay-footer .devices button:before{vertical-align:initial}PK.3Y�҃�ww/bunyad-amp/assets/css/amp-customizer-legacy.css.devices-wrapper{position:relative}.amp-toggle{display:inline-block;height:15px;left:-47px;position:absolute;top:15px;width:30px}.amp-toggle input,.amp-toggle input.disabled{height:100%;left:0;margin:0;opacity:0;padding:0;position:absolute;top:0;width:100%;z-index:1}.amp-toggle .slider{background-color:#555d66;border-radius:34px;bottom:0;cursor:pointer;left:0;position:absolute;right:0;top:0;transition:.3s;transition-property:background-color,transform,opacity}.amp-toggle input:active,.amp-toggle input:focus{outline:none}.amp-toggle input:active+.slider,.amp-toggle input:focus+.slider,.amp-toggle input:hover+.slider{box-shadow:0 0 0 1px #5b9dd9,0 0 2px 1px #1e8cbecc}.amp-toggle .slider:before{background-color:initial;background-image:url(../images/amp-white-icon.svg);background-size:13px 13px;border-radius:50%;content:"";height:13px;left:1px;position:absolute;top:1px;transition:.3s;width:13px}.amp-toggle input:checked+.slider{background-color:#0379c4}.amp-toggle input:checked+.slider:before{transform:translateX(15px)}.amp-toggle input.disabled+.slider{opacity:.7}.amp-toggle .tooltip{background:#191e23;bottom:25px;color:#fff;cursor:default;display:none;font-size:13px;left:-115px;padding:15px;position:absolute;text-align:center;width:230px;z-index:1}.amp-toggle .tooltip a{color:#00a0d2}.amp-toggle .tooltip a:active,.amp-toggle .tooltip a:focus,.amp-toggle .tooltip a:hover{color:#54cbf1}.amp-toggle .tooltip:before{border:solid;border-color:#191e23 #0000;border-width:8px 8px 0;bottom:-8px;content:"";left:120px;position:absolute}.js .accordion-section-title:after{z-index:0}.wp-core-ui .wp-full-overlay .collapse-sidebar{padding:9px 10px}#customize-footer-actions .collapse-sidebar-label{display:none}.wp-full-overlay-footer .devices{box-shadow:none}.devices-wrapper .preview-desktop{border-left:1px solid #ddd!important}.wp-full-overlay-footer .devices button:before{vertical-align:initial}PK.3Yx榔ss,bunyad-amp/assets/css/amp-customizer-rtl.css#customize-controls #customize-info .preview-notice{display:block;line-height:1.4;margin-left:28px}#customize-theme-controls .control-section-amp_active_theme_settings_import>.accordion-section-title{cursor:default}#customize-theme-controls .control-section-amp_active_theme_settings_import>.accordion-section-title:after{content:""}#customize-theme-controls .control-section-amp_active_theme_settings_import>.accordion-section-title>button{float:left;font-weight:400;margin-right:12px}#customize-controls .control-section-amp_active_theme_settings_import>.accordion-section-title,#customize-controls .control-section-amp_active_theme_settings_import>.accordion-section-title:hover{background:#fff;border:1px solid #ddd;border-left:none;border-right:none;color:#555d66;cursor:default;font-weight:400;margin:0 0 15px;padding:12px}#customize-controls .control-section-amp_active_theme_settings_import>.accordion-section-title details{margin:5px 0}#customize-controls .control-section-amp_active_theme_settings_import>.accordion-section-title summary{cursor:pointer;display:list-item;font-weight:700}#customize-controls .control-section-amp_active_theme_settings_import>.accordion-section-title summary:focus{color:#0073aa;outline:none}#customize-controls .control-section-amp_active_theme_settings_import>.accordion-section-title dt{font-weight:700;margin-bottom:4px;margin-top:10px}#customize-controls .control-section-amp_active_theme_settings_import>.accordion-section-title dd{margin-bottom:4px;margin-right:20px}#customize-controls .control-section-amp_active_theme_settings_import>.accordion-section-title dd>input[type=checkbox]{margin:0 0 0 1ex}PK.3Yl�P(ss(bunyad-amp/assets/css/amp-customizer.css#customize-controls #customize-info .preview-notice{display:block;line-height:1.4;margin-right:28px}#customize-theme-controls .control-section-amp_active_theme_settings_import>.accordion-section-title{cursor:default}#customize-theme-controls .control-section-amp_active_theme_settings_import>.accordion-section-title:after{content:""}#customize-theme-controls .control-section-amp_active_theme_settings_import>.accordion-section-title>button{float:right;font-weight:400;margin-left:12px}#customize-controls .control-section-amp_active_theme_settings_import>.accordion-section-title,#customize-controls .control-section-amp_active_theme_settings_import>.accordion-section-title:hover{background:#fff;border:1px solid #ddd;border-left:none;border-right:none;color:#555d66;cursor:default;font-weight:400;margin:0 0 15px;padding:12px}#customize-controls .control-section-amp_active_theme_settings_import>.accordion-section-title details{margin:5px 0}#customize-controls .control-section-amp_active_theme_settings_import>.accordion-section-title summary{cursor:pointer;display:list-item;font-weight:700}#customize-controls .control-section-amp_active_theme_settings_import>.accordion-section-title summary:focus{color:#0073aa;outline:none}#customize-controls .control-section-amp_active_theme_settings_import>.accordion-section-title dt{font-weight:700;margin-bottom:4px;margin-top:10px}#customize-controls .control-section-amp_active_theme_settings_import>.accordion-section-title dd{margin-bottom:4px;margin-left:20px}#customize-controls .control-section-amp_active_theme_settings_import>.accordion-section-title dd>input[type=checkbox]{margin:0 1ex 0 0}PK.3Y9D�Y  )bunyad-amp/assets/css/amp-default-rtl.css.amp-wp-unknown-size,amp-anim.amp-wp-enforced-sizes,amp-img.amp-wp-enforced-sizes{object-fit:contain}body amp-audio:not([controls]){display:inline-block;height:auto}.amp-wp-default-form-message>p{margin:1em 0;padding:.5em}.amp-wp-default-form-message[submit-success]>p.amp-wp-form-redirecting,.amp-wp-default-form-message[submitting]>p{font-style:italic}.amp-wp-default-form-message[submit-success]>p:not(.amp-wp-form-redirecting){background-color:#90ee90;border:1px solid green;color:#000}.amp-wp-default-form-message[submit-error]>p{background-color:#ffb6c1;border:1px solid red;color:#000}.amp-wp-default-form-message[submit-success]>p:empty{display:none}amp-carousel .amp-wp-gallery-caption{background-color:#00000080;bottom:0;color:#fff;left:0;margin-bottom:0;padding:1rem;position:absolute;right:0;text-align:center}amp-carousel .amp-wp-gallery-caption a{color:inherit}.wp-block-gallery[data-amp-carousel=true],.wp-block-gallery[data-amp-carousel=true].has-nested-images{display:block;flex-wrap:unset}.wp-video{margin-bottom:1.5em;max-width:100%}.wp-block-video video{height:auto}button[overflow]{bottom:0}amp-anim img,amp-anim noscript,amp-iframe iframe,amp-iframe noscript,amp-img img,amp-img noscript,amp-video noscript,amp-video video{image-rendering:inherit;object-fit:inherit;object-position:inherit}PK.3Y9D�Y  %bunyad-amp/assets/css/amp-default.css.amp-wp-unknown-size,amp-anim.amp-wp-enforced-sizes,amp-img.amp-wp-enforced-sizes{object-fit:contain}body amp-audio:not([controls]){display:inline-block;height:auto}.amp-wp-default-form-message>p{margin:1em 0;padding:.5em}.amp-wp-default-form-message[submit-success]>p.amp-wp-form-redirecting,.amp-wp-default-form-message[submitting]>p{font-style:italic}.amp-wp-default-form-message[submit-success]>p:not(.amp-wp-form-redirecting){background-color:#90ee90;border:1px solid green;color:#000}.amp-wp-default-form-message[submit-error]>p{background-color:#ffb6c1;border:1px solid red;color:#000}.amp-wp-default-form-message[submit-success]>p:empty{display:none}amp-carousel .amp-wp-gallery-caption{background-color:#00000080;bottom:0;color:#fff;left:0;margin-bottom:0;padding:1rem;position:absolute;right:0;text-align:center}amp-carousel .amp-wp-gallery-caption a{color:inherit}.wp-block-gallery[data-amp-carousel=true],.wp-block-gallery[data-amp-carousel=true].has-nested-images{display:block;flex-wrap:unset}.wp-video{margin-bottom:1.5em;max-width:100%}.wp-block-video video{height:auto}button[overflow]{bottom:0}amp-anim img,amp-anim noscript,amp-iframe iframe,amp-iframe noscript,amp-img img,amp-img noscript,amp-video noscript,amp-video video{image-rendering:inherit;object-fit:inherit;object-position:inherit}PK.3Yԙɱ��'bunyad-amp/assets/css/amp-icons-rtl.css.amp-icon.amp-invalid:before,.amp-icon.amp-removed:before,.amp-icon.amp-valid:before{border-radius:5px;content:"";display:inline-block;height:20px;width:20px}body .amp-icon{font:normal 20px/1 dashicons}.amp-icon.amp-invalid:before{background:#f7ded4 url(../images/amp-alert.svg) no-repeat 50%;background-size:18px auto}.amp-icon.amp-invalid.ab-icon:before{background:none;color:#dc3232!important;content:""}.amp-icon.amp-valid:before{background:#d3e5e5 url(../images/amp-valid.svg) no-repeat 50%;background-size:16px auto}.amp-icon.amp-valid.ab-icon:before{background:none;content:url('data:image/svg+xml;charset=utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><rect x="0" fill="none" width="20" height="20"/><g><path fill="%2346b450" d="M10 2c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm-.615 12.66h-1.34l-3.24-4.54 1.34-1.25 2.57 2.4 5.14-5.93 1.34.94-5.81 8.38z"/></g></svg>')}.amp-icon.amp-removed:before{background:#d3e5e5 url(../images/amp-delete.svg) no-repeat 50%;background-size:20px auto}.amp-icon.amp-warning:before{color:#ffc733!important;content:""}.amp-icon.amp-logo:before{content:url('data:image/svg+xml;charset=utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 30"><g fill="none" fill-rule="evenodd"><circle fill="%23FFF" cx="15" cy="15" r="10"/><path fill="%23005AF0" fill-rule="nonzero" d="M13.85 24.098h-1.14l1.128-6.823-3.49.005h-.05a.57.57 0 0 1-.568-.569c0-.135.125-.363.125-.363l6.272-10.46 1.16.005-1.156 6.834 3.508-.004h.056c.314 0 .569.254.569.568 0 .128-.05.24-.121.335L13.85 24.098zM15 0C6.716 0 0 6.716 0 15c0 8.284 6.716 15 15 15 8.285 0 15-6.716 15-15 0-8.284-6.715-15-15-15z"/></g></svg>');display:inline-block;height:20px;width:20px}.amp-icon.amp-link:before{content:""}.amp-icon.amp-link:not(.ab-icon):before{color:#00a0d2!important}#wpadminbar span.amp-icon{top:2px}#wpadminbar .ab-sub-wrapper span.amp-icon{margin-right:2px;padding:initial!important;position:absolute!important}PK.3Yм_٩�#bunyad-amp/assets/css/amp-icons.css.amp-icon.amp-invalid:before,.amp-icon.amp-removed:before,.amp-icon.amp-valid:before{border-radius:5px;content:"";display:inline-block;height:20px;width:20px}body .amp-icon{font:normal 20px/1 dashicons}.amp-icon.amp-invalid:before{background:#f7ded4 url(../images/amp-alert.svg) no-repeat 50%;background-size:18px auto}.amp-icon.amp-invalid.ab-icon:before{background:none;color:#dc3232!important;content:""}.amp-icon.amp-valid:before{background:#d3e5e5 url(../images/amp-valid.svg) no-repeat 50%;background-size:16px auto}.amp-icon.amp-valid.ab-icon:before{background:none;content:url('data:image/svg+xml;charset=utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><rect x="0" fill="none" width="20" height="20"/><g><path fill="%2346b450" d="M10 2c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm-.615 12.66h-1.34l-3.24-4.54 1.34-1.25 2.57 2.4 5.14-5.93 1.34.94-5.81 8.38z"/></g></svg>')}.amp-icon.amp-removed:before{background:#d3e5e5 url(../images/amp-delete.svg) no-repeat 50%;background-size:20px auto}.amp-icon.amp-warning:before{color:#ffc733!important;content:""}.amp-icon.amp-logo:before{content:url('data:image/svg+xml;charset=utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 30"><g fill="none" fill-rule="evenodd"><circle fill="%23FFF" cx="15" cy="15" r="10"/><path fill="%23005AF0" fill-rule="nonzero" d="M13.85 24.098h-1.14l1.128-6.823-3.49.005h-.05a.57.57 0 0 1-.568-.569c0-.135.125-.363.125-.363l6.272-10.46 1.16.005-1.156 6.834 3.508-.004h.056c.314 0 .569.254.569.568 0 .128-.05.24-.121.335L13.85 24.098zM15 0C6.716 0 0 6.716 0 15c0 8.284 6.716 15 15 15 8.285 0 15-6.716 15-15 0-8.284-6.715-15-15-15z"/></g></svg>');display:inline-block;height:20px;width:20px}.amp-icon.amp-link:before{content:""}.amp-icon.amp-link:not(.ab-icon):before{color:#00a0d2!important}#wpadminbar span.amp-icon{top:2px}#wpadminbar .ab-sub-wrapper span.amp-icon{margin-left:2px;padding:initial!important;position:absolute!important}PK.3Y5�2�::9bunyad-amp/assets/css/amp-mobile-version-switcher-rtl.css#amp-mobile-version-switcher{position:absolute;right:0;width:100%;z-index:100}#amp-mobile-version-switcher>a{background-color:#444;border:0;color:#eaeaea;display:block;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;font-weight:600;padding:15px 0;text-align:center;-webkit-text-decoration:none;text-decoration:none}#amp-mobile-version-switcher>a:active,#amp-mobile-version-switcher>a:focus,#amp-mobile-version-switcher>a:hover{-webkit-text-decoration:underline;text-decoration:underline}PK.3Y��Ǝ995bunyad-amp/assets/css/amp-mobile-version-switcher.css#amp-mobile-version-switcher{left:0;position:absolute;width:100%;z-index:100}#amp-mobile-version-switcher>a{background-color:#444;border:0;color:#eaeaea;display:block;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;font-weight:600;padding:15px 0;text-align:center;-webkit-text-decoration:none;text-decoration:none}#amp-mobile-version-switcher>a:active,#amp-mobile-version-switcher>a:focus,#amp-mobile-version-switcher>a:hover{-webkit-text-decoration:underline;text-decoration:underline}PK.3Yj ��QqQq3bunyad-amp/assets/css/amp-onboarding-wizard-rtl.css:root{--gray:#6c7781;--light-gray:#c4c4c4;--very-light-gray:#fafafc;--amp-brand:#2459e7;--amp-settings-color-black:#212121;--amp-settings-color-dark-gray:#333;--amp-settings-color-brand:#2459e7;--amp-settings-color-muted:#48525c;--amp-settings-color-border:#e8e8e8;--amp-settings-color-background:#fff;--amp-settings-color-background-light:#f8f8f8;--amp-settings-color-warning:#ff9f00;--font-noto:"Noto Sans",sans-serif;--font-poppins:poppins,sans-serif;--font-default:-apple-system,"BlinkMacSystemFont","Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif;--color-valid:#46b450;--amp-settings-color-danger:#dc3232;--color-gray-medium:#0000008a;--amp-settings-font-size:16px}.amp .components-button:not(.components-panel__body-toggle){align-items:center;border-radius:3px;color:var(--amp-settings-color-brand);font-size:1rem;font-weight:600;padding:.5rem 1rem}.amp .components-button:not(.components-panel__body-toggle) svg{fill:currentColor;height:18px;margin:0 .5rem;width:18px}.amp .components-panel__body-title button{font-size:16px;font-weight:600}.amp .components-panel__body-title:hover{background:var(--amp-settings-color-background)}.amp .components-button.is-link,.amp .components-button.is-link:hover,.amp .components-button.is-link:hover:not(:disabled),.amp .components-button:not(.components-panel__body-toggle):focus,.amp .components-button:not(.components-panel__body-toggle):focus:not(:disabled),.amp .components-button:not(.components-panel__body-toggle):hover{box-shadow:none;color:var(--amp-settings-color-brand);-webkit-text-decoration:none;text-decoration:none}.amp .components-button.is-secondary,.amp .components-button.is-secondary:hover,.amp .components-button.is-secondary:hover:not(:disabled){border-color:var(--amp-settings-color-brand);box-shadow:inset 0 0 0 1px var(--amp-settings-color-brand)}.amp.amp .components-button:focus:not(:disabled){outline:1px solid var(--amp-settings-color-brand)}.amp .components-button.is-primary{box-shadow:0 25px 20px #0000001a}.amp .components-button.is-primary,.amp .components-button.is-primary:active,.amp .components-button.is-primary:focus,.amp .components-button.is-primary:focus:not(:disabled),.amp .components-button.is-primary:hover,.amp .components-button.is-primary:hover:not(:disabled),.amp .components-button.is-primary:not(:disabled):not([aria-disabled=true]):hover{background:var(--amp-settings-color-brand);color:var(--amp-settings-color-background);text-shadow:none}.amp .components-button.is-primary:disabled{background:#0000004d;border-color:#0000004d;color:#fffc}.amp .components-button.is-primary:disabled.is-busy{background-image:linear-gradient(45deg,var(--amp-settings-color-brand) 28%,#2459e7cc 28%,#2459e7cc 72%,var(--amp-settings-color-brand) 72%);background-size:100% 100%;border-color:var(--color-gray-medium)}.amp .components-toggle-control .components-base-control__field .components-toggle-control__label{display:flex;flex-wrap:wrap}.amp .components-button.is-small{font-size:.875rem}.amp .components-toggle-control .components-base-control__field{align-items:center;margin-bottom:0}.amp .components-form-toggle .components-form-toggle__track{border:2px solid var(--color-gray-medium)}.amp .components-form-toggle .components-form-toggle__thumb{background-color:var(--color-gray-medium);border-width:0;height:10px;right:4px;top:4px;width:10px}.amp .components-form-toggle.is-checked .components-form-toggle__thumb{background-color:var(--amp-settings-color-background)}.amp .components-form-toggle.is-checked .components-form-toggle__track{background-color:var(--amp-settings-color-brand);border-width:0}.amp .components-form-toggle__input:focus+.components-form-toggle__track{box-shadow:0 0 0 2px #fff,0 0 0 3.5px var(--amp-settings-color-brand)}.amp .components-checkbox-control__input[type=checkbox]:checked{background:var(--amp-settings-color-brand);border-color:var(--amp-settings-color-brand)}.amp .components-checkbox-control__input[type=checkbox]{border:2px solid var(--color-gray-medium);height:18px;width:18px}.amp svg.components-checkbox-control__checked{height:22px;right:0;width:18px}.amp input[type=checkbox]:checked:before{display:none}.amp .components-checkbox-control__input-container{display:inline-block;height:16px;margin-left:12px;position:relative;vertical-align:middle;width:16px}.amp svg.components-checkbox-control__checked{fill:#fff;position:absolute;top:-2px}.amp-settings-nav{align-items:center;background:var(--amp-settings-color-background);bottom:0;box-shadow:0 -5px 15px #0000000d;display:flex;justify-content:flex-end;left:0;position:fixed;right:0;z-index:2}.amp-settings-nav__inner{align-items:center;display:flex;justify-content:space-between;margin:0 auto;max-width:1320px;padding:15px;width:100%}@media screen and (min-width:783px){.amp-settings-nav__inner{padding:20px 90px}}.amp-settings-nav__inner .components-button{margin:5px 0}.amp a{color:var(--amp-settings-color-brand)}.amp h1,.amp h2,.amp h3,.amp h4,.amp h5,.amp h6,.components-button{font-family:var(--font-poppins)}.amp h1{font-size:2.125rem}.amp h2{font-size:1.5rem}.amp h3{font-size:1.2rem;line-height:1.5;margin-bottom:0;margin-top:0}.amp p{font-size:var(--amp-settings-font-size)}.amp,.amp *,.amp :after,.amp :before,.amp:after,.amp:before{box-sizing:border-box}.amp input[type=radio]{border-color:var(--gray);border-width:2px;box-shadow:none;height:1.5rem;width:1.5rem}.amp input[type=radio][disabled]{border-color:var(--amp-settings-color-border)}.amp input[type=radio]:checked{border-color:var(--amp-settings-color-brand)}.amp input[type=radio]:checked:before{background-color:var(--amp-settings-color-brand);height:12px;margin:.25rem;width:12px}.amp input[type=checkbox]:focus,.amp input[type=radio]:focus{border-color:var(--amp-settings-color-brand);box-shadow:0 0 0 1px var(--amp-settings-color-brand)}.amp details summary{cursor:pointer}body{background-color:#fafafc;font-family:Noto Sans,sans-serif}.amp-onboarding-wizard-container{--stepper-max-width:250px;--setup-page-max-width:1000px;margin:0 auto;max-width:1250px;max-width:calc(var(--stepper-max-width) + var(--setup-page-max-width));padding:20px 20px 10rem;width:100%}@media screen and (max-width:782px){.amp-onboarding-wizard-container{padding-bottom:5rem}}.amp-onboarding-wizard{display:flex;flex-direction:column;margin:0 auto;width:100%}@media screen and (min-width:783px){.amp-onboarding-wizard{flex-direction:row}}.amp-onboarding-wizard__logo-container{align-items:center;display:flex}.amp-onboarding-wizard__logo-container svg{height:42px;width:42px}.amp-onboarding-wizard__logo-container h1{-webkit-font-smoothing:antialiased;color:var(--amp-settings-color-brand);font-size:24px;font-weight:700;margin-right:.75rem}.amp-onboarding-wizard li>a,.amp-onboarding-wizard p a{color:var(--amp-settings-color-black);transition:color 80ms ease}.amp-onboarding-wizard li>a:hover,.amp-onboarding-wizard p a:hover{color:var(--amp-settings-color-brand)}.amp-onboarding-wizard-panel-container{margin-left:-20px;margin-right:-20px}@media screen and (min-width:783px){.amp-onboarding-wizard-panel-container{flex:1 1 auto;margin-left:0;margin-right:0;max-width:var(--setup-page-max-width);width:75%}}.amp-onboarding-wizard-panel{border-color:#0000;box-shadow:0 25px 60px #0000001a;max-width:var(--setup-page-max-width);min-height:496px;padding:20px;width:100%}@media screen and (min-width:783px){.amp-onboarding-wizard-panel{border-radius:10px;padding:40px}}.amp-onboarding-wizard-panel h1{line-height:1.1}@media screen and (min-width:783px){.amp-onboarding-wizard-panel h1{margin-top:0}}.amp-onboarding-wizard-plugin-name{color:var(--amp-settings-color-muted);font-size:16px;line-height:1.5;padding:.5rem 0 0}.amp-onboarding-wizard-plugin-name:after{border-bottom:2px solid var(--amp-settings-color-border);content:"";display:block;margin:15px auto;width:100%}@media screen and (min-width:783px){.amp-onboarding-wizard-plugin-name:after{margin-bottom:0}}.amp-stepper-container{width:100%}@media screen and (min-width:783px){.amp-stepper-container{flex:0 0 auto;max-width:var(--stepper-max-width);padding-left:40px;width:25%}}.amp .amp-stepper-container__header>.is-link{float:left;padding:8px}.amp-stepper ul{display:flex;justify-content:space-between;margin-top:0;width:100%}@media screen and (min-width:783px){.amp-stepper ul{flex-direction:column}}.amp-stepper__item{align-items:center;display:flex;font-size:14px;position:relative}@media screen and (min-width:783px){.amp-stepper__item{padding:15px 0 8px 10px}}.amp-stepper__item--active{border-radius:4px;font-weight:600}.amp-stepper__item:before{border-right:2px solid var(--amp-settings-color-border);bottom:-50%;content:"";position:absolute;right:11px;top:60%;z-index:1}@media screen and (max-width:784px){.amp-stepper__item:before{display:none}}.amp-stepper__item:last-of-type:before{display:none}.amp-stepper__item--done:before{border-right-color:var(--amp-settings-color-brand)}.amp-stepper__item-title{color:var(--amp-settings-color-muted);display:none;margin-right:18px}@media screen and (min-width:783px){.amp-stepper__item-title{display:inline-block}}.amp-stepper__bullet{align-items:center;background-color:var(--amp-settings-color-background);border:2px solid var(--amp-settings-color-border);border-radius:12px;color:var(--gray);content:attr(data-index);display:flex;height:24px;justify-content:center;position:relative;width:24px;z-index:2}.amp-stepper__bullet--check{background-color:var(--amp-settings-color-brand)}.amp-stepper__bullet--check,.amp-stepper__bullet--dot{border-color:var(--amp-settings-color-brand)}.amp-stepper__bullet--dot span{background-color:var(--amp-settings-color-brand);border-radius:5px;height:10px;width:10px}.grid{display:grid;gap:40px}@media screen and (min-width:783px){.grid-1-1{grid-template-columns:repeat(2,1fr)}.grid-1-2{grid-template-columns:1fr 2fr}.grid-2-1{grid-template-columns:2fr 1fr}.grid-1-3{grid-template-columns:1fr 3fr}.grid-3-1{grid-template-columns:3fr 1fr}.grid-5-4{grid-template-columns:5fr 4fr}}.error-screen-container,.error-screen-container *{box-sizing:border-box}.error-screen-container{margin:3rem auto;max-width:600px;padding:1.5rem;width:100%}.error-screen{background-color:#fff;border-right:4px solid #d54e21;padding:2.25rem;width:100%}.error-screen h1{font-family:var(--font-poppins);font-size:1.5rem;font-weight:600;line-height:1.4;margin:0 0 1rem}.error-screen p{font-family:var(--font-noto);font-size:1rem;line-height:1.5;margin:1rem 0;word-break:break-word}.error-screen pre{background:#f0f0f1;background:#00000012;font-size:13px;margin:1rem 1px;overflow:auto;padding:3px 5px 2px}.selectable{background-color:var(--amp-settings-color-background);border:2px solid var(--amp-settings-color-border);border-radius:8px;padding:1rem .75rem}@media (min-width:783px){.selectable{padding:1.25rem 2.5rem}}.selectable--left{box-shadow:10px 0 0 var(--amp-settings-color-border);margin-left:-10px}.selectable--bottom{border:2px solid var(--amp-settings-color-border);box-shadow:0 10px 0 var(--amp-settings-color-border)}.selectable--selected{border-color:var(--amp-settings-color-brand);box-shadow:10px 0 0 var(--amp-settings-color-brand)}.selectable--bottom.selectable--selected{box-shadow:0 10px 0 var(--amp-settings-color-brand)}.technical-background__header{border-bottom:2px solid #d3d9dd;margin-bottom:1.75rem;padding-bottom:1.75rem}.technical-background__header p{font-size:14px;margin:0}.technical-background-option-container{margin-bottom:2rem;padding:1.5rem 0}.technical-background-option{align-items:flex-start;display:flex;flex-wrap:wrap}@media screen and (min-width:783px){.technical-background-option{align-items:center;flex-wrap:nowrap}}.technical-background-option__input-container{padding:1.5rem}.technical-background-option svg{flex-shrink:0;height:auto;margin-bottom:1rem;width:66px}@media screen and (min-width:783px){.technical-background-option svg{margin-bottom:0}}.technical-background-option__description{padding:0 2rem}.technical-background-option__description p{font-size:14px}.technical-background-option__description h2{font-family:Noto Sans,sans-serif;font-size:1rem;line-height:1.5}@media screen and (max-width:782px){.technical-background-option__description h2{margin-top:0}}.amp-spinner-container{align-items:center;display:flex;justify-content:center}.amp-spinner-container--inline{display:inline-flex;margin:0 .5em;vertical-align:middle}.amp-spinner-container .components-spinner{margin:0}.site-scan__section+.site-scan__section{margin-top:1.5rem}.site-scan__header{align-items:center;border-bottom:1px solid var(--amp-settings-color-border);display:flex;flex-flow:row nowrap;padding-bottom:1rem;padding-top:.5rem}.site-scan__heading{font-size:16px;font-weight:700;margin-right:2rem}:root{--amp-progress-bar-color:var(--amp-brand);--amp-progress-bar-height:34px}.progress-bar{border:2px solid var(--amp-progress-bar-color);height:34px;height:var(--amp-progress-bar-height);margin-bottom:1.5rem;margin-top:1.5rem}.progress-bar,.progress-bar__track{border-radius:34px;border-radius:var(--amp-progress-bar-height);overflow:hidden}.progress-bar__track{height:calc(100% - 8px);margin:4px;position:relative;transform:scale(1);width:calc(100% - 8px)}.progress-bar__indicator{background-color:var(--amp-brand);background-color:var(--amp-progress-bar-color);border-radius:34px;border-radius:var(--amp-progress-bar-height);height:100%;position:absolute;right:0;top:0;transition:transform .8s ease-out;width:100%}.site-scan-results{padding:0}.site-scan-results+.site-scan-results{margin-top:1.5rem}.site-scan-results__header{align-items:center;border-bottom:1px solid var(--amp-settings-color-border);display:flex;flex-flow:row nowrap;padding:.5rem}@media(min-width:783px){.site-scan-results__header{padding:1rem 2rem}}.site-scan-results__heading{font-size:16px;font-weight:700;margin-right:1rem}.site-scan-results__heading[data-badge-content]:after{align-items:center;background-color:var(--light-gray);border-radius:50%;content:attr(data-badge-content);display:inline-flex;height:30px;justify-content:center;letter-spacing:-.05em;margin:0 .5rem;width:30px}.site-scan-results__content{padding:1rem .5rem}@media(min-width:783px){.site-scan-results__content{padding:1.25rem 2rem}}.site-scan-results__sources{border:2px solid var(--amp-settings-color-border)}.site-scan-results__source{align-items:center;font-size:14px;margin:0;max-width:100%;min-height:3.5rem;padding:1rem}.site-scan-results__source details{margin:0;width:100%}.site-scan-results__source:nth-child(2n){background-color:var(--amp-settings-color-background-light)}.site-scan-results__source+.site-scan-results__source{border-top:2px solid var(--amp-settings-color-border)}.site-scan-results__source-name{font-weight:700}.site-scan-results__source-name--inactive{color:var(--gray)}.site-scan-results__source-author:before{border-right:1px solid;content:"";display:inline-block;height:1em;margin:0 .5em;vertical-align:middle}.site-scan-results__source .site-scan-results__summary-wrapper{align-items:center;display:inline-flex;margin-right:4px;width:calc(100% - 20px)}.site-scan-results__source-notice,.site-scan-results__source-version{margin-right:auto}.site-scan-results__cta.site-scan-results__cta{font-size:14px;margin-bottom:0}.site-scan-results__cta.site-scan-results__cta .components-external-link__icon{fill:var(--amp-settings-color-brand)}.site-scan-results__urls-list{margin:1.5rem 0;padding:0 1rem}.site-scan-results__detail-body p{font-size:14px}.site-scan-results__source-detail{background-color:#fff;border:1px solid #dedede;border-radius:5px;font-size:12px;line-height:2;max-height:510px;overflow:scroll;padding:15px;white-space:pre}.amp-notice{border-radius:12px;display:inline-flex;line-height:1.85}.amp-notice,.amp-notice p{font-size:14px}.amp-notice__body{flex-grow:1;text-align:right}.amp-notice__body .components-panel__body-toggle,.amp-notice__body .components-panel__body-toggle:focus:not(:disabled){color:var(--amp-settings-color-black);outline:none}.amp-notice--success{background-color:#ecfef1}.amp-notice__icon{align-items:center;justify-content:center}.amp-notice--info{background-color:#effbff}.amp-notice--info svg,.amp-notice--plain svg{color:var(--amp-settings-color-brand)}.amp-notice--warning{background-color:#fff9c8}.amp-notice--warning .amp-notice__icon svg{color:var(--amp-settings-color-warning);transform:rotate(-180deg)}.amp-notice--error{background-color:#ffefef}.amp-notice.amp-notice--plain{padding:1px 5px}.amp-notice--small{font-size:14px;line-height:1.5;padding:.375rem .75rem .5rem 1rem}.amp-notice__icon{display:flex}.amp-notice--small .amp-notice__icon{height:20px}.amp-notice--small svg{flex-grow:0;height:20px;margin-left:.5rem;width:20px}.amp-notice--large{align-items:center;display:inline-flex;padding:.5rem 1rem}.amp-notice--large p{margin-bottom:0;margin-top:0}.amp-notice--large svg{flex-grow:0;height:30px;margin-left:1rem;width:30px}.template-modes__header{margin-bottom:1.75rem}.template-mode-option__label{align-items:center;background-color:var(--amp-settings-color-background);display:flex;padding:0;width:100%}@media (min-width:783px){.template-mode-option__label{flex-wrap:wrap;padding:1.125rem 0 1.125rem 1.5rem}}.template-mode-selection__input-container{margin-left:.75rem}@media screen and (min-width:783px){.template-mode-selection__input-container{margin-left:1.5rem}}.template-mode-selection__illustration{align-items:center;display:flex;flex-shrink:0;width:40px}@media screen and (min-width:783px){.template-mode-selection__illustration{width:80px}}.template-mode-selection__illustration svg{height:auto;width:60px}.template-mode-option .amp-info{margin-bottom:0}@media screen and (min-width:783px){.template-mode-option .amp-info{margin-right:1.5rem}}.template-mode-selection__details{font-size:14px;margin-bottom:1rem;padding:1rem 1.5rem}@media (min-width:783px){.template-mode-selection__details{padding:1rem 3rem}}.template-mode-selection__details-list{list-style:disc;padding-right:1.625rem}.template-mode-option .components-panel__row{margin-right:-16px}.template-mode-option .amp-notice .components-panel__body-toggle.components-button{font-family:var(--font-noto);font-size:14px;font-weight:400;line-height:1.85;padding-right:0}.template-mode-option .amp-notice .components-panel__body-title:hover{background:#0000!important}.template-mode-option .amp-notice .components-panel__body-title button .components-panel__arrow{display:none;top:1.125rem}.template-mode-selection__description{align-items:center;display:flex;flex-grow:1;flex-wrap:wrap;justify-content:flex-start;padding:0 1rem 0 0}@media screen and (min-width:783px){.template-mode-selection__description{margin-bottom:0}}.template-mode-selection__label-extra{display:none;font-size:14px;margin:0 auto 0 0}@media screen and (min-width:783px){.template-mode-selection__label-extra{display:block}}.template-mode-selection__label-extra .amp-notice--small{font-size:14px}.template-mode-option>.amp-notice .components-panel__arrow{left:0}.template-mode-option .components-panel__body-title{left:0;position:absolute;top:0}.template-mode-option .components-panel__body-title:hover{background:#0000}.template-mode-option .components-panel__body-toggle:active,.template-mode-option .components-panel__body-toggle:focus,.template-mode-option .components-panel__body-toggle:hover{color:inherit}.template-mode-option .components-panel__arrow{height:2rem;width:2rem}.template-mode-option .components-panel__body{border-bottom-width:0;border-top-width:0}.template-mode-option .components-panel__row{flex-wrap:wrap}.template-mode-option .components-panel__row>*{width:100%}.template-mode-option .reader-themes{margin-top:1.5rem}.template-mode-option .reader-themes__current-theme{font-weight:400;margin-right:.5rem}.amp-drawer{--panel-button-width:56px;--heading-height:92px}@media (min-width:783px){.amp-drawer{--panel-button-width:112px;--heading-height:92px}}.amp-drawer{margin-bottom:1rem;padding:0;position:relative}.amp-drawer__heading{align-items:center;display:flex;flex-grow:1;height:var(--heading-height);overflow:hidden;padding-left:.75rem;padding-right:.75rem;right:0}@media (min-width:783px){.amp-drawer__heading{padding-right:3rem}.amp-drawer--handle-type-full-width .amp-drawer__heading{padding-left:3rem}}.amp-drawer__heading h3{margin-bottom:0}.amp-drawer__heading svg{margin-left:1rem}.amp-drawer__label-extra svg{fill:none}.amp .amp-drawer .components-panel__body-title{border-radius:5px;height:var(--heading-height);margin:0 auto 0 0}.amp .amp-drawer .is-opened .components-panel__body-title{border-radius:5px 5px 0 0}.amp .amp-drawer.components-panel__body-title,.amp.amp .amp-drawer .components-panel__body-toggle{align-items:center;border-radius:5px;display:flex}.amp .amp-drawer .components-panel__body-title button{border-radius:0;height:100%;width:100%}.amp.amp .amp-drawer .components-panel__body-toggle:focus:not(:disabled){outline:none}.amp .amp-drawer .components-panel__body-title>button>span{align-items:center;display:flex;justify-content:center;order:100;width:var(--panel-button-width)}.amp .amp-drawer .components-panel__body-toggle.components-button .components-panel__arrow{height:30px;position:static;transform:none;width:30px}@media (min-width:783px){.amp .amp-drawer .components-panel__body-toggle.components-button .components-panel__arrow{height:45px;width:45px}}.amp .amp-drawer--handle-type-full-width .components-panel__body-title>button>svg{margin-right:auto}@media (min-width:783px){.amp .amp-drawer--handle-type-full-width .components-panel__body-title>button>svg{margin-left:1rem}}.amp.amp .amp-drawer .components-panel__body-toggle{border-radius:5px}.amp .amp-drawer .components-panel__body-title .amp-notice{font-family:var(--font-default);font-weight:400}.amp .amp-drawer__panel-body{border-bottom-width:0;border-top-width:0;padding:0}.amp .amp-drawer__panel-body .components-panel__body-toggle{padding:0}.amp-drawer__panel-body-inner{border-top:1px solid var(--amp-settings-color-border)}.amp-drawer__panel-body-inner details{margin-bottom:1.5rem}.template-mode-selection__details p{font-size:14px;line-height:1.85}.amp .amp-drawer--handle-type-right .amp-drawer__heading{left:var(--panel-button-width);width:calc(100% - var(--panel-button-width))}.amp-drawer--handle-type-right .components-panel__body-title{width:var(--panel-button-width)}.amp .amp-drawer--handle-type-right .components-panel__body-title,.amp.amp .amp-drawer--handle-type-right .components-panel__body-toggle{background-color:initial;border-radius:5px 0 0 5px}.amp .amp-drawer--handle-type-right .is-opened .components-panel__body-title,.amp.amp .amp-drawer--handle-type-right .is-opened .components-panel__body-toggle{border-radius:5px 0 0 0}.amp .amp-drawer--handle-type-right .components-panel__body-title button{border-right:1px solid var(--amp-settings-color-border)}.amp-info{display:inline-block;font-size:14px;font-weight:600;margin-bottom:1rem}.amp-info__icon{float:right;margin:0 .5rem}.choose-reader-theme>p{font-size:1rem;margin-bottom:1.5rem}.choose-reader-theme__grid{grid-gap:40px;display:grid}@media screen and (min-width:600px){.choose-reader-theme__grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media screen and (min-width:1100px){.choose-reader-theme__grid{grid-template-columns:repeat(3,minmax(0,1fr))}}.choose-reader-theme__unavailable{padding-top:6rem}.choose-reader-theme__unavailable label{cursor:default}.theme-card{display:flex;flex-direction:column;flex-shrink:0;padding:1.5rem;position:relative}.theme-card p{font-size:14px}.theme-card--disabled{position:relative}.theme-card--disabled:before{background-color:#0000000d;bottom:0;content:"";left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:3}.theme-card__label-header{align-items:center;display:flex;padding:.75rem 0}.theme-card__label-header>input{flex-shrink:0}.amp .theme-card .theme-card__title{font-size:1rem;line-height:1.3;margin-bottom:0;margin-right:5px;margin-top:0}.theme-card img{height:auto;margin:auto;width:100%}p.theme-card__description{-webkit-box-orient:vertical;-webkit-line-clamp:3;display:-webkit-box;font-size:14px;line-height:1.666;overflow:hidden}.theme-card__theme-link{margin-top:auto}.theme-card__disabled-overlay{align-items:center;background:#ffffffe6;bottom:0;display:flex;font-size:1.122rem;font-weight:700;justify-content:center;left:0;position:absolute;right:0;top:0}.phone{background:#f1f1f1;border-radius:10px;display:flex;flex-direction:column;height:413px;margin-bottom:1rem;min-height:200px;padding:12px;position:relative}.phone>*{max-width:100%}.phone:before{background:#e6e6e6;border-radius:3px;content:"";display:block;height:5px;margin:9px auto;width:43px}.phone__inner{flex-grow:1;overflow:hidden;position:relative}.phone__inner,.phone__overlay{background-color:var(--amp-settings-color-dark-gray);display:flex}.phone__overlay{align-items:center;bottom:0;justify-content:center;left:0;opacity:0;pointer-events:none;position:absolute;right:0;top:0;transition:opacity .3s ease,visibility .3s ease;visibility:hidden}.phone.is-loading .phone__overlay{opacity:1;pointer-events:auto;visibility:visible}.done{grid-gap:15px 45px;display:grid}@media screen and (min-width:1280px){.done{grid-template-columns:auto auto;grid-template-rows:auto 1fr auto}}.done__heading{margin:0}@media screen and (min-width:1280px){.done__heading{grid-column:1/3}.done__content{grid-column:1/2}.done__content--primary{grid-row:2/3}.done__content--secondary{grid-row:3/4}}.done__icon-title{align-items:center;display:flex;flex-flow:row nowrap;line-height:1.25}.done__icon-title svg{flex:0 0 auto;height:auto;margin-left:25px;width:40px}.done__links-container{margin:25px auto;max-width:400px}.done__list{font-size:var(--amp-settings-font-size);list-style:disc;padding-right:30px}.done__preview-container{margin-left:auto;margin-right:auto;text-align:center}@media screen and (min-width:1280px){.done__preview-container{grid-column:2/3;grid-row:2/4}}.done__preview-container .amp-setting-toggle{margin:20px 0}.done__preview-container .amp-notice{margin-bottom:1.5rem}.done__preview-container .phone{height:auto;padding-bottom:2rem}.done__preview-container .phone:before{height:9px;width:80px}.done__preview-iframe{height:610px;width:400px}@media screen and (max-width:600px){.done__preview-iframe{width:300px}}.saving{border-bottom:2px solid #d3d9dd;margin:0 auto;max-width:800px;padding:3rem;text-align:center;width:100%}.saving h1{margin-top:.67em}.amp-setting-toggle p{font-size:14px}.amp .amp-setting-toggle .components-form-toggle{margin-left:.75rem}@media (min-width:783px){.amp .amp-setting-toggle .components-form-toggle{margin-left:2.25rem}}.amp-setting-toggle--disabled .components-form-toggle__input{opacity:.5;pointer-events:none}.amp-setting-toggle--disabled .components-toggle-control__label{pointer-events:none}@media (min-width:783px){.amp .amp-setting-toggle--compact .components-form-toggle{margin-left:1rem}}.amp .amp-setting-toggle--compact .amp-setting-toggle__label-text p,.nav-menu__item{margin:0}.nav-menu__item+.nav-menu__item{border-top:1px solid var(--amp-settings-color-border)}.amp .nav-menu__link{align-items:center;color:var(--amp-settings-color-muted);display:flex;flex-flow:row nowrap;font-size:14px;justify-content:space-between;padding:.75rem 1rem;-webkit-text-decoration:none;text-decoration:none;transition:background-color .12s ease}.amp .nav-menu__link.nav-menu__link--active,.amp .nav-menu__link:hover{background-color:var(--very-light-gray);color:var(--amp-settings-color-muted)}.amp .nav-menu__link:focus{box-shadow:none}.amp .nav-menu__link:after{border:2px solid;border-bottom:none;border-right:none;content:"";display:block;flex:0 0 auto;height:8px;margin-right:1rem;transform:rotate(-45deg);width:8px}.nav-menu.selectable{padding:0}.nav-menu.selectable .nav-menu__list{margin:0;padding:0 1rem}.nav-menu.selectable .nav-menu__link{margin:0 -1rem}.nav-menu.selectable .nav-menu__item:first-child .nav-menu__link{border-radius:8px 8px 0 0}.nav-menu.selectable .nav-menu__item:last-child .nav-menu__link{border-radius:0 0 8px 8px}.welcome{padding-bottom:45px;padding-top:30px}@media screen and (min-width:1000px){.welcome{padding-left:90px;padding-right:90px}}.welcome__header{border-bottom:2px solid #d3d9dd;margin-bottom:3rem;text-align:center}.welcome__header h1{margin:1.5rem auto;max-width:525px}.welcome__section{display:flex;padding-bottom:1.5rem}.welcome__section-icon{flex-shrink:0;width:64px}.welcome__section h4,.welcome__section p{font-family:var(--font-noto);font-size:1rem}.welcome__section h4{margin-bottom:7px;margin-top:0}.welcome__section p{line-height:1.5}.amp-settings-nav__prev-next{display:flex}.amp-settings-nav__prev-next>*{align-items:center;display:flex;height:36px}.amp-settings-nav__prev-next>.components-button+.components-button{margin-right:1rem}.amp-settings-nav__prev{margin-left:5px}.amp-settings-nav__prev svg{margin-left:.5rem;margin-right:0;transform:rotate(-180deg)}.amp-settings-nav__close{align-items:center;display:flex}.amp-settings-nav__close svg{margin-left:.5rem}PK.3Y�cv�GqGq/bunyad-amp/assets/css/amp-onboarding-wizard.css:root{--gray:#6c7781;--light-gray:#c4c4c4;--very-light-gray:#fafafc;--amp-brand:#2459e7;--amp-settings-color-black:#212121;--amp-settings-color-dark-gray:#333;--amp-settings-color-brand:#2459e7;--amp-settings-color-muted:#48525c;--amp-settings-color-border:#e8e8e8;--amp-settings-color-background:#fff;--amp-settings-color-background-light:#f8f8f8;--amp-settings-color-warning:#ff9f00;--font-noto:"Noto Sans",sans-serif;--font-poppins:poppins,sans-serif;--font-default:-apple-system,"BlinkMacSystemFont","Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif;--color-valid:#46b450;--amp-settings-color-danger:#dc3232;--color-gray-medium:#0000008a;--amp-settings-font-size:16px}.amp .components-button:not(.components-panel__body-toggle){align-items:center;border-radius:3px;color:var(--amp-settings-color-brand);font-size:1rem;font-weight:600;padding:.5rem 1rem}.amp .components-button:not(.components-panel__body-toggle) svg{fill:currentColor;height:18px;margin:0 .5rem;width:18px}.amp .components-panel__body-title button{font-size:16px;font-weight:600}.amp .components-panel__body-title:hover{background:var(--amp-settings-color-background)}.amp .components-button.is-link,.amp .components-button.is-link:hover,.amp .components-button.is-link:hover:not(:disabled),.amp .components-button:not(.components-panel__body-toggle):focus,.amp .components-button:not(.components-panel__body-toggle):focus:not(:disabled),.amp .components-button:not(.components-panel__body-toggle):hover{box-shadow:none;color:var(--amp-settings-color-brand);-webkit-text-decoration:none;text-decoration:none}.amp .components-button.is-secondary,.amp .components-button.is-secondary:hover,.amp .components-button.is-secondary:hover:not(:disabled){border-color:var(--amp-settings-color-brand);box-shadow:inset 0 0 0 1px var(--amp-settings-color-brand)}.amp.amp .components-button:focus:not(:disabled){outline:1px solid var(--amp-settings-color-brand)}.amp .components-button.is-primary{box-shadow:0 25px 20px #0000001a}.amp .components-button.is-primary,.amp .components-button.is-primary:active,.amp .components-button.is-primary:focus,.amp .components-button.is-primary:focus:not(:disabled),.amp .components-button.is-primary:hover,.amp .components-button.is-primary:hover:not(:disabled),.amp .components-button.is-primary:not(:disabled):not([aria-disabled=true]):hover{background:var(--amp-settings-color-brand);color:var(--amp-settings-color-background);text-shadow:none}.amp .components-button.is-primary:disabled{background:#0000004d;border-color:#0000004d;color:#fffc}.amp .components-button.is-primary:disabled.is-busy{background-image:linear-gradient(-45deg,var(--amp-settings-color-brand) 28%,#2459e7cc 28%,#2459e7cc 72%,var(--amp-settings-color-brand) 72%);background-size:100% 100%;border-color:var(--color-gray-medium)}.amp .components-toggle-control .components-base-control__field .components-toggle-control__label{display:flex;flex-wrap:wrap}.amp .components-button.is-small{font-size:.875rem}.amp .components-toggle-control .components-base-control__field{align-items:center;margin-bottom:0}.amp .components-form-toggle .components-form-toggle__track{border:2px solid var(--color-gray-medium)}.amp .components-form-toggle .components-form-toggle__thumb{background-color:var(--color-gray-medium);border-width:0;height:10px;left:4px;top:4px;width:10px}.amp .components-form-toggle.is-checked .components-form-toggle__thumb{background-color:var(--amp-settings-color-background)}.amp .components-form-toggle.is-checked .components-form-toggle__track{background-color:var(--amp-settings-color-brand);border-width:0}.amp .components-form-toggle__input:focus+.components-form-toggle__track{box-shadow:0 0 0 2px #fff,0 0 0 3.5px var(--amp-settings-color-brand)}.amp .components-checkbox-control__input[type=checkbox]:checked{background:var(--amp-settings-color-brand);border-color:var(--amp-settings-color-brand)}.amp .components-checkbox-control__input[type=checkbox]{border:2px solid var(--color-gray-medium);height:18px;width:18px}.amp svg.components-checkbox-control__checked{height:22px;left:0;width:18px}.amp input[type=checkbox]:checked:before{display:none}.amp .components-checkbox-control__input-container{display:inline-block;height:16px;margin-right:12px;position:relative;vertical-align:middle;width:16px}.amp svg.components-checkbox-control__checked{fill:#fff;position:absolute;top:-2px}.amp-settings-nav{align-items:center;background:var(--amp-settings-color-background);bottom:0;box-shadow:0 -5px 15px #0000000d;display:flex;justify-content:flex-end;left:0;position:fixed;right:0;z-index:2}.amp-settings-nav__inner{align-items:center;display:flex;justify-content:space-between;margin:0 auto;max-width:1320px;padding:15px;width:100%}@media screen and (min-width:783px){.amp-settings-nav__inner{padding:20px 90px}}.amp-settings-nav__inner .components-button{margin:5px 0}.amp a{color:var(--amp-settings-color-brand)}.amp h1,.amp h2,.amp h3,.amp h4,.amp h5,.amp h6,.components-button{font-family:var(--font-poppins)}.amp h1{font-size:2.125rem}.amp h2{font-size:1.5rem}.amp h3{font-size:1.2rem;line-height:1.5;margin-bottom:0;margin-top:0}.amp p{font-size:var(--amp-settings-font-size)}.amp,.amp *,.amp :after,.amp :before,.amp:after,.amp:before{box-sizing:border-box}.amp input[type=radio]{border-color:var(--gray);border-width:2px;box-shadow:none;height:1.5rem;width:1.5rem}.amp input[type=radio][disabled]{border-color:var(--amp-settings-color-border)}.amp input[type=radio]:checked{border-color:var(--amp-settings-color-brand)}.amp input[type=radio]:checked:before{background-color:var(--amp-settings-color-brand);height:12px;margin:.25rem;width:12px}.amp input[type=checkbox]:focus,.amp input[type=radio]:focus{border-color:var(--amp-settings-color-brand);box-shadow:0 0 0 1px var(--amp-settings-color-brand)}.amp details summary{cursor:pointer}body{background-color:#fafafc;font-family:Noto Sans,sans-serif}.amp-onboarding-wizard-container{--stepper-max-width:250px;--setup-page-max-width:1000px;margin:0 auto;max-width:1250px;max-width:calc(var(--stepper-max-width) + var(--setup-page-max-width));padding:20px 20px 10rem;width:100%}@media screen and (max-width:782px){.amp-onboarding-wizard-container{padding-bottom:5rem}}.amp-onboarding-wizard{display:flex;flex-direction:column;margin:0 auto;width:100%}@media screen and (min-width:783px){.amp-onboarding-wizard{flex-direction:row}}.amp-onboarding-wizard__logo-container{align-items:center;display:flex}.amp-onboarding-wizard__logo-container svg{height:42px;width:42px}.amp-onboarding-wizard__logo-container h1{-webkit-font-smoothing:antialiased;color:var(--amp-settings-color-brand);font-size:24px;font-weight:700;margin-left:.75rem}.amp-onboarding-wizard li>a,.amp-onboarding-wizard p a{color:var(--amp-settings-color-black);transition:color 80ms ease}.amp-onboarding-wizard li>a:hover,.amp-onboarding-wizard p a:hover{color:var(--amp-settings-color-brand)}.amp-onboarding-wizard-panel-container{margin-left:-20px;margin-right:-20px}@media screen and (min-width:783px){.amp-onboarding-wizard-panel-container{flex:1 1 auto;margin-left:0;margin-right:0;max-width:var(--setup-page-max-width);width:75%}}.amp-onboarding-wizard-panel{border-color:#0000;box-shadow:0 25px 60px #0000001a;max-width:var(--setup-page-max-width);min-height:496px;padding:20px;width:100%}@media screen and (min-width:783px){.amp-onboarding-wizard-panel{border-radius:10px;padding:40px}}.amp-onboarding-wizard-panel h1{line-height:1.1}@media screen and (min-width:783px){.amp-onboarding-wizard-panel h1{margin-top:0}}.amp-onboarding-wizard-plugin-name{color:var(--amp-settings-color-muted);font-size:16px;line-height:1.5;padding:.5rem 0 0}.amp-onboarding-wizard-plugin-name:after{border-bottom:2px solid var(--amp-settings-color-border);content:"";display:block;margin:15px auto;width:100%}@media screen and (min-width:783px){.amp-onboarding-wizard-plugin-name:after{margin-bottom:0}}.amp-stepper-container{width:100%}@media screen and (min-width:783px){.amp-stepper-container{flex:0 0 auto;max-width:var(--stepper-max-width);padding-right:40px;width:25%}}.amp .amp-stepper-container__header>.is-link{float:right;padding:8px}.amp-stepper ul{display:flex;justify-content:space-between;margin-top:0;width:100%}@media screen and (min-width:783px){.amp-stepper ul{flex-direction:column}}.amp-stepper__item{align-items:center;display:flex;font-size:14px;position:relative}@media screen and (min-width:783px){.amp-stepper__item{padding:15px 10px 8px 0}}.amp-stepper__item--active{border-radius:4px;font-weight:600}.amp-stepper__item:before{border-left:2px solid var(--amp-settings-color-border);bottom:-50%;content:"";left:11px;position:absolute;top:60%;z-index:1}@media screen and (max-width:784px){.amp-stepper__item:before{display:none}}.amp-stepper__item:last-of-type:before{display:none}.amp-stepper__item--done:before{border-left-color:var(--amp-settings-color-brand)}.amp-stepper__item-title{color:var(--amp-settings-color-muted);display:none;margin-left:18px}@media screen and (min-width:783px){.amp-stepper__item-title{display:inline-block}}.amp-stepper__bullet{align-items:center;background-color:var(--amp-settings-color-background);border:2px solid var(--amp-settings-color-border);border-radius:12px;color:var(--gray);content:attr(data-index);display:flex;height:24px;justify-content:center;position:relative;width:24px;z-index:2}.amp-stepper__bullet--check{background-color:var(--amp-settings-color-brand)}.amp-stepper__bullet--check,.amp-stepper__bullet--dot{border-color:var(--amp-settings-color-brand)}.amp-stepper__bullet--dot span{background-color:var(--amp-settings-color-brand);border-radius:5px;height:10px;width:10px}.grid{display:grid;gap:40px}@media screen and (min-width:783px){.grid-1-1{grid-template-columns:repeat(2,1fr)}.grid-1-2{grid-template-columns:1fr 2fr}.grid-2-1{grid-template-columns:2fr 1fr}.grid-1-3{grid-template-columns:1fr 3fr}.grid-3-1{grid-template-columns:3fr 1fr}.grid-5-4{grid-template-columns:5fr 4fr}}.error-screen-container,.error-screen-container *{box-sizing:border-box}.error-screen-container{margin:3rem auto;max-width:600px;padding:1.5rem;width:100%}.error-screen{background-color:#fff;border-left:4px solid #d54e21;padding:2.25rem;width:100%}.error-screen h1{font-family:var(--font-poppins);font-size:1.5rem;font-weight:600;line-height:1.4;margin:0 0 1rem}.error-screen p{font-family:var(--font-noto);font-size:1rem;line-height:1.5;margin:1rem 0;word-break:break-word}.error-screen pre{background:#f0f0f1;background:#00000012;font-size:13px;margin:1rem 1px;overflow:auto;padding:3px 5px 2px}.selectable{background-color:var(--amp-settings-color-background);border:2px solid var(--amp-settings-color-border);border-radius:8px;padding:1rem .75rem}@media (min-width:783px){.selectable{padding:1.25rem 2.5rem}}.selectable--left{box-shadow:-10px 0 0 var(--amp-settings-color-border);margin-right:-10px}.selectable--bottom{border:2px solid var(--amp-settings-color-border);box-shadow:0 10px 0 var(--amp-settings-color-border)}.selectable--selected{border-color:var(--amp-settings-color-brand);box-shadow:-10px 0 0 var(--amp-settings-color-brand)}.selectable--bottom.selectable--selected{box-shadow:0 10px 0 var(--amp-settings-color-brand)}.technical-background__header{border-bottom:2px solid #d3d9dd;margin-bottom:1.75rem;padding-bottom:1.75rem}.technical-background__header p{font-size:14px;margin:0}.technical-background-option-container{margin-bottom:2rem;padding:1.5rem 0}.technical-background-option{align-items:flex-start;display:flex;flex-wrap:wrap}@media screen and (min-width:783px){.technical-background-option{align-items:center;flex-wrap:nowrap}}.technical-background-option__input-container{padding:1.5rem}.technical-background-option svg{flex-shrink:0;height:auto;margin-bottom:1rem;width:66px}@media screen and (min-width:783px){.technical-background-option svg{margin-bottom:0}}.technical-background-option__description{padding:0 2rem}.technical-background-option__description p{font-size:14px}.technical-background-option__description h2{font-family:Noto Sans,sans-serif;font-size:1rem;line-height:1.5}@media screen and (max-width:782px){.technical-background-option__description h2{margin-top:0}}.amp-spinner-container{align-items:center;display:flex;justify-content:center}.amp-spinner-container--inline{display:inline-flex;margin:0 .5em;vertical-align:middle}.amp-spinner-container .components-spinner{margin:0}.site-scan__section+.site-scan__section{margin-top:1.5rem}.site-scan__header{align-items:center;border-bottom:1px solid var(--amp-settings-color-border);display:flex;flex-flow:row nowrap;padding-bottom:1rem;padding-top:.5rem}.site-scan__heading{font-size:16px;font-weight:700;margin-left:2rem}:root{--amp-progress-bar-color:var(--amp-brand);--amp-progress-bar-height:34px}.progress-bar{border:2px solid var(--amp-progress-bar-color);height:34px;height:var(--amp-progress-bar-height);margin-bottom:1.5rem;margin-top:1.5rem}.progress-bar,.progress-bar__track{border-radius:34px;border-radius:var(--amp-progress-bar-height);overflow:hidden}.progress-bar__track{height:calc(100% - 8px);margin:4px;position:relative;transform:scale(1);width:calc(100% - 8px)}.progress-bar__indicator{background-color:var(--amp-brand);background-color:var(--amp-progress-bar-color);border-radius:34px;border-radius:var(--amp-progress-bar-height);height:100%;left:0;position:absolute;top:0;transition:transform .8s ease-out;width:100%}.site-scan-results{padding:0}.site-scan-results+.site-scan-results{margin-top:1.5rem}.site-scan-results__header{align-items:center;border-bottom:1px solid var(--amp-settings-color-border);display:flex;flex-flow:row nowrap;padding:.5rem}@media(min-width:783px){.site-scan-results__header{padding:1rem 2rem}}.site-scan-results__heading{font-size:16px;font-weight:700;margin-left:1rem}.site-scan-results__heading[data-badge-content]:after{align-items:center;background-color:var(--light-gray);border-radius:50%;content:attr(data-badge-content);display:inline-flex;height:30px;justify-content:center;letter-spacing:-.05em;margin:0 .5rem;width:30px}.site-scan-results__content{padding:1rem .5rem}@media(min-width:783px){.site-scan-results__content{padding:1.25rem 2rem}}.site-scan-results__sources{border:2px solid var(--amp-settings-color-border)}.site-scan-results__source{align-items:center;font-size:14px;margin:0;max-width:100%;min-height:3.5rem;padding:1rem}.site-scan-results__source details{margin:0;width:100%}.site-scan-results__source:nth-child(2n){background-color:var(--amp-settings-color-background-light)}.site-scan-results__source+.site-scan-results__source{border-top:2px solid var(--amp-settings-color-border)}.site-scan-results__source-name{font-weight:700}.site-scan-results__source-name--inactive{color:var(--gray)}.site-scan-results__source-author:before{border-left:1px solid;content:"";display:inline-block;height:1em;margin:0 .5em;vertical-align:middle}.site-scan-results__source .site-scan-results__summary-wrapper{align-items:center;display:inline-flex;margin-left:4px;width:calc(100% - 20px)}.site-scan-results__source-notice,.site-scan-results__source-version{margin-left:auto}.site-scan-results__cta.site-scan-results__cta{font-size:14px;margin-bottom:0}.site-scan-results__cta.site-scan-results__cta .components-external-link__icon{fill:var(--amp-settings-color-brand)}.site-scan-results__urls-list{margin:1.5rem 0;padding:0 1rem}.site-scan-results__detail-body p{font-size:14px}.site-scan-results__source-detail{background-color:#fff;border:1px solid #dedede;border-radius:5px;font-size:12px;line-height:2;max-height:510px;overflow:scroll;padding:15px;white-space:pre}.amp-notice{border-radius:12px;display:inline-flex;line-height:1.85}.amp-notice,.amp-notice p{font-size:14px}.amp-notice__body{flex-grow:1;text-align:left}.amp-notice__body .components-panel__body-toggle,.amp-notice__body .components-panel__body-toggle:focus:not(:disabled){color:var(--amp-settings-color-black);outline:none}.amp-notice--success{background-color:#ecfef1}.amp-notice__icon{align-items:center;justify-content:center}.amp-notice--info{background-color:#effbff}.amp-notice--info svg,.amp-notice--plain svg{color:var(--amp-settings-color-brand)}.amp-notice--warning{background-color:#fff9c8}.amp-notice--warning .amp-notice__icon svg{color:var(--amp-settings-color-warning);transform:rotate(180deg)}.amp-notice--error{background-color:#ffefef}.amp-notice.amp-notice--plain{padding:1px 5px}.amp-notice--small{font-size:14px;line-height:1.5;padding:.375rem 1rem .5rem .75rem}.amp-notice__icon{display:flex}.amp-notice--small .amp-notice__icon{height:20px}.amp-notice--small svg{flex-grow:0;height:20px;margin-right:.5rem;width:20px}.amp-notice--large{align-items:center;display:inline-flex;padding:.5rem 1rem}.amp-notice--large p{margin-bottom:0;margin-top:0}.amp-notice--large svg{flex-grow:0;height:30px;margin-right:1rem;width:30px}.template-modes__header{margin-bottom:1.75rem}.template-mode-option__label{align-items:center;background-color:var(--amp-settings-color-background);display:flex;padding:0;width:100%}@media (min-width:783px){.template-mode-option__label{flex-wrap:wrap;padding:1.125rem 1.5rem 1.125rem 0}}.template-mode-selection__input-container{margin-right:.75rem}@media screen and (min-width:783px){.template-mode-selection__input-container{margin-right:1.5rem}}.template-mode-selection__illustration{align-items:center;display:flex;flex-shrink:0;width:40px}@media screen and (min-width:783px){.template-mode-selection__illustration{width:80px}}.template-mode-selection__illustration svg{height:auto;width:60px}.template-mode-option .amp-info{margin-bottom:0}@media screen and (min-width:783px){.template-mode-option .amp-info{margin-left:1.5rem}}.template-mode-selection__details{font-size:14px;margin-bottom:1rem;padding:1rem 1.5rem}@media (min-width:783px){.template-mode-selection__details{padding:1rem 3rem}}.template-mode-selection__details-list{list-style:disc;padding-left:1.625rem}.template-mode-option .components-panel__row{margin-left:-16px}.template-mode-option .amp-notice .components-panel__body-toggle.components-button{font-family:var(--font-noto);font-size:14px;font-weight:400;line-height:1.85;padding-left:0}.template-mode-option .amp-notice .components-panel__body-title:hover{background:#0000!important}.template-mode-option .amp-notice .components-panel__body-title button .components-panel__arrow{display:none;top:1.125rem}.template-mode-selection__description{align-items:center;display:flex;flex-grow:1;flex-wrap:wrap;justify-content:flex-start;padding:0 0 0 1rem}@media screen and (min-width:783px){.template-mode-selection__description{margin-bottom:0}}.template-mode-selection__label-extra{display:none;font-size:14px;margin:0 0 0 auto}@media screen and (min-width:783px){.template-mode-selection__label-extra{display:block}}.template-mode-selection__label-extra .amp-notice--small{font-size:14px}.template-mode-option>.amp-notice .components-panel__arrow{right:0}.template-mode-option .components-panel__body-title{position:absolute;right:0;top:0}.template-mode-option .components-panel__body-title:hover{background:#0000}.template-mode-option .components-panel__body-toggle:active,.template-mode-option .components-panel__body-toggle:focus,.template-mode-option .components-panel__body-toggle:hover{color:inherit}.template-mode-option .components-panel__arrow{height:2rem;width:2rem}.template-mode-option .components-panel__body{border-bottom-width:0;border-top-width:0}.template-mode-option .components-panel__row{flex-wrap:wrap}.template-mode-option .components-panel__row>*{width:100%}.template-mode-option .reader-themes{margin-top:1.5rem}.template-mode-option .reader-themes__current-theme{font-weight:400;margin-left:.5rem}.amp-drawer{--panel-button-width:56px;--heading-height:92px}@media (min-width:783px){.amp-drawer{--panel-button-width:112px;--heading-height:92px}}.amp-drawer{margin-bottom:1rem;padding:0;position:relative}.amp-drawer__heading{align-items:center;display:flex;flex-grow:1;height:var(--heading-height);left:0;overflow:hidden;padding-left:.75rem;padding-right:.75rem}@media (min-width:783px){.amp-drawer__heading{padding-left:3rem}.amp-drawer--handle-type-full-width .amp-drawer__heading{padding-right:3rem}}.amp-drawer__heading h3{margin-bottom:0}.amp-drawer__heading svg{margin-right:1rem}.amp-drawer__label-extra svg{fill:none}.amp .amp-drawer .components-panel__body-title{border-radius:5px;height:var(--heading-height);margin:0 0 0 auto}.amp .amp-drawer .is-opened .components-panel__body-title{border-radius:5px 5px 0 0}.amp .amp-drawer.components-panel__body-title,.amp.amp .amp-drawer .components-panel__body-toggle{align-items:center;border-radius:5px;display:flex}.amp .amp-drawer .components-panel__body-title button{border-radius:0;height:100%;width:100%}.amp.amp .amp-drawer .components-panel__body-toggle:focus:not(:disabled){outline:none}.amp .amp-drawer .components-panel__body-title>button>span{align-items:center;display:flex;justify-content:center;order:100;width:var(--panel-button-width)}.amp .amp-drawer .components-panel__body-toggle.components-button .components-panel__arrow{height:30px;position:static;transform:none;width:30px}@media (min-width:783px){.amp .amp-drawer .components-panel__body-toggle.components-button .components-panel__arrow{height:45px;width:45px}}.amp .amp-drawer--handle-type-full-width .components-panel__body-title>button>svg{margin-left:auto}@media (min-width:783px){.amp .amp-drawer--handle-type-full-width .components-panel__body-title>button>svg{margin-right:1rem}}.amp.amp .amp-drawer .components-panel__body-toggle{border-radius:5px}.amp .amp-drawer .components-panel__body-title .amp-notice{font-family:var(--font-default);font-weight:400}.amp .amp-drawer__panel-body{border-bottom-width:0;border-top-width:0;padding:0}.amp .amp-drawer__panel-body .components-panel__body-toggle{padding:0}.amp-drawer__panel-body-inner{border-top:1px solid var(--amp-settings-color-border)}.amp-drawer__panel-body-inner details{margin-bottom:1.5rem}.template-mode-selection__details p{font-size:14px;line-height:1.85}.amp .amp-drawer--handle-type-right .amp-drawer__heading{right:var(--panel-button-width);width:calc(100% - var(--panel-button-width))}.amp-drawer--handle-type-right .components-panel__body-title{width:var(--panel-button-width)}.amp .amp-drawer--handle-type-right .components-panel__body-title,.amp.amp .amp-drawer--handle-type-right .components-panel__body-toggle{background-color:initial;border-radius:0 5px 5px 0}.amp .amp-drawer--handle-type-right .is-opened .components-panel__body-title,.amp.amp .amp-drawer--handle-type-right .is-opened .components-panel__body-toggle{border-radius:0 5px 0 0}.amp .amp-drawer--handle-type-right .components-panel__body-title button{border-left:1px solid var(--amp-settings-color-border)}.amp-info{display:inline-block;font-size:14px;font-weight:600;margin-bottom:1rem}.amp-info__icon{float:left;margin:0 .5rem}.choose-reader-theme>p{font-size:1rem;margin-bottom:1.5rem}.choose-reader-theme__grid{grid-gap:40px;display:grid}@media screen and (min-width:600px){.choose-reader-theme__grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media screen and (min-width:1100px){.choose-reader-theme__grid{grid-template-columns:repeat(3,minmax(0,1fr))}}.choose-reader-theme__unavailable{padding-top:6rem}.choose-reader-theme__unavailable label{cursor:default}.theme-card{display:flex;flex-direction:column;flex-shrink:0;padding:1.5rem;position:relative}.theme-card p{font-size:14px}.theme-card--disabled{position:relative}.theme-card--disabled:before{background-color:#0000000d;bottom:0;content:"";left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:3}.theme-card__label-header{align-items:center;display:flex;padding:.75rem 0}.theme-card__label-header>input{flex-shrink:0}.amp .theme-card .theme-card__title{font-size:1rem;line-height:1.3;margin-bottom:0;margin-left:5px;margin-top:0}.theme-card img{height:auto;margin:auto;width:100%}p.theme-card__description{-webkit-box-orient:vertical;-webkit-line-clamp:3;display:-webkit-box;font-size:14px;line-height:1.666;overflow:hidden}.theme-card__theme-link{margin-top:auto}.theme-card__disabled-overlay{align-items:center;background:#ffffffe6;bottom:0;display:flex;font-size:1.122rem;font-weight:700;justify-content:center;left:0;position:absolute;right:0;top:0}.phone{background:#f1f1f1;border-radius:10px;display:flex;flex-direction:column;height:413px;margin-bottom:1rem;min-height:200px;padding:12px;position:relative}.phone>*{max-width:100%}.phone:before{background:#e6e6e6;border-radius:3px;content:"";display:block;height:5px;margin:9px auto;width:43px}.phone__inner{flex-grow:1;overflow:hidden;position:relative}.phone__inner,.phone__overlay{background-color:var(--amp-settings-color-dark-gray);display:flex}.phone__overlay{align-items:center;bottom:0;justify-content:center;left:0;opacity:0;pointer-events:none;position:absolute;right:0;top:0;transition:opacity .3s ease,visibility .3s ease;visibility:hidden}.phone.is-loading .phone__overlay{opacity:1;pointer-events:auto;visibility:visible}.done{grid-gap:15px 45px;display:grid}@media screen and (min-width:1280px){.done{grid-template-columns:auto auto;grid-template-rows:auto 1fr auto}}.done__heading{margin:0}@media screen and (min-width:1280px){.done__heading{grid-column:1/3}.done__content{grid-column:1/2}.done__content--primary{grid-row:2/3}.done__content--secondary{grid-row:3/4}}.done__icon-title{align-items:center;display:flex;flex-flow:row nowrap;line-height:1.25}.done__icon-title svg{flex:0 0 auto;height:auto;margin-right:25px;width:40px}.done__links-container{margin:25px auto;max-width:400px}.done__list{font-size:var(--amp-settings-font-size);list-style:disc;padding-left:30px}.done__preview-container{margin-left:auto;margin-right:auto;text-align:center}@media screen and (min-width:1280px){.done__preview-container{grid-column:2/3;grid-row:2/4}}.done__preview-container .amp-setting-toggle{margin:20px 0}.done__preview-container .amp-notice{margin-bottom:1.5rem}.done__preview-container .phone{height:auto;padding-bottom:2rem}.done__preview-container .phone:before{height:9px;width:80px}.done__preview-iframe{height:610px;width:400px}@media screen and (max-width:600px){.done__preview-iframe{width:300px}}.saving{border-bottom:2px solid #d3d9dd;margin:0 auto;max-width:800px;padding:3rem;text-align:center;width:100%}.saving h1{margin-top:.67em}.amp-setting-toggle p{font-size:14px}.amp .amp-setting-toggle .components-form-toggle{margin-right:.75rem}@media (min-width:783px){.amp .amp-setting-toggle .components-form-toggle{margin-right:2.25rem}}.amp-setting-toggle--disabled .components-form-toggle__input{opacity:.5;pointer-events:none}.amp-setting-toggle--disabled .components-toggle-control__label{pointer-events:none}@media (min-width:783px){.amp .amp-setting-toggle--compact .components-form-toggle{margin-right:1rem}}.amp .amp-setting-toggle--compact .amp-setting-toggle__label-text p,.nav-menu__item{margin:0}.nav-menu__item+.nav-menu__item{border-top:1px solid var(--amp-settings-color-border)}.amp .nav-menu__link{align-items:center;color:var(--amp-settings-color-muted);display:flex;flex-flow:row nowrap;font-size:14px;justify-content:space-between;padding:.75rem 1rem;-webkit-text-decoration:none;text-decoration:none;transition:background-color .12s ease}.amp .nav-menu__link.nav-menu__link--active,.amp .nav-menu__link:hover{background-color:var(--very-light-gray);color:var(--amp-settings-color-muted)}.amp .nav-menu__link:focus{box-shadow:none}.amp .nav-menu__link:after{border:2px solid;border-bottom:none;border-left:none;content:"";display:block;flex:0 0 auto;height:8px;margin-left:1rem;transform:rotate(45deg);width:8px}.nav-menu.selectable{padding:0}.nav-menu.selectable .nav-menu__list{margin:0;padding:0 1rem}.nav-menu.selectable .nav-menu__link{margin:0 -1rem}.nav-menu.selectable .nav-menu__item:first-child .nav-menu__link{border-radius:8px 8px 0 0}.nav-menu.selectable .nav-menu__item:last-child .nav-menu__link{border-radius:0 0 8px 8px}.welcome{padding-bottom:45px;padding-top:30px}@media screen and (min-width:1000px){.welcome{padding-left:90px;padding-right:90px}}.welcome__header{border-bottom:2px solid #d3d9dd;margin-bottom:3rem;text-align:center}.welcome__header h1{margin:1.5rem auto;max-width:525px}.welcome__section{display:flex;padding-bottom:1.5rem}.welcome__section-icon{flex-shrink:0;width:64px}.welcome__section h4,.welcome__section p{font-family:var(--font-noto);font-size:1rem}.welcome__section h4{margin-bottom:7px;margin-top:0}.welcome__section p{line-height:1.5}.amp-settings-nav__prev-next{display:flex}.amp-settings-nav__prev-next>*{align-items:center;display:flex;height:36px}.amp-settings-nav__prev-next>.components-button+.components-button{margin-left:1rem}.amp-settings-nav__prev{margin-right:5px}.amp-settings-nav__prev svg{margin-left:0;margin-right:.5rem;transform:rotate(180deg)}.amp-settings-nav__close{align-items:center;display:flex}.amp-settings-nav__close svg{margin-right:.5rem}PK.3Y��b �	�	5bunyad-amp/assets/css/amp-paired-browsing-app-rtl.cssbody,html{height:100%;margin:0;padding:0;width:100%}body{display:flex;flex-direction:column}body *{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif}#header{height:32px}#header *{color:#fff}#header ul{display:flex;height:100%;list-style:none;margin:0;padding:0}#header li{align-items:center;display:flex;line-height:1.5}#header .iframe-label{font-weight:600;justify-content:center;margin:0 auto;width:50%}#header .iframe-label.amp{background-color:#0075c2}#header .iframe-label.non-amp{background-color:#666}.iframe-label .dashicons-migrate,.iframe-label a{-webkit-text-decoration:none;text-decoration:none}.iframe-label .dashicons-migrate{padding-right:4px;vertical-align:text-top}.iframe-label a:focus,.iframe-label a:hover{-webkit-text-decoration:underline;text-decoration:underline}#amp,#non-amp{align-self:stretch;flex:1 0 auto}#non-amp{border-left:1px solid #666}#amp{border-right:1px solid #0075c2}.container{display:flex;height:100%}iframe{border:0;height:100%;width:100%}.disconnect-overlay{background-color:#0006;display:none;height:100%;overflow-y:auto;position:fixed;text-align:center;width:50%}.disconnect-overlay:before{content:" ";display:inline-block;height:100%;vertical-align:middle}.disconnect-overlay.disconnected{display:block}.disconnect-overlay	.dialog{background-color:#fff;border-radius:5px;display:inline-block;margin:20px 0;padding:0 20px;pointer-events:auto;position:static;vertical-align:middle;width:480px}.disconnect-overlay.amp{right:50%}.disconnect-overlay .dialog .dialog-icon{margin:20px auto}.disconnect-overlay .dialog .dialog-icon .dashicons-warning{color:#fe7f2d;font-size:80px;height:80px;width:80px}.disconnect-overlay .dialog .dialog-text{font-size:16px;max-width:calc(100% - 20px);overflow-wrap:break-word;padding:0 10px}.disconnect-overlay .dialog .dialog-buttons{margin-top:13px;padding:13px 16px}.disconnect-overlay .dialog .dialog-buttons .button{background:#efefef;border:none;border-radius:5px;box-shadow:none;color:#000;cursor:pointer;display:inline-block;font-size:14px;font-weight:600;margin:5px;padding:10px 24px;-webkit-text-decoration:none;text-decoration:none}.skip-link{position:absolute;right:-9999rem;top:2.5rem;z-index:999999999}.skip-link:focus{clip:auto;background-color:#fff;border-radius:3px;box-shadow:0 0 2px 2px #0009;-webkit-clip-path:none;clip-path:none;color:#0075c2;display:block;font-size:14px;font-weight:600;height:auto;left:auto;line-height:normal;padding:15px 23px 14px;right:6px;top:7px;width:auto;z-index:100000}PK.3Yl#��	�	1bunyad-amp/assets/css/amp-paired-browsing-app.cssbody,html{height:100%;margin:0;padding:0;width:100%}body{display:flex;flex-direction:column}body *{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif}#header{height:32px}#header *{color:#fff}#header ul{display:flex;height:100%;list-style:none;margin:0;padding:0}#header li{align-items:center;display:flex;line-height:1.5}#header .iframe-label{font-weight:600;justify-content:center;margin:0 auto;width:50%}#header .iframe-label.amp{background-color:#0075c2}#header .iframe-label.non-amp{background-color:#666}.iframe-label .dashicons-migrate,.iframe-label a{-webkit-text-decoration:none;text-decoration:none}.iframe-label .dashicons-migrate{padding-left:4px;vertical-align:text-top}.iframe-label a:focus,.iframe-label a:hover{-webkit-text-decoration:underline;text-decoration:underline}#amp,#non-amp{align-self:stretch;flex:1 0 auto}#non-amp{border-right:1px solid #666}#amp{border-left:1px solid #0075c2}.container{display:flex;height:100%}iframe{border:0;height:100%;width:100%}.disconnect-overlay{background-color:#0006;display:none;height:100%;overflow-y:auto;position:fixed;text-align:center;width:50%}.disconnect-overlay:before{content:" ";display:inline-block;height:100%;vertical-align:middle}.disconnect-overlay.disconnected{display:block}.disconnect-overlay	.dialog{background-color:#fff;border-radius:5px;display:inline-block;margin:20px 0;padding:0 20px;pointer-events:auto;position:static;vertical-align:middle;width:480px}.disconnect-overlay.amp{left:50%}.disconnect-overlay .dialog .dialog-icon{margin:20px auto}.disconnect-overlay .dialog .dialog-icon .dashicons-warning{color:#fe7f2d;font-size:80px;height:80px;width:80px}.disconnect-overlay .dialog .dialog-text{font-size:16px;max-width:calc(100% - 20px);overflow-wrap:break-word;padding:0 10px}.disconnect-overlay .dialog .dialog-buttons{margin-top:13px;padding:13px 16px}.disconnect-overlay .dialog .dialog-buttons .button{background:#efefef;border:none;border-radius:5px;box-shadow:none;color:#000;cursor:pointer;display:inline-block;font-size:14px;font-weight:600;margin:5px;padding:10px 24px;-webkit-text-decoration:none;text-decoration:none}.skip-link{left:-9999rem;position:absolute;top:2.5rem;z-index:999999999}.skip-link:focus{clip:auto;background-color:#fff;border-radius:3px;box-shadow:0 0 2px 2px #0009;-webkit-clip-path:none;clip-path:none;color:#0075c2;display:block;font-size:14px;font-weight:600;height:auto;left:6px;line-height:normal;padding:15px 23px 14px;right:auto;top:7px;width:auto;z-index:100000}PK.3Y�����4bunyad-amp/assets/css/amp-playlist-shortcode-rtl.css.wp-playlist .wp-playlist-current-item img{float:right;margin-left:10px}.wp-playlist audio{display:block}.wp-playlist .amp-carousel-button{visibility:hidden}PK.3Y�!ĝ�0bunyad-amp/assets/css/amp-playlist-shortcode.css.wp-playlist .wp-playlist-current-item img{float:left;margin-right:10px}.wp-playlist audio{display:block}.wp-playlist .amp-carousel-button{visibility:hidden}PK.3Y��Hp��/bunyad-amp/assets/css/amp-post-meta-box-rtl.css.wp-core-ui #preview-action.has-amp-preview #post-preview{border-bottom-left-radius:0;border-top-left-radius:0;float:none}.wp-core-ui #amp-post-preview.preview{border-bottom-right-radius:0;border-top-right-radius:0;padding-left:14px;padding-right:14px;position:relative;text-indent:-9999px}.wp-core-ui #amp-post-preview.preview:after{background:no-repeat 50% url(../images/amp-icon.svg);background-size:14px!important;bottom:0;content:"icon";display:block;left:0;position:absolute;right:0;top:0}.wp-core-ui #amp-post-preview.preview.disabled:after{opacity:.6}.misc-amp-status .amp-icon{background:#0000 url(../images/amp-icon.svg) no-repeat 100%;background-size:17px;float:right;height:17px;margin:0 1px 0 8px;width:17px}#amp-status-select fieldset{margin:7px 1px 0 0}#amp-status-select .notice{margin:10px 3px -5px 0}.amp-status-actions{margin-top:10px}@media screen and (max-width:782px){#amp-status-select{line-height:2.8}}PK.3Y�0X���+bunyad-amp/assets/css/amp-post-meta-box.css.wp-core-ui #preview-action.has-amp-preview #post-preview{border-bottom-right-radius:0;border-top-right-radius:0;float:none}.wp-core-ui #amp-post-preview.preview{border-bottom-left-radius:0;border-top-left-radius:0;padding-left:14px;padding-right:14px;position:relative;text-indent:-9999px}.wp-core-ui #amp-post-preview.preview:after{background:no-repeat 50% url(../images/amp-icon.svg);background-size:14px!important;bottom:0;content:"icon";display:block;left:0;position:absolute;right:0;top:0}.wp-core-ui #amp-post-preview.preview.disabled:after{opacity:.6}.misc-amp-status .amp-icon{background:#0000 url(../images/amp-icon.svg) no-repeat 0;background-size:17px;float:left;height:17px;margin:0 8px 0 1px;width:17px}#amp-status-select fieldset{margin:7px 0 0 1px}#amp-status-select .notice{margin:10px 0 -5px 3px}.amp-status-actions{margin-top:10px}@media screen and (max-width:782px){#amp-status-select{line-height:2.8}}PK.3Y
� ~~*bunyad-amp/assets/css/amp-settings-rtl.css:root{--gray:#6c7781;--light-gray:#c4c4c4;--very-light-gray:#fafafc;--amp-brand:#2459e7;--amp-settings-color-black:#212121;--amp-settings-color-dark-gray:#333;--amp-settings-color-brand:#2459e7;--amp-settings-color-muted:#48525c;--amp-settings-color-border:#e8e8e8;--amp-settings-color-background:#fff;--amp-settings-color-background-light:#f8f8f8;--amp-settings-color-warning:#ff9f00;--font-noto:"Noto Sans",sans-serif;--font-poppins:poppins,sans-serif;--font-default:-apple-system,"BlinkMacSystemFont","Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif;--color-valid:#46b450;--amp-settings-color-danger:#dc3232;--color-gray-medium:#0000008a;--amp-settings-font-size:16px}.amp a{color:var(--amp-settings-color-brand)}.amp h1,.amp h2,.amp h3,.amp h4,.amp h5,.amp h6,.components-button{font-family:var(--font-poppins)}.amp h1{font-size:2.125rem}.amp h2{font-size:1.5rem}.amp h3{font-size:1.2rem;line-height:1.5;margin-bottom:0;margin-top:0}.amp p{font-size:var(--amp-settings-font-size)}.amp,.amp *,.amp :after,.amp :before,.amp:after,.amp:before{box-sizing:border-box}.amp input[type=radio]{border-color:var(--gray);border-width:2px;box-shadow:none;height:1.5rem;width:1.5rem}.amp input[type=radio][disabled]{border-color:var(--amp-settings-color-border)}.amp input[type=radio]:checked{border-color:var(--amp-settings-color-brand)}.amp input[type=radio]:checked:before{background-color:var(--amp-settings-color-brand);height:12px;margin:.25rem;width:12px}.amp input[type=checkbox]:focus,.amp input[type=radio]:focus{border-color:var(--amp-settings-color-brand);box-shadow:0 0 0 1px var(--amp-settings-color-brand)}.amp details summary{cursor:pointer}.amp .components-button:not(.components-panel__body-toggle){align-items:center;border-radius:3px;color:var(--amp-settings-color-brand);font-size:1rem;font-weight:600;padding:.5rem 1rem}.amp .components-button:not(.components-panel__body-toggle) svg{fill:currentColor;height:18px;margin:0 .5rem;width:18px}.amp .components-panel__body-title button{font-size:16px;font-weight:600}.amp .components-panel__body-title:hover{background:var(--amp-settings-color-background)}.amp .components-button.is-link,.amp .components-button.is-link:hover,.amp .components-button.is-link:hover:not(:disabled),.amp .components-button:not(.components-panel__body-toggle):focus,.amp .components-button:not(.components-panel__body-toggle):focus:not(:disabled),.amp .components-button:not(.components-panel__body-toggle):hover{box-shadow:none;color:var(--amp-settings-color-brand);-webkit-text-decoration:none;text-decoration:none}.amp .components-button.is-secondary,.amp .components-button.is-secondary:hover,.amp .components-button.is-secondary:hover:not(:disabled){border-color:var(--amp-settings-color-brand);box-shadow:inset 0 0 0 1px var(--amp-settings-color-brand)}.amp.amp .components-button:focus:not(:disabled){outline:1px solid var(--amp-settings-color-brand)}.amp .components-button.is-primary{box-shadow:0 25px 20px #0000001a}.amp .components-button.is-primary,.amp .components-button.is-primary:active,.amp .components-button.is-primary:focus,.amp .components-button.is-primary:focus:not(:disabled),.amp .components-button.is-primary:hover,.amp .components-button.is-primary:hover:not(:disabled),.amp .components-button.is-primary:not(:disabled):not([aria-disabled=true]):hover{background:var(--amp-settings-color-brand);color:var(--amp-settings-color-background);text-shadow:none}.amp .components-button.is-primary:disabled{background:#0000004d;border-color:#0000004d;color:#fffc}.amp .components-button.is-primary:disabled.is-busy{background-image:linear-gradient(45deg,var(--amp-settings-color-brand) 28%,#2459e7cc 28%,#2459e7cc 72%,var(--amp-settings-color-brand) 72%);background-size:100% 100%;border-color:var(--color-gray-medium)}.amp .components-toggle-control .components-base-control__field .components-toggle-control__label{display:flex;flex-wrap:wrap}.amp .components-button.is-small{font-size:.875rem}.amp .components-toggle-control .components-base-control__field{align-items:center;margin-bottom:0}.amp .components-form-toggle .components-form-toggle__track{border:2px solid var(--color-gray-medium)}.amp .components-form-toggle .components-form-toggle__thumb{background-color:var(--color-gray-medium);border-width:0;height:10px;right:4px;top:4px;width:10px}.amp .components-form-toggle.is-checked .components-form-toggle__thumb{background-color:var(--amp-settings-color-background)}.amp .components-form-toggle.is-checked .components-form-toggle__track{background-color:var(--amp-settings-color-brand);border-width:0}.amp .components-form-toggle__input:focus+.components-form-toggle__track{box-shadow:0 0 0 2px #fff,0 0 0 3.5px var(--amp-settings-color-brand)}.amp .components-checkbox-control__input[type=checkbox]:checked{background:var(--amp-settings-color-brand);border-color:var(--amp-settings-color-brand)}.amp .components-checkbox-control__input[type=checkbox]{border:2px solid var(--color-gray-medium);height:18px;width:18px}.amp svg.components-checkbox-control__checked{height:22px;right:0;width:18px}.amp input[type=checkbox]:checked:before{display:none}.amp .components-checkbox-control__input-container{display:inline-block;height:16px;margin-left:12px;position:relative;vertical-align:middle;width:16px}.amp svg.components-checkbox-control__checked{fill:#fff;position:absolute;top:-2px}.amp-settings-nav{align-items:center;background:var(--amp-settings-color-background);bottom:0;box-shadow:0 -5px 15px #0000000d;display:flex;justify-content:flex-end;left:0;position:fixed;right:0;z-index:2}.amp-settings-nav__inner{align-items:center;display:flex;justify-content:space-between;margin:0 auto;max-width:1320px;padding:15px;width:100%}@media screen and (min-width:783px){.amp-settings-nav__inner{padding:20px 90px}}.amp-settings-nav__inner .components-button{margin:5px 0}html{scroll-behavior:smooth}@media screen and (max-width:400px){.wrap{margin-left:10px;margin-right:0}}@media screen and (min-width:401px) and (max-width:782px){.wrap{margin-left:20px;margin-right:10px}}#amp-settings{margin:0 auto 6rem;max-width:1060px}#amp-settings>h1{font-family:var(--font-poppins);font-size:1.682rem;font-weight:600;margin-bottom:.55rem}#amp-settings .not-has-dependency-support,.settings-welcome{margin-bottom:2.5rem}.settings-welcome p{font-size:14px}.settings-welcome h2{align-items:center;display:flex;font-size:1rem;margin-bottom:0;margin-top:0}.settings-welcome h2 svg{margin-right:.5rem}.settings-welcome .selectable{align-items:center;display:flex;flex-direction:column}@media (min-width:783px){.settings-welcome .selectable{flex-direction:row}}.settings-welcome__illustration{display:none;margin-left:2rem}@media (min-width:783px){.settings-welcome__illustration{display:block}}.settings-welcome__body h2{margin-bottom:1rem}.settings-welcome__body p{margin:0}.supported-templates{margin-bottom:3rem;padding:0 1.5rem}@media (min-width:783px){.supported-templates{padding:0 3rem}}.supported-templates h4{font-size:1rem}.supported-templates p{font-size:14px}.plugin-suppression{margin-bottom:1rem}.template-modes{margin-bottom:2.5rem}.template-modes .template-mode-option,.template-modes>h2+.amp-notice{margin-bottom:.5rem}.amp.amp-settings .template-mode-option>p{font-size:16px;margin-bottom:1rem}.amp .form-table .amp-suppressed-plugins p,.plugin-suppression>p,.template-modes>p{font-size:14px}#suppressed-plugins-table{margin-top:20px}#suppressed-plugins-table th{font-weight:400}#suppressed-plugins-table td,#suppressed-plugins-table th{padding:10px}#suppressed-plugins-table .column-status{width:150px}#suppressed-plugins-table .column-status .components-base-control__field{margin-bottom:0}#suppressed-plugins-table .column-status>select{width:100%}#suppressed-plugins-table .column-plugin{width:45%}#suppressed-plugins-table .column-plugin .plugin-author-uri{margin-top:0}#suppressed-plugins-table .column-details{width:50%}#suppressed-plugins-table .column-details p{margin:0}#suppressed-plugins-table tbody td,#suppressed-plugins-table tbody th{vertical-align:top}#suppressed-plugins-table tbody tr.has-validation-errors{background-color:#fef7f1}#suppressed-plugins-table tbody tr.is-suppressed{background-color:#effbff}#suppressed-plugins-table tbody tr:not(.has-border-color)>th.column-status{padding-right:10px}#suppressed-plugins-table tbody tr.has-border-color>th.column-status{border-right:4px solid;padding-right:6px}#suppressed-plugins-table tbody tr.has-validation-errors>th.column-status{border-color:#d54e21}#suppressed-plugins-table tbody tr.is-suppressed>th.column-status{border-color:var(--amp-settings-color-brand)}#suppressed-plugins-table tbody tr:not(:last-child)>td,#suppressed-plugins-table tbody tr:not(:last-child)>th{box-shadow:inset 0 -1px 0 #0000001a}#suppressed-plugins-table details>ul{list-style-type:disc;margin-bottom:0;margin-right:30px;margin-top:.5em}#suppressed-plugins-table details{margin:0}#suppressed-plugins-table summary{cursor:pointer;-webkit-user-select:none;user-select:none}#suppressed-plugins-table tbody .column-details,#suppressed-plugins-table tbody .column-plugin{padding-top:18px}#suppressed-plugins-table .column-plugin .error-details{display:none}li.error-removed{color:var(--color-valid)}li.error-kept{color:var(--amp-settings-color-danger)}@media screen and (max-width:782px){#suppressed-plugins-table .column-status{width:130px}#suppressed-plugins-table .column-plugin{width:auto}#suppressed-plugins-table .column-plugin .error-details{border-top:1px dotted #ccd0d4;display:block;margin-top:10px;padding-top:10px}#suppressed-plugins-table .column-details{display:none}#suppressed-plugins-table .column-status .components-select-control__input{font-size:inherit}#suppressed-plugins-table tbody .column-details,#suppressed-plugins-table tbody .column-plugin{padding-top:21px}#suppressed-plugins-table{display:table}#suppressed-plugins-table td,#suppressed-plugins-table th{display:table-cell}}#supported_templates_fieldset ul ul{margin-right:40px}.supported-templates__fields{display:grid;gap:0}@media (min-width:783px){.supported-templates__fields{gap:1.5rem;grid-template-columns:repeat(2,1fr)}}.amp .amp-save-success-notice.amp-notice,.amp-error-notice .amp-notice{bottom:3rem;margin-right:.5rem;padding-left:.5rem;padding-right:1.5rem;z-index:99}@media (min-width:576px){.amp .amp-save-success-notice.amp-notice,.amp-error-notice .amp-notice{margin-right:0;padding-left:3rem}}.amp-settings-nav .components-button.is-primary{box-shadow:none}@media (min-width:783px){.amp-settings-nav{right:160px}.wp-admin.auto-fold .amp-settings-nav,.wp-admin.folded .amp-settings-nav{right:36px}}@media (min-width:961px){.wp-admin.auto-fold:not(.folded) .amp-settings-nav{right:160px}}#template-mode-reader-container{margin-bottom:0}#template-mode-reader-container.selectable.selectable--selected{border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom-style:dotted;border-bottom-width:1px}#reader-themes{border-top-left-radius:0;border-top-right-radius:0;border-top-width:0}#reader-themes .amp-drawer__heading{align-items:center;display:flex;padding-left:var(--panel-button-width);padding-right:1.5rem}@media (min-width:783px){#reader-themes .amp-drawer__heading{padding-right:3rem}}#paired-url-structure .amp-drawer__panel-body-inner,#plugin-suppression .amp-drawer__panel-body-inner,#sandboxing .amp-drawer__panel-body-inner,#site-review .amp-drawer__panel-body-inner,#site-scan .amp-drawer__panel-body-inner,.amp-analytics .amp-drawer__panel-body-inner,.amp-other-settings .amp-drawer__panel-body-inner{padding:1.5rem 1.5rem 3rem}@media (min-width:783px){#paired-url-structure .amp-drawer__panel-body-inner,#plugin-suppression .amp-drawer__panel-body-inner,#sandboxing .amp-drawer__panel-body-inner,#site-review .amp-drawer__panel-body-inner,#site-scan .amp-drawer__panel-body-inner,.amp-analytics .amp-drawer__panel-body-inner,.amp-other-settings .amp-drawer__panel-body-inner{padding:1.5rem 3rem 3rem}}#paired-url-structure .amp-drawer__panel-body-inner,#paired-url-structure .amp-drawer__panel-body-inner>p,#plugin-suppression .amp-drawer__panel-body-inner>p,#site-review .amp-drawer__panel-body-inner>p,#site-scan .amp-drawer__panel-body-inner>p,.amp-analytics .amp-drawer__panel-body-inner p{font-size:14px;margin-top:0}#paired-url-structure .amp-drawer__panel-body-inner .amp-notice{margin-bottom:1em}#paired-url-structure .amp-drawer__panel-body-inner .amp-notice ul{margin-top:1rem}#paired-url-structure .amp-drawer__panel-body-inner .amp-notice li{list-style:disc;margin:0}.amp-drawer__panel-body-inner .amp-paired-url-examples{margin-bottom:0;margin-top:.5em}.amp-drawer__panel-body-inner .amp-paired-url-example{line-height:1.5;margin-bottom:5px;margin-top:5px}#paired-url-structure ul{margin-top:1.5rem}#paired-url-structure .amp-notice--large{align-items:start}#paired-url-structure .amp-drawer__panel-body-inner li{margin-top:1em}#paired-url-structure .amp-drawer__panel-body-inner li:first-child{margin-top:0}#paired-url-structure .amp-drawer__panel-body-inner li .amp-paired-url-examples{margin-bottom:0;margin-right:34px}#paired-url-structure .amp-paired-url-examples summary{padding-left:4px;-webkit-user-select:none;user-select:none}#paired-url-structure .amp-drawer__panel-body-inner input{margin-left:8px}#analytics-options details>summary{font-size:14px}#analytics-options details>p{margin-top:1em}#analytics-options .components-button:not(.components-panel__body-toggle) svg{display:block}.amp-analytics-entry{align-items:flex-start;border:1px solid var(--amp-settings-color-border);flex-direction:column;margin-bottom:1.5rem;padding:0 1rem}@media (min-width:783px){.amp-analytics-entry{padding:1.5rem 2.25rem}}.amp-analytics-entry__text-input{display:flex;flex-wrap:wrap;margin-bottom:.75rem}.amp .amp-analytics-entry__text-input .text-input{border:1px solid #757575;border-radius:2px;box-shadow:0 0 0 #0000;padding:6px 10px;transition:box-shadow .1s linear}.amp-analytics-entry__text-input .input-label{align-self:center;margin-bottom:0}.amp-analytics-entry .amp-notice{margin-bottom:.75rem}.amp-analytics-input{font-family:monospace;tab-size:4;width:100%}.amp-analytics-input:invalid,.components-text-control__input:invalid{border-color:var(--amp-settings-color-danger)}.options-validation-errors{color:var(--amp-settings-color-danger)}.amp .components-button.amp-analytics__delete-button{color:var(--amp-settings-color-black);font-size:14px;margin-right:auto}.amp .components-button.is-link.amp-analytics__delete-button:active,.amp .components-button.is-link.amp-analytics__delete-button:focus,.amp .components-button.is-link.amp-analytics__delete-button:hover{color:var(--amp-settings-color-danger)}.amp .components-button.is-link.amp-analytics__delete-button:focus{outline-color:var(--amp-settings-color-danger)}.amp .amp-analytics__delete-button svg{margin-left:.5rem}.amp .amp-analytics__entry-appender.components-button{align-items:center;background:#edeff0cc;color:var(--amp-settings-color-black);display:flex;flex-direction:column;height:auto;justify-content:center;outline:1px dashed var(--amp-settings-color-border);padding:14px;width:100%}.amp .amp-analytics__entry-appender.components-button svg{display:block;height:24px;margin-right:0;width:24px}#site-scan{margin-bottom:2.5rem}#site-scan .amp-drawer__heading{font-size:1.2rem}#site-scan .amp-drawer__heading svg{fill:#0000}#site-scan .amp-drawer__heading>svg{width:55px}.settings-site-scan>*+*{margin-top:1.5rem}.settings-site-scan__footer{align-items:center;display:flex;flex-flow:row nowrap}.amp .settings-site-scan__footer .components-button{height:40px;padding-left:2.25rem;padding-right:2.25rem}.amp .settings-site-scan__footer .components-button+.components-button{margin-right:1rem}#site-review{margin-bottom:2.5rem}#site-review .amp-drawer__heading{font-size:1.2rem}#site-review .amp-drawer__heading svg{fill:#0000;width:55px}.amp .settings-site-review__heading{align-items:center;display:flex;flex-flow:row nowrap;font-size:1rem;line-height:1.25;margin-top:2rem}.settings-site-review__heading svg{flex:0 0 auto;height:auto;margin-left:25px;width:40px}.settings-site-review__list{font-size:var(--amp-settings-font-size);list-style:disc;margin-bottom:2rem;padding-right:30px}.settings-site-review__list a{color:var(--amp-settings-color-black);transition:color 80ms ease}.settings-site-review__list a:focus,.settings-site-review__list a:hover{color:var(--amp-settings-color-brand)}.settings-site-review__actions{align-items:center;display:flex;flex-flow:row nowrap}.amp .settings-site-review__actions .components-button{height:40px;padding-left:2.25rem;padding-right:2.25rem}.amp .settings-site-review__actions .components-button+.components-button{margin-right:1rem}.amp-other-settings section+section{margin-top:2rem}.amp-other-settings h4{font-size:1rem}.amp .amp-other-settings .amp-setting-toggle .components-form-toggle{margin-left:1rem}.amp-other-settings .amp-setting-toggle .amp-setting-toggle__label-text>h3{font-size:.875rem;font-weight:700;margin:0}.amp-other-settings p{font-size:.875rem}#sandboxing .amp-drawer__panel-body-inner p{font-size:14px;margin-top:0}#sandboxing .sandboxing-enabled{font-weight:700}#sandboxing .amp-drawer__panel-body-inner ol{margin-right:0;margin-top:1.5rem}#sandboxing .amp-drawer__panel-body-inner li{list-style-type:none}#sandboxing .amp-drawer__panel-body-inner li:not(:last-child){margin-bottom:12px}#sandboxing .amp-drawer__panel-body-inner input[type=radio]{margin-left:12px}#sandboxing .amp-drawer__panel-body-inner input[type=radio],#sandboxing .amp-drawer__panel-body-inner label{vertical-align:middle}.amp-spinner-container{align-items:center;display:flex;justify-content:center}.amp-spinner-container--inline{display:inline-flex;margin:0 .5em;vertical-align:middle}.amp-spinner-container .components-spinner{margin:0}.error-screen-container,.error-screen-container *{box-sizing:border-box}.error-screen-container{margin:3rem auto;max-width:600px;padding:1.5rem;width:100%}.error-screen{background-color:#fff;border-right:4px solid #d54e21;padding:2.25rem;width:100%}.error-screen h1{font-family:var(--font-poppins);font-size:1.5rem;font-weight:600;line-height:1.4;margin:0 0 1rem}.error-screen p{font-family:var(--font-noto);font-size:1rem;line-height:1.5;margin:1rem 0;word-break:break-word}.error-screen pre{background:#f0f0f1;background:#00000012;font-size:13px;margin:1rem 1px;overflow:auto;padding:3px 5px 2px}.selectable{background-color:var(--amp-settings-color-background);border:2px solid var(--amp-settings-color-border);border-radius:8px;padding:1rem .75rem}@media (min-width:783px){.selectable{padding:1.25rem 2.5rem}}.selectable--left{box-shadow:10px 0 0 var(--amp-settings-color-border);margin-left:-10px}.selectable--bottom{border:2px solid var(--amp-settings-color-border);box-shadow:0 10px 0 var(--amp-settings-color-border)}.selectable--selected{border-color:var(--amp-settings-color-brand);box-shadow:10px 0 0 var(--amp-settings-color-brand)}.selectable--bottom.selectable--selected{box-shadow:0 10px 0 var(--amp-settings-color-brand)}.amp-drawer{--panel-button-width:56px;--heading-height:92px}@media (min-width:783px){.amp-drawer{--panel-button-width:112px;--heading-height:92px}}.amp-drawer{margin-bottom:1rem;padding:0;position:relative}.amp-drawer__heading{align-items:center;display:flex;flex-grow:1;height:var(--heading-height);overflow:hidden;padding-left:.75rem;padding-right:.75rem;right:0}@media (min-width:783px){.amp-drawer__heading{padding-right:3rem}.amp-drawer--handle-type-full-width .amp-drawer__heading{padding-left:3rem}}.amp-drawer__heading h3{margin-bottom:0}.amp-drawer__heading svg{margin-left:1rem}.amp-drawer__label-extra svg{fill:none}.amp .amp-drawer .components-panel__body-title{border-radius:5px;height:var(--heading-height);margin:0 auto 0 0}.amp .amp-drawer .is-opened .components-panel__body-title{border-radius:5px 5px 0 0}.amp .amp-drawer.components-panel__body-title,.amp.amp .amp-drawer .components-panel__body-toggle{align-items:center;border-radius:5px;display:flex}.amp .amp-drawer .components-panel__body-title button{border-radius:0;height:100%;width:100%}.amp.amp .amp-drawer .components-panel__body-toggle:focus:not(:disabled){outline:none}.amp .amp-drawer .components-panel__body-title>button>span{align-items:center;display:flex;justify-content:center;order:100;width:var(--panel-button-width)}.amp .amp-drawer .components-panel__body-toggle.components-button .components-panel__arrow{height:30px;position:static;transform:none;width:30px}@media (min-width:783px){.amp .amp-drawer .components-panel__body-toggle.components-button .components-panel__arrow{height:45px;width:45px}}.amp .amp-drawer--handle-type-full-width .components-panel__body-title>button>svg{margin-right:auto}@media (min-width:783px){.amp .amp-drawer--handle-type-full-width .components-panel__body-title>button>svg{margin-left:1rem}}.amp.amp .amp-drawer .components-panel__body-toggle{border-radius:5px}.amp .amp-drawer .components-panel__body-title .amp-notice{font-family:var(--font-default);font-weight:400}.amp .amp-drawer__panel-body{border-bottom-width:0;border-top-width:0;padding:0}.amp .amp-drawer__panel-body .components-panel__body-toggle{padding:0}.amp-drawer__panel-body-inner{border-top:1px solid var(--amp-settings-color-border)}.amp-drawer__panel-body-inner details{margin-bottom:1.5rem}.template-mode-selection__details p{font-size:14px;line-height:1.85}.amp .amp-drawer--handle-type-right .amp-drawer__heading{left:var(--panel-button-width);width:calc(100% - var(--panel-button-width))}.amp-drawer--handle-type-right .components-panel__body-title{width:var(--panel-button-width)}.amp .amp-drawer--handle-type-right .components-panel__body-title,.amp.amp .amp-drawer--handle-type-right .components-panel__body-toggle{background-color:initial;border-radius:5px 0 0 5px}.amp .amp-drawer--handle-type-right .is-opened .components-panel__body-title,.amp.amp .amp-drawer--handle-type-right .is-opened .components-panel__body-toggle{border-radius:5px 0 0 0}.amp .amp-drawer--handle-type-right .components-panel__body-title button{border-right:1px solid var(--amp-settings-color-border)}.amp-notice{border-radius:12px;display:inline-flex;line-height:1.85}.amp-notice,.amp-notice p{font-size:14px}.amp-notice__body{flex-grow:1;text-align:right}.amp-notice__body .components-panel__body-toggle,.amp-notice__body .components-panel__body-toggle:focus:not(:disabled){color:var(--amp-settings-color-black);outline:none}.amp-notice--success{background-color:#ecfef1}.amp-notice__icon{align-items:center;justify-content:center}.amp-notice--info{background-color:#effbff}.amp-notice--info svg,.amp-notice--plain svg{color:var(--amp-settings-color-brand)}.amp-notice--warning{background-color:#fff9c8}.amp-notice--warning .amp-notice__icon svg{color:var(--amp-settings-color-warning);transform:rotate(-180deg)}.amp-notice--error{background-color:#ffefef}.amp-notice.amp-notice--plain{padding:1px 5px}.amp-notice--small{font-size:14px;line-height:1.5;padding:.375rem .75rem .5rem 1rem}.amp-notice__icon{display:flex}.amp-notice--small .amp-notice__icon{height:20px}.amp-notice--small svg{flex-grow:0;height:20px;margin-left:.5rem;width:20px}.amp-notice--large{align-items:center;display:inline-flex;padding:.5rem 1rem}.amp-notice--large p{margin-bottom:0;margin-top:0}.amp-notice--large svg{flex-grow:0;height:30px;margin-left:1rem;width:30px}.template-mode-option__label{align-items:center;background-color:var(--amp-settings-color-background);display:flex;padding:0;width:100%}@media (min-width:783px){.template-mode-option__label{flex-wrap:wrap;padding:1.125rem 0 1.125rem 1.5rem}}.template-mode-selection__input-container{margin-left:.75rem}@media screen and (min-width:783px){.template-mode-selection__input-container{margin-left:1.5rem}}.template-mode-selection__illustration{align-items:center;display:flex;flex-shrink:0;width:40px}@media screen and (min-width:783px){.template-mode-selection__illustration{width:80px}}.template-mode-selection__illustration svg{height:auto;width:60px}.template-mode-option .amp-info{margin-bottom:0}@media screen and (min-width:783px){.template-mode-option .amp-info{margin-right:1.5rem}}.template-mode-selection__details{font-size:14px;margin-bottom:1rem;padding:1rem 1.5rem}@media (min-width:783px){.template-mode-selection__details{padding:1rem 3rem}}.template-mode-selection__details-list{list-style:disc;padding-right:1.625rem}.template-mode-option .components-panel__row{margin-right:-16px}.template-mode-option .amp-notice .components-panel__body-toggle.components-button{font-family:var(--font-noto);font-size:14px;font-weight:400;line-height:1.85;padding-right:0}.template-mode-option .amp-notice .components-panel__body-title:hover{background:#0000!important}.template-mode-option .amp-notice .components-panel__body-title button .components-panel__arrow{display:none;top:1.125rem}.template-mode-selection__description{align-items:center;display:flex;flex-grow:1;flex-wrap:wrap;justify-content:flex-start;padding:0 1rem 0 0}@media screen and (min-width:783px){.template-mode-selection__description{margin-bottom:0}}.template-mode-selection__label-extra{display:none;font-size:14px;margin:0 auto 0 0}@media screen and (min-width:783px){.template-mode-selection__label-extra{display:block}}.template-mode-selection__label-extra .amp-notice--small{font-size:14px}.template-mode-option>.amp-notice .components-panel__arrow{left:0}.template-mode-option .components-panel__body-title{left:0;position:absolute;top:0}.template-mode-option .components-panel__body-title:hover{background:#0000}.template-mode-option .components-panel__body-toggle:active,.template-mode-option .components-panel__body-toggle:focus,.template-mode-option .components-panel__body-toggle:hover{color:inherit}.template-mode-option .components-panel__arrow{height:2rem;width:2rem}.template-mode-option .components-panel__body{border-bottom-width:0;border-top-width:0}.template-mode-option .components-panel__row{flex-wrap:wrap}.template-mode-option .components-panel__row>*{width:100%}.template-mode-option .reader-themes{margin-top:1.5rem}.template-mode-option .reader-themes__current-theme{font-weight:400;margin-right:.5rem}.amp-info{display:inline-block;font-size:14px;font-weight:600;margin-bottom:1rem}.amp-info__icon{float:right;margin:0 .5rem}.reader-theme-selection{padding:1.5rem}@media (min-width:783px){.reader-theme-selection{padding:1.5rem 3rem}}.reader-theme-selection .amp-notice--info{margin-bottom:.75rem}.reader-theme-selection p{font-size:14px;margin-top:0}.reader-theme-selection .amp-setting-toggle{margin:1rem 0 .5rem}.choose-reader-theme__unavailable .choose-reader-theme__grid{display:grid;gap:1rem;grid-template-columns:repeat(4,minmax(0,1fr))}.amp-carousel__page{display:grid;gap:60px;grid-template-columns:repeat(3,minmax(0,1fr))}.reader-theme-selection .theme-card{margin:0 auto;width:275px}.amp-setting-toggle p{font-size:14px}.amp .amp-setting-toggle .components-form-toggle{margin-left:.75rem}@media (min-width:783px){.amp .amp-setting-toggle .components-form-toggle{margin-left:2.25rem}}.amp-setting-toggle--disabled .components-form-toggle__input{opacity:.5;pointer-events:none}.amp-setting-toggle--disabled .components-toggle-control__label{pointer-events:none}@media (min-width:783px){.amp .amp-setting-toggle--compact .components-form-toggle{margin-left:1rem}}.amp .amp-setting-toggle--compact .amp-setting-toggle__label-text p{margin:0}.theme-card{display:flex;flex-direction:column;flex-shrink:0;padding:1.5rem;position:relative}.theme-card p{font-size:14px}.theme-card--disabled{position:relative}.theme-card--disabled:before{background-color:#0000000d;bottom:0;content:"";left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:3}.theme-card__label-header{align-items:center;display:flex;padding:.75rem 0}.theme-card__label-header>input{flex-shrink:0}.amp .theme-card .theme-card__title{font-size:1rem;line-height:1.3;margin-bottom:0;margin-right:5px;margin-top:0}.theme-card img{height:auto;margin:auto;width:100%}p.theme-card__description{-webkit-box-orient:vertical;-webkit-line-clamp:3;display:-webkit-box;font-size:14px;line-height:1.666;overflow:hidden}.theme-card__theme-link{margin-top:auto}.theme-card__disabled-overlay{align-items:center;background:#ffffffe6;bottom:0;display:flex;font-size:1.122rem;font-weight:700;justify-content:center;left:0;position:absolute;right:0;top:0}.phone{background:#f1f1f1;border-radius:10px;display:flex;flex-direction:column;height:413px;margin-bottom:1rem;min-height:200px;padding:12px;position:relative}.phone>*{max-width:100%}.phone:before{background:#e6e6e6;border-radius:3px;content:"";display:block;height:5px;margin:9px auto;width:43px}.phone__inner{flex-grow:1;overflow:hidden;position:relative}.phone__inner,.phone__overlay{background-color:var(--amp-settings-color-dark-gray);display:flex}.phone__overlay{align-items:center;bottom:0;justify-content:center;left:0;opacity:0;pointer-events:none;position:absolute;right:0;top:0;transition:opacity .3s ease,visibility .3s ease;visibility:hidden}.phone.is-loading .phone__overlay{opacity:1;pointer-events:auto;visibility:visible}.amp .supported-templates .amp-setting-toggle .components-form-toggle{margin-left:1rem}.supported-templates .amp-setting-toggle .amp-setting-toggle__label-text>p{font-weight:700;margin:0}:root{--amp-progress-bar-color:var(--amp-brand);--amp-progress-bar-height:34px}.progress-bar{border:2px solid var(--amp-progress-bar-color);height:34px;height:var(--amp-progress-bar-height);margin-bottom:1.5rem;margin-top:1.5rem}.progress-bar,.progress-bar__track{border-radius:34px;border-radius:var(--amp-progress-bar-height);overflow:hidden}.progress-bar__track{height:calc(100% - 8px);margin:4px;position:relative;transform:scale(1);width:calc(100% - 8px)}.progress-bar__indicator{background-color:var(--amp-brand);background-color:var(--amp-progress-bar-color);border-radius:34px;border-radius:var(--amp-progress-bar-height);height:100%;position:absolute;right:0;top:0;transition:transform .8s ease-out;width:100%}.site-scan-results{padding:0}.site-scan-results+.site-scan-results{margin-top:1.5rem}.site-scan-results__header{align-items:center;border-bottom:1px solid var(--amp-settings-color-border);display:flex;flex-flow:row nowrap;padding:.5rem}@media(min-width:783px){.site-scan-results__header{padding:1rem 2rem}}.site-scan-results__heading{font-size:16px;font-weight:700;margin-right:1rem}.site-scan-results__heading[data-badge-content]:after{align-items:center;background-color:var(--light-gray);border-radius:50%;content:attr(data-badge-content);display:inline-flex;height:30px;justify-content:center;letter-spacing:-.05em;margin:0 .5rem;width:30px}.site-scan-results__content{padding:1rem .5rem}@media(min-width:783px){.site-scan-results__content{padding:1.25rem 2rem}}.site-scan-results__sources{border:2px solid var(--amp-settings-color-border)}.site-scan-results__source{align-items:center;font-size:14px;margin:0;max-width:100%;min-height:3.5rem;padding:1rem}.site-scan-results__source details{margin:0;width:100%}.site-scan-results__source:nth-child(2n){background-color:var(--amp-settings-color-background-light)}.site-scan-results__source+.site-scan-results__source{border-top:2px solid var(--amp-settings-color-border)}.site-scan-results__source-name{font-weight:700}.site-scan-results__source-name--inactive{color:var(--gray)}.site-scan-results__source-author:before{border-right:1px solid;content:"";display:inline-block;height:1em;margin:0 .5em;vertical-align:middle}.site-scan-results__source .site-scan-results__summary-wrapper{align-items:center;display:inline-flex;margin-right:4px;width:calc(100% - 20px)}.site-scan-results__source-notice,.site-scan-results__source-version{margin-right:auto}.site-scan-results__cta.site-scan-results__cta{font-size:14px;margin-bottom:0}.site-scan-results__cta.site-scan-results__cta .components-external-link__icon{fill:var(--amp-settings-color-brand)}.site-scan-results__urls-list{margin:1.5rem 0;padding:0 1rem}.site-scan-results__detail-body p{font-size:14px}.site-scan-results__source-detail{background-color:#fff;border:1px solid #dedede;border-radius:5px;font-size:12px;line-height:2;max-height:510px;overflow:scroll;padding:15px;white-space:pre}PK.3Y
�l\�}�}&bunyad-amp/assets/css/amp-settings.css:root{--gray:#6c7781;--light-gray:#c4c4c4;--very-light-gray:#fafafc;--amp-brand:#2459e7;--amp-settings-color-black:#212121;--amp-settings-color-dark-gray:#333;--amp-settings-color-brand:#2459e7;--amp-settings-color-muted:#48525c;--amp-settings-color-border:#e8e8e8;--amp-settings-color-background:#fff;--amp-settings-color-background-light:#f8f8f8;--amp-settings-color-warning:#ff9f00;--font-noto:"Noto Sans",sans-serif;--font-poppins:poppins,sans-serif;--font-default:-apple-system,"BlinkMacSystemFont","Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif;--color-valid:#46b450;--amp-settings-color-danger:#dc3232;--color-gray-medium:#0000008a;--amp-settings-font-size:16px}.amp a{color:var(--amp-settings-color-brand)}.amp h1,.amp h2,.amp h3,.amp h4,.amp h5,.amp h6,.components-button{font-family:var(--font-poppins)}.amp h1{font-size:2.125rem}.amp h2{font-size:1.5rem}.amp h3{font-size:1.2rem;line-height:1.5;margin-bottom:0;margin-top:0}.amp p{font-size:var(--amp-settings-font-size)}.amp,.amp *,.amp :after,.amp :before,.amp:after,.amp:before{box-sizing:border-box}.amp input[type=radio]{border-color:var(--gray);border-width:2px;box-shadow:none;height:1.5rem;width:1.5rem}.amp input[type=radio][disabled]{border-color:var(--amp-settings-color-border)}.amp input[type=radio]:checked{border-color:var(--amp-settings-color-brand)}.amp input[type=radio]:checked:before{background-color:var(--amp-settings-color-brand);height:12px;margin:.25rem;width:12px}.amp input[type=checkbox]:focus,.amp input[type=radio]:focus{border-color:var(--amp-settings-color-brand);box-shadow:0 0 0 1px var(--amp-settings-color-brand)}.amp details summary{cursor:pointer}.amp .components-button:not(.components-panel__body-toggle){align-items:center;border-radius:3px;color:var(--amp-settings-color-brand);font-size:1rem;font-weight:600;padding:.5rem 1rem}.amp .components-button:not(.components-panel__body-toggle) svg{fill:currentColor;height:18px;margin:0 .5rem;width:18px}.amp .components-panel__body-title button{font-size:16px;font-weight:600}.amp .components-panel__body-title:hover{background:var(--amp-settings-color-background)}.amp .components-button.is-link,.amp .components-button.is-link:hover,.amp .components-button.is-link:hover:not(:disabled),.amp .components-button:not(.components-panel__body-toggle):focus,.amp .components-button:not(.components-panel__body-toggle):focus:not(:disabled),.amp .components-button:not(.components-panel__body-toggle):hover{box-shadow:none;color:var(--amp-settings-color-brand);-webkit-text-decoration:none;text-decoration:none}.amp .components-button.is-secondary,.amp .components-button.is-secondary:hover,.amp .components-button.is-secondary:hover:not(:disabled){border-color:var(--amp-settings-color-brand);box-shadow:inset 0 0 0 1px var(--amp-settings-color-brand)}.amp.amp .components-button:focus:not(:disabled){outline:1px solid var(--amp-settings-color-brand)}.amp .components-button.is-primary{box-shadow:0 25px 20px #0000001a}.amp .components-button.is-primary,.amp .components-button.is-primary:active,.amp .components-button.is-primary:focus,.amp .components-button.is-primary:focus:not(:disabled),.amp .components-button.is-primary:hover,.amp .components-button.is-primary:hover:not(:disabled),.amp .components-button.is-primary:not(:disabled):not([aria-disabled=true]):hover{background:var(--amp-settings-color-brand);color:var(--amp-settings-color-background);text-shadow:none}.amp .components-button.is-primary:disabled{background:#0000004d;border-color:#0000004d;color:#fffc}.amp .components-button.is-primary:disabled.is-busy{background-image:linear-gradient(-45deg,var(--amp-settings-color-brand) 28%,#2459e7cc 28%,#2459e7cc 72%,var(--amp-settings-color-brand) 72%);background-size:100% 100%;border-color:var(--color-gray-medium)}.amp .components-toggle-control .components-base-control__field .components-toggle-control__label{display:flex;flex-wrap:wrap}.amp .components-button.is-small{font-size:.875rem}.amp .components-toggle-control .components-base-control__field{align-items:center;margin-bottom:0}.amp .components-form-toggle .components-form-toggle__track{border:2px solid var(--color-gray-medium)}.amp .components-form-toggle .components-form-toggle__thumb{background-color:var(--color-gray-medium);border-width:0;height:10px;left:4px;top:4px;width:10px}.amp .components-form-toggle.is-checked .components-form-toggle__thumb{background-color:var(--amp-settings-color-background)}.amp .components-form-toggle.is-checked .components-form-toggle__track{background-color:var(--amp-settings-color-brand);border-width:0}.amp .components-form-toggle__input:focus+.components-form-toggle__track{box-shadow:0 0 0 2px #fff,0 0 0 3.5px var(--amp-settings-color-brand)}.amp .components-checkbox-control__input[type=checkbox]:checked{background:var(--amp-settings-color-brand);border-color:var(--amp-settings-color-brand)}.amp .components-checkbox-control__input[type=checkbox]{border:2px solid var(--color-gray-medium);height:18px;width:18px}.amp svg.components-checkbox-control__checked{height:22px;left:0;width:18px}.amp input[type=checkbox]:checked:before{display:none}.amp .components-checkbox-control__input-container{display:inline-block;height:16px;margin-right:12px;position:relative;vertical-align:middle;width:16px}.amp svg.components-checkbox-control__checked{fill:#fff;position:absolute;top:-2px}.amp-settings-nav{align-items:center;background:var(--amp-settings-color-background);bottom:0;box-shadow:0 -5px 15px #0000000d;display:flex;justify-content:flex-end;left:0;position:fixed;right:0;z-index:2}.amp-settings-nav__inner{align-items:center;display:flex;justify-content:space-between;margin:0 auto;max-width:1320px;padding:15px;width:100%}@media screen and (min-width:783px){.amp-settings-nav__inner{padding:20px 90px}}.amp-settings-nav__inner .components-button{margin:5px 0}html{scroll-behavior:smooth}@media screen and (max-width:400px){.wrap{margin-left:0;margin-right:10px}}@media screen and (min-width:401px) and (max-width:782px){.wrap{margin-left:10px;margin-right:20px}}#amp-settings{margin:0 auto 6rem;max-width:1060px}#amp-settings>h1{font-family:var(--font-poppins);font-size:1.682rem;font-weight:600;margin-bottom:.55rem}#amp-settings .not-has-dependency-support,.settings-welcome{margin-bottom:2.5rem}.settings-welcome p{font-size:14px}.settings-welcome h2{align-items:center;display:flex;font-size:1rem;margin-bottom:0;margin-top:0}.settings-welcome h2 svg{margin-left:.5rem}.settings-welcome .selectable{align-items:center;display:flex;flex-direction:column}@media (min-width:783px){.settings-welcome .selectable{flex-direction:row}}.settings-welcome__illustration{display:none;margin-right:2rem}@media (min-width:783px){.settings-welcome__illustration{display:block}}.settings-welcome__body h2{margin-bottom:1rem}.settings-welcome__body p{margin:0}.supported-templates{margin-bottom:3rem;padding:0 1.5rem}@media (min-width:783px){.supported-templates{padding:0 3rem}}.supported-templates h4{font-size:1rem}.supported-templates p{font-size:14px}.plugin-suppression{margin-bottom:1rem}.template-modes{margin-bottom:2.5rem}.template-modes .template-mode-option,.template-modes>h2+.amp-notice{margin-bottom:.5rem}.amp.amp-settings .template-mode-option>p{font-size:16px;margin-bottom:1rem}.amp .form-table .amp-suppressed-plugins p,.plugin-suppression>p,.template-modes>p{font-size:14px}#suppressed-plugins-table{margin-top:20px}#suppressed-plugins-table th{font-weight:400}#suppressed-plugins-table td,#suppressed-plugins-table th{padding:10px}#suppressed-plugins-table .column-status{width:150px}#suppressed-plugins-table .column-status .components-base-control__field{margin-bottom:0}#suppressed-plugins-table .column-status>select{width:100%}#suppressed-plugins-table .column-plugin{width:45%}#suppressed-plugins-table .column-plugin .plugin-author-uri{margin-top:0}#suppressed-plugins-table .column-details{width:50%}#suppressed-plugins-table .column-details p{margin:0}#suppressed-plugins-table tbody td,#suppressed-plugins-table tbody th{vertical-align:top}#suppressed-plugins-table tbody tr.has-validation-errors{background-color:#fef7f1}#suppressed-plugins-table tbody tr.is-suppressed{background-color:#effbff}#suppressed-plugins-table tbody tr:not(.has-border-color)>th.column-status{padding-left:10px}#suppressed-plugins-table tbody tr.has-border-color>th.column-status{border-left:4px solid;padding-left:6px}#suppressed-plugins-table tbody tr.has-validation-errors>th.column-status{border-color:#d54e21}#suppressed-plugins-table tbody tr.is-suppressed>th.column-status{border-color:var(--amp-settings-color-brand)}#suppressed-plugins-table tbody tr:not(:last-child)>td,#suppressed-plugins-table tbody tr:not(:last-child)>th{box-shadow:inset 0 -1px 0 #0000001a}#suppressed-plugins-table details>ul{list-style-type:disc;margin-bottom:0;margin-left:30px;margin-top:.5em}#suppressed-plugins-table details{margin:0}#suppressed-plugins-table summary{cursor:pointer;-webkit-user-select:none;user-select:none}#suppressed-plugins-table tbody .column-details,#suppressed-plugins-table tbody .column-plugin{padding-top:18px}#suppressed-plugins-table .column-plugin .error-details{display:none}li.error-removed{color:var(--color-valid)}li.error-kept{color:var(--amp-settings-color-danger)}@media screen and (max-width:782px){#suppressed-plugins-table .column-status{width:130px}#suppressed-plugins-table .column-plugin{width:auto}#suppressed-plugins-table .column-plugin .error-details{border-top:1px dotted #ccd0d4;display:block;margin-top:10px;padding-top:10px}#suppressed-plugins-table .column-details{display:none}#suppressed-plugins-table .column-status .components-select-control__input{font-size:inherit}#suppressed-plugins-table tbody .column-details,#suppressed-plugins-table tbody .column-plugin{padding-top:21px}#suppressed-plugins-table{display:table}#suppressed-plugins-table td,#suppressed-plugins-table th{display:table-cell}}#supported_templates_fieldset ul ul{margin-left:40px}.supported-templates__fields{display:grid;gap:0}@media (min-width:783px){.supported-templates__fields{gap:1.5rem;grid-template-columns:repeat(2,1fr)}}.amp .amp-save-success-notice.amp-notice,.amp-error-notice .amp-notice{bottom:3rem;margin-left:.5rem;padding-left:1.5rem;padding-right:.5rem;z-index:99}@media (min-width:576px){.amp .amp-save-success-notice.amp-notice,.amp-error-notice .amp-notice{margin-left:0;padding-right:3rem}}.amp-settings-nav .components-button.is-primary{box-shadow:none}@media (min-width:783px){.amp-settings-nav{left:160px}.wp-admin.auto-fold .amp-settings-nav,.wp-admin.folded .amp-settings-nav{left:36px}}@media (min-width:961px){.wp-admin.auto-fold:not(.folded) .amp-settings-nav{left:160px}}#template-mode-reader-container{margin-bottom:0}#template-mode-reader-container.selectable.selectable--selected{border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom-style:dotted;border-bottom-width:1px}#reader-themes{border-top-left-radius:0;border-top-right-radius:0;border-top-width:0}#reader-themes .amp-drawer__heading{align-items:center;display:flex;padding-left:1.5rem;padding-right:var(--panel-button-width)}@media (min-width:783px){#reader-themes .amp-drawer__heading{padding-left:3rem}}#paired-url-structure .amp-drawer__panel-body-inner,#plugin-suppression .amp-drawer__panel-body-inner,#sandboxing .amp-drawer__panel-body-inner,#site-review .amp-drawer__panel-body-inner,#site-scan .amp-drawer__panel-body-inner,.amp-analytics .amp-drawer__panel-body-inner,.amp-other-settings .amp-drawer__panel-body-inner{padding:1.5rem 1.5rem 3rem}@media (min-width:783px){#paired-url-structure .amp-drawer__panel-body-inner,#plugin-suppression .amp-drawer__panel-body-inner,#sandboxing .amp-drawer__panel-body-inner,#site-review .amp-drawer__panel-body-inner,#site-scan .amp-drawer__panel-body-inner,.amp-analytics .amp-drawer__panel-body-inner,.amp-other-settings .amp-drawer__panel-body-inner{padding:1.5rem 3rem 3rem}}#paired-url-structure .amp-drawer__panel-body-inner,#paired-url-structure .amp-drawer__panel-body-inner>p,#plugin-suppression .amp-drawer__panel-body-inner>p,#site-review .amp-drawer__panel-body-inner>p,#site-scan .amp-drawer__panel-body-inner>p,.amp-analytics .amp-drawer__panel-body-inner p{font-size:14px;margin-top:0}#paired-url-structure .amp-drawer__panel-body-inner .amp-notice{margin-bottom:1em}#paired-url-structure .amp-drawer__panel-body-inner .amp-notice ul{margin-top:1rem}#paired-url-structure .amp-drawer__panel-body-inner .amp-notice li{list-style:disc;margin:0}.amp-drawer__panel-body-inner .amp-paired-url-examples{margin-bottom:0;margin-top:.5em}.amp-drawer__panel-body-inner .amp-paired-url-example{line-height:1.5;margin-bottom:5px;margin-top:5px}#paired-url-structure ul{margin-top:1.5rem}#paired-url-structure .amp-notice--large{align-items:start}#paired-url-structure .amp-drawer__panel-body-inner li{margin-top:1em}#paired-url-structure .amp-drawer__panel-body-inner li:first-child{margin-top:0}#paired-url-structure .amp-drawer__panel-body-inner li .amp-paired-url-examples{margin-bottom:0;margin-left:34px}#paired-url-structure .amp-paired-url-examples summary{padding-right:4px;-webkit-user-select:none;user-select:none}#paired-url-structure .amp-drawer__panel-body-inner input{margin-right:8px}#analytics-options details>summary{font-size:14px}#analytics-options details>p{margin-top:1em}#analytics-options .components-button:not(.components-panel__body-toggle) svg{display:block}.amp-analytics-entry{align-items:flex-start;border:1px solid var(--amp-settings-color-border);flex-direction:column;margin-bottom:1.5rem;padding:0 1rem}@media (min-width:783px){.amp-analytics-entry{padding:1.5rem 2.25rem}}.amp-analytics-entry__text-input{display:flex;flex-wrap:wrap;margin-bottom:.75rem}.amp .amp-analytics-entry__text-input .text-input{border:1px solid #757575;border-radius:2px;box-shadow:0 0 0 #0000;padding:6px 10px;transition:box-shadow .1s linear}.amp-analytics-entry__text-input .input-label{align-self:center;margin-bottom:0}.amp-analytics-entry .amp-notice{margin-bottom:.75rem}.amp-analytics-input{font-family:monospace;tab-size:4;width:100%}.amp-analytics-input:invalid,.components-text-control__input:invalid{border-color:var(--amp-settings-color-danger)}.options-validation-errors{color:var(--amp-settings-color-danger)}.amp .components-button.amp-analytics__delete-button{color:var(--amp-settings-color-black);font-size:14px;margin-left:auto}.amp .components-button.is-link.amp-analytics__delete-button:active,.amp .components-button.is-link.amp-analytics__delete-button:focus,.amp .components-button.is-link.amp-analytics__delete-button:hover{color:var(--amp-settings-color-danger)}.amp .components-button.is-link.amp-analytics__delete-button:focus{outline-color:var(--amp-settings-color-danger)}.amp .amp-analytics__delete-button svg{margin-right:.5rem}.amp .amp-analytics__entry-appender.components-button{align-items:center;background:#edeff0cc;color:var(--amp-settings-color-black);display:flex;flex-direction:column;height:auto;justify-content:center;outline:1px dashed var(--amp-settings-color-border);padding:14px;width:100%}.amp .amp-analytics__entry-appender.components-button svg{display:block;height:24px;margin-left:0;width:24px}#site-scan{margin-bottom:2.5rem}#site-scan .amp-drawer__heading{font-size:1.2rem}#site-scan .amp-drawer__heading svg{fill:#0000}#site-scan .amp-drawer__heading>svg{width:55px}.settings-site-scan>*+*{margin-top:1.5rem}.settings-site-scan__footer{align-items:center;display:flex;flex-flow:row nowrap}.amp .settings-site-scan__footer .components-button{height:40px;padding-left:2.25rem;padding-right:2.25rem}.amp .settings-site-scan__footer .components-button+.components-button{margin-left:1rem}#site-review{margin-bottom:2.5rem}#site-review .amp-drawer__heading{font-size:1.2rem}#site-review .amp-drawer__heading svg{fill:#0000;width:55px}.amp .settings-site-review__heading{align-items:center;display:flex;flex-flow:row nowrap;font-size:1rem;line-height:1.25;margin-top:2rem}.settings-site-review__heading svg{flex:0 0 auto;height:auto;margin-right:25px;width:40px}.settings-site-review__list{font-size:var(--amp-settings-font-size);list-style:disc;margin-bottom:2rem;padding-left:30px}.settings-site-review__list a{color:var(--amp-settings-color-black);transition:color 80ms ease}.settings-site-review__list a:focus,.settings-site-review__list a:hover{color:var(--amp-settings-color-brand)}.settings-site-review__actions{align-items:center;display:flex;flex-flow:row nowrap}.amp .settings-site-review__actions .components-button{height:40px;padding-left:2.25rem;padding-right:2.25rem}.amp .settings-site-review__actions .components-button+.components-button{margin-left:1rem}.amp-other-settings section+section{margin-top:2rem}.amp-other-settings h4{font-size:1rem}.amp .amp-other-settings .amp-setting-toggle .components-form-toggle{margin-right:1rem}.amp-other-settings .amp-setting-toggle .amp-setting-toggle__label-text>h3{font-size:.875rem;font-weight:700;margin:0}.amp-other-settings p{font-size:.875rem}#sandboxing .amp-drawer__panel-body-inner p{font-size:14px;margin-top:0}#sandboxing .sandboxing-enabled{font-weight:700}#sandboxing .amp-drawer__panel-body-inner ol{margin-left:0;margin-top:1.5rem}#sandboxing .amp-drawer__panel-body-inner li{list-style-type:none}#sandboxing .amp-drawer__panel-body-inner li:not(:last-child){margin-bottom:12px}#sandboxing .amp-drawer__panel-body-inner input[type=radio]{margin-right:12px}#sandboxing .amp-drawer__panel-body-inner input[type=radio],#sandboxing .amp-drawer__panel-body-inner label{vertical-align:middle}.amp-spinner-container{align-items:center;display:flex;justify-content:center}.amp-spinner-container--inline{display:inline-flex;margin:0 .5em;vertical-align:middle}.amp-spinner-container .components-spinner{margin:0}.error-screen-container,.error-screen-container *{box-sizing:border-box}.error-screen-container{margin:3rem auto;max-width:600px;padding:1.5rem;width:100%}.error-screen{background-color:#fff;border-left:4px solid #d54e21;padding:2.25rem;width:100%}.error-screen h1{font-family:var(--font-poppins);font-size:1.5rem;font-weight:600;line-height:1.4;margin:0 0 1rem}.error-screen p{font-family:var(--font-noto);font-size:1rem;line-height:1.5;margin:1rem 0;word-break:break-word}.error-screen pre{background:#f0f0f1;background:#00000012;font-size:13px;margin:1rem 1px;overflow:auto;padding:3px 5px 2px}.selectable{background-color:var(--amp-settings-color-background);border:2px solid var(--amp-settings-color-border);border-radius:8px;padding:1rem .75rem}@media (min-width:783px){.selectable{padding:1.25rem 2.5rem}}.selectable--left{box-shadow:-10px 0 0 var(--amp-settings-color-border);margin-right:-10px}.selectable--bottom{border:2px solid var(--amp-settings-color-border);box-shadow:0 10px 0 var(--amp-settings-color-border)}.selectable--selected{border-color:var(--amp-settings-color-brand);box-shadow:-10px 0 0 var(--amp-settings-color-brand)}.selectable--bottom.selectable--selected{box-shadow:0 10px 0 var(--amp-settings-color-brand)}.amp-drawer{--panel-button-width:56px;--heading-height:92px}@media (min-width:783px){.amp-drawer{--panel-button-width:112px;--heading-height:92px}}.amp-drawer{margin-bottom:1rem;padding:0;position:relative}.amp-drawer__heading{align-items:center;display:flex;flex-grow:1;height:var(--heading-height);left:0;overflow:hidden;padding-left:.75rem;padding-right:.75rem}@media (min-width:783px){.amp-drawer__heading{padding-left:3rem}.amp-drawer--handle-type-full-width .amp-drawer__heading{padding-right:3rem}}.amp-drawer__heading h3{margin-bottom:0}.amp-drawer__heading svg{margin-right:1rem}.amp-drawer__label-extra svg{fill:none}.amp .amp-drawer .components-panel__body-title{border-radius:5px;height:var(--heading-height);margin:0 0 0 auto}.amp .amp-drawer .is-opened .components-panel__body-title{border-radius:5px 5px 0 0}.amp .amp-drawer.components-panel__body-title,.amp.amp .amp-drawer .components-panel__body-toggle{align-items:center;border-radius:5px;display:flex}.amp .amp-drawer .components-panel__body-title button{border-radius:0;height:100%;width:100%}.amp.amp .amp-drawer .components-panel__body-toggle:focus:not(:disabled){outline:none}.amp .amp-drawer .components-panel__body-title>button>span{align-items:center;display:flex;justify-content:center;order:100;width:var(--panel-button-width)}.amp .amp-drawer .components-panel__body-toggle.components-button .components-panel__arrow{height:30px;position:static;transform:none;width:30px}@media (min-width:783px){.amp .amp-drawer .components-panel__body-toggle.components-button .components-panel__arrow{height:45px;width:45px}}.amp .amp-drawer--handle-type-full-width .components-panel__body-title>button>svg{margin-left:auto}@media (min-width:783px){.amp .amp-drawer--handle-type-full-width .components-panel__body-title>button>svg{margin-right:1rem}}.amp.amp .amp-drawer .components-panel__body-toggle{border-radius:5px}.amp .amp-drawer .components-panel__body-title .amp-notice{font-family:var(--font-default);font-weight:400}.amp .amp-drawer__panel-body{border-bottom-width:0;border-top-width:0;padding:0}.amp .amp-drawer__panel-body .components-panel__body-toggle{padding:0}.amp-drawer__panel-body-inner{border-top:1px solid var(--amp-settings-color-border)}.amp-drawer__panel-body-inner details{margin-bottom:1.5rem}.template-mode-selection__details p{font-size:14px;line-height:1.85}.amp .amp-drawer--handle-type-right .amp-drawer__heading{right:var(--panel-button-width);width:calc(100% - var(--panel-button-width))}.amp-drawer--handle-type-right .components-panel__body-title{width:var(--panel-button-width)}.amp .amp-drawer--handle-type-right .components-panel__body-title,.amp.amp .amp-drawer--handle-type-right .components-panel__body-toggle{background-color:initial;border-radius:0 5px 5px 0}.amp .amp-drawer--handle-type-right .is-opened .components-panel__body-title,.amp.amp .amp-drawer--handle-type-right .is-opened .components-panel__body-toggle{border-radius:0 5px 0 0}.amp .amp-drawer--handle-type-right .components-panel__body-title button{border-left:1px solid var(--amp-settings-color-border)}.amp-notice{border-radius:12px;display:inline-flex;line-height:1.85}.amp-notice,.amp-notice p{font-size:14px}.amp-notice__body{flex-grow:1;text-align:left}.amp-notice__body .components-panel__body-toggle,.amp-notice__body .components-panel__body-toggle:focus:not(:disabled){color:var(--amp-settings-color-black);outline:none}.amp-notice--success{background-color:#ecfef1}.amp-notice__icon{align-items:center;justify-content:center}.amp-notice--info{background-color:#effbff}.amp-notice--info svg,.amp-notice--plain svg{color:var(--amp-settings-color-brand)}.amp-notice--warning{background-color:#fff9c8}.amp-notice--warning .amp-notice__icon svg{color:var(--amp-settings-color-warning);transform:rotate(180deg)}.amp-notice--error{background-color:#ffefef}.amp-notice.amp-notice--plain{padding:1px 5px}.amp-notice--small{font-size:14px;line-height:1.5;padding:.375rem 1rem .5rem .75rem}.amp-notice__icon{display:flex}.amp-notice--small .amp-notice__icon{height:20px}.amp-notice--small svg{flex-grow:0;height:20px;margin-right:.5rem;width:20px}.amp-notice--large{align-items:center;display:inline-flex;padding:.5rem 1rem}.amp-notice--large p{margin-bottom:0;margin-top:0}.amp-notice--large svg{flex-grow:0;height:30px;margin-right:1rem;width:30px}.template-mode-option__label{align-items:center;background-color:var(--amp-settings-color-background);display:flex;padding:0;width:100%}@media (min-width:783px){.template-mode-option__label{flex-wrap:wrap;padding:1.125rem 1.5rem 1.125rem 0}}.template-mode-selection__input-container{margin-right:.75rem}@media screen and (min-width:783px){.template-mode-selection__input-container{margin-right:1.5rem}}.template-mode-selection__illustration{align-items:center;display:flex;flex-shrink:0;width:40px}@media screen and (min-width:783px){.template-mode-selection__illustration{width:80px}}.template-mode-selection__illustration svg{height:auto;width:60px}.template-mode-option .amp-info{margin-bottom:0}@media screen and (min-width:783px){.template-mode-option .amp-info{margin-left:1.5rem}}.template-mode-selection__details{font-size:14px;margin-bottom:1rem;padding:1rem 1.5rem}@media (min-width:783px){.template-mode-selection__details{padding:1rem 3rem}}.template-mode-selection__details-list{list-style:disc;padding-left:1.625rem}.template-mode-option .components-panel__row{margin-left:-16px}.template-mode-option .amp-notice .components-panel__body-toggle.components-button{font-family:var(--font-noto);font-size:14px;font-weight:400;line-height:1.85;padding-left:0}.template-mode-option .amp-notice .components-panel__body-title:hover{background:#0000!important}.template-mode-option .amp-notice .components-panel__body-title button .components-panel__arrow{display:none;top:1.125rem}.template-mode-selection__description{align-items:center;display:flex;flex-grow:1;flex-wrap:wrap;justify-content:flex-start;padding:0 0 0 1rem}@media screen and (min-width:783px){.template-mode-selection__description{margin-bottom:0}}.template-mode-selection__label-extra{display:none;font-size:14px;margin:0 0 0 auto}@media screen and (min-width:783px){.template-mode-selection__label-extra{display:block}}.template-mode-selection__label-extra .amp-notice--small{font-size:14px}.template-mode-option>.amp-notice .components-panel__arrow{right:0}.template-mode-option .components-panel__body-title{position:absolute;right:0;top:0}.template-mode-option .components-panel__body-title:hover{background:#0000}.template-mode-option .components-panel__body-toggle:active,.template-mode-option .components-panel__body-toggle:focus,.template-mode-option .components-panel__body-toggle:hover{color:inherit}.template-mode-option .components-panel__arrow{height:2rem;width:2rem}.template-mode-option .components-panel__body{border-bottom-width:0;border-top-width:0}.template-mode-option .components-panel__row{flex-wrap:wrap}.template-mode-option .components-panel__row>*{width:100%}.template-mode-option .reader-themes{margin-top:1.5rem}.template-mode-option .reader-themes__current-theme{font-weight:400;margin-left:.5rem}.amp-info{display:inline-block;font-size:14px;font-weight:600;margin-bottom:1rem}.amp-info__icon{float:left;margin:0 .5rem}.reader-theme-selection{padding:1.5rem}@media (min-width:783px){.reader-theme-selection{padding:1.5rem 3rem}}.reader-theme-selection .amp-notice--info{margin-bottom:.75rem}.reader-theme-selection p{font-size:14px;margin-top:0}.reader-theme-selection .amp-setting-toggle{margin:1rem 0 .5rem}.choose-reader-theme__unavailable .choose-reader-theme__grid{display:grid;gap:1rem;grid-template-columns:repeat(4,minmax(0,1fr))}.amp-carousel__page{display:grid;gap:60px;grid-template-columns:repeat(3,minmax(0,1fr))}.reader-theme-selection .theme-card{margin:0 auto;width:275px}.amp-setting-toggle p{font-size:14px}.amp .amp-setting-toggle .components-form-toggle{margin-right:.75rem}@media (min-width:783px){.amp .amp-setting-toggle .components-form-toggle{margin-right:2.25rem}}.amp-setting-toggle--disabled .components-form-toggle__input{opacity:.5;pointer-events:none}.amp-setting-toggle--disabled .components-toggle-control__label{pointer-events:none}@media (min-width:783px){.amp .amp-setting-toggle--compact .components-form-toggle{margin-right:1rem}}.amp .amp-setting-toggle--compact .amp-setting-toggle__label-text p{margin:0}.theme-card{display:flex;flex-direction:column;flex-shrink:0;padding:1.5rem;position:relative}.theme-card p{font-size:14px}.theme-card--disabled{position:relative}.theme-card--disabled:before{background-color:#0000000d;bottom:0;content:"";left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:3}.theme-card__label-header{align-items:center;display:flex;padding:.75rem 0}.theme-card__label-header>input{flex-shrink:0}.amp .theme-card .theme-card__title{font-size:1rem;line-height:1.3;margin-bottom:0;margin-left:5px;margin-top:0}.theme-card img{height:auto;margin:auto;width:100%}p.theme-card__description{-webkit-box-orient:vertical;-webkit-line-clamp:3;display:-webkit-box;font-size:14px;line-height:1.666;overflow:hidden}.theme-card__theme-link{margin-top:auto}.theme-card__disabled-overlay{align-items:center;background:#ffffffe6;bottom:0;display:flex;font-size:1.122rem;font-weight:700;justify-content:center;left:0;position:absolute;right:0;top:0}.phone{background:#f1f1f1;border-radius:10px;display:flex;flex-direction:column;height:413px;margin-bottom:1rem;min-height:200px;padding:12px;position:relative}.phone>*{max-width:100%}.phone:before{background:#e6e6e6;border-radius:3px;content:"";display:block;height:5px;margin:9px auto;width:43px}.phone__inner{flex-grow:1;overflow:hidden;position:relative}.phone__inner,.phone__overlay{background-color:var(--amp-settings-color-dark-gray);display:flex}.phone__overlay{align-items:center;bottom:0;justify-content:center;left:0;opacity:0;pointer-events:none;position:absolute;right:0;top:0;transition:opacity .3s ease,visibility .3s ease;visibility:hidden}.phone.is-loading .phone__overlay{opacity:1;pointer-events:auto;visibility:visible}.amp .supported-templates .amp-setting-toggle .components-form-toggle{margin-right:1rem}.supported-templates .amp-setting-toggle .amp-setting-toggle__label-text>p{font-weight:700;margin:0}:root{--amp-progress-bar-color:var(--amp-brand);--amp-progress-bar-height:34px}.progress-bar{border:2px solid var(--amp-progress-bar-color);height:34px;height:var(--amp-progress-bar-height);margin-bottom:1.5rem;margin-top:1.5rem}.progress-bar,.progress-bar__track{border-radius:34px;border-radius:var(--amp-progress-bar-height);overflow:hidden}.progress-bar__track{height:calc(100% - 8px);margin:4px;position:relative;transform:scale(1);width:calc(100% - 8px)}.progress-bar__indicator{background-color:var(--amp-brand);background-color:var(--amp-progress-bar-color);border-radius:34px;border-radius:var(--amp-progress-bar-height);height:100%;left:0;position:absolute;top:0;transition:transform .8s ease-out;width:100%}.site-scan-results{padding:0}.site-scan-results+.site-scan-results{margin-top:1.5rem}.site-scan-results__header{align-items:center;border-bottom:1px solid var(--amp-settings-color-border);display:flex;flex-flow:row nowrap;padding:.5rem}@media(min-width:783px){.site-scan-results__header{padding:1rem 2rem}}.site-scan-results__heading{font-size:16px;font-weight:700;margin-left:1rem}.site-scan-results__heading[data-badge-content]:after{align-items:center;background-color:var(--light-gray);border-radius:50%;content:attr(data-badge-content);display:inline-flex;height:30px;justify-content:center;letter-spacing:-.05em;margin:0 .5rem;width:30px}.site-scan-results__content{padding:1rem .5rem}@media(min-width:783px){.site-scan-results__content{padding:1.25rem 2rem}}.site-scan-results__sources{border:2px solid var(--amp-settings-color-border)}.site-scan-results__source{align-items:center;font-size:14px;margin:0;max-width:100%;min-height:3.5rem;padding:1rem}.site-scan-results__source details{margin:0;width:100%}.site-scan-results__source:nth-child(2n){background-color:var(--amp-settings-color-background-light)}.site-scan-results__source+.site-scan-results__source{border-top:2px solid var(--amp-settings-color-border)}.site-scan-results__source-name{font-weight:700}.site-scan-results__source-name--inactive{color:var(--gray)}.site-scan-results__source-author:before{border-left:1px solid;content:"";display:inline-block;height:1em;margin:0 .5em;vertical-align:middle}.site-scan-results__source .site-scan-results__summary-wrapper{align-items:center;display:inline-flex;margin-left:4px;width:calc(100% - 20px)}.site-scan-results__source-notice,.site-scan-results__source-version{margin-left:auto}.site-scan-results__cta.site-scan-results__cta{font-size:14px;margin-bottom:0}.site-scan-results__cta.site-scan-results__cta .components-external-link__icon{fill:var(--amp-settings-color-brand)}.site-scan-results__urls-list{margin:1.5rem 0;padding:0 1rem}.site-scan-results__detail-body p{font-size:14px}.site-scan-results__source-detail{background-color:#fff;border:1px solid #dedede;border-radius:5px;font-size:12px;line-height:2;max-height:510px;overflow:scroll;padding:15px;white-space:pre}PK.3Y=��2bunyad-amp/assets/css/amp-site-scan-notice-rtl.css.amp-site-scan-notice__cta{display:flex;flex-flow:row;margin:.5rem 0 1rem}.amp-site-scan-notice__cta>.button+.button{margin-right:.5rem}.amp-site-scan-notice__source-details{margin:.5rem 0}.amp-site-scan-notice__source-summary{cursor:pointer}.amp-site-scan-notice__urls-list{margin:.5rem 0 1rem;padding:0 1rem}.error-screen-container,.error-screen-container *{box-sizing:border-box}.error-screen-container{margin:3rem auto;max-width:600px;padding:1.5rem;width:100%}.error-screen{background-color:#fff;border-right:4px solid #d54e21;padding:2.25rem;width:100%}.error-screen h1{font-family:var(--font-poppins);font-size:1.5rem;font-weight:600;line-height:1.4;margin:0 0 1rem}.error-screen p{font-family:var(--font-noto);font-size:1rem;line-height:1.5;margin:1rem 0;word-break:break-word}.error-screen pre{background:#f0f0f1;background:#00000012;font-size:13px;margin:1rem 1px;overflow:auto;padding:3px 5px 2px}.amp-admin-notice{background:#fff;border:1px solid #c3c4c7;border-right-width:4px;box-shadow:0 1px 1px #0000000a;margin:5px 0 15px;padding:1px 12px}.amp-admin-notice p{margin:.5em 0;padding:2px}.amp-admin-notice--dismissible{padding-left:38px;position:relative}.amp-admin-notice__dismiss{background:100% 0;border:none;color:#787c82;cursor:pointer;left:1px;margin:0;padding:9px;position:absolute;top:0}.amp-admin-notice__dismiss:before{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:100% 0;color:#787c82;content:"";display:block;font:normal 16px/20px dashicons;height:20px;text-align:center;width:20px}.amp-admin-notice__dismiss:active:before,.amp-admin-notice__dismiss:focus:before,.amp-admin-notice__dismiss:hover:before{color:#d63638}.amp-admin-notice__dismiss:focus{box-shadow:0 0 0 1px #4f94d4,0 0 2px 1px #4f94d4cc;outline:0}.amp-admin-notice--success{border-right-color:#00a32a}.amp-admin-notice--warning{border-right-color:#dba617}.amp-admin-notice--error{border-right-color:#d63638}.amp-admin-notice--info{border-right-color:#72aee6}.amp-spinner-container{align-items:center;display:flex;justify-content:center}.amp-spinner-container--inline{display:inline-flex;margin:0 .5em;vertical-align:middle}.amp-spinner-container .components-spinner{margin:0}PK.3Y���U��.bunyad-amp/assets/css/amp-site-scan-notice.css.amp-site-scan-notice__cta{display:flex;flex-flow:row;margin:.5rem 0 1rem}.amp-site-scan-notice__cta>.button+.button{margin-left:.5rem}.amp-site-scan-notice__source-details{margin:.5rem 0}.amp-site-scan-notice__source-summary{cursor:pointer}.amp-site-scan-notice__urls-list{margin:.5rem 0 1rem;padding:0 1rem}.error-screen-container,.error-screen-container *{box-sizing:border-box}.error-screen-container{margin:3rem auto;max-width:600px;padding:1.5rem;width:100%}.error-screen{background-color:#fff;border-left:4px solid #d54e21;padding:2.25rem;width:100%}.error-screen h1{font-family:var(--font-poppins);font-size:1.5rem;font-weight:600;line-height:1.4;margin:0 0 1rem}.error-screen p{font-family:var(--font-noto);font-size:1rem;line-height:1.5;margin:1rem 0;word-break:break-word}.error-screen pre{background:#f0f0f1;background:#00000012;font-size:13px;margin:1rem 1px;overflow:auto;padding:3px 5px 2px}.amp-admin-notice{background:#fff;border:1px solid #c3c4c7;border-left-width:4px;box-shadow:0 1px 1px #0000000a;margin:5px 0 15px;padding:1px 12px}.amp-admin-notice p{margin:.5em 0;padding:2px}.amp-admin-notice--dismissible{padding-right:38px;position:relative}.amp-admin-notice__dismiss{background:0 0;border:none;color:#787c82;cursor:pointer;margin:0;padding:9px;position:absolute;right:1px;top:0}.amp-admin-notice__dismiss:before{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:0 0;color:#787c82;content:"";display:block;font:normal 16px/20px dashicons;height:20px;text-align:center;width:20px}.amp-admin-notice__dismiss:active:before,.amp-admin-notice__dismiss:focus:before,.amp-admin-notice__dismiss:hover:before{color:#d63638}.amp-admin-notice__dismiss:focus{box-shadow:0 0 0 1px #4f94d4,0 0 2px 1px #4f94d4cc;outline:0}.amp-admin-notice--success{border-left-color:#00a32a}.amp-admin-notice--warning{border-left-color:#dba617}.amp-admin-notice--error{border-left-color:#d63638}.amp-admin-notice--info{border-left-color:#72aee6}.amp-spinner-container{align-items:center;display:flex;justify-content:center}.amp-spinner-container--inline{display:inline-flex;margin:0 .5em;vertical-align:middle}.amp-spinner-container .components-spinner{margin:0}PK.3Yb�]�+(+()bunyad-amp/assets/css/amp-support-rtl.css:root{--gray:#6c7781;--light-gray:#c4c4c4;--very-light-gray:#fafafc;--amp-brand:#2459e7;--amp-settings-color-black:#212121;--amp-settings-color-dark-gray:#333;--amp-settings-color-brand:#2459e7;--amp-settings-color-muted:#48525c;--amp-settings-color-border:#e8e8e8;--amp-settings-color-background:#fff;--amp-settings-color-background-light:#f8f8f8;--amp-settings-color-warning:#ff9f00;--font-noto:"Noto Sans",sans-serif;--font-poppins:poppins,sans-serif;--font-default:-apple-system,"BlinkMacSystemFont","Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif;--color-valid:#46b450;--amp-settings-color-danger:#dc3232;--color-gray-medium:#0000008a;--amp-settings-font-size:16px}.amp a{color:var(--amp-settings-color-brand)}.amp h1,.amp h2,.amp h3,.amp h4,.amp h5,.amp h6,.components-button{font-family:var(--font-poppins)}.amp h1{font-size:2.125rem}.amp h2{font-size:1.5rem}.amp h3{font-size:1.2rem;line-height:1.5;margin-bottom:0;margin-top:0}.amp p{font-size:var(--amp-settings-font-size)}.amp,.amp *,.amp :after,.amp :before,.amp:after,.amp:before{box-sizing:border-box}.amp input[type=radio]{border-color:var(--gray);border-width:2px;box-shadow:none;height:1.5rem;width:1.5rem}.amp input[type=radio][disabled]{border-color:var(--amp-settings-color-border)}.amp input[type=radio]:checked{border-color:var(--amp-settings-color-brand)}.amp input[type=radio]:checked:before{background-color:var(--amp-settings-color-brand);height:12px;margin:.25rem;width:12px}.amp input[type=checkbox]:focus,.amp input[type=radio]:focus{border-color:var(--amp-settings-color-brand);box-shadow:0 0 0 1px var(--amp-settings-color-brand)}.amp details summary{cursor:pointer}.amp .components-button:not(.components-panel__body-toggle){align-items:center;border-radius:3px;color:var(--amp-settings-color-brand);font-size:1rem;font-weight:600;padding:.5rem 1rem}.amp .components-button:not(.components-panel__body-toggle) svg{fill:currentColor;height:18px;margin:0 .5rem;width:18px}.amp .components-panel__body-title button{font-size:16px;font-weight:600}.amp .components-panel__body-title:hover{background:var(--amp-settings-color-background)}.amp .components-button.is-link,.amp .components-button.is-link:hover,.amp .components-button.is-link:hover:not(:disabled),.amp .components-button:not(.components-panel__body-toggle):focus,.amp .components-button:not(.components-panel__body-toggle):focus:not(:disabled),.amp .components-button:not(.components-panel__body-toggle):hover{box-shadow:none;color:var(--amp-settings-color-brand);-webkit-text-decoration:none;text-decoration:none}.amp .components-button.is-secondary,.amp .components-button.is-secondary:hover,.amp .components-button.is-secondary:hover:not(:disabled){border-color:var(--amp-settings-color-brand);box-shadow:inset 0 0 0 1px var(--amp-settings-color-brand)}.amp.amp .components-button:focus:not(:disabled){outline:1px solid var(--amp-settings-color-brand)}.amp .components-button.is-primary{box-shadow:0 25px 20px #0000001a}.amp .components-button.is-primary,.amp .components-button.is-primary:active,.amp .components-button.is-primary:focus,.amp .components-button.is-primary:focus:not(:disabled),.amp .components-button.is-primary:hover,.amp .components-button.is-primary:hover:not(:disabled),.amp .components-button.is-primary:not(:disabled):not([aria-disabled=true]):hover{background:var(--amp-settings-color-brand);color:var(--amp-settings-color-background);text-shadow:none}.amp .components-button.is-primary:disabled{background:#0000004d;border-color:#0000004d;color:#fffc}.amp .components-button.is-primary:disabled.is-busy{background-image:linear-gradient(45deg,var(--amp-settings-color-brand) 28%,#2459e7cc 28%,#2459e7cc 72%,var(--amp-settings-color-brand) 72%);background-size:100% 100%;border-color:var(--color-gray-medium)}.amp .components-toggle-control .components-base-control__field .components-toggle-control__label{display:flex;flex-wrap:wrap}.amp .components-button.is-small{font-size:.875rem}.amp .components-toggle-control .components-base-control__field{align-items:center;margin-bottom:0}.amp .components-form-toggle .components-form-toggle__track{border:2px solid var(--color-gray-medium)}.amp .components-form-toggle .components-form-toggle__thumb{background-color:var(--color-gray-medium);border-width:0;height:10px;right:4px;top:4px;width:10px}.amp .components-form-toggle.is-checked .components-form-toggle__thumb{background-color:var(--amp-settings-color-background)}.amp .components-form-toggle.is-checked .components-form-toggle__track{background-color:var(--amp-settings-color-brand);border-width:0}.amp .components-form-toggle__input:focus+.components-form-toggle__track{box-shadow:0 0 0 2px #fff,0 0 0 3.5px var(--amp-settings-color-brand)}.amp .components-checkbox-control__input[type=checkbox]:checked{background:var(--amp-settings-color-brand);border-color:var(--amp-settings-color-brand)}.amp .components-checkbox-control__input[type=checkbox]{border:2px solid var(--color-gray-medium);height:18px;width:18px}.amp svg.components-checkbox-control__checked{height:22px;right:0;width:18px}.amp input[type=checkbox]:checked:before{display:none}.amp .components-checkbox-control__input-container{display:inline-block;height:16px;margin-left:12px;position:relative;vertical-align:middle;width:16px}.amp svg.components-checkbox-control__checked{fill:#fff;position:absolute;top:-2px}.amp-settings-nav{align-items:center;background:var(--amp-settings-color-background);bottom:0;box-shadow:0 -5px 15px #0000000d;display:flex;justify-content:flex-end;left:0;position:fixed;right:0;z-index:2}.amp-settings-nav__inner{align-items:center;display:flex;justify-content:space-between;margin:0 auto;max-width:1320px;padding:15px;width:100%}@media screen and (min-width:783px){.amp-settings-nav__inner{padding:20px 90px}}.amp-settings-nav__inner .components-button{margin:5px 0}html{scroll-behavior:smooth}@media screen and (max-width:400px){.wrap{margin-left:10px;margin-right:0}}@media screen and (min-width:401px) and (max-width:782px){.wrap{margin-left:20px;margin-right:10px}}#amp-support{margin:auto;max-width:1060px}.amp-support{margin:2.5rem 0}.amp-support h2{align-items:center;display:flex;font-size:1.5rem;line-height:1;margin-bottom:1.5rem;margin-top:0}.amp-support .amp-support__raw-data{border:1px solid #dedede;border-radius:5px;font-size:12px;line-height:2;max-height:510px;overflow:scroll;padding:15px}.amp-support .amp-support__footer{display:flex;margin-top:1.5rem}.amp-support .amp-support__footer .components-external-link{align-items:center;display:flex}.amp-support .components-button--send-button{margin-left:1rem}.amp-support .amp-notice{align-items:center}.amp-support .amp-notice--info.amp-notice--uuid{margin-top:1rem}.amp-support .components-clipboard-button{box-shadow:none;height:auto;margin:0 .5rem;outline:none!important;padding:.25rem .5rem;-webkit-text-decoration:none;text-decoration:none}.amp-support__body details{margin:1rem 0}.amp-support__body details.disabled summary,.amp-support__body details[disabled] summary{pointer-events:none}.amp-support__body details>summary{font-size:1rem}.amp-support__body details .detail-body{font-size:.8rem;margin:.5rem 1.5rem 1.5rem;overflow-x:auto}.amp-support__body details .detail-body .detail-body-text{font-size:.8rem;font-style:italic}.amp-support__body details .external-link{margin-right:.3rem;-webkit-text-decoration:none;text-decoration:none}.amp-support__body details .external-link .dashicons{font-size:.9rem;height:1rem;vertical-align:bottom;width:1rem}.amp-support__body details ul.list-group{list-style-type:disc;margin-right:1rem}.selectable{background-color:var(--amp-settings-color-background);border:2px solid var(--amp-settings-color-border);border-radius:8px;padding:1rem .75rem}@media (min-width:783px){.selectable{padding:1.25rem 2.5rem}}.selectable--left{box-shadow:10px 0 0 var(--amp-settings-color-border);margin-left:-10px}.selectable--bottom{border:2px solid var(--amp-settings-color-border);box-shadow:0 10px 0 var(--amp-settings-color-border)}.selectable--selected{border-color:var(--amp-settings-color-brand);box-shadow:10px 0 0 var(--amp-settings-color-brand)}.selectable--bottom.selectable--selected{box-shadow:0 10px 0 var(--amp-settings-color-brand)}.amp-notice{border-radius:12px;display:inline-flex;line-height:1.85}.amp-notice,.amp-notice p{font-size:14px}.amp-notice__body{flex-grow:1;text-align:right}.amp-notice__body .components-panel__body-toggle,.amp-notice__body .components-panel__body-toggle:focus:not(:disabled){color:var(--amp-settings-color-black);outline:none}.amp-notice--success{background-color:#ecfef1}.amp-notice__icon{align-items:center;justify-content:center}.amp-notice--info{background-color:#effbff}.amp-notice--info svg,.amp-notice--plain svg{color:var(--amp-settings-color-brand)}.amp-notice--warning{background-color:#fff9c8}.amp-notice--warning .amp-notice__icon svg{color:var(--amp-settings-color-warning);transform:rotate(-180deg)}.amp-notice--error{background-color:#ffefef}.amp-notice.amp-notice--plain{padding:1px 5px}.amp-notice--small{font-size:14px;line-height:1.5;padding:.375rem .75rem .5rem 1rem}.amp-notice__icon{display:flex}.amp-notice--small .amp-notice__icon{height:20px}.amp-notice--small svg{flex-grow:0;height:20px;margin-left:.5rem;width:20px}.amp-notice--large{align-items:center;display:inline-flex;padding:.5rem 1rem}.amp-notice--large p{margin-bottom:0;margin-top:0}.amp-notice--large svg{flex-grow:0;height:30px;margin-left:1rem;width:30px}.list-items--list-style-disc{list-style:disc}.list-items .list-items__heading{font-size:1rem;margin:1.5rem 0 .5rem}.list-items .list-items__item-key{display:inline-block;min-width:210px}.error-screen-container,.error-screen-container *{box-sizing:border-box}.error-screen-container{margin:3rem auto;max-width:600px;padding:1.5rem;width:100%}.error-screen{background-color:#fff;border-right:4px solid #d54e21;padding:2.25rem;width:100%}.error-screen h1{font-family:var(--font-poppins);font-size:1.5rem;font-weight:600;line-height:1.4;margin:0 0 1rem}.error-screen p{font-family:var(--font-noto);font-size:1rem;line-height:1.5;margin:1rem 0;word-break:break-word}.error-screen pre{background:#f0f0f1;background:#00000012;font-size:13px;margin:1rem 1px;overflow:auto;padding:3px 5px 2px}PK.3Y��Ӹ,(,(%bunyad-amp/assets/css/amp-support.css:root{--gray:#6c7781;--light-gray:#c4c4c4;--very-light-gray:#fafafc;--amp-brand:#2459e7;--amp-settings-color-black:#212121;--amp-settings-color-dark-gray:#333;--amp-settings-color-brand:#2459e7;--amp-settings-color-muted:#48525c;--amp-settings-color-border:#e8e8e8;--amp-settings-color-background:#fff;--amp-settings-color-background-light:#f8f8f8;--amp-settings-color-warning:#ff9f00;--font-noto:"Noto Sans",sans-serif;--font-poppins:poppins,sans-serif;--font-default:-apple-system,"BlinkMacSystemFont","Segoe UI","Roboto","Oxygen-Sans","Ubuntu","Cantarell","Helvetica Neue",sans-serif;--color-valid:#46b450;--amp-settings-color-danger:#dc3232;--color-gray-medium:#0000008a;--amp-settings-font-size:16px}.amp a{color:var(--amp-settings-color-brand)}.amp h1,.amp h2,.amp h3,.amp h4,.amp h5,.amp h6,.components-button{font-family:var(--font-poppins)}.amp h1{font-size:2.125rem}.amp h2{font-size:1.5rem}.amp h3{font-size:1.2rem;line-height:1.5;margin-bottom:0;margin-top:0}.amp p{font-size:var(--amp-settings-font-size)}.amp,.amp *,.amp :after,.amp :before,.amp:after,.amp:before{box-sizing:border-box}.amp input[type=radio]{border-color:var(--gray);border-width:2px;box-shadow:none;height:1.5rem;width:1.5rem}.amp input[type=radio][disabled]{border-color:var(--amp-settings-color-border)}.amp input[type=radio]:checked{border-color:var(--amp-settings-color-brand)}.amp input[type=radio]:checked:before{background-color:var(--amp-settings-color-brand);height:12px;margin:.25rem;width:12px}.amp input[type=checkbox]:focus,.amp input[type=radio]:focus{border-color:var(--amp-settings-color-brand);box-shadow:0 0 0 1px var(--amp-settings-color-brand)}.amp details summary{cursor:pointer}.amp .components-button:not(.components-panel__body-toggle){align-items:center;border-radius:3px;color:var(--amp-settings-color-brand);font-size:1rem;font-weight:600;padding:.5rem 1rem}.amp .components-button:not(.components-panel__body-toggle) svg{fill:currentColor;height:18px;margin:0 .5rem;width:18px}.amp .components-panel__body-title button{font-size:16px;font-weight:600}.amp .components-panel__body-title:hover{background:var(--amp-settings-color-background)}.amp .components-button.is-link,.amp .components-button.is-link:hover,.amp .components-button.is-link:hover:not(:disabled),.amp .components-button:not(.components-panel__body-toggle):focus,.amp .components-button:not(.components-panel__body-toggle):focus:not(:disabled),.amp .components-button:not(.components-panel__body-toggle):hover{box-shadow:none;color:var(--amp-settings-color-brand);-webkit-text-decoration:none;text-decoration:none}.amp .components-button.is-secondary,.amp .components-button.is-secondary:hover,.amp .components-button.is-secondary:hover:not(:disabled){border-color:var(--amp-settings-color-brand);box-shadow:inset 0 0 0 1px var(--amp-settings-color-brand)}.amp.amp .components-button:focus:not(:disabled){outline:1px solid var(--amp-settings-color-brand)}.amp .components-button.is-primary{box-shadow:0 25px 20px #0000001a}.amp .components-button.is-primary,.amp .components-button.is-primary:active,.amp .components-button.is-primary:focus,.amp .components-button.is-primary:focus:not(:disabled),.amp .components-button.is-primary:hover,.amp .components-button.is-primary:hover:not(:disabled),.amp .components-button.is-primary:not(:disabled):not([aria-disabled=true]):hover{background:var(--amp-settings-color-brand);color:var(--amp-settings-color-background);text-shadow:none}.amp .components-button.is-primary:disabled{background:#0000004d;border-color:#0000004d;color:#fffc}.amp .components-button.is-primary:disabled.is-busy{background-image:linear-gradient(-45deg,var(--amp-settings-color-brand) 28%,#2459e7cc 28%,#2459e7cc 72%,var(--amp-settings-color-brand) 72%);background-size:100% 100%;border-color:var(--color-gray-medium)}.amp .components-toggle-control .components-base-control__field .components-toggle-control__label{display:flex;flex-wrap:wrap}.amp .components-button.is-small{font-size:.875rem}.amp .components-toggle-control .components-base-control__field{align-items:center;margin-bottom:0}.amp .components-form-toggle .components-form-toggle__track{border:2px solid var(--color-gray-medium)}.amp .components-form-toggle .components-form-toggle__thumb{background-color:var(--color-gray-medium);border-width:0;height:10px;left:4px;top:4px;width:10px}.amp .components-form-toggle.is-checked .components-form-toggle__thumb{background-color:var(--amp-settings-color-background)}.amp .components-form-toggle.is-checked .components-form-toggle__track{background-color:var(--amp-settings-color-brand);border-width:0}.amp .components-form-toggle__input:focus+.components-form-toggle__track{box-shadow:0 0 0 2px #fff,0 0 0 3.5px var(--amp-settings-color-brand)}.amp .components-checkbox-control__input[type=checkbox]:checked{background:var(--amp-settings-color-brand);border-color:var(--amp-settings-color-brand)}.amp .components-checkbox-control__input[type=checkbox]{border:2px solid var(--color-gray-medium);height:18px;width:18px}.amp svg.components-checkbox-control__checked{height:22px;left:0;width:18px}.amp input[type=checkbox]:checked:before{display:none}.amp .components-checkbox-control__input-container{display:inline-block;height:16px;margin-right:12px;position:relative;vertical-align:middle;width:16px}.amp svg.components-checkbox-control__checked{fill:#fff;position:absolute;top:-2px}.amp-settings-nav{align-items:center;background:var(--amp-settings-color-background);bottom:0;box-shadow:0 -5px 15px #0000000d;display:flex;justify-content:flex-end;left:0;position:fixed;right:0;z-index:2}.amp-settings-nav__inner{align-items:center;display:flex;justify-content:space-between;margin:0 auto;max-width:1320px;padding:15px;width:100%}@media screen and (min-width:783px){.amp-settings-nav__inner{padding:20px 90px}}.amp-settings-nav__inner .components-button{margin:5px 0}html{scroll-behavior:smooth}@media screen and (max-width:400px){.wrap{margin-left:0;margin-right:10px}}@media screen and (min-width:401px) and (max-width:782px){.wrap{margin-left:10px;margin-right:20px}}#amp-support{margin:auto;max-width:1060px}.amp-support{margin:2.5rem 0}.amp-support h2{align-items:center;display:flex;font-size:1.5rem;line-height:1;margin-bottom:1.5rem;margin-top:0}.amp-support .amp-support__raw-data{border:1px solid #dedede;border-radius:5px;font-size:12px;line-height:2;max-height:510px;overflow:scroll;padding:15px}.amp-support .amp-support__footer{display:flex;margin-top:1.5rem}.amp-support .amp-support__footer .components-external-link{align-items:center;display:flex}.amp-support .components-button--send-button{margin-right:1rem}.amp-support .amp-notice{align-items:center}.amp-support .amp-notice--info.amp-notice--uuid{margin-top:1rem}.amp-support .components-clipboard-button{box-shadow:none;height:auto;margin:0 .5rem;outline:none!important;padding:.25rem .5rem;-webkit-text-decoration:none;text-decoration:none}.amp-support__body details{margin:1rem 0}.amp-support__body details.disabled summary,.amp-support__body details[disabled] summary{pointer-events:none}.amp-support__body details>summary{font-size:1rem}.amp-support__body details .detail-body{font-size:.8rem;margin:.5rem 1.5rem 1.5rem;overflow-x:auto}.amp-support__body details .detail-body .detail-body-text{font-size:.8rem;font-style:italic}.amp-support__body details .external-link{margin-left:.3rem;-webkit-text-decoration:none;text-decoration:none}.amp-support__body details .external-link .dashicons{font-size:.9rem;height:1rem;vertical-align:bottom;width:1rem}.amp-support__body details ul.list-group{list-style-type:disc;margin-left:1rem}.selectable{background-color:var(--amp-settings-color-background);border:2px solid var(--amp-settings-color-border);border-radius:8px;padding:1rem .75rem}@media (min-width:783px){.selectable{padding:1.25rem 2.5rem}}.selectable--left{box-shadow:-10px 0 0 var(--amp-settings-color-border);margin-right:-10px}.selectable--bottom{border:2px solid var(--amp-settings-color-border);box-shadow:0 10px 0 var(--amp-settings-color-border)}.selectable--selected{border-color:var(--amp-settings-color-brand);box-shadow:-10px 0 0 var(--amp-settings-color-brand)}.selectable--bottom.selectable--selected{box-shadow:0 10px 0 var(--amp-settings-color-brand)}.amp-notice{border-radius:12px;display:inline-flex;line-height:1.85}.amp-notice,.amp-notice p{font-size:14px}.amp-notice__body{flex-grow:1;text-align:left}.amp-notice__body .components-panel__body-toggle,.amp-notice__body .components-panel__body-toggle:focus:not(:disabled){color:var(--amp-settings-color-black);outline:none}.amp-notice--success{background-color:#ecfef1}.amp-notice__icon{align-items:center;justify-content:center}.amp-notice--info{background-color:#effbff}.amp-notice--info svg,.amp-notice--plain svg{color:var(--amp-settings-color-brand)}.amp-notice--warning{background-color:#fff9c8}.amp-notice--warning .amp-notice__icon svg{color:var(--amp-settings-color-warning);transform:rotate(180deg)}.amp-notice--error{background-color:#ffefef}.amp-notice.amp-notice--plain{padding:1px 5px}.amp-notice--small{font-size:14px;line-height:1.5;padding:.375rem 1rem .5rem .75rem}.amp-notice__icon{display:flex}.amp-notice--small .amp-notice__icon{height:20px}.amp-notice--small svg{flex-grow:0;height:20px;margin-right:.5rem;width:20px}.amp-notice--large{align-items:center;display:inline-flex;padding:.5rem 1rem}.amp-notice--large p{margin-bottom:0;margin-top:0}.amp-notice--large svg{flex-grow:0;height:30px;margin-right:1rem;width:30px}.list-items--list-style-disc{list-style:disc}.list-items .list-items__heading{font-size:1rem;margin:1.5rem 0 .5rem}.list-items .list-items__item-key{display:inline-block;min-width:210px}.error-screen-container,.error-screen-container *{box-sizing:border-box}.error-screen-container{margin:3rem auto;max-width:600px;padding:1.5rem;width:100%}.error-screen{background-color:#fff;border-left:4px solid #d54e21;padding:2.25rem;width:100%}.error-screen h1{font-family:var(--font-poppins);font-size:1.5rem;font-weight:600;line-height:1.4;margin:0 0 1rem}.error-screen p{font-family:var(--font-noto);font-size:1rem;line-height:1.5;margin:1rem 0;word-break:break-word}.error-screen pre{background:#f0f0f1;background:#00000012;font-size:13px;margin:1rem 1px;overflow:auto;padding:3px 5px 2px}PK.3Y����3bunyad-amp/assets/css/amp-validation-counts-rtl.css@keyframes rotate-forever{0%{transform:rotate(0deg)}to{transform:rotate(-1turn)}}#toplevel_page_amp-options .amp-count-loading{animation-duration:.75s;animation-iteration-count:infinite;animation-name:rotate-forever;animation-timing-function:linear;border-color:#0000 #fff #fff #0000;border-radius:50%;border-style:solid;border-width:2px;display:inline-block;height:4px;width:4px}body.no-js #amp-new-error-index-count,body.no-js #amp-new-validation-url-count{display:none}PK.3Y�?��/bunyad-amp/assets/css/amp-validation-counts.css@keyframes rotate-forever{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}#toplevel_page_amp-options .amp-count-loading{animation-duration:.75s;animation-iteration-count:infinite;animation-name:rotate-forever;animation-timing-function:linear;border-color:#0000 #0000 #fff #fff;border-radius:50%;border-style:solid;border-width:2px;display:inline-block;height:4px;width:4px}body.no-js #amp-new-error-index-count,body.no-js #amp-new-validation-url-count{display:none}PK.3Y
�MP�"�";bunyad-amp/assets/css/amp-validation-error-taxonomy-rtl.css.amp-stylesheet-list th{overflow-wrap:normal}.amp-stylesheet-list .column-stylesheet_order{text-align:left;width:5%}.amp-stylesheet-list .column-final_size,.amp-stylesheet-list .column-minified,.amp-stylesheet-list .column-original_size,.amp-stylesheet-list .column-percentage{text-align:left;width:8%}.amp-stylesheet-list .column-markup{white-space:nowrap;width:10%}.amp-stylesheet-list .column-origin{width:15%}.amp-stylesheet-list .column-stylesheet_expand{width:12px}.amp-stylesheet-list .column-priority{text-align:left;width:7%}.amp-stylesheet-list .column-stylesheet_included{text-align:center;white-space:nowrap;width:5%}.amp-stylesheet-list .column-percentage{text-align:center}.amp-stylesheet-list .column-source{width:25%}.amp-stylesheet-list .toggle-stylesheet-details{background:none;border:none;cursor:pointer;height:22px;position:relative}.amp-stylesheet-list .toggle-stylesheet-details:after{display:block}.amp-stylesheet-list .stylesheet-origin-markup{padding:0}.amp-stylesheet-list label{-webkit-user-select:none;user-select:none}.amp-stylesheet-list .stylesheet-details{display:none}.amp-stylesheet-list .stylesheet-details dl.detailed{margin-bottom:0;padding-bottom:0}.amp-stylesheet-list .stylesheet.expanded+.stylesheet-details{display:table-row}.amp-stylesheet-list .shaken-stylesheet{background:none;display:block;line-height:1;margin:0;padding:0;tab-size:4;white-space:pre-wrap}.amp-stylesheet-list .shaken-stylesheet del,.amp-stylesheet-list .shaken-stylesheet ins{border-right:4px solid #bbb;display:block;padding:1px 8px 1px 4px;-webkit-text-decoration:none;text-decoration:none}.amp-stylesheet-list .shaken-stylesheet.removed-styles-shown del{background:#fff9f9;border-right-color:red;color:#888}.amp-stylesheet-list .shaken-stylesheet.removed-styles-shown ins{border-right-color:green}.amp-stylesheet-list .shaken-stylesheet:not(.removed-styles-shown) del{display:none}.amp-stylesheet-list .shaken-stylesheet .declaration-block{display:block;margin-bottom:1em;margin-top:1em}.amp-stylesheet-list>tbody>tr.odd{background:#f4f4f4}.amp-stylesheet-list>tbody>tr.even{background:#fff}.amp-stylesheet-summary{margin-bottom:1em}.amp-stylesheet-summary span.amp-icon{font-size:16px;vertical-align:middle}.amp-stylesheet-summary th{font-weight:400;padding-left:1ex;text-align:left}.amp-stylesheet-summary td{font-weight:700;text-align:left}.details-attributes__summary{cursor:pointer;position:relative;-webkit-user-select:none;user-select:none}.column-details .details-attributes__summary{padding-left:15px;position:relative}details[open] .details-attributes__summary{margin-bottom:15px}.details-attributes__summary::-webkit-details-marker,.details-attributes__summary::marker{content:none;display:none}.column-details .notice details>summary::-webkit-details-marker,.column-details .notice details>summary::marker{content:none;display:none}.details-attributes__summary:after,.toggle-stylesheet-details:after{background-image:url(../images/down-triangle.svg);background-position:50%;background-size:cover;content:"";height:6px;left:0;position:absolute;top:7px;width:12px}details[open]>.details-attributes__summary:after,tr.expanded .details-attributes__summary:after,tr.expanded .toggle-stylesheet-details:after{transform:rotate(-180deg)}.notice .detailed{padding-right:15px}.notice .detailed details{padding-bottom:16px}.notice .detailed details .detailed{padding-right:32px}dl.detailed{padding-bottom:16px}dl.detailed dt{font-weight:600;margin-bottom:.5em}dl.detailed dd+dt{margin-top:1em}dl.detailed a{-webkit-text-decoration:underline;text-decoration:underline}dl.detailed details>summary{cursor:pointer;-webkit-user-select:none;user-select:none}dl.detailed .element-attributes th{font-weight:600;text-align:left}dl.detailed .element-attributes th.has-attr-value:after{content:":"}dl.detailed .element-attributes td,dl.detailed .element-attributes th{padding:2px;vertical-align:top}.details-attributes__title,.notice .detailed summary code{display:inline-block;font-weight:600;margin-right:18px;min-width:240px}.details-attributes__title{font-weight:600;margin-right:0}.details-attributes__list{font-family:Consolas,Monaco,monospace;list-style:none;margin-top:0;padding-right:0}.details-attributes__list li{word-break:break-all}.details-attributes__attr{font-weight:600}.column-sources_with_invalid_output details[open] .details-attributes__summary{margin-bottom:5px}.column-sources_with_invalid_output details>div{padding-right:25px}.error-details-toggle{background:none;border:none;cursor:pointer;display:flex;flex-direction:column;float:left;height:14px;margin:0;padding:0}.manage-column.column-sources_with_invalid_output .error-details-toggle{margin:0}.column-details .error-details-toggle:after,.column-details .error-details-toggle:before{background-image:url(../images/down-triangle.svg);background-position:50%;background-size:cover;content:"";height:6px;width:12px}.error-details-toggle.is-open:after,.error-details-toggle.is-open:before{transform:rotate(-180deg)}.wp-list-table.table-view-list>tbody>tr>td,.wp-list-table.table-view-list>tbody>tr>th{box-shadow:inset 0 -1px 0 #00000038}.wp-list-table.table-view-list>tbody>tr.expanded>td,.wp-list-table.table-view-list>tbody>tr.expanded>th,.wp-list-table.table-view-list>tbody>tr:last-child>td,.wp-list-table.table-view-list>tbody>tr:last-child>th{box-shadow:none}.wp-list-table.table-view-list>tbody>tr.expanded:not(.kept)+tr>:first-child{padding-right:14px}.wp-list-table.table-view-list>tbody>tr.kept.expanded+tr>:first-child,.wp-list-table.table-view-list>tbody>tr.kept>:first-child{border-right:4px solid #d54e21}.wp-list-table.table-view-list>tbody>tr.kept .check-column input{margin-right:4px}.wp-list-table.table-view-list>tbody .row-title:not(:hover),.wp-list-table.table-view-list>tbody td{color:#1e1e1e}.wp-list-table.table-view-list>tbody>tr,.wp-list-table.table-view-list>tbody>tr.expanded+.details{background-color:#f4f4f4}.wp-list-table.table-view-list>tbody>tr.new,.wp-list-table.table-view-list>tbody>tr.new.expanded+.details{background-color:#fff}.wp-list-table.table-view-list>tbody>tr .column-primary>:first-child,.wp-list-table.table-view-list>tbody>tr .row-title{font-weight:400}.wp-list-table.table-view-list>tbody>tr.new .column-primary>:first-child,.wp-list-table.table-view-list>tbody>tr.new .row-title{font-weight:600}.wp-list-table.table-view-list>tbody>tr .amp-validation-error-status-dropdown{align-items:center;display:flex}.wp-list-table.table-view-list>tbody>tr .amp-validation-error-status-dropdown:after{background:#d3e5e5 url(../images/amp-delete.svg) no-repeat 50%;background-size:20px auto;border-radius:5px;content:"";display:inline-block;height:20px;width:20px}.wp-list-table.table-view-list>tbody>tr.kept .amp-validation-error-status-dropdown:after{background-color:#f7ded4;background-image:url(../images/amp-alert.svg);background-size:18px auto}.wp-list-table.table-view-list>tbody>tr select.amp-validation-error-status{margin-left:10px}#col-left{display:none}#col-right{float:none;width:auto}#filter-by-date{float:none}td.column-details pre,td.column-sources pre{overflow:auto}th.column-created_date_gmt,th.column-error_type{width:15%}td.column-error_code .error-code{font-family:Consolas,Monaco,monospace}th.column-included{width:15%}.status-text{align-items:center;display:flex;padding-bottom:.6rem}#amp-enabled-icon.status-text:before{background-size:20px 20px;content:"";height:20px;margin-left:4px;min-width:20px;width:20px}.status-text>.amp-icon:before{height:20px;margin-left:6px;min-width:20px;width:20px}.wp-heading-inline .status-text>.amp-icon:before{font-size:23px;margin-left:inherit;vertical-align:middle}.status-text.amp-enabled:before{background-image:url(../images/amp-logo-icon.svg)}.status-text.amp-disabled:before{background-image:url(../images/amp-logo-gray.svg)}.row-actions .amp_validation_error_accept>a{color:#006505}.row-actions .amp_validation_error_reject>a{color:#a00}.notice.accept-reject-error .button.accept{background:#006505;border-color:#006505}.notice.accept-reject-error .button.reject{background:#a00;border-color:#a00}.notice.error-details{margin-top:1px}.notice.error-details.unreviewed{background-color:#fff;border-right-color:#c65632}.wp-heading-inline .status-text{display:inline-block;padding-bottom:0;vertical-align:middle}.wp-heading-inline .status-text:before{display:inline-block}.wp-heading-inline code{font-size:1rem}.validation-error-sources{border-collapse:collapse}.validation-error-sources tbody:not(:first-child){border-top:1px solid #ddd;margin:0}.validation-error-sources td,.validation-error-sources th{padding:2px 4px;vertical-align:top}.validation-error-sources tbody>tr:first-child>td,.validation-error-sources tbody>tr:first-child>th{padding-top:.75em}.validation-error-sources tbody>tr:last-child>td,.validation-error-sources tbody>tr:last-child>th{padding-bottom:.75em}.validation-error-sources th{font-weight:600;text-align:left}PK.3Ye���"�"7bunyad-amp/assets/css/amp-validation-error-taxonomy.css.amp-stylesheet-list th{overflow-wrap:normal}.amp-stylesheet-list .column-stylesheet_order{text-align:right;width:5%}.amp-stylesheet-list .column-final_size,.amp-stylesheet-list .column-minified,.amp-stylesheet-list .column-original_size,.amp-stylesheet-list .column-percentage{text-align:right;width:8%}.amp-stylesheet-list .column-markup{white-space:nowrap;width:10%}.amp-stylesheet-list .column-origin{width:15%}.amp-stylesheet-list .column-stylesheet_expand{width:12px}.amp-stylesheet-list .column-priority{text-align:right;width:7%}.amp-stylesheet-list .column-stylesheet_included{text-align:center;white-space:nowrap;width:5%}.amp-stylesheet-list .column-percentage{text-align:center}.amp-stylesheet-list .column-source{width:25%}.amp-stylesheet-list .toggle-stylesheet-details{background:none;border:none;cursor:pointer;height:22px;position:relative}.amp-stylesheet-list .toggle-stylesheet-details:after{display:block}.amp-stylesheet-list .stylesheet-origin-markup{padding:0}.amp-stylesheet-list label{-webkit-user-select:none;user-select:none}.amp-stylesheet-list .stylesheet-details{display:none}.amp-stylesheet-list .stylesheet-details dl.detailed{margin-bottom:0;padding-bottom:0}.amp-stylesheet-list .stylesheet.expanded+.stylesheet-details{display:table-row}.amp-stylesheet-list .shaken-stylesheet{background:none;display:block;line-height:1;margin:0;padding:0;tab-size:4;white-space:pre-wrap}.amp-stylesheet-list .shaken-stylesheet del,.amp-stylesheet-list .shaken-stylesheet ins{border-left:4px solid #bbb;display:block;padding:1px 4px 1px 8px;-webkit-text-decoration:none;text-decoration:none}.amp-stylesheet-list .shaken-stylesheet.removed-styles-shown del{background:#fff9f9;border-left-color:red;color:#888}.amp-stylesheet-list .shaken-stylesheet.removed-styles-shown ins{border-left-color:green}.amp-stylesheet-list .shaken-stylesheet:not(.removed-styles-shown) del{display:none}.amp-stylesheet-list .shaken-stylesheet .declaration-block{display:block;margin-bottom:1em;margin-top:1em}.amp-stylesheet-list>tbody>tr.odd{background:#f4f4f4}.amp-stylesheet-list>tbody>tr.even{background:#fff}.amp-stylesheet-summary{margin-bottom:1em}.amp-stylesheet-summary span.amp-icon{font-size:16px;vertical-align:middle}.amp-stylesheet-summary th{font-weight:400;padding-right:1ex;text-align:right}.amp-stylesheet-summary td{font-weight:700;text-align:right}.details-attributes__summary{cursor:pointer;position:relative;-webkit-user-select:none;user-select:none}.column-details .details-attributes__summary{padding-right:15px;position:relative}details[open] .details-attributes__summary{margin-bottom:15px}.details-attributes__summary::-webkit-details-marker,.details-attributes__summary::marker{content:none;display:none}.column-details .notice details>summary::-webkit-details-marker,.column-details .notice details>summary::marker{content:none;display:none}.details-attributes__summary:after,.toggle-stylesheet-details:after{background-image:url(../images/down-triangle.svg);background-position:50%;background-size:cover;content:"";height:6px;position:absolute;right:0;top:7px;width:12px}details[open]>.details-attributes__summary:after,tr.expanded .details-attributes__summary:after,tr.expanded .toggle-stylesheet-details:after{transform:rotate(180deg)}.notice .detailed{padding-left:15px}.notice .detailed details{padding-bottom:16px}.notice .detailed details .detailed{padding-left:32px}dl.detailed{padding-bottom:16px}dl.detailed dt{font-weight:600;margin-bottom:.5em}dl.detailed dd+dt{margin-top:1em}dl.detailed a{-webkit-text-decoration:underline;text-decoration:underline}dl.detailed details>summary{cursor:pointer;-webkit-user-select:none;user-select:none}dl.detailed .element-attributes th{font-weight:600;text-align:right}dl.detailed .element-attributes th.has-attr-value:after{content:":"}dl.detailed .element-attributes td,dl.detailed .element-attributes th{padding:2px;vertical-align:top}.details-attributes__title,.notice .detailed summary code{display:inline-block;font-weight:600;margin-left:18px;min-width:240px}.details-attributes__title{font-weight:600;margin-left:0}.details-attributes__list{font-family:Consolas,Monaco,monospace;list-style:none;margin-top:0;padding-left:0}.details-attributes__list li{word-break:break-all}.details-attributes__attr{font-weight:600}.column-sources_with_invalid_output details[open] .details-attributes__summary{margin-bottom:5px}.column-sources_with_invalid_output details>div{padding-left:25px}.error-details-toggle{background:none;border:none;cursor:pointer;display:flex;flex-direction:column;float:right;height:14px;margin:0;padding:0}.manage-column.column-sources_with_invalid_output .error-details-toggle{margin:0}.column-details .error-details-toggle:after,.column-details .error-details-toggle:before{background-image:url(../images/down-triangle.svg);background-position:50%;background-size:cover;content:"";height:6px;width:12px}.error-details-toggle.is-open:after,.error-details-toggle.is-open:before{transform:rotate(180deg)}.wp-list-table.table-view-list>tbody>tr>td,.wp-list-table.table-view-list>tbody>tr>th{box-shadow:inset 0 -1px 0 #00000038}.wp-list-table.table-view-list>tbody>tr.expanded>td,.wp-list-table.table-view-list>tbody>tr.expanded>th,.wp-list-table.table-view-list>tbody>tr:last-child>td,.wp-list-table.table-view-list>tbody>tr:last-child>th{box-shadow:none}.wp-list-table.table-view-list>tbody>tr.expanded:not(.kept)+tr>:first-child{padding-left:14px}.wp-list-table.table-view-list>tbody>tr.kept.expanded+tr>:first-child,.wp-list-table.table-view-list>tbody>tr.kept>:first-child{border-left:4px solid #d54e21}.wp-list-table.table-view-list>tbody>tr.kept .check-column input{margin-left:4px}.wp-list-table.table-view-list>tbody .row-title:not(:hover),.wp-list-table.table-view-list>tbody td{color:#1e1e1e}.wp-list-table.table-view-list>tbody>tr,.wp-list-table.table-view-list>tbody>tr.expanded+.details{background-color:#f4f4f4}.wp-list-table.table-view-list>tbody>tr.new,.wp-list-table.table-view-list>tbody>tr.new.expanded+.details{background-color:#fff}.wp-list-table.table-view-list>tbody>tr .column-primary>:first-child,.wp-list-table.table-view-list>tbody>tr .row-title{font-weight:400}.wp-list-table.table-view-list>tbody>tr.new .column-primary>:first-child,.wp-list-table.table-view-list>tbody>tr.new .row-title{font-weight:600}.wp-list-table.table-view-list>tbody>tr .amp-validation-error-status-dropdown{align-items:center;display:flex}.wp-list-table.table-view-list>tbody>tr .amp-validation-error-status-dropdown:after{background:#d3e5e5 url(../images/amp-delete.svg) no-repeat 50%;background-size:20px auto;border-radius:5px;content:"";display:inline-block;height:20px;width:20px}.wp-list-table.table-view-list>tbody>tr.kept .amp-validation-error-status-dropdown:after{background-color:#f7ded4;background-image:url(../images/amp-alert.svg);background-size:18px auto}.wp-list-table.table-view-list>tbody>tr select.amp-validation-error-status{margin-right:10px}#col-left{display:none}#col-right{float:none;width:auto}#filter-by-date{float:none}td.column-details pre,td.column-sources pre{overflow:auto}th.column-created_date_gmt,th.column-error_type{width:15%}td.column-error_code .error-code{font-family:Consolas,Monaco,monospace}th.column-included{width:15%}.status-text{align-items:center;display:flex;padding-bottom:.6rem}#amp-enabled-icon.status-text:before{background-size:20px 20px;content:"";height:20px;margin-right:4px;min-width:20px;width:20px}.status-text>.amp-icon:before{height:20px;margin-right:6px;min-width:20px;width:20px}.wp-heading-inline .status-text>.amp-icon:before{font-size:23px;margin-right:inherit;vertical-align:middle}.status-text.amp-enabled:before{background-image:url(../images/amp-logo-icon.svg)}.status-text.amp-disabled:before{background-image:url(../images/amp-logo-gray.svg)}.row-actions .amp_validation_error_accept>a{color:#006505}.row-actions .amp_validation_error_reject>a{color:#a00}.notice.accept-reject-error .button.accept{background:#006505;border-color:#006505}.notice.accept-reject-error .button.reject{background:#a00;border-color:#a00}.notice.error-details{margin-top:1px}.notice.error-details.unreviewed{background-color:#fff;border-left-color:#c65632}.wp-heading-inline .status-text{display:inline-block;padding-bottom:0;vertical-align:middle}.wp-heading-inline .status-text:before{display:inline-block}.wp-heading-inline code{font-size:1rem}.validation-error-sources{border-collapse:collapse}.validation-error-sources tbody:not(:first-child){border-top:1px solid #ddd;margin:0}.validation-error-sources td,.validation-error-sources th{padding:2px 4px;vertical-align:top}.validation-error-sources tbody>tr:first-child>td,.validation-error-sources tbody>tr:first-child>th{padding-top:.75em}.validation-error-sources tbody>tr:last-child>td,.validation-error-sources tbody>tr:last-child>th{padding-bottom:.75em}.validation-error-sources th{font-weight:600;text-align:right}PK.3Y6�f=bunyad-amp/assets/css/amp-validation-single-error-url-rtl.css#the-list tr{scroll-margin-top:32px}@media screen and (max-width:782px){#the-list tr{scroll-margin-top:46px}}@media screen and (max-width:600px){#the-list tr{scroll-margin-top:0}}.column-error_code>.single-url-detail-toggle{background:none;border:none;color:#1e1e1e;cursor:pointer;line-height:1.682;padding:5px 0 5px 36px;position:relative;text-align:right;width:100%}.column-error_code>.single-url-detail-toggle:after{align-items:center;background-image:url(../images/down-triangle.svg);background-position:50%;background-repeat:no-repeat;background-size:contain;content:"";display:flex;height:12px;justify-content:center;left:0;margin-top:5px;position:absolute;top:0;width:12px}tr.expanded .single-url-detail-toggle:after{transform:rotate(-180deg)}.details-attributes>.detailed{display:none}.details details.details-attributes:hover{cursor:pointer}.details dl.detailed{margin-top:10px;padding-right:30px}.details .detailed summary code{display:inline-block;font-weight:600;margin-right:12px;min-width:240px}.detailed pre{white-space:pre-wrap}.column-status select{vertical-align:top}#number-errors{background-color:#d3d3d3b8;color:#000;text-align:center}#url-post-filter{display:inline;float:none}.tablenav.bottom,.tablenav.top{display:none}.amp-validated-url a{-webkit-text-decoration:none;text-decoration:none}.curtime.misc-pub-section{margin-top:.5rem}.wp-list-table th.column-error_code{width:30%}.wp-list-table th.column-details,.wp-list-table th.column-error_type{width:15%}.wp-list-table th.column-sources_with_invalid_output{width:30%}.wp-list-table th.column-status{width:150px}.wp-list-table th.column-reviewed{width:100px}#post-body-content #url-post-filter,#post-body-content .search-box,#post-body-content button.action{margin-bottom:4px}#post-body-content button.reject{margin-right:4px}#remove-keep-buttons:not(.hidden),#vertical-divider{display:inline-block}#vertical-divider{border-left:1px solid #a0a5aa;height:30px;margin-left:15px;vertical-align:middle;width:15px}#amp-invalid-markup>.amp-icon:before{font-size:24px;margin-left:3px;margin-right:-2px}PK.3Y��`9bunyad-amp/assets/css/amp-validation-single-error-url.css#the-list tr{scroll-margin-top:32px}@media screen and (max-width:782px){#the-list tr{scroll-margin-top:46px}}@media screen and (max-width:600px){#the-list tr{scroll-margin-top:0}}.column-error_code>.single-url-detail-toggle{background:none;border:none;color:#1e1e1e;cursor:pointer;line-height:1.682;padding:5px 36px 5px 0;position:relative;text-align:left;width:100%}.column-error_code>.single-url-detail-toggle:after{align-items:center;background-image:url(../images/down-triangle.svg);background-position:50%;background-repeat:no-repeat;background-size:contain;content:"";display:flex;height:12px;justify-content:center;margin-top:5px;position:absolute;right:0;top:0;width:12px}tr.expanded .single-url-detail-toggle:after{transform:rotate(180deg)}.details-attributes>.detailed{display:none}.details details.details-attributes:hover{cursor:pointer}.details dl.detailed{margin-top:10px;padding-left:30px}.details .detailed summary code{display:inline-block;font-weight:600;margin-left:12px;min-width:240px}.detailed pre{white-space:pre-wrap}.column-status select{vertical-align:top}#number-errors{background-color:#d3d3d3b8;color:#000;text-align:center}#url-post-filter{display:inline;float:none}.tablenav.bottom,.tablenav.top{display:none}.amp-validated-url a{-webkit-text-decoration:none;text-decoration:none}.curtime.misc-pub-section{margin-top:.5rem}.wp-list-table th.column-error_code{width:30%}.wp-list-table th.column-details,.wp-list-table th.column-error_type{width:15%}.wp-list-table th.column-sources_with_invalid_output{width:30%}.wp-list-table th.column-status{width:150px}.wp-list-table th.column-reviewed{width:100px}#post-body-content #url-post-filter,#post-body-content .search-box,#post-body-content button.action{margin-bottom:4px}#post-body-content button.reject{margin-left:4px}#remove-keep-buttons:not(.hidden),#vertical-divider{display:inline-block}#vertical-divider{border-right:1px solid #a0a5aa;height:30px;margin-right:15px;vertical-align:middle;width:15px}#amp-invalid-markup>.amp-icon:before{font-size:24px;margin-left:-2px;margin-right:3px}PK.3Y=g�]]5bunyad-amp/assets/css/amp-validation-tooltips-rtl.css.tooltip-button{color:#767676;cursor:pointer;margin:0 6px}.tooltip[hidden]{visibility:hidden}PK.3Y=g�]]1bunyad-amp/assets/css/amp-validation-tooltips.css.tooltip-button{color:#767676;cursor:pointer;margin:0 6px}.tooltip[hidden]{visibility:hidden}PK.3Y�/}��[�[+bunyad-amp/assets/css/wp-components-rtl.css@charset "UTF-8";:root{--wp-admin-theme-color:#3858e9;--wp-admin-theme-color--rgb:56,88,233;--wp-admin-theme-color-darker-10:#2145e6;--wp-admin-theme-color-darker-10--rgb:33,69,230;--wp-admin-theme-color-darker-20:#183ad6;--wp-admin-theme-color-darker-20--rgb:24,58,214;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.components-animate__appear{animation:components-animate__appear-animation .1s cubic-bezier(0,0,.2,1) 0s;animation-fill-mode:forwards}@media (prefers-reduced-motion:reduce){.components-animate__appear{animation-delay:0s;animation-duration:1ms}}.components-animate__appear.is-from-top,.components-animate__appear.is-from-top.is-from-left{transform-origin:top right}.components-animate__appear.is-from-top.is-from-right{transform-origin:top left}.components-animate__appear.is-from-bottom,.components-animate__appear.is-from-bottom.is-from-left{transform-origin:bottom right}.components-animate__appear.is-from-bottom.is-from-right{transform-origin:bottom left}@keyframes components-animate__appear-animation{0%{transform:translateY(-2em) scaleY(0) scaleX(0)}to{transform:translateY(0) scaleY(1) scaleX(1)}}.components-animate__slide-in{animation:components-animate__slide-in-animation .1s cubic-bezier(0,0,.2,1);animation-fill-mode:forwards}@media (prefers-reduced-motion:reduce){.components-animate__slide-in{animation-delay:0s;animation-duration:1ms}}.components-animate__slide-in.is-from-left{transform:translateX(-100%)}.components-animate__slide-in.is-from-right{transform:translateX(100%)}@keyframes components-animate__slide-in-animation{to{transform:translateX(0)}}.components-animate__loading{animation:components-animate__loading 1.6s ease-in-out infinite}@keyframes components-animate__loading{0%{opacity:.5}50%{opacity:1}to{opacity:.5}}.components-autocomplete__popover .components-popover__content{min-width:220px;padding:16px}.components-autocomplete__result.components-button{display:flex;height:auto;min-height:36px;text-align:right;width:100%}.components-autocomplete__result.components-button.is-selected{box-shadow:0 0 0 2px #3858e9;box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-button-group{display:inline-block}.components-button-group .components-button{border-radius:0;box-shadow:inset 0 0 0 1px #1e1e1e;color:#1e1e1e;display:inline-flex}.components-button-group .components-button+.components-button{margin-right:-1px}.components-button-group .components-button:first-child{border-radius:0 2px 2px 0}.components-button-group .components-button:last-child{border-radius:2px 0 0 2px}.components-button-group .components-button.is-primary,.components-button-group .components-button:focus{position:relative;z-index:1}.components-button-group .components-button.is-primary{box-shadow:inset 0 0 0 1px #1e1e1e}.components-button{align-items:center;-webkit-appearance:none;background:none;border:0;border-radius:2px;box-sizing:border-box;color:#1e1e1e;color:var(--wp-components-color-foreground,#1e1e1e);cursor:pointer;display:inline-flex;font-family:inherit;font-size:13px;font-weight:400;height:36px;margin:0;padding:6px 12px;-webkit-text-decoration:none;text-decoration:none;transition:box-shadow .1s linear}@media (prefers-reduced-motion:reduce){.components-button{transition-delay:0s;transition-duration:0s}}.components-button.is-next-40px-default-size{height:40px}.components-button:hover,.components-button[aria-expanded=true]{color:#3858e9;color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-button:disabled:hover,.components-button[aria-disabled=true]:hover{color:initial}.components-button:focus:not(:disabled){box-shadow:0 0 0 2px #3858e9;box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));outline:3px solid #0000}.components-button.is-primary{background:#3858e9;background:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));color:#fff;color:var(--wp-components-color-accent-inverted,#fff);outline:1px solid #0000;-webkit-text-decoration:none;text-decoration:none;text-shadow:none;white-space:nowrap}.components-button.is-primary:hover:not(:disabled){background:#2145e6;background:var(--wp-components-color-accent-darker-10,var(--wp-admin-theme-color-darker-10,#2145e6));color:#fff;color:var(--wp-components-color-accent-inverted,#fff)}.components-button.is-primary:active:not(:disabled){background:#183ad6;background:var(--wp-components-color-accent-darker-20,var(--wp-admin-theme-color-darker-20,#183ad6));border-color:#183ad6;border-color:var(--wp-components-color-accent-darker-20,var(--wp-admin-theme-color-darker-20,#183ad6));color:#fff;color:var(--wp-components-color-accent-inverted,#fff)}.components-button.is-primary:focus:not(:disabled){box-shadow:inset 0 0 0 1px #fff,0 0 0 2px #3858e9;box-shadow:inset 0 0 0 1px var(--wp-components-color-background,#fff),0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-button.is-primary:disabled,.components-button.is-primary:disabled:active:enabled,.components-button.is-primary[aria-disabled=true],.components-button.is-primary[aria-disabled=true]:active:enabled,.components-button.is-primary[aria-disabled=true]:enabled{background:#3858e9;background:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));border-color:#3858e9;border-color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));color:#fff6;opacity:1;outline:none}.components-button.is-primary:disabled:active:enabled:focus:enabled,.components-button.is-primary:disabled:focus:enabled,.components-button.is-primary[aria-disabled=true]:active:enabled:focus:enabled,.components-button.is-primary[aria-disabled=true]:enabled:focus:enabled,.components-button.is-primary[aria-disabled=true]:focus:enabled{box-shadow:0 0 0 1px #fff,0 0 0 3px #3858e9;box-shadow:0 0 0 1px var(--wp-components-color-background,#fff),0 0 0 3px var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-button.is-primary.is-busy,.components-button.is-primary.is-busy:disabled,.components-button.is-primary.is-busy[aria-disabled=true]{background-image:linear-gradient(45deg,#3858e9 33%,#183ad6 0,#183ad6 70%,#3858e9 0);background-image:linear-gradient(45deg,var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9)) 33%,var(--wp-components-color-accent-darker-20,var(--wp-admin-theme-color-darker-20,#183ad6)) 33%,var(--wp-components-color-accent-darker-20,var(--wp-admin-theme-color-darker-20,#183ad6)) 70%,var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9)) 70%);background-size:100px 100%;border-color:#3858e9;border-color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));color:#fff;color:var(--wp-components-color-accent-inverted,#fff)}.components-button.is-secondary,.components-button.is-tertiary{outline:1px solid #0000}.components-button.is-secondary:active:not(:disabled),.components-button.is-tertiary:active:not(:disabled){box-shadow:none}.components-button.is-secondary:disabled,.components-button.is-secondary[aria-disabled=true],.components-button.is-secondary[aria-disabled=true]:hover,.components-button.is-tertiary:disabled,.components-button.is-tertiary[aria-disabled=true],.components-button.is-tertiary[aria-disabled=true]:hover{background:#0000;color:#949494;opacity:1;transform:none}.components-button.is-secondary:disabled:not(:focus),.components-button.is-secondary[aria-disabled=true]:hover:not(:focus),.components-button.is-secondary[aria-disabled=true]:not(:focus),.components-button.is-tertiary:disabled:not(:focus),.components-button.is-tertiary[aria-disabled=true]:hover:not(:focus),.components-button.is-tertiary[aria-disabled=true]:not(:focus){box-shadow:none;outline:none}.components-button.is-secondary{background:#0000;box-shadow:inset 0 0 0 1px #3858e9;box-shadow:inset 0 0 0 1px var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));color:#3858e9;color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));outline:1px solid #0000;white-space:nowrap}.components-button.is-secondary:hover:not(:disabled):not([aria-disabled=true]){box-shadow:inset 0 0 0 1px #2145e6;box-shadow:inset 0 0 0 1px var(--wp-components-color-accent-darker-10,var(--wp-admin-theme-color-darker-10,#2145e6))}.components-button.is-tertiary{background:#0000;color:#3858e9;color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));white-space:nowrap}.components-button.is-tertiary:hover:not(:disabled):not([aria-disabled=true]){background:#3858e90a;background:rgba(var(--wp-admin-theme-color--rgb),.04)}.components-button.is-tertiary:active:not(:disabled):not([aria-disabled=true]){background:#3858e914;background:rgba(var(--wp-admin-theme-color--rgb),.08)}p+.components-button.is-tertiary{margin-right:-6px}.components-button.is-destructive{--wp-components-color-accent:#cc1818;--wp-components-color-accent-darker-10:#9e1313;--wp-components-color-accent-darker-20:#710d0d}.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link){color:#cc1818}.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link):hover:not(:disabled){color:#710d0d}.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link):focus:not(:disabled){box-shadow:0 0 0 2px #cc1818;box-shadow:0 0 0 var(--wp-admin-border-width-focus) #cc1818}.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link):active:not(:disabled){background:#ccc}.components-button.is-link{background:none;border:0;border-radius:0;box-shadow:none;color:#3858e9;color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));height:auto;margin:0;outline:none;padding:0;text-align:right;-webkit-text-decoration:underline;text-decoration:underline;transition-duration:.05s;transition-property:border,background,color;transition-timing-function:ease-in-out}@media (prefers-reduced-motion:reduce){.components-button.is-link{transition-delay:0s;transition-duration:0s}}.components-button.is-link:focus{border-radius:2px}.components-button:not(:disabled):not([aria-disabled=true]):active{color:#1e1e1e;color:var(--wp-components-color-foreground,#1e1e1e)}.components-button:disabled,.components-button[aria-disabled=true]{cursor:default;opacity:.3}.components-button.is-busy,.components-button.is-secondary.is-busy,.components-button.is-secondary.is-busy:disabled,.components-button.is-secondary.is-busy[aria-disabled=true]{animation:components-button__busy-animation 2.5s linear infinite;background-image:linear-gradient(45deg,#fafafa 33%,#e0e0e0 0,#e0e0e0 70%,#fafafa 0);background-size:100px 100%;opacity:1}@media (prefers-reduced-motion:reduce){.components-button.is-busy,.components-button.is-secondary.is-busy,.components-button.is-secondary.is-busy:disabled,.components-button.is-secondary.is-busy[aria-disabled=true]{animation-duration:0s}}.components-button.is-compact{height:32px}.components-button.is-compact.has-icon:not(.has-text){min-width:32px;padding:0;width:32px}.components-button.is-small{font-size:11px;height:24px;line-height:22px;padding:0 8px}.components-button.is-small.has-icon:not(.has-text){min-width:24px;padding:0;width:24px}.components-button.has-icon{justify-content:center;min-width:36px;padding:6px}.components-button.has-icon.is-next-40px-default-size{min-width:40px}.components-button.has-icon .dashicon{align-items:center;box-sizing:initial;display:inline-flex;justify-content:center;padding:2px}.components-button.has-icon.has-text{gap:4px;justify-content:start;padding-left:12px;padding-right:8px}.components-button.is-pressed{background:#1e1e1e;background:var(--wp-components-color-foreground,#1e1e1e);color:#fff;color:var(--wp-components-color-foreground-inverted,#fff)}.components-button.is-pressed:focus:not(:disabled){box-shadow:inset 0 0 0 1px #fff,0 0 0 2px #3858e9;box-shadow:inset 0 0 0 1px var(--wp-components-color-background,#fff),0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));outline:2px solid #0000}.components-button.is-pressed:hover:not(:disabled){background:#1e1e1e;background:var(--wp-components-color-foreground,#1e1e1e);color:#fff;color:var(--wp-components-color-foreground-inverted,#fff)}.components-button svg{fill:currentColor;outline:none}@media (forced-colors:active){.components-button svg{fill:CanvasText}}.components-button .components-visually-hidden{height:auto}@keyframes components-button__busy-animation{0%{background-position:200px 0}}.components-checkbox-control__input[type=checkbox]{-webkit-appearance:none;appearance:none;background:#fff;border:1px solid #1e1e1e;border-radius:2px;box-shadow:0 0 0 #0000;clear:none;color:#1e1e1e;cursor:pointer;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;height:24px;line-height:normal;line-height:0;margin:0 0 0 4px;outline:0;padding:6px 8px;padding:0!important;text-align:center;transition:box-shadow .1s linear;transition:none;transition:border-color .1s ease-in-out;vertical-align:top;width:24px}@media (min-width:600px){.components-checkbox-control__input[type=checkbox]{font-size:13px;line-height:normal}}.components-checkbox-control__input[type=checkbox]:focus{border-color:#3858e9;border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px #3858e9;box-shadow:0 0 0 .5px var(--wp-admin-theme-color)}.components-checkbox-control__input[type=checkbox]::-webkit-input-placeholder{color:#1e1e1e9e}.components-checkbox-control__input[type=checkbox]::-moz-placeholder{color:#1e1e1e9e;opacity:1}.components-checkbox-control__input[type=checkbox]:-ms-input-placeholder{color:#1e1e1e9e}.components-checkbox-control__input[type=checkbox]:focus{box-shadow:0 0 0 2px #fff,0 0 0 4px var(--wp-admin-theme-color)}.components-checkbox-control__input[type=checkbox]:checked{background:#3858e9;background:var(--wp-admin-theme-color);border-color:#3858e9;border-color:var(--wp-admin-theme-color)}.components-checkbox-control__input[type=checkbox]:checked::-ms-check{opacity:0}.components-checkbox-control__input[type=checkbox]:checked:before,.components-checkbox-control__input[type=checkbox][aria-checked=mixed]:before{color:#fff;margin:-3px -5px}@media (min-width:782px){.components-checkbox-control__input[type=checkbox]:checked:before,.components-checkbox-control__input[type=checkbox][aria-checked=mixed]:before{margin:-4px -5px 0 0}}.components-checkbox-control__input[type=checkbox][aria-checked=mixed]{background:#3858e9;background:var(--wp-admin-theme-color);border-color:#3858e9;border-color:var(--wp-admin-theme-color)}.components-checkbox-control__input[type=checkbox][aria-checked=mixed]:before{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"";display:inline-block;float:right;font:normal 30px/1 dashicons;vertical-align:middle;width:16px}@media (min-width:782px){.components-checkbox-control__input[type=checkbox][aria-checked=mixed]:before{float:none;font-size:21px}}@media (min-width:600px){.components-checkbox-control__input[type=checkbox]{height:20px;width:20px}}@media (prefers-reduced-motion:reduce){.components-checkbox-control__input[type=checkbox]{transition-delay:0s;transition-duration:0s}}.components-checkbox-control__input[type=checkbox]:focus{box-shadow:0 0 0 2px #fff,0 0 0 4px #3858e9;box-shadow:0 0 0 var(--wp-admin-border-width-focus) #fff,0 0 0 calc(var(--wp-admin-border-width-focus)*2) var(--wp-admin-theme-color);outline:2px solid #0000;outline-offset:2px}.components-checkbox-control__input[type=checkbox]:checked,.components-checkbox-control__input[type=checkbox]:indeterminate{background:#3858e9;background:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));border-color:#3858e9;border-color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-checkbox-control__input[type=checkbox]:checked::-ms-check,.components-checkbox-control__input[type=checkbox]:indeterminate::-ms-check{opacity:0}.components-checkbox-control__input[type=checkbox]:checked:before{content:none}.components-checkbox-control__input-container{display:inline-block;height:24px;margin-left:12px;position:relative;vertical-align:middle;width:24px}@media (min-width:600px){.components-checkbox-control__input-container{height:20px;width:20px}}svg.components-checkbox-control__checked,svg.components-checkbox-control__indeterminate{fill:#fff;cursor:pointer;height:24px;pointer-events:none;position:absolute;right:0;top:0;-webkit-user-select:none;user-select:none;width:24px}@media (min-width:600px){svg.components-checkbox-control__checked,svg.components-checkbox-control__indeterminate{right:-2px;top:-2px}}.components-circular-option-picker{display:inline-block;min-width:188px;width:100%}.components-circular-option-picker .components-circular-option-picker__custom-clear-wrapper{display:flex;justify-content:flex-end;margin-top:12px}.components-circular-option-picker .components-circular-option-picker__swatches{display:flex;flex-wrap:wrap;gap:12px;position:relative;z-index:1}.components-circular-option-picker>:not(.components-circular-option-picker__swatches){position:relative;z-index:0}.components-circular-option-picker__option-wrapper{display:inline-block;height:28px;transform:scale(1);transition:transform .1s ease;vertical-align:top;width:28px;will-change:transform}@media (prefers-reduced-motion:reduce){.components-circular-option-picker__option-wrapper{transition-delay:0s;transition-duration:0s}}.components-circular-option-picker__option-wrapper:hover{transform:scale(1.2)}.components-circular-option-picker__option-wrapper>div{height:100%;width:100%}.components-circular-option-picker__option-wrapper:before{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='28' height='28' fill='none'%3E%3Cpath fill='%23555D65' d='M6 8V6H4v2zm2 0V6h2v2zm2 8H8v-2h2zm2 0v-2h2v2zm0 2v-2h-2v2H8v2h2v-2zm2 0v2h-2v-2zm2 0h-2v-2h2z'/%3E%3Cpath fill='%23555D65' fill-rule='evenodd' d='M18 18h2v-2h-2v-2h2v-2h-2v-2h2V8h-2v2h-2V8h-2v2h2v2h-2v2h2v2h2zm-2-4v-2h2v2z' clip-rule='evenodd'/%3E%3Cpath fill='%23555D65' d='M18 18v2h-2v-2z'/%3E%3Cpath fill='%23555D65' fill-rule='evenodd' d='M8 10V8H6v2H4v2h2v2H4v2h2v2H4v2h2v2H4v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2V8h-2V6h2V4h-2v2h-2V4h-2v2h-2V4h-2v2h-2V4h-2v2h2v2h-2v2zm0 2v-2H6v2zm2 0v-2h2v2zm0 2v-2H8v2H6v2h2v2H6v2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2V8h-2V6h-2v2h-2V6h-2v2h-2v2h2v2h-2v2z' clip-rule='evenodd'/%3E%3Cpath fill='%23555D65' fill-rule='evenodd' d='M4 0H2v2H0v2h2v2H0v2h2v2H0v2h2v2H0v2h2v2H0v2h2v2H0v2h2v2H0v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2V8h-2V6h2V4h-2V2h2V0h-2v2h-2V0h-2v2h-2V0h-2v2h-2V0h-2v2h-2V0h-2v2H8V0H6v2H4zm0 4V2H2v2zm2 0V2h2v2zm0 2V4H4v2H2v2h2v2H2v2h2v2H2v2h2v2H2v2h2v2H2v2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2V8h-2V6h2V4h-2V2h-2v2h-2V2h-2v2h-2V2h-2v2h-2V2h-2v2H8v2z' clip-rule='evenodd'/%3E%3C/svg%3E");border-radius:50%;bottom:1px;content:"";left:1px;position:absolute;right:1px;top:1px;z-index:-1}.components-circular-option-picker__option{background:#0000;border:none;border-radius:50%;box-shadow:inset 0 0 0 14px;cursor:pointer;display:inline-block;height:100%;transition:box-shadow .1s ease;vertical-align:top;width:100%}@media (prefers-reduced-motion:reduce){.components-circular-option-picker__option{transition-delay:0s;transition-duration:0s}}.components-circular-option-picker__option:hover{box-shadow:inset 0 0 0 14px!important}.components-circular-option-picker__option[aria-pressed=true],.components-circular-option-picker__option[aria-selected=true]{box-shadow:inset 0 0 0 4px;overflow:visible;position:relative;z-index:1}.components-circular-option-picker__option[aria-pressed=true]+svg,.components-circular-option-picker__option[aria-selected=true]+svg{border-radius:50%;pointer-events:none;position:absolute;right:2px;top:2px;z-index:2}.components-circular-option-picker__option:after{border:1px solid #0000;border-radius:50%;bottom:-1px;box-shadow:inset 0 0 0 1px #0003;box-sizing:inherit;content:"";left:-1px;position:absolute;right:-1px;top:-1px}.components-circular-option-picker__option:focus:after{border:2px solid #757575;border-radius:50%;box-shadow:inset 0 0 0 2px #fff;content:"";height:calc(100% + 4px);position:absolute;right:50%;top:50%;transform:translate(50%,-50%);width:calc(100% + 4px)}.components-circular-option-picker__option.components-button:focus{background-color:initial;box-shadow:inset 0 0 0 14px;outline:none}.components-circular-option-picker__button-action .components-circular-option-picker__option{background:#fff;color:#fff}.components-circular-option-picker__dropdown-link-action{margin-left:16px}.components-circular-option-picker__dropdown-link-action .components-button{line-height:22px}.components-palette-edit__popover-gradient-picker{padding:8px;width:260px}.components-dropdown-menu__menu .components-palette-edit__menu-button{width:100%}.component-color-indicator{background:#fff linear-gradient(45deg,#0000 48%,#ddd 0,#ddd 52%,#0000 0);border-radius:50%;box-shadow:inset 0 0 0 1px #0003;display:inline-block;height:20px;padding:0;width:20px}.components-combobox-control{width:100%}input.components-combobox-control__input[type=text]{border:none;box-shadow:none;font-family:inherit;font-size:16px;line-height:inherit;margin:0;min-height:auto;padding:2px;width:100%}@media (min-width:600px){input.components-combobox-control__input[type=text]{font-size:13px}}input.components-combobox-control__input[type=text]:focus{box-shadow:none;outline:none}.components-combobox-control__suggestions-container{align-items:flex-start;border:1px solid #949494;border-radius:2px;box-shadow:0 0 0 #0000;display:flex;flex-wrap:wrap;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;line-height:normal;padding:0;transition:box-shadow .1s linear;width:100%}@media (prefers-reduced-motion:reduce){.components-combobox-control__suggestions-container{transition-delay:0s;transition-duration:0s}}@media (min-width:600px){.components-combobox-control__suggestions-container{font-size:13px;line-height:normal}}.components-combobox-control__suggestions-container:focus{border-color:#3858e9;border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px #3858e9;box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid #0000}.components-combobox-control__suggestions-container::-webkit-input-placeholder{color:#1e1e1e9e}.components-combobox-control__suggestions-container::-moz-placeholder{color:#1e1e1e9e;opacity:1}.components-combobox-control__suggestions-container:-ms-input-placeholder{color:#1e1e1e9e}.components-combobox-control__suggestions-container:focus-within{border-color:#3858e9;border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px #3858e9;box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid #0000}.components-combobox-control__reset.components-button{display:flex;height:16px;min-width:16px;padding:0}.components-color-palette__custom-color-wrapper{position:relative;z-index:0}.components-color-palette__custom-color-button{background:none;border:none;border-radius:2px 2px 0 0;box-shadow:inset 0 0 0 1px #0003;box-sizing:border-box;cursor:pointer;height:64px;outline:1px solid #0000;position:relative;width:100%}.components-color-palette__custom-color-button:focus{box-shadow:inset 0 0 0 2px #3858e9;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));outline-width:2px}.components-color-palette__custom-color-button:after{background-image:repeating-linear-gradient(45deg,#e0e0e0 25%,#0000 0,#0000 75%,#e0e0e0 0,#e0e0e0),repeating-linear-gradient(45deg,#e0e0e0 25%,#0000 0,#0000 75%,#e0e0e0 0,#e0e0e0);background-position:0 0,24px 24px;background-size:48px 48px;content:"";height:100%;position:absolute;right:0;top:0;width:100%;z-index:-1}.components-color-palette__custom-color-text-wrapper{border-radius:0 0 2px 2px;box-shadow:inset 0 -1px 0 0 #0003,inset -1px 0 0 0 #0003,inset 1px 0 0 0 #0003;font-size:13px;padding:12px 16px;position:relative}.components-color-palette__custom-color-name{color:#1e1e1e;color:var(--wp-components-color-foreground,#1e1e1e);margin:0 1px}.components-color-palette__custom-color-value{color:#757575}.components-color-palette__custom-color-value--is-hex{text-transform:uppercase}.components-color-palette__custom-color-value:empty:after{content:"​";visibility:hidden}.components-custom-gradient-picker:not(.is-next-has-no-margin){margin-bottom:24px;margin-top:12px}.components-custom-gradient-picker__gradient-bar{border-radius:2px;height:48px;position:relative;width:100%;z-index:1}.components-custom-gradient-picker__gradient-bar.has-gradient{background-image:repeating-linear-gradient(45deg,#e0e0e0 25%,#0000 0,#0000 75%,#e0e0e0 0,#e0e0e0),repeating-linear-gradient(45deg,#e0e0e0 25%,#0000 0,#0000 75%,#e0e0e0 0,#e0e0e0);background-position:0 0,12px 12px;background-size:24px 24px}.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__gradient-bar-background{inset:0;position:absolute}.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__markers-container{margin-left:auto;margin-right:auto;position:relative;width:calc(100% - 48px)}.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__control-point-dropdown{display:flex;height:16px;position:absolute;top:16px;width:16px}.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__insert-point-dropdown{background:#fff;border-radius:50%;color:#1e1e1e;height:inherit;min-width:16px;padding:2px;position:relative;width:inherit}.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__insert-point-dropdown svg{height:100%;width:100%}.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__control-point-button{border-radius:50%;box-shadow:inset 0 0 0 2px #fff,0 0 2px 0 #00000040;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) #fff,0 0 2px 0 #00000040;height:inherit;outline:2px solid #0000;padding:0;width:inherit}.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__control-point-button.is-active,.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__control-point-button:focus{box-shadow:inset 0 0 0 4px #fff,0 0 2px 0 #00000040;box-shadow:inset 0 0 0 calc(var(--wp-admin-border-width-focus)*2) #fff,0 0 2px 0 #00000040;outline:1.5px solid #0000}.components-custom-gradient-picker__remove-control-point-wrapper{padding-bottom:8px}.components-custom-gradient-picker__inserter{direction:ltr}.components-custom-gradient-picker__liner-gradient-indicator{display:inline-block;flex:0 auto;height:20px;width:20px}.components-custom-gradient-picker .components-custom-gradient-picker__toolbar{border:none}.components-custom-gradient-picker .components-custom-gradient-picker__toolbar>div+div{margin-right:1px}.components-custom-gradient-picker .components-custom-gradient-picker__toolbar button.is-pressed>svg{background:#fff;border:1px solid #949494;border-radius:2px}.components-custom-gradient-picker__ui-line{position:relative;z-index:0}.components-custom-select-control{font-size:13px;position:relative}.components-custom-select-control__button{outline:0;position:relative;text-align:right}.components-custom-select-control__hint{color:#949494;margin-right:10px}.components-custom-select-control__menu{background-color:#fff;border:1px solid #1e1e1e;border-radius:2px;max-height:400px;min-width:100%;outline:none;overflow:auto;padding:0;position:absolute;transition:none;z-index:1000000}.components-custom-select-control__menu[aria-hidden=true]{display:none}.components-custom-select-control__item{align-items:center;cursor:default;display:grid;grid-template-columns:auto auto;line-height:28px;list-style-type:none;padding:8px 16px}.components-custom-select-control__item:not(.is-next-40px-default-size){padding:8px}.components-custom-select-control__item.has-hint{grid-template-columns:auto auto 30px}.components-custom-select-control__item.is-highlighted{background:#ddd}.components-custom-select-control__item .components-custom-select-control__item-hint{color:#949494;padding-left:4px;text-align:left}.components-custom-select-control__item .components-custom-select-control__item-icon{margin-right:auto}.components-custom-select-control__item:last-child{margin-bottom:0}.block-editor-dimension-control .components-base-control__field{align-items:center;display:flex}.block-editor-dimension-control .components-base-control__label{align-items:center;display:flex;margin-bottom:0;margin-left:1em}.block-editor-dimension-control .components-base-control__label .dashicon{margin-left:.5em}.block-editor-dimension-control.is-manual .components-base-control__label{width:10em}body.is-dragging-components-draggable{cursor:move;cursor:grabbing!important}.components-draggable__invisible-drag-image{height:50px;position:fixed;right:-1000px;width:50px}.components-draggable__clone{background:#0000;padding:0;pointer-events:none;position:fixed;z-index:1000000000}.components-drop-zone{border-radius:2px;bottom:0;left:0;opacity:0;position:absolute;right:0;top:0;visibility:hidden;z-index:40}.components-drop-zone.is-active{opacity:1;visibility:visible}.components-drop-zone__content{align-items:center;background-color:#3858e9;background-color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));bottom:0;color:#fff;display:flex;height:100%;justify-content:center;left:0;position:absolute;right:0;text-align:center;top:0;width:100%;z-index:50}.components-drop-zone__content-icon,.components-drop-zone__content-text{display:block}.components-drop-zone__content-icon{fill:currentColor;line-height:0;margin:0 auto 8px;pointer-events:none}.components-drop-zone__content-text{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px}.components-dropdown{display:inline-block}.components-dropdown__content .components-popover__content{padding:8px}.components-dropdown__content [role=menuitem]{white-space:nowrap}.components-dropdown-menu__toggle{vertical-align:top}.components-dropdown-menu__menu{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;line-height:1.4;width:100%}.components-dropdown-menu__menu .components-dropdown-menu__menu-item,.components-dropdown-menu__menu .components-menu-item{cursor:pointer;outline:none;padding:6px;white-space:nowrap;width:100%}.components-dropdown-menu__menu .components-dropdown-menu__menu-item.has-separator,.components-dropdown-menu__menu .components-menu-item.has-separator{margin-top:6px;overflow:visible;position:relative}.components-dropdown-menu__menu .components-dropdown-menu__menu-item.has-separator:before,.components-dropdown-menu__menu .components-menu-item.has-separator:before{background-color:#ddd;box-sizing:initial;content:"";display:block;height:1px;left:0;position:absolute;right:0;top:-3px}.components-dropdown-menu__menu .components-dropdown-menu__menu-item.is-active .dashicon,.components-dropdown-menu__menu .components-dropdown-menu__menu-item.is-active svg,.components-dropdown-menu__menu .components-menu-item.is-active .dashicon,.components-dropdown-menu__menu .components-menu-item.is-active svg{background:#1e1e1e;border-radius:1px;box-shadow:0 0 0 1px #1e1e1e;color:#fff}.components-dropdown-menu__menu .components-dropdown-menu__menu-item.is-icon-only,.components-dropdown-menu__menu .components-menu-item.is-icon-only{width:auto}.components-dropdown-menu__menu .components-menu-item__button,.components-dropdown-menu__menu .components-menu-item__button.components-button{height:auto;min-height:36px;padding-left:8px;padding-right:8px;text-align:right}.components-dropdown-menu__menu .components-menu-group{margin:0 -8px;padding:8px}.components-dropdown-menu__menu .components-menu-group:first-child{margin-top:-8px}.components-dropdown-menu__menu .components-menu-group:last-child{margin-bottom:-8px}.components-dropdown-menu__menu .components-menu-group+.components-menu-group{border-top:1px solid #ccc;margin-top:0;padding:8px}.is-alternate .components-dropdown-menu__menu .components-menu-group+.components-menu-group{border-color:#1e1e1e}.components-duotone-picker__color-indicator:before{background:#0000}.components-duotone-picker__color-indicator>.components-button,.components-duotone-picker__color-indicator>.components-button.is-pressed:hover:not(:disabled){background:linear-gradient(45deg,#0000 48%,#ddd 0,#ddd 52%,#0000 0);color:#0000}.components-duotone-picker__color-indicator>.components-button:not([aria-disabled=true]):active{color:#0000}.components-color-list-picker,.components-color-list-picker__swatch-button{width:100%}.components-color-list-picker__color-picker{margin:8px 0}.components-color-list-picker__swatch-button{padding:6px}.components-color-list-picker__swatch-color{margin:2px}.components-form-toggle{display:inline-block;position:relative}.components-form-toggle .components-form-toggle__track{background-color:#fff;border:1px solid #1e1e1e;border-radius:9px;box-sizing:border-box;content:"";display:inline-block;height:18px;overflow:hidden;position:relative;transition:background-color .2s ease,border-color .2s ease;vertical-align:top;width:36px}@media (prefers-reduced-motion:reduce){.components-form-toggle .components-form-toggle__track{transition-delay:0s;transition-duration:0s}}.components-form-toggle .components-form-toggle__track:after{border-top:18px solid #0000;box-sizing:border-box;content:"";inset:0;opacity:0;position:absolute;transition:opacity .2s ease}@media (prefers-reduced-motion:reduce){.components-form-toggle .components-form-toggle__track:after{transition-delay:0s;transition-duration:0s}}.components-form-toggle .components-form-toggle__thumb{background-color:#1e1e1e;border:6px solid #0000;border-radius:50%;box-sizing:border-box;display:block;height:12px;position:absolute;right:3px;top:3px;transition:transform .2s ease,background-color .2s ease-out;width:12px}@media (prefers-reduced-motion:reduce){.components-form-toggle .components-form-toggle__thumb{transition-delay:0s;transition-duration:0s}}.components-form-toggle.is-checked .components-form-toggle__track{background-color:#3858e9;background-color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));border-color:#3858e9;border-color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-form-toggle.is-checked .components-form-toggle__track:after{opacity:1}.components-form-toggle .components-form-toggle__input:focus+.components-form-toggle__track{box-shadow:0 0 0 2px #fff,0 0 0 4px #3858e9;box-shadow:0 0 0 var(--wp-admin-border-width-focus) #fff,0 0 0 calc(var(--wp-admin-border-width-focus)*2) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));outline:2px solid #0000;outline-offset:2px}.components-form-toggle.is-checked .components-form-toggle__thumb{background-color:#fff;border-width:0;transform:translateX(-18px)}.components-disabled .components-form-toggle,.components-form-toggle.is-disabled{opacity:.3}.components-form-toggle input.components-form-toggle__input[type=checkbox]{border:none;height:100%;margin:0;opacity:0;padding:0;position:absolute;right:0;top:0;width:100%;z-index:1}.components-form-toggle input.components-form-toggle__input[type=checkbox]:checked{background:none}.components-form-toggle input.components-form-toggle__input[type=checkbox]:before{content:""}.components-form-token-field__input-container{border:1px solid #949494;border-radius:2px;box-shadow:0 0 0 #0000;cursor:text;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;line-height:normal;padding:0;transition:box-shadow .1s linear;width:100%}@media (prefers-reduced-motion:reduce){.components-form-token-field__input-container{transition-delay:0s;transition-duration:0s}}@media (min-width:600px){.components-form-token-field__input-container{font-size:13px;line-height:normal}}.components-form-token-field__input-container:focus{border-color:#3858e9;border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px #3858e9;box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid #0000}.components-form-token-field__input-container::-webkit-input-placeholder{color:#1e1e1e9e}.components-form-token-field__input-container::-moz-placeholder{color:#1e1e1e9e;opacity:1}.components-form-token-field__input-container:-ms-input-placeholder{color:#1e1e1e9e}.components-form-token-field__input-container.is-disabled{background:#ddd;border-color:#ddd}.components-form-token-field__input-container.is-active{border-color:#3858e9;border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px #3858e9;box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid #0000}.components-form-token-field__input-container input[type=text].components-form-token-field__input{background:inherit;border:0;box-shadow:none;color:#1e1e1e;display:inline-block;flex:1;font-family:inherit;font-size:16px;margin-right:4px;max-width:100%;min-height:24px;min-width:50px;padding:0;width:100%}@media (min-width:600px){.components-form-token-field__input-container input[type=text].components-form-token-field__input{font-size:13px}}.components-form-token-field.is-active .components-form-token-field__input-container input[type=text].components-form-token-field__input,.components-form-token-field__input-container input[type=text].components-form-token-field__input:focus{box-shadow:none;outline:none}.components-form-token-field__input-container .components-form-token-field__token+input[type=text].components-form-token-field__input{width:auto}.components-form-token-field__token{color:#1e1e1e;display:flex;font-size:13px;max-width:100%}.components-form-token-field__token.is-success .components-form-token-field__remove-token,.components-form-token-field__token.is-success .components-form-token-field__token-text{background:#4ab866}.components-form-token-field__token.is-error .components-form-token-field__remove-token,.components-form-token-field__token.is-error .components-form-token-field__token-text{background:#cc1818}.components-form-token-field__token.is-validating .components-form-token-field__remove-token,.components-form-token-field__token.is-validating .components-form-token-field__token-text{color:#757575}.components-form-token-field__token.is-borderless{padding:0 0 0 24px;position:relative}.components-form-token-field__token.is-borderless .components-form-token-field__token-text{background:#0000;color:#3858e9;color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-form-token-field__token.is-borderless .components-form-token-field__remove-token{background:#0000;color:#757575;left:0;padding:0;position:absolute;top:1px}.components-form-token-field__token.is-borderless.is-success .components-form-token-field__token-text{color:#4ab866}.components-form-token-field__token.is-borderless.is-error .components-form-token-field__token-text{border-radius:0 4px 4px 0;color:#cc1818;padding:0 6px 0 4px}.components-form-token-field__token.is-borderless.is-validating .components-form-token-field__token-text{color:#1e1e1e}.components-form-token-field__token.is-disabled .components-form-token-field__remove-token{cursor:default}.components-form-token-field__remove-token.components-button,.components-form-token-field__token-text{background:#ddd;display:inline-block;height:auto;line-height:24px;min-width:unset;transition:all .2s cubic-bezier(.4,1,.4,1)}@media (prefers-reduced-motion:reduce){.components-form-token-field__remove-token.components-button,.components-form-token-field__token-text{animation-delay:0s;animation-duration:1ms;transition-delay:0s;transition-duration:0s}}.components-form-token-field__token-text{border-radius:0 2px 2px 0;overflow:hidden;padding:0 8px 0 0;text-overflow:ellipsis;white-space:nowrap}.components-form-token-field__remove-token.components-button{border-radius:2px 0 0 2px;color:#1e1e1e;cursor:pointer;line-height:10px;overflow:initial;padding:0 2px}.components-form-token-field__remove-token.components-button:hover{color:#1e1e1e}.components-form-token-field__suggestions-list{box-shadow:inset 0 1px 0 0 #949494;flex:1 0 100%;list-style:none;margin:0;max-height:128px;min-width:100%;overflow-y:auto;padding:0;transition:all .15s ease-in-out}@media (prefers-reduced-motion:reduce){.components-form-token-field__suggestions-list{transition-delay:0s;transition-duration:0s}}.components-form-token-field__suggestion{box-sizing:border-box;color:#1e1e1e;cursor:pointer;display:block;font-size:13px;margin:0;min-height:32px;padding:8px 12px}.components-form-token-field__suggestion.is-selected{background:#3858e9;background:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));color:#fff}@media (min-width:600px){.components-guide{width:600px}}.components-guide .components-modal__content{border-radius:2px;margin-top:0;padding:0}.components-guide .components-modal__content:before{content:none}.components-guide .components-modal__header{border-bottom:none;height:60px;padding:0;position:sticky}.components-guide .components-modal__header .components-button{align-self:flex-start;margin:8px 0 0 8px;position:static}.components-guide .components-modal__header .components-button:hover svg{fill:#fff}.components-guide__container{display:flex;flex-direction:column;justify-content:space-between;margin-top:-60px;min-height:100%}.components-guide__page{display:flex;flex-direction:column;justify-content:center;position:relative}@media (min-width:600px){.components-guide__page{min-height:300px}}.components-guide__footer{align-content:center;display:flex;height:36px;justify-content:center;margin:0 0 24px;padding:0 32px;position:relative;width:100%}.components-guide__page-control{margin:0;text-align:center}.components-guide__page-control li{display:inline-block;margin:0}.components-guide__page-control .components-button{color:#e0e0e0;height:30px;margin:-6px 0;min-width:20px}.components-guide__page-control li[aria-current=step] .components-button{color:#3858e9;color:var(--wp-components-color-accent,var(--wp-admin-theme-color))}.components-modal__frame.components-guide{border:none;max-height:575px;min-width:312px}@media (max-width:600px){.components-modal__frame.components-guide{margin:auto;max-width:calc(100vw - 32px)}}.components-button.components-guide__back-button,.components-button.components-guide__finish-button,.components-button.components-guide__forward-button{position:absolute}.components-button.components-guide__back-button{right:32px}.components-button.components-guide__finish-button,.components-button.components-guide__forward-button{left:32px}[role=region]{position:relative}.is-focusing-regions [role=region]:focus:after{bottom:0;content:"";left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:1000000}.is-focusing-regions .editor-post-publish-panel,.is-focusing-regions .interface-interface-skeleton__actions .edit-post-layout__toggle-entities-saved-states-panel,.is-focusing-regions .interface-interface-skeleton__actions .edit-post-layout__toggle-publish-panel,.is-focusing-regions .interface-interface-skeleton__sidebar .edit-post-layout__toggle-sidebar-panel,.is-focusing-regions [role=region]:focus:after,.is-focusing-regions.is-distraction-free .interface-interface-skeleton__header .edit-post-header{outline:4px solid #3858e9;outline:4px solid var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));outline-offset:-4px}.components-menu-group+.components-menu-group{border-top:1px solid #1e1e1e;margin-top:8px;padding-top:8px}.components-menu-group+.components-menu-group.has-hidden-separator{border-top:none;margin-top:0;padding-top:0}.components-menu-group__label{color:#757575;font-size:11px;font-weight:500;margin-bottom:12px;margin-top:4px;padding:0 8px;text-transform:uppercase;white-space:nowrap}.components-menu-item__button,.components-menu-item__button.components-button{width:100%}.components-menu-item__button.components-button[role=menuitemcheckbox] .components-menu-item__item:only-child,.components-menu-item__button.components-button[role=menuitemradio] .components-menu-item__item:only-child,.components-menu-item__button[role=menuitemcheckbox] .components-menu-item__item:only-child,.components-menu-item__button[role=menuitemradio] .components-menu-item__item:only-child{box-sizing:initial;padding-left:48px}.components-menu-item__button .components-menu-items__item-icon,.components-menu-item__button.components-button .components-menu-items__item-icon{display:inline-block;flex:0 0 auto}.components-menu-item__button .components-menu-items__item-icon.has-icon-right,.components-menu-item__button.components-button .components-menu-items__item-icon.has-icon-right{margin-left:-2px;margin-right:24px}.components-menu-item__button .components-menu-item__shortcut+.components-menu-items__item-icon.has-icon-right,.components-menu-item__button.components-button .components-menu-item__shortcut+.components-menu-items__item-icon.has-icon-right{margin-right:8px}.components-menu-item__button .block-editor-block-icon,.components-menu-item__button.components-button .block-editor-block-icon{margin-left:8px;margin-right:-2px}.components-menu-item__button.components-button.is-primary,.components-menu-item__button.is-primary{justify-content:center}.components-menu-item__button.components-button.is-primary .components-menu-item__item,.components-menu-item__button.is-primary .components-menu-item__item{margin-left:0}.components-menu-item__button.components-button:disabled.is-tertiary,.components-menu-item__button.components-button[aria-disabled=true].is-tertiary,.components-menu-item__button:disabled.is-tertiary,.components-menu-item__button[aria-disabled=true].is-tertiary{background:none;color:#2145e6;color:var(--wp-components-color-accent-darker-10,var(--wp-admin-theme-color-darker-10,#2145e6));opacity:.3}.components-menu-item__info-wrapper{display:flex;flex-direction:column;margin-left:auto}.components-menu-item__info{color:#757575;font-size:12px;margin-top:4px;white-space:normal}.components-menu-item__item{align-items:center;display:inline-flex;margin-left:auto;min-width:160px;white-space:nowrap}.components-menu-item__shortcut{align-self:center;color:currentColor;display:none;margin-left:0;margin-right:auto;padding-right:24px}@media (min-width:480px){.components-menu-item__shortcut{display:inline}}.components-menu-items-choice svg,.components-menu-items-choice.components-button svg{margin-left:12px}.components-menu-items-choice.components-button.has-icon,.components-menu-items-choice.has-icon{padding-right:12px}.components-modal__screen-overlay{animation:edit-post__fade-in-animation .2s ease-out 0s;animation-fill-mode:forwards;background-color:#00000059;bottom:0;display:flex;left:0;position:fixed;right:0;top:0;z-index:100000}@media (prefers-reduced-motion:reduce){.components-modal__screen-overlay{animation-delay:0s;animation-duration:1ms}}.components-modal__frame{animation:components-modal__appear-animation .1s ease-out;animation-fill-mode:forwards;background:#fff;border-radius:4px 4px 0 0;box-shadow:0 .7px 1px #00000026,0 2.7px 3.8px -.2px #00000026,0 5.5px 7.8px -.3px #00000026,-.1px 11.5px 16.4px -.5px #00000026;display:flex;margin:40px 0 0;overflow:hidden;width:100%}@media (prefers-reduced-motion:reduce){.components-modal__frame{animation-delay:0s;animation-duration:1ms}}@media (min-width:600px){.components-modal__frame{border-radius:4px;margin:auto;max-height:calc(100% - 120px);max-width:calc(100% - 32px);min-width:350px;width:auto}}@media (min-width:600px) and (min-width:600px){.components-modal__frame.is-full-screen{height:calc(100% - 32px);max-height:none;width:calc(100% - 32px)}}@media (min-width:600px) and (min-width:782px){.components-modal__frame.is-full-screen{height:calc(100% - 80px);max-width:none;width:calc(100% - 80px)}}@media (min-width:600px){.components-modal__frame.has-size-large,.components-modal__frame.has-size-medium,.components-modal__frame.has-size-small{width:100%}.components-modal__frame.has-size-small{max-width:384px}.components-modal__frame.has-size-medium{max-width:512px}.components-modal__frame.has-size-large{max-width:840px}}@media (min-width:960px){.components-modal__frame{max-height:70%}}@keyframes components-modal__appear-animation{0%{transform:translateY(32px)}to{transform:translateY(0)}}.components-modal__header{align-items:center;border-bottom:1px solid #0000;box-sizing:border-box;display:flex;flex-direction:row;height:72px;justify-content:space-between;padding:24px 32px 8px;position:absolute;right:0;top:0;width:100%;z-index:10}.components-modal__header .components-modal__header-heading{font-size:1.2rem;font-weight:600}.components-modal__header h1{line-height:1;margin:0}.components-modal__header .components-button{position:relative;right:8px}.components-modal__content.has-scrolled-content:not(.hide-header) .components-modal__header{border-bottom-color:#ddd}.components-modal__header+p{margin-top:0}.components-modal__header-heading-container{align-items:center;display:flex;flex-direction:row;flex-grow:1;justify-content:left}.components-modal__header-icon-container{display:inline-block}.components-modal__header-icon-container svg{max-height:36px;max-width:36px;padding:8px}.components-modal__content{flex:1;margin-top:72px;overflow:auto;padding:4px 32px 32px}.components-modal__content.hide-header{margin-top:0;padding-top:32px}.components-modal__content.is-scrollable:focus-visible{box-shadow:inset 0 0 0 2px #3858e9;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:2px solid #0000;outline-offset:-2px}.components-notice{align-items:center;background-color:#fff;border-right:4px solid #3858e9;border-right:4px solid var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));display:flex;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;padding:8px 12px}.components-notice.is-dismissible{position:relative}.components-notice.is-success{background-color:#eff9f1;border-right-color:#4ab866}.components-notice.is-warning{background-color:#fef8ee;border-right-color:#f0b849}.components-notice.is-error{background-color:#f4a2a2;border-right-color:#cc1818}.components-notice__content{flex-grow:1;margin:4px 0 4px 25px}.components-notice__actions{display:flex;flex-wrap:wrap}.components-notice__action.components-button{margin-left:8px}.components-notice__action.components-button,.components-notice__action.components-button.is-link{margin-right:12px}.components-notice__action.components-button.is-secondary{vertical-align:initial}.components-notice__dismiss{align-self:flex-start;color:#757575;flex-shrink:0}.components-notice__dismiss:not(:disabled):not([aria-disabled=true]):focus,.components-notice__dismiss:not(:disabled):not([aria-disabled=true]):not(.is-secondary):active,.components-notice__dismiss:not(:disabled):not([aria-disabled=true]):not(.is-secondary):hover{background-color:initial;color:#1e1e1e}.components-notice__dismiss:not(:disabled):not([aria-disabled=true]):not(.is-secondary):hover{box-shadow:none}.components-notice-list{box-sizing:border-box;max-width:100vw}.components-notice-list .components-notice__content{line-height:2;margin-bottom:12px;margin-top:12px}.components-notice-list .components-notice__action.components-button{display:block;margin-right:0;margin-top:8px}.components-panel{background:#fff;border:1px solid #e0e0e0}.components-panel>.components-panel__body:first-child,.components-panel>.components-panel__header:first-child{margin-top:-1px}.components-panel>.components-panel__body:last-child,.components-panel>.components-panel__header:last-child{border-bottom-width:0}.components-panel+.components-panel{margin-top:-1px}.components-panel__body{border-bottom:1px solid #e0e0e0;border-top:1px solid #e0e0e0}.components-panel__body h3{margin:0 0 .5em}.components-panel__body.is-opened{padding:16px}.components-panel__header{align-items:center;border-bottom:1px solid #ddd;box-sizing:initial;display:flex;height:47px;justify-content:space-between;padding:0 16px}.components-panel__header h2{color:inherit;font-size:inherit;margin:0}.components-panel__body+.components-panel__body,.components-panel__body+.components-panel__header,.components-panel__header+.components-panel__body,.components-panel__header+.components-panel__header{margin-top:-1px}.components-panel__body>.components-panel__body-title{display:block;font-size:inherit;margin-bottom:0;margin-top:0;padding:0;transition:background .1s ease-in-out}@media (prefers-reduced-motion:reduce){.components-panel__body>.components-panel__body-title{transition-delay:0s;transition-duration:0s}}.components-panel__body.is-opened>.components-panel__body-title{margin:-16px -16px 5px}.components-panel__body>.components-panel__body-title:hover{background:#f0f0f0;border:none}.components-panel__body-toggle.components-button{border:none;box-shadow:none;color:#1e1e1e;font-weight:500;height:auto;outline:none;padding:16px 16px 16px 48px;position:relative;text-align:right;transition:background .1s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){.components-panel__body-toggle.components-button{transition-delay:0s;transition-duration:0s}}.components-panel__body-toggle.components-button:focus{border-radius:0;box-shadow:inset 0 0 0 2px #3858e9;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-panel__body-toggle.components-button .components-panel__arrow{fill:currentColor;color:#1e1e1e;left:16px;position:absolute;top:50%;transform:translateY(-50%);transition:color .1s ease-in-out}@media (prefers-reduced-motion:reduce){.components-panel__body-toggle.components-button .components-panel__arrow{transition-delay:0s;transition-duration:0s}}body.rtl .components-panel__body-toggle.components-button .dashicons-arrow-right{-ms-filter:fliph;filter:FlipH;margin-top:-10px;transform:scaleX(-1)}.components-panel__icon{color:#757575;margin:-2px 6px -2px 0}.components-panel__body-toggle-icon{margin-left:-5px}.components-panel__color-title{float:right;height:19px}.components-panel__row{align-items:center;display:flex;justify-content:space-between;margin-top:8px;min-height:36px}.components-panel__row select{min-width:0}.components-panel__row label{flex-shrink:0;margin-left:12px;max-width:75%}.components-panel__row:empty,.components-panel__row:first-of-type{margin-top:0}.components-panel .circle-picker{padding-bottom:20px}.components-placeholder.components-placeholder{-moz-font-smoothing:subpixel-antialiased;-webkit-font-smoothing:subpixel-antialiased;background-color:#fff;border-radius:2px;box-shadow:inset 0 0 0 1px #1e1e1e;box-sizing:border-box;color:#1e1e1e;margin:0;outline:1px solid #0000;padding:1em;position:relative;text-align:right;width:100%}@supports (position:sticky){.components-placeholder.components-placeholder{align-items:flex-start;display:flex;flex-direction:column;justify-content:top}}.components-placeholder__error,.components-placeholder__fieldset,.components-placeholder__instructions,.components-placeholder__label{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px}.components-placeholder__label{align-items:center;display:flex;font-weight:600;margin-bottom:16px}.components-placeholder__label .block-editor-block-icon,.components-placeholder__label .dashicon,.components-placeholder__label>svg{fill:currentColor;margin-left:12px}@media (forced-colors:active){.components-placeholder__label .block-editor-block-icon,.components-placeholder__label .dashicon,.components-placeholder__label>svg{fill:CanvasText}}.components-placeholder__label:empty{display:none}.components-placeholder__fieldset,.components-placeholder__fieldset form{display:flex;flex-direction:row;flex-wrap:wrap;width:100%}.components-placeholder__fieldset form p,.components-placeholder__fieldset p{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px}.components-placeholder__fieldset.is-column-layout,.components-placeholder__fieldset.is-column-layout form{flex-direction:column}.components-placeholder__input[type=url]{border:1px solid #949494;border-radius:2px;box-shadow:0 0 0 #0000;flex:1 1 auto;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;line-height:normal;margin:0 0 0 8px;padding:6px 8px;transition:box-shadow .1s linear}@media (prefers-reduced-motion:reduce){.components-placeholder__input[type=url]{transition-delay:0s;transition-duration:0s}}@media (min-width:600px){.components-placeholder__input[type=url]{font-size:13px;line-height:normal}}.components-placeholder__input[type=url]:focus{border-color:#3858e9;border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px #3858e9;box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid #0000}.components-placeholder__input[type=url]::-webkit-input-placeholder{color:#1e1e1e9e}.components-placeholder__input[type=url]::-moz-placeholder{color:#1e1e1e9e;opacity:1}.components-placeholder__input[type=url]:-ms-input-placeholder{color:#1e1e1e9e}.components-placeholder__instructions{margin-bottom:1em}.components-placeholder__error{margin-top:1em;width:100%}.components-placeholder__fieldset .components-button{margin-bottom:12px;margin-left:12px}.components-placeholder__fieldset .components-button:last-child{margin-bottom:0;margin-left:0}.components-placeholder__fieldset .components-button:not(.is-link)~.components-button.is-link{margin-left:10px;margin-right:10px}.components-placeholder__fieldset .components-button:not(.is-link)~.components-button.is-link:last-child{margin-left:0}.components-placeholder.is-large .components-placeholder__label{font-size:18pt;font-weight:400}.components-placeholder.is-medium .components-placeholder__instructions,.components-placeholder.is-small .components-placeholder__instructions{display:none}.components-placeholder.is-medium .components-placeholder__fieldset,.components-placeholder.is-medium .components-placeholder__fieldset form,.components-placeholder.is-small .components-placeholder__fieldset,.components-placeholder.is-small .components-placeholder__fieldset form{flex-direction:column}.components-placeholder.is-medium .components-placeholder__fieldset .components-button,.components-placeholder.is-small .components-placeholder__fieldset .components-button{margin-left:auto}.components-placeholder.is-small .components-button{padding:0 8px 2px}.components-placeholder .components-placeholder__learn-more .components-external-link{color:#3858e9;color:var(--wp-admin-theme-color)}.components-placeholder.has-illustration{-webkit-backdrop-filter:blur(100px);backdrop-filter:blur(100px);backface-visibility:hidden;background-color:initial;border-radius:2px;box-shadow:none;color:inherit;display:flex;overflow:auto}.is-dark-theme .components-placeholder.has-illustration{background-color:#0000001a}.components-placeholder.has-illustration .components-placeholder__fieldset{margin-left:0;margin-right:0;width:auto}.components-placeholder.has-illustration .components-button,.components-placeholder.has-illustration .components-placeholder__instructions,.components-placeholder.has-illustration .components-placeholder__label{opacity:0;pointer-events:none;transition:opacity .1s linear}@media (prefers-reduced-motion:reduce){.components-placeholder.has-illustration .components-button,.components-placeholder.has-illustration .components-placeholder__instructions,.components-placeholder.has-illustration .components-placeholder__label{transition-delay:0s;transition-duration:0s}}.is-selected>.components-placeholder.has-illustration .components-button,.is-selected>.components-placeholder.has-illustration .components-placeholder__instructions,.is-selected>.components-placeholder.has-illustration .components-placeholder__label{opacity:1;pointer-events:auto}.components-placeholder.has-illustration:before{background:currentColor;bottom:0;content:"";left:0;opacity:.1;pointer-events:none;position:absolute;right:0;top:0}.components-placeholder__preview{display:flex;justify-content:center}.components-placeholder__illustration{stroke:currentColor;box-sizing:initial;height:100%;opacity:.25;position:absolute;right:50%;top:50%;transform:translate(50%,-50%);width:100%}.components-popover{will-change:transform;z-index:1000000}.components-popover.is-expanded{bottom:0;left:0;position:fixed;right:0;top:0;z-index:1000000!important}.components-popover__content{background:#fff;border-radius:2px;box-shadow:0 0 0 1px #ccc,0 .7px 1px #0000001a,0 1.2px 1.7px -.2px #0000001a,0 2.3px 3.3px -.5px #0000001a;box-sizing:border-box;width:min-content}.is-alternate .components-popover__content{box-shadow:0 0 0 1px #1e1e1e}.is-unstyled .components-popover__content{background:none;border-radius:0;box-shadow:none}.components-popover.is-expanded .components-popover__content{box-shadow:0 -1px 0 0 #ccc;height:calc(100% - 48px);overflow-y:visible;position:static;width:auto}.components-popover.is-expanded.is-alternate .components-popover__content{box-shadow:0 -1px 0 #1e1e1e}.components-popover__header{align-items:center;background:#fff;display:flex;height:48px;justify-content:space-between;padding:0 16px 0 8px}.components-popover__header-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.components-popover__close.components-button{z-index:5}.components-popover__arrow{display:flex;height:14px;pointer-events:none;position:absolute;width:14px}.components-popover__arrow:before{background-color:#fff;content:"";height:2px;left:1px;position:absolute;right:1px;top:-1px}.components-popover__arrow.is-top{bottom:-14px!important;transform:rotate(0)}.components-popover__arrow.is-right{left:-14px!important;transform:rotate(90deg)}.components-popover__arrow.is-bottom{top:-14px!important;transform:rotate(180deg)}.components-popover__arrow.is-left{right:-14px!important;transform:rotate(-90deg)}.components-popover__triangle{display:block;flex:1}.components-popover__triangle-bg{fill:#fff}.components-popover__triangle-border{fill:#0000;stroke-width:1px;stroke:#ccc}.is-alternate .components-popover__triangle-border{stroke:#1e1e1e}.components-popover-pointer-events-trap{background-color:initial;inset:0;position:fixed;z-index:1000000}.components-radio-control__input[type=radio]{border:1px solid #1e1e1e;border-radius:2px;border-radius:50%;box-shadow:0 0 0 #0000;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;height:24px;line-height:normal;margin-left:6px;margin-top:0;padding:6px 8px;transition:box-shadow .1s linear;transition:none;width:24px}@media (prefers-reduced-motion:reduce){.components-radio-control__input[type=radio]{transition-delay:0s;transition-duration:0s}}@media (min-width:600px){.components-radio-control__input[type=radio]{font-size:13px;line-height:normal}}.components-radio-control__input[type=radio]:focus{border-color:#3858e9;border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px #3858e9;box-shadow:0 0 0 .5px var(--wp-admin-theme-color)}.components-radio-control__input[type=radio]::-webkit-input-placeholder{color:#1e1e1e9e}.components-radio-control__input[type=radio]::-moz-placeholder{color:#1e1e1e9e;opacity:1}.components-radio-control__input[type=radio]:-ms-input-placeholder{color:#1e1e1e9e}@media (min-width:600px){.components-radio-control__input[type=radio]{height:20px;width:20px}}.components-radio-control__input[type=radio]:checked:before{background-color:#fff;border:4px solid #fff;box-sizing:inherit;height:8px;margin:0;transform:translate(-7px,7px);width:8px}@media (min-width:600px){.components-radio-control__input[type=radio]:checked:before{transform:translate(-5px,5px)}}.components-radio-control__input[type=radio]:focus{box-shadow:0 0 0 2px #fff,0 0 0 4px #3858e9;box-shadow:0 0 0 2px #fff,0 0 0 4px var(--wp-admin-theme-color);outline:2px solid #0000}.components-radio-control__input[type=radio]:checked{background:#3858e9;background:var(--wp-admin-theme-color);border-color:#3858e9;border-color:var(--wp-admin-theme-color)}.components-resizable-box__handle{display:none;height:23px;width:23px;z-index:2}.components-resizable-box__container.has-show-handle .components-resizable-box__handle{display:block}.components-resizable-box__container>img{width:inherit}.components-resizable-box__handle:after{background:#fff;border-radius:50%;box-shadow:inset 0 0 0 2px #3858e9;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));content:"";cursor:inherit;display:block;height:15px;left:calc(50% - 8px);outline:2px solid #0000;position:absolute;top:calc(50% - 8px);width:15px}.components-resizable-box__side-handle:before{background:#3858e9;background:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));border-radius:2px;content:"";cursor:inherit;display:block;height:3px;left:calc(50% - 1px);opacity:0;position:absolute;top:calc(50% - 1px);transition:transform .1s ease-in;width:3px;will-change:transform}@media (prefers-reduced-motion:reduce){.components-resizable-box__side-handle:before{transition-delay:0s;transition-duration:0s}}.components-resizable-box__corner-handle,.components-resizable-box__side-handle{z-index:2}.components-resizable-box__side-handle.components-resizable-box__handle-bottom,.components-resizable-box__side-handle.components-resizable-box__handle-bottom:before,.components-resizable-box__side-handle.components-resizable-box__handle-top,.components-resizable-box__side-handle.components-resizable-box__handle-top:before{border-left:0;border-right:0;right:0;width:100%}.components-resizable-box__side-handle.components-resizable-box__handle-left,.components-resizable-box__side-handle.components-resizable-box__handle-left:before,.components-resizable-box__side-handle.components-resizable-box__handle-right,.components-resizable-box__side-handle.components-resizable-box__handle-right:before{border-bottom:0;border-top:0;height:100%;top:0}.components-resizable-box__side-handle.components-resizable-box__handle-bottom:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-bottom:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-top:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-top:hover:before{animation:components-resizable-box__top-bottom-animation .1s ease-out 0s;animation-fill-mode:forwards}@media (prefers-reduced-motion:reduce){.components-resizable-box__side-handle.components-resizable-box__handle-bottom:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-bottom:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-top:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-top:hover:before{animation-delay:0s;animation-duration:1ms}}.components-resizable-box__side-handle.components-resizable-box__handle-left:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-left:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-right:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-right:hover:before{animation:components-resizable-box__left-right-animation .1s ease-out 0s;animation-fill-mode:forwards}@media (prefers-reduced-motion:reduce){.components-resizable-box__side-handle.components-resizable-box__handle-left:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-left:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-right:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-right:hover:before{animation-delay:0s;animation-duration:1ms}}@media not all and (min-resolution:0.001dpcm){@supports (-webkit-appearance:none){.components-resizable-box__side-handle.components-resizable-box__handle-bottom:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-bottom:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-left:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-left:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-right:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-right:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-top:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-top:hover:before{animation:none}}}@keyframes components-resizable-box__top-bottom-animation{0%{opacity:0;transform:scaleX(0)}to{opacity:1;transform:scaleX(1)}}@keyframes components-resizable-box__left-right-animation{0%{opacity:0;transform:scaleY(0)}to{opacity:1;transform:scaleY(1)}}.components-resizable-box__handle-right{right:-11.5px}.components-resizable-box__handle-left{left:-11.5px}.components-resizable-box__handle-top{top:-11.5px}.components-resizable-box__handle-bottom{bottom:-11.5px}.components-responsive-wrapper{align-items:center;display:flex;justify-content:center;max-width:100%;position:relative}.components-responsive-wrapper__content{display:block;max-width:100%;width:100%}.components-sandbox{overflow:hidden}iframe.components-sandbox{width:100%}body.lockscroll,html.lockscroll{overflow:hidden}.components-search-control{position:relative}.components-search-control input[type=search].components-search-control__input{background:#f0f0f0;border:none;border-radius:2px;box-shadow:0 0 0 #0000;display:block;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;height:48px;line-height:normal;margin-left:0;margin-right:0;padding:0 16px 0 48px;transition:box-shadow .1s linear;width:100%}@media (prefers-reduced-motion:reduce){.components-search-control input[type=search].components-search-control__input{transition-delay:0s;transition-duration:0s}}@media (min-width:600px){.components-search-control input[type=search].components-search-control__input{font-size:13px;line-height:normal}}.components-search-control input[type=search].components-search-control__input:focus{border-color:#3858e9;border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px #3858e9;box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid #0000}.components-search-control input[type=search].components-search-control__input::-webkit-input-placeholder{color:#1e1e1e9e}.components-search-control input[type=search].components-search-control__input::-moz-placeholder{color:#1e1e1e9e;opacity:1}.components-search-control input[type=search].components-search-control__input:-ms-input-placeholder{color:#1e1e1e9e}@media (min-width:600px){.components-search-control input[type=search].components-search-control__input{font-size:13px}}.components-search-control input[type=search].components-search-control__input:focus{background:#fff;box-shadow:inset 0 0 0 2px #3858e9;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-search-control input[type=search].components-search-control__input::placeholder{color:#757575}.components-search-control input[type=search].components-search-control__input::-webkit-search-cancel-button,.components-search-control input[type=search].components-search-control__input::-webkit-search-decoration,.components-search-control input[type=search].components-search-control__input::-webkit-search-results-button,.components-search-control input[type=search].components-search-control__input::-webkit-search-results-decoration{-webkit-appearance:none}.components-search-control.is-next-40px-default-size input[type=search].components-search-control__input{height:40px}.components-search-control.is-size-compact input[type=search].components-search-control__input{height:32px;padding-left:32px;padding-right:8px}.components-search-control__icon{align-items:center;display:flex;justify-content:center;left:12px;position:absolute;top:50%;transform:translateY(-50%);width:24px}.is-size-compact .components-search-control__icon{left:4px}.components-search-control__input-wrapper{position:relative}.components-select-control__input{-webkit-tap-highlight-color:rgba(0,0,0,0)!important;outline:0}@media (max-width:782px){.components-base-control .components-base-control__field .components-select-control__input{font-size:16px}}.components-snackbar{-webkit-backdrop-filter:blur(16px) saturate(180%);backdrop-filter:blur(16px) saturate(180%);background:#000000d9;border-radius:2px;box-shadow:0 .7px 1px #0000001a,0 1.2px 1.7px -.2px #0000001a,0 2.3px 3.3px -.5px #0000001a;box-sizing:border-box;color:#fff;cursor:pointer;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;max-width:600px;padding:12px 20px;pointer-events:auto;width:100%}@media (min-width:600px){.components-snackbar{width:-moz-fit-content;width:fit-content}}.components-snackbar:focus{box-shadow:inset 0 0 0 1px #fff,0 0 0 2px #3858e9;box-shadow:inset 0 0 0 1px #fff,0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-snackbar.components-snackbar-explicit-dismiss{cursor:default}.components-snackbar .components-snackbar__content-with-icon{margin-right:24px}.components-snackbar .components-snackbar__icon{position:absolute;right:28px;top:24px}.components-snackbar .components-snackbar__dismiss-button{cursor:pointer;margin-right:24px}.components-snackbar__action.components-button{color:#fff;flex-shrink:0;height:auto;line-height:1.4;margin-right:32px;padding:0}.components-snackbar__action.components-button:not(:disabled):not([aria-disabled=true]):not(.is-secondary){background-color:initial;-webkit-text-decoration:underline;text-decoration:underline}.components-snackbar__action.components-button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):focus{box-shadow:none;color:#fff;outline:1px dotted #fff}.components-snackbar__action.components-button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):hover{color:#fff;-webkit-text-decoration:none;text-decoration:none}.components-snackbar__content{align-items:baseline;display:flex;justify-content:space-between;line-height:1.4}.components-snackbar-list{box-sizing:border-box;pointer-events:none;position:absolute;width:100%;z-index:100000}.components-snackbar-list__notice-container{padding-top:8px;position:relative}.components-tab-panel__tabs{align-items:stretch;display:flex;flex-direction:row}.components-tab-panel__tabs[aria-orientation=vertical]{flex-direction:column}.components-tab-panel__tabs-item{background:#0000;border:none;border-radius:0;box-shadow:none;cursor:pointer;font-weight:500;height:48px;margin-right:0;padding:3px 16px;position:relative}.components-tab-panel__tabs-item:focus:not(:disabled){box-shadow:none;outline:none;position:relative}.components-tab-panel__tabs-item:after{background:#3858e9;background:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));border-radius:0;bottom:0;content:"";height:0;height:calc(var(--wp-admin-border-width-focus)*0);left:0;pointer-events:none;position:absolute;right:0;transition:all .1s linear}@media (prefers-reduced-motion:reduce){.components-tab-panel__tabs-item:after{transition-delay:0s;transition-duration:0s}}.components-tab-panel__tabs-item.is-active:after{height:2px;height:calc(var(--wp-admin-border-width-focus)*1);outline:2px solid #0000;outline-offset:-1px}.components-tab-panel__tabs-item:before{border-radius:2px;bottom:12px;box-shadow:0 0 0 0 #0000;content:"";left:12px;pointer-events:none;position:absolute;right:12px;top:12px;transition:all .1s linear}@media (prefers-reduced-motion:reduce){.components-tab-panel__tabs-item:before{transition-delay:0s;transition-duration:0s}}.components-tab-panel__tabs-item:focus-visible:before{box-shadow:0 0 0 2px #3858e9;box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));outline:2px solid #0000}.components-text-control__input,.components-text-control__input[type=color],.components-text-control__input[type=date],.components-text-control__input[type=datetime-local],.components-text-control__input[type=datetime],.components-text-control__input[type=email],.components-text-control__input[type=month],.components-text-control__input[type=number],.components-text-control__input[type=password],.components-text-control__input[type=tel],.components-text-control__input[type=text],.components-text-control__input[type=time],.components-text-control__input[type=url],.components-text-control__input[type=week]{border:1px solid #949494;border-radius:2px;box-shadow:0 0 0 #0000;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;height:32px;line-height:normal;padding:6px 8px;transition:box-shadow .1s linear;width:100%}@media (prefers-reduced-motion:reduce){.components-text-control__input,.components-text-control__input[type=color],.components-text-control__input[type=date],.components-text-control__input[type=datetime-local],.components-text-control__input[type=datetime],.components-text-control__input[type=email],.components-text-control__input[type=month],.components-text-control__input[type=number],.components-text-control__input[type=password],.components-text-control__input[type=tel],.components-text-control__input[type=text],.components-text-control__input[type=time],.components-text-control__input[type=url],.components-text-control__input[type=week]{transition-delay:0s;transition-duration:0s}}@media (min-width:600px){.components-text-control__input,.components-text-control__input[type=color],.components-text-control__input[type=date],.components-text-control__input[type=datetime-local],.components-text-control__input[type=datetime],.components-text-control__input[type=email],.components-text-control__input[type=month],.components-text-control__input[type=number],.components-text-control__input[type=password],.components-text-control__input[type=tel],.components-text-control__input[type=text],.components-text-control__input[type=time],.components-text-control__input[type=url],.components-text-control__input[type=week]{font-size:13px;line-height:normal}}.components-text-control__input:focus,.components-text-control__input[type=color]:focus,.components-text-control__input[type=date]:focus,.components-text-control__input[type=datetime-local]:focus,.components-text-control__input[type=datetime]:focus,.components-text-control__input[type=email]:focus,.components-text-control__input[type=month]:focus,.components-text-control__input[type=number]:focus,.components-text-control__input[type=password]:focus,.components-text-control__input[type=tel]:focus,.components-text-control__input[type=text]:focus,.components-text-control__input[type=time]:focus,.components-text-control__input[type=url]:focus,.components-text-control__input[type=week]:focus{border-color:#3858e9;border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px #3858e9;box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid #0000}.components-text-control__input::-webkit-input-placeholder,.components-text-control__input[type=color]::-webkit-input-placeholder,.components-text-control__input[type=date]::-webkit-input-placeholder,.components-text-control__input[type=datetime-local]::-webkit-input-placeholder,.components-text-control__input[type=datetime]::-webkit-input-placeholder,.components-text-control__input[type=email]::-webkit-input-placeholder,.components-text-control__input[type=month]::-webkit-input-placeholder,.components-text-control__input[type=number]::-webkit-input-placeholder,.components-text-control__input[type=password]::-webkit-input-placeholder,.components-text-control__input[type=tel]::-webkit-input-placeholder,.components-text-control__input[type=text]::-webkit-input-placeholder,.components-text-control__input[type=time]::-webkit-input-placeholder,.components-text-control__input[type=url]::-webkit-input-placeholder,.components-text-control__input[type=week]::-webkit-input-placeholder{color:#1e1e1e9e}.components-text-control__input::-moz-placeholder,.components-text-control__input[type=color]::-moz-placeholder,.components-text-control__input[type=date]::-moz-placeholder,.components-text-control__input[type=datetime-local]::-moz-placeholder,.components-text-control__input[type=datetime]::-moz-placeholder,.components-text-control__input[type=email]::-moz-placeholder,.components-text-control__input[type=month]::-moz-placeholder,.components-text-control__input[type=number]::-moz-placeholder,.components-text-control__input[type=password]::-moz-placeholder,.components-text-control__input[type=tel]::-moz-placeholder,.components-text-control__input[type=text]::-moz-placeholder,.components-text-control__input[type=time]::-moz-placeholder,.components-text-control__input[type=url]::-moz-placeholder,.components-text-control__input[type=week]::-moz-placeholder{color:#1e1e1e9e;opacity:1}.components-text-control__input:-ms-input-placeholder,.components-text-control__input[type=color]:-ms-input-placeholder,.components-text-control__input[type=date]:-ms-input-placeholder,.components-text-control__input[type=datetime-local]:-ms-input-placeholder,.components-text-control__input[type=datetime]:-ms-input-placeholder,.components-text-control__input[type=email]:-ms-input-placeholder,.components-text-control__input[type=month]:-ms-input-placeholder,.components-text-control__input[type=number]:-ms-input-placeholder,.components-text-control__input[type=password]:-ms-input-placeholder,.components-text-control__input[type=tel]:-ms-input-placeholder,.components-text-control__input[type=text]:-ms-input-placeholder,.components-text-control__input[type=time]:-ms-input-placeholder,.components-text-control__input[type=url]:-ms-input-placeholder,.components-text-control__input[type=week]:-ms-input-placeholder{color:#1e1e1e9e}.components-text-control__input.is-next-40px-default-size,.components-text-control__input[type=color].is-next-40px-default-size,.components-text-control__input[type=date].is-next-40px-default-size,.components-text-control__input[type=datetime-local].is-next-40px-default-size,.components-text-control__input[type=datetime].is-next-40px-default-size,.components-text-control__input[type=email].is-next-40px-default-size,.components-text-control__input[type=month].is-next-40px-default-size,.components-text-control__input[type=number].is-next-40px-default-size,.components-text-control__input[type=password].is-next-40px-default-size,.components-text-control__input[type=tel].is-next-40px-default-size,.components-text-control__input[type=text].is-next-40px-default-size,.components-text-control__input[type=time].is-next-40px-default-size,.components-text-control__input[type=url].is-next-40px-default-size,.components-text-control__input[type=week].is-next-40px-default-size{height:40px}.components-tip{color:#757575;display:flex}.components-tip svg{fill:#f0b849;align-self:center;flex-shrink:0;margin-left:16px}.components-tip p{margin:0}.components-accessible-toolbar{border:1px solid #1e1e1e;border-radius:2px;display:inline-flex;flex-shrink:0}.components-accessible-toolbar>.components-toolbar-group:last-child{border-left:none}.components-accessible-toolbar.is-unstyled{border:none}.components-accessible-toolbar.is-unstyled>.components-toolbar-group{border-left:none}.components-accessible-toolbar .components-button,.components-toolbar .components-button{height:48px;padding-left:16px;padding-right:16px;position:relative;z-index:1}.components-accessible-toolbar .components-button:focus:not(:disabled),.components-toolbar .components-button:focus:not(:disabled){box-shadow:none;outline:none}.components-accessible-toolbar .components-button:before,.components-toolbar .components-button:before{animation:components-button__appear-animation .1s ease;animation-fill-mode:forwards;border-radius:2px;content:"";display:block;height:32px;left:8px;position:absolute;right:8px;z-index:-1}@media (prefers-reduced-motion:reduce){.components-accessible-toolbar .components-button:before,.components-toolbar .components-button:before{animation-delay:0s;animation-duration:1ms}}.components-accessible-toolbar .components-button svg,.components-toolbar .components-button svg{margin-left:auto;margin-right:auto;position:relative}.components-accessible-toolbar .components-button.is-pressed,.components-accessible-toolbar .components-button.is-pressed:hover,.components-toolbar .components-button.is-pressed,.components-toolbar .components-button.is-pressed:hover{background:#0000}.components-accessible-toolbar .components-button.is-pressed:before,.components-toolbar .components-button.is-pressed:before{background:#1e1e1e}.components-accessible-toolbar .components-button:focus:before,.components-toolbar .components-button:focus:before{box-shadow:inset 0 0 0 1px #fff,0 0 0 2px #3858e9;box-shadow:inset 0 0 0 1px var(--wp-components-color-background,#fff),0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));outline:2px solid #0000}.components-accessible-toolbar .components-button.has-icon.has-icon,.components-toolbar .components-button.has-icon.has-icon{min-width:48px;padding-left:12px;padding-right:12px}.components-accessible-toolbar .components-button.components-tab-button,.components-toolbar .components-button.components-tab-button{font-weight:500}.components-accessible-toolbar .components-button.components-tab-button span,.components-toolbar .components-button.components-tab-button span{display:inline-block;padding-left:0;padding-right:0;position:relative}@keyframes components-button__appear-animation{0%{transform:scaleY(0)}to{transform:scaleY(1)}}.components-toolbar__control.components-button{position:relative}.components-toolbar__control.components-button[data-subscript] svg{padding:5px 0 5px 10px}.components-toolbar__control.components-button[data-subscript]:after{bottom:10px;content:attr(data-subscript);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;font-weight:600;left:8px;line-height:12px;position:absolute}.components-toolbar__control.components-button:not(:disabled).is-pressed[data-subscript]:after{color:#fff}.components-toolbar-group{background-color:#fff;border-left:1px solid #1e1e1e;display:inline-flex;flex-shrink:0;flex-wrap:wrap;line-height:0;min-height:48px;padding-left:6px;padding-right:6px}.components-toolbar-group .components-toolbar-group.components-toolbar-group{border-width:0;margin:0}.components-toolbar-group .components-button.components-button,.components-toolbar-group .components-button.has-icon.has-icon{min-width:36px;padding-left:6px;padding-right:6px}.components-toolbar-group .components-button.components-button svg,.components-toolbar-group .components-button.has-icon.has-icon svg{min-width:24px}.components-toolbar-group .components-button.components-button:before,.components-toolbar-group .components-button.has-icon.has-icon:before{left:2px;right:2px}.components-toolbar{background-color:#fff;border:1px solid #1e1e1e;display:inline-flex;flex-shrink:0;flex-wrap:wrap;margin:0;min-height:48px}.components-toolbar .components-toolbar.components-toolbar{border-width:0;margin:0}div.components-toolbar>div{display:block;margin:0}@supports (position:sticky){div.components-toolbar>div{display:flex}}div.components-toolbar>div+div.has-left-divider{margin-right:6px;overflow:visible;position:relative}div.components-toolbar>div+div.has-left-divider:before{background-color:#ddd;box-sizing:initial;content:"";display:inline-block;height:20px;position:absolute;right:-3px;top:8px;width:1px}.components-tooltip{background:#000;border-radius:2px;color:#f0f0f0;font-size:12px;line-height:1.4;padding:4px 8px;text-align:center;z-index:1000002}.components-tooltip__shortcut{margin-right:8px}PK.3YBP]�[�['bunyad-amp/assets/css/wp-components.css@charset "UTF-8";:root{--wp-admin-theme-color:#3858e9;--wp-admin-theme-color--rgb:56,88,233;--wp-admin-theme-color-darker-10:#2145e6;--wp-admin-theme-color-darker-10--rgb:33,69,230;--wp-admin-theme-color-darker-20:#183ad6;--wp-admin-theme-color-darker-20--rgb:24,58,214;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.components-animate__appear{animation:components-animate__appear-animation .1s cubic-bezier(0,0,.2,1) 0s;animation-fill-mode:forwards}@media (prefers-reduced-motion:reduce){.components-animate__appear{animation-delay:0s;animation-duration:1ms}}.components-animate__appear.is-from-top,.components-animate__appear.is-from-top.is-from-left{transform-origin:top left}.components-animate__appear.is-from-top.is-from-right{transform-origin:top right}.components-animate__appear.is-from-bottom,.components-animate__appear.is-from-bottom.is-from-left{transform-origin:bottom left}.components-animate__appear.is-from-bottom.is-from-right{transform-origin:bottom right}@keyframes components-animate__appear-animation{0%{transform:translateY(-2em) scaleY(0) scaleX(0)}to{transform:translateY(0) scaleY(1) scaleX(1)}}.components-animate__slide-in{animation:components-animate__slide-in-animation .1s cubic-bezier(0,0,.2,1);animation-fill-mode:forwards}@media (prefers-reduced-motion:reduce){.components-animate__slide-in{animation-delay:0s;animation-duration:1ms}}.components-animate__slide-in.is-from-left{transform:translateX(100%)}.components-animate__slide-in.is-from-right{transform:translateX(-100%)}@keyframes components-animate__slide-in-animation{to{transform:translateX(0)}}.components-animate__loading{animation:components-animate__loading 1.6s ease-in-out infinite}@keyframes components-animate__loading{0%{opacity:.5}50%{opacity:1}to{opacity:.5}}.components-autocomplete__popover .components-popover__content{min-width:220px;padding:16px}.components-autocomplete__result.components-button{display:flex;height:auto;min-height:36px;text-align:left;width:100%}.components-autocomplete__result.components-button.is-selected{box-shadow:0 0 0 2px #3858e9;box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-button-group{display:inline-block}.components-button-group .components-button{border-radius:0;box-shadow:inset 0 0 0 1px #1e1e1e;color:#1e1e1e;display:inline-flex}.components-button-group .components-button+.components-button{margin-left:-1px}.components-button-group .components-button:first-child{border-radius:2px 0 0 2px}.components-button-group .components-button:last-child{border-radius:0 2px 2px 0}.components-button-group .components-button.is-primary,.components-button-group .components-button:focus{position:relative;z-index:1}.components-button-group .components-button.is-primary{box-shadow:inset 0 0 0 1px #1e1e1e}.components-button{align-items:center;-webkit-appearance:none;background:none;border:0;border-radius:2px;box-sizing:border-box;color:#1e1e1e;color:var(--wp-components-color-foreground,#1e1e1e);cursor:pointer;display:inline-flex;font-family:inherit;font-size:13px;font-weight:400;height:36px;margin:0;padding:6px 12px;-webkit-text-decoration:none;text-decoration:none;transition:box-shadow .1s linear}@media (prefers-reduced-motion:reduce){.components-button{transition-delay:0s;transition-duration:0s}}.components-button.is-next-40px-default-size{height:40px}.components-button:hover,.components-button[aria-expanded=true]{color:#3858e9;color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-button:disabled:hover,.components-button[aria-disabled=true]:hover{color:initial}.components-button:focus:not(:disabled){box-shadow:0 0 0 2px #3858e9;box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));outline:3px solid #0000}.components-button.is-primary{background:#3858e9;background:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));color:#fff;color:var(--wp-components-color-accent-inverted,#fff);outline:1px solid #0000;-webkit-text-decoration:none;text-decoration:none;text-shadow:none;white-space:nowrap}.components-button.is-primary:hover:not(:disabled){background:#2145e6;background:var(--wp-components-color-accent-darker-10,var(--wp-admin-theme-color-darker-10,#2145e6));color:#fff;color:var(--wp-components-color-accent-inverted,#fff)}.components-button.is-primary:active:not(:disabled){background:#183ad6;background:var(--wp-components-color-accent-darker-20,var(--wp-admin-theme-color-darker-20,#183ad6));border-color:#183ad6;border-color:var(--wp-components-color-accent-darker-20,var(--wp-admin-theme-color-darker-20,#183ad6));color:#fff;color:var(--wp-components-color-accent-inverted,#fff)}.components-button.is-primary:focus:not(:disabled){box-shadow:inset 0 0 0 1px #fff,0 0 0 2px #3858e9;box-shadow:inset 0 0 0 1px var(--wp-components-color-background,#fff),0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-button.is-primary:disabled,.components-button.is-primary:disabled:active:enabled,.components-button.is-primary[aria-disabled=true],.components-button.is-primary[aria-disabled=true]:active:enabled,.components-button.is-primary[aria-disabled=true]:enabled{background:#3858e9;background:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));border-color:#3858e9;border-color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));color:#fff6;opacity:1;outline:none}.components-button.is-primary:disabled:active:enabled:focus:enabled,.components-button.is-primary:disabled:focus:enabled,.components-button.is-primary[aria-disabled=true]:active:enabled:focus:enabled,.components-button.is-primary[aria-disabled=true]:enabled:focus:enabled,.components-button.is-primary[aria-disabled=true]:focus:enabled{box-shadow:0 0 0 1px #fff,0 0 0 3px #3858e9;box-shadow:0 0 0 1px var(--wp-components-color-background,#fff),0 0 0 3px var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-button.is-primary.is-busy,.components-button.is-primary.is-busy:disabled,.components-button.is-primary.is-busy[aria-disabled=true]{background-image:linear-gradient(-45deg,#3858e9 33%,#183ad6 0,#183ad6 70%,#3858e9 0);background-image:linear-gradient(-45deg,var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9)) 33%,var(--wp-components-color-accent-darker-20,var(--wp-admin-theme-color-darker-20,#183ad6)) 33%,var(--wp-components-color-accent-darker-20,var(--wp-admin-theme-color-darker-20,#183ad6)) 70%,var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9)) 70%);background-size:100px 100%;border-color:#3858e9;border-color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));color:#fff;color:var(--wp-components-color-accent-inverted,#fff)}.components-button.is-secondary,.components-button.is-tertiary{outline:1px solid #0000}.components-button.is-secondary:active:not(:disabled),.components-button.is-tertiary:active:not(:disabled){box-shadow:none}.components-button.is-secondary:disabled,.components-button.is-secondary[aria-disabled=true],.components-button.is-secondary[aria-disabled=true]:hover,.components-button.is-tertiary:disabled,.components-button.is-tertiary[aria-disabled=true],.components-button.is-tertiary[aria-disabled=true]:hover{background:#0000;color:#949494;opacity:1;transform:none}.components-button.is-secondary:disabled:not(:focus),.components-button.is-secondary[aria-disabled=true]:hover:not(:focus),.components-button.is-secondary[aria-disabled=true]:not(:focus),.components-button.is-tertiary:disabled:not(:focus),.components-button.is-tertiary[aria-disabled=true]:hover:not(:focus),.components-button.is-tertiary[aria-disabled=true]:not(:focus){box-shadow:none;outline:none}.components-button.is-secondary{background:#0000;box-shadow:inset 0 0 0 1px #3858e9;box-shadow:inset 0 0 0 1px var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));color:#3858e9;color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));outline:1px solid #0000;white-space:nowrap}.components-button.is-secondary:hover:not(:disabled):not([aria-disabled=true]){box-shadow:inset 0 0 0 1px #2145e6;box-shadow:inset 0 0 0 1px var(--wp-components-color-accent-darker-10,var(--wp-admin-theme-color-darker-10,#2145e6))}.components-button.is-tertiary{background:#0000;color:#3858e9;color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));white-space:nowrap}.components-button.is-tertiary:hover:not(:disabled):not([aria-disabled=true]){background:#3858e90a;background:rgba(var(--wp-admin-theme-color--rgb),.04)}.components-button.is-tertiary:active:not(:disabled):not([aria-disabled=true]){background:#3858e914;background:rgba(var(--wp-admin-theme-color--rgb),.08)}p+.components-button.is-tertiary{margin-left:-6px}.components-button.is-destructive{--wp-components-color-accent:#cc1818;--wp-components-color-accent-darker-10:#9e1313;--wp-components-color-accent-darker-20:#710d0d}.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link){color:#cc1818}.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link):hover:not(:disabled){color:#710d0d}.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link):focus:not(:disabled){box-shadow:0 0 0 2px #cc1818;box-shadow:0 0 0 var(--wp-admin-border-width-focus) #cc1818}.components-button.is-destructive:not(.is-primary):not(.is-secondary):not(.is-tertiary):not(.is-link):active:not(:disabled){background:#ccc}.components-button.is-link{background:none;border:0;border-radius:0;box-shadow:none;color:#3858e9;color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));height:auto;margin:0;outline:none;padding:0;text-align:left;-webkit-text-decoration:underline;text-decoration:underline;transition-duration:.05s;transition-property:border,background,color;transition-timing-function:ease-in-out}@media (prefers-reduced-motion:reduce){.components-button.is-link{transition-delay:0s;transition-duration:0s}}.components-button.is-link:focus{border-radius:2px}.components-button:not(:disabled):not([aria-disabled=true]):active{color:#1e1e1e;color:var(--wp-components-color-foreground,#1e1e1e)}.components-button:disabled,.components-button[aria-disabled=true]{cursor:default;opacity:.3}.components-button.is-busy,.components-button.is-secondary.is-busy,.components-button.is-secondary.is-busy:disabled,.components-button.is-secondary.is-busy[aria-disabled=true]{animation:components-button__busy-animation 2.5s linear infinite;background-image:linear-gradient(-45deg,#fafafa 33%,#e0e0e0 0,#e0e0e0 70%,#fafafa 0);background-size:100px 100%;opacity:1}@media (prefers-reduced-motion:reduce){.components-button.is-busy,.components-button.is-secondary.is-busy,.components-button.is-secondary.is-busy:disabled,.components-button.is-secondary.is-busy[aria-disabled=true]{animation-duration:0s}}.components-button.is-compact{height:32px}.components-button.is-compact.has-icon:not(.has-text){min-width:32px;padding:0;width:32px}.components-button.is-small{font-size:11px;height:24px;line-height:22px;padding:0 8px}.components-button.is-small.has-icon:not(.has-text){min-width:24px;padding:0;width:24px}.components-button.has-icon{justify-content:center;min-width:36px;padding:6px}.components-button.has-icon.is-next-40px-default-size{min-width:40px}.components-button.has-icon .dashicon{align-items:center;box-sizing:initial;display:inline-flex;justify-content:center;padding:2px}.components-button.has-icon.has-text{gap:4px;justify-content:start;padding-left:8px;padding-right:12px}.components-button.is-pressed{background:#1e1e1e;background:var(--wp-components-color-foreground,#1e1e1e);color:#fff;color:var(--wp-components-color-foreground-inverted,#fff)}.components-button.is-pressed:focus:not(:disabled){box-shadow:inset 0 0 0 1px #fff,0 0 0 2px #3858e9;box-shadow:inset 0 0 0 1px var(--wp-components-color-background,#fff),0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));outline:2px solid #0000}.components-button.is-pressed:hover:not(:disabled){background:#1e1e1e;background:var(--wp-components-color-foreground,#1e1e1e);color:#fff;color:var(--wp-components-color-foreground-inverted,#fff)}.components-button svg{fill:currentColor;outline:none}@media (forced-colors:active){.components-button svg{fill:CanvasText}}.components-button .components-visually-hidden{height:auto}@keyframes components-button__busy-animation{0%{background-position:200px 0}}.components-checkbox-control__input[type=checkbox]{-webkit-appearance:none;appearance:none;background:#fff;border:1px solid #1e1e1e;border-radius:2px;box-shadow:0 0 0 #0000;clear:none;color:#1e1e1e;cursor:pointer;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;height:24px;line-height:normal;line-height:0;margin:0 4px 0 0;outline:0;padding:6px 8px;padding:0!important;text-align:center;transition:box-shadow .1s linear;transition:none;transition:border-color .1s ease-in-out;vertical-align:top;width:24px}@media (min-width:600px){.components-checkbox-control__input[type=checkbox]{font-size:13px;line-height:normal}}.components-checkbox-control__input[type=checkbox]:focus{border-color:#3858e9;border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px #3858e9;box-shadow:0 0 0 .5px var(--wp-admin-theme-color)}.components-checkbox-control__input[type=checkbox]::-webkit-input-placeholder{color:#1e1e1e9e}.components-checkbox-control__input[type=checkbox]::-moz-placeholder{color:#1e1e1e9e;opacity:1}.components-checkbox-control__input[type=checkbox]:-ms-input-placeholder{color:#1e1e1e9e}.components-checkbox-control__input[type=checkbox]:focus{box-shadow:0 0 0 2px #fff,0 0 0 4px var(--wp-admin-theme-color)}.components-checkbox-control__input[type=checkbox]:checked{background:#3858e9;background:var(--wp-admin-theme-color);border-color:#3858e9;border-color:var(--wp-admin-theme-color)}.components-checkbox-control__input[type=checkbox]:checked::-ms-check{opacity:0}.components-checkbox-control__input[type=checkbox]:checked:before,.components-checkbox-control__input[type=checkbox][aria-checked=mixed]:before{color:#fff;margin:-3px -5px}@media (min-width:782px){.components-checkbox-control__input[type=checkbox]:checked:before,.components-checkbox-control__input[type=checkbox][aria-checked=mixed]:before{margin:-4px 0 0 -5px}}.components-checkbox-control__input[type=checkbox][aria-checked=mixed]{background:#3858e9;background:var(--wp-admin-theme-color);border-color:#3858e9;border-color:var(--wp-admin-theme-color)}.components-checkbox-control__input[type=checkbox][aria-checked=mixed]:before{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"";display:inline-block;float:left;font:normal 30px/1 dashicons;vertical-align:middle;width:16px}@media (min-width:782px){.components-checkbox-control__input[type=checkbox][aria-checked=mixed]:before{float:none;font-size:21px}}@media (min-width:600px){.components-checkbox-control__input[type=checkbox]{height:20px;width:20px}}@media (prefers-reduced-motion:reduce){.components-checkbox-control__input[type=checkbox]{transition-delay:0s;transition-duration:0s}}.components-checkbox-control__input[type=checkbox]:focus{box-shadow:0 0 0 2px #fff,0 0 0 4px #3858e9;box-shadow:0 0 0 var(--wp-admin-border-width-focus) #fff,0 0 0 calc(var(--wp-admin-border-width-focus)*2) var(--wp-admin-theme-color);outline:2px solid #0000;outline-offset:2px}.components-checkbox-control__input[type=checkbox]:checked,.components-checkbox-control__input[type=checkbox]:indeterminate{background:#3858e9;background:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));border-color:#3858e9;border-color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-checkbox-control__input[type=checkbox]:checked::-ms-check,.components-checkbox-control__input[type=checkbox]:indeterminate::-ms-check{opacity:0}.components-checkbox-control__input[type=checkbox]:checked:before{content:none}.components-checkbox-control__input-container{display:inline-block;height:24px;margin-right:12px;position:relative;vertical-align:middle;width:24px}@media (min-width:600px){.components-checkbox-control__input-container{height:20px;width:20px}}svg.components-checkbox-control__checked,svg.components-checkbox-control__indeterminate{fill:#fff;cursor:pointer;height:24px;left:0;pointer-events:none;position:absolute;top:0;-webkit-user-select:none;user-select:none;width:24px}@media (min-width:600px){svg.components-checkbox-control__checked,svg.components-checkbox-control__indeterminate{left:-2px;top:-2px}}.components-circular-option-picker{display:inline-block;min-width:188px;width:100%}.components-circular-option-picker .components-circular-option-picker__custom-clear-wrapper{display:flex;justify-content:flex-end;margin-top:12px}.components-circular-option-picker .components-circular-option-picker__swatches{display:flex;flex-wrap:wrap;gap:12px;position:relative;z-index:1}.components-circular-option-picker>:not(.components-circular-option-picker__swatches){position:relative;z-index:0}.components-circular-option-picker__option-wrapper{display:inline-block;height:28px;transform:scale(1);transition:transform .1s ease;vertical-align:top;width:28px;will-change:transform}@media (prefers-reduced-motion:reduce){.components-circular-option-picker__option-wrapper{transition-delay:0s;transition-duration:0s}}.components-circular-option-picker__option-wrapper:hover{transform:scale(1.2)}.components-circular-option-picker__option-wrapper>div{height:100%;width:100%}.components-circular-option-picker__option-wrapper:before{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='28' height='28' fill='none'%3E%3Cpath fill='%23555D65' d='M6 8V6H4v2zm2 0V6h2v2zm2 8H8v-2h2zm2 0v-2h2v2zm0 2v-2h-2v2H8v2h2v-2zm2 0v2h-2v-2zm2 0h-2v-2h2z'/%3E%3Cpath fill='%23555D65' fill-rule='evenodd' d='M18 18h2v-2h-2v-2h2v-2h-2v-2h2V8h-2v2h-2V8h-2v2h2v2h-2v2h2v2h2zm-2-4v-2h2v2z' clip-rule='evenodd'/%3E%3Cpath fill='%23555D65' d='M18 18v2h-2v-2z'/%3E%3Cpath fill='%23555D65' fill-rule='evenodd' d='M8 10V8H6v2H4v2h2v2H4v2h2v2H4v2h2v2H4v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2V8h-2V6h2V4h-2v2h-2V4h-2v2h-2V4h-2v2h-2V4h-2v2h2v2h-2v2zm0 2v-2H6v2zm2 0v-2h2v2zm0 2v-2H8v2H6v2h2v2H6v2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2V8h-2V6h-2v2h-2V6h-2v2h-2v2h2v2h-2v2z' clip-rule='evenodd'/%3E%3Cpath fill='%23555D65' fill-rule='evenodd' d='M4 0H2v2H0v2h2v2H0v2h2v2H0v2h2v2H0v2h2v2H0v2h2v2H0v2h2v2H0v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2V8h-2V6h2V4h-2V2h2V0h-2v2h-2V0h-2v2h-2V0h-2v2h-2V0h-2v2h-2V0h-2v2H8V0H6v2H4zm0 4V2H2v2zm2 0V2h2v2zm0 2V4H4v2H2v2h2v2H2v2h2v2H2v2h2v2H2v2h2v2H2v2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h2v2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2v-2h-2v-2h2V8h-2V6h2V4h-2V2h-2v2h-2V2h-2v2h-2V2h-2v2h-2V2h-2v2H8v2z' clip-rule='evenodd'/%3E%3C/svg%3E");border-radius:50%;bottom:1px;content:"";left:1px;position:absolute;right:1px;top:1px;z-index:-1}.components-circular-option-picker__option{background:#0000;border:none;border-radius:50%;box-shadow:inset 0 0 0 14px;cursor:pointer;display:inline-block;height:100%;transition:box-shadow .1s ease;vertical-align:top;width:100%}@media (prefers-reduced-motion:reduce){.components-circular-option-picker__option{transition-delay:0s;transition-duration:0s}}.components-circular-option-picker__option:hover{box-shadow:inset 0 0 0 14px!important}.components-circular-option-picker__option[aria-pressed=true],.components-circular-option-picker__option[aria-selected=true]{box-shadow:inset 0 0 0 4px;overflow:visible;position:relative;z-index:1}.components-circular-option-picker__option[aria-pressed=true]+svg,.components-circular-option-picker__option[aria-selected=true]+svg{border-radius:50%;left:2px;pointer-events:none;position:absolute;top:2px;z-index:2}.components-circular-option-picker__option:after{border:1px solid #0000;border-radius:50%;bottom:-1px;box-shadow:inset 0 0 0 1px #0003;box-sizing:inherit;content:"";left:-1px;position:absolute;right:-1px;top:-1px}.components-circular-option-picker__option:focus:after{border:2px solid #757575;border-radius:50%;box-shadow:inset 0 0 0 2px #fff;content:"";height:calc(100% + 4px);left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:calc(100% + 4px)}.components-circular-option-picker__option.components-button:focus{background-color:initial;box-shadow:inset 0 0 0 14px;outline:none}.components-circular-option-picker__button-action .components-circular-option-picker__option{background:#fff;color:#fff}.components-circular-option-picker__dropdown-link-action{margin-right:16px}.components-circular-option-picker__dropdown-link-action .components-button{line-height:22px}.components-palette-edit__popover-gradient-picker{padding:8px;width:260px}.components-dropdown-menu__menu .components-palette-edit__menu-button{width:100%}.component-color-indicator{background:#fff linear-gradient(-45deg,#0000 48%,#ddd 0,#ddd 52%,#0000 0);border-radius:50%;box-shadow:inset 0 0 0 1px #0003;display:inline-block;height:20px;padding:0;width:20px}.components-combobox-control{width:100%}input.components-combobox-control__input[type=text]{border:none;box-shadow:none;font-family:inherit;font-size:16px;line-height:inherit;margin:0;min-height:auto;padding:2px;width:100%}@media (min-width:600px){input.components-combobox-control__input[type=text]{font-size:13px}}input.components-combobox-control__input[type=text]:focus{box-shadow:none;outline:none}.components-combobox-control__suggestions-container{align-items:flex-start;border:1px solid #949494;border-radius:2px;box-shadow:0 0 0 #0000;display:flex;flex-wrap:wrap;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;line-height:normal;padding:0;transition:box-shadow .1s linear;width:100%}@media (prefers-reduced-motion:reduce){.components-combobox-control__suggestions-container{transition-delay:0s;transition-duration:0s}}@media (min-width:600px){.components-combobox-control__suggestions-container{font-size:13px;line-height:normal}}.components-combobox-control__suggestions-container:focus{border-color:#3858e9;border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px #3858e9;box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid #0000}.components-combobox-control__suggestions-container::-webkit-input-placeholder{color:#1e1e1e9e}.components-combobox-control__suggestions-container::-moz-placeholder{color:#1e1e1e9e;opacity:1}.components-combobox-control__suggestions-container:-ms-input-placeholder{color:#1e1e1e9e}.components-combobox-control__suggestions-container:focus-within{border-color:#3858e9;border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px #3858e9;box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid #0000}.components-combobox-control__reset.components-button{display:flex;height:16px;min-width:16px;padding:0}.components-color-palette__custom-color-wrapper{position:relative;z-index:0}.components-color-palette__custom-color-button{background:none;border:none;border-radius:2px 2px 0 0;box-shadow:inset 0 0 0 1px #0003;box-sizing:border-box;cursor:pointer;height:64px;outline:1px solid #0000;position:relative;width:100%}.components-color-palette__custom-color-button:focus{box-shadow:inset 0 0 0 2px #3858e9;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));outline-width:2px}.components-color-palette__custom-color-button:after{background-image:repeating-linear-gradient(45deg,#e0e0e0 25%,#0000 0,#0000 75%,#e0e0e0 0,#e0e0e0),repeating-linear-gradient(45deg,#e0e0e0 25%,#0000 0,#0000 75%,#e0e0e0 0,#e0e0e0);background-position:0 0,24px 24px;background-size:48px 48px;content:"";height:100%;left:0;position:absolute;top:0;width:100%;z-index:-1}.components-color-palette__custom-color-text-wrapper{border-radius:0 0 2px 2px;box-shadow:inset 0 -1px 0 0 #0003,inset 1px 0 0 0 #0003,inset -1px 0 0 0 #0003;font-size:13px;padding:12px 16px;position:relative}.components-color-palette__custom-color-name{color:#1e1e1e;color:var(--wp-components-color-foreground,#1e1e1e);margin:0 1px}.components-color-palette__custom-color-value{color:#757575}.components-color-palette__custom-color-value--is-hex{text-transform:uppercase}.components-color-palette__custom-color-value:empty:after{content:"​";visibility:hidden}.components-custom-gradient-picker:not(.is-next-has-no-margin){margin-bottom:24px;margin-top:12px}.components-custom-gradient-picker__gradient-bar{border-radius:2px;height:48px;position:relative;width:100%;z-index:1}.components-custom-gradient-picker__gradient-bar.has-gradient{background-image:repeating-linear-gradient(45deg,#e0e0e0 25%,#0000 0,#0000 75%,#e0e0e0 0,#e0e0e0),repeating-linear-gradient(45deg,#e0e0e0 25%,#0000 0,#0000 75%,#e0e0e0 0,#e0e0e0);background-position:0 0,12px 12px;background-size:24px 24px}.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__gradient-bar-background{inset:0;position:absolute}.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__markers-container{margin-left:auto;margin-right:auto;position:relative;width:calc(100% - 48px)}.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__control-point-dropdown{display:flex;height:16px;position:absolute;top:16px;width:16px}.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__insert-point-dropdown{background:#fff;border-radius:50%;color:#1e1e1e;height:inherit;min-width:16px;padding:2px;position:relative;width:inherit}.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__insert-point-dropdown svg{height:100%;width:100%}.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__control-point-button{border-radius:50%;box-shadow:inset 0 0 0 2px #fff,0 0 2px 0 #00000040;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) #fff,0 0 2px 0 #00000040;height:inherit;outline:2px solid #0000;padding:0;width:inherit}.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__control-point-button.is-active,.components-custom-gradient-picker__gradient-bar .components-custom-gradient-picker__control-point-button:focus{box-shadow:inset 0 0 0 4px #fff,0 0 2px 0 #00000040;box-shadow:inset 0 0 0 calc(var(--wp-admin-border-width-focus)*2) #fff,0 0 2px 0 #00000040;outline:1.5px solid #0000}.components-custom-gradient-picker__remove-control-point-wrapper{padding-bottom:8px}.components-custom-gradient-picker__inserter{direction:ltr}.components-custom-gradient-picker__liner-gradient-indicator{display:inline-block;flex:0 auto;height:20px;width:20px}.components-custom-gradient-picker .components-custom-gradient-picker__toolbar{border:none}.components-custom-gradient-picker .components-custom-gradient-picker__toolbar>div+div{margin-left:1px}.components-custom-gradient-picker .components-custom-gradient-picker__toolbar button.is-pressed>svg{background:#fff;border:1px solid #949494;border-radius:2px}.components-custom-gradient-picker__ui-line{position:relative;z-index:0}.components-custom-select-control{font-size:13px;position:relative}.components-custom-select-control__button{outline:0;position:relative;text-align:left}.components-custom-select-control__hint{color:#949494;margin-left:10px}.components-custom-select-control__menu{background-color:#fff;border:1px solid #1e1e1e;border-radius:2px;max-height:400px;min-width:100%;outline:none;overflow:auto;padding:0;position:absolute;transition:none;z-index:1000000}.components-custom-select-control__menu[aria-hidden=true]{display:none}.components-custom-select-control__item{align-items:center;cursor:default;display:grid;grid-template-columns:auto auto;line-height:28px;list-style-type:none;padding:8px 16px}.components-custom-select-control__item:not(.is-next-40px-default-size){padding:8px}.components-custom-select-control__item.has-hint{grid-template-columns:auto auto 30px}.components-custom-select-control__item.is-highlighted{background:#ddd}.components-custom-select-control__item .components-custom-select-control__item-hint{color:#949494;padding-right:4px;text-align:right}.components-custom-select-control__item .components-custom-select-control__item-icon{margin-left:auto}.components-custom-select-control__item:last-child{margin-bottom:0}.block-editor-dimension-control .components-base-control__field{align-items:center;display:flex}.block-editor-dimension-control .components-base-control__label{align-items:center;display:flex;margin-bottom:0;margin-right:1em}.block-editor-dimension-control .components-base-control__label .dashicon{margin-right:.5em}.block-editor-dimension-control.is-manual .components-base-control__label{width:10em}body.is-dragging-components-draggable{cursor:move;cursor:grabbing!important}.components-draggable__invisible-drag-image{height:50px;left:-1000px;position:fixed;width:50px}.components-draggable__clone{background:#0000;padding:0;pointer-events:none;position:fixed;z-index:1000000000}.components-drop-zone{border-radius:2px;bottom:0;left:0;opacity:0;position:absolute;right:0;top:0;visibility:hidden;z-index:40}.components-drop-zone.is-active{opacity:1;visibility:visible}.components-drop-zone__content{align-items:center;background-color:#3858e9;background-color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));bottom:0;color:#fff;display:flex;height:100%;justify-content:center;left:0;position:absolute;right:0;text-align:center;top:0;width:100%;z-index:50}.components-drop-zone__content-icon,.components-drop-zone__content-text{display:block}.components-drop-zone__content-icon{fill:currentColor;line-height:0;margin:0 auto 8px;pointer-events:none}.components-drop-zone__content-text{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px}.components-dropdown{display:inline-block}.components-dropdown__content .components-popover__content{padding:8px}.components-dropdown__content [role=menuitem]{white-space:nowrap}.components-dropdown-menu__toggle{vertical-align:top}.components-dropdown-menu__menu{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;line-height:1.4;width:100%}.components-dropdown-menu__menu .components-dropdown-menu__menu-item,.components-dropdown-menu__menu .components-menu-item{cursor:pointer;outline:none;padding:6px;white-space:nowrap;width:100%}.components-dropdown-menu__menu .components-dropdown-menu__menu-item.has-separator,.components-dropdown-menu__menu .components-menu-item.has-separator{margin-top:6px;overflow:visible;position:relative}.components-dropdown-menu__menu .components-dropdown-menu__menu-item.has-separator:before,.components-dropdown-menu__menu .components-menu-item.has-separator:before{background-color:#ddd;box-sizing:initial;content:"";display:block;height:1px;left:0;position:absolute;right:0;top:-3px}.components-dropdown-menu__menu .components-dropdown-menu__menu-item.is-active .dashicon,.components-dropdown-menu__menu .components-dropdown-menu__menu-item.is-active svg,.components-dropdown-menu__menu .components-menu-item.is-active .dashicon,.components-dropdown-menu__menu .components-menu-item.is-active svg{background:#1e1e1e;border-radius:1px;box-shadow:0 0 0 1px #1e1e1e;color:#fff}.components-dropdown-menu__menu .components-dropdown-menu__menu-item.is-icon-only,.components-dropdown-menu__menu .components-menu-item.is-icon-only{width:auto}.components-dropdown-menu__menu .components-menu-item__button,.components-dropdown-menu__menu .components-menu-item__button.components-button{height:auto;min-height:36px;padding-left:8px;padding-right:8px;text-align:left}.components-dropdown-menu__menu .components-menu-group{margin:0 -8px;padding:8px}.components-dropdown-menu__menu .components-menu-group:first-child{margin-top:-8px}.components-dropdown-menu__menu .components-menu-group:last-child{margin-bottom:-8px}.components-dropdown-menu__menu .components-menu-group+.components-menu-group{border-top:1px solid #ccc;margin-top:0;padding:8px}.is-alternate .components-dropdown-menu__menu .components-menu-group+.components-menu-group{border-color:#1e1e1e}.components-duotone-picker__color-indicator:before{background:#0000}.components-duotone-picker__color-indicator>.components-button,.components-duotone-picker__color-indicator>.components-button.is-pressed:hover:not(:disabled){background:linear-gradient(-45deg,#0000 48%,#ddd 0,#ddd 52%,#0000 0);color:#0000}.components-duotone-picker__color-indicator>.components-button:not([aria-disabled=true]):active{color:#0000}.components-color-list-picker,.components-color-list-picker__swatch-button{width:100%}.components-color-list-picker__color-picker{margin:8px 0}.components-color-list-picker__swatch-button{padding:6px}.components-color-list-picker__swatch-color{margin:2px}.components-form-toggle{display:inline-block;position:relative}.components-form-toggle .components-form-toggle__track{background-color:#fff;border:1px solid #1e1e1e;border-radius:9px;box-sizing:border-box;content:"";display:inline-block;height:18px;overflow:hidden;position:relative;transition:background-color .2s ease,border-color .2s ease;vertical-align:top;width:36px}@media (prefers-reduced-motion:reduce){.components-form-toggle .components-form-toggle__track{transition-delay:0s;transition-duration:0s}}.components-form-toggle .components-form-toggle__track:after{border-top:18px solid #0000;box-sizing:border-box;content:"";inset:0;opacity:0;position:absolute;transition:opacity .2s ease}@media (prefers-reduced-motion:reduce){.components-form-toggle .components-form-toggle__track:after{transition-delay:0s;transition-duration:0s}}.components-form-toggle .components-form-toggle__thumb{background-color:#1e1e1e;border:6px solid #0000;border-radius:50%;box-sizing:border-box;display:block;height:12px;left:3px;position:absolute;top:3px;transition:transform .2s ease,background-color .2s ease-out;width:12px}@media (prefers-reduced-motion:reduce){.components-form-toggle .components-form-toggle__thumb{transition-delay:0s;transition-duration:0s}}.components-form-toggle.is-checked .components-form-toggle__track{background-color:#3858e9;background-color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));border-color:#3858e9;border-color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-form-toggle.is-checked .components-form-toggle__track:after{opacity:1}.components-form-toggle .components-form-toggle__input:focus+.components-form-toggle__track{box-shadow:0 0 0 2px #fff,0 0 0 4px #3858e9;box-shadow:0 0 0 var(--wp-admin-border-width-focus) #fff,0 0 0 calc(var(--wp-admin-border-width-focus)*2) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));outline:2px solid #0000;outline-offset:2px}.components-form-toggle.is-checked .components-form-toggle__thumb{background-color:#fff;border-width:0;transform:translateX(18px)}.components-disabled .components-form-toggle,.components-form-toggle.is-disabled{opacity:.3}.components-form-toggle input.components-form-toggle__input[type=checkbox]{border:none;height:100%;left:0;margin:0;opacity:0;padding:0;position:absolute;top:0;width:100%;z-index:1}.components-form-toggle input.components-form-toggle__input[type=checkbox]:checked{background:none}.components-form-toggle input.components-form-toggle__input[type=checkbox]:before{content:""}.components-form-token-field__input-container{border:1px solid #949494;border-radius:2px;box-shadow:0 0 0 #0000;cursor:text;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;line-height:normal;padding:0;transition:box-shadow .1s linear;width:100%}@media (prefers-reduced-motion:reduce){.components-form-token-field__input-container{transition-delay:0s;transition-duration:0s}}@media (min-width:600px){.components-form-token-field__input-container{font-size:13px;line-height:normal}}.components-form-token-field__input-container:focus{border-color:#3858e9;border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px #3858e9;box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid #0000}.components-form-token-field__input-container::-webkit-input-placeholder{color:#1e1e1e9e}.components-form-token-field__input-container::-moz-placeholder{color:#1e1e1e9e;opacity:1}.components-form-token-field__input-container:-ms-input-placeholder{color:#1e1e1e9e}.components-form-token-field__input-container.is-disabled{background:#ddd;border-color:#ddd}.components-form-token-field__input-container.is-active{border-color:#3858e9;border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px #3858e9;box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid #0000}.components-form-token-field__input-container input[type=text].components-form-token-field__input{background:inherit;border:0;box-shadow:none;color:#1e1e1e;display:inline-block;flex:1;font-family:inherit;font-size:16px;margin-left:4px;max-width:100%;min-height:24px;min-width:50px;padding:0;width:100%}@media (min-width:600px){.components-form-token-field__input-container input[type=text].components-form-token-field__input{font-size:13px}}.components-form-token-field.is-active .components-form-token-field__input-container input[type=text].components-form-token-field__input,.components-form-token-field__input-container input[type=text].components-form-token-field__input:focus{box-shadow:none;outline:none}.components-form-token-field__input-container .components-form-token-field__token+input[type=text].components-form-token-field__input{width:auto}.components-form-token-field__token{color:#1e1e1e;display:flex;font-size:13px;max-width:100%}.components-form-token-field__token.is-success .components-form-token-field__remove-token,.components-form-token-field__token.is-success .components-form-token-field__token-text{background:#4ab866}.components-form-token-field__token.is-error .components-form-token-field__remove-token,.components-form-token-field__token.is-error .components-form-token-field__token-text{background:#cc1818}.components-form-token-field__token.is-validating .components-form-token-field__remove-token,.components-form-token-field__token.is-validating .components-form-token-field__token-text{color:#757575}.components-form-token-field__token.is-borderless{padding:0 24px 0 0;position:relative}.components-form-token-field__token.is-borderless .components-form-token-field__token-text{background:#0000;color:#3858e9;color:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-form-token-field__token.is-borderless .components-form-token-field__remove-token{background:#0000;color:#757575;padding:0;position:absolute;right:0;top:1px}.components-form-token-field__token.is-borderless.is-success .components-form-token-field__token-text{color:#4ab866}.components-form-token-field__token.is-borderless.is-error .components-form-token-field__token-text{border-radius:4px 0 0 4px;color:#cc1818;padding:0 4px 0 6px}.components-form-token-field__token.is-borderless.is-validating .components-form-token-field__token-text{color:#1e1e1e}.components-form-token-field__token.is-disabled .components-form-token-field__remove-token{cursor:default}.components-form-token-field__remove-token.components-button,.components-form-token-field__token-text{background:#ddd;display:inline-block;height:auto;line-height:24px;min-width:unset;transition:all .2s cubic-bezier(.4,1,.4,1)}@media (prefers-reduced-motion:reduce){.components-form-token-field__remove-token.components-button,.components-form-token-field__token-text{animation-delay:0s;animation-duration:1ms;transition-delay:0s;transition-duration:0s}}.components-form-token-field__token-text{border-radius:2px 0 0 2px;overflow:hidden;padding:0 0 0 8px;text-overflow:ellipsis;white-space:nowrap}.components-form-token-field__remove-token.components-button{border-radius:0 2px 2px 0;color:#1e1e1e;cursor:pointer;line-height:10px;overflow:initial;padding:0 2px}.components-form-token-field__remove-token.components-button:hover{color:#1e1e1e}.components-form-token-field__suggestions-list{box-shadow:inset 0 1px 0 0 #949494;flex:1 0 100%;list-style:none;margin:0;max-height:128px;min-width:100%;overflow-y:auto;padding:0;transition:all .15s ease-in-out}@media (prefers-reduced-motion:reduce){.components-form-token-field__suggestions-list{transition-delay:0s;transition-duration:0s}}.components-form-token-field__suggestion{box-sizing:border-box;color:#1e1e1e;cursor:pointer;display:block;font-size:13px;margin:0;min-height:32px;padding:8px 12px}.components-form-token-field__suggestion.is-selected{background:#3858e9;background:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));color:#fff}@media (min-width:600px){.components-guide{width:600px}}.components-guide .components-modal__content{border-radius:2px;margin-top:0;padding:0}.components-guide .components-modal__content:before{content:none}.components-guide .components-modal__header{border-bottom:none;height:60px;padding:0;position:sticky}.components-guide .components-modal__header .components-button{align-self:flex-start;margin:8px 8px 0 0;position:static}.components-guide .components-modal__header .components-button:hover svg{fill:#fff}.components-guide__container{display:flex;flex-direction:column;justify-content:space-between;margin-top:-60px;min-height:100%}.components-guide__page{display:flex;flex-direction:column;justify-content:center;position:relative}@media (min-width:600px){.components-guide__page{min-height:300px}}.components-guide__footer{align-content:center;display:flex;height:36px;justify-content:center;margin:0 0 24px;padding:0 32px;position:relative;width:100%}.components-guide__page-control{margin:0;text-align:center}.components-guide__page-control li{display:inline-block;margin:0}.components-guide__page-control .components-button{color:#e0e0e0;height:30px;margin:-6px 0;min-width:20px}.components-guide__page-control li[aria-current=step] .components-button{color:#3858e9;color:var(--wp-components-color-accent,var(--wp-admin-theme-color))}.components-modal__frame.components-guide{border:none;max-height:575px;min-width:312px}@media (max-width:600px){.components-modal__frame.components-guide{margin:auto;max-width:calc(100vw - 32px)}}.components-button.components-guide__back-button,.components-button.components-guide__finish-button,.components-button.components-guide__forward-button{position:absolute}.components-button.components-guide__back-button{left:32px}.components-button.components-guide__finish-button,.components-button.components-guide__forward-button{right:32px}[role=region]{position:relative}.is-focusing-regions [role=region]:focus:after{bottom:0;content:"";left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:1000000}.is-focusing-regions .editor-post-publish-panel,.is-focusing-regions .interface-interface-skeleton__actions .edit-post-layout__toggle-entities-saved-states-panel,.is-focusing-regions .interface-interface-skeleton__actions .edit-post-layout__toggle-publish-panel,.is-focusing-regions .interface-interface-skeleton__sidebar .edit-post-layout__toggle-sidebar-panel,.is-focusing-regions [role=region]:focus:after,.is-focusing-regions.is-distraction-free .interface-interface-skeleton__header .edit-post-header{outline:4px solid #3858e9;outline:4px solid var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));outline-offset:-4px}.components-menu-group+.components-menu-group{border-top:1px solid #1e1e1e;margin-top:8px;padding-top:8px}.components-menu-group+.components-menu-group.has-hidden-separator{border-top:none;margin-top:0;padding-top:0}.components-menu-group__label{color:#757575;font-size:11px;font-weight:500;margin-bottom:12px;margin-top:4px;padding:0 8px;text-transform:uppercase;white-space:nowrap}.components-menu-item__button,.components-menu-item__button.components-button{width:100%}.components-menu-item__button.components-button[role=menuitemcheckbox] .components-menu-item__item:only-child,.components-menu-item__button.components-button[role=menuitemradio] .components-menu-item__item:only-child,.components-menu-item__button[role=menuitemcheckbox] .components-menu-item__item:only-child,.components-menu-item__button[role=menuitemradio] .components-menu-item__item:only-child{box-sizing:initial;padding-right:48px}.components-menu-item__button .components-menu-items__item-icon,.components-menu-item__button.components-button .components-menu-items__item-icon{display:inline-block;flex:0 0 auto}.components-menu-item__button .components-menu-items__item-icon.has-icon-right,.components-menu-item__button.components-button .components-menu-items__item-icon.has-icon-right{margin-left:24px;margin-right:-2px}.components-menu-item__button .components-menu-item__shortcut+.components-menu-items__item-icon.has-icon-right,.components-menu-item__button.components-button .components-menu-item__shortcut+.components-menu-items__item-icon.has-icon-right{margin-left:8px}.components-menu-item__button .block-editor-block-icon,.components-menu-item__button.components-button .block-editor-block-icon{margin-left:-2px;margin-right:8px}.components-menu-item__button.components-button.is-primary,.components-menu-item__button.is-primary{justify-content:center}.components-menu-item__button.components-button.is-primary .components-menu-item__item,.components-menu-item__button.is-primary .components-menu-item__item{margin-right:0}.components-menu-item__button.components-button:disabled.is-tertiary,.components-menu-item__button.components-button[aria-disabled=true].is-tertiary,.components-menu-item__button:disabled.is-tertiary,.components-menu-item__button[aria-disabled=true].is-tertiary{background:none;color:#2145e6;color:var(--wp-components-color-accent-darker-10,var(--wp-admin-theme-color-darker-10,#2145e6));opacity:.3}.components-menu-item__info-wrapper{display:flex;flex-direction:column;margin-right:auto}.components-menu-item__info{color:#757575;font-size:12px;margin-top:4px;white-space:normal}.components-menu-item__item{align-items:center;display:inline-flex;margin-right:auto;min-width:160px;white-space:nowrap}.components-menu-item__shortcut{align-self:center;color:currentColor;display:none;margin-left:auto;margin-right:0;padding-left:24px}@media (min-width:480px){.components-menu-item__shortcut{display:inline}}.components-menu-items-choice svg,.components-menu-items-choice.components-button svg{margin-right:12px}.components-menu-items-choice.components-button.has-icon,.components-menu-items-choice.has-icon{padding-left:12px}.components-modal__screen-overlay{animation:edit-post__fade-in-animation .2s ease-out 0s;animation-fill-mode:forwards;background-color:#00000059;bottom:0;display:flex;left:0;position:fixed;right:0;top:0;z-index:100000}@media (prefers-reduced-motion:reduce){.components-modal__screen-overlay{animation-delay:0s;animation-duration:1ms}}.components-modal__frame{animation:components-modal__appear-animation .1s ease-out;animation-fill-mode:forwards;background:#fff;border-radius:4px 4px 0 0;box-shadow:0 .7px 1px #00000026,0 2.7px 3.8px -.2px #00000026,0 5.5px 7.8px -.3px #00000026,.1px 11.5px 16.4px -.5px #00000026;display:flex;margin:40px 0 0;overflow:hidden;width:100%}@media (prefers-reduced-motion:reduce){.components-modal__frame{animation-delay:0s;animation-duration:1ms}}@media (min-width:600px){.components-modal__frame{border-radius:4px;margin:auto;max-height:calc(100% - 120px);max-width:calc(100% - 32px);min-width:350px;width:auto}}@media (min-width:600px) and (min-width:600px){.components-modal__frame.is-full-screen{height:calc(100% - 32px);max-height:none;width:calc(100% - 32px)}}@media (min-width:600px) and (min-width:782px){.components-modal__frame.is-full-screen{height:calc(100% - 80px);max-width:none;width:calc(100% - 80px)}}@media (min-width:600px){.components-modal__frame.has-size-large,.components-modal__frame.has-size-medium,.components-modal__frame.has-size-small{width:100%}.components-modal__frame.has-size-small{max-width:384px}.components-modal__frame.has-size-medium{max-width:512px}.components-modal__frame.has-size-large{max-width:840px}}@media (min-width:960px){.components-modal__frame{max-height:70%}}@keyframes components-modal__appear-animation{0%{transform:translateY(32px)}to{transform:translateY(0)}}.components-modal__header{align-items:center;border-bottom:1px solid #0000;box-sizing:border-box;display:flex;flex-direction:row;height:72px;justify-content:space-between;left:0;padding:24px 32px 8px;position:absolute;top:0;width:100%;z-index:10}.components-modal__header .components-modal__header-heading{font-size:1.2rem;font-weight:600}.components-modal__header h1{line-height:1;margin:0}.components-modal__header .components-button{left:8px;position:relative}.components-modal__content.has-scrolled-content:not(.hide-header) .components-modal__header{border-bottom-color:#ddd}.components-modal__header+p{margin-top:0}.components-modal__header-heading-container{align-items:center;display:flex;flex-direction:row;flex-grow:1;justify-content:left}.components-modal__header-icon-container{display:inline-block}.components-modal__header-icon-container svg{max-height:36px;max-width:36px;padding:8px}.components-modal__content{flex:1;margin-top:72px;overflow:auto;padding:4px 32px 32px}.components-modal__content.hide-header{margin-top:0;padding-top:32px}.components-modal__content.is-scrollable:focus-visible{box-shadow:inset 0 0 0 2px #3858e9;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);outline:2px solid #0000;outline-offset:-2px}.components-notice{align-items:center;background-color:#fff;border-left:4px solid #3858e9;border-left:4px solid var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));display:flex;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;padding:8px 12px}.components-notice.is-dismissible{position:relative}.components-notice.is-success{background-color:#eff9f1;border-left-color:#4ab866}.components-notice.is-warning{background-color:#fef8ee;border-left-color:#f0b849}.components-notice.is-error{background-color:#f4a2a2;border-left-color:#cc1818}.components-notice__content{flex-grow:1;margin:4px 25px 4px 0}.components-notice__actions{display:flex;flex-wrap:wrap}.components-notice__action.components-button{margin-right:8px}.components-notice__action.components-button,.components-notice__action.components-button.is-link{margin-left:12px}.components-notice__action.components-button.is-secondary{vertical-align:initial}.components-notice__dismiss{align-self:flex-start;color:#757575;flex-shrink:0}.components-notice__dismiss:not(:disabled):not([aria-disabled=true]):focus,.components-notice__dismiss:not(:disabled):not([aria-disabled=true]):not(.is-secondary):active,.components-notice__dismiss:not(:disabled):not([aria-disabled=true]):not(.is-secondary):hover{background-color:initial;color:#1e1e1e}.components-notice__dismiss:not(:disabled):not([aria-disabled=true]):not(.is-secondary):hover{box-shadow:none}.components-notice-list{box-sizing:border-box;max-width:100vw}.components-notice-list .components-notice__content{line-height:2;margin-bottom:12px;margin-top:12px}.components-notice-list .components-notice__action.components-button{display:block;margin-left:0;margin-top:8px}.components-panel{background:#fff;border:1px solid #e0e0e0}.components-panel>.components-panel__body:first-child,.components-panel>.components-panel__header:first-child{margin-top:-1px}.components-panel>.components-panel__body:last-child,.components-panel>.components-panel__header:last-child{border-bottom-width:0}.components-panel+.components-panel{margin-top:-1px}.components-panel__body{border-bottom:1px solid #e0e0e0;border-top:1px solid #e0e0e0}.components-panel__body h3{margin:0 0 .5em}.components-panel__body.is-opened{padding:16px}.components-panel__header{align-items:center;border-bottom:1px solid #ddd;box-sizing:initial;display:flex;height:47px;justify-content:space-between;padding:0 16px}.components-panel__header h2{color:inherit;font-size:inherit;margin:0}.components-panel__body+.components-panel__body,.components-panel__body+.components-panel__header,.components-panel__header+.components-panel__body,.components-panel__header+.components-panel__header{margin-top:-1px}.components-panel__body>.components-panel__body-title{display:block;font-size:inherit;margin-bottom:0;margin-top:0;padding:0;transition:background .1s ease-in-out}@media (prefers-reduced-motion:reduce){.components-panel__body>.components-panel__body-title{transition-delay:0s;transition-duration:0s}}.components-panel__body.is-opened>.components-panel__body-title{margin:-16px -16px 5px}.components-panel__body>.components-panel__body-title:hover{background:#f0f0f0;border:none}.components-panel__body-toggle.components-button{border:none;box-shadow:none;color:#1e1e1e;font-weight:500;height:auto;outline:none;padding:16px 48px 16px 16px;position:relative;text-align:left;transition:background .1s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){.components-panel__body-toggle.components-button{transition-delay:0s;transition-duration:0s}}.components-panel__body-toggle.components-button:focus{border-radius:0;box-shadow:inset 0 0 0 2px #3858e9;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-panel__body-toggle.components-button .components-panel__arrow{fill:currentColor;color:#1e1e1e;position:absolute;right:16px;top:50%;transform:translateY(-50%);transition:color .1s ease-in-out}@media (prefers-reduced-motion:reduce){.components-panel__body-toggle.components-button .components-panel__arrow{transition-delay:0s;transition-duration:0s}}body.rtl .components-panel__body-toggle.components-button .dashicons-arrow-right{-ms-filter:fliph;filter:FlipH;margin-top:-10px;transform:scaleX(-1)}.components-panel__icon{color:#757575;margin:-2px 0 -2px 6px}.components-panel__body-toggle-icon{margin-right:-5px}.components-panel__color-title{float:left;height:19px}.components-panel__row{align-items:center;display:flex;justify-content:space-between;margin-top:8px;min-height:36px}.components-panel__row select{min-width:0}.components-panel__row label{flex-shrink:0;margin-right:12px;max-width:75%}.components-panel__row:empty,.components-panel__row:first-of-type{margin-top:0}.components-panel .circle-picker{padding-bottom:20px}.components-placeholder.components-placeholder{-moz-font-smoothing:subpixel-antialiased;-webkit-font-smoothing:subpixel-antialiased;background-color:#fff;border-radius:2px;box-shadow:inset 0 0 0 1px #1e1e1e;box-sizing:border-box;color:#1e1e1e;margin:0;outline:1px solid #0000;padding:1em;position:relative;text-align:left;width:100%}@supports (position:sticky){.components-placeholder.components-placeholder{align-items:flex-start;display:flex;flex-direction:column;justify-content:top}}.components-placeholder__error,.components-placeholder__fieldset,.components-placeholder__instructions,.components-placeholder__label{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px}.components-placeholder__label{align-items:center;display:flex;font-weight:600;margin-bottom:16px}.components-placeholder__label .block-editor-block-icon,.components-placeholder__label .dashicon,.components-placeholder__label>svg{fill:currentColor;margin-right:12px}@media (forced-colors:active){.components-placeholder__label .block-editor-block-icon,.components-placeholder__label .dashicon,.components-placeholder__label>svg{fill:CanvasText}}.components-placeholder__label:empty{display:none}.components-placeholder__fieldset,.components-placeholder__fieldset form{display:flex;flex-direction:row;flex-wrap:wrap;width:100%}.components-placeholder__fieldset form p,.components-placeholder__fieldset p{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px}.components-placeholder__fieldset.is-column-layout,.components-placeholder__fieldset.is-column-layout form{flex-direction:column}.components-placeholder__input[type=url]{border:1px solid #949494;border-radius:2px;box-shadow:0 0 0 #0000;flex:1 1 auto;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;line-height:normal;margin:0 8px 0 0;padding:6px 8px;transition:box-shadow .1s linear}@media (prefers-reduced-motion:reduce){.components-placeholder__input[type=url]{transition-delay:0s;transition-duration:0s}}@media (min-width:600px){.components-placeholder__input[type=url]{font-size:13px;line-height:normal}}.components-placeholder__input[type=url]:focus{border-color:#3858e9;border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px #3858e9;box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid #0000}.components-placeholder__input[type=url]::-webkit-input-placeholder{color:#1e1e1e9e}.components-placeholder__input[type=url]::-moz-placeholder{color:#1e1e1e9e;opacity:1}.components-placeholder__input[type=url]:-ms-input-placeholder{color:#1e1e1e9e}.components-placeholder__instructions{margin-bottom:1em}.components-placeholder__error{margin-top:1em;width:100%}.components-placeholder__fieldset .components-button{margin-bottom:12px;margin-right:12px}.components-placeholder__fieldset .components-button:last-child{margin-bottom:0;margin-right:0}.components-placeholder__fieldset .components-button:not(.is-link)~.components-button.is-link{margin-left:10px;margin-right:10px}.components-placeholder__fieldset .components-button:not(.is-link)~.components-button.is-link:last-child{margin-right:0}.components-placeholder.is-large .components-placeholder__label{font-size:18pt;font-weight:400}.components-placeholder.is-medium .components-placeholder__instructions,.components-placeholder.is-small .components-placeholder__instructions{display:none}.components-placeholder.is-medium .components-placeholder__fieldset,.components-placeholder.is-medium .components-placeholder__fieldset form,.components-placeholder.is-small .components-placeholder__fieldset,.components-placeholder.is-small .components-placeholder__fieldset form{flex-direction:column}.components-placeholder.is-medium .components-placeholder__fieldset .components-button,.components-placeholder.is-small .components-placeholder__fieldset .components-button{margin-right:auto}.components-placeholder.is-small .components-button{padding:0 8px 2px}.components-placeholder .components-placeholder__learn-more .components-external-link{color:#3858e9;color:var(--wp-admin-theme-color)}.components-placeholder.has-illustration{-webkit-backdrop-filter:blur(100px);backdrop-filter:blur(100px);backface-visibility:hidden;background-color:initial;border-radius:2px;box-shadow:none;color:inherit;display:flex;overflow:auto}.is-dark-theme .components-placeholder.has-illustration{background-color:#0000001a}.components-placeholder.has-illustration .components-placeholder__fieldset{margin-left:0;margin-right:0;width:auto}.components-placeholder.has-illustration .components-button,.components-placeholder.has-illustration .components-placeholder__instructions,.components-placeholder.has-illustration .components-placeholder__label{opacity:0;pointer-events:none;transition:opacity .1s linear}@media (prefers-reduced-motion:reduce){.components-placeholder.has-illustration .components-button,.components-placeholder.has-illustration .components-placeholder__instructions,.components-placeholder.has-illustration .components-placeholder__label{transition-delay:0s;transition-duration:0s}}.is-selected>.components-placeholder.has-illustration .components-button,.is-selected>.components-placeholder.has-illustration .components-placeholder__instructions,.is-selected>.components-placeholder.has-illustration .components-placeholder__label{opacity:1;pointer-events:auto}.components-placeholder.has-illustration:before{background:currentColor;bottom:0;content:"";left:0;opacity:.1;pointer-events:none;position:absolute;right:0;top:0}.components-placeholder__preview{display:flex;justify-content:center}.components-placeholder__illustration{stroke:currentColor;box-sizing:initial;height:100%;left:50%;opacity:.25;position:absolute;top:50%;transform:translate(-50%,-50%);width:100%}.components-popover{will-change:transform;z-index:1000000}.components-popover.is-expanded{bottom:0;left:0;position:fixed;right:0;top:0;z-index:1000000!important}.components-popover__content{background:#fff;border-radius:2px;box-shadow:0 0 0 1px #ccc,0 .7px 1px #0000001a,0 1.2px 1.7px -.2px #0000001a,0 2.3px 3.3px -.5px #0000001a;box-sizing:border-box;width:min-content}.is-alternate .components-popover__content{box-shadow:0 0 0 1px #1e1e1e}.is-unstyled .components-popover__content{background:none;border-radius:0;box-shadow:none}.components-popover.is-expanded .components-popover__content{box-shadow:0 -1px 0 0 #ccc;height:calc(100% - 48px);overflow-y:visible;position:static;width:auto}.components-popover.is-expanded.is-alternate .components-popover__content{box-shadow:0 -1px 0 #1e1e1e}.components-popover__header{align-items:center;background:#fff;display:flex;height:48px;justify-content:space-between;padding:0 8px 0 16px}.components-popover__header-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.components-popover__close.components-button{z-index:5}.components-popover__arrow{display:flex;height:14px;pointer-events:none;position:absolute;width:14px}.components-popover__arrow:before{background-color:#fff;content:"";height:2px;left:1px;position:absolute;right:1px;top:-1px}.components-popover__arrow.is-top{bottom:-14px!important;transform:rotate(0)}.components-popover__arrow.is-right{left:-14px!important;transform:rotate(90deg)}.components-popover__arrow.is-bottom{top:-14px!important;transform:rotate(180deg)}.components-popover__arrow.is-left{right:-14px!important;transform:rotate(-90deg)}.components-popover__triangle{display:block;flex:1}.components-popover__triangle-bg{fill:#fff}.components-popover__triangle-border{fill:#0000;stroke-width:1px;stroke:#ccc}.is-alternate .components-popover__triangle-border{stroke:#1e1e1e}.components-popover-pointer-events-trap{background-color:initial;inset:0;position:fixed;z-index:1000000}.components-radio-control__input[type=radio]{border:1px solid #1e1e1e;border-radius:2px;border-radius:50%;box-shadow:0 0 0 #0000;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;height:24px;line-height:normal;margin-right:6px;margin-top:0;padding:6px 8px;transition:box-shadow .1s linear;transition:none;width:24px}@media (prefers-reduced-motion:reduce){.components-radio-control__input[type=radio]{transition-delay:0s;transition-duration:0s}}@media (min-width:600px){.components-radio-control__input[type=radio]{font-size:13px;line-height:normal}}.components-radio-control__input[type=radio]:focus{border-color:#3858e9;border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px #3858e9;box-shadow:0 0 0 .5px var(--wp-admin-theme-color)}.components-radio-control__input[type=radio]::-webkit-input-placeholder{color:#1e1e1e9e}.components-radio-control__input[type=radio]::-moz-placeholder{color:#1e1e1e9e;opacity:1}.components-radio-control__input[type=radio]:-ms-input-placeholder{color:#1e1e1e9e}@media (min-width:600px){.components-radio-control__input[type=radio]{height:20px;width:20px}}.components-radio-control__input[type=radio]:checked:before{background-color:#fff;border:4px solid #fff;box-sizing:inherit;height:8px;margin:0;transform:translate(7px,7px);width:8px}@media (min-width:600px){.components-radio-control__input[type=radio]:checked:before{transform:translate(5px,5px)}}.components-radio-control__input[type=radio]:focus{box-shadow:0 0 0 2px #fff,0 0 0 4px #3858e9;box-shadow:0 0 0 2px #fff,0 0 0 4px var(--wp-admin-theme-color);outline:2px solid #0000}.components-radio-control__input[type=radio]:checked{background:#3858e9;background:var(--wp-admin-theme-color);border-color:#3858e9;border-color:var(--wp-admin-theme-color)}.components-resizable-box__handle{display:none;height:23px;width:23px;z-index:2}.components-resizable-box__container.has-show-handle .components-resizable-box__handle{display:block}.components-resizable-box__container>img{width:inherit}.components-resizable-box__handle:after{background:#fff;border-radius:50%;box-shadow:inset 0 0 0 2px #3858e9;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));content:"";cursor:inherit;display:block;height:15px;outline:2px solid #0000;position:absolute;right:calc(50% - 8px);top:calc(50% - 8px);width:15px}.components-resizable-box__side-handle:before{background:#3858e9;background:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));border-radius:2px;content:"";cursor:inherit;display:block;height:3px;opacity:0;position:absolute;right:calc(50% - 1px);top:calc(50% - 1px);transition:transform .1s ease-in;width:3px;will-change:transform}@media (prefers-reduced-motion:reduce){.components-resizable-box__side-handle:before{transition-delay:0s;transition-duration:0s}}.components-resizable-box__corner-handle,.components-resizable-box__side-handle{z-index:2}.components-resizable-box__side-handle.components-resizable-box__handle-bottom,.components-resizable-box__side-handle.components-resizable-box__handle-bottom:before,.components-resizable-box__side-handle.components-resizable-box__handle-top,.components-resizable-box__side-handle.components-resizable-box__handle-top:before{border-left:0;border-right:0;left:0;width:100%}.components-resizable-box__side-handle.components-resizable-box__handle-left,.components-resizable-box__side-handle.components-resizable-box__handle-left:before,.components-resizable-box__side-handle.components-resizable-box__handle-right,.components-resizable-box__side-handle.components-resizable-box__handle-right:before{border-bottom:0;border-top:0;height:100%;top:0}.components-resizable-box__side-handle.components-resizable-box__handle-bottom:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-bottom:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-top:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-top:hover:before{animation:components-resizable-box__top-bottom-animation .1s ease-out 0s;animation-fill-mode:forwards}@media (prefers-reduced-motion:reduce){.components-resizable-box__side-handle.components-resizable-box__handle-bottom:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-bottom:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-top:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-top:hover:before{animation-delay:0s;animation-duration:1ms}}.components-resizable-box__side-handle.components-resizable-box__handle-left:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-left:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-right:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-right:hover:before{animation:components-resizable-box__left-right-animation .1s ease-out 0s;animation-fill-mode:forwards}@media (prefers-reduced-motion:reduce){.components-resizable-box__side-handle.components-resizable-box__handle-left:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-left:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-right:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-right:hover:before{animation-delay:0s;animation-duration:1ms}}@media not all and (min-resolution:0.001dpcm){@supports (-webkit-appearance:none){.components-resizable-box__side-handle.components-resizable-box__handle-bottom:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-bottom:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-left:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-left:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-right:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-right:hover:before,.components-resizable-box__side-handle.components-resizable-box__handle-top:active:before,.components-resizable-box__side-handle.components-resizable-box__handle-top:hover:before{animation:none}}}@keyframes components-resizable-box__top-bottom-animation{0%{opacity:0;transform:scaleX(0)}to{opacity:1;transform:scaleX(1)}}@keyframes components-resizable-box__left-right-animation{0%{opacity:0;transform:scaleY(0)}to{opacity:1;transform:scaleY(1)}}
/*!rtl:begin:ignore*/.components-resizable-box__handle-right{right:-11.5px}.components-resizable-box__handle-left{left:-11.5px}.components-resizable-box__handle-top{top:-11.5px}.components-resizable-box__handle-bottom{bottom:-11.5px}
/*!rtl:end:ignore*/.components-responsive-wrapper{align-items:center;display:flex;justify-content:center;max-width:100%;position:relative}.components-responsive-wrapper__content{display:block;max-width:100%;width:100%}.components-sandbox{overflow:hidden}iframe.components-sandbox{width:100%}body.lockscroll,html.lockscroll{overflow:hidden}.components-search-control{position:relative}.components-search-control input[type=search].components-search-control__input{background:#f0f0f0;border:none;border-radius:2px;box-shadow:0 0 0 #0000;display:block;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;height:48px;line-height:normal;margin-left:0;margin-right:0;padding:0 48px 0 16px;transition:box-shadow .1s linear;width:100%}@media (prefers-reduced-motion:reduce){.components-search-control input[type=search].components-search-control__input{transition-delay:0s;transition-duration:0s}}@media (min-width:600px){.components-search-control input[type=search].components-search-control__input{font-size:13px;line-height:normal}}.components-search-control input[type=search].components-search-control__input:focus{border-color:#3858e9;border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px #3858e9;box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid #0000}.components-search-control input[type=search].components-search-control__input::-webkit-input-placeholder{color:#1e1e1e9e}.components-search-control input[type=search].components-search-control__input::-moz-placeholder{color:#1e1e1e9e;opacity:1}.components-search-control input[type=search].components-search-control__input:-ms-input-placeholder{color:#1e1e1e9e}@media (min-width:600px){.components-search-control input[type=search].components-search-control__input{font-size:13px}}.components-search-control input[type=search].components-search-control__input:focus{background:#fff;box-shadow:inset 0 0 0 2px #3858e9;box-shadow:inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-search-control input[type=search].components-search-control__input::placeholder{color:#757575}.components-search-control input[type=search].components-search-control__input::-webkit-search-cancel-button,.components-search-control input[type=search].components-search-control__input::-webkit-search-decoration,.components-search-control input[type=search].components-search-control__input::-webkit-search-results-button,.components-search-control input[type=search].components-search-control__input::-webkit-search-results-decoration{-webkit-appearance:none}.components-search-control.is-next-40px-default-size input[type=search].components-search-control__input{height:40px}.components-search-control.is-size-compact input[type=search].components-search-control__input{height:32px;padding-left:8px;padding-right:32px}.components-search-control__icon{align-items:center;display:flex;justify-content:center;position:absolute;right:12px;top:50%;transform:translateY(-50%);width:24px}.is-size-compact .components-search-control__icon{right:4px}.components-search-control__input-wrapper{position:relative}.components-select-control__input{-webkit-tap-highlight-color:rgba(0,0,0,0)!important;outline:0}@media (max-width:782px){.components-base-control .components-base-control__field .components-select-control__input{font-size:16px}}.components-snackbar{-webkit-backdrop-filter:blur(16px) saturate(180%);backdrop-filter:blur(16px) saturate(180%);background:#000000d9;border-radius:2px;box-shadow:0 .7px 1px #0000001a,0 1.2px 1.7px -.2px #0000001a,0 2.3px 3.3px -.5px #0000001a;box-sizing:border-box;color:#fff;cursor:pointer;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;max-width:600px;padding:12px 20px;pointer-events:auto;width:100%}@media (min-width:600px){.components-snackbar{width:-moz-fit-content;width:fit-content}}.components-snackbar:focus{box-shadow:inset 0 0 0 1px #fff,0 0 0 2px #3858e9;box-shadow:inset 0 0 0 1px #fff,0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9))}.components-snackbar.components-snackbar-explicit-dismiss{cursor:default}.components-snackbar .components-snackbar__content-with-icon{margin-left:24px}.components-snackbar .components-snackbar__icon{left:28px;position:absolute;top:24px}.components-snackbar .components-snackbar__dismiss-button{cursor:pointer;margin-left:24px}.components-snackbar__action.components-button{color:#fff;flex-shrink:0;height:auto;line-height:1.4;margin-left:32px;padding:0}.components-snackbar__action.components-button:not(:disabled):not([aria-disabled=true]):not(.is-secondary){background-color:initial;-webkit-text-decoration:underline;text-decoration:underline}.components-snackbar__action.components-button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):focus{box-shadow:none;color:#fff;outline:1px dotted #fff}.components-snackbar__action.components-button:not(:disabled):not([aria-disabled=true]):not(.is-secondary):hover{color:#fff;-webkit-text-decoration:none;text-decoration:none}.components-snackbar__content{align-items:baseline;display:flex;justify-content:space-between;line-height:1.4}.components-snackbar-list{box-sizing:border-box;pointer-events:none;position:absolute;width:100%;z-index:100000}.components-snackbar-list__notice-container{padding-top:8px;position:relative}.components-tab-panel__tabs{align-items:stretch;display:flex;flex-direction:row}.components-tab-panel__tabs[aria-orientation=vertical]{flex-direction:column}.components-tab-panel__tabs-item{background:#0000;border:none;border-radius:0;box-shadow:none;cursor:pointer;font-weight:500;height:48px;margin-left:0;padding:3px 16px;position:relative}.components-tab-panel__tabs-item:focus:not(:disabled){box-shadow:none;outline:none;position:relative}.components-tab-panel__tabs-item:after{background:#3858e9;background:var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));border-radius:0;bottom:0;content:"";height:0;height:calc(var(--wp-admin-border-width-focus)*0);left:0;pointer-events:none;position:absolute;right:0;transition:all .1s linear}@media (prefers-reduced-motion:reduce){.components-tab-panel__tabs-item:after{transition-delay:0s;transition-duration:0s}}.components-tab-panel__tabs-item.is-active:after{height:2px;height:calc(var(--wp-admin-border-width-focus)*1);outline:2px solid #0000;outline-offset:-1px}.components-tab-panel__tabs-item:before{border-radius:2px;bottom:12px;box-shadow:0 0 0 0 #0000;content:"";left:12px;pointer-events:none;position:absolute;right:12px;top:12px;transition:all .1s linear}@media (prefers-reduced-motion:reduce){.components-tab-panel__tabs-item:before{transition-delay:0s;transition-duration:0s}}.components-tab-panel__tabs-item:focus-visible:before{box-shadow:0 0 0 2px #3858e9;box-shadow:0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));outline:2px solid #0000}.components-text-control__input,.components-text-control__input[type=color],.components-text-control__input[type=date],.components-text-control__input[type=datetime-local],.components-text-control__input[type=datetime],.components-text-control__input[type=email],.components-text-control__input[type=month],.components-text-control__input[type=number],.components-text-control__input[type=password],.components-text-control__input[type=tel],.components-text-control__input[type=text],.components-text-control__input[type=time],.components-text-control__input[type=url],.components-text-control__input[type=week]{border:1px solid #949494;border-radius:2px;box-shadow:0 0 0 #0000;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:16px;height:32px;line-height:normal;padding:6px 8px;transition:box-shadow .1s linear;width:100%}@media (prefers-reduced-motion:reduce){.components-text-control__input,.components-text-control__input[type=color],.components-text-control__input[type=date],.components-text-control__input[type=datetime-local],.components-text-control__input[type=datetime],.components-text-control__input[type=email],.components-text-control__input[type=month],.components-text-control__input[type=number],.components-text-control__input[type=password],.components-text-control__input[type=tel],.components-text-control__input[type=text],.components-text-control__input[type=time],.components-text-control__input[type=url],.components-text-control__input[type=week]{transition-delay:0s;transition-duration:0s}}@media (min-width:600px){.components-text-control__input,.components-text-control__input[type=color],.components-text-control__input[type=date],.components-text-control__input[type=datetime-local],.components-text-control__input[type=datetime],.components-text-control__input[type=email],.components-text-control__input[type=month],.components-text-control__input[type=number],.components-text-control__input[type=password],.components-text-control__input[type=tel],.components-text-control__input[type=text],.components-text-control__input[type=time],.components-text-control__input[type=url],.components-text-control__input[type=week]{font-size:13px;line-height:normal}}.components-text-control__input:focus,.components-text-control__input[type=color]:focus,.components-text-control__input[type=date]:focus,.components-text-control__input[type=datetime-local]:focus,.components-text-control__input[type=datetime]:focus,.components-text-control__input[type=email]:focus,.components-text-control__input[type=month]:focus,.components-text-control__input[type=number]:focus,.components-text-control__input[type=password]:focus,.components-text-control__input[type=tel]:focus,.components-text-control__input[type=text]:focus,.components-text-control__input[type=time]:focus,.components-text-control__input[type=url]:focus,.components-text-control__input[type=week]:focus{border-color:#3858e9;border-color:var(--wp-admin-theme-color);box-shadow:0 0 0 .5px #3858e9;box-shadow:0 0 0 .5px var(--wp-admin-theme-color);outline:2px solid #0000}.components-text-control__input::-webkit-input-placeholder,.components-text-control__input[type=color]::-webkit-input-placeholder,.components-text-control__input[type=date]::-webkit-input-placeholder,.components-text-control__input[type=datetime-local]::-webkit-input-placeholder,.components-text-control__input[type=datetime]::-webkit-input-placeholder,.components-text-control__input[type=email]::-webkit-input-placeholder,.components-text-control__input[type=month]::-webkit-input-placeholder,.components-text-control__input[type=number]::-webkit-input-placeholder,.components-text-control__input[type=password]::-webkit-input-placeholder,.components-text-control__input[type=tel]::-webkit-input-placeholder,.components-text-control__input[type=text]::-webkit-input-placeholder,.components-text-control__input[type=time]::-webkit-input-placeholder,.components-text-control__input[type=url]::-webkit-input-placeholder,.components-text-control__input[type=week]::-webkit-input-placeholder{color:#1e1e1e9e}.components-text-control__input::-moz-placeholder,.components-text-control__input[type=color]::-moz-placeholder,.components-text-control__input[type=date]::-moz-placeholder,.components-text-control__input[type=datetime-local]::-moz-placeholder,.components-text-control__input[type=datetime]::-moz-placeholder,.components-text-control__input[type=email]::-moz-placeholder,.components-text-control__input[type=month]::-moz-placeholder,.components-text-control__input[type=number]::-moz-placeholder,.components-text-control__input[type=password]::-moz-placeholder,.components-text-control__input[type=tel]::-moz-placeholder,.components-text-control__input[type=text]::-moz-placeholder,.components-text-control__input[type=time]::-moz-placeholder,.components-text-control__input[type=url]::-moz-placeholder,.components-text-control__input[type=week]::-moz-placeholder{color:#1e1e1e9e;opacity:1}.components-text-control__input:-ms-input-placeholder,.components-text-control__input[type=color]:-ms-input-placeholder,.components-text-control__input[type=date]:-ms-input-placeholder,.components-text-control__input[type=datetime-local]:-ms-input-placeholder,.components-text-control__input[type=datetime]:-ms-input-placeholder,.components-text-control__input[type=email]:-ms-input-placeholder,.components-text-control__input[type=month]:-ms-input-placeholder,.components-text-control__input[type=number]:-ms-input-placeholder,.components-text-control__input[type=password]:-ms-input-placeholder,.components-text-control__input[type=tel]:-ms-input-placeholder,.components-text-control__input[type=text]:-ms-input-placeholder,.components-text-control__input[type=time]:-ms-input-placeholder,.components-text-control__input[type=url]:-ms-input-placeholder,.components-text-control__input[type=week]:-ms-input-placeholder{color:#1e1e1e9e}.components-text-control__input.is-next-40px-default-size,.components-text-control__input[type=color].is-next-40px-default-size,.components-text-control__input[type=date].is-next-40px-default-size,.components-text-control__input[type=datetime-local].is-next-40px-default-size,.components-text-control__input[type=datetime].is-next-40px-default-size,.components-text-control__input[type=email].is-next-40px-default-size,.components-text-control__input[type=month].is-next-40px-default-size,.components-text-control__input[type=number].is-next-40px-default-size,.components-text-control__input[type=password].is-next-40px-default-size,.components-text-control__input[type=tel].is-next-40px-default-size,.components-text-control__input[type=text].is-next-40px-default-size,.components-text-control__input[type=time].is-next-40px-default-size,.components-text-control__input[type=url].is-next-40px-default-size,.components-text-control__input[type=week].is-next-40px-default-size{height:40px}.components-tip{color:#757575;display:flex}.components-tip svg{fill:#f0b849;align-self:center;flex-shrink:0;margin-right:16px}.components-tip p{margin:0}.components-accessible-toolbar{border:1px solid #1e1e1e;border-radius:2px;display:inline-flex;flex-shrink:0}.components-accessible-toolbar>.components-toolbar-group:last-child{border-right:none}.components-accessible-toolbar.is-unstyled{border:none}.components-accessible-toolbar.is-unstyled>.components-toolbar-group{border-right:none}.components-accessible-toolbar .components-button,.components-toolbar .components-button{height:48px;padding-left:16px;padding-right:16px;position:relative;z-index:1}.components-accessible-toolbar .components-button:focus:not(:disabled),.components-toolbar .components-button:focus:not(:disabled){box-shadow:none;outline:none}.components-accessible-toolbar .components-button:before,.components-toolbar .components-button:before{animation:components-button__appear-animation .1s ease;animation-fill-mode:forwards;border-radius:2px;content:"";display:block;height:32px;left:8px;position:absolute;right:8px;z-index:-1}@media (prefers-reduced-motion:reduce){.components-accessible-toolbar .components-button:before,.components-toolbar .components-button:before{animation-delay:0s;animation-duration:1ms}}.components-accessible-toolbar .components-button svg,.components-toolbar .components-button svg{margin-left:auto;margin-right:auto;position:relative}.components-accessible-toolbar .components-button.is-pressed,.components-accessible-toolbar .components-button.is-pressed:hover,.components-toolbar .components-button.is-pressed,.components-toolbar .components-button.is-pressed:hover{background:#0000}.components-accessible-toolbar .components-button.is-pressed:before,.components-toolbar .components-button.is-pressed:before{background:#1e1e1e}.components-accessible-toolbar .components-button:focus:before,.components-toolbar .components-button:focus:before{box-shadow:inset 0 0 0 1px #fff,0 0 0 2px #3858e9;box-shadow:inset 0 0 0 1px var(--wp-components-color-background,#fff),0 0 0 var(--wp-admin-border-width-focus) var(--wp-components-color-accent,var(--wp-admin-theme-color,#3858e9));outline:2px solid #0000}.components-accessible-toolbar .components-button.has-icon.has-icon,.components-toolbar .components-button.has-icon.has-icon{min-width:48px;padding-left:12px;padding-right:12px}.components-accessible-toolbar .components-button.components-tab-button,.components-toolbar .components-button.components-tab-button{font-weight:500}.components-accessible-toolbar .components-button.components-tab-button span,.components-toolbar .components-button.components-tab-button span{display:inline-block;padding-left:0;padding-right:0;position:relative}@keyframes components-button__appear-animation{0%{transform:scaleY(0)}to{transform:scaleY(1)}}.components-toolbar__control.components-button{position:relative}.components-toolbar__control.components-button[data-subscript] svg{padding:5px 10px 5px 0}.components-toolbar__control.components-button[data-subscript]:after{bottom:10px;content:attr(data-subscript);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:13px;font-weight:600;line-height:12px;position:absolute;right:8px}.components-toolbar__control.components-button:not(:disabled).is-pressed[data-subscript]:after{color:#fff}.components-toolbar-group{background-color:#fff;border-right:1px solid #1e1e1e;display:inline-flex;flex-shrink:0;flex-wrap:wrap;line-height:0;min-height:48px;padding-left:6px;padding-right:6px}.components-toolbar-group .components-toolbar-group.components-toolbar-group{border-width:0;margin:0}.components-toolbar-group .components-button.components-button,.components-toolbar-group .components-button.has-icon.has-icon{min-width:36px;padding-left:6px;padding-right:6px}.components-toolbar-group .components-button.components-button svg,.components-toolbar-group .components-button.has-icon.has-icon svg{min-width:24px}.components-toolbar-group .components-button.components-button:before,.components-toolbar-group .components-button.has-icon.has-icon:before{left:2px;right:2px}.components-toolbar{background-color:#fff;border:1px solid #1e1e1e;display:inline-flex;flex-shrink:0;flex-wrap:wrap;margin:0;min-height:48px}.components-toolbar .components-toolbar.components-toolbar{border-width:0;margin:0}div.components-toolbar>div{display:block;margin:0}@supports (position:sticky){div.components-toolbar>div{display:flex}}div.components-toolbar>div+div.has-left-divider{margin-left:6px;overflow:visible;position:relative}div.components-toolbar>div+div.has-left-divider:before{background-color:#ddd;box-sizing:initial;content:"";display:inline-block;height:20px;left:-3px;position:absolute;top:8px;width:1px}.components-tooltip{background:#000;border-radius:2px;color:#f0f0f0;font-size:12px;line-height:1.4;padding:4px 8px;text-align:center;z-index:1000002}.components-tooltip__shortcut{margin-left:8px}PK.3Y�\��6�6'bunyad-amp/assets/fonts/genericons.woffwOFF6�
V�FFTM6�u�(OS/2�E`d,u�cmap����r��cvt  Dgasp6���glyfT.�H���I�head0/6`BWhhea`$�hmtx��8X�Srloca$00ˋݮmaxp�  �name397R��post4P0�"��x�c`d``b�-Z��6_�9@�b�Z��'X���	D&	 x�c`d`�`���l���D����@.x�c`a��8�����՘u&��f�ΐ�$������������U���U��D�����x�-O��P<H
k��M�joe��!R�>{�����y��w���tO`��pxXf`N#�?�U�'��w��x�/+�X0���Io�q2����_̈́����/����0�wqF��h���tC����6�.T��d�8Um�������T��
-�x�c```f�`FX�1��,����菜�8?I~R������/�_<�D~�R�U���
�O�>)|f���E���/_�$|)����,||||L��<F<:<j<
<R<"<|<�P��F6�2F& �����m)XD,,,,Z���F���L���b�0��$H���
8
���
<
~
�$Fb���2��0f��H���@^z��� X��.J���� ����,@Vdr��T��,N|�BXf|���J|���0T~��:h���Vp��� .:HV�� 8 �!!B!�!�"":"H"|"�"�"�##Z#�$$$Hx��|y`Tս���u&���$�̒�	$�,���0�=�NK@YE"K0�(�^D�EE������<�Z���<��l���W�Z�B��=�΄�K��1���{�g?���=��hB�%�L"���R��*���V�?5?#
$O�,Zf�Ϩ
�5?,>l��g���p7�T�y����ۄE Q���|�I>�!�yd�'*G=6�Ïa^"�>"h)M$@R�H?�*k���_(DL���`Yn�\ H�r��L�c��W��5�3Xx��C/�{��׏��q|�J��,d)���`���j���:H1�u�Y�,R�"DB�7O��@��QR��5O�yC�ɚ@����>xp�q����/��D���;�3�9k{G6�O5
�Ym ���,H쥽�g��rf�c��Y}b��w&`��~�է�{0��g��S~f��8��M �(`_kg�.�?|��þ�ńVE5ɦD#1�]�n[�O��v
ZN�چW*R�h���l�s�|Kac���c���>�sA�n>��k��	P�5�-�7��5(HVO^�"a�j���F�X��o6��)��'��[ nc��,YP<Y��:kv�Itt�vt�_��h�*9��jw�jlmʚ5S���xW`�B�6���6>����YE���4�iXϑ^�խ������n�`O���G�p�|^V�XXѺv���h��`˞S���m�l2��	��N��s�;�CD�̸�X���V��8c�H�l��@���c�I������d
f/^<����?e�����!�n�uktn������}6��f͍c/=<��vVp�+��r	f�UP$U	�`Ŵ(Xp�� OPAE
����8�����'� ��C1��pI��ڭ6�����A\v�:���m˟��n����œ&Ԗ,W��|��W߼8~��7__4"��U�o0J�Kj�O^4'ɵ�ƍ����X��Sd49Ec�ӛ����|��h���m7>�@ؙ~��!����Uw���8Ky��E�f�<�b��u ��:���3)�P1�!^�ݳg��E��f%ԙ�'D��\_q��f;͠��y��!��yY��)uY�n%��Yhxhov"*Bx����"�ԓ�J��>.�
Q�9^.����bv�H<�ֽ.���D�q��U|vK�T�["{q�0�ȁÞ'�L7u�+��V!=M��5v���?��>.HЏ�y�����l/
*��ī�g_��y	��e��n�}�o����,r-=D��]�,?�9��n�K��?�6���6z�޽+��7*���V؜x��n���T�u�û
w�J��9�J�3����!pB�`�'4�[Z˯��vA�X /�u W!@�FQ����s���z\�8�0���8�^��gh���;b�<Pc��\)T�՞�=����_U5󁟌��y��]W��'�Nή�n�0�q���-����7�Rj�'ۖ��}=#�c��m��ܢ7o�+��]���7��T�mZ�8<^�H,���%(?T���(m�Gv�> ��(4����Џ*[�ɓ�_���U�����,A�|
�ޜ�8�#+v��ѧi_�aG��O8�c���X����+#�"aO������n��O_�����z�E׶Ż�Nu�����(}M��'@
����JQ����^Q0D�L�,�������`7�A�yqE�c�3�ǹ�
vXb�1a@`@��;�>��������UQ�""���sq~jU����
V��/�����'W���ض���3o���\/	_���/�*Hy�Qh�l��$U���U��{o��G��W��6K����O]�nͷZ7N	\��a��R��ÿ:�a�^���zFn�&��Sy��%R�}}5!YJ��H{�vC��SW76\��
~�;�$�Ж��K�;X%"�yEY�K0�lU�!+�VT޼3��=�as] ��?Q�n%ud8E�ޯ!!3�Ր��A,�~1��m>�/ꋆ�a�=!����׽���E��{��7Zw
V�����r���>�dɣKGv��It��OgT�O�q͒1��w��n�/�<��Us
٪Q?��G���4�͓c=E�w)�#'1c]9#	2qdž��>FE�T�����Z|&؄�� �=(L[�lF��
�:�zhZG帡���$��l��Sn-��yY�n^4�ma����I��;��+�awq,����J|�Ŗ�e��f\)=?�t��A+0��?������Վ�����l*�:λ�f�W%[x(��FO�����O)5=��~�0o��,o�w���2՗�"�},n���<irS㔾
�ړ�*����s� ��9��^�Ngcg>��aʅ���.I�@P���-l�X���?��UBޙ�I��y�/��,խ���D�g\����Oz'x�ߩ��Lʳo�d��@s���%k�]4��4�ћWM�0��hT�}�x��w��/_�i�>|q���	���
�c_-<e�,��z�����Ѱ��_A�K���-4�����޹��,̙�Uh2��x�{��{���U��xF�-��!O�fcq��%ꍲ;���i4ǩ��$R�8�9lna�2�Nrȅ\"-��ؖ,_�u�U��}Z����Ywt��S�t-3�ȂI�����5K�6u�E�vNv�kܨ��h������ӻ3����?t�bpF�������X��_t��w��rl�!�bHdYm�)W-|��i��o����;��њ]Wm�5��d�4���g,�<���A�^a��@ދ�+������l��_~I�2uE: �e�/�wx��%QoWs�o$���;���b�Ì"CeV6�� �����[��;m������=5�h]��<aؚnC��ĘUb��N�@�v-������n�����j
��SOͻ�gm��O��
�ZFA!�6���g�����{�}���w��T�Z��Z*;�q
�6�xFM�(oT\���L��7��3��
_4�5�jW2�6�m��Ȯ�*g�l�Q�n/+kh�n��6�K$���¦�`�p�j��ԟ���;V�5���9��F�o�yY	^���&��
����t��PH�׼�4���f3��dT&�d2��O�%��N�dl#*H�;5�I�W��w�|i����m�d���G�'���6�M��*�ϪԡΠ�)����N%@�����@4�wo 	��bd� Z���"�ϣ�q~�#�6�z���j�a�c�gcG-��:�uv0�q#8��-&��U#eTUq�?���/�VS�)�
"�tY��` 1�V�L.���0+p}��2u�cp�^}�~,����O�R�?�
�J��%Z-�H�V���L���΁c,�tME�/�/��dd��5�;�Φ���z���߀)��w�l�����iU���x��]�vah���Ӫ�����c6W������UaT���W�<1�u0L���Y8S�Fd���!U��(�j��p=B8�!!�'cTsc�=J"*�A���������8�P�Y������1��+��po�K9Ș#d�F�8<���X�r�մ���0!���;f�'BأFF���e�k��)}�vq�Ў-W�k����k��]��/W^1�%˰s�jjq$C7E;,�pAU��jn 1�E����H���!+�e5�񹨇m�1��X�M6����N��/
[�3krl橗�V>2l*6�n�u�L��4l��i֎7z&ݰ���M=��t\[��P���|/��u׽!�w��d�3�@�2�]}��w�O��`������c[�H�h�uC���;SY�n�3�W�M^���[&Y�Z�_v�߸<��w~�W[��,�Y\Y�f�9�m�8<A�q�����]�a��M(uy��ڃV��"���sjG^2匹hu4�^m���/�oh�rU4?g�}7��M7�=z�eV�ʭ��O���]�=�`�=���%	9��K��{�����u�>�cu�z=�o\���*H�<�|r	�8�'���x,����@&�XjH���"�D��[-�0f��&g^Y��Wv_:+a6#�LV�?RY�>�l�5��)�Ĉٓ�����[�wΛ1�b�
‘���Ɨ�&g��xJu4)�?j��=���7�s�CĜ��3�߰�Т9�g�-rn���T����J��B�+'
��y���3��9[�-գ.3�ζ*o�!I�/�'��L��X����ѽ|Ճ��:o��Mn!��(+=��AW 
!�a��Un
2��P,2�&��ǔ�ff�
�a��ӂ}�9&���d�5-���2t ��ä,�j唉���+���Qu���ʶ��^xp{ό*zI��7��}�����m)��;U��8�j">o�sذ3��-_1�!휽q^�0������աB��VRV�b�YW�gU�غ��%n�Ԙ7|Ůg��i�y�Ʃw��K�T�������߶_:{xsE�����|�#�-w�[B6{yyu����38dBۂKF�%V���1��n�x���E�%'M�
q����(��aqW��T"K�%$T���8�xf�F�+�=XdgG2�`��&F^1n�P��n�����9c�MJ�����	�gLݕ������z�l�����>s�?��)�۰U
�=ܢ$�d�z�f�e��[��`-�Z����3
���8�W�(X�[�v	��3�(ī0�n�b��?���^��,(�rb�
��~��`�.�^����x�pG�kh���~B��
�
���y���ZOeÐ��-���G��>F?x��>���YZ5�Q�ƁQ�oX(�W���╵��E�f��(9���d��
���ږ/o��R'�3���d��ؼ�h�wU�wt�W��j��[[�s(4��vHCpxjYׁ�V��:x�`�poM����
B{�%T�H=�,��[���)S6�j)�ᑾ���=;G?�n�˫'���9*B�yl}"�fz�F|$��0L����0<6�\λ�aSeOF�
Fq��4��{k��7�6/j����-[^��C���=��y��>���γ�m!/-�{Ϝh�F=⩩�Ǜ�q�e�?>ڹk��
g�D�#�?�y�O�3|�o��:��A~�rw!��;dƙ�$���]~�}�ߕ�r��0��$�ܬ~T��9���},}���R��W*ݮ�r�ց=!F�d̉یu�����t;�,ÂV��.����a
�.ߝ�"��n���EAy�Y��_ѷ ���!q/�L���o���z�K�ҳ��] �*s��.2��]5Ob*�
y�k8L2����o��Ȱ�r��0��pˢh��ٍ��YV�E5�3Y�W�
ug[��˚+�S^�iI����tZK�>���K�\��b��Fd�T�h���j�U�̂�6䊲ZY!�UU%t�/�ens�A�q��9��r�>oq�ؓc�8�G�~�`�o�f��͏�n�:g-�Sb{��9<6�z��~�4DL���<�!�If.a�
c�9�*e��F��K!E(��b��`0E�>S�ݓ���eğ�kf�43k��Mx'YL�l��:p��\w�s�,���}~���Ꮅ����y�;kwѯv?��N��JV?�'bɑ��ϟ]ݹ��g'vv�_��1�D�\���0���։�H�{�ڭ"�U�L���fjLk>�G�&��Ԟ~�=�ܮlRL�t[��
��0�>����/6T>VXXF�sM��NF���)�9��D�H�٩hg�Ҵ���%H��p ऄ=�^Ly~]\d(iĺԢ����G�-z��&���Qu?TU	�RB�u��´)���&����o@0�X��P<�U���W�	����}�b���	e�(��a��>2aO:��f���μ{n;�՘_����i�3~��5s�w5���9_3a�z�z5�Ǎ@�E�8�o>ߣS!n�����N�75�9�a��������B��p�����0��_S�g��K�H���(jm-< �a�k`mr�/ %�w*��f;��nɌ� �GC	��G4j����a��su��G�<�����ՙ'�tv={7��~�~��}:]o�őtQ�^�-Q�M6�߾Ufj�@�AWSӷʥߜ��a�m���R�mW6��28��z�8�8Pl�
��:J&!���7���@��(�\�S)�[5�g�4B�"�w���CU#ƍ��]��2����%�/�R�,�
9~XK�Nz�ݗ'�[��I��X�ʔaf�S�[e|�ʗ��,�3pfYOO_%\=�gL�Lo�[�
/��_8%D9:�Wg��㫎�7�5��#��3Kx��!�Kd��ϙ#6(��M�y`�rJX�[r�/vm��}�+IX���ug�um�ͺ��Hm�Հ��n{xoZ˚���@ȁ���=���t/kӔ����w�C����7�o�W]�y_Z�`%ch����3
�^Hh���j��'H��k,Mz������@�zń���׫�	~��K�樖�+ij(�p�U�~�"�*�A�U�Trx��>���8��=�( �0���O�����B�� ��_o�� ^3�
P��a1��j�?��A%���S�!Z.Lܿ_�1=��&���@p�>eآ�
�6��v� 3��״>���`���S��K�1�F�d�3y�H�O��s�^vbU%�^��3�<�t�[��A��|�>���hB�R�/f��j4���
�ާA/��=�[���Gi����!6f�|T�9�� %R�MV��79��9����P�3գs�dA�
|f�����9���#t���6�%���'���~L<ѽ��䌻��a���z���>I/?�$����i<���1(��N��By�uR\�-�,�f1x,�[�y�+f|s�uY�����쾼���_w�Џ��ܱ��/1�k����	ƞ9�WDٞLf�����y
C�]�\��H�����a�`w��Ր p�x���m���Ynm�
�-�����&a�K�2�Ńo��/yc%�J��7j���SB��x�9,��Ki-�=�ߊ�1Uf����8=.+���3��NK|�q�̝�8�k,�f��n\7�2ץ�v5��60?%A���{j�l�L�ٝ@6�u?Q���#����ʰ>1�
Q��/���\r̙J���S��}7>�܍��J�4Y{�]S���Y)�s`x�9S1<[��L>ɖ�	�2�%�vR>� E`�֋c�s�@�)�b�Ů�5�6�q���pg��!�GWu�;L8��	����p�qN}��_퓚�?>t��G��7
[:�/)����K�X��R��$Խq���oU�}� ޺�t�><߷�3�ח�=��|HSL'����[Ö����d��:����D:�YTO��>����g*�3��*� }����3�׋0���k�k�Ӂ�Q81�0�}��5����2�'"�I�ү-�S�>����<n�r>��
^�2�CU	��<��ӱ"w �	ˊ˔t��י2I���?�3e]��\�x�B�ɳ�������i�F�G�C4�����ʱ�8�
�_��e�N�%N��D�s=�5J��#�De�h	�guq�5Aڎ�mL�>9h�OUol]Wz��=�
%��e�����K7�����צ��*��a�Vƿ�la�l'MDZ�L&?m;��
�$�mm�&�����O�ʻ�����
�f���][j�^ ���.��(�\��zEd�Bܦ���'����$�S�,��\T�/�ǩ�Z:`����M�<�[$��E��Pa�,j��w;�s��'V�蘀��To
YM��d���&��1,I�tX#&�V!�?�	l�z|	D����,rw�>>W(VM�s�-�̳4O�5�L�"���H�g��;s_�ndM����#A��5(s�\$}���7�><H��{a�L�2�>���t��{B�kn�V�o�bg��ᘬd�Y��0C	����8�9�h��.�4��~.�?���T�e�0�+Jci�9+cV�L���1�\���ۯ�2vp�3�:3y.���

#�!D|�7�_�p�o��'��'�ޤp��p��z�n��_��Bn�/!��D��{%��1|NC�� ���z�p���b�t�_E9���}\�
VM�.`f&G��vo<�t�1���`�^��+=�IH2uЇ���9��e
�_��*#���֖G���1-�.g�'3G�ޛ+�\���u�-r(����ٰ�(��x�E��:0��4��e�a�JM��������M����8�M�jӳ��-�s�E�E"3u��X__�w�٣�T��|K��4�4M�r��@]@��Ί�WT�dD1h	� ����q�r�!�~�jDZ��^�.h���i�oyc���-��Z���O�O���ɶ卑֑o�jo��:M7q�N�jo�9�R� 7;�94��I?�3��u̸�c7���`E}��/��U����i�����7�޲i�px|�Ԙ�� "ud����Sc6lbW��o��sr�<�W ���ϖ��s��~a,a��I#���c��&��lu��+:�2�,��fD�Lt�f�z�s����둁o28�����+�d�~�C&-�!���w z�). �� �������O���
ߋ�d��F�4֥A;ǀxF_�x�:���"�#�����\���������*	�ڸ�3E�/Q��E-S<���f��ƅ��rἓ2�t��<�02�睰LG���W��	Wϋ�K2h�i9v^y��‡q�o}��[/(�������w��5�*߮f@�~��r��)^�߱���nZRQ�,,��.v�e2���}u�u'F^�\AA����;��jd���j���}�u�W����a�
��'���
'/H�Y���D����ė��=#caL�L�F�����oA�.\̂
�)�y��9Q��>��H�c�ɼ.܎��ü���*��N�@[{�[���+�~BS��g_�p��^��Ɗ�	8e����k��s��c����Kc؜ ��Iu����
��_"���A��(Ԝ8*=q��	�9�5���mȡ�A����F_��Ѳ��0���i;P�1
Q���}ˁ8ʵ4D��I7)�*��}(���Q&�u��a�Y��T�\
n�0�~��?\����w%k�;�,��2-(�����/ϥ;t�P�8}^�d���稌r�5�`
�c�4�����E�rhG�sK�9�	f��|
����m��ߧ�%t\��>Ճs�/ȋ|��l"듌,�re�g��=$>�ǮN&W���%���5�[V��1�{Jƕ�4Rv��A�Q6��@�y�̿��[��-#�%�-��a�)��15/�ţ��QIn��YS>��zm0wⶆ��9��sdO�Z�pE���7����l�y�t�j�'���&�7"��6'��p�TTwA�y�)�Ah%�Aʤe_�^�p�ʅ�
��%s��.]�}邷m�{�ݘ�ݴ����_
�ZZJ[��ISo#i;:�3��>1�z�a�/�gk_h4Q�.�^r��Kδ�[��"�a��c	�����8���8q{�9VJ:]�{SH���M#��f��x���pg� �~��ca��6@��~#�J���
h��1��-����o4N��^Nc��g/l�A�,J�j3�i��I3���e�#��#��e0^#�C�0Bu��2�@��xp����Y"�EYGx�	�B�a��!����7+���%�Z#+�]�Q#��8��mIŤ"����Yw����,���ːhS�}E��"AYv�Zr���Q��\��W�p���C��"b�d�H6C�f� 'dw�q]��'�n_�K)ɮM��s��^��c,Ͷ&cC��P��,���r;
��`�Rژ?$X�
�r�N�5�n���G���<�!ߚ��-��F��PS[&8J�+�M�G�-��/I� ��ǧ��E�M,���ٗgu� K�g5�dU����N��4ڳ�'��%�|����d0��f�1�,:�"��|s�7�0���V�=�T�Z,r��b-t6;k+*ݮJ��<���Քe�q���	��<���J
�-r�Q�5�v�E�3dK�Ƒ��:e�ɩp�Wt���
�[<~��~}�
��A_��7�렿��$���2T�9o _kb�8`��[+$j�Q�/�ޑ|/�k�X�Kp;N"��%p�¢�<�*H-���{.!'���-���1!c�
�tTyz�Kib�H�ȿF�'�c�.�����<ܧ�E
ɴ��ص�����$�w��|��V�����w�X���2�Y�-��=-K2�;�︁�Ҥ�0^DNy��@�iNxP�	�az��[�c�Fr����:1[$�c��!(��0_.�nn,�s&�b�����O�m���N�D�?_���w&����@ԯjԁ�3���rQ������NLvŠMK8�1��V�:��Կ�%�����&I;�G��=��O`ęS��4�|l����r�`����P��u2�����(��A���2'��>
��j����������c�y���>��'x���S��68������ʙ� e8��;��)5���4��ˇ���l��G3kV~ķ�U�hw��$���=�oD�=���g���z�1��~��`����������ab׃:���L-��f�ޱ�>@����1��MK�����B�wӑ9����G�]b�i��4�mY*�ҍ�s���8t�W%���\
���!d[|�Ae �}�5,�x-�Kp��/���v���ޠ�<A�o�z�.
D�ϥ_��k�
x�x�'�m����>�]��� }��R�*Ii;S��cS��?i���k��0�m����K�x��[6_��q�n+��	��d�# �q�cV���?�١�b�•����[&gl]ڠ�l��FY�Mzl�3�"q�Ɛ2����=l�V�B-��P��!�~߽G���I��WW	��K���S��U(�i����'���m:�ë8��Q��8W�$�+3��`��4uϚ5S"s��Z�|��<������5S2eMxN�����C�P0
m>t(��,bK��$��v�;jGƂ�
���a5�'�Μ@eΌ:}W<����	���3ߙ�?�.������C���7n����v�@�Ȣ�<"
1���:��֡����uDŽ�S3:�:�N��q�cz��߇�Q
�פn�[�:��1��{���?��P��ɱc��z1�7�~���y%/��X���ΌV�����������+��Ɉ���fs��pos6��@a�=����l�
�~�vu����̺a����G�;ʸ12.����Ӑ�ku��������;�6��ဇ}��v���X�o���RR��L�jw��G���nxƟ�3O��x膉ۺ�ot?���g!����7���5v���&������%?��\��<��>�ȸ[�������˟C�+ǩ�j�w����{$���~}f_]�j����������[Mf�!��ls�:�r>�q5X'��M�%���`ۨ\pF�a�Yaۘ@870%�s^_�ܛ���v�O�f���0[g�.�dW���pZM�쯔(KΜ��?����h5c?�<���zj�8��c�8�mI���&Ϻ�s�g&Wu���1���݆�xڍ��j�0�%NJ3�~u)I��l0$��B���j)X�(]��}��CϊJ�B+���ݯ��p�O0��
3�⸃�;��'���q���q��d�%���|<;���7�]<�ñ���{�,qܧ|�48�B�jp�aD1�@�c��$�{4t��B�U�5f#�(󕖊�;1F�di��Nɨ���XJ%�2ӊxMŜ��%�2ov[�Ԋk+RHk+$c3ڿ5>W"L`J��3�jU���%�C�g��]�I0
Z�p��ECem��B��ʔZq!�P����VZ�x�m�g�U��		�������=��	��(frPrF�  J���
�}�OtU��O�^�Z]��������Wo^Z]�at1��`$������&�!�����Ә���`&���'�a.�������,�s���/��嬠ME"j��a%_�5�X����:��g�A�a=��&6���lc;;��.v�-{�������O��/��o�c?8�!s���8��'8�)Ns����<��%.s����_\�:7��-ns����o���#��?�<�9/x9���c�U�mVf2�f1k�1�͞���^�KzI/�%����ҐW�Uz�^�W�Uz�^�W�UzI/�%����^�xٻ�we��ޕ�+{Wn}ט����	��	��	�ЉwN瞰���������������������������������HzI/�e�����^��zY/�e��z�z�z�z�z�W�^�+zE����W�^�W��z�^�W��z�^�W�5z�^���5z�^��;+��Ί;+��k�n���5י}f�9`v�]wY�eq��]wY�e����q;��x�c```d��+��ї���hS�@PK.3Y�'Ч��5bunyad-amp/assets/fonts/nonbreakingspaceoverride.woffwOFF�LFFTM��5,�GDEF|'
OS/2�I`��cmapFJK��gasptglyft2<�'�/headD06.�
hheat$J�hmtxjlocadJhmaxp� Kname�z!��post$N`>/j�webf���[�x�c`d``��V�����~(�p�#PB;�hv6���<��x�c`d``����������7��x�c`d```g�``b��s��Wx�c`f��8�����U�e�4ʹ�������
rT��{�ma``�`�
3�䘃X���#n>x��``d�Y���+�yx�c```f�`Fp��|
 ���T�����oq@�#���$�P#Ċ�8
x�c`bd```g`c``R����‚���@�_
� 
H�fF$`���xڭ��N�@�O�3n\,f'$�%��1l &@ a_�
�%�'�>�KW������2��pa�M�o�{ϝWx���w
K��"5gp�g�Y��]sE��9�[�Ms�̄J#wɕL�6PŽ�}�4g�Nj���Мǃ�4�ΔPF�a3,�KF��;l��L�ܩ��m[5Kʖ��l%z�ǝ."J�iA̒1�]%��l3���*��)18�8�g̏����M\�1R�}���i8���3�/�s��yߺ)�t��=I:�����j�ʶ�E�F��0C�)�.���&�N&�%�]s�{&�9�;O�p&���F�+��*�Q(�����G\F;/
Ɇْ��]�h77j�M��nX6�~��^��%��x�c`b���F�;3201032123����e��9KiG���<�����̼����T>W����� ��S��x�c`d``�b1 fb`B6 f��5�$���Q�C,[⒬PK.3YFQ���6bunyad-amp/assets/fonts/nonbreakingspaceoverride.woff2wOF2�L�?FFTM`�J
<[6$ �!`?webfc�.!'z�#���s��I��H+���o�s�M�f�T�h&$�Y�$2!1�Jm�łmxiL�x���K���\�[s�W����Z`	$��o9_�I1zo����$

,��2�8�<*�\@��/LV]M(I�̀k�=��WnQI@O�u�l:��T7L�|q0�x.9�n�+��n( Հ	�O=.~�ƷJ��+�v���[�N����_�5�o
'�H�V
p��X��,���u�@�%�	�`>�"@	�ʪ+�����(� P�2P��q6��U��q��%�ۀН�͊�Մ~t������=Oi �)���u���kCt�K�B/�|qFc4�&"0�=���\�$�T{�D��yë�%F��t��laRM�~�n��%�%x��JA�A��Ҩf`$Ǖ�h��$���hZ����4��e�s�D�BF�/u�p��9���xQh���بJ>��9,�"��$�T�e�Ck��2���e$2��5��u�LWƪ���1����\߬�%1��l��ԭ&D�`�A�m$���qEI�+ȶƊ;:"�~#��~�2w峭���c��֞�>'���d�z�BrR^щ��DH\��շם��)�$��6p��O�����qar��Ɨ�p�޲s�䜑��=6����;�GQ
۷PK.3Y��vu__&bunyad-amp/assets/images/amp-alert.svg<svg width="20" height="17" viewBox="0 0 20 17" fill="none" xmlns="http://www.w3.org/2000/svg">
    <path d="M10.0749 4.05547L16.3499 14.8971H3.79987L10.0749 4.05547ZM10.0749 0.730469L0.908203 16.5638H19.2415L10.0749 0.730469ZM10.9082 12.3971H9.24154V14.0638H10.9082V12.3971ZM10.9082 7.39714H9.24154V10.7305H10.9082V7.39714Z" fill="#BE2C23" />
</svg>
PK.3Y��߾��+bunyad-amp/assets/images/amp-black-icon.svg<svg xmlns="http://www.w3.org/2000/svg">
	<path class="outer" d="M48 12c19.9 0 36 16.1 36 36S67.9 84 48 84 12 67.9 12 48s16.1-36 36-36" fill="none" />
	<path class="inner" transform="translate(33, 33)" d="M15,0 C23.2845834,0 30,6.71583331 30,15 C30,23.2841667 23.2845834,30 15,30 C6.71583335,30 0,23.2841667 0,15 C0,6.71583331 6.71583335,0 15,0 Z M13.8508333,24.0979167 L20.1429167,13.6258333 C20.2141667,13.5308333 20.26375,13.41875 20.26375,13.29125 C20.26375,12.9766667 20.0091667,12.7220833 19.695,12.7220833 C19.6770834,12.7220833 19.6391667,12.7229167 19.6391667,12.7229167 L16.1308334,12.7270833 L17.28625,5.89291666 L16.1270833,5.88833331 L9.85541665,16.3479167 C9.85541665,16.3479167 9.72958334,16.57625 9.72958334,16.71125 C9.72958334,17.0254167 9.98458332,17.2804167 10.29875,17.2804167 C10.3145833,17.2804167 10.3475,17.2795833 10.3475,17.2795833 L13.8379167,17.2745833 L12.7108333,24.0979167 L13.8508333,24.0979167 Z" fill="none" />
</svg>
PK.3Y(���/bunyad-amp/assets/images/amp-css-error-icon.svg<svg width="8" height="9" viewBox="0 0 8 9" fill="none" xmlns="http://www.w3.org/2000/svg">
    <path d="M4.13 6.45937H2.93001L2.53 8.85938H1.43L1.83 6.45937H0.530005V5.45937H2.03L2.33 3.75937H1.03V2.75937H2.53L2.93001 0.359375H4.03L3.63 2.75937H4.73L5.13 0.359375H6.23L5.83 2.75937H7.13V3.75937H5.63L5.33 5.45937H6.63V6.45937H5.13L4.73 8.85938H3.63L4.13 6.45937ZM3.13 5.45937H4.23L4.53 3.75937H3.43001L3.13 5.45937Z" fill="white" />
</svg>
PK.3YN~�oo'bunyad-amp/assets/images/amp-delete.svg<svg width="21" height="21" viewBox="0 0 21 21" fill="none" xmlns="http://www.w3.org/2000/svg">
    <path d="M12.2577 9.04336L10.491 10.81L8.71605 9.04336L7.54105 10.2184L9.31605 11.985L7.54938 13.7517L8.72438 14.9267L10.491 13.16L12.2577 14.9267L13.4327 13.7517L11.666 11.985L13.4327 10.2184L12.2577 9.04336ZM13.4077 3.65169L12.5744 2.81836H8.40772L7.57438 3.65169H4.65771V5.31836H16.3244V3.65169H13.4077ZM5.49105 16.1517C5.49105 17.0684 6.24105 17.8184 7.15772 17.8184H13.8244C14.741 17.8184 15.491 17.0684 15.491 16.1517V6.15169H5.49105V16.1517ZM7.15772 7.81836H13.8244V16.1517H7.15772V7.81836Z" fill="#479696"/>
</svg>
PK.3Y�݄�YY0bunyad-amp/assets/images/amp-html-error-icon.svg<svg width="13" height="6" viewBox="0 0 13 6" fill="none" xmlns="http://www.w3.org/2000/svg">
    <path d="M2.44926 3.06836L5.78911 4.24609V5.88672L0.744186 3.74805V2.36523L5.78911 0.226562V1.86719L2.44926 3.06836ZM10.6407 3.05078L7.23637 1.86133V0.232422L12.3399 2.37109V3.74805L7.23637 5.89258V4.25781L10.6407 3.05078Z" fill="white" />
</svg>
PK.3Y/B�}��-bunyad-amp/assets/images/amp-icon-toolbar.svg<svg width="21" height="21" viewBox="0 0 21 21" fill="none" xmlns="http://www.w3.org/2000/svg">
    <path d="M9.86345 16.8148H9.16345L9.96345 12.3148H7.66345C7.46345 12.3148 7.26345 12.1148 7.26345 11.9148C7.26345 11.8148 7.36345 11.7148 7.36345 11.7148L11.5635 4.71484H12.3635L11.5635 9.31484H13.8635C14.0635 9.31484 14.2635 9.51484 14.2635 9.71484C14.2635 9.81484 14.2635 9.91484 14.1635 9.91484L9.86345 16.8148ZM10.6635 0.714844C5.16345 0.714844 0.663452 5.21484 0.663452 10.7148C0.663452 16.2148 5.16345 20.7148 10.6635 20.7148C16.1635 20.7148 20.6635 16.2148 20.6635 10.7148C20.6635 5.21484 16.1635 0.714844 10.6635 0.714844Z" />
</svg>
PK.3Y��3��%bunyad-amp/assets/images/amp-icon.svg<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="62px" height="62px" viewBox="0 0 62 62" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
	<g id="AMP-Icon" fill="#82878c">
		<path d="M41.6288667,28.1614333 L28.6243667,49.8035667 L26.2683667,49.8035667 L28.5975,35.7016667 L21.3838,35.7109667 C21.3838,35.7109667 21.3156,35.7130333 21.2835667,35.7130333 C20.6336,35.7130333 20.1076333,35.1870667 20.1076333,34.5371 C20.1076333,34.2581 20.367,33.7858667 20.367,33.7858667 L33.3291333,12.1695667 L35.7244,12.1799 L33.3363667,26.3035 L40.5872667,26.2942 C40.5872667,26.2942 40.6647667,26.2931667 40.7019667,26.2931667 C41.3519333,26.2931667 41.8779,26.8191333 41.8779,27.4691 C41.8779,27.7326 41.7745667,27.9640667 41.6278333,28.1604 L41.6288667,28.1614333 Z M31,0 C13.8787,0 0,13.8797333 0,31 C0,48.1213 13.8787,62 31,62 C48.1202667,62 62,48.1213 62,31 C62,13.8797333 48.1202667,0 31,0 L31,0 Z" id="Fill-1"></path>
	</g>
</svg>
PK.3Yd����.bunyad-amp/assets/images/amp-js-error-icon.svg<svg width="12" height="9" viewBox="0 0 12 9" fill="none" xmlns="http://www.w3.org/2000/svg">
    <path d="M3.67502 0.958984H5.17502V5.85898C5.17502 6.35898 5.07502 6.75898 4.87502 7.05898C4.67502 7.35898 4.37503 7.65898 4.07503 7.85898C3.67503 8.05898 3.27503 8.15898 2.87503 8.15898C2.07503 8.15898 1.57503 7.95898 1.07503 7.55898C0.675025 7.15898 0.475025 6.65898 0.475025 5.95898H1.97503C1.97503 6.25898 2.07502 6.55898 2.17502 6.75898C2.27503 6.95898 2.57503 6.95898 2.87503 6.95898C3.17503 6.95898 3.37503 6.85898 3.57503 6.65898C3.77503 6.45898 3.77503 6.15898 3.77503 5.85898V0.958984H3.67502Z" fill="white" />
    <path d="M10.075 6.25937C10.075 5.95937 9.97503 5.75938 9.77503 5.65938C9.57503 5.55938 9.27502 5.35938 8.67502 5.15938C8.17502 4.95938 7.77503 4.85938 7.47503 4.65938C6.67503 4.25938 6.27503 3.65937 6.27503 2.85938C6.27503 2.45938 6.37503 2.15937 6.57503 1.85938C6.77503 1.55937 7.07503 1.35937 7.47503 1.15937C7.97503 0.959375 8.47503 0.859375 8.97503 0.859375C9.47503 0.859375 9.97502 0.959375 10.375 1.15937C10.775 1.35937 11.075 1.55937 11.275 1.95937C11.475 2.25937 11.575 2.65937 11.575 3.05937H10.075C10.075 2.75937 9.97503 2.45937 9.77503 2.25937C9.57503 2.05937 9.27502 1.95937 8.87502 1.95937C8.47502 1.95937 8.27503 2.05937 8.07503 2.15937C7.87503 2.35937 7.77503 2.45937 7.77503 2.75937C7.77503 2.95937 7.87503 3.15937 8.07503 3.35938C8.27503 3.55938 8.67503 3.65937 9.07503 3.75937C9.87503 4.05937 10.475 4.35938 10.875 4.65938C11.275 4.95938 11.475 5.45937 11.475 6.05937C11.475 6.65937 11.275 7.15937 10.775 7.45937C10.275 7.85937 9.67502 7.95937 8.87502 7.95937C8.37502 7.95937 7.87502 7.85938 7.37502 7.65938C6.97502 7.45938 6.57502 7.15938 6.37502 6.85938C6.17502 6.55937 5.97503 6.05938 5.97503 5.65938H7.47503C7.47503 6.45938 7.97502 6.85938 8.87502 6.85938C9.17502 6.85938 9.47502 6.75938 9.67502 6.65938C9.97502 6.65938 10.075 6.45937 10.075 6.25937Z" fill="white" />
</svg>
PK.3Y�sI}��*bunyad-amp/assets/images/amp-logo-gray.svg<?xml version="1.0" encoding="utf-8"?>
<svg id="logo" width="30" height="30" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 30">
	<g fill="none" fill-rule=" evenodd">
		<path fill="#FFF" d="M0 15c0 8.284 6.716 15 15 15 8.285 0 15-6.716 15-15 0-8.284-6.715-15-15-15C6.716 0 0 6.716 0 15z"></path>
		<path fill="#888888" fill-rule="nonzero" d="M13.85 24.098h-1.14l1.128-6.823-3.49.005h-.05a.57.57 0 0 1-.568-.569c0-.135.125-.363.125-.363l6.272-10.46 1.16.005-1.156 6.834 3.508-.004h.056c.314 0 .569.254.569.568 0 .128-.05.24-.121.335L13.85 24.098zM15 0C6.716 0 0 6.716 0 15c0 8.284 6.716 15 15 15 8.285 0 15-6.716 15-15 0-8.284-6.715-15-15-15z"></path>
	</g>
</svg>
PK.3Y%%*bunyad-amp/assets/images/amp-logo-icon.svg<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20">
	<path fill="#0075C2" d="M13.3 9.1l-4 6.6h-.8l.7-4.3H7c-.2 0-.4-.2-.4-.4 0-.1.1-.2.1-.2l4-6.6h.7l-.7 4.3h2.2c.2 0 .4.2.4.4.1.1 0 .2 0 .2zM10 .5C4.7.5.4 4.8.4 10c0 5.3 4.3 9.5 9.6 9.5s9.6-4.3 9.6-9.5c0-5.3-4.3-9.5-9.6-9.5z"/>
</svg>
PK.3Yb���n�nGbunyad-amp/assets/images/amp-page-fallback-wordpress-publisher-logo.png�PNG


IHDR��
y��PLTE������UUU@@@3ffUUUIII@@@99U3MMFFF@@@;;N7II3DD@@@<<<99G6CC3@@===::F77C5@@3==;;E99B7@@5>>3;D::B88@6>>5<<3:B99@77>6<<4;A39@88>7==5;A4:@39>77=6<A5:@49>38=27<6;@5:?49=38<2;@6:?59>48=37@2;?5:>59=48@3;?2:>59=58<47?3:>29=59<48?47>3:=29<58?48>4:=39=29?58>47=4:=39<28>58>47=49<39>28>57=4:<49>38>28=57<49>49>38=28=27<49>38=38=37<29>49=38=38<37>29=48=38<37>39>29=48=38<37>39=28=48<38>37=39=28<48>37=39=38<28>48=37=39<38<28=47=37=38<38=28=47=39<38>38=28=47<38>38=38=27<27<38=38=38<27<28=38=38=37<27=28=38=38<37=28=28=38<38<37=28=28<38<37=37=28=28<38=37=38=28<28=37=37=38<28<28=37=37<38<28=27=37<38<38=28=27=37<38=38=28=27<27<38=38=37<27<28=38=38<37<27=28=38<37<37=28=28=38<37<37=28=28<38<37=37=28<28<37=37=38<28<28=37=37=38<28<27=37=37<38<28=27=37<38<38=28=27<37<38=38=27<27<27<�pLS�tRNS	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~������������������������������������������������������������������������������������������������������������������������������5j�IDAT�	�Uc��eڴ��J�$&�)kd���4�}{�����TD��$��Tz-Y�՟h���n%ڧ�f�~����9s�}�y�s�M���!�B!�B!�B!�B!�B!�B!�B!�B!�B!�B!�B!�B!�B!�B!�B!�B!�B!�B!�B!�B!�B!�B!�B!�B!�B�@j���9��Y�_{K�л��|�e�?��ѭ� �B�=R�w�]g~�ú0J�.	�����?�B��Q�o����4�u��ǯ=n?!�{V�΃~w
]�u���
!�bO�ֈO��-s�9�&�B�djs����ү�B!D2T;c��L�oF�!��W�=��I�����A!��I��p��ζB!<;|�O�c���%�B��=�l]���/?y��Ӧ�|��O�/�.��F���B!�+�>���eN���~=k\	To����=���0u��>'
B!��N�6�Ѳ�duo�
M�Z�x��ﬢ�U�ZB!�0P�����Ǯ�V���q�S��V����!�B�9`�z�Y��u�S�Q�cn}}
�v�~B!�u|vվ{��VY�+��yt3!��N~�J�߸� ����9ET)y��B����J��=ґ$�z?�+U�;B!Db��S�Er��YI���B!��w§Ll��aO7v�q8�B��	mx��9)=�lc"�i�@!�(��u&4����j߰���>YB!�.5,bk>���0�
��C!�R.]��X	�7��~�
!��L��J=�s&�v{!��g�3��逽�qo��xX!��;
�l}��m�-a���B��&�g��F؋�}������B����61֎'����
���ص����ܡ�AT�G��+�B!�yZ}�X%�4�;�:�8��Q/~�݆R�����מ�kP����N���3��B��dof��:��=��^�:�+玿�gC���5c�:B!�I��X?�C�/|��u4��G��fR���1£+C!�?F���iHe������A��!Ǧ�@�Q;cQ!��g��`��'6��@绂���3ol}mf3ƶ�!�⟠闌�Cw�~v~�>
=�'��_�3jA!�>�ĵ,�xX�iv��E����.�
=u&1Ə�B!�>nH	��0h�u�a&I��5��ğYޖ �b_Vc:�+�w*4��~i���R�!cd	��!���vKXނ����߹���]��>j!����6�����(��\�)�7O
�Q��Y�o�C!�>������7x9��n�Gnd9�O�B�}O�!��Jm8i���q�G'YN��B����
��~9�t��ߢ��p�z_��<�B�}J�OY��.pp���<���r^�!����KYΜz�w��0�V��{��a9�ցB�}F���
[�&��oW4�>lU{��,j!���Nki��l�~��{�MwV����i�}c!��'dn�����r�Z�5B`��
����B�zn��F�s�|�U>:v:,���vBQ᝾�V3��F�g�����	�����!���;}�ƦB-�
��>6�͠պ� ��B빍�7�F����z�&�R���!��붅�����[���_�q�~k!�V�
��~&Ԛ�ýY��P�1L��C!D�~--
O�ڠ
��-���Ji�]!���Z�h��X(�y�{��[S�tA1-��
!�P��i�g(uY�
ᣃ�t�vZ+C!D�Su-�8JWmg��"(�ZD��!��`R��b�P�x�Ȉ��]L��BQ�<L��c���V(3�Ce@)-.�B�
�ZZl?*}6����T.�E�)BQ��.a��3�28�
gM&Tn�Ŧ�BQa��eJ�C!�qVD�/�J.-~�!�D�hq��d���8Z��
!�B�
Z<���š���Rߤ�!����)H��2VPk����cU�X����!��)�,�e;z=+���P�X�2��A!�^�?Yf�H�M�x6�ig7��w5 �b/Wy!�ll���������!�{�Q,>����
���u+-��B���Ia��Cb'ne�3:
���La[!�؋����)H�m�pr`�F�,H�B����,�K]$t�vV4%����Xf8�B쵮`�m��P�M�p·�>,S�B!�RmY&	�X�
�Q�{�eVԆB��R�,�j�#+���`.�s�yB!�J����ZH��|V8[V�Y�4!����Q��!��wX�\w.a���!�b��6�܏����	U�K�X�Q!���\�2_�!�!��n�[u~cT��B�������B"'���Y]��3��JB�wy�e�G"�dt'<x�e�B���	,�Y
��Q'xPc����B��H�7�*:��ȊhU^�f�� �b/r
�܃D�Bz�Le��B�ר��
*!��%��΃7
�dԢT!��[�aT�$Pk9+���h�\!�{���5�<�
����Qk��B���lF���.`�
�u,a�h�86�w�m��]jB[�,_ԁ�����s�8��.�W�{�I,sh���/�n<�v������h�������N�x&źoߙ�]�A�=�3F}��x)PWx��/��R��/�
��
?}�p=|��o`�$h�L�퀶���,h{���Q!�g2�����gւ�v:˜�n�R���?}��	�q̀^G�����I9�W&�LC��Z��ǟ�}˽�<��~\���W,�쭗'<t�5zݦ^*�'�e��>��Q%m�l2}���p��5��i��D�0�IW��B�dZ���"���7����3���o��7]5��Y'u�آa���	9���nrp��O�7��n��޼G����7�����ulѰZ	U�K;������M��v@�5�]O�� *���#��ya5�,�0��|�b3�M@��66��3��8�L�퀮�t=M_t���sO���i"��|�$�5@2���t��FM�����hjPˆmա�i��D�0�{��;jC��g������Iq��eT��L��v@�u,3���/:AT�Gm�B�,��Q��?�2ΫH�L�_�ͨ7��Î8��YY7�x��
�`]�o�:���]oMsY�5h:�#�>����3��R�m���ntN��#;u�Q!4�x�Qǜ��!��\��{@�3@_�ɨ���?}�c$�ٴ3��ʨ��hs�S���o�4��JYfku��q�����Q���'Ճ��R���ML��C*A}̨���JE2��N��ɨ	0��mR��g���H��p���k�d �
U/x�I�coᛮ��\�����.B�\O;۪��Œ�����A}G­Oh5
nU0L;�:B�KN��I7����ˌʃ���~>��<��΅?�3�^�k�uM���iU��N+��7�!�1)#�t?!|Ѽ�[�7��LhMO����t��љQT�����3;����΅{焩�T�}�L��[��0j|P�]ϋr�}��w/�wE����v��
�y�N�T�����}F]
7�/���
��g,�%x0�	�^�O����H�cO�w���J���4�Y�͌(m
�Z��}�c���`E5���̉#o��ߑ0�����;�+���|K��Nc�)p�:���Yޖ*p�mL��B�}ԣ���������̀^�̨��Z?���:\H>���!N`1�z��l:*i���X}�&�����3m���	����:£Fתo�{�`��v�p$�-x�.eԫp�q:�|�X/ƒ�o$ľ�m��ރ[hoQ-��1���ҽ�`�5�0�f6@�ʫQ�?\�4��½�a��T��8�B����N:<O{�W�^LbT?xЇ�6���Ž�05���F�����up�6�;�c��M �e�h'=g�hkJB�W����ƒj[�^T�F������������s'�]��3��wc]	�O��H!hj�m=!ܻ�Q�����b��N�[�е䣈�
�z�%�u\k�6V�k�cnb�m����+�u*�p�>��M:�@�1�.!��E���"\�C[Yp-����c����~���ԗi'TB�t�ށ7U
�����.�
3H� N�Fl���������<�z��� �uuJ����ٴ�
�p�aF��8
R``
�[�
�Ѝ�`��i��˨+�R�yn�dB����
,��%�>o>�B0P}	���~e����S`�Lzp:�KW΁�^����F́[�h�u�u;
n�e9�A��R-
icE��1�zq�WM������T��B7~�=�?� �LF�4�K}ic���M�[AZ�;@��ZF���� ��0���gau�L��ք��t�v���_� �ٌ�.��@u�N+*��wҷ�j�?@&�B0��m��
!̥�d�׈����0Ї�6��N��s�Sy##>�[���	p�N��w�d9�C�ԤZf�,����ܿu�t 9�l�{�@��te���8�1��\�UH����7Tɇ;���b���B04�6�W��gTk�G��@�D��Ma��s�er�[�7���[OS-W�Pim*\y�V�B�#|N�A;!���Ռ�?ĩ���3N�w���tgy5h�Ν!N�
��nI����P��72��bS
���T
�Ի�1B�:�Q9�ӟ�*o�{K`��&�3�N�.�!�$F�Ԇ[��v:�XL�'��i������B0u>���bTKę��:�Dz��Н��u:wyqNc�ypk0�&����&.��U&�T����;>�1O����k���ҹ&���V*�`��Fڸ»�M>��Mj��έO�t:��\�Y�.���_�j�L��3F�G��;��8����3���4��]V� V�:F<��Piu
��K;=a.e5-��?jt�l�+72��yS�xTe��Y6�B0�,m|�E�^wM�xE)#B��w�i���n�N��b���{��P�����pb��u�PS�?�)e�]�s5wY�}��ӽ�ӡ��F��
MWq���yF�
����v,�-��q0w�r�]�c�����3�@��ΦR�.���� \����в/�qzs�\�U���3��6�\�]����q���4ȧg�d������&#�@F�.��(�H[�S`l-J�75/|~5���]	�or<�B0֎v�@�Qe��i#��mMPޓ�%�Ը�b�(~�(��%~z�kS�y��M����+0Лn�A�(�9��q;ܪ��J�a�~��S��h���5p�v��0����é���:�a����QɌ�SP&cwɅ���LGE/v�E��V3�y�̈�5�/}=��V�*m�K[�@�$F�E����M���0��=S���R���5��nlz��T�{j�W3^�����{��{L�j�f�w3^���#��r���m^�׌J!�{�6>A��Y^͜��ӏ�ʻ���5������a������ei������X�Y��͹D��ݲ�N��81�R�@���Itk2��d�D��cDqM�u�F���t�2CciQ�\j:b�[~[m�ZJ?����{և[��گޜ0t`�t$O*�`.�6�D�,�i㼉����r��S�&�P���)�ew˅����Է�v��w˂�ndD�!b�.aԇ0p"=��ѭ�C�c!#V�8F��2�P�gz�N����U�x
��J	�)|��,����pQ��$)��gn<�6�"�J!�;�v�c�Y�߯S.o3C�G]3�+7��.��y�ȅ��l��9m�3">z�g˄�B_��t/����ѭ�б�Q]+m#�k/R��H'��LZ�����{��R&��:����Ն�R�����sv���=v|
�
�u���Kc�c3��?3"&_Dc��N�gD|�� ΋���Ӄ�`�i�v��d����*#ރk}�6F���y�[2`���C�o)������䳻3S�T	�\}���n��4��u���ܣ�������C�(�ra {��I�UFe�?1�b����w0Г��е7�#�|�873bKܪ��J?�ȃt�
&R��b*�u�/}T:�1t-e���+��O9!m�J��h�&�6��4o@:���,��ӝ©,�m�&Х?�`�,��BF�k#��,�+�A2�/�O�v(��2ᆈu�����T;&���(�8�V}`��3����jB�R&��R��{Ȳ{��7�S%6�Ɲ�m�+tkh�=j&��N�/r����,�g##�,g,���`�)�6�n�� �J�ƈ����GR�r�x�[2`$p�:�}Ψk.��jز��g�n��� t�\��{���/��d�dQ/���{��	/���v&Y���3�ߨ��hcv�3䎡��=?{�&ɯ��Q�ܕ7v����)tU�N���}C���[?��I.4��J��zv�9��yz��0�d�?_3b�Y��t�;��Y	�N�k�M��	ZLE���2\�UD�x�:����?h1Fz�vJ�9��x�O˝��I��H��wf2�i
C���_��Z3���+UBpa!m<�8uN�N1��L��ȼ���L��)�5&�v�MP�R�[fn��\��)[1�̆(S�����J;Y�M�RFB��E,�L�K]C΁���t�a8	��7�Έ�po�:@���1�N�U��r3Պ޺r�p��;��[/�:�?���`���-L��o��Q%��1	վ�&AɰJ0Q��L�?��&~�o:�T��R*�BK�4&R��))�S�T˂o�3�
b�`�i0�=x��k��Z5E�3��eS�nh;�Z~��gh�%���C�UC����nQ-�&LU(�$x�@�Po
�k����'���·��(�n��$��P�9k
��4Zn`"_�VϖP!ZF2�w�C�ש��\Lj��3�1��}��E����7�������N�kuK��-����#�+}-�B��P��++CG�˾��wm`�ʹ�d|yOO�9o-�����KJh��񱞜�}��:�Yu.<��*!���<(���V�/�f�
�ɖ3a�᧴U:>�	OOz����	.�e�ԁ�.;o�%�����r��7Xu6l�˂o&0b��XWB_�zp5�N�އ��Y�#������w����Sσ�՛V}���b���(�R��*N����i'	�:���Kh�������>:+o�7�t4�1<��*!���6�@���i'�2�<s��3��N�7:���_2��А���{��Dr����[��Rn.d"Y��<FC�J[+�҃Oa�	�n	[9,�K�y����UT˅�nԴ�&Ӣ0�*M����0Q�R*��
c��N>���g�_7��N��9w�2:�t]
<XB��U��k`�$�	B��%ig4�4�DEГr��wJ�hh�x_'M0�\hx��>�NY���F@����������ݻ�^e9��u#½�K��4��Ŏ�T�=�7�b*45�K��=a*��L�C)��F>�*ߺ�j��B�_h#�Z���}��P%sMh��<CA(�~���a��(��7���N��CJg�pVu*���ى���&��y����:��`��З���})���װ���uG�~�؞
�>�ZKh	���̫���E����j9U^ɀ�JOQ�`�m��F�Nj�Tr6\��6r���+Ŵ��7\+�J���v�Ӵ�jA����j�a$uՊ`"풵���f3N�4�<�8�p��5��f1N�r#v�#�8��Ѓ�`�q��6Z0��ՖQ���
Tˁ�ciu�a*�=/Т0Zڬ�ʽ�rc	�׆����['l���0We-�r��Ѱ��
����`�b�(N��������Q����jE0S&-n���8�&2V.
d��<������q>cݠ��8��ӽ�`�"Ƙ�X����5��|hy�;jc.�����i1ZQa�p��TXXfn�Z>�uYK�k��X��@[�i�3�:�)�J枤�%�w*Ղ���;*mh�K�TC)���p�㔶���#��3ΖZД��1���x�R�0�'�/%D����]�6�1�b�Y����<�5���JZ�n���їV}���j*l9�[C���H+���A��Tz�N�Z�m|��P%s���tث��JA8��%�>O��O�TS�ٌ'MKg6��;�˅�L�m�leyY��猸��2�u��o=X_��ҵ�P��1��k#���Rm04t�UpՖ@�˴(̀�k���xq�:*,�#?P)NZm��y0Vy+�r`"��X�nP%c�ôq̠RNj-��]0q'��`��2F�'�3^_�;5�rr��Y��
}���,�e
#�A��L��M/�A�qt�(�.e���u;#>���6�Eq�S��e�b*44]M��3��Q��� &��R>]A�eU`�S*�L��T[�.P%c��N;8��JA8:��*��a�d*�ܑ���=8�����,'R�d�j0�"�ɂO2�	��������}��t�N(��8g#���^���(e-���J�{�?���Y������F����J�p6�J�0�8�r`������
���h�W8�E� �����G�"��
w�b�pH�G�\88���D͟h���gTm�z�	Ձ���`G=�C�fC)�qnG�LF��Ã\��G=h5�Ӛj���tZf�Q��Ty�]F��a�����Z�l�S�S)��C���XUB0��6���FT
�Y�o�>~�J\���V��5��F��U.c�y0r.�����	q�db�@_Wzq�u�k�PY�8���Zƒ�T���(���,�Z{8���S�l8U>J���ʅ�׌J���*�S'P)�,�ڒ0U@�LE;���6����&��T)�s��V8��x�a濴ȅ�w�K	,�E|r-#!�:&6�����XA��B����q�(�Ri#8H]M������'h������CƷT�~4���P%�m��/)0ԊJ90�p	զ�TUB05�6~M�������T�V���J�8��e�ޗ��#]i�ko��E|2�3k?�����-�kgC��ی8�3�2xqծ��h�����7p�-
3�S�'��
����-�J>t<C�3a�R�*9p��Z��CT	�Pí�q��M� t��m�w?U��F�B���R�2��`f���^&P�#��X&>�ƈG�3U.��~�;������@]�z��Ëé�!<I����[������i1N*-��D��6��m_P%::Qi2L�I��qr)�Jz�LUB04�6J���T	BG��T����J\y��[��ȩ0Ӆera�39f�f�,��cF܂X�R���-���XN�Gb5��@Ě��	��g*�4����i�_�v�ra�bZ����TYW~I_L���-��C�b���CK��W���M`��*!�i��6�A���e:U�
��B�������j�D���9�ʅ�L�~�	|Ǩ,�d1#.@�!T��
�ݡo$�/�����Xw3�Ux2�jW��ɴ��u��W��&-
3� ��*W�?ݩ��hz�*���$����TɁ+)s��6�P%3Si��4�E� ��L����U��J��t.luf"����e�ʅ���Ȳ��è,�d
#NF�1Tz
�:Ӌ|��J�~@b�3���u=#>�'GQml�Ӣ�"~�Z+ة��S� ��|�M�ʛ��8U�e �n�����wZm�Z�(�JFN�����z���+������Rw>�NW��1L�r��[̈\�;�	�
3�0*�3��z�J�@�O�`c�.!��ۘȭ�5��“�oT*�i��-D
���s	����T�?5.��e�3�*��҂J���t��<��j�@UB0�0D�@�%T	BKZ!U@ۡT)�;y�)�:1�?��[�ȅ�3����`f1#��ub�C���z��FЭ�H�|&4
�Ne�jx3�j��Ʃ��QGPm�E���;��*A��I���	-�P%zVQ�+z�*9p)�W�=
T	�@ꇴs/��Jz>����jE�"��p�N��'w
[m�������w"{f�2"�hɨ���j3��pz1��ЭzHdz��d�xs�ނ���(��2�R�9���b*̤ҩ��A�T�Zn�J>�|J��0�O��u�J:C_UB0�$�_%h9�*A�H���՘*E�w9w
"F�m��d�jH��a���{]�X�iLj,��+#v �
�ׇ���Aq�.5C�L��j��Z�$e
�vԆR�:Z�
���v�.�U_�;�J_�o�R�:n�J>�̢RC�y�*9p+e)�އ�������v�J� �Rw�K�"ػ�;�]��M��������{�������e��1b�l����~zq#�
�K� �Ll	b�bTx��A�4Z]�L�}	�9�(̀�Ϩ�~k�ʓ�q-U��Y*���QTɁkW��Q�V@�t���������v*�]5�R{�p� b��/�`o1U���<���P�&&s�,�c#�E��3�:ҋ�י.uE�2���S̈���D�͂ҳ�(���UTk�%��
{}��:
���*%C��Tɇ��T:fFR%�U��j�C[UB�T�=ښ��T	BϕT���S��n�NA�:d�_��kT�}�p�\8�O��[�ww˂?�1���V;�^����N�kR��D�
�Ȅ7i먴�&*���;(g,�
��i��R�����"*M��+��=wR�x�A��w7����*!�9im}Q
��S%=�R�*�J�"�w
��;�s�\8x�j��C[&w˂?�d�Lj՚��A߽�b��ѝK�B�YÈ���D�]�3hu9��N�yP����u������Jis8��*��s?����aTɁ{-hctP%�'����v,U��s�.���T)����S�O΅�U�%��ʞ�U���d�70bbu��_�ց^�����Α��#Jg#N�G�S�u(<G��('u-��M�����
{��D2<N��pv	U�g�:�LUr�<��8�
���m������U��s#�.��t���X��;U��ά��4����A�znh���d���&bA{=��{z�	�ӕ�s,�*!�O�8U�D�mՑP却x1�S�f$v=���V�0��E2C��+�Q6U��%*���<��ic04P%�'M�J�u��L���*�]iT)����S.�N[��
-7,��*8Y@[oJ����r�q#^C�n����M�V`�>��q��RM�Zˆ���y����΢��q�>AbsiQ�[R�)�!e-��Q6U�g���LUr��T[MT	��A?���D&U����:CWU�`�c��K�����.:��T��a�K�Ճ�6U��C��h�8��4@�j�����b��զ!��iQ�1��S)| 90L���Uy-��FrL�R����=_S%CyTɁ�i�5�P�ϓ��7�;'�P��`$�*A�y�J5�+�*E���;�R��t��S�b:��{�pF<�X����e���P��XP�)b}��A�*��J�H��&Z�A��T���L���u!��Cr�ڡp�M�|h���*�PUr�Ń�q'�0y��3�T	B�R����4��Vm��[�����)t�NW�i���Xg���.��2#�Ѕ_g�� V�W��iT����J�9�js��g�(̀�T;
�Q��J��I6U��x*���<���i�z
�,[�T&U��҈J��-�*E�u"w	­FE���)����13{�(F<�X��dh;�n���C��g�Uk;�Z#V�W���6	L�EiCĩ��J���i�Sa��*mIE�|J��p�M�|h��Jg�PUr�EFm-L��kc�T	B˹TmiT)����K�M���'�Rˇ�`Oƈ��:��ѥLZLs��R�h�X_2"���N��U��fZ���P�Z�L���u2��C���R�dS%ZަJ��Q%�̣�ˡ��I�uhe�ˤJZ�R&��Q�vR~�.A��>L=�_Z	�8�����=�F��X���/����P��X��F=�����T;q���*$p�>D�/iQ�[c�v?���.��l��CG�B�|SyTɁ'O�Ƴ�R�d��ndR%���*�ҨR;��[�M���n�
?�G]�g�a�#^G�Nt���ѝ�0Վ�.G��ŴQ
��0��ˢ��y���#��B*�6D��z	�~��iH���6
���7S�*�ʣJ<��6~���p'�*A��E�1ЗF�"��X�݂p�v��Vݒ�o���/K�1���-�����J&�}Cc� �u���X?1�7��SL���#���#���v5b�Ъ/l���:H�eTژ{�Tɇ������L�Q%�t�����~��\ʤJ:ަRW�K�Jl<͈ <8�~R�]K˯��=�zF�A��t�2�C7V`�N�������'�oS�7b�G���P���XiQ�[WQ-��y�j���M�|h8�J�`,�*9���Ux�qp/�*Ahh��<H�J�R��Sh���Z�(�!M�v}$ݕ������I�֖n����4�1�ic�Έ��T���hQ�?���J%�Q^kZ�{�>�g$ծ��l���Y�gT	cyTɁ7ki�!�(��~�;^dR%
�R�H�JT���2AxQg����6�i��FVݒ�$Ĉ��:�=}�B7��5
��������L��a)�֥��j[i�^��(/�V}a�c��C�\F����M�|8��J��\Ur��|�x
:
�?��7�T	��TZ�iT)BB����E�]H3��“3Kh�!ՑT��R�lK5hˡ����z1��2�
3�3��!�NE9��(��;(o-
3`�O�݀�9�j�^6U���"����<��鴱:
��O���2���k�t2L�Q��RZ��c�V��7�Khh���
��㎚H�^�X�8Etv1�����p�5
�Ey�i���cTs��z�壜�hQ�
�wP��.���K�wm�B�4��Z�˦J>�T��J��BUr��ô�:
�Ն�cΨ	_t�J�fQ�uI�ʎn�׽lj��s~�59<��ܟ�1� <���
G5�����k#i�2b�Ag�B�|�W�L�7��>D����	?4S�4X��F��4�j��j(����ɴq8�'��j
a+�*�pP�e*�X
.�Q%�����P@�JC�_��f�O&U�p2�J��H=
«�in���p/��6�_I҂Q5�k:+=�n�����C#�c1m��XG2b���N�Ņ��J�P�-XТ0�n����D!��[�Tɇ���RiG��G�xs9�dBCU�MM��gƍz��[�>�끩�[&U����O��`&���0�P�D3��6�.l~�����#�lj�
�Z��hXt���4��;��F"֩�X��xX�A��P�_B��Q��^��QT+ME-�� �ʦJ>l՟O��p%�*9��
T	a�ˤJ���N�|J�GAxwy1]��T3�u�(|�>���]k5|}_�P7���%�ͧ�!(�Aڻ�.dķ�G��IAT��6�P-e�U_8x�jk�L��v#leS%vz�D�g�NUr��	�s4P%�=.�*A����>�Ci�(���n=�.]TD76�Ն�V3�ĺ�::A�`�Y@���m���Q(�g�;�n`ć��B������6��ڛ(�=-
3�`�
�LS�v'leS%jߡ�w��NUr�͑�s34P%�=.�*A�5��Z�~0�F���C�_��ֻ��������R�o1�.��Q�֜fF��M����4�9
�t��!�=����A��5��`�Q�JE�q8�^��w��ɔO����M�|��_J׀KyTɁ7��N.4P%�=.�*A�4��6~hci�(_4|���Kw�:>����d�X�
m�h���.��4h����By��A+�z�O�'�
`���h�1l}L��1�V}��s�}�dz�jO�V6U�HZ�!h���G�xӞv�ACUB��2�D"�C�}��v5��4z�Om�;SjÕ����JxLU��eF<�X���B+(s�Ӡm0�堜�d ֻ��~YL�c�� Z][7Pm"~�Ea�|G��L#��leS��s�;/��{�|��^���oZ�Σ�P@���nTYrNy���ɝ�џt�q��F���K�w��o'���_ҝ�F0b&bդ���M���$_��fԗ�rN��
��##.�_���6��a�)ն��.]h����_$S�[��Uɿ�AUr�Ms�y
���I�M�i�(��ZKW�Cp%�?��J�U��5��q6Q���)
tC��$�ք�yԵ1
���W�(bDO��#�V�S����Q�B�2�V��h9��A2
���ʦ�V��yTɁ7�i�Ih(�J{\&��i �I�GA���}[�ʬZp���;��3��^�،8�RK6��D}�P���h���^E9���`
b����R���.��
p0�j�c�e�(̀�ET��4�jS`+�>zf?x�G�xӞvFACUB��2飷�¥4z��>��n̯�Z<�oU�_�1�.bM����I��F��S��Chk��+Q�tr;bucDI|3�j#��[�7���T�V9�V/�Y�j�#����㰕M���Q%�N;�ACUB��2���p-�*%��O��F���������{g�i�Z�����b�Y�R��س�~c�"*�T��J�BB)a�5���/ڛ��f��_M��3���9�s�W�y������5Ŵ��5{��,���N҃���k�h�SK�!��P['D��F�%55F���9�v1CV�?GSm��QD�8��ja�'h��ާ�O����0l
�O6\��X
�J6bs4�dC�"��E�u�O���R�R����t��팒�5���v<k5���}U>��! ZW��n��5Da�;��&�e��N'M��̅+����F7��T{��A~�M��b��kTˆ��ź;+#vè��؜B;�C�"��E�u�/r��X�P�VR���F9��:��ҵ���]�1���5�r�L=���� 5���,�����(�B:� �+y	>I�G�Y46���T�Y@gM��稶
�4�j�`k}�``:�0�*و��3Qe-�#}�|pe�&�*PH�)�9��*wl�[�UB�<�K�>O�/&3d2L6S���5uBġ9�r��,��6�|���>:�jK�,��а�jx�F=�a8m�C�B��akc�ר���0�d#6��ιа�*k�p��N V)T)�R�o��8)�
��V��r���$|q7C~���yڮ��5D�Ð���z��+�J���EDK�͐^�Q�:�����M�0�jS���4�π��i��h3Վ���ɢ'NK�o�Q%���vZC�"��E�udLV<ף<|�B��U��!9���~����M��WНK��)JC��Գ!��P�H,d��T�_B
�PF:�h�1����f� �ZS-?'�h
tt��c?�A*+��zU4�F��0�d#6��NhXD��H���*������P�6l�>9�����Ѝ�.�Qj�_�F���A��A���t�ͥ�N�hÈs��Sj�e|HG]�B��J��N��o�]L�/���]�14�	�i�<�O#�-����*��0�d#6���:�XD��H���hcc�(�*�s��A|�6�.l��X��.�Q�lg�%�v5M��AԱ&����:�]Kg��0�QD'ŕ��|_�l�Z�kht3�<D�ג�� ?ZVP-�s:�ރ�T��w���09�
�J6b�%m|���	ב*���k�ȀR�R;6�T���iAj�6����d�#��^@=��BW�j	�?��*t�-��oP�5t�=L�1��kՆ~B���r�v�M�)�3�j/!~n��ð7�*�סۨ�4�6�*و�ژ�Qe�#Ur�W�%T��
ߤP��^`��_�W����H���iAj�;�{�!3`�)5]ms��"��ѕ�	ݍ2>���0Yʐ�ᯮT[QB���iՖҨ'�<J�y��g��{�2���Pa(|6�*وIZ	m�	���	ב*9(�:�
����VO��A"4��z���&S�D��Z�l
 ڽ��9�]Mgk�I�ϡ�:j��A::�j1�T�+-��n��Ԕ�=Qm�g�Z�����>wR�Z�kU��6�st,��F$\G��`�^Ty~I�Jl�R9H����E-=�C_*���q��	k�h�SS�	t�)�����dM��v1��2�Y-D�ΰZ��QS#h:���@S��5D�l��j8@���'�6J��Wè������XJ��H��T�A��T�>I�J�m�^9H�z#wR���!��abV��!-5����"NdY�@�l:xe|KG���Q����Σ�y�XC==��k��F�J�qp0�*�Ri
π��Q%1y�6����Tن��H��$}H�A�G
U
`o�ʁ'���j�)����Ԥo��p��$:+����g��|HM���J:Y@ij,�h����QS:��L����Q�`hM-��u/�F#^�Q�<8@��k��
��Gè���̤�ǡe%U�#�:R%a��BIo�"�*��6�ʁ'�,u\i5����RKu�+�������+L�P�q�U��F""y=�t��ZŴ�>	Fw�Y���f�u��Tjim��2ڎ��7���T*��2݂T��
�F�l�"��6΃��T�C�u�J"��Q��t�!�*���ʁ'�,5.����W��,�ʆ;�K���$��"��#Z�z�f�A'D��h�B�,��2~���֑a�����5�%����Ж��J��'�4NPe<�ʚF��0�d#mi���l�J!�#Ur`Л*y��)T)����W<�d�O�V�CŴ�V�X�e�U�y:8�jȰn�����6�A�崷&��mst]A[]at����ّ�U�M
�…g�!?�&R��G� �n��T��4�,�
��J6bqm|=۩��D�H�
��������]�+�d��_p�����d�Էp��:�z1[Ő�0�F]�AW�"�����49�j�Fn:����0�ƐY��w��	\8����3��4��2*'�2F�����aT�F,ޣ��SH�$ZG��(y&UV7B�R�R{�p�x��}�½
���X�b��T�Wc*�|���Ɛaru�m�V'Dt����mLFK�-��ng�P��t�
�H�Lg=�B�O*-G|L��48@��(�E.U>I�?�Q%1HͥZAhI�Zu$ZG�䠌�K��{-�*�*%�w-�ʁ'�ܧ7��*������}:��ۂT�OE��gX=D�]LMաk �	 b2�
�C�@ڸF���r��Ȱ.��j�tt\�@G�pc�� ��S�8@��(�� U�N�/�Q%18�6�AO��#�:R%e�O��*!F)T����W<��>c�I�f����,�
O��I�c�#�&S�5�U��6F!��Z]��TP	F#�l4LfHaE�Çt��t��)p��n*݉x�F�?p4�*��^*M�/�Q%1�H}��:՚"�:R%Q�PiN:b�B�l]ɽr�I&���4_B�;a!��|o�YO�K��y
&WRח�6�6:!�7�|m3��>����d��ȐOW�ɷp'-�NzW���a
����eT��(�w�4~x�*��v�m(=��v$�3U�@�Ǩ�V2b�F��:����'��'X�4\C�����}����#�S����lNB�������SmMo�ҡ�՟J���$:ۜ�h�����]LC��D:�π;�S�3�W��*���
���h���m�#TɆw=i�.hjK���h'P�+DK�E��I9*UDe2d<j��
a!�!��Q�B*<��]Ȱ�`2��j�T��J�h�~�Z@��:0Kg/ä?�� >>���p�L�[_R���&*������
LZn����1�dû9T�Q
�N�Z$ډT�&5�Q��"�J�G��������Ő���R*<��U-f�P�\A]K�m:�:!��-
@�t*|��Mtv.L^c�j��u���*�G{=�V&��*�w��_Q�`�=H�����TɆgG���:�j��h�P�;���I�[��Tj����X�dHI]x5��r`!�!����Z����0d>LjQ���u)U��N��K�p����_)����!�'i�pm
m�g���T�O����:�L������d�jU���$�]�v�U���ET
�wU��1I�ʿm��L����/��`!�a�ë�[i�y��N�
����y�Z@�Q��^H�硫J�5��+t�(L�aXO�˗�u\������#J��<>��*��@ǭTy�Qi�1�ѳTɆW
��6�n��0$Z7�,��T*�	��P�b҉{���L�-��shi
,d1l<DK#���&�kk:t�K�N���*��A׻��#����YK�LdHQ��`��U�E;=��TC���rUf�J�ߩ��b�"Un�W/QmK-hM���h=��V�gS��xՈJ�#&�q��`-�góy�2��^%���{��Z�,�I�6��	]Y��:���T�]Y�4F��0I�e�'��ƴ�
ަ��x�h7U�H��ޣʊthF�O`��TZ�1y�*w£�T�
�ޤ�l$Z_�����˩��5�Ro�d���21�]O+#`!�/��Gi�F�`4�Z�du�]�w��(D�-��{�Uy7�	�7�l Lz0l��;�h.�����*e�OGQ��<N�y�v^�JK�#�P�nx��-վN�����;�
�l��v;���-�iK�k��%��XˤA{xU�����,F�>^�����Ag���Aj*�	]�h�"n�ZQ-�F�`Tq'��I)�����j?��*T�	OR����
�O�3�L��qT�
P������7�S��\XC�|$�`�`���oON��0Ģ7�z	�2i0�}B��B
^�gKh�|XŐ_`6������ieu�h�躘�Q_:���;2qԂj�Ó����oZ��p��?U�T��7��
Iө6����*Óf�T
*i� $�0*U��T[�^t��D���5
�2i�^���감E��#�����O0�5LzP�7�Ui-�BD� m|]w���Og�`ғaW"�R�Px2�JS����T�H���kU
�Ru1�~��VRe$�(7�j?�����H�g��
)s���0xЏJ�")���PXˤ��dxt���J�f«�4��8�a#a����ZB�[��ٴut�E�
I0�^HG?�lC�j"��Re>��QD���*�K�̅_�Re��D�
P9|�~�
��2^<O�-M���s+l
��C��
��u8�B����),u#�e����Q?��+Y,#�E����ٔ�;�kt����"~�����7M��J:�
��%�quU�G����Ϛ�ʍ���A*,�m���J����.��B�)��r��•Ѵ�,�J�B�]T�����Z=x�K���L�Qp���f�`%�el�o�G�S�G�&u
�iE�*��(D4��h���Ѻ��:�3&C6�
���UT��tR��X���f*lo
m��j��o��I*̈́{Y%T��̣�_�`��t=����#��T;���a�ɲ�“!4	ց�,�5�<E�i�G[�͆�$�:	�ޠIgD�����uFٞ�z%t4&I+��*��aZ�^�)����E6UVTG�Ҿ�BI7�;�j�C-im��^�C��p�O1զ'��*Ŵu*��J#`cml;	.}O�G�Y?�s"�e2ʓ��I�|KY�r<y�&o�/�2$xL�R�躐�V��^��^�2F7�ц�09�agh�Nx6���3�W�2=��=E���Bw�
����Ʀ���*m�[Q��rp�\ڻ	Ղj�F�\�(����
��}�Z&�]/ޢɍ���(%]�ŷ49~��a��uj�-M�e"����Д�ϲ��h�
����x[NK-���4�I��*O!V���"�J����zm��	�&R�\Iz H��p�i�?$T����Z+i#�?�фvãs��2�0�V0Z~UX�b����^�<F[��T�cȺ��RS��(��]]SXFAe4����0�[Đ�wO��O��� ��D�ꬠ�È�5T�I��Pm#l�������/T;
nԜI�W�Kii/�i8mԄ���hgL2�G�M�?R�2i��(�vM��ZMV4�k���^�g<��l*5̀��,kuK��躀e|���h̆2�6�]gZ�1���3�f��rb�/H�������������S�N���:���/+��^tr9���[�h���6�v6V��wR��L�m9
n��I;Xˢي�pk�ԇ�eط0k���:Д��2F!�#�ׅ��;ht%����0)��!��w����1LS��+�2�]ZL������h��J����nW.����V�� m�[	�ͤ�o�@5�i�y�{��V]���c�"�a���I[��;[�u(d���fp�^�=?-`؉0�JM7C�k,�3"FS���5�%uap=���:`� Mh�'|�d9U&�����T��2�F;��^�%����x�v΀��;�h�\;��z q��Κ$�J���
o����Wt,��2�O(d�����F+l�,Z�|
\��h[��O�3�=��
R��u>�V����C�y4ȁ�t��L�3�t$�)4�1��&��C�eT����<�*9��N�Z�	���#�hod*���M;_@G�[��N^O����-NE�|N[��^�U��vU�x�64�Kuޠ�wPȤ��wL1�=�,Z*�.����r.C�-a6��ZAS�4�����54��Έ[a��Nn�ٹ�5�H�H�����4�
4��*�;���Q哊p�����c���Gǽ�������P�H���7��M{kz�Y�t��d�Q�-4�
�T��t�����ՀJ&U��k�t��q�=�Ë�g8tM�AgD���G��UF�t�"f�1�
$�8F[��4�I/����T)~��I��*ϧ¥���Wp<B%�U����tp7�f>��Zt)���H��\:8�������tV�T]hJ:�m,�
(dR%w �d̢�YPʢʺ��Ss>����1dWm�����I�ԃ�K�H-����;��h���1[_	q&�݃-`���%�I*-;n���*E��t�y2�%}D'���m:��dX���v�Ɋ������DB\A'+*���t��4�:��:�_>+
N��[�i2
�T��4T��&�@-�j�

u��v��U�=
����4h*��a�q5u���\����J:�1	f�0�n$F�6F91��Q��G�P鍶�u�$*m:�]Fg���t4������c/;�i�$�T�ޡ�N�v�3�
�Y�S�Eϝ�U�	p�n:��{�������C����Փ7voߴF*��U?�y�.}�}�OW��cPȤ�दp��,̀Zm=SN�N�9I��Q˯�˨�e�?�uF����
tMdH;�@'���h��y�e��X�b�^�S�T���8i�6�k�S��t�k�Og��O����FѮ���t��N��sA��J}���۩aF5ث�����^
mVу�]�{�,(��;��I[ESN���;v�d]C�Ȣ�����N���4���`�F�,�
��M�2dua�ԔW���>�`�̀���;˺1��e�g�W�ߧ�o�U�����Z�
p���-��շևR󹌯߳��A�;s�N�#�*?���]`��Ԑ�xXH��	0
�t��uA!���嵇�,:�X
�,��&����u̎	RK4��r�Q�8��BS�6�	����f�Vr(���q8b6�eL����Fќ�B��Ms�ic�ip�ը]�|��$�y�Z�_n+ǾR̸Z�7�5�;����p��=[���s�`g ����Q(��
+�C!�΂_g�������n��Eg�so:2&�Fo���� .�,L����
�錈)�6�^b�L�A���l���ęB�_�v,�|�`&�-xip�:(렳�L����W��ƽF,�;��:*�3��.h��}�^����_2�H�~H����wk�|貓��H����<����A�A��Z���G�b��]�]��
�L�.���/����CӰWr�v�L\BK;τ�,�R�'�/;�i
�J�u�MSV�Ҧ���V�f��RGI}h��R��ȧ����ԕ{mL����7?f'1,x�B
��� ?qp�:Z��S�q��C���G_o���gA�!w�3|�k�����������3��R����������M����qV�����u����Vo�/����X�(b����y��W?\�Oo��z녑����!Jj]�ոɳ~�D��L�:mm�7,��ϭA*�Y�(<�O>mw�_��\��m�x	����p��
Mi۸�(D\Dn���-�cҷ�VqX��a�!�*�A+��QLE\�_L�?P	z��7���|��\.<�x��L�o2�����B&#F��cLV���,F�
���1Y��Ӎaŭa��u,����WgD�CB�ܣz��HX��H�i�X?K�^�����G���C���6L.�g�GÝ�����M&L���Z=(d2���R(�wր�,�}���3�������ɣ�#��+�X@X��t�-4�ɿ�(�)���"�җ0�e$T_F�?V1,?qs�w���Vз���
�ܯ���=�x��L�o2av9�k塐ɰ����E�dh�e1��H�u�Jz������WQ��Д����t�	hJ�L�uTȧ�n��?����ZȰ���(�MEzG?<	n,�oj�,�c�/��=ݭ�x��01�N�d�³܏�J&Cfc��[s�ŏ�@GC^�>����D�}ΰ?�`�jX�M/�o��]Y�M�I^��i�EX���a�`0�W����B|u~�����%�YB�Ԇ�����k;W�W�1&#��LXH�������ɐSV� ���-Y�'�aMߦk[. �Nb�m�Po35�	Mg�\@X�"�s&4�NV������",L`XA#$����HZ�}�3o
�o�w+n����7�a��N�s6�8}�ݗ�NAL�c<LF��7��Rw
�[�A%��,�Q��%t�h\Ch��>���te�ZH�w�[zSëД����Ati4�l�0�Z@G��Q%�D�Y�}��O��>S���Ћ���&��MUX�5#����=���tu�����͈��!Cg��5,7c�5
*���J���"�*~�)�eq��PV���ԵkT]$F��M��It�_	�Ɠ��]�Y	����0��vn������2nK����}z!1�\��n��;��t���R�2�໗Qǚ��,��#�h͇�EK�W	�Â'�B�5t��N����Э�tZ�>���p%#.C�
b���M�+?	S9k�Jj
��|�t!2Yj,$u����v��#�d��#��r����;����z�-.���lhJ�4
�е9Д��S�ڰP�~HB��r�6��x�5��ࢧ,���/��[B�=2Y�bX+��TY;��p+��N���LXK��OvIE�]Έ�`�Z:*iM�wF�7t-�����T�+o1��r�����Yܫ���Wc�v�m�z��:�C��RM�v��O}��em�lą��E�**�@�A�}��e���C����4�aEG�ʋt�
MmkJn�_P�aX9�S񏸙{<��n���3����ޗ�p�C�ǎ|0�����j_B�(���,�4�r�C~f�cC�\}v�����{=�C��su�#�>=��[�<�ey�c2�m2,���N~�wЃE�a�J�%�Bյ����F��H���m*��@�#n����=�[@/:��!T���<ψl�Cn�7��RÿU�B誯g�Ζ�rr1��k�ѓ�po>U66��3��1B!�3}�C��L�S���dC
�jA��a��:�w�B���tF<K��l����t�[C�r,�ˈB��i��a�Sa%�Cڛ���GS�֯T
K�0bi�B쇮c���Ram�w�G����vT��+-w2�4!��%}��7a�Ư�u9\	,�WW���6�<�����!�b�t�F\
K
V�Χp�=�����7�`i#�U�B��TFK�m��`c��=6��h���ԇŝ!�b�5��j��qy�q\HZG��O�ʒz��:��C!���JF|�KgP�w�p*c�.$�E��R�?1/B!�c'�0b����j�B�8��8�;�6�������q�B���A/X;q�����͌��O���`�.�B��[�<F�8֎�J�M��u6c�)
�Ҷ��Ϧ�vN	#&A!���
�X}���@���5���]����z��>�+@!�~��bF�X	�[C�7���v��M��h_W���k��P!�8�J�R`��2Z�]
z.`�
�COF�̮kU2"x.�B��`,^@kWC�����ӛQ���Z�,<!�����`*�KK_@Kŝ�՗��6���	4�0	B!-r���Gi�踄�kUvӨ�j�����Bq�8���=��o7-�������?�6��ll=B! �Ѡ�l�tZO�%�P����:>���&P���'C!�e
v��F?Ѭ3�]F?g��1�"Tip)�BX�h��#T*�I���l�0�1�Tz��`(�Bh�?���P��Q���I�b�ak:}Ɛ�]�Խ�/C!ā���4��	J�2�pr��Nr���B�w!
�A!���J��rO��ip�C�'�Y�������Bq@j�
v�
�s6Ҩ��5��5��;�[;�]���Bq�:b3
{A���4��n�_���f�k\Բi��.�B�:�Ҡ�?Ԓn�c�װ���
��Ϳ���hy!�8��O�����F���f�O��,y��R��hm3!�8�u�M��)�q�*�<;w�?�N�a��Lm<B!p���hfeب8����`�g�gy6��
�hm+!�8�uΥт�sԷ,u"�Z�O'�Ɠ�`���h!���7�hM;�I�v���	���4Z�B!�Z��Q�ŰU���$s�A��)�<�	�^B��u!��_�Е,ct
l�|b7�*�>���,�B���W��y]�k0�x:TF�_�Ë�gs+C!ĿH��,cmg8h�Z-X�����^;X��4!��WI��2
o����@���RG���!��_�~��^-x3�~�.�-�(�!��B�Y�_g����]+�ry��v*�B�+���e=Y�u���5�bY�[A!ĿT�,k�pm���<����eͪ!��Z�X��;S�N����TiL�eN�B���Xւc��9��ƗN��n�XV�yB�/w�:�U2�\x�>���㓠��k����B����a�eg@߈�韒�!-���fF�ZB!�R�+f��
�/,�6�1��1�Q�B���NK%������W�2�^��%ܨ�L1�|�B!�3*Od����zgy��"������օ;�7me���S!���m����p/�]���句���}����p��o���D!���i4�т���G��t��f��rc^	��[��0g��\عQ
��1M^�
!��=�me��A�ҫ�?���Ǵkռ�AU�����dEW!��O��:M��5�~���4)y�"�B�Wu_C��1���h3%H����B�����iR<���D��{� ����/ian��Q���DӚA!�^��U�����T��ZXx�B��eܷ���i��I�M��!�B�j0������ΐŴR4��B���?���	��0�]�,����� �B��y��z� �˸ʹ�z�B��s��Ᵽ_ɧ��H�im �BX;cU��>�<�j�	��~{!�j'��ʮ�n>~t�+��*/��Ba��s����K��/IG\���my��Bg��n���o��)1�x�=n���7T�B��|����O�O>k�ğ�i�����B!\8�Mt�׬'�:�Eyh�Ժ�uc>�JG+�9B!�[�}f��y�=rS߮�6��Ir����?��7��L-�o��!�“�w�DW�7._��>�9��Y����?Vl	ҍ`�u �BĠ�=�0a��|0�B�����W�_��A!��I�A��1�6�֯.�B_����"�C��;&C!����<�S	}T8o�y� �B�S�3Gl�~{f9!���|X�a�.�W%��~O��!��U�k�|o������F<�<�B�Pͣ{
�kvSa���^}s��U �B�O*6n�Y=.�{٠���v�5�zu?��
�C!�B!�B!�B!�B!�B!�B!�B!�B!�B!�B!�B!�B!�B!�B!�B!�B!�B!�B!�B!�B!�B!�B!�B!�B!�B!�B!����m�&�gIEND�B`�PK.3Y<
%	��4bunyad-amp/assets/images/amp-toolbar-icon-broken.svg<svg width="21" height="21" viewBox="0 0 21 21" fill="none" xmlns="http://www.w3.org/2000/svg">
    <path fill-rule="evenodd" clip-rule="evenodd" d="M0.912598 10.2832C0.912598 15.7832 5.4126 20.2832 10.9126 20.2832C16.4126 20.2832 20.9126 15.7832 20.9126 10.2832C20.9126 4.7832 16.4126 0.283203 10.9126 0.283203C5.4126 0.283203 0.912598 4.7832 0.912598 10.2832Z" fill="white"/>
    <path d="M10.1126 16.3832H9.4126L10.2126 11.8832H7.9126C7.7126 11.8832 7.5126 11.6832 7.5126 11.4832C7.5126 11.3832 7.6126 11.2832 7.6126 11.2832L11.8126 4.2832H12.6126L11.8126 8.8832H14.1126C14.3126 8.8832 14.5126 9.0832 14.5126 9.2832C14.5126 9.3832 14.5126 9.4832 14.4126 9.4832L10.1126 16.3832ZM10.9126 0.283203C5.4126 0.283203 0.912598 4.7832 0.912598 10.2832C0.912598 15.7832 5.4126 20.2832 10.9126 20.2832C16.4126 20.2832 20.9126 15.7832 20.9126 10.2832C20.9126 4.7832 16.4126 0.283203 10.9126 0.283203Z" fill="#37414B"/>
    <circle cx="10.9126" cy="10.2832" r="9" stroke="#BB522E" stroke-width="2"/>
    <line x1="16.5185" y1="17.3458" x2="3.79056" y2="4.61786" stroke="#BB522E" stroke-width="2"/>
    <line x1="19.8051" y1="18.1177" x2="3.28165" y2="1.24851" stroke="white" stroke-width="2"/>
</svg>
PK.3Yׁ=PP&bunyad-amp/assets/images/amp-valid.svg<svg width="30" height="30" fill="none" xmlns="http://www.w3.org/2000/svg">
	<path d="M15 0C6.72 0 0 6.72 0 15c0 8.28 6.72 15 15 15 8.28 0 15-6.72 15-15 0-8.28-6.72-15-15-15zm0 27C8.385 27 3 21.615 3 15S8.385 3 15 3s12 5.385 12 12-5.385 12-12 12zm6.885-18.63L12 18.255l-3.885-3.87L6 16.5l6 6 12-12-2.115-2.13z" fill="#489697" />
</svg>
PK.3Yv�K�gg7bunyad-amp/assets/images/amp-validation-errors-kept.svg<svg width="21" height="21" viewBox="0 0 21 21" fill="none" xmlns="http://www.w3.org/2000/svg">
    <g clip-path="url(#clip-amp-validation-errors-kept)">
        <path d="M10.7617 2.54102C15.1617 2.54102 18.7617 6.14102 18.7617 10.541C18.7617 12.141 18.2617 13.541 17.5617 14.741L18.9617 16.241C20.0617 14.641 20.7617 12.641 20.7617 10.541C20.7617 5.04102 16.2617 0.541016 10.7617 0.541016C8.76172 0.541016 6.86172 1.14102 5.26172 2.24102L6.66172 3.74102C7.86172 2.94102 9.26172 2.54102 10.7617 2.54102Z" fill="#BB522E"/>
        <path d="M0.761719 10.541C0.761719 16.041 5.26172 20.541 10.7617 20.541C13.4617 20.541 15.8617 19.441 17.6617 17.741L3.66172 3.54102C1.86172 5.34102 0.761719 7.84102 0.761719 10.541ZM10.7617 18.541C6.36172 18.541 2.76172 14.941 2.76172 10.541C2.76172 9.04102 3.16172 7.74102 3.86172 6.54102L14.7617 17.441C13.5617 18.141 12.2617 18.541 10.7617 18.541Z" fill="#BB522E"/>
        <path d="M14.2619 9.74062C14.3619 9.74062 14.3619 9.64062 14.3619 9.54062C14.3619 9.34062 14.1619 9.14062 13.9619 9.14062H11.9619L13.5619 10.7406L14.2619 9.74062Z" fill="#BB522E"/>
        <path d="M12.4615 4.54102H11.6615L10.0615 7.14102L11.7615 8.84102L12.4615 4.54102Z" fill="#BB522E"/>
        <path d="M7.46182 11.5414C7.46182 11.5414 7.36182 11.6414 7.36182 11.7414C7.36182 11.9414 7.56182 12.1414 7.76182 12.1414H10.0618L9.26182 16.6414H9.96182L12.5618 12.5414L9.06182 8.94141L7.46182 11.5414Z" fill="#BB522E"/>
    </g>
    <defs>
        <clipPath id="clip-amp-validation-errors-kept">
            <rect width="20" height="20" fill="white" transform="translate(0.761719 0.541016)"/>
        </clipPath>
    </defs>
</svg>
PK.3Y�����2bunyad-amp/assets/images/amp-validation-errors.svg<svg width="51" height="43" viewBox="0 0 51 43" fill="none" xmlns="http://www.w3.org/2000/svg">
    <g clip-path="url('#clip-amp-validation-errors')">
        <path d="M40.1616 31.4469C40.1616 33.0469 38.8616 34.4469 37.1616 34.4469H13.1616C11.5616 34.4469 10.1616 33.1469 10.1616 31.4469V18.5469C10.1616 16.9469 11.4616 15.5469 13.1616 15.5469H37.1616C38.7616 15.5469 40.1616 16.8469 40.1616 18.5469V31.4469Z" fill="#2959E7"/>
        <path d="M37.1617 35.3465H13.1617C11.0617 35.3465 9.26172 33.6465 9.26172 31.4465V18.5465C9.26172 16.4465 10.9617 14.6465 13.1617 14.6465H37.1617C39.2617 14.6465 41.0617 16.3465 41.0617 18.5465V31.4465C40.9617 33.6465 39.2617 35.3465 37.1617 35.3465ZM13.0617 16.4465C11.9617 16.4465 10.9617 17.3465 10.9617 18.5465V31.4465C10.9617 32.5465 11.8617 33.5465 13.0617 33.5465H37.0617C38.1617 33.5465 39.1617 32.6465 39.1617 31.4465V18.5465C39.1617 17.4465 38.2617 16.4465 37.0617 16.4465H13.0617Z" fill="#2959E7"/>
        <path d="M40.1616 29.2461C40.1616 30.8461 38.8616 32.2461 37.1616 32.2461H13.1616C11.5616 32.2461 10.1616 30.9461 10.1616 29.2461V16.2461C10.1616 14.6461 11.4616 13.2461 13.1616 13.2461H37.1616C38.7616 13.2461 40.1616 14.5461 40.1616 16.2461V29.2461Z" fill="white"/>
        <path d="M37.1617 33.0457H13.1617C11.0617 33.0457 9.26172 30.8457 9.26172 28.0457V11.3457C9.26172 8.5457 10.9617 6.3457 13.1617 6.3457H37.1617C39.2617 6.3457 41.0617 8.5457 41.0617 11.3457V28.0457C40.9617 30.8457 39.2617 33.0457 37.1617 33.0457ZM13.0617 8.6457C11.9617 8.6457 10.9617 9.8457 10.9617 11.3457V28.0457C10.9617 29.5457 11.8617 30.7457 13.0617 30.7457H37.0617C38.1617 30.7457 39.1617 29.5457 39.1617 28.0457V11.3457C39.1617 9.8457 38.2617 8.6457 37.0617 8.6457H13.0617Z" fill="#2959E7"/>
        <path d="M25.1619 27.4469C20.8619 27.4469 17.4619 23.9469 17.4619 19.7469C17.4619 15.4469 20.9619 12.0469 25.1619 12.0469C29.4619 12.0469 32.8619 15.5469 32.8619 19.7469C32.8619 23.9469 29.3619 27.4469 25.1619 27.4469Z" fill="white"/>
        <path d="M25.1618 13.0473C28.8618 13.0473 31.8618 16.0473 31.8618 19.7473C31.8618 23.4473 28.8618 26.4473 25.1618 26.4473C21.4618 26.4473 18.4618 23.4473 18.4618 19.7473C18.4618 16.0473 21.4618 13.0473 25.1618 13.0473ZM25.1618 10.9473C20.3618 10.9473 16.3618 14.8473 16.3618 19.7473C16.3618 24.5473 20.2618 28.5473 25.1618 28.5473C29.9618 28.5473 33.9618 24.6473 33.9618 19.7473C33.8618 14.8473 29.9618 10.9473 25.1618 10.9473Z" fill="#2959E7"/>
        <path d="M26.2618 15.0469L25.9618 21.2469H24.1618L23.8618 15.0469H26.2618ZM26.2618 22.2469V24.4469H23.9618V22.2469H26.2618Z" fill="#2959E7"/>
        <path d="M39.0615 4.74706C39.5615 3.54706 41.1615 1.14706 43.9615 1.74706" stroke="#2459E7" stroke-width="2" stroke-linecap="round"/>
        <path d="M41.6616 6.34582C42.6616 5.94582 44.8616 5.64582 46.2616 7.84582" stroke="#2459E7" stroke-width="2" stroke-linecap="round"/>
        <path d="M10.2619 37.3457C9.86189 38.1457 9.06189 40.1457 9.16189 41.0457" stroke="#2459E7" stroke-width="2" stroke-linecap="round"/>
        <path d="M7.46162 36.4473C7.06162 36.7473 6.36162 37.2473 5.66162 37.6473" stroke="#2459E7" stroke-width="2" stroke-linecap="round"/>
        <path d="M6.26172 33.4473C5.06172 33.9473 2.56172 34.8473 1.76172 34.9473" stroke="#2459E7" stroke-width="2" stroke-linecap="round"/>
        <path d="M3.36152 40.7465C4.06152 40.7465 4.66152 40.1465 4.66152 39.4465C4.66152 38.7465 4.06152 38.1465 3.36152 38.1465C2.66152 38.1465 2.06152 38.6465 2.06152 39.4465C2.06152 40.1465 2.66152 40.7465 3.36152 40.7465Z" fill="#2459E7"/>
        <path d="M49.4616 10.8461C50.1616 10.8461 50.7616 10.2461 50.7616 9.54609C50.7616 8.84609 50.1616 8.24609 49.4616 8.24609C48.7616 8.24609 48.1616 8.84609 48.1616 9.54609C48.1616 10.2461 48.7616 10.8461 49.4616 10.8461Z" fill="#2459E7"/>
    </g>
    <defs>
        <clipPath id="clip-amp-validation-errors">
            <rect width="50" height="41.5" fill="white" transform="translate(0.761719 0.646484)"/>
        </clipPath>
    </defs>
</svg>
PK.3Y!$ kk+bunyad-amp/assets/images/amp-white-icon.svg<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="62px" height="62px" viewBox="0 0 62 62" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <g id="amp-logo-internal-site" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
        <g id="AMP-Brand-White-Icon" fill="#FFFFFF">
            <path d="M41.6288667,28.1614333 L28.6243667,49.8035667 L26.2683667,49.8035667 L28.5975,35.7016667 L21.3838,35.7109667 C21.3838,35.7109667 21.3156,35.7130333 21.2835667,35.7130333 C20.6336,35.7130333 20.1076333,35.1870667 20.1076333,34.5371 C20.1076333,34.2581 20.367,33.7858667 20.367,33.7858667 L33.3291333,12.1695667 L35.7244,12.1799 L33.3363667,26.3035 L40.5872667,26.2942 C40.5872667,26.2942 40.6647667,26.2931667 40.7019667,26.2931667 C41.3519333,26.2931667 41.8779,26.8191333 41.8779,27.4691 C41.8779,27.7326 41.7745667,27.9640667 41.6278333,28.1604 L41.6288667,28.1614333 Z M31,0 C13.8787,0 0,13.8797333 0,31 C0,48.1213 13.8787,62 31,62 C48.1202667,62 62,48.1213 62,31 C62,13.8797333 48.1202667,0 31,0 L31,0 Z" id="Fill-1"></path>
        </g>
    </g>
</svg>
PK.3Y����55&bunyad-amp/assets/images/bell-icon.svg<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 20">
	<path fill="#707070" d="M8 20c1.1 0 2-.9 2-2H6c0 1.1.9 2 2 2zm6-6V9c0-3.07-1.63-5.64-4.5-6.32V2C9.5 1.17 8.83.5 8 .5S6.5 1.17 6.5 2v.68C3.64 3.36 2 5.92 2 9v5l-2 2v1h16v-1l-2-2zm-2 1H4V9c0-2.48 1.51-4.5 4-4.5s4 2.02 4 4.5v6z"/>
</svg>
PK.3Y���ٖ�*bunyad-amp/assets/images/down-triangle.svg<svg width="22" height="12" fill="none" xmlns="http://www.w3.org/2000/svg">
	<path d="M1 2l10 8 10-8" stroke="currentColor" stroke-width="3"/>
</svg>
PK.3Y'�\��-bunyad-amp/assets/images/placeholder-icon.png�PNG


IHDR``�V�{PLTE����ٟ�tRNS@��f�IDAT8��ӻ
!�=R•BiP�P!b.��e�X�M��]�G�iqx����h"&�;��,���`���GQ�$�\Q8��o
����j�"�`�DX n�f�*�Ǟ�X�p�"X��Hy��Y���D�hD�D�y���=�2���̻a͓IEND�B`�PK.3Y��2�vivi1bunyad-amp/assets/images/reader-themes/legacy.jpg���JFIF���		

	

++&.%#%.&D5//5DNB>BN_UU_wqw���		

	

++&.%#%.&D5//5DNB>BN_UU_wqw����Xf"�����N�hR�[u�轶��lt��[sz�S����i�=[��b�س��R�@;�K�|�p},���5�!꧳nn�i�h��B�g�;n�>�_Q�?�y�+��[��PQ24�}�%��Z�0�ɬ�t�{E��6 G������K��xG�/ )�Ώ���9���@OD�F���Y�v��/-�ɎJd�Ppg�fjt=^����
}�)�:{v�����m܎�G�ë��~�Q
kj���h�>��^?A��dJ��zv-N�Q��Mk��)Z��ǖ�Z}C�nGͧiy;:L�ʻ&����,mun��=�t�>�乞oek��y�1��F�Ddž�-��^�Q��~ }C�n{���E�z��y�j�d�E(dd���>��6�E����s!�1x�1��iK�M�q����u��P�����U���W�r1�f��)�ɫtM��7z,h}C�o��cK��w;#�ڋ{�[d��Wa����
��}C�o�f��I��I�O3l͖��1��3̓.4ܺ�Z�Cx�����W�l��9��t�����f��m��4��}C�o��^��Ǜ��_�[�p[]\ޣ��5��YJ�V�b���P������=m|]���M���/���s��
6�5�uԱZP��<�5ݧ��쁖�-t����Zhɓ��]EiJ.�����;�1,%��o3Q��>���u\�9�c%+��>��6����oS��`ǥ��g+��,��-����˔����}
�^e?]��7��x����{WLH��&��bҪ}C�o���
T��Ob���;
��5�9Gq�s��6���V����köp�}_�t|���������%����UhR����k�7<��0`�g%z�^�t�����R�}C�o"�ZN�O��JRVk:�x���4�u�U}C�o�l�)�ScN8߰�i�-�C_0�Se�>��7�y�Í���V-dJf×��;�t1��ihUAZ>��7CK����5�����|���M�r�Ҕw�J@ܡ�eP�*��9�_)X�mƋ[~<surc6wƒ���.rWY�ǎN�����_�d��%���#�A���+�O���{X�=�.�u{��0�JLo�r#@��I6�Ɋ�VD9�/��d���X���f�K1��4�L�w\!M!b�!��2�>�rLaͬ˖J�F���»e~����~��<\�=�W
F�yV�~���f&D�����jy��(�.��ŵ�T�5�7�m��d]����������hsp`�m�ߒ��·u���ߊ4�J��j� l؛*�[Ui��虙p㗇-"�Uu�b�q��5[;Û�Y]ދ4���.Ӝ���L�?[�5ذ�a+I��vq���[p�J����"f����6��͕
�.�M�*=�6��}�m����5�G�e�q��v`��)vX*l�1�P1e���(r8%J��V+�d�F,�b�1e���1PRŷǖ��6\��f��N.ח�Nm{���nq9���:]��������ޏO?/Lo/V���}��:t+Z�[��
�y]���3P&�:�bs�ff�/n���39^��dE�:W~SZL�Gy��F9��,ؗ�7^�5�Lf,�7��)zv͉�ȓ�S��8K�\�M�$c
��yL.rGOW+�z��u���܈���=Lu훩��A�Τ��3�u�
�������������0��p��a�Z<��y^'Ҁ�`�H �)t�^ȐN|;�;V!7�o	�8�a]�ZZ֛D��s�Źkӥ��2Қ\��ʯ?{�]�L�t�-kFI���x��)Xob֎K޴��ZuƗ��6Z�qk�5ǓZ^��K�nZ�yͻ&���֙�=,Z��΍ol��ֵ�ŭ����W�K���"E����m9�5�+ݵ�kW9�ff���o`$cH3���UN�?��5! 16"0@P#234A`$Qap���i���~��LH���|�B$S?��~fm$jiW�<ƺ��y;oe$�̀�]6�Y�dP�5����UUY*�v��٢Ǟ��x=���_U�f.t6�Dc���*�௡y�=6���ʺ���r���U�ʳ�ܭZ�����7���r���<aG�X�ͣY�h�^g���{�s���"�`��că�f���I�)�&5�96C��������^�!!"#)"�'����YM}3B�f�u>MF�ş����y�<�x�<g�3����y�<�x�<g�3����y�<�x�<g�3����y�<�x�<g�3����y�<�x�<g�3������y�<�x�<G�#����y�<�x�<G�#����y�<�x�<G�#����y�<�x�<G�#����y�<�x�<G�#����y�<�x�<G�#��o�ԡ�L�^�����j]G�w^�J(uf������~�F���Vc��
y�:nX����|���9�����S��8��Ιٶ5*l�e�և�cmQۣh�n��Sw��zT��g����~-�?�s���֭�TF����������:f��ϵh��Nt��:)��]YcN�W��`'�����u��Z�ñVoju�R5z�'>�]˶:J�_Eū�f�k%3��GKڌ�9��3v�j�lu��mw�lZ��w�l�Vi�Cu4��Պ[A��oԔHw6�+&hJ)��Ej�t|o]�������-ӫv�+Z��^�̱iW�ʫ~Ƃ'�pe��!������^������
3����;%j��MM!�6:���b�-Wuw���~�9|����Qt�g�Of?�Eҵ텤�t�����t��U�;�_Pf�'��bi�./!W�_
~�L�~Ci#r����'�"����� ��z�]�����ڕ�iOî����di1�P��d�\|����(+\}��ʸv��50�j��+uE��!ԠJ&œ�,X��|O�s��)���W�,��&�N�fY�+Yv����C�.�<���u�伊ó�X�ͮ���d5��T��:ص3ʹwWb�3�],�Z"�E+�|
�F=�yf�x��nn�_nd(5Z`�ۥ���r�W7�I9�j*��b��@�|7��]4�ӡ\+S��%u�=���>�����.���Ys������\���Y8���U뎷���]u�aO[uQ����V��&m�E�#.�[�:��'�@��9�Y����'׽fB_����=h�i�����3�:��a��������=a�Sɕ���'��\���.~au�?0�˟�]e�|@�8�w_�x0�?0�ǟ�]e�����Ys������\���.~au�?0�˟�]e��.��@i���[��Y�����{ͭ��5�L��*���{99=��to��R�i�f���UD]t��+��
F�}|�����;�p����N��]�C�t����b�K�Ρ����G���3�Q*�b��.W�4g�5���	h���fvJ�� C3򉘘��\�v�h��|.�#_���v��EaY��T�3(}i�Z���`*ʉ��"T�W����Hӷ@*ӮԮx,d܉`�CoŶ[ͨR�QR��>��y��X[iMY���Y��;4����Խ^1�pD�&'�c�!�;s�=�l#�߀���{�؞�/���k�����4�4��gi^m1�1�Ɔ2t=��tł1���7I�/���r�cZy{���j��*�2+�Oi�!S0aw[g��\�_/e5�SHvv,mۂer�7�eI�0��:���ڴ� 2|������"��@/6\�R�'��iXF�W�$޾V�fc���.�#_�>�I���^�w�i�P�9���m��AץmW�Fm�uؗ[Q(�i�jJ(�
�uZ��G�ȧA�$��ԻI��*�3�T=*f��(��N��z�[�h��33Ɏw�@�$�LZ��v�W��o�O�=�3��pH2F������v���]F�DIU��ڳyV�p����LZ"�j�j��q_l�߅��N�t�V�f\5",��� �qD��n�%���v����_�����[ �ϼ�FrR%&陗Vb{I|�;k�w��=Q�i%��֗��/KX�GIr3i��L?v�l֘ƻ�5���4ׅ\�> ��5���gJ��	�UM>v��6�Gnx�#6I����6!�"^?9�x���";w�S�~�Q���.���Ю�L�Er�䲟(�����������k���^�+��c2�y�.�!Ƭ
�xjJü��'N���.P�|�6
&�h�-�N�ZX*$3�W($��EQ2l92�v�B�b%�b�5X�Oۀ$e5s.��\��U�1��0=���E[����,.�ˊ3�S;	��	���fb&�:�I�7��
��.�#_��t1��Q.��ދ	�p���E%�$F�O�yhZ\B�ِ_.��}�h\O:�OZ��e�ױo��=�?~eb�jƕ�j Ŧ�L̆9 ���|V�-+�7�4�@}�;yGp���д�5�d� ����8N�ϴ.%��Ð.Dr\	�>�3�g�����c����^��m
�t�����q\뵼��\D
�IW�B��؆�޻9�-��WX�5���]d�h]���&K����3ەk-�+敘R�����?2��\"���=�c�D�~Jg�`�t31%'ߓZa0Õ�Gy�F�ȳ�g�}�S2S3�����k��1���r?n��G��N��p���E]�E��k;���=ir
K�Ma�����Z��F�&�����1�"6h���t�4ŧ1�e30?x�V�[��e�}������%
!!���O�8�W�v���.Hc�h)�f"H�&^D��e��S����1��~���]�F���'��72S��Nr,CS��nM3�dz�q�a�D5������*X3
���f��l�8���WZ����PDA����m�D��ȡ\E�jW�Į�V
vgL[ҟu���ɩb�ht�Lz�<��z��.�o�
�]��AOߝ�G�n�;���fD�@��J;|�;G;|��3��υ��k��/��7
�jO�6#�NV���"�W{ڥH1V����/�	�;�IJ9UZ첟��	 �`R��n�kZ�Fxٶ�,"��
�t�LŬհ�{_OJߙ���h�*é�� ��z�VʥNhx�з5���[��M��zf�u�j��.�nv�n��n�LG?��������^	=,^Ei�����0۝/f�o׀�v!�q02��Qoͅ/1�:�d��}���9m�C��+9�jU��
�,��R�^�����͍������c����^����YMÈ�ꮻij+�ŻIRN�׽HY(ҷ�h���� c���L���&8S?a����x��Gx/���Ġ\j㹤����/�&'���MV;O�%b��4Ӂ��������p��;���_Ɍ�X�dy�3�L�
D�����ft�Pt4nhn�a�kU�����Ǝ�^�m�4���6U�����yDV�&��^Z�!]�:� ��S��q�������>��Z���y,�G���v).�}�4J����1#�ZUR�S�X$�|��c�y�<x.X�')��b-}cN��\6�����m6Im��
[^�r(>-h��7��[�l�H�۴����yOa?�����b�����x��@���_s����ERt��5)d�v�L��ߓ�����h��f� ��T��So:�Y�#��C]�+%SN����k�
�W/�w��sm0�C��XD1�A�h}���(�DL���&�J#��w4���^��6|�̗��� ���e�ATd+�Q�Θ4!��q�Ƕ!c�o6�+��%ڵ�k�y��Go�.�#_��xNt2<�&�ɯi�=�%3#ܼ󪍷�sF��h��U�7�K�iEN��:���X�mqs;�Q �0�������?nX��QG/Q+7�I�d�IRZ=3�kg�s^WK�zj5�~��I��:;Z&���P*`���n��;��/`.�T�s-j������>S��>��`ӧ�{Xs1i߄aA,��b�K=���UDų'Y8��4��i��̝?�Zd�@����0;���mx--�R�������%��G=�E�VB�Ϫ��6�B�:q��زZ�T��	��Z,̸̓_ߐd11s#�_y�����5�_��x��}�/��(n��
ǀֲʴ���~ج=oպE%²�D�;x`�0BF~!`��D
�N{�߶Ă
�����J�Kښ�k8��u�<l���
I�
����|X�VtDkAO�fxQ���G�~��O�b�����$���ԡu}���@���r�hClyO�!e"�p+���K&H��z��
���p�J�g���Dh�R$�g����T>b9��Vlj���Kz֪͞*�[�	��ɎO�����k��%5i��#�7}�*�l�pZ��vlSM�U��y�.��Q@A�g��+k��LW�[��SV��f�4O�^nd��Ä��.Z�z��^۴m�OuŪ�b/����:(������
�#�7�Է
��Tz�"�6�_9qGnv��w��?��}���W4iP��x���ΩZ�kV�QjA�!�AY���lj2����*��l�}:���lȢ�3��ĄM搵�f2�}NYr���RDl���w�b!�mW��z�f�_��B�ɚ�K�}űgq�Nl�e��LLry���?������3??���k���3Zގk�+�n��b�YX�H�M�xMk}�
�+_
z�H!!���mN�ثn/�oa�n�L�;��l�/�5X�3����߫<�)���^3�XO�
z�"_�=mm�N@u�*�`��u�H��R;��~�0��3�W��H\�Τ�S��|=ꙙ�φ�[?��Ys�Ӭ��i�|���^~Zu�?-:ӟ��i��N���Zs�ӭy�iּ���^~Zu�?-:ן��i��N��A�_���ӿ��Z��Đ*��id`;A6�^d�'�����44��s�/�VmLw����>\M�m�T�oEY
��m���C�#�a����s�~܂���;��;D���y!��>a�1�rHb{K,x `��j��ŋ�B�U<`�{v���E�r�lG����1���0���;w�[.�;ھ�L93�|�hٝL�:���w�C?G�+t�b���c�
%��X<Z�����em�i9�
þ��!X���>P�w=����y�]9a{�� �:�b��iW���M|M�Hl�ɹ��v�؆�
u|�V�k���/�-\C�iu��M�;��r�%)U����u�]n�2-�1���
º������h�D)����ZF.S3����њ��K!q�9�0��,�B͢ej�4��rWE|Ƃ�8z�e v�]9IID��ݣ��}�G��ոve�K7l,,�݆؄m�Mt
Gn�o&�u��]��%z,�f�x=F��w-�j��ͺ��,����n��J�Yk��#�l�=�n�‹sI��;;����_�j��Է�[�VV�����4ح���7�
3I�Ymk���7�s��iVnu�T�tln>H`j۷���OV�`�N��c}Ȝ�[W�nX8z��&H[��!�_�`ih�E��}�\�Q8Wt�F�|�:d���,�E��^Xلfd��5�#. b?��c+>��3#5�bNq�fH���jY+>�Z���Y�X�8hS��9��;�T?�xX�g���	9�M�5B0�`$!��8�l�t!@4-e��X2i�xSS���Q���W�]6e�y�D�Nq�<�.�U}A�V|��':%B��999�f|��SyW �Gg�y]�q�tn6�Nq�'�1���0r "�:֫�w�u|>>f�(8�(��9�C�!�ߍr�l�����1=�yߑ1?���]ԗ>Q��x�LLw��K�٨,ծ,�!�?nw�^���P�H��ԋuj�x���<��1;J�_���|bd�
yWF,[mi�x)Uu�����YC���&'�j�c`{�4��)�mw*U��&#�Q?���>�<���!�~��u���v�fEp^U��kڌ��P��[�x��X��PG���̱Q=�}=�Y�g�}f��Wĺ���=�(�t��-v�eFx�^�li��!� �.�����.&�P�*=I�k#h�d�2��vl_u��0/1WAs�x4��f�g�'��n�d~�~t��¡~�U6_���hG'"��"ȿJ)=a�I��5�x�4k^7X��a$��ugΎ&�E����f��
ĺN6}����<MN֥E�c�G�x����ʻf�hg!T�YB��кu/�k�Z`�'�q�C7��q�=��b��/\M���[�����gU�E�{L�Ҭ���q仺��W�:���yN���X5��Xr�F���Y[r�w�b�XV�X�mMwgU��ۇK�fZ:�N�\5f�(Y�7��E���sb�m|jbh�~~��+f���*�:�ZX¶i߱��A3z��YO��<ó�e��JOf�]b'7Z��=BE�ƛ����wE����Ш�/���M�D��5�&�H�r��y~<��t��w�J��N��fy��eP�"�};s�Ӭ�9����+1�S+��SX�������h\�|�o�O>��m3Vu5<��,k8��6aP٥T��R<��NBT��/�U��ˡl�O�x�'2��çX�	%fPSPշ'=�'d�B}0����d��ə�^�r�?L��g��j����c�>o۴DDG虈��@�(�]�um��|����%���B�Z�C�s�q�AW*֖�J}~�:��x�,�	��:ւ&'���#�p������J����?	Wx��U�eCn�0J\��ۿ;�;�;�ʶ�,ٷX��+Wx�K�e�U��Qۿ]++�k95����Ϸp�ju!��ڴp�Dh�ºtmhҳZ7 #�W%�U�c6�w.�FDҳi�B�[\AK��X����DL���vj�X���r���m�^�TZ�y�gJ�i�)�]���Ml�1̼�*�1���	^C�����6Q��ӷ~W���Z9VS�U��W��|^���t�:u�F�/�#A�I�sra�6�{+��k)��Ci��ITT�eSb�d]9rs�"A��4@,v=��	�p"=�~��~r#3?�DDgg]��۳\�x�Y�>wN�+4Cu����m�yJ���k���{ul]&�r��6��*���nnw���b�E6V׻j�x��=B�=�S��_��P�k��F=��wܒoծ��$����%7����7�]��z��ĺr���f^{D�ߋL�p��y����$`���k��l7���{��\����|�J%Vrs��œ�dҖШ�)��1(�\�S#��1���W��s�e��V�Z>�@��>n�z��}f��~�dA{�I,7�_�u��Ԁ����	Ʋ;r���A���f�X%���Er��Y&WE�NUuH�&��Nj��9
+r�-�rpY�33%��Q�L/���130Ҙ��簹�.{��簹�.{��簹�.{��簹�.{��簹�.{~��;��W�?�;��R���]���$��XZ�o�e[�nN��az&�������4�%*��$ �t�T��M�]A�r��;�������]�(��C$3����=v���]�z���o��|����=v���]�z���o��|����=v���K����.{��簹�.{��簹�.{��簹�.{��簹�.{��簹�.{��簹�.{��簹�.{��簹�.{��簹�.{��簹�.{��簹�/�����rBLڠ��ȠE�Z�M����M�ٮoeq"";ԀH�M���a߅�H��F�K#b��}����K5�[~j�+V�	CӬ�O����K{�f�����عS<�R�e֦v���ǿ����Z�����u��5�P�9�{Vu޷��-Y��HK���R3�Pmjƾǂ��կ���qR�L<Wf��,V/]KT;,-
��o��H!1A"Qa2q���#BT�� 0@R���PSr���3C`b��$Dp���	?���j9�"r(A���ߗ��S��{m@$��_���Y��h��}�z�M.�SꦡY{2�zD\J��<F4�2�=؏KƃM�io�M���Z�TGH�/""�.1��CK�ףN������LjV�G�j5�3(/rH�U�o�MdX�"/`a5����e�L�tv�Ϩ<ֻ>a���x���Y����
DV)5q��%{?�3g�R�r;��I���p���[fP�����.�d�I����i8w�N��H����;�����!Ӏ�$f!,A�iJY5@BI30��;w��p)l0*YnG{ڦH�H�����B<�ּ͗�i��a��=��0��.����L�X��:�m�������#�ma��ܭR7_�~�?D�U7U,H_`�SI�$���'��4�����¤rKdIbw}���y�$��i��,��oeH��%l�Z��R5��[���R8*IR�	�j$�nI7$�Ԁ�E���>c�jM,��XRD%~o��ـ���(
��(
��(
��(
��(
��(
��(
��(
��(
��(
��(
�>q+as�$�
�5�u�����4�V�((B�@٩�:�%������bjy�N���l� ^�U3+�a>�ϕk���Eh�_���A�Z�F<��R��0"a���S�tϩ:u"$��u�~3d��":ը�"�Y�*��3�%�.�P�
�ƙ�F@�D.nA<�_	]o��.?G��Z�6�!�Ȧ_h�Ԏ�u�8�/�T��4X���ˀ{Z�`����apR�R��
>�E�K#��V�Z5�v�ծ�FL)q��W5o,<Q��X���Qh"h�x��3(^���W����^�Hˤ�,ڰ8	�j�
���3��Cn�Qi�S�UX�I��(
Եi�Y�I����0+R�@��@.�rQt(G[�Wh���-�bG��'U���?k>�e����P��k
�I�it�`E�ƪ�0�L���I"�˵ʈ3��B�v�h�D��'�!EW�-Z��N�uKH��:A.5�:� X]ȊB/�DB֮a�C0g$'��<H��ݟ[�H���2*��V�Z���.{K���.L��0z�F�Ņehog
@7#�Xh\Y��2��"�rp.W�z�ƚ���y볡�Xԟ�A7�V�%Еe0d���1�1h�e�9+��D5�,Ӂ�"�k���r.��»'O�U��"�t9��O��(�b;��X�a��+k�a�|���Z(�ӡR��».%��H��J��Bea�-vl3L�(r,�.+����(��%h�[��y��KZ���	��;m��ʴ1.�t),�w�M�5�L�0��,RQ��-�@��-�:�]/,��׭CX�Lx���o���1� ڻrn2!��ߡT�I�2��}b��Z�(,�	�c`)�t��˗�H���[�c�
�LȊ��� <
�7|(b<���&�llK^��GP�|A�~�:	p2a}Ž��\T��~��a�ߥ8dnD~�KEt��=I�;��ǥ!A����D�ƅ��bA���d��]�U�^��
�41!i7$����?l.�+�T@&f���.�s����]�r��@`z��	���89&0[���%h����B�	^Kcj9".r�`�9���Ć̬������͊g��D���
j9���S0w��Z��5#,��ȫ�}ZV"eV�Wl�x
�*%U�&RU��'R�|�B#bIU	k%���J����S�"�̐�+J8t�²�c�B���kf�[劖%V�qzP20�)Wg��D��+N�‚ʈ,���:t�]�nU��Z�f`<0��Wm����s{�%v����]�7���WlO��xP�J��?��j_w�ڙ���QX�.�v��)gc��
T�������si��"5v��	p��p�J�����3�!IQ<����f_w�ڛ��+����;|������M���Y!������R�FT�
���!k�d��.��55ۓ{�%v����]�7���WmM���s{�%v����]�3{�]�3���Wm����S{�%v����]�7���WmM���s{�%v����]�7���Wm����s{�%v����Z�4�yԹl�@�}:�0����/}*�Eq�ԧ�������1�R�-�F��=/Q�0Dh
?:����1�4vN-��ފ�QF��sy�����!����T�5��e�D�-ִ��X�_�?pf��H��c�m��L�ell[n�$�O%��C�W 
�Z�<@�"=��ܲ��E��2+T���/��7���.gkT��-{��!�IBK���	�e;
����X�	n��AU�����6"���_��?U��O���
�I굖��C�i��Ԗ`	P�սi��^Kf	ꢤf>$ޡ/#!z'�UB��G���*�Z>Q��g�*�lN��ŗ}�kS�D,0���d�5b@P6���n�$5�!�4���#��{7SS,\flI��ۊ�C�B�|
��yC�_���_Q<�;�p�

����c�d�X�3@n*b������>v������o��:��L����FY��[m�jҘ��aFF*��6�)V����-�ň��A�A��bp���B9gfg:T���u�2)sd^v�x�g$�2�o*�`�0�+��q�a*?��T�X�
:�LcӠ
 �B�^�X�X�U�=Pk�e
����T��&��G�z@���
��܍�M��ɸ�<��)��
���Kx�gi�trVB�kj5�'���"��9�>�a�c:��H���S��"��b�dRyy_�3���	������Tq�4��=7bͻ7�Tō�#�L}@�d���GOR;1[nf܀C�N���r�S1S�0O��@�Vab�-����H�P�D�.@��6��Ɯ�,d�Rz�U�6K��֩K��?C��Z%Ր�]��(��Ӳ̬w��n*�3�`�aC�-���s����a���=w�R�ر޵%��-�\�8lTPq��v��&�����i
۳��,`[lz��֥U�`��8�-���$%9�o�|�v�;d\/��D=�1F���9zM�� ��`�$ӕf���M@lA����hl�*|o����}<�mP�U<�X�$
���´�`K���,�����q%�w��N�����<��3y���(?%w��J�`�F�&�4�z��r�H$l�[�M�k��=%yw�V���F���A�2��A�E�۝��� _�@������}�S���#�h��_`l�T�$�/�S����E��*5p�R�.v_[+�!?eGSZ7yL����V���w�+lh��!I�"Ň�Q��=�[ȚC�[*�6.�rE��e�ʍ��Ѱ�:�܆p6{����'��{lE��(�;n�Hڅm�Z�Å�	�${����\bf-�z�����(�J�H�� z�.¯��ȓv��>����B�[�-l�Z���G�u?�>����Ai9Ct裩:nh����5�����@���\��/���T��o<��S]y�Wa�i����v�D$�A�����K�6�
ؒzP��b1W#���\ؒ@۸�ׯM�U�B�A����,t�K�PRI�xH��|�$`)�,R��f�j6��@��S�$r�A�O�u?�>��O��Gx\X�`r b�lh�QJE��
L���4H�+�U�1�lv�Xo`u`qsEM�&�h�@KM���k�LBF;	&�&�|��Ț&�"h��%�ͽ7���l‘K�װ�sz�� 
t�l��&�k�����y�0�~�?���(E���!��)�@�Q�6��R�UnW�"�,K
a��R��@�S3)�z�����c�=D�O�l�Ko?*���S�7�V�I'�$ૅ[�~{_���I��y�h�R'e��l*&{s�R�z�>�q�^f��09�c9?Ƈ���
r�}��$������?��S�����J�F��q�H�d��>cjմŢk�Ý-��j��Q��>$�,�kT%T�xԪ�[d
vb*fT-�v#aM�_|y�T[��VI�N���,��?�V��
����j�do�7�!ָ�;�z
aE�$�r��XT���l,�+OÊ7$^��
�z�5�U�ǜx�ݏ�4�qa���xץ!q��Χ���Y�ޔ�rV!m�J�*Vq�s���G-�E�N�P�)�_ݧ��n:޴�&�̷���mݢH'��p�+���O�rE ��$�0.r.�/Ag�-�Ğ�Vv(��}���Af���ZT1�fp��1.����I�]H^xԣ�B�`��y�����5��H�>��Z�2쐲�Z܁$�1�f$3��ܪB�Z��u�[�����}?v���N�����[��T��9�ۛ� P�G2�O���T���:֝�V�q�V�E�x�TD�saIg͉��oұ�ݼ踈���V�"��P*D,�A\�Zo���0����^cl��zj��p�moi��~ar������� c��t�S��,9�������S��O���"i�2�A����F(�����`k�n���N,>5e=6�.��Z�,�{R�l�[xP��R��o-�2��ar}�*\2���jTL����΀mB���T�Yb�YKa�x��w�$��CA�F���e�����k�-�����I�� �[��[���#��sw,��i�]���ޖ�9�h�����@����S��O����q�P����yV��Q#�5�(���T��R��wk�	��Ռw�P�a���8��)��{E	6�6�]�&����9R�;�VڦrxJnd{�j�4ŋ������o:����@{z�=w��t^�
g�77 _�	�p��CZ��T�Y��%�/��ٽ�_.
�8f6Q~�Q`X+2��]��O��AE�it�##-�Aq�e�#S6E2����N�7���؎��Q*�z
�Fŝ�'��JI+!|S��[��*�կj���ME���9oa�z���6m���'Cs~d�MDV���07صC1p�V뵇����̞����ǛPSl��்+Ϫm�z9F��g���H��ŗ$K7AnlEOr�e�PBT%���ex��M�,9�6���y�
?]��O����s�o��4�$!����Z��#��R�q8�V>&�c�/�o����h�
vR	�ʒ2�=+^��&31nN���H�F�0�g���*Fn�7 hۥ.﵀��1XZ��#���=�\@R7cΦ*�r%����j�čƲ��ڧ2N%������6�@gԔ!xv���GP��`-֐���/S=Hl�#Wry~���M�ғP/���}�T��Xx���:��N��
V��+RA�B��@ݚ��ܐ��Вy�׊�'�$V�Dd��/��o{ۥ#�f��KTF7�1��
5ٛry�4	U6aP�a�-�����؛V�dc./�*�
j#X������\&"#q�J��c��J�)�ES�T�5�h�@�l�0������U[��1�/ީ`��QX�������ك�c^?��}���_��O��A)��Wȳ-%߆YA#�J�E��p�2�O� U�Ak����r���~�S8;�(Hs'�Z�>��NLw5�[m��|�^{��{h�@A,,�^bÐ��۠���0���X�_`�!ՁR9�+R�-�E��B��1�2��J����~��y�[Yv�AD��!��2*E��*
����b�0����\�d�Χ���$Q�A&N��•a�HpY��O]�Sg@m{�O����Jd��;ܚ�)���&��Q���&=�|����}��\�M��h9P}sa˭F��� <�d���#k����b|zҸXu���ܤ7cjj�yQ���׼�2�)#�1��L�(Al����@�����f���/�u?�>��U�� 0d��X�̾�R�J�[����aKD%$�	�5��!*Y��M�TiN�̥�Q�{w�����1��}��Q֤���7k ��*�`�
݃_�j����ž�Z�㹿�C2��t۟R*�<F��YήrF�A�N[�y��?�w�J�Tj̀[*�1FDŽ�XV�ɩv�@��y��:c�c�Χ���B�ў�̓f���C�
)
�����H(�c��ndZyZbbH�!�i]�������<�Hd2�6=��T0	 f���zӉo+�B2V�\�j�5gfE�Pe��P�!�{��c �QsQnv�PR���7RĊ�ED����z-��Q����zc�Rf,��H#�*g2��Ý���[�GJ�@�u�L�Ğ��E;3Z�͇�y�0�t	:D�c B���z�Ð��:V�QH
�&BW���Q��i��[�+����p%E
��(s�v|I�wc*0Z�I�=�d@�ZKͿ&P��9�ea��I
z�:I�$L+F����L���G]�9�+���Wg'�J���іt��12mZa �ĉ�T�g+��Z�!�����J[��R�8�6y��v��:8�T����]���+�Sߥvb{��O~�ّ��ˏ��WfG�һ2?~��q��J���We�a+��0��q��J��%v\��.?�	]����xS��\�l�H����$�V8�]��s���t��Y��X֖P_Y&�������~DS�xޒB�,qG)X"�i����)�0;^�c�}�&V�8�#k0� -�ƖG������G`[�i�t�64�h���˜m�~T�z`m����L76�
`
�L9_�0���A#�,�l�rk���ژ��iʋ����d�\���k^�o�z���1�H�ȸ*J��0�0$S
a@�T-��F��̡�6���ƢsJE��Z�s�L?A��I�x��s�I_0PV�pHq�+"��>KҴ�#�����m��֊2�4���l⑜�
4��&�B�������
ң,`�h��-�]4����͖�H�iuQ*H�qiH��
�]իA��CK�u��@�m�ht�`���'��P�ĬF��dD5�?:w����� �oj҆�i4pF{��f�䎊զ��S�ᔞ��Z�^g��5J�@��6'��]����1��'Q h����#	@�4H��r:���th��k�$ǽP�ڔG3����r�]W����A���V��+ؼ�$Dm��a�gV��@3A~�#*�č"�z�G�Bh�I�Z�a�Y�ʎ���~"�*�#qj�M¨6���T�	�E�k!g��O�#�-�3"�u"Ah�q�dm�G3�zX��OB��[I�P��F�(\�+	$3	W�t��Z(\˦ҤnX�Y�h�'k�JY�r&��l:�+O{7W�^I�:X�V� �e���)�p*�߳��H�K]�]/�C��O.�6�P����֢!�i���p���rkO���
)�h��,�`����i"g���\d�%��ɍi�)��$��cr�@@evϭAn�ռ��Atue1�x�ִ��M#ì�"�7(�$E��ڴi>e�2�����
M�f��Y���8bH̓#��+J&�95�R�c���֌O^-�ݯ��h��܍���
.�$F�ԕ�Í���,bh�2BW�Hl"ₖ[��ZT$PMg#8��ÚV�^�M\�˨bA�8R�*n��%H�9m�./`{��{h��4g(&d����mBGڰi�����H�<���%�(XC�mz�2O�kp� p�C##��ڴQ�����+��n��ۚ֎7� ���U�����i��]t�5|�����W��EhRD��.�\I�1�٭*
Q�P�fp�o{u�V�x#K�����w(�`�]q��i�M�E���M����F��.�FwK��X�Z%x�A�Ԗy�|f%H�waj�9�Awr��R���[}j����OyEC�I$6��*F��6��A"���HH��
�n`���E�}R��
t�a�ǭi�����1"�/�)]�ɳ-�T
��6�,mZd�æ�̖���F|
���&mDP�i	R%C%��Z�M']<���#�칰&��&i�H�!*D�Z�l-lMD�G�I�#|�tK�MP�a�0N$�8��k\5h��Ǯ�L\Jr"XÆ��ڴ|8� ��$�.ˁ��nlkH�&�K��e��\1
�Zѣ8�K��)�C���in�N�P�%�p���Y ҍX��_Jؐv>���tݧ)I��G��m�ʴ���i.3(FV�a�Pu��T9u��	��ӎ�}�n�`s������H%O���*�y�w�3.�j��AEuDk]A�8�ҧv9#�I��}�y��GB��D�F6*mִ��,K�߼�n�kL��񼛞��l_�C�iW&��Z�73
�6;TC�1�b�]H�T
�\$#k';V�]��c����
Ÿ M@�L���ķ����2;��̞��/���-+JXl1-1ZH��$$
��#t]�-,qj\��e.�r,V��kҎB�^��x֍on{�{�ɢ���r�X�*��7(��E!���N�ۄR�rڡW$���ܼ~��E�V�P��2Z�)���<�J�w,78��K��'qj[7Eo ŷ�75��β��g9H��;�Zu%�e����oЯCZdL\�F2n�Zӭ�Gss��?�Ze
[�8����֍8\��|xC|?�Zq�̓3\�Ȁ*��V��$n�V��.C�o�^�B9��� �/bE�"���[^&ܓ�;���J�1�TI��zң	�	TŮ9\���0dI	��x�*� V�4\"�إ�� ��+�żP�S�\�x��8e�+mЍ�w�Yl/v�cAvc�QE8UE,��Q�4��A���DQ��Ƣce"�B�\����F�A$
�䭖��ǭ�A�Y�/�.�Z7@I��7�DR4�
�T"��#�J�e������6�����`B�{����h�����2����7#��(�
n@��:�K�����!m��ޑ�b����DZ��U�	 Պ���
U��-<�9lHC	 � ����VV�Ng�T��-����U�%�U�م��h���G
K��VJ�X���F��~��]bi���W�����ւ��:@�1�O���P����XB�(�R0�&��։˫�6@_����kR^7��"w�<5er3y0;V���rb%@9��V�bǴg�5p
�,,��7+H�9����G~���w5N�},��ڙ�)��bnw޴ʑ�0�`~�P�n´�,)�I[��|K6=��!��]4I�@��V���Ū�S$�3m��1*&��$�4�YԘ��X�m����I�+�~5���;VMC�R�fF�E�J�>�<G�B���X�[�V�$�`����"sny]kJ�.�@�RQIqĿx;�-�hc0�k��#�v��m`v=Ȩ��/�ً
d���Q#\��Ϝ�\��c��ѐ�4ږvw�{Kq�դC}�ڡ p	I (l<r5�IL��t�:��1/����>̓�L��">̇��5����B8F[:Ȋ��>���^�����!�/ýZH�O���T8���&�s&���o��N�8�Le���#{V�)f�@�P�%2F����֙u���#�	����$K&�Q�8*$Y��6�kJ��c�,��N��+��
f��\Y.%�Y��65Z=.�A�`8Ri�a��.uC�tp�\��E7��n}kL�Juz�3+-�=@l?ԂEh#�΂(��$L�F�]�x�(��q5p7B7�9���a�P�;�Ľ�7����~֨b��$� �V�XT"&�S:8����@��]NB�=��_��J,�@��Edž��g��e3��R15j�W�Cv%Y'�c�hZH�H��FZnw6��h"C4>���֌�v-�i���W�JP��z�cz��a;��8�Xd�Zգ�(��pw��lK��ޭ@$tҾ��،T����Q�B$`1�0���J�g��*$eFTW�[x�vt�ϧ��"
�
I#�&��E:c,X7~FCf@�t���UI�Vl�!�#nmP�H���d��
��=?i���rR���{oR�rǤ��ך�) �V�4iCs�B��ƴ�Dz�;;�(૆8�(���H]�Ϟ(_�`KTK�y�E����,�f�o��i{�n��g�Vb
�t����8�r2�0V��v�Sȉ$��QOu��XHe�;>)$C)P��]�V�*H�Z#�͋ơ�b{֚�(��Ĭ�6���-�kJ�>�U�!��*\�>AM#E�Y�VVS��ʩ�9�#"i{R��K��9�z�ֈG�����e�Ÿ�խ&�5��t15����i�Mlzb�M��o:ј�X�.I6l�0;[!��i�Y��4��M0rK6S�4�U�1j����Gؒ?�yP[��:hb��]X�ռ����ګjɉI`F�Aā��ڔ��ly��K�LZ6�RE��ѣ(�Hl�aØ��ǣR��?ŮkI½�Q�Ae�+M�p��k���ס��6CH�#bh�t�k4�%�@fI����2w�7�)�U*c#T�H�T�%����r��*�#'QtYM�������2	�aPX��"Y����"7��*��5��;�n�|UzQ+<E�1�B�դ�G&U��)�56�ZpST�gRM����8�4���.��ŀ�B�@��$ك��>F��XD!�nQI!O���Y���b�	6=@�@�#VT��1+�B9��4
n��~�2ځ�,�V��;��ږ!��w���9b����Q�$Z&��,H��b��rl�{�|�H�6M�8�}z֙�2��+#��[I&�!y��yy�ZuW�]Q���ۑ�֜f�$�A"����ӎ�>��͸�g���֕
���kql�{�;T��&c�o$b���Z�fX�^�Q+9]���*�<́�� t-Ԋ�!�
X��^K����&}�
$V���,+N#�������n�����4�����ʓIJ*���M!|T�T��t��BMȠ��ܙÕqlAA{�.n|�����^���yQ�gGt���K^�Ƒ�f�\#�%ˡ�>�v��q�>������<j����ؚ
(34D��n^@�Q�f��qي�1�!�%�9`I��[����l:��>��>��ɒ`X�{��чt〼<�$0;�X�DN�O(��Z�u
؝�hѢ*CA4q�֔p߭��2PJ����m�B^4��LLZ���m�/xT���y%WQt(AKy��E��p�Q—Lķ�-�Πy5&6B�D	-����n��TI�2i�;)�J�=K���j�a�(�N^B����|ԁ��M��iCO茉��@�^���4�2ɦ�Rv��V��R���d��!Yy9�:Р+?h:����1ܮ�δ�k4��d��P#�9Z0�j�;)e�
HYyy��Zy��t�w�4u,E�?<�f��Y(gF=��\�S�Ӭ2��X�!׾� |I"����ȲH�9^=�*�����)u6�[{J�����D�ٌ���6B3�Z1Ë���5uW,l�F�jO�������o��n}k@�����8�P}\�؏fUi��g��s�j�r�e�&�Aa�Q(�*�³[�+Fe�Q�]<�3(�,�H�����PB�N5S칭1S�m?]7���6V���Z2�������-4���=m׭qX����JN��$�P��'�b���:*+)qb-�J2�\)Kch�5�C�s�F�p��5��5���7�l�ڴ������;��:0�ʴ+Z��D@T�J��v�]��o�D�m _{����ԱI4�u�1㐸]�L�	\2L��*�XEh��������X@In��P/���H��yɆiS��"5�$�ߺ+@
i���r]n�]�J����$�̤��7�\kK$i�2J�\d�I%��=kC�2�\$ɋ�Ё�Z��"a��,$���{Wf����m�lLgo]>�h�=6��b{����n�ƴA�6����"���EBY�B��Î����A$���q&n�b��եa&�=��&� �
� �T�R�����!���
���A�29Y����g�h� ]X�x�l/ʴ/��CB�!���5��ƭ�Ge�2Krl,.�ա�7�ij��5j���(.M�@؃j���=K�1�6"	p��Ʌ�j��H]�w�x2;P3�`X�yN\`���r�:����wr�I-�aj�-�P�����K��E�^o3�(%�rLg�	ާeV�#X�;"�x	oR���8G`���X؂:T<��nr`Yc%����@l��n8g��j��$3��Hv<ִ�QĠ�]�Ӝ����<�n��6yGꜯ}�O���t*�,f9?^Lw"�ɦ�C/y�q�HV������$�ٶY��07� mQen���fC��h;���H.�FR����0*���H���;�@AY�u!�#�3^�z֟ՎX׾�$���i\E��oY���T2H�����f�dw 6$2[��ޡ�9��-fjY
�J���T3�<<P�y��)N�%�-�#bK\�J�"C��M�oM
�F�R@�[aom#�៻B��|���=A���>%ŹT3�b�P�����U�����x��
�opA�����p�0I>u$�C��.����M8	x�2m�B��%r�1.� G|Wٽ4��rJ��vȊ�^!VPn.��$
���2# ���O"<*`�Kݓ%$=�9�S�r|ʜ����T��J��M���!z#b�k��~��;
����P���_��/���~u�?:���B�Ρ��P���_��/���~u�?:���B�Ρ��P���_��/��nmso�?p����G��|�i��F�!8�{��0g����� �A���K΢�㉵*06x�}��R,�䌃&=ە��
8r��X
�om��Ժ�{E4N�D����F� +V$��B1�t0��-��9��?��P�.)��#քN��f���jP���N2�s����.� K��?){�k~�����e��p����J�1�Zԧ����Ow�kR��֥=��J{��Z��ֵ)��jS�Zԧ����Ow�kR��֥=��J{��Z��ֵ)��jS�Zԧ����Ow�kR�����%�G��/���~u�?:���B�Ρ��P���_��/���~u�?:���B�Ρ��P���_��/���~u�?:���B�Ρ��P���_��/���~u�?:���B�Ρ��P���_��/���~u�?:���B�Ρ��P���_��/���~u�?:���B��<��&�E
Ȓ�E[��4e�i�ō�j��J	�<�N�Q�34j���[�#�6�ɭT!@�%ŀ�RH�P��C+)�A�Vo�I�K�n��bh^]6�hغ���!%SP���e��/%�'��|�:C
v�Z�">���wF�	�'�R	�r.�j[�?���.��;FBV&�)凓�Y��d��<6�i
5������ū�O���8�i�	f�֞WԞ���K�Q/��l@%��Z������bF"���R�3�د��&iE�?�e�H-�U�K7'DQV�Fw0pPt�kZ��4ݱ��0bC����{.�nw:A��c�3!%���2X~%�fub9�ooCbA��?��dX�`]�@x���ɽϝ.��<�T�U�6���7�iO�V�)-s��[���E�w"9�f�x��(�+'��⍈�FT��./_KI�G`Y��D"�q.�;d�K��R����5!1Ac� Q2@a"0S#`���3Ppq���?�Mo��d֖��\d|7ĭx��2\S�Ճ�n���o����Ud�Q�K�?
��ϙ��8��j��~��{?��s�ڵ�������)�iq�]U/��Ĵ�պ�9����=W�I>/�{t;����7�C����{t;����7�C����{t;����7�C����{t;����7�C����{t;����7�C����{t;����7�C���3ӛj2����^膞��n9o��˜�b��)��˕X�丣b^�ӓ<�}��i�W���fʇlM�I,�)f�6�I�&�O*�f�F�'+e*���~��+\F�
��aRT������/�cq�,$X�ĹW�~��&�EI[tW:#�<�e��`i�u�S�~[�g�l�EP�=K�3�
�������u��X��'o��(�#v�ř�Nc�%,,z��͡l��"��V׸�|�O(n��Q�2���FK�����.(J��I��K�I5�i�4��&�')��k�^)���I"�������8zt��(���Ye4ȶZd�QP�#<�#m�-�ɂ�'�~�5sC�����ZwI�gdf�"�ݐڼ�I
K��ġ�Ux�T3$CKjC����Q��q%!)V�&�
</8%����i�cw�߫I^�$+�l���G2�ɤ츨5�Ȏ���8f���c�oץ��8�e��,��$g�d^�,�b��-:{P-<K�08�~�d��U�!�I�
M3̗��⑴'G�$y�#�4�כ�!k�rD�%/ci�ˑ��7풴k����xMF�7������1�/k�,�}��ö�O:�#ՋRKM+U��
G���Y���r=i:��I깪ي�����8	!1"AQT�� aq#@�023B`��Pdp��?���!A����ocMz�p7�֛�;Ex�����1�V�TQ�څ�����RQ�/��P��^�xp$��b`Dt��.�U�5C(�3cd>���13�x�!�h�gEdNP9��k��hh$��tw3K���Z	d�@_U�O:
pq.q	�g�S��l��{<��Og�����|u=�Vώ������y[>:��+g�S��l��{<��Og�����|u=�Vώ������y[>:��+g�S��l��{<��Og������?�vy[>:��+g�S��<�	ͨ�%�x�?�<9�)�*T
�剁(8)y��$�U��l����f,3t+S9j�qF�4k�E�iȩ
B�&�!HR�:��)�Anb~{�Y�ǚ-
qs� ]9�u����38�i��󁀆��(�Oq���9����-D�A稉DO���~�E���m�f��$�X�\U��S���w�jq�7���	��nLp@�[�$�u"��㔨i6��c�s�7Q���uP���.7irx�b�Bx��%�HM&F<����I����!8B��0ۜ�/3h���BA��)��NȫdQ�B}8n�d�j�	,�-d�Zl������L�(Vn$��e�
���)�cS��Lf�2�У-M�S�A�ˆy7�%b.#�UC��;Ή���Ҡ��̢�� ��ċC�I�'$i�J�$�7S���C�
��	L�I�Z��A��E�|�!ihyp`?%S
d�s�ژ�����)����ʜ&!
���<JFH�����Uwa��𨺳�l{�� )'����GGV9�GJ;��Mk��Ò~���
��˲T�or�H��O4�s�n��)?�Q��:��¤��.+u�,�'0;����P�p?t�ZټsTÞe�b�
W̩)M�7URE7%T��a��Cy㒦��q!R��״�[ s��ָS�X�Lq
���Mx{�kAB��������I^B��M��Ӽ�	��ai�U���ܸ�׺�_�:�@8Z�
�\�T�&�)�F������u�@��	��E��l��Q-"�<zUb,UJ�hÍ3H`�-����-T�����I��{u=�킍��rZ2Q` 	+�o��ȕ�"�a,&L�:52d�O�)<ɑ�M�)�aϿ�v�I�It�Pc2�Р(
��(
?�Wz��9�Z�����;�\A���F������
�~e6��~$^����<�E��&������H$�Bm8���bE��U:!�q��/����PK.3Yq	9�D�D7bunyad-amp/assets/images/reader-themes/twentyeleven.jpg���JFIF���		

	

++&.%#%.&D5//5DNB>BN_UU_wqw���		

	

++&.%#%.&D5//5DNB>BN_UU_wqw����X"�����ƀ��������k��*rkp�WL[O��x�ɭ���ENMn�ɭ��}8/��u����`"�&�y�%7|����y�ENMn��I"�E.��o���:�f*rkv�gm2λi��c:��j�ي���S�[�*rKv���_�Nj��y�.��5���~�16ͻ>Y�O�z�osm�|��}��{��ϡ_�/
뾢:3�7�����?7��]�KZ��|�˾(�����]O?��I5��o�}����ޚ��_��O5yي��A
��,_r;7�K���m/��pZ�_����o�z���m~�g�F<�>�_�����r���~W��=G??����=l6�μ����E�~o��yAM�_�>1����熂��?�}?���ޯ�zo�j���~_��?%�Ϙ�\q>����ߏ5�*�B����T�U��=���0�5��n�s��Z��<����ϥ�>+�ުZ�^Lܽ��5^_�N��?}�X���g�E,~�94pW�jƽQ�s��<���z�z��:��D��;�.k!��Ly˘M����u����ǯO�}��ɽ��Vy�˸%�=G�[`ERMn�ɭ��V�95�"�&�T���Z���K��o�m]}��8�7�ENMn䯏N�n���$����v�����9���95����"�&�T�������]���O�,Y�9m��I�%�Y;QS�[�M��H����97���ENMn�k�7�9G6�k����uuo95���m��
m���$�lO�,�h�ɭ�;mw�v�i�5�k�ENMn�6؎lch�ɮ��2����S�[���hf��Ir��f�~n��QS�[���~yb��R�I!�0��T�����L�.6�V�a�L�95��E$r�<O��)��.��"�&�V������*rkv��95�"�&�pc��9s�=��9��-vc��95�Lg]��	�ƹ�]����"�&�qC�ܝp�c�:K���N����dT����SA�&s��sA��T���d��"�&�T������ݨ9����S�[��Ͷ�ä��e�*rkv�d`cm7�"*rkw$L�,rcx��$y�<��-�H�ɭո�M���0�9���)���T�������S�[���� ENMn��8��S�[�yٶ��`"�&�T�������֒�:�[ 
�~�u�t���������"��ֵ�pid�W���A�����mi�6�G��^k[���i޼�ty��y����M�y��_"gF�C;L��MS2 	�����V�`ܥ����ӷ���_\�����ǩ�������x_��ٽ&�ݺ�5����ur�zn�3��ҋ�!�]�;��r��c=j�fx����?��1 2!"1@A#05B$4Q%P������n�V�[�n�V�[�n�V�[�n�V�[�n�V�[�n�V�[�n�V�[�n�v'����n���k�_:��ξu��4�
؞c�O�S���`�+�����O��7by��5���޽�޽����<�ᅢv'����ՠ���U�t�^�b8}j�6S��b�����/ui��$�X�FY�\
^�c1�S����6h�iw�\����7by�[�7���a6�#�x� �0[i	�A��[9Ɓf���s���n���f��2���
�O�9zHCE�ȍj�af��^���O1�d���R	�_��+�+�FrҀk�hN�ʕ�n�\�\��\�\��RȬ}��f�R���ȭ�W"��2W*�2{P9��O1�V��+b��lJص�h���4���WV��k�=�+�+�("��$�h�1!���[9�4�(�1��OW�n����
؞c���ၮA\��o���H�R[�AZ~��.��L�Q�r)���ʭz�l��Wqʁƣ�[�9?�65�2��}q'�����K�uV��>�j�*�� ���U�}8�CY��0�u(�o���|3��2�x�Z�����H���t�t@�S���X��<�*�\�6S_���DaM&�F�Z�0�a�9�S���7�0ٖJ����wؗWZ�>��ju�j>َ��q��_�j�.w���.�%Z�d���
?֣XN��;*V��Z��\K\-,15\jWѲ�v���V3�;�#����V���6>'Q�ֵ�&;X�Mo�~Wk�Ni�8���,I����J���o��
��mк��m!/㫕�)Z[&��ƅ
ե���j�S�pĠC��5d�P����F�%�Q���5ıj��+����#B��<S�h���\��?�&ۍ?�*3�O�Թɣ�����<���%9&�R��صi���;?��d��ȝ��;d�9�[%�ct0���F��QDE_�[��ծ�؋]\m����F���L�'�՘5]���)�V`����`��U�����+F�mjL:�kO_��C����O iJ1mJ�[M:W�J��zt�5�SA��qu-��h��la�pSJ�〽kp��)�O�MKNkz��[y8���k�e���KV6���9���+��[6�&ۨ(�u�[�W"SL���Y>�%d�e�k]R�r]�Ki6�lu46����y�$����gQ-l���%�4s9�J�a�j���=��iZe�m軶�����M�eim�q�����n9��a�X��{Э3�^Zd�!c�d��%M'�ř�wh{/�0Y\�?��k�Mt�H�C�2ݬgK�}���cR������[�)�X6��r�~�kd{�9-�!������u�����n4�;�kɶ�D����$��*�i���S�'��$}]��(�WZգ��io��Z�RZ��a��b������������A�sdл�"�/75c�P5m��<Kha�	�OhR!ǬM+EV�("�"�J�p��V�0-໓��Yv���L�x�`�
�Kq5�Z9E�VZ���Zj��iY<�Os8%H�g���r�b���.�����n
-�a���vk?�i�u,x�MqB�t�5i�t�4��Ȭ�N����>����7Uh�1��i�,q��U�M��Q����{�d:����%}�
�G�Ů�]�}mz�dڧ5̵Εg{��3O��\s���ќ
N޺���?~��������cr�-���thݑ�tٞ�?s��˜.gӧ�ޖ��$���K}����[��"�y�IPi�d�QXK,j�{	aM���%T��s� 2�!jX���G�;.�k�U����ŝ���]w���/)���5%��~?����^�׷,����k�%��lrRK"x-�����l�P�U]��g�ͯ.Y�7_y_���$y����v}����?g����}����'��jϥ��8��g�k[X�aZ6OM�H���ImB�O�15t6+&����d�v�u'��+�3a��W\6���|�cb���YZ��8[3Y��k5��f�Z/�K>�aY���Sgw�]�tWu���Gw]�tWu�]�Ew]�tWu���[_6��Wu�]�Ew]�twu�]�Ew]�tWu�]�Ew]�tWu�]�Ew]�tWu�Zܦ�h[�<�`V`V`V`V`V`V`V`V`V`V`V`V`V`V`V8�<�ᅢv'��{�y�r��)�op�[��Eo��O1���݉�?}��<Ǭ�w.�w�Yy.6����[]�}Vh���.�sPԚ�̦Q.�O������K9}R�.x�u+ɮ��v��R4R�F�N�������Vz���G=��8���F��_�5�E��B���'�n���),��㬄�-&�`��m'O|nk+V�H��l�i-���Uhbx�M��6J�u�!ocklŢ[;e��CPF���Y�$U�Y�*;H���>�D|vIe��7by�[�J�o��_����5�C թ��=^;��G뿃v'���KV�i���	4�Y:2�B�����o뿃v'����n����
؞c��P󓊍�ݵ���I�4�|�'��|���&m˸��j�.�4^O�rOJӖ�8�G�erO�2M�+JYr9���Ͽ$�)ߔ2���
؞cך<�FU

	��c�X�ʘcBd4$F�'����x��r��Bh�+�1��L\��̍��	�	�W"{R���"|�ʞ�e@�h�]\dS�7by�S����L.8#�Gg4!@��X�Oz�L�*Nk����iZ�޸֌C�\)\Cr�6�ЅC\k�с
,j��µĻp8�#��g�
؞c���PYG�3.Z�9	$sM�d�^l��$3���_�ĆQ��N�+)(k��b&�:���Q���NG�ɦ���}�;[��
9�3m�"�s���<ǯ8�Fx��0�5Ο�<y��3ʛwW:g��t��dۺ�Wi N��Fd�2�SL��玺��rePpy�8�208Yw'�۱��<ǩE5�qG\i�Q�6�X�D9�c"�}��tbB1\i�+�2
Кᎂ ���Q�/�:*��(ibEb�1�v?�v'��q1�1�C�)o��n�90�f��0�q\o�hd���''4c�s��&�)�vP)VP���Ti l��Q+�\LUl��M�P_l���.+d�)3�n��O1�Ӆ$SN$����qF�}���Q��i��΢�}֌�+�:�$s�%���f�θl�@�3�uu
~��Ƭ�{�I�uuab$bE	|�	�⇿��7by�]��kbg5�+S�Ɣ@���mC�G�#;TP��&1ET�㢪~�.1AV�%A�Q��"�P�	�s�
؞cաo}�2dSBI$p549e$B�9h�6i"a�<�F)YZ�i�bł�"������@9<Ns�����9���Tq8���+�"#�;�W�n���fR��4�m8���Y�]A�5ԀqF�
I�6��F�q��O�݉�;0;0=0+��U���n����
؞c�Hِ�?��+:+��{-�q\����υV�9b����T.}�V����j9K`�`�!3f�1�H�KNF�IX�
����@��~�W�n���i�nQE��ep
>�Օ5�^Ց[�8��|s�%@$�C@�ޛ�M��v�$�T�W�{P �oG�n�����L����Ǿ�j��<+\Ci��"Ї
�kp~�04m�捰94ІfjX$�-��m+���o�ƅNhA�hhA��Eء}_���z�[$P��k��
#��璤��ks����i5�]��e�V�0�GrhI0/,�WY5��;ѕ���?�D凿{�7by��?��O1���݉�?}��<Ǯ+��b�X�V+��b�X�V+��b�X�V+��݉�?}��<ǫM*�
�w��/s4h�e���o,��+�cÁs!d�H���`��\A+Iɟ��O1�s����Y��݉�=Z-Ě0+�*������"�$��8Z0e����
�pd{���H�9<��8�v�ۅ���٣aE$;k�Є����݉�=O8$�Yks�Z�&�!���BEe���0cA�g|�SBIr��.�+�S�A���6��i�Y�h�'ƹ%��9��
�+|���3�
؞c����~��7by�V��K���^��~��F�����z�G��Ta��&������݉�="3��u��\�oU3�gؽYS��7~��7by���O1���݉�?}�Oby�؞C�_���Ћ�c_��~�k�n�j<�!i�K}�j��|��b�V���j��[ʟ�Z��S�.�����A!1AQa"q����� 02BR��@PS�`r��#$b��3c�p��	?���y/%众��^K�y/%众��^K�y/%众��^K�y/%众�䛿
(P�G�7��O7���bc�AC��l����'�uTr�˘K��f��b/1�q8@��c�ʷ�n�&T}*�9\mc��	�kS�o�j��t��mt�ql���8�6��2p�Ÿ'=�Kc�F;B�����Is����{��
8��X��Fr�H�ZdAhA�C���D*ḜB��8��	�&�D��Y�S
n��8Z��9؉�U��4�<�~Tځ��:�	���~�Ϧ�EV���_�6�1�k�8.D�y1�8�\�5�Kk��q�דk��F�,�MW�yns<S��v���v��
�c��B�ԕ*}���Y�>�-�r���A3A��� �	� ��!tPM�z����֗:��=��%�~�@Lw���;��%1�t��T�;�U�W���٫�G�l��?4��j4u�̎��䘳O��릸�5���c��%J�뺉���U'��ܓ�5ף�L�ʅ<#���s��}V�1�a,9�L�7u��5��S�&�l]Cݸ��E��1�-����G�}~�![��mh��%s��z!�vDux%f٦|�`3hoM;9{�N�����E�
G�-b�Ъ�Z!ǧ�&�LXK54;�W3�ԝ�56p<B�#KE���Z7���?A�pj`����*��U�-sM�������V��Zu�����?*�iڴ�\},�Op��؏$�$�r�^g
�\E�,dhx!�%<�tԏ�wZ<���z8`���Љh1�W�0w�/�op���!|�Y����OAr��hs`3�s1�žS��5�E\�W��!�z�}��ѣ�
:�����ե��O�����<P�<�2A�@Uv�+w)��tič�KqNQ0����9��|��D$I�D6�7cc�Ή���ޏ��`}�m?��/�l��QY��'K��:D;{�ރ��aU��u�?p:(�Á ���u4�'Q?�U#!�
n��R�����F���
�'�އh}m�Yp�?U�K�䕮��>�la(��*ʪ|�����GA���ٽTdd�n:\=��q�S��Y?��2:�DI�c� �����Fi:��q#M�Z�8/���x��|�sJ�v��(|ڷ�b5sA�:^[
�6Ys��T�<��^���~����	�<��v8&D��<��T�o���荮*

Ӣ.�H<�B�~'��ֈF���7�J�	�� �8jq:;�#��v��'��S�tXsU$�ag�f^(�ƞ�������S�)Ȧu�%�[���Š���y�ʃ���[�Ԩ]��Xv*$8�Rn�h��5��JZ[�;s҄�*Eål�t�#������D�(�S9�	���.}i�?H�_�I2�7\�̍:SZܢ\�xS[��B��A�5�Dw�K���X�7E��Q��r2�>g��.����Y��:��8H��i��|�n�����8=�8D�
㣭�ap�cM.��vDؘ�F,�b�ǯ��C�~��&7��Vu�:j���|�Uc�߲2I�}H���Ww`�*��eS!w~ª@O�en�Cȸ6�2O�D�[���@��P�8G�ڪ�bޢ��`��G=wx*�}���3������C�~��ߞ�3���ڪ�2��l���]�.�l��U]�}�"s�Tk��ֹ��eV,i��-fg�����}�(�CI�$u��hp�	�x�G�)��c�D_$�꘦�Ǔr�g7��k�[C�ڶ�k�*�3�挾�8�&H�g��_��$�0���z��-��q�g��r���l�;��z��-��q�g��r���l�;��z��Tk%�����z��-��q�g��?e������w�l�;��z��-��q�g��r���z��-��q�g��r���z��-��qʍ@9L�H�B � � � � � � ���@~��h���L�x�hfg�)B'����ɱԣ�,���[9�yJ��{`��"��׷e��I:H���t)�6u��ԶF�l��0�2�d�@+�ϳ�cp�Q"uU,X�����Ԡ(LW�5	Ƌc�3L�M��Mr�FHR��[C�N��6��1`��v�#�TC��:�����uA<�%�*�Z©�����N |Kg�[I�NUj�a�r���|��7��r$L*L�횳�2��M�N���
t�)��'W��F3�,���.��RU�&d���}a������*Cߍ�Ϳ�Q�]�3;�;�-#�sL��KNP�.�8�dg;*��3x.ϵR�s&�9Hc���X��,A�S�h��T��񿋷�Wc��I$�L�ʦ�x�3�ܣ$��s�$��૆2��L�ُ����j�5�&�_�(2�_��x�ƙʡU��#R�|s��#��V�I�c��AU*6��ʇ��Kpj7"�vwbi�{^wZ�P��N�qw�?�='Sd�tg�J	�#�%�Ё�g���D�#�)��M��Yb�B}��2z�j�{\xt&�&�f�)ݢ���|wh���������NFaFW7�9Ѳ1l��䜎��'#�'"�Y��x��#���F]h"P�f��N�*VE̩�Q7[�h�h�9S�'��=���=T�)�0�W
J7v��:���)�OGN�tr�+�S������D�m�Vp��貝r��t
c�eԁ��LBH^O�X���{��|)Ec
GR(��0�R`±1�6bT惧�n�"9J�GIM"T����jj�
�g�MA53A��PB��
!�}�S�X�6�\&�"��8d�\S��x�@�h�#�<�9��;��D�]�tf�7���N��(�Q�j�����\����M���P7C�(j��:�IBo	���
�)��&P:x�?D�sd3��@�Oji�O�!5��nb�+z&�CA��ޔ 3^��)�ЀL�Y�а���22��hMКhQ+#�/�d�~I�Q�rl'i�O�'L��}����DnN�DJz1�3�#M��NJ��:L��r�(�xZ�m�w�����4\�|a7�m�k�M�jjn��n�w�@@!��MB'�.MM��3�M�$f���P��;SgU0Sn�9�&��|����3�L��Sr�w&�vP�慧�:}�"�g��Eh���Q�f�Gњ�rD(�ّ�����4��F��B�adӵ�dc�;��yF��#�Mˎ�ӳ��g���:�Hħg:oG%��&��邙r%S�B�Q��x��W�1��k[D�>i�}д�@�Y&܏܏o���M@^|�?"���D�Q(�J%�D�Q(�J%�D�Q(�J%�k1@�@��%R�w{��ҩ�C�#�4�rA���g��'ȗg������_�IT�H�|���q�"}��A����9����L��;rv���g�2�eR:�}UD�uO3�; S��&S���z?T���{͓|
���I�HY���bu��7L�7|�2��M��M��ɺBlH:!d�t&܉�L��)�ԅ�xC~���$/�%�p��v�&8J6�����)�(L~��kG8�2Ջ���"GZ�7�:�r�m���Op&��,�����]�v�ƛ��[Ԇ��$�%��#�<��B��͎��bte�y�"Zob7[��C�;S��t�8�ݞ�I��"�����*!1AQaq�� ��@�0���P��?��(���N���N���N���N���N���N���N���N���N���N���N���N���N���N���A/���q��UZ�W7�+�ŕ�����esx���X��ᯏS���H�u�WXB��u�X�n�l%҄�L�"�JΟ��|z�Ow��B�2�%Ur�^e���y���/��_+���>���O����ڙ�]I.��<�j���cdi�U�ȃz�P+��y��-����܊o��/�ܯ/�[hF�1�*��aj�>����!A�ޚO�Ow�QͶ_��1)^�O��V#r�w�%��yeB�X�]X�uu������\/*C����D)<��C�����	Zi���Ow��`5fx\4%�����u�qG{��ST�s0*7�N�EC�"��s(l.�J"�w�u��|3�D-V����0�؛���h��@�k��aJ�ȩHdHR��x��R֝0�@n��2lYF��
��9�ֱ���,��>��ʷc3;M���Q0p�,�x"���qV�qEk�σI&�"��
,��w0%]o:�5�E���u�b����%*��)J*g�k�ůZ���@G��c];@
�������}�3��t�H6_
R4G�ۊgY�!J�4��OTV�(G�0j�h;�lb�*�=����D�zsݡd5X|�Ir@̲��a�T����A%6\�#!���z��7[�iw� ���ڂ�jt�~�p�%�i,�7D^]n�pU��ņW,L�"��p��/�E�y}>��;��OR�*�sz��V�SG�c�&���C>�jg����b�껁�?���Yd�	�Y���-�qk�wV>�+�p|�0T�ęIN�=��,��R)p�O�=mvi5�YcõX1[��Ք}L)��	�dٰ<.@��N	gʿ�`}�� �q�.t,�΢r������.�2�d�ߓ�;Å�#5nZ���d-��� �bm6�|s�u���b^��ĭˈ?�/�Ѱ��C:�/��\M����*f�_����J\�E��(�)�fG;#y��3	۸S�q�����"�Z����"bC�-���JG9J�Q��;.��%˄ O
!�#�Lg���6�e*@�U��lt�n�9���+�@)\ڈ�İ�3���'�7.�^Qp 28AʾIDV��&��:E�%r	��|�N�"MF��~c�F��!LU�hp gO��� ��|��(��L��ņh��͗��|[^���q
Zz�Y�m顨�~�F�+^��A�La�A7*;���u	���HQ(o�Lt�Jj���y�0�a]t�N4ދ�������#�wԸ�$������,YH�X+��G�p�Ȏ��T�v_��UA�zP�wL�=>�U�s�`�(�+�9�Nj��Y�|���,�����
ʥ7I�5����c���>b:+�!sԶ[�"q-Ke��H#��0��ȕ�͐�DG���d{�eg�d7����h؎��C�/�^͑�=х����!�?�Aghѩ6'2
Ul����S�vL��8��B�6afm,(Ș�SD	��Dc�����p�X(�NU	�%%X��C0Ȣ���Ȋ����쬱Z��(ⱴ=�*�J7,�nxR:3�]K��
o���N�JJ�eʡ�L�.����N>�m��Z|�/�,�f�R?<�Bu@ۃ��#�DQ��R_$-�����-��D;e�!�J��hDc�>����#���<]!+o�����	6ZM��ޅ,D�%�J����E`�O��+o+j��*sV���?ټ␅���VK�.78>֡b��w��	�j�#�r��܉�
�sa��!�CD�CWTU��e�ds�dhO����l춁Vj�W�Ps�䬐m����_`�_�.��!�>���� cH��܁�
�jsNPc�p���
��YV4R�-���8���M�w���B��]T	Z��n�i�Ŏ-����EP"���MМ%2"��Gb�id�k��J�������?I�1�|d]��L�
'��V�ՋB�[mJ�Y��Sz�\�#�YW��U�#�b�<���bl��U�dH�U�\��������1r����1�:Y�m�
�
�Ue��-琅M"�>�W��S���g��	�=f�;��Z�W�xtDL�M��}�w�DZ��U�0۝���+�D�4Sw��-�i��څp�\�(ҥE춉�JdA�干�[5‚���_}�A7��y��z��s�-VR�V#��QB
N�Kq�R�r'5�� �g��@�6rZ
#.�R�2���Sy{��cw=t��w�.PB��6[�-͖��se����nl�65쾁!h�ͱ�؟�?S���r�|�=�C�?�~��/��3�‚*WN�bP�O���K��}����_����?�~��/���ؿS��b�O�_����	;*��gA:	�N�t���'A:	�N�t���'A:	�N�t���'A:	�N�t���k��?�{�&��|�Ѻ@!�&_6�e���\���/H#�
#�{��>���O���F���37C�^�%0'?ꍌdLK�x�l:˓EVԕ��:�mAG��D���B��[b
����3>�Y�D�ȭ�jqP�D�+���)f`IR�6`�%�[�oڳ�<>��	�"]^��ۙ��Ow�U����Kv��B�,�.nes�0�ޛ�^̼]Ŝ��"�/��j�x�pqfĨw�*�H�cz<=���
�x�pk9A�y�y��gt��i�mŖ����f���?l^��EC�	�{�Se��c�~&|h���~p��S���٫������;y�	V���J��Z%,������ﲬL@����AC��)Nb���~�Q���g1���=O����S��?�{�(�ХP���f�dI��T�#��n:�q�9�%���KN��]ŞkP�S�a]w��6	�YS+�ҹr�<�s��Uئ�׼T�7vs�e��v��'K�N�(y�͇G����JaXԪ�|����67�Q�%��6ۥ�9YY-�fn~QMj1Qt߉w� �����i&q��/S����vQq��S��o!�Do�kY��Q.`����>9F��iIʊU85�嵇���%����E#cd2t|L�z�Ƶm
�����|zw��c�z�(�4�z{h��V�&E"hE��U�"X%��q�TL�2� W6n��gǩ�~IJ�@���e�D98�]"�_�,���{��XWK��)9	�+�v�o����6;�~)UWŻ��J��M$H�������[��^�Vɽ��`Z�R��.��u�{�P,���啬qWÔ�
Js/ʪ��&�T���\lR��E����βU�
��>���b-*!�Ĭ�ޕ�$CieY�f���QZ� �
�P�4 V�.��SN_ ��	M�.6oC��sWi�|c�lq|�U3
�(@�V��t��NJ{�b"�憶"��^x��O͆j 6Q����yp��,-��訽��/�@�I�W�ݑ�sƯh�BB�G�J��>���$�!�R6�u�,�R��b&�X�K�D\6�a�	NDÁ�5�18�\�1��	�����d�nk�EݣLj`rԮ�II�-k��͘�0ʨѬ�o�^���.�����{���T�����K���Yc���i!R�EPJi��>�����nL�����J/�8�!Z��&�vm7�&�����F/�)~���0t6"�w3�Ԏ\�9eܵ�Ĩ1��ᩨlƢ�ݽ������Y��
����i�h���/nV��(�7�l[.�}$�t��iA�G�>����QYK�(4����]P�
Ktt~��It�IYɢPV���1X%!�r�0e#����2W��uEY��l
�9�����9Q�E�@������]:K���$Z�[�C��M�yq5\���1d�g�?�z@�5���r��r�W�e���E{w�������Ow�$��Z��2*��,K��b�ƭu`E6�}�{"���f�*B��fUx�[�sF�1�p2��)ZКE��5xa�ڊ��

wA
��3r���fŏ�@ԌkHM�0�if�pE#���L���s�E-R�R�*�,�]��t���K�� 0V��D8�����[��?2u�&v�JZ��"�����o/d��+�kk��e9�D�UV�� ���Z���D�T�qK(���N���"(*MY��U,�/��f����|9�F�tV�=�Մ�j�%�k�d���?>���qDSe��ı�pa��O�tۍW��ێ��;繖Dm�'�_
ॅ���m?H�)��Β�H�C���e1�.xٶ]�`��\�O&������h�ܹ��3<m&�X�r/
EN��p��m���sk��C+�n��	�[.��a[^F�G�S
ߞQQ�ɫ0�0"�w^/��}=ߗ[��u��P?��64���D<@�.Q��xd��YE�X�+�+m��]��e�ʙ���q�ʶK ���>����	E�(�]�p�^ @��@�*�w�/S��?�{�"����X)In�^C
-��j�������P�i�YBvc����0�z���<��+�v^�,��uj�8���Y`�R�â5��L�(L_]��Ǽ%�j��p�t��x{�(����˪9Cv0�LM�s~�[�d�"�.�$�֠�o��Ƣ�@�Z�QpJCp��r�`]
�>����VN���U�1�c�8L x�0�&jc�4��PDE����4��`��%�\���p;8�0����e�@X�31�#��16	���զ�/p�6*�pT��,
���@�R����>����}���hsYnr[/�v����^2�Gd�cd��k�h�m�Yؿ@�CL:���R@��\��8#�mܼ%�%��*�o�%F��M`�@�c������
�VP��B1;	}s{��#ZcF]L��'8Ӆ��Q�814�9������)RQ
ŀx�3t�_>���9�tTR�s"�D[)����:��C���mlom;�0U�iJv�V�����୙���[��+�4�B>�+9;@�5C�}�8�	��0��"� Q`e���[�&=^����ݰ�$:␦�Qv&�S��]m�T��)�5�S��?�{��>���Ԗ��hZ��hZ��hZ��hZ��hZ��hZ�W��>���O���D�`�,�q
r��/8�����,����)KKj2*F���M�5���Z�#�A�F���F�,E�Y2(B�Z<�T�Jmڅ���,B�07B���{�#"�`�YWx��,]��[��*󚶠�g�,��R�8}}O�������9��㩜T
�z�ƨ��8�1t��\V����)`�L�����/r���r��������Xʹ&�@(F*�L���|ˇ�Iɕ�is�|�Ax\v�B��/� 4��V���)��r�D��Ay��ٕ��H4[JKj����wt�ߧ��~P0�ۈj�Q����a�T)�
P�IeLp.�
��A����U�`�xc�U$�$�a�q��&�.Ww]j4�e�� ���ǘ���*�֢��@�F�����6���.�j
�����n ��A������-kb�n(�l�81�&�j�[��D*����>���O����S���P
ڣpR'	G�L
�[�0��EE��	���z�Ow箫���^I��H9Z&��32�����G��~4�.�/&f���=/��	e���tQI�rA �Q-�㛺�G����}=��OnW,��Y]����ew������+��W,��Y]����ew������+��W,��Y]����ew������+��W,��Y]����ew���凟�Oo������P��bb�9^��⠄�j���[��iW�R*�Rs̅���*%(� h�a��9��;�w6��j�q�i�0����!]��#T���¬�)������.!1AQaq"�` #23B����?�ۡ�%v` ��h	�\JЅ���c�i�_����fLy�����2uq��Q3��i��G�G�r>|sYZȞb��F�Y���:2;�F��V̙�^�l�ջ(Ъ\�M�?��>L�`u�v���mݍ��|�u[���aTz%x������l�f��O��o��3-�P=�o�
�	���u��`){�:�.���x�xˋb�111n�wd��n҂��Q��'M�3t�@��{"�����L�:���
U�Bk/MU�0�3P���^�U�@�`A`E�.a��7��M����
�=�#7�OɉǍ{�Vu�>�Q��Pb/p}�hԠ�5Z�pH>�q��L���f-yp�ʤ5Q��P年�y��*kO�iȉ�*
SBX��W�8�q[73B�T8�@�q�aG���J�A�
�+`!@`E@������v�C���O���؟��21!QaABR�"2`bq�$@r������?�[ƽs�z��hawΪ,��j�ک8%Wu4F<n��h]}G����RN2:e#��\H���<2��BaV7<���OA�>��I�E��5@�R�<#R`�]�D�F"�J�����\���+�s�_S�������i�$���$W+��&ӟ��6�V��1�$���#��%>�H��'�'���v>p�bz��+zf����x�$0�3��B]h��o4�����VJ�	$
h+
��Xz8�BK���iQ��'c��q`n5��x����-q�{ 㛯���|�� ��f�D`���y0�l�N��[�:Q(B2%`@�4j�c�f�ݲX�A'sF�����9�Gq�'P�1�S�Dc9�c��?����Iɼ�~Q��S���O�$,l6�G�E,ĕ��6{c�C1�@�%GŠMo�V���|�H�2�ɽ8�a�b��=D��G�]���H�:�u���I�g�f#�����~g|]�~�$���~M����%ې��7.����GcwG�,I#~��|3�Y��3�cVvŕ��8]��x��s����Ȣs�{���
�����C�Wq�:�w]�P�:�w]�P�>l��e�(|���XY�aζ�W�
���PK.3Yz��d�d8bunyad-amp/assets/images/reader-themes/twentyfifteen.jpg���JFIF���		

	

++&.%#%.&D5//5DNB>BN_UU_wqw���		

	

++&.%#%.&D5//5DNB>BN_UU_wqw����X"������G���]E����d>��^�`�m+�s�r�=P�+����k�vs��t8p�<��������s�>���8u*L��S�c_f���Jr�*  �F�fV���5�d�9�G��֥�pR��{��s:΀Y-kT�.?�������'Ν9�8r<��AIZ���n}��$rȑ�8B���/��)���Zd��F1�#�r+�V�-�87�j��_A��Nr�.�F0Z��/�U�s�z��勞��\y)6D��T��|�j%��,�����n_���7���
�a�F��X�ƹG^}3��+N����T�s�V5k/�]�����I�ض�l/�"'�L��YY:NW��x��gS��S��d'gA�д�yJ���F��h���uab2��t��!(�̱c)�e�*�c�����E��҄)k_�p�Ƥ��fww7'����5_�ci�	����:��]��X�o���B���r��)�uE��ɖ,Z�˺[�/Yj���p\����|�d�;O���m+��r)E]�8���a��û`ӹwB�ِD�&H�S�	x������݋��I��`M]s%߲�KGS:����a]�ܪ����v��?�*�7�_�˱�p�}]�(�y��.Q:�YQ{>�k��W����V�ϻQ���Եv�Y�)2�X��k=2ИS�ch�S*��ʵZ�ڶ��S��Ҹ��>)��-�V|�M�G�Z �ʣ��G��ݭj�,E�L��
�duL��5�r���\T�U�b6+Ք���]���\�T�ޭ�j��
yT孒�%�k�Run[��e�om����Z��pSz��	�����ӿZ�=
��je��ճ�;�=
��>2��Sb�Z��#�54#b��@4eb������V���v����~��
���K�r��M6*����^�������B�;��}k	�����3�F��WR�ޭ\��O.�4ig{)�E��Sy�'Z�K�[��@(dw��A������e���s�Q��Z�2��!r���>������'�>���yh���?e)�1���ߑ*��+G3k�v�߶@>k��F�>�_��[�`g����l������ͻU�o���|#<R�=Y��z?A���_]�s�\�� ���:�r�8�̝�/��c�.�}���%�;��4������yk���>��}c��苝xM�C�h�~'�������̏Z��[^/�<�̑a:A��,���|�N��_�A�[�C7�v<����yfM��=��~���<�ͧ���+�}/&����~���ϣU��%�^�|�zAa޳B��>�vϡ���}.���E�s���|�ހ</�M�fz�Dc������-������:�ޛ�^��?W��@<���^�l��S�b���p��5�<n�����]_�y�^��<�.�u9���E,��6����V��.����_�Yrg���urӏ�kkG.���0��/|��+��w�#M����)-�X�.l9�P8�w���n��}S��ra91g#iz/�^��:��^�]Z�='�@<������qS���P��{1�!f?a��2dc>N<!+���S��ƶ����O.�l?�����„R&1��K�RY�xf����q��������%�c/�jq�ˇ7J��?c�3�^?�{Rq��Y�<����Z���{�k���y�̥��<�.8�9L�)��A�Lϲ�3$��s�9�E^�}q�:p�OA�\]k~xG?q�zۦn����'<�]K1}8��un�Ϛ���n}f������a�ƍ^�mb:c�y�J�ጫ�p�Zߟ�r�����b����TZ]j���F�n�~��]*
kO������Z��f�u��Mow��Z���3%���q��N�{ɓZ��a�7��}���<�W^�^����Mm��[u�~YV�[k�t�r�z����q�ι�D��o�w1�z��!�����Y1�f�Hs׫||��z'9���u˖�w�+��k]5ϟ��z5#3��Ƽ�m ��<�]�����<���4! 1"A3#$02P`@Q%46�������0�c�li�گhvv��9��X��[I����e��Usa$�G�1E��u�-������u�ڞ����M-H�!�}Z��iϩ��6Э/Um�sj�G��Lӟ��"3��m;1y1~��jT5-�[ƺ��Ɗ�E��L�S��lԧ��r�[�e�f�
vMS<�=L�,Ty�gG1���?����I�1���J��/��s�s��\K���8:�c��r���f?���K!��R��	0o�87�g�ɞ�&zԙ�Rg�I��&zܙ�rg�I���돞�&�L=C&��SH0�D�?UI����Ւg��s�l���LR1���H�q�1�S���L�gfvgfv�i�v�nv�fvg�C�0�Bp�NN�x��Â�\��Z�X�A�,8�b������#�<��8b�x�vgfvgfv�~D�*�cL��E��`�pE��Ę�.���`\�gh�ѝ�;Fv�L(0��ƒ<c�)�aS�aFbp��������j�R�\1F>C�\a;s��#�1�����p�#��j���PBt�i��S�/�)�"���t�.���p1�s������~y3�s�s�s͞l����q�l8�p�'a8H�FOѷ�١�i� �ì�8����ؿ1����^���ӭj�|�{������9�r3�;����?#�8p�#a�ۛ~��ܿ�����Ԉk�*D��cdDbH��vC/Omh�X�J�=}��?��g;F���P�g�a�;3�;3�g8�˜W��q�LI$���|V�5w��B�F�E#җ�9�5=A�C�k���H$8%9�9�8e8e8el2/�L���~Ç8�p���xT�����6i���${k(<6���P��M&��Z�f�KQ����ME,�"��GV���y�у�-G�1��p�Kal����������NpNve�y�T�)7��q(M�VTy�=�u�GY-��0/Tn�kN��/�.��I�M��S���>�6}q-���S���b����S0�:�a+�R��%qx�M��.?+rp ,W<y�������0ĸbc
�,Ֆ���	/��G
�U�E�+F�����$�*2�Yդ1�>2#��, <zM�A��dN�ӋQ_���p>V��F�U��_b~A����o�66��3m#������s��y{�mʁbQ�M� �j�;�dj�y-���н���֙jv�6� �Gf����%]xF�ш%Wz3(ѡ������'h
9$��1L������W~O<e��j����]BA��a b�֔�`��,? ��}��No��[֭y�mVn[�9;>M�e�1�����BR�u�K2���!j�U�ʬ�u��u��	i`�ә-�B�;h�zYԢ�
��Ӎ��N��6��<�u@/qzG�Z�~㳢�1�J��qv5�$��lm�~G
��G�C8����&�uW�M�6�o���6�$��};Ƭ��K�^�CH�^NA
���rI^�3��+XX6�r�QI�1v?�_;�3	6pr��9<qbjS�;A{�9�U$G�h<�#"V��Fq�g��vH9૪�F��Z"Ov�9�f�N����̹ 
q��8 ���'A\���t�8쯉
��V�(��]tу}�Mz���� �#��j�yb1;�<@�k�ur�o�/Ql�h�k���/mv7!~�*����I+A$0�H#��
�e8� �a��8y<q�scjyu���T��F� q�^n�28�e⨑�[f:�o1t��'�F�F�����]��H�"�C^2*r�r��4��jƨBzzx�W{�+ɵ�QW��s4��N�l�I�=�Um$��x|Y,bN�c^;K(>�m\�cq�&7f1_|tF�����#䠻�ȏ�pE�3�B�1��c
�BA�,�V��T�L�֬>���QV�lht�И�S�!�Z}V���I�o����J�-��Cf�^=�"��ju����[�Ȯ�!��0�ɭ8�!ϥ��j��5T?����c�M$�{���g#؀�s$lT�q�gnG]��CY��j���G�^9T� ��$K�&z��X�Oa���c#x� ����X��b�D\{�F}DG��%��V�� ��O�
��%'�(��0�}���������X��|�$��ld�pה�oš��E1�^ns��5[�,�H�~q�^�����k�T��1Z��y$K��N������N�t�{
����"^�ް'�18O��Ya
��"�%�m�k����
���l�ā�wNp��c��/�vz0p�4��࿦�p�5�{�z�n�j�����[���D(HŁX��k�O�,x�����"p�:�~}+~8�j���5���u��1u���zͿh&-^�SU�,]�}Ɗ�O[`0t��5o��V?�Ӗq�r���7t�M�N^Q�s`s��Ǐs�78�3oLM����zb�:n@}�N�
����?��E�B�؇�4��
>��^��M�Mo��o�4��u��ם,C�%��KRk�56v��j����@*X�Ԃ+�
u��*5�V͞�_����z�Jը����_�e���Ki'����/�!�ko�n���jPX�G5~��-m������n������.����֔�G�Pܺz6��u	i
�8)|0��!�=y�U���/L�;��7mX�<���:e=Y���]���Io}n���
����U��kA]?� �B���0�:�x��L8k�o��JI�(��A�UPVYU#�9�h!f,�G�I�NJ' ��&UR�B�U�1�?�sJ��$�7Յh�U�%h�m��4�Iz��K�i<��i�*En�Y@1_�4�A]�2��z�q4*c��n�նU,��m��޲W�u3v�4�k"oC�b?J7q�:�pl�؂i�wU�֚E�k݂��i]���{I��bXv���m�ib�b��O�RX��%��ML�&���æ�`X���;Ξ�NƊ�qM�j*HdP4�ii�����55T��kk@X�u�x�fׇ��+Uz�3��j%�b��ȏT���i��Q.��Ԭ�8x|8i+��t��!U�DErգ��c��M1��F���a�W���2Dm�HbA-�V��"�l�q�ߴ�V�_�Y�Ŷ�$��&�i�2c��Q;��[���e��ò�Um�,���wu�qz3d��X��������g	���^6�_�l¦m���Fol�Ҳb���mզ�u��Ozx��X�N��Zۖ���5-��񧊳�+����D'3���p��V�_�Y�ܢ���wc��y�EGl�T�9c����<X��) JM�*��E
�I�J��S*�PI%��%W�$x����y��1�s]n]�z��Tc鷂�5{�
R���E�]
/���K��Z�P�˅"1>���j/w���Nhmk�����7�Xc
��h�6�`��u�
�.����<B������m��%J���SY�Up�aѵ;ώ
m����M=���(��@�QfQ�u�k²��l�Y�m޸ |;�@ɓl�5?�S`���@ gm��}�v-�u��'Z�O��)�y.�	B.��!���F�v��7��s��#n��w�����w�0a�ԚI�m�7���ז(��Cdג-�/$�d�D�#}�S7U�i`�Ӳ�!m�%��ʹ��,f�ꭅ��V���9���FV��a'6u������`�TI��_0���Zf�8�U"0�����f>�LE,A)đO�Z'�F�'�"���Z]��=eh���:���AN�4��H�a�U���R��Ӿ����`�UX�jh@b1`��
EER�[SQ��jj��WYV���ޞJ�w�6m^v����}y$]����]}��I�y��M���+�n�5d�[��mS�m	cQ_oy�F���{S�$��_>T�vK�A-}��x̏��5)�u���d�ϰ�aR6��Ƨwx����������G��<�w7;AZwlO�uxv�6�D�l�3=eñ�6�풷nB�4�SK<�c�WV.�9���T�r9��g�L��@�4Be����@�B�K�p����(���D�7�Օ�2�S�?nƴ�j�I>����r�*�j/sߐj�%M�K��X.���E��X��ȧO`4l����jı͡�X�D�hٞH^�k�7�BZ�i�Ul�3c�8���^�̧Gk�rMM�<M�]�[:k�V��c���k�QSKf�®�h�5�-m��4�����:�G�5�Gp��51:��7�j�Ub2�.ޜBb�sK�,�J���L���0ȇțzO*D�u1Ny��:A��qI�D��J�eoT�ܫ�o(H��]�Fl�6�O���֑+I��4�ccy8�n+8���k:���	U#�Ӓh�Y7��h�M�H���qYܡ���ah�T��7H6�'���<	<M���#�>���Y���w���SOM;�MU4`U�Ԥ�+�P�H�rǨ�EX5����i!R�OD"!j�u����ʲ������4���}t<���s�)w���)�^��S���}M�y�:jD�rMmYR�k���4�CV�YR�����ez��;&�#�WV	[��z�U�Ҭ�N)�f1��LyNE���ɍ���5z�E�f�%]�s�4{j��qϹHf*b�T�Ѫ�wH�c&�=c���̏����M��<���YQ�;xű&��o{ʦ��"�M�THw(�1u��f�1���@�sW����|�%�T�9�Z���u�>�5��F��h^�4ĂU�Cをa�����ua0�W�խ#�Q�)G�ji�1��YQ�i
PWvx��`�"%mmf���N[�5T�i�β�Y'�^�@Ҧ��q�E���#�5����U�Ȳ��K�.M2[=6���r��P�<�$��K�t��Rs!y5uddg��r�P�E��R��n�E�����3G��ݞ�#ٿzTx��kQ�hR��a-�"i-I��J[�lWC���ϰ��d��w�ǰ��C��9���E<WoK���ٹ�I�t�r�gF�c�0�mnĮp��U�P�Fk��"��3m%�Ÿ��\�/�	*���v2e��-Ƒ����G%-@�W�YA�ES&w/%~i<2HѤ�C1��4��ɋ4M3��5,���(`�e�	#���ʟ�V`�ZR얨X�S��Sq�H�V0N�(Obxei�D�--qZ�=
n��9�(����h�}$��]�ܱfċgCbHlF��۱=I46!������?pG��e���ۍ�sǢ��)��n�nVM:��h�P�Q)�91t�Qc�L�,-gMRz�����⎞��\��GL��O�/�+�GO��$��}�衱~&t�?`���u�Oך I�O�@	)��d�i����'_��uR�7��C�A��'p�G�4׶1룹jU,[��'t��J|O�IQ_�WK���Ig�G���P�1�O����;���Ib|O�7$)���C�>)t��?����G���G��&1&� oð�ԳV�0H��V��H�A��c5�QdΙ�5��)*uH�@��]�����~�:��JkNݘkU����kϭ��G
b�"I���}V4�_�;��S#��3�ב�П�&��RW\
�"�]��%�NNPT�NTwd`�ɑ��(�kF-IffbI�TS4S��T�A�19)���6¼u�Ynj&��95���h&��:H–6�5�nΫ^�i��le���0��!��j5z��5�V�-��TV��Kh�u(�� [A�:<\��|0��ue���d�J���`�)�@G��X�Q��X��J�X��%��F��+�+Y�ƞ�Uo��U��W��dH׫j���"���r�i-��+�VZ�?J�J��+��+�L����`�⎮������R��R���B[սj��$�Z�:��D�_uG��@��p��,����"E}{Y~��B��,����Lq�c�eB�u/zV�"�MY�����Ja�"@�-9��I�4�Cf�����
|v]$1딏Y��*<'��eK��g�Ǩi�ɣ��!G��*���)�=�jkb��Z��K6�5rGm��5n����ַV�x7��&�$��`��+A�6�dĄ* g��HĀ2��8�4%{$�����ՉPː�{0p5�{6�U���*������U�t�f7cHz��n�T��d`T~��ۯ}⃧f��P�6PA$֒̈́���(�7�����߻*\�{&�*Yg������^���Y<��	��9}����@ߴԽ�H��D0Ϫ���4=��-�	妌���F���
��.��BQ�b����e��qS��LP���%�5w]���Ia�FAN�6�Z���r�jJ(�r�;�偺�Y �Ӷ��F/�,SMdꥣ��]<juN���覓���z���j��}f��lD/_U
{u�[@Ӄ�u��B�]\i��8yZ���<,����,�3a��$ϣ*	v��_��ͥ���0I5���g���4gk��(���Y�n*��l�WMZ�O�4j��m`�а|QΛ�E��BvR���(��D��	ߢ�k�����c�4��/��3�:���=-`6HŁ�,b\�ω�=C[t�O�������Y�Z)��,RƟ�< /x��/]��c3 ��,��j�J���:���{������4����W���t�4�n�(%KBY/�u3I�j1��l�]Z���u���ֳF埣|�׷���N�-���
�-o�-���H-���M~Ʋ�xuլ�[U��[�o�I����+�|>�i�X�!鍮#�=fgQ!g�ӰD�t��]��G
���Q�a=��>��w�f���;~mlO#�� "�g�:zF�K�ԉ��&��g�H�'QE�e�Q�A~��I�%��@$hc
'O������ٖ�ȯ)sb�d��߇a��2Ѷ���9��K[��?Jy`R�u=�2�Z�Z�y+�i�W@kU���FЕ�Z���#�[��L��Q�YאD��a���`$�v.�w�<�8�.j�bR:~��n���b�Y�%��fњ��-V�g^�T�l>��n�vr:0���d��P�
z�M~�����%
&�y���m"�<Q��sB�Ǫ��Y��We:XL� ��r�+ab鷵-�-��s{k+L��շ'��{j�K���K��C5�m4��)#X_��]SS5���D� �2���Gʴ",�۪�(��d�$RF���|nH����N�٨�^�ʬ$CӺj�6�Z��O�a.>�Y�!4&f�ml-[���S�5�f����K'N��7{I��d���`VN�,�q�a�5&��w&N��ON��*�Z�粣 Q���Y\��31ƚ�
Ɛ)5���]�K�V�ZԄ��g8���0
F39���eD��j�z��ĺ��e�n?��E<ER(SmrZr���h�F��'�"�5�f�3vJ��H�p��+1��ۻ�,q\�H�oūz��V�Y�?E�v8hѾޭ���C�52I����ڨtDX�2�ش�s��LqLJA�:�|k��6`w�[J�N���ShK����z��$�-�*I]Ϟ6'i9���%K2�CX�Ӕ2�S,\�օ -[q$��u��5~q��8��PGn6�:F�֧n��Y��?oU�:�ˆP��E�q��_�_~^�Cד�h&>���E���8$���3(m�@6?��b$R����B��I6ս�!���"Jd0�C$��dU2�N&�Z���t�l� –� {l��IIB0�(�vn�x�3���\�o~I��V a��G���,�=�vz6�X����{��<�{�b�++�(�L�Ȅ�VA�J�vX���@��M�l�{�ku�0V��2/z}�DʴP��3�2���UF0�<�����0����
������f��f�G�G�� �̈́K�%>��H��iF�+$1� ��!^8VM^2�`o��,���4C2K�cp�O�*��	>ޤP��8�N�����q�`\`0��i�;3�����p\N@�'x\��u6ҨUX:�P�mP�*Y���e�ז��,��3�ًGJAG�aiD��H��q<?n�M9%A���n	�ۅF�<��������Ly�ƒ�u 
�����I��Y��t4��H6ڭ�	+ ��%I�)Dr{�!�S��P��W�
rq塶�yFpD%&�]��n!ʤ����J	!1"AQq2a��� ��#0BR��3@CSTbr��$P����`c�Dst��	?��d�8Oښx�����w��8ɦN6Hӎ~&Wp�ڂ�`�]�'����ۄHD�W���!�z*n6'K#��36��q84���}!ôa�Ok����W
'6uB��#�ǫz�ɸ��9ǒJ��g	�(��Ҹ�(���R�v���c����c#i�B�b�3������!�e�	_��_e
��ul��p�\0H�]�H�����t9���G��k/o��� q����?��������Fxf�՜$c�hJ�ƽ8X���x�6��Un��P�俒���<�xx=����U����P�J2�	K��FB�xyD���:���<�y�Fme��8%&(�*��1�z#m��s�O�IBΤ���\i���Cq���=����p7�K�������p��p��pk���^p���
�^p��g�Vp�g�V@>���Ր/Ր/Ր/Ր/Ր/Ր/Ր/Ր/Ր/՜:�Y�/՜2�Y�/՜2�Y¯ל"�y��ל�y��ל�y�/ל�x09>���P�=C��/�=C�~�1�n
p@��c~�����P��wkQ�Y
NY{ԣ�="���\�g�j�hz����8��;���.�-���a�Re��#�HQd���F��!+�x�TiI6a��
�qNj�Rf�C�ڕF��p��q��y0��iŐ��'6E۰�T��D@C�d*6��9Ǥa�4�zfx�v^ފ�$wc�"�ŚM��Py���<��3������p���z�1c1�A��Fp���:���r#<�`�y�����U��'F��)�=�>���m>Y$��$(�U��@S@@�X�O�;*�����P��J�H�'?��R@�jMt
����q)"�4Ui�Q�d�{L;Z�dh4�>�V`|qWx$S�oW�B���>&��7�9�6GQ��w���'��O��i�c3� ��8���fm�wSa�d��b��g8��Q��L6���H�5�_d�&�D��\��E��3�Q_���%�x��%3�ណE�ٌ��FB��z���Jp��qw�q�q�G�؛��}�p��m�v>���l�춡�(���7ca����ZR	B�~8R�3��-��E�$oߢ� ���F��$�����R���e�T�ȧ�ͤ��0ށ�O���V}��Ħ���ؽ�C"��Z0E5�Z��՜Op�PE�M'E�m@
��\S
�MŸ��r̠j?�B�^޲��H���…ᘪ�P� Q ڸ�P��6������d�HW��v4H �3�Pq�Q,�?o~sC7�8�`�A���w��V�z>E��9:ۻ&�'�Bho�u5c/'	�1#��2b�� S�P�ػ�V��P��OűZIV8���X��Hq;��4�÷S��z'.�	Ԁ������d`x�m����7��*�9}�`뤹�dvP�
�H�s��S��TF�*����M{�m[az��@[P$wר�kh�l�0.x�>jW꜠�Q���S��Ld���U?+��6��p��7	�����=�;�vs���I%\�|�r����u��m�KZ#�N�f���rNH�4�v$2l$���]�}�D����BzX�d
9]�WV�Y{y�za;5EG9[��Z�`"�s��+cuK�;���~X�,&�1��#��e�~��ek��v���z�vyB�N�5��#a�LY�-W�֐oQm[�׻*�@�q7������#:�K��T9{�_d�Ԝ
XА����qÏʨ��oPo0�i�V�B����b�	
bi4���+��4���F�Q�<qOeW^a6�O}xcr�J�iB�ܟ����j��p�7�-�qr�y������)�f�`�l5����'�2�h�m��d[߆!����]��ʃ����P��k@����ZՁ,jUv ��ԵC",Z��v
2;��׻i�;+�$u��=Մ�*�J6�o�2+k��۠����n?dm��W厈�7:"cxAc�H��[��Í�}-X�Q)�zg~���d���J��bG�@u�Z��׵��'	����1Л�=1˻3�Y�=���~�Y%�� �8�	�8p�'	���Õ�ɑ�<j(k�����X*��~�C�(8����x���k��
�"h�ߵ�n��|qi�;4)TGT0m�?�[���]
��p�T�@~�@�+��@��FGL�!I	�W����2y��'�Ӽ��S>��M	Efz=�����$^�H�E�n)�����?!u���N�ƣ�2A#	#�Xlp�Y"�b�#&N&2����m�������6sZ›Vݒ�؂�p	���$/R��W�ި�fC����|a�e7�##�c_03������(&��<��
�7�`�(���M�i�X�sK:���0��G
�$V,2ɯ�y���;g��(���{8x9���drh�� �!f�x��#
���"����7ݒ�Ec��ao��H�����8��C���>������;�f؇� �b��
����8k�x�?�2G�FH~��ڼ�q
���~3��N�,��9�q��'�+�Xy&1�X_a8Ğ�-��}ב���I[#����s<�����m�8��J�q�s�^q���$}Y��8��NO��f�>H��)?�ߞH�<����@��>��q�����ט��� c��8��$+�$s䵅��bG�`s��8O��V���8W�8��t�NJ�#��	ǯ�6��Ȍ���	�/N���r��q��#="�;�H/�FzC�&z@�y����5H��CzC�Y?힄�v����.;�w�B�C���v�=�~�&z���L�?����^3��C��$�C�_=�����'�&�
o��89��9��<�9���?�r���_�3���6p�}8G?�l��!�_��/�����g	9�l�x����8N'�l�g>h��������>���,�ZD�B#HŜ�P�O+��K�L��d�l��vuԣZ1S`��d�0�3�O��s�U��c����,l00GP�R�4|CQ2,�"Rh�Q���1eYx99�֩�X���4DHRs?)�561���H��6ո��g�H��-��L���s�[Pw9���%�]�F'���3U!N�Xt#�%���{���4(S�Q���A1���g:J�g����}+	��<���	`�I2H�����t�a�3�33l�p�ޑ�3��8���4wd2�~e�nF������4�5����9��K��g(P�Z�䅸������7e������FN7���
��N�qեigS�I[NOs���W��C@7�9�6�3�Ds�1dwE�鈠�zfq��,�4ҩ$ry]��rh�ϦxB�ں>zF��:h�I!cZ!Uc�JC�p��dnigh�V6^T*@g\�O�3�A�w��&�H8��j����
*؞���H,Q���*�K��@����/#S��3��u�eY��DZE=�N�b+Q�`9oײ0pȐ��P�U��+"B�Q%A9lll6��_MT/#V��j@�2$!z����o��S��9���S�B��j�
�1�Tf66�6ٱ̌�̪��R����k��ĀX�>g"x�sJ��/�7�I�1�ٯ�1I*l�T��A�ʛS&��߮Ir&��:MyF����٢���c��R�$��\&�l
�8Hb�*��ٌj�k"��@�Z��ߵݱ���Ytv�@�F�;w��M+;���V>m��Ɂ��� 	��8��Dž(XmG�O�B^W@š�\�	5���"�!����G�rPR/o�Od?�oH�[����eN�1��ذP$��#�lq�ii@�aKo�6�c.��7�B�m��w�ŭ��@�O�
��%ր�l�)��^��V��R{;�S��������V�ߤ�vk���*bḼyK��m�2�;y2*(e].T���*�2\J�Hb=�/�9�T��Z��߸�r�����[���e�Y���
�w��Y,Gu��3�5Ī�u����:�[�]�d=�fܝGY�_����BC1kE$��ƓTo��}�p�dg�mY9d׼gm��e�o�Z�?2�۝�[��l�N�S��]��+�$��3ب�U@6@ܾ���z�6��~q��_a����7�8f���(w�L�Fx�2+��*j�'�5BZ���}1F�U{*t>g]@��\��Ŷ����%���+�#	4:��i�H�X�#8~�$�;(V�9��o��.�*�!�5��v�N:ļB1�c�喥;Q�X���]��^�:Ƣ|XU��M,�jcQ��w�8�8�#6E��0N�"�س�1_ri���Y�-m�',��cE+<�VJƗ���m�r
'b�R\����`\�kS}�ۃ�\䪤Рb�8BX���Iu�F�K�v�"�iM���j��7_=�e���P
Z[Lj†�d���ŕA)��ouG}�
1�@e�Ȯ����h�v���Oq���T0e!R��Z� �傱`��y�j���L��#���/�l��JF+c�!ؒ?h�H��.�edb��a����W
�\��6߼1Ž�q2�U��C��	%�n2�t�
��-�ԺH�� ��R�tVNQ��,V:�dS�zG��
�>�7U�=�	�2eW�lO����G�@X1R<
�#
�����hgvUR{�t��*���֜]c���Z��wzԕ�j��M����m.<
G�q‚ꀟ4���cvz�Ru�͟\���:����x�4����d�=6�b:U`J��Y�D)E�ܰt�PY>��s��v`��28V�t�s]�)��)�SW d="�����Ώڃ��{���;Lt��
�Tt��,%��m�5�çx���졑���� �$f�C�C��9E
�h`��
!?�2�F��A]0�������70ȡ_�h�g_��(�<W!y��v�Z5U��+�l+ly�� mV1�f��/$�	����Բ���J
1���šx�p�K^����
@�h2�%S���|_�0�CIj:����̄�m�z�9��5Y��4Mz��*{#u��S�gH۫�+����)2���I�H_���R��
ܠ*��@Ғc�ۤ���U�ӂ0�1�����sGw���4���k{GUj���n@��{���դȑ쥷�����rRP���Gڰ=�A��	z
 0�;��$�҇Z{�lf$����6i��O+�T���eP�ӽd��QRH"��A��Q"���R����^r#�Es/Hok!���:OQ��� fD��]~$���W`�J�����f��TH���c�9�)u���^�,m�cI]��bW@�^�)`RR^�ǧ`j���H����T�0�#6<7�jh�,��T����Y@�I�ֺ�|2R[XP$���I�eq�ꦏ4��|��C�ݻ��Gm���#ge�6��M�k�5��#+�!���-��7V�V���cI�g`�B����~߆PC0'���`�o�0��e]:
�䨡�0蛈�&����?h�Q�%M7��~}�;>������kպ�lf�O"�AF�;���b{O��L����,���X�V�Z�쪑�B��eJ�bT)b���Q�
*;�~:o�d��,S�u��F�smJ�Ɔ3Ԭ�����SA��G/�ǔ�M�ͰV}׌�)�%ж$�m�o9�0pݳ��~�Mj�s��Z���h����f��t��T��bXי8e)�ع"�R���f$����F#`x-]��!�#}�=Fk\>�@!�a�q�BXw1�Δf�癇h�r��׷B\��`?�!'[�l��f���?Ұf��9���Xs�_o��4F�����W}j��dE,w
�,}�$ӣ�FH�!K3:�� �+��>r�`5��T_d��H�f� �R".T�z�+
k4iR����8�E���.�b�E�}NE��b֡�V��2(¸����!77���$X�x���Dѿ�رȆVMh��e ���h��8B�"��ن�����@Cǥ�nig�S�v��:�5H�Bj �X��0$Z��4�o�k9�1�Q4�	;F{��҄�q@ìl
���S�������l㈃Kb��]l��&���/�6U��
���F,%כ��$BQT{ɬ�5ij��IJ����n���vʵ����� ��+�L쪥��K�MV0E�N!߰�P��
�����(�u��I�P�Z��7�XG�#Ӽ���~~N9��`X�@���[r0�R��
nT���8�(x�<�["����ƢV��jTX��>ٲ���������4
����N9�,/�
�9����~��:�t��p��e.�����4������h�F��=k��8 ,&)��T�iX��$ni�cv�� �ǡ�Qe��5�1�����N�ɡق�*I�q�M'����*��Ӱ	�Vp��̌{F-�u;�dYG4:�ڴ�M��\�
+rU���(ڶ#P���wL�',�v;rMj�7)5�Z�4����*���Q�FӰ�B�8c�!��ݚ���{��s� ��[�U;D��~h�b��sڰ�v���؟�k#�#��B���]�ls��!�"B�u'9V�zފ�cT �b	�;o�k�mۇ1g`��E&롭��1�!cR��:��V:�"1d�@��<��†xX�C�j[w��$�i	��!�ԋ#��&�J���.�ĈD]����4eFۍ�h"T�L��S�6�"��P}r�J��)J�ڵ��il�d�ՙ�F>���"�Țlv���`�}�3[��Q4!bXH�呑	{@1�c��um�#���'Q�>;�/n�(�{`�g��.VH��Q��B���
�/�3Ӫ�������#$PimL%Y��d재	��4��ujx�Eh�w������L��5�_�6k��!{$v��W��,�%P��a���>4:2i�j�̺��`9j�)-n����H�C�/�'(��D�"�Z�6���r*�Q�)S��X����t0^�%w�)���vB4ʠ�����0(�I�@{�&F��d�ͤ>��k��\?��Y��]K��ɽ!���l{�M���k²��(0ׁ b����=]���PF&ևQ�Do��9�w4dj<��0#��s,��L�J���[�d�ܺ����M��#h�H��p����z�����=�b� @���@>G��
����(�F���z����\�B�b�Dzq�(f�a���}A��m�QŎ	Vi%H�Ԡ��SA��zh�I:�4+y�Ɛ�U[W�`㧼g0v���7�s��ڸa�=��Ns�EN��mK^X�
�v�^���DK���v�1t�|N�8$�9�a����X��H˨�`���J�H� �����f�8�L��=�+ٲhnp8"A �#�l<4���p�΄+�g���΃,�+Z*�	$�Z�7,@�g˫plxdh��h�%���Mr��0^�r�q<���j��J���fAkT�J�>���&���6C�T�t���R)҅�v�fVge��D!M�Xdmˎ�Z�.����]H��	9��[��q$%�1��A	����$г�Njͤ|�P:�����
�0�b�@2,u��"�SQQ�B�mi���/amb#��5��4Xk��!���:�R��MW�a�T
˺�*����#nY��9{���r�$zƠ@e�=ČYR���M*�%JLK�@�P@��2�,�*��9ܛ �cp���)(�p;�8]�8JE,I,PW�Hĕi�����g@�]�ĻhU_y8����ҪX���g19j嵡�>L1Y�K>Ɠ\��Ϙ?oV�T�J�Scq��4���կ������]e�97n&C#�ಠ`o�ݱb�.[��(*Oq�B��5�jZ�y#�d�\�@��I�Ģݍ�H��\p��uN_�N+�;9�jd�^Y��bA ����k�M��i�ks�O�<lߜn�֟�Ÿ}��bM�-��W&Wg~�ud�����;Ґo�l�Q�˧��+�GQă[l�0u���F��{Ge����>�=����`q ��_��[tްIԛ�5�'7��I�qZچ��k�08a(����q��H�wXy1�X���@Z�<A�p&����-I,~$����Z��}J��3�Yto�`X�����G�F�B��.m�*�f�YZ�W��I'�
�2P�4�����Љ��Vā��<���#�M�{��R=
H`U�(�7��	��V*�h�
��]�'eE����bm����W\�0�5
�!�[O��rY��;�
J�z��8Q���mg�.�F�j�/�m�1R��
�qw�BX��O��tw8Q��E�b��A�6��c�/H�N�����$W-�p������e%>�H��!�իQ꺶-��ESCQDPʤ��H�%�]u�ZO�08�$���9L�pPQ�4��C���(P��N"I��SHÖU@����*g�-l#������Q1pbm�SxjSx�(�A�
�)IH{F&�T���*�t������2�f��B���6�GH��,�S�*ry��z�S%�xp���a�P~�c�(M��H��ȳ�z�HgT��hQW^��U�
t~�]Z:��t8�Q�=M��Uf_�G��Co�l �G��vs�f6Ng����*5K�?C�p���#��3�W��m�;L�cT�mDx�	�*�%/�5�S].AO�
��̲�H�鎂�}I�*��O1�r�L����d��5�B@�B
��zA#q�����:�=�P�^���!�F�
����wi�8a,)+0�W��b��b��ȅI���~�����z�M�j�o����F-��*j�N4J"1��\3k��xvR8p���%س7��cEՈ$�-r+������ևP����l:��K�+0b樳0�H:n����,��=��7���y(� 0݄�d�G\(��m��#b{��5b�	ĉY]�
�X���gL�0�;
+'�ō%��*5�%v�׿L���
C�
Xo��+�1?cs\¬�(
�h� �ЇL`�=�n����,l��?���I�D���8�#�þ)��8�����VLn#t״,s�Ste�ݲ^/�i2^!�-ڠ|������cS�{-�qCφ�8���Ax]u�$���dV�,�a"("i�c��%�v�&⬟���EY�;��M�~�&M�~�&K�~�&M�~�&K�~�&M�~�7����W��d�W�ϓq_�>O��?���E�2"E��R�(rQDZG�I7��^�6)�9gwv�I5�q2�������8�!WD�d-�
��JӪ�x-k�,�+���Ċu�xAW��dm�=*b�Q�p�J�n�9��WP��I���7Pq���"R��Fp㊝�=I���z���
�D��c�$�y�J��#mО����9����]g�jx��}���Νٵ08™T�##��:^o�r��ހz�[66���:����.�5��7�F�ﭨ�lڀdt$���p<�t:ukV��j�! voK���Qy��Ҡn�zm��ld$xG`n�q���	��D
�-�`&<��;��:T�w5��9�̫ړP�l�޽�/G3�NK�I��s����(����FyHh�*�ޡ��BuX�g;���������L�qvG���G�aƢt8I�X�
L}�{ R�1�§s��W��h¯��>ҩ
�B���y�j�NZ��в3��H�*�)�ĤL��-߱�F��
�>]�t��UIR	�b�y<kA'[K����?'2]h,�J���"�W�T�3+
u��?�Tr�=���"(�6�l�ܞ���J�AZJ�h�ŀ��D��"]��M����4hhXi=�8h�
�8�����K�i�hlI�\QZɺ�w�$5x��;��n��� $�PJ������ӻd�xi�"�D��dv�j^������dӂe$��z�W��k��k�Q&vVֺ�h=	�L��n�=!F�!Vp�2>_h�R4ڎ����	,��3�,�o̷�� �'
�2'K**���+�sF.���N\L���55�I�3Ѽ�1v�c�ߩ���$#Qm���C�)(�@�s�$�sk�:�8�Y�4���̜������0�:�h��sL�v{�
���l��Ux�;�7l��� X���+(�Kn �
ҊamV�Z,�m�|��h�(��͠ޑ����n2iOek~��F8"Fql������31݊�[��9��)�y2�Z)���[��B��V�����"�Z#����j.�
�>��x9��2t��h�1�*�W�`o��'�b������#1�o�#scq��W�^z.��76��s�����6��%�-�qaq��k���	�P��aBF�kq_ő�Zl��_L��0��l**���7T��M1�B_�F��m,ae×J=�u4k5�ʢ�Qu�bJl���eάْI k�:6�)*ې���g�E�(��B�$���co�8x��ȑKM#�l����Co�SߖE��c�o���.�΃�ڲ���Sr$i�+V(,�H���Ո�7��|>���[6{�A��nM�	~:������&P{�a��N��L�i�q؁��6^&D>JHžg��L��V��1ˆ����;���*Ѡq@m!$t���N~��u^f��e�(M��g&�K�o���'le4T
@
��݅I=t�ǣݶ��r�����+=-�i�5g�t -^ ^q\[�e5�} ����>�!�QG�c�NxB��׏3�)����91qF��t���VMt�F��kl�hN�WA�hU,�Kɹ۹��0ScR��"({I���NJ�A&���`�Oβ0�(���_��K*��@?�-�rթ���p"jD���;b������W�|#�c���p��r���./���(ϒ�l�f�u��Ķ�B	�~��B�����t@`	����b�'��u��q��8�)�+ul�tn!=#*
�#`�2IgtM�t��&G� 1o�P("g���Z��NzJ=vU�m�����PVA�Hy���~�B�ԝ�9��Q`�ִ@&�]V)U����ɢQ�]{^B��E7m�t8Ha�|
g/��!v
�Q�(̮n�vd�d�ȭ�X���]쁦���I��ߐ��D�K��:e�d>]G��p^e ��
c�����8�F��q��(��%�Q�N1B`p�:����"Oio���?��8�$��B�FU�lZ�`��J��@/r����/8x��Cb���C!��%ib� b�t0ԭPG~p���ѣ�s����˰>ky�i��?+mI^�0a�f����3�����
�/��d�]ɫ,s�2"�Pޮ�P��Q�d�&���¿VH�˸:�
5Ø��J�C��%u,utb0��V>߾�mbow[�p�d��Ǘ_����S4��{�
銀/S�P]Uc8U%���B�c"�].�
9���⑛�U_w���!m�):����4��\RY�6/��?hD����8�
rmHa�,�0�PC^��:wrX-����%��+������IQ,����1ʑdݢ�m䥳я5a�}��;<l�!��;t�
���S��@�I��I�xKs!V��� �A.m[�C�kO��A�~K���Ṭn��7g�6;�qMV�c��r=�Bqp�0���,�~*p�D]ΖQ�����w�aA�J�����8n E���3��ߵ��ʭ�Pm��M��&��(+��)���I�Ԁ�/�:�t��
��l�W`�<�X��F~���X<:��o�hYB����8�1Α�~'%�k���	7��0��k��2�j���0YX$ x��h�E���~�3��)녵�6>]0
�J3�E+� ?,I�
��Bq�J7��Ҍ

%�17�ߒp��ohc�s�r�F�X|vsѲ��#r
w����-CGR�K{�$���Ui�}w���Ƕ��ն9��87��C5ロb�;`"��	�_���?��^
,���o�m��S�FI����"�����#ƆR�U �=@9#�GUc�Vp���ކ9	p�i��S]cWF��H��rBZ��v>7{����O�qqج��յ݃��e�NR��t�zʡ�~9C�»��sW�o�B�b<+��B���|�3
�.�	��l����5ܶuc{��5#
$�l�uݶj��	���� aTX���h��/�}K��+�lo���a�}���0�'3�B�6��p��:�R��Y4r�o���CdyVZՖ�u����K��>y�D
���yl���B��[b�b�w�
,��^.�[!��V�~*/H��x��r��+�追���?�����������|q,B��u�=����5��s�F��^ʓ�x;[��
�Bv�-H��F0������݌$��*ø⻞����$<}��#u�Z2�^mb��#�W~uÍxp�����p�����(���3� 
*�-h���Ǧ
�$iڏ\vS�
V�t:��'������ʞ��ܨ��W���c��*����$����A�@vܐ��ٿ���9	!QR"1A� a���#2BSbc�$CPpq�����?�-{OR���_�ԯ�jW�+�Z��-J���KR����^"���x�Z��(��W����^&���x���k�W����V�
�V���J��)ߎh�"��yV�u7�-��*�VB� +AZV��wZ9"N���Ø��N�ͩ�A��l�/�o;�,ة����[�?f�$�=
4���9�i�%IR��ǚ;�Oi K�#B��0�B�0�Zڂv���ϵ��}��V�h<��V���+A9�Q��J�KMl��A؁苄�zmD�h��N����Juw |ĭ�i{������P#��s�M�5�~* �����t�@j�t�O1���6UZ
,3�3�6Z~�ó2��X��B4)�׆��5<��S`J�F-O���1��1V���@����
�Jc�v��ff�(��J�%5�+E�qW����i�H��]�$���tH
��"I+���UǙ\y�.� }T��3(� ��C��eŠ�)v��:O���'�?I�E���O<?���Y�djPd+
»�W_���������:ʹ:ʹ:���U��¼;��������~k����;�1�B��I����@�OD_�>�J^����^����^��p�B��#�8J�0��J�#�ࠇ�!�0���>
ZZ�8��?��A�h�g��1P����N%��;�'��G�ʡ1�B3@��TDs�EG�ׇ���'��0U@,��۞��f��J�9�)�s�y��9�*��(0�J��`s��okIqA��G4�N�K`����DJ-v+/�T�ZZ�OT֛��N��b,����9���Z�S&ԭ����(��]lFH�Yn�Ѓݚ�sA�躅��!��S�p�L�[���9���dz���y*���r��T�JS���dජ�@:0
[vф�RՆh�8Bi�T�*�zc�����L�*�4D�*T��7�����B�
�/��Ɣi� e��(y*}m��ߪU��5�� ����3!1QR "Aa2��b�0Bc��Pp���?��ӟ#N|�9�4��ҟ#J|�9�4��ҟ#J|�N�G����4q:MN�G����41zJlp2J�!Q��P�����3���W|!����H�|HN�j����{�Sm���C�Dq�\U���K�EyP��<�/qb�*�ץ���t�v��f,X������(�!
&DN[��elأ�4�]{
9[��)��XQ{?�z0�.��B#�9�)l[��s��jm��em�I|���:{���bz���l������Rb�5&jH��뻙�]׹9e���S|��s\Z���N�-�s��΍I(��•��+ɱ(�eB�܌"i�Р�
R'�$��,�ݚQ��lI%�H�ؤ5�%�+�ܙq�.=F�_��?�K���eG�Q���'�/࿃333;3��
O�W�Ut#Ut��������]���<G���B<K�_�daj�$İ�5�%�i�LQݯ�Enxx�xx�g�]L��A_�h+������n+u��?VѴ�i}5�l�r��a��S_q�);[��ӽ����tf�
N�ω��34I�k�
��-�b�6��&���>&ɭ��ʛ/��"�Y��Vn�bL��_D�&�&�iƷ�_tFO6W֐��W�	4�+7����R�*;4^�LU��,ͱ�r�߲F4qE=���-cKȤ�Z�N�y}�sWt)Gt��^��\M�[;&,11X�Q�*0qm�܃̝s�-���o�5�e�1����{B�.\����t�E��a��w�m��Zrhp�#"~ƚ�,p�ƽ2?���]rDpߍ����!iW�v6�qw��<7e+�gi�̠�ɇ7�3��*��8�.�j����F�t߸�X�{՛�6�l�:��^��n�6R�eFTec�%va�+�%]�V�y!�,����7"�3�������E+T��ƶ�}���PK.3Y��|�k�k9bunyad-amp/assets/images/reader-themes/twentyfourteen.jpg���JFIF���		

	

++&.%#%.&D5//5DNB>BN_UU_wqw���		

	

++&.%#%.&D5//5DNB>BN_UU_wqw����X"�����PoVM�X��4g�|�&�n����<�M[}
:�?�z��?���PO;� lU�u�խ����\U��=��5�ߧm_���
ul���6���#�O/b���,�6&
$�W>:�#���8�S������exX5�QkZ�G�ׯk��*�C��PA^�F�ٔH�i�r�'mhA#c0W�Z��z���X����a��d,�ɮƾ
�ց�n�
U�7>��>���m8��6(��V��-���=9���t4(&������������w�����鳴�d��tU�,��3C]��F�n��PU�uJ��b\�賭ܣj������*���:�z3%zy}�3���˓3/Z�m���bC�k5oW�Z5�,ɵ��<��I��{���l�P�O��g>�̧�F�{8��X-�;>�%k��"ζ��s�x�L�%�ϯb%�٣���s��P�YϞ[���ц\���"�
��*d۱�i�ҵ�*����m��1֖;4�e��heܡ[>�{O�כ:���νf�,��f̚X_���,̭�
��I�� ���s���u�[D�5����X��R�+jUI+)0�lJ�*�����`j?���PAT@5�7(V�2ዧ���n�U��ܕ��:z�#,�.���]Ύ�Sճd:U�WH,Ӛ
&�kr�:z2q\��AD/+��U��(6�S�B�c���'�j�r�3�$����"C�A��A׿��XJ��Kz,��F��m[ָ�o	��E���,��b��6�M�Í��6&�j���3��e�a�uw8�����d_���^��i�v��رb��fm>V����Z� �v��,ߵ��zV��Kx�S��ʋ���O�[T-tU��;��M��`p�,j/�y�>�[��ҫ�f���f�wܹz3�s�ë������b�-���ZqK�Z��]~��ι����K���B-�]9�u�/$���Z6�g�z7]�y�8�A�z�Cb�J�3B�h�������w���{qy�	����v"I�0��|s��ޟ_�.l�w)���6k������mυ����ͯ���W�x���{2=*�ga��qw����oU��'{�z��W�0�x�o��\�e����Y�̩��qv:�\}�\ݡ��Z������Ɗss��43h;��Ν/w__��#ǵ$�.o[W#����7x���I�N���p�k^e�KD�s���e�g�s�ء�ڏ^[q�X�v��.�kk�tl�/�ХG��-yr���>}��嘆�������Q���zUv��n=҅}����tϨ=(htѹ�+*:<mJ���I�Tb<�H�r��*+@��Y)�S�
����o>@��_��+t%�Ib�/'͠ݭ���R�u�:|�U�����X�$v&��s�H���r�U�(��
v��Y�=�d�I$s�*��� Irݛf�Id{��*���(y5�v��$ϖG>EW����*��ٱbyd��{��(���y-�v�ٱ$�9�s��+���-ٳ<�H�9�tUEp�'�\�j�&�I����L�� �[�rՙ��W����{ؽY��TDA>f�~���l�<�V��y7�l�uNU�>X�B��3�y�p��O����kP�~�m;��N�2C^��g�Z*�� ��|�zޅ�6,:I��%�lް�D`�|ͫ�-N��gK��c�&�eok
T1�fի3�]:<'�,o�I,�V�YZ��X����m�4:(����2�D����軍���S����3����9fH=���"ɗ�u�d�ZEc<#K{v�-�_AU��X�Ė5tŊ\m���d�3�k����GkOi|�H��)$��������~g��VE�{e������^kn�3��};�S��ei���ͦ|n�g�k�&fҙ�\y�陵/��31�NL�^�4�-;�<8��~�*��[�M'Z�Ҷ�xg���qX^o���t��)�/{M2����3X&µ]2ұJ�Xj�Ͼ�My�h���y�h^)��:o�LW��h�8��Ѿ��8�t�֦+vi�w�T�׋&�����:��y���Gv��0˲r���<�����'g/'~Z[��;�<�C��L������^Ζw��	�I�		
" ��HCzA����c��E9x�o�xB:b0�|M���Ezyq������j��+�V	��������~{����5�f��Z��i���9�W�Zb�D*�ֺ�1�۫z�f�Du߮�ǟ:ZԌ��=�g�Ӛ�3Y�զ�ޔ�V���g:D�3*�mj�H��(���]ZB����A嵦�6��d������',n�4�2�zZK1�n��^�Ȟ\��ֲozW;�޼5��:mY�::#JCX�[�ɍ��8�tSu_��S���:x���6��p����5S-��ߏ��
iۜ+k��۠L�7�&�$(�)`/i�"��ֵ��o�I��{ν]SLp�G�6���Eo��'��lzzl"���	����Ӟ��2!"1A#2@ $03Q%4BPa���?�d�k�G�c�:kֹU�2:&6nM�G�t�D�G��?UJ�t|oF����n��_�)zW"�~�����ܟ�����	��8yWc��'�_�t�8�N���:5�c���Q�]t���#__����s��G��r��,���.r�KR��K��C�3
�YT�5�rޭ�.�r묺Dz��'�_���33�f�?��ܪ�We���}9�`�3�g�="}1�'�}1��1���="}1ҧ�}(}���Lt���z3G�5��s�Ϧ�To��+�?O��?�0w�~����5�Lo�'^����0a�8+�=�C�1z=2�:f6���dt�'}��f"��<�TAz� �g�y��ᦜ�G�!��80���|�v!��-�M���'�����#R�:��<3�t{形�}lz[�mJ�mJ?u�hߎ����AU_��MA�1������8�0x�����T�i܄�K�&qhj��B,����}j0s
f���(���x�&��'�q�g�q�g�q�g��!���v�E����|58�MMMMMMMMMMB!�D"j,A�G�:�V~���_�w�U�C�����@����6&���!XB��/)�AY�u:������ؓ�c~�b!��0�?�y�
��C=r�X{�c�ұ��dUvoM�1�:%�x��
�bw:��֡=n�!^�aN�?Q�q?P�p:鞃�ϗ�����~������zY�-��N�E:K����ZO���b�xn�`�iϹ;��xrr_�y�W��S��eSu��Qf[E�X�j���R��L-���==�ec�777�?M|��"��A����#/l��պ��j������w��a
V<���`[pįޤ�������e���ֺ,F�
�VKSb�k�R
k�OY�J�j���W�a����i�q���
���k��[�����	�}h��\%I�ŷ�S=-�ڋ���Gp��Zf2���,�%j��Q�l�Y.���LG?��t���ߎ���G���{k�[E��Ah'و.�Í����]İ��Dr�t�)��B�J!��w*OX�8��>���Ѝ�}�B�qqv���t�!]��(��%0l߃p��%�@����4�/�f�Q�ŭ�^#U�C��R�t��c�bV�Gw1�����:,��빝j��n�G�BT��+$,j)��b*ږ=-�(z��E�S����UQD���F�p�Rz�R���^�mW�����Y5y,'���vA{(A�6��:
��.�R��܊��'�'Q�B��O�`X�,�de���|�+�%��jM��%�C}�x�v<��R3)@|��\-m��8+emы���؊�
�"�~
�z^_���f'�-w
[^�'��S��#�5��ޖ0�*�=����|�\��k�ǫ@D��V�\� g=@-o�l�!�F�Y�Sz�w
��ƾ��e���pN����5��i�
�88���V!���ם�́U	/uPҰ�ʢ�������-LJ�����X������g/�V��Q�d9N�v��~��� �"w'p�nj����km䭹<40���G��q�
M�pmJh6Y�v>��SI+��
���{(��L�"l�c���̈́r��Ƃ���/�=8����Ҿ��{Y�*N�O�vl1e^��A���zN	���f�]���b+Som����yV��M�8�شdo������J�r�fH<�+&��\��)2mت+�-�����!��j�݂�m<�|�9j0�@��ű��<���VOw��ewXj���*��bG��!�m�u��r];�tK�m�ٛ�۬��כi+�oq^�P;�%��9�x���2Gز�o?�8�a���!��ڼ"����[j�t9���>�'ܤ#)߷��]�w:���/k-���q62Z�*7��w�c����5cYC%N2,���>`'���v��w%���H�ځ\�	v������[�/�TJ��bt���V9,���arm{�"K�H��N�_��P�JX�~҃�G�r��\UU�,���V�=�������p�Rܫ5�Ys�)�9~��3���,�;FX�8�@�nxϡ*6�`����g��-���`���`�
r��jXn�Edl��z�y{��X�\����]�؝�֧��wz��q)��6}B���k
�b�{�81Z���@��>vw6~���H�b�q��c���7����Z����e�"rm�i�Z��^�%�C�$_��]+�Y���=Sq�FF�z��r�9�xL�F$&]C��+뽁g��鲭&5��\��g�3��;�Z�']�A���/��G��|�`d�=W��~|�tX�R|o���:Mx������c�s�ҟ�F���԰����]��l[���M����X�ԖQ���3��]���겪�[���B�#�b�#3bb|ƌi����ry2P�f�gM���^M�v~:��(s����D8��1p�����qm|T��02t�G��Ԧ�*D��j�FZ0�&�F+d�#>5P�h����gև��"����iz1���^�z\�St�&��Վ�)�\z�,~��V%Ӫ�>=���1o�
����+Wl�����^�hz���z��6�9]`�Ug&�cX���$�Sy����n�|�ix7�/	ʼ�m��{�l���	m�ψ����eYB��1��v%�G2�V?R̳�˿ol�*��r|����~��`@�u,�)�GP��@��U�v���Wr�F~]�R��'o��C/"�]�&�j�Q���Ƿ~E�s���.J�ӹff(��7�A�Ţ�LMgy�����͵��\�؈�\ϝ��
��w-�N��o�M���ٛ?����K|����E�=T�s�eϗ�ϗfO�fO�fO��ϖ�ϖ�ϕ�O��ϓ�>I���:��'S�%�S�9���sT�/8��W�%?�t��-�sW��2��f|�:|�2L�=.D�AP��op�&�8�@�$�I����2�b?���1./[iYEٕ�ܰ�����C&��c���jF�EeD+�
dMA�����1lFC+�W�w��ƚ����z���}��@"�X�������㱐
�R��|d[c'��#��
d���'(�J&5`5������=�[�ya�1��-]�rI׃}��6��n���nQ�j�U,�RM��X��Ҭ1w�l���PAH<����s#x����e�M�f�r�gL��oR���4�Z�T9Y��h��B��2����T�2��ie��
k�<�t��y.W�B�wnZ���6y�0��PE3��%�˟��g���3K����;�e�8J)��l��h}��e�1QPB��$��(tgF1'͵�>h�+��`p���k�tT���|�L�J���fpǸ���mG^�F�,S��B��_��O���|ab�Ù�|=����aR>6�K��)��<|�ϰڅ�	��*5��9h�=�>�V�Y�W�`�"���.�j{��l�O��r]F=T��>���fu��qyR�+�lmq��s�Z������5����d�{7CMƜws�c��S��V_?ivJ�±J�_{�e�BV��Vj̚|�BY~���q|�8�C��k��y��n�sӝ(�hm\��̥S@^����/�]�f����ݯ��_�iST*&��v���%{12��x��~G�k˵|
��+��\Mʫ���&fT���Ҭ�<P�v��G3�_�g���Q��q�ʿvg=���jۗ������{Kh�l'Fꔧ&����%Xk�"Qm��ʺ�!��#S��0���Ǽ�A��}e�q����^ϽVUP �e"u;�8���߯��z��x�<��Y�m����F���_ʶC���K<�[-�NF}��#�.<�x��%���ك��ዙn3K�f�ݯ�:�8Iq��A0BZ�'&9L��ݘ�2�C/t6�ۖ���%�Z�$?�
I����o�����2�H�2+�,�V���+_c���ɪ������ߒ4~�iE�S�\�W!;�oBb/o�9NGit�T��<q�5V�툋�ӛR>�2�O�k=�F̤��V<L��U�/�0r���d��lM�4�Q�b��e[��.UvV��`��?�
�FSF:��u���s�qO�U�F��}܊�Y6k���nM�ٳ��������2�F-s����Q9��x�	�Ge�����Y~^ݩ��|J�v��Ҿ���y�1�ŧ3�V�W���YСS�`��Ze\���tԩ���i�E��sJ��)��*qvr	.D���ݐ�YEl+G|z�B
%i��ۉCݐnɿ!*���{���Q�u�׌vf?�*gq��˝lO(���t`���unK&Kg�
�0F5��^�}�H�֮�D��dW�q���́�Zc����a�C���r�D�*{���vB���}��`���߽Ƅ��J�Q	E�9��:�@��d�f2k���u3�9��Cnc��6��}�;;vN?!��[�%K����nC��K�:�'��m�[[�Ƴ�r4ˬWiU�~C�jޗ䥻�͋�c�Q�䘩ؠ W&��n��M`�d�=U�?#X��,ATl�`�e�_�Ǎ�� ̧���,Cǿ�PU�8�$�n�T���ŸLm1�(�d�ᣴ�ŕ�r�e���Sf;��8?:�:�"'��8�W��YS��	������ I�F������|���KV���=�E�]u�rf�c�ȸ���;��u$o�5�I���C�z��+
z�l�j�Y�����]p[F�� �g��QѩM����Fc�m�Q��9F��r���1Ǻv
^��Q���	i����n�iq�a�.=j��+�[�*�&I��P����)�CX��y�����
��S�\sƣ\�^A�##�G�;U�Q���×LF��6[��&@�<؟�Z�l�^�nP�l����JZF�)��7U:e�|�3W��K�W�R\��P���ۦ�+�s-�]�c'(kT�cjW�Do�<����q%�1�!⼍��u�Uy�׻���\�˹K���U\�	�����(�j��v��X�U����Q�N_�Ļ
=Ge�ӊ��íjVեJ���Y�w� :i�5v�[+���_m��(;����m�gx���Q�X{�O[�۴�����%���8�J�G���u��<�r3���l͙�6`��.�ri��v's�NM94ٛ3fl�6~?
���ƻ&��G�g����B~K�G�E�W`陧z���
�Q���-����ͷ�ec�J�EW�X��Q���e�o�C��-�+�x.�#�ݓE�[��)k�����Sϒ���ýl�˰���'+VL��q~����9;+9X�ic��*��8y"��6Z�]Dt̂^V���",�e���o�-tN��Ñ�vW0���}=��Ӳ�O����Z(�ʼ#V�3!˄��F���+�-�j
��_��go��8��Y3o��K�v�>j|���8f��Q��IxF��2��Xh�YU|��&�Qf�f\�^��q_j��0�:a������f&�z�Q�q�!�5���XmΦ=O�5����ul^U�����z:�����L��,����l�w:}9�>�ϟL�Ϧ3��B}-�'ҽB}+�gҝF})�g�}F}'�g�}F}'�g�}F}'�g�]F}%�g�]J}%ԧ�]J}%ԧ�]J}%ԧ�]J}%ԧ�]J}%ԧ�]J}%�`� ���Ђ �A��AA��A�E� �����o�,)��`0?�s������Y�v�-�ߩmB1,Et���
@������uL�;2�;IOQ�O�s�oǦ�
^tl��V&>�V��_S��;��nnrbۓ܈�d�fDWȁ�������Ez~�B�2=f���z�/θ��w>��'Mf^����ӻ	EW'��ry��'��ry��'��s�sy���Ȯ t�� a��b&�؜��[���4]�5���r/AN����e���8�v���<�-�A�֦� ���%MZ�+0)�iŦ��y��q���%G��׵$K
�}4����6�Ex95֫�������"��3���m����`�~�s�ljЊ��N�Bj?r�̺+���Wl98�t�mV���Bf�����pA�(&.� ��')������ E�^�oQ��*��hŪ��
N3�PGP���׏�UǶw�s
��́9����pr���u� h��Io�b
��<a�~��8�G�zS\D�l~v�U�۟���i���ގ�m$U���y�i��px���o�jy��l~{�9�hZLZo2�c������&oY����nnSX�%x8�S�blj�gk��3�h�)�eR�K���b�d�1s�����3�L�	:���<��r����\ꡏ����?�����k�j���M�*/zײ��R�$�m���O9>�&���4�M�����65.�}Y����ʰ3��rߙ���0���͑96|D�v�S���E��e����sw��	˨cJ�����M>�InG�S�s�BV���9չ���T�b
���;uA]DZ7���L���[���n�ɑ�-�Ѓ�5<��V��Ƽg''3���Yw�\q���W[1S�)��E�ݑ���O�O4�M�)�jRD�X�U8W8$
���glDZ��e�8�Q�ճ1�H�g~ڴK�q�1�dO�+���D!1"AQa2q���� R���#0Br��3@b�P���C��$Sps���	?�G��G��b�*��7���)��]ԟ����i�c�4�*`�A���*���:�� ����Ͱ�:c�f�ʺF��\�]-�p�Iq��G���B�^�V�`��p�V����5�	itq�i��aAt��ӱto-�1����
#O;c�3;�{�P��3J��B��\�UY��
�櫚��2ۉ�ZUPj���ZEI��L�h���cU���D]Ut�hk�@ഺ���$��w�Ii��+J����F-�+J��3�	��q�O�<F���$�%{�W��3
yo�V�����:�S�S*yʧS��S��©��ʟ�)�<�6���T�N���T��Tjp���T�yʧS�U:�r���N���>?9L��T�ʞr���b�)���P���̚�2��Pw�y�]?���́�@��Ń�F��������j?q�QY�zl���O�x%=BJv�����`{%u�럻	���2�i���3-��c�y����;��'XZ+�� ���U<A
�O��*�x�*U:�B�U�M�6�p�w-�cx9����d���䙳�3)߅h���S�4���L��_�ӴoUZ��U�x*Ի��i��责�+J�eig�V����L�ei_��+������#�#���ܩ�;O��S�{�B�>��ث���V��r�sU���T�j��E�~
�{q
��WT`�pu7�|�*5V��*�=��a��&�)���# �$�}N�Iŕ�&8M�'L�Aީ�8��s*��l"ɦ\��3ت���Í���*-���r����S���Z��
��=U��R�1㕖���BқA��b�i���H�N~�
g�pfJ2'X�n$߅�!�~h~^I��[4CqY�&8�v�DQ�r/k�Bs�GT���=מ�E�0��!��4d͡$g�Jxx�F!R�y��T����:��eҲ�躡-�N�E�lB6\��5�ځ8�NI�5�YJᩤO�d8��Q�r�;�	�P�6N2�NJ&���L�y3��fҴ ��G��&���&c.ո�[�J	�.�G4c��Vu��"�;��@l�$��9�oW��)�ک����DP���p�aܔw���ܞ!5!E��#2:��nY ��%6?ԌȜ���O�TNJ%�=9Y�0	V缬Ȟ��ȃ�S�
�+��wx"pO��$8nEI��hS���E�2wX!#t��}�)�9�Q���!3r7����1�D���J�dg!�ݫ%���z,�}
sI �u�p�.I��G!sǒ���ֵ8����;�
��J��M���S���F�D�Gȩ���ɭ`U��=�l�����M��b�ǽ69�_W[r�����&a�p��#>h]�€01O2�� ��Ud�0��(����.�&��5�9IL�����X~*��s˚lŤA�Rۢ�\ ��*� x�zk�9�0b$�ɷU7!'�Yq��b�P�#p����;,�HCfb�\A�9.��&��X�<�=�]�(d�|@T{J����k������'�7sT��%0�g+#�S��d;V��بܴpA�rl;<t��(Ȟ��L��ܘ$f����\?�n��������� ��U��U�g��}�������;T��~|Ch���6��f�
��	<V�~����\�خ)��\G����;gⴓ</�N6�DY2��>�vM�T��(�ɶ`Ġ�<���~h�s�(�I���)��:�������!ܑg�`���2U��<8o�tC�#�.�nF�L���!���gY�,�x'�d��W3�j2��~�A�'�8�J9���9��i��\!<߼�µM�˹#�y��lfr�N"�檺<O���o�	�o��ʧ���J-��7Y�ڈ@q�y'�}�S�L��x.����(&�w�ވ�o
qrޝbb�Mͦ���B��S!��b�
fsY���Qȡs��@lN�0��{&��򹀩��ec��vg2�IFH�el��7��&ɡwᏊf7�I+�a<���I�l�'!�]�Z���#�6]�{��kW�r�ٮ�]l9s�XI3܆B�I�n x�Ĕ%�!�Q��c��'�4���P�M�a��T��+��v&��U1� ��wN$sC$>���
`d�^{�zm�JgU�y�Zg4��2����	%�
s�C������gd�5�M)'��7��K�c�)=秴b!�<�!������u6�*��Ñ�%Tc�@=,�4�u�X9��v�|��Ph�xx����;���b7<d�*x(i
�8	�ϑL�њN���[���T�lp1c�N�%�"�Bb��c�Eh�;jU*��0f�@�KF8�OU� �´v3������{ʧ����D�i���.��j�X~�F��ы��1�<��ɪ�_�� xf��Ҹ��צ*�ۘE����{K�l@�Ѥ�`�J]$��d�����f#;�~�ĜR���+�v�I8�����z�-f�M�I���
�jSuF�x�KL��ta�9�f2�6���Mӷ��;#z��H�e p�]�r����H	���]�3GË�?�U*0�%�pau�Zz�ςf�,e<$c��kD�W�2H.��4��HڿI,v��*��Ͱŏ)�Z-
�Q�b��d�5LW8��6"rB�����:�]�:=��]��<:����-v�K��[�уk(�+����śq6	�8�D��B�mF`.��DD���0d��xX�3e�Z#�'�gѴ�Hل󌈞Q��q�0.J���Ii�&S�`�P������P��9*���#��Y�g�⫼�d�xޞpb�Ӕ���c�
�=$c�)U�p�x�Y� �UK��U�,v!��T7�FFJ����C��j�p�nU�����UT��� �K��
g��,�x��K�f:?�5��{�Z!��v�|]f��V�M�M:�]�Z�恇2��=�F�$;��'~I�.h���M1�";�������dY�-&��4F1�K��8UM�0��U�~|�t4�)FXG󄢎���ʦU"�Iʋ�*.T\��Pr��Aʃ���Fzџ�Z��E��Z��E��w�Z;֎�H�A�Pr��Eʃ�*ES?��F���m�EQ�uƠ��nGS����i�}��>�A\J�+}�K/aЎ��{#�:��пܟdj6O�G%xB���k$m���o�����+�G�=�+/aЌ���&ڊ7�BP�4S�QGV^А���!�����Ƀ�䌻~�A%��NF\�#tl�<T��m����ٔFy'm��� ��z�9�9[$"��5nN���M�=���6]gn
��qX��7{��P�v��Bll��i꿁C$V�bՐ�����P���L��]�$q��u�)�?�9��A:�ӭ��u�����Kz� >Ed��wh�~�Ʈ���ކg4묾+ %uݴ��_SqUwU�j�̡������亮��hY�nhv���P�F^дƳ�a���X������
=w��fu]Ǫ�+j�N���!dn]��ުL�����?�%�Q1�p���l����o��o[��@h��y��ɪ�uw���2�Pz:EǴ�.q+��87� �s�L�o�n[�SQY�c"d#eP�(��.��͢B��~�d"������ZC���Q�L�ԗ�"
~P�H����?�7����h���D����j�'{M��Vꋊ�b�M�m1�[Vc5e��-��Y�nc�;'$2�g�ںџ��'z ��@s�R��NH�tx�=����jrr?�d��أ֒��`2;��@4�޷��.��(!+���0��&�v��{��ߚ�Y���P�r+%���`'��)� �VS(�q;�ۏ��,�U{�_�wW�5w5oFҌ��S������&ۏ.6�u��	�U���|�Q�]7j��#.ಈj�u
��g��� �՚�tnd,����5��"E��:�w'�n�Chf�%��(�n��YM���nA;-� ���Jȅ�ȭ�
�2�\��+�����8.�złI�eeq�,�:�����b�:��.d���ɸZܺ����I��B۹���Q��d�ABڷ��G�%�N(��)��8�S�qD�S�(���ue���v��@l/6*���q��޴w
�[�j���nW*��	<��O���.$�	�9��I1�r1`s{1J�J�c7�3�8Z=,!�
m�d���UY�2-n�E`p���	���20�G]���Ti�v&�ptg�Qg�o��>?�9��S�G��p���I�T����c�XI�_��Fy���$H����oFa��4a�F�Xf1�4�<%0Y��dc
�[�&�8&�c%H�6�Hr��L�e��&��ܩ-���S�{�ZH0S�ah��n���H7j>Ѳ�&,7��;	w3uOj�K�$X�m0�	0�1�Z�{�D?,�Eُ!�S(���LJ9	�!�hp1|;��{�t��
�����#����\� 	�:���$Tlmd'�dNo{,~�Mk�Z�sو@'�j�h�-gW2�d�{Z��-"p�UzZ�6�<
��ĉ�g�,��e1��k%̘�mTIU��Xrsۄ˲�0�lt���ʄ��LqZG����^<1��̓�Bi�h�ޜ~�Z��˴�L�O��ͧ����I��V��<�l�;rf������~���iF4�Og�ݳ *��M<	�A��E�oG@R�K1H��=Ű_�Ai��(�k���U��Y�Y���l��V'���J��1b��l���6,6��xΊ�*�1��)V���X�Lۏ5[�-W]�N���~di�����}��#K��F���/?�^�4��Diy������#G��F���?�>�4|�Dh�������#G��F���?�>�4|�Dh�������#G��F���?�>�4|�Dh�����?���y��!��]õT2ެX7��{���� ��紸	 nTqժ�l�w�ގ�2�t�&T�rp-�ы��7�g�O�1��
�UB�����������Ú��8�O4�'%�[�f���S��X���֎Lv�l(��
�3\L��
袊(��(�쐜��ʫ�n���Lpkr�ҝ���x�ҟ�b�V?�/|uY�U���p�v��˒����-+��F���ڂ(���'Q&���]��G.(CE��J�2
黈T>�"�Dhe��!�!��4��I��<���@hN�(��fFUVڞ�v���Q>�PB�@q;�H�Z�دOLz&B`=ꗪ��H*q��T�U��h�V�x�}�GY�Ө��F��S
��h0��'z?���ޏ�>���z���=��"�|��7�xU���u�u�S��6O��Z:���;(�7�;�:a�y0���Q�/�E�	��U?J���*{�G�'��>��P/��{{�i��j���檗�:��v_gL�n�xN�꘽y��s���ܐ�ک�2c�ʝO2�S�&U�4ʾ�4�ފ�o�T�x���W�|��hT{�	�-�������}�Ġ��	�V�jn#�0�2�[�wF�
��u{��j�]�	X��*|
'�~�U��=Q)M@�ހ�)��D4�A�ǹ��9�Ws��P
qˁ�j:���N�S�?Dz6po�o��%m��7�ϊo�7�C�&�&�&�ҙ�S�g�T�Ja�~��D�&Ja�K{�=�4����D'EJ:���*!1AQaq��� ���@���0P��?�\Cb~�j����AtDM�����š2K���N[�EG�L��'�J"3GDxpH��6BÈ����Rl)hT�F��قe�aWbAiP�?�?�w�^�/7K�J��|�H�5�y�Ǜ�x���"lFȲ��f��bb.�lks��8(f����u⣚�@�&�:���>iW�Ū2—AH�w֫������0��j�ھ��퀗ِ��Eu�wӍ��7�\���=ᗭ]����I����OU�Y1�&����fz���9��Bm�$P�b�xZ_�������F/�.C׼�����n�x�?����K�~gP�lgNsY���#�� ��c����7+2�!�$����"�A�p�(���
��U��b�(�p��K�R�\������(Y�
_h!xp��Y�3@�e��
7:x�K3q��m��W䖊����<u���I�Ɇ*�ը�.7ݮ$ݮ\����Yd�(M��D�)�s��d��3~�:���W��?�ǀ�Z^,�^ZgץJ��!�������`��^��z*Z[�����0}��C��>�]���܇�9x@�d���Y���IJY�D��؝�t^��}.Sz����Ʈ��U4�J텰m���>�K-&�1h)Q�ט�B��k|Y~���X�̥��Ա���J3�����%�	�O�E_Y�}Tn��=��ܗH2d�����>�I�I��[��Q��{mY�i��"�UÒ��b�<Ku@�k��GRm��j�դ�P[��/dc)�p}�HQ����U;z��\��Px���a�,|�/�p���G*����E#'�����tÃԵ1|(2��Z�����z�?�3����y�J
<�j�N#p`]l�
.Ӌ�A���]�҂��
���"G�-�&�ma�/pa�I�yyb„	Q��̽�^�6)�`�̐x��]�P��q����O�m"���-}~y!�o>,�|"{��`�p�>
�LC�#VnP{�Q̝������H����ԣ\�����TX5W�`�*d1)�`
S��n\f���y0��D�+o9��J��{�� ٵ�%����嚣�2Tid)z�75��Ղ�ac}��VJ��/'E��BB�앨�=-Ud��U�L���.P�������[�$�nԣ��$��\8Ȁ�"���	� 40�m��爗�;�G]2��B�Eo+��$-�ezX�1��ى��6��CJ��~3��Z@X~	@����U�K�Oܝ�pA��)�k85[��H��qE�j�5	�thľ�-�Btie�	�nǼz�V>X��ͺ��P�8��`�a
��qՃ�*Ym��̤`�U�E->��a����@�tZ|�T��w����53�_
b���X�b��C/W +�P��W)"��(��%�"2�WA��e�.9�3s����GP3�qZ�u��W��6.X7i�X�X�=���Y����x�
��#��W�_A`�ٕ�R�e
�[����W�b�Ha>4u��d���b ���I Dm��u�E
Ea�G�hX�g������𨊝�����*kM��a|)_#c(��`9�\I�`9��0.v�WVݵ ߀��ڊ�EDr�9��Ɏb���X��c,d"sc`�
��R���c��6�-,�9!��vF�аK6���t@�x��q0�k�f�!hf�����1t��͂�����P�UAs�� `���T�kܮ��\4��4�A��I�͢m�K@�QKY�P�T�K��%�Lj�
�r:�P�Ȭb�*�^�D��+ƛ��/��SR+��,7�f;� J4e���J�-��L�A�5-_x��S�I.�4zM\ɕ��Yn)ˡQmf\Z�Ua�D�a�
��b��?�q����l^'8�����o\˳��(�0U#����Ij;��������B�ev��VعZ��5DݎЯ)�mT@����f�-��	XU1��\׌�phP�e]�H�L'/^�6��mC���8��qhRV����B��dq�\
�-��z|�_�n��#1`e2��|�`E!�%Dj��6s-�Y��F����;6��M�c�S���$�Н���V���lZ(�e��������WF�+��y��5T�өr��������eJ��i�r��du�0F�P��*�ʓKʡ*�j��lWr�A+��%�*��B�1�,<����6���OXs��I�8��m/V
_D�4΢���Ճ�pE;,d��@s<V(�xW�`�E�J��0����"R���O��!��`C�HqThׂ�Y�����H�L�~�l{BIM�5��
����$xQq�-�[�^��F�e9~%�£��m����흈�����W+�����N�גݔ2����n�p��+�D[��mF쬱�C`�2*�[�+dX€�\{�+�7�ئ�Z*�0�l��5��f���/%�g�1�����e~@�8`7(�GS
@���9�ZZ�׊S�,������]�?�<����ς�-u��8�.�	n=����x���3��J-�h���A8�����j*���h�9�5�SfWl�ci���Ի�?bk|�t]���ح؝������N�,wd=i2l}���`��+��de(�e��l9R���Cy�a����8x�rr.-w�Z��E��Ѫ�J�)�$d�#5��2�������;���m�L,�drbf)�"/h�d��ȩ&�PF�-��yڢ&��#��'k���\��4,pKJ��Mq�Ɉ����俋b�2@G�(q�D+�Qw�T��júKbYb�^&�,�X�
0�d7H�-R�r��B�z��9��d/�b�Qa�d��B��,��3͟��=N�Y�|w�9+!��(
�����Ǖ�@R��A������oVV8P���@�#"r��Q�Hd��E�P��:����s�`!���7,+�ݱ�,�k�T�L�l:������<���l!C�����S%K>�yZ,���k彽�5�Vϱ<�/�fh���^ ��[�{^ٞ�Wt�pK����1}�R�;5�+�`�q0)�w��۞aK�Yf
&M��
��L!	�)g���,��C`{o'
[�M�B��^ٝ��)W{�%�4� �:
�<�"�f�U�5.Q4�F����kV�����&�I2�����5Q���mD�Q�P�����C�i
hI�pt'�"z�Yex,,�۪�*��^J��)���sK���z6�O��l��2�v�Mi_�&g�հD�Ƕ"����?P.�Jz�4��L��L�L�Ҟ�&�Ӧ��
O�#դ��ҫl���b�ĦK�ͭo;��D��M��\
���'wk��C@l���*���B�n�ŝo��ŗ�|� ���p�߽�2������c��SW^
F�@�vb��-$)�^�/�.2d Q�N_(��.�ȁ��
��y]7bn��J�،�D�(�������/*Q�$n������j4��a��^�r�A���Y�`��
��+��AX�ac*aG?��f�6�V^;�M%��J;�xf=
��j�2)�@PZ�E�HP��
�R!2gh�0^b֚�0�s�4�b�E%�j��]��}*�KGO��	_()�@��(�03A��Ux��C�_���U���g5�i��|�l���72���/��
QxN����$8m���[P��+`1�ĸ(��[
1��
3���{�#�~�k��@�
��
��X�F)m�I�`�#'0
��a�FR�b��),�WO��N���bi��m��Ԯ���i������K�0��ڄQd)�9ۄ�Pm"�hxo��k����s�;�������T�9s)U1ի���;�,}z..�O=k���O��R�C�s��ڃ�'��4>�?����GT#G�����6c�$[�Qp���Z/�B)��ۉS����J���YB"ˈH��g&'�\7P��RF�A�Mc�C��Q�A�G�cQ�Y�5� *Xwn&R0ţ���(~�h�� E�1„r�Vs��-�7�b�Z��0��2���1E��L��7�2�6��i�0	f�r�L9�Q: MV,! �P��J�1#��Dص��[6�M��J�tǕ����	�%��fy�c�W0dfI��mi�0D�T��!����
xB�e���HC�"9[+�����R����:X2�!�ne�`F�K���Z�nVc�M�R�YopSS0�P�A��a��5�bb%9&��`�b\���bY�H���R�c�Ρ��m�&�‘)��z`�-!&y�U�,����6���<�j�̳����´*[��E�.)L��יrT�o�/I�C!�Ae�ٛ����@\3p�V�"K)lf�
t}IhV3�=��ʦR�،	�&�%�#&������"�C��'�O(�����F�ڰ	ڥ��3dE,��������v%Te���兤�͵h�N��r�V0md��Z˧KԹ�+U3��3��
�*矑b�209S������lۓ�2(����U/1�C1�-�E�\��^�#���G=G�Lw���@���Q�*���{��1Y
�)̲�EhԴ�H��L�(�Ke��"Ӏ��Z喝
�`��M±��pߦ�t�y���	�Ę^a�^T�}���c
O#O�PK�
9��&�ޠxX�t�+I]��5Xz�W7f,!�@PCy��e�9�L���t�����b.�N��W*�;��"��l-N����޾f?�	��l���2�4B��y&�T;�RmP(��m�Yu�d=�u�x���1%mC�W)��	�J^g�3��c�1ñ��SKmNf9��o#~SKg���j�z������&�\�A}�5]2�CQhYl�+#v�Odϰ����e.DOD"7�r*�X_���m��	�~���C��"��&�+/$#�XE)���ri8��������]A�N�?�L�n��ymCRӇH�
�o55�aQ��-�]\�L���-��IlE���2]�\>`N|��WL�a��R$�(����e7��_Yat�\�1=�B!g��᎐��[���Ϙ�Ph��ς���_Ÿ���T����Xr�[�.���c��yf<?�R�od��q�D����V��t����{�2�ȣ�U�b�@�D:����))�1m*�8��nacbi=�
�����am.S�n=�X=��)lXCP.S3	�u�U9t5�a�솩Q�M�-�0&&��=,x;Akq̡@�ŧ'�G�$D�$�d��7VZ�v=1>�Q�D�<��K;H6[fu!��Q�A�5m�1r��s$s���
U�r�c*���Q��АW��"&��YK����B���S5���)s�ֻ�6��'.`�j���)��J�"��3G��7<�7� �K�8e�k��%�y�5��nr²�A7jT8a)�H�,��˦ʉ%N��]9&ڛ:����,�Fa��m�Y��-O�w� #u�Wcj+�9�#R��7��̪ӂ,���`��t��.ǐa��Q�m^`�	ӹa���hbn��e�%��~8�L-=Ct����ԣ9HR��?t0-�g7��m%�.:f̲èߴ���zG9�5
&u�ԺII����o_���K,��N��΃�
��.���ßp�J�Oڋ��s)u�!Fqa�(�݈�C3����$��PY��d��-QjĹF@�%�B�v�C�[%Q��<��`!��{���&k݌�K��f��D�\�&�%ax��c�$9�2)�Z��2U�%��9��^_�{BP����f��g$
4:(`/�
��Xyl�
����?x�#�D�Ri��f��K=�R��Ԝd����3�2�4��(�m���J�&�r��]%Y�Yf��Tr�cl]a�b46�����!B�p���x�P��sl(~㉻p��
0�^�	���cd��Z�*�e4nF�ш�����KVpx�[H����9����䅽�=`�\J�B������r�Q�'\n�%���2
i��v�~J~Z��E�~�y�Z��Z���SE����g�M�{%]���E���/W��,SjY�Ҋ6��R�e�ˊ�uv�Z�H�%.t�26�K?]�Z�� ��@�`���\���7���"An�f��I%)�X'`������d[��35YRm:g����W%��=
��ꠝ��w�C9�F�g����,ZУ�
�Ω E�k�^^E�`� ��[��Cm$��*;�h�tݝ���J����/�)T��£�&?��f��:2��U�
;�`꒗�Ǝ��6�Ȃ��AP������_�cAf���f�AJ��z��~�
�
��9$]�����l�6�d���׈&U�&EY!�6r]�ׅ��ំ�bH$e�F�f3O:[u8s@S�
�-�Ԫ��Q{صpa�Ju���\�la�v`��xFg#���(��8�.���h]��B��3�`���6fZZ4Ђ
�.�=Tc1^�d�@���ff��@�pH�-���)ŀ��v��/��|��t��>�TN\4BQ
���X!�Ư��7+i&�{Y��H����!��ʱi_�0�Po�A����_��?=��#��6��'���%��g���=��g���-��g�Y��%��g�Y��5��g�Y��%��}y� �!��T����,	�Yh����}�w��� z�+�� @�!�q��!B��%���8��0��MG�/����^�M_�p`�)��n%�X���Z����X�O�r��/��h��$P�
Z��8�7j�.��ѡ�+/Qm-�Qn�z9Z��b�w�4�,΁��2/�r�˗.\�OE���?�O�1���'c�Fi�J�D쾈w>�F���H0UFY�����W�塋a`V�iU
h��&v�߆�����C�U*�i+�7�l����}2��'��C�&�]dmT4�
���}�
�/����֑���r�A�s�W����=Ѯ5��4}�
B
U^��x���V�n�K��;�A��F�^F�b垯���$�&�\�2��B���9`����\��U��Az��m���h�nYe�����A�_�d(��P(.`�Q3QF<n���:+����b��>fGp���>�ߧ1�^���cX��UԻ�NX*P0��,���P��e-�g��;\,׼l�/��yX3����ν§S"�%�(RVx��Ie�H[U>��SlȬ�[2�`}Z�#V�*6'a� у�_Sa������e��!Pݸ"��P�[�R�t�㒩��&hD�Xx�xH��H
,���=Ĺ�������i�L']�;1�q�܉��/�-g�2���#�K0�H�`")�ӳ+�L���\ac�S=��Ӷ/6��T�{��=TXʁ�;726��3u��G�͟�R���{ʿ��雈N����U8"A�k��&
7PE��<~�t��%P�"|�-�V-/sq(�i��Z��v�Lt�fp!�-˦"N$W}C\3�쁢��!Z�{e�OZx Ưx;���,���
9>�i�H��S��GG�"�0^��2�0����C��������YR�[qal�s>��1�3\�-�C�.�D�dH��X�$d�b�]���U�t /3�F*�4=��6�P�~HS�������,j�l.���g���b�/�\X�3�Hv��6U.�X���%�M�y&$�k{��j����f�ೆ�8�`Q��Qb��Y�o�@��FJGɇ�Q�R�.��	z��G2�Y}�}�J�-����S�ſ�?A��*?*��0�̃8��q���LI�y$�Q�;�Z���n2���.��X�����8���0���@�쪫����0���~�,�:�*  	aQ�@�p��O�R{���#�~N"�ϼ���c�DJE��C�*=�� �b��,��")Zp��顪{�It��Z+�����t㲗Ëm��y�5Ľ�Ja�u� *(h'�!כ��u�ڿ��p�^�~�P�r�xa5��@��	�d߀O��7!1Q"AaRq2B��� 0P�4CSTb����?��}�1b9.����O�P�.X� RE��R���N����a,,:΃|�ð�g�7֟���~t�]�N�/��,��<Gt�`��a�p���:��j<O4��D�VSa�P:��å����(�"�hG|�(e�=���
��V����s\'TΩ�Y՝Y՝oy�=����Kw�in�Hr\؀�"~���������?�9ѢO�%.�Ƶ3Q���,�=ģ�M'�)���~i��)�ܤ�P�y#��˶��eHfu�.���oUbS�Q#�]�(�������h3A��f��P�K���5���6;a^S����Ӵ#7Lf�me1���`AH����Xj#LgF�w��;5��M���x�s�#P���gYw߃:��{)�Yc牌�4��B�f�P ����t�e1p��(�4
qcb�0	�Eģ�3*�bu��Z3Yl��0�-�Kw�1B��5Uk�`L��J&��Qr~к�΢w���y+n�s�7�Z�v�e�a���j��#ơ�=7�ɿ�pmO�����FƦ���o�
���.(!��`!B,�x�F�Pt�{��qW5c�}	�䍹�3�½���;An��T`-}���G�cv&����7�����ŭ��6��H�Aw �Z�"����F] ���2��M5��oQߴNLro��I���h^҄�i�Cȍ��:8�N�v�D	Bi��U:8Ϥ���p&��4���D0�C�u�a:ǰ���}��	���'�����Q�񲺱9�i�V�	`��C�=�6�.y{�3H�ȧ֣-�9TE�؂�OƥL@�=��Hj.>����c��:���Lx��� �&o��Ȝ]G	��,H���v1Eqc}�����1
�N��a�n�\�N�H�NeV�v5�ͅ@��'�F�ጔ:Z*����U����Ό�@�f^�b�(Ӑ���E>]̨@��18$8�@S�ϼ�L�i�U`E\Lj7A�NB�5_�|4����a�j�\
@ev��(��+Ld�v��6>F>��3�>�DՒB��cc8�z���G�c�Ƨ�~��A�#����ӷy���뺟x����u�<�<�
^��9�.ll�0b}��c���'a��!]
��cf��U�q]�Ze�8sޠd"��w���7���mFbɪ��X������k��	���ŋ!GnǑ�6S���	��&�M^b���?(�Z62h�aTg5}�x��T*l����6@U*��[���a��ÚTߴ@r%� #�x>��ٔ{�r5�}5�1�[�Ś�E�8�\*��v�5&6`��H�A_�b�)2��nG�hĠ���e���
���k�A��R�lceƪX����5��l�Q�L��
�I10�l�����B�6��2XC�v{���0���eؙ�8Z�v�0>�h��e�׼�@0�=L!��RM�a�~�	�ʇ��<2;Y����:-���1�e@Kq��[���m��)�[�DA��q���1m�6�k��.9���4�UeM(J�����x�m�V���1�dɌ��f%�O:��&y�: ?�N��LcXG#�36�I��~P)6�f��T�W��(|hJ���u���[Mm5���[Mm5���[Mm5��Ө�[N�N�����&Q����S]���l�����{B��Q�/��p��#�@/y���A�G���/<̙;�V���݄W`v�|QZ
�q]XX���"�+>���!Ȉ߹�)b�i�lE�}1<@���<0��/�u�y5�(����l�sK4K;����}w0�ͻ	�	��~���'��WE�<��cr���}W�EȬ,r��g���B��^�QQ��f���j0�6�(vn��a6�۰�A��G3�(EL��F�1I*?��4!1QA"Ra02�Bq� P��3����?���\П�����]A�3
��C��κ�Z^��4Q��V�#A�
��c�O�`a>&|B*�����T��W�oK����c�m�鑱1,o-8��c�;�
)p1|�@Y�����I���6b~�0�P�8Ϲ��&����
��Y�d�&I�d�1��'Ex��~x��^!F�p�=
��_C}�����~�
F�s/��D�(M8�q4�X����3&g�<��#6ý���+0'5p��v0�
��̢��nt�$)���3L�4�3L�4p�&�����JG�ĥ7��B�����# ��b1M�I�P�5����3@�X~hj��(��C��v5	�N���N�$�5m%I���F��w�!�|��r��U*�UaC�1�L`z�C�N�;È�3{Æt�r�ZX�hA�.`�"��]a��;�OɔaB*�̦�dn"���
��H�0a7��f�v��n��J�a��P�M`�栩��jj�00<��$n��Rv��,;��`h�:�o~�h́��D�K��;h&��f47�(�;	���$�+.�Ρ���9�AZ��v��X���33s3�0;	�~fv�Y�,�01;L�3��?��;� �n��fk5�`A:k:b1�ƶ�L/�&&g�ZN��P F���j�U���Ѐ?ar��F$Qf!cU�A�u1(��	 U�<L�s�)rFc�3z_90�Ķ��|�PZ��C��J�b���P�q�4+����2�j��E(tY�*�����Pk�xEƚx`ⵀv�MBj=?�aa��h9��h7�,13�xwP�Xߘ��㭚���4�X�\mB�e�I�	#X�L&l'�������
!&��UU��^%�#�#`h�,�7�w
��q=l>�2���DvO��;ô*�A�x��TS�q�U(�.P�
��X;��	���� ~���f2�İ^%�q�:q�����R2,�L�sJ�A��4�j:0������e�i�beo��gH��������n0�$ï5b�e��L|A������~�g\��e��G e�wqf��&8RT�c�UQ�A
u�l���A�Gm'�5���D:y�#N���g�1�Si��1��Ό�y���3�^�Ì�o@w�������`�a�+EM�	���@�\�F1@��mfu���>�1#/e C��Pcc�bWi��7�
�A3�5
��\鑈�h&%`��
�gg�֗
�P�D���N��[�V��=!7�48�(S�v�۝XA�UCemSfp��f*��{����"�X0#*]ghT��P�P�P�‡��ġ(x���Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�Y�fE�t�t�t�t�(����uV0���.s%A�*t��Lz�Q��9��:���p�\~c֧�.\D/���@E
�����T���^*0+��/�t��`;n�93&

Fc;�"��r�*lt���;\|	�v7_
�E�f�E�2us^���[C��xE��y�頁jkɟ����̯��5�fLD|�ن�6)��Q�������B��>��]xY�y��5��y3^f��e;O�9�a>���)�F�	B��PK.3Y��U��1�19bunyad-amp/assets/images/reader-themes/twentynineteen.jpg���JFIF���		

	

++&.%#%.&D5//5DNB>BN_UU_wqw���		

	

++&.%#%.&D5//5DNB>BN_UU_wqw����X"������sq��=	�W���`h�6���wCUn�
ōy��
��<~��v=&T��V��W��~��5M������ĵCsn�T�Vϯ|����&$���Z��o�8�09�<�i�^J���w��V����=h���~�~�7$����[�|�l�Y��:�������J�/o�
����:{�������q��
7=d@��U�t�q��AU�x�X��`  
�0��@ �T�|���`
�;���/��;�/q@)�or���וz��@���-S�m��v�T� @S����ԟ_���@���<b�˽��@@@��ly�w��2�}R  )���Z��9{N�����{��n�]�V)�^��
�U<g��z��AO�^⟋����_ق�
�3���~���}x U�=��'^�'�{�/�jݣ8�D X�W�u�oَ��.�u}O��y�wS����u٫������O;�G���z��,yOA�+V���t�ӥg�7y��G7L}T���Bj�G&���܋�1ǾGs�[�Ρv��S���98y�<��|�}����/��x��O��y���jp�g�~m�>�t9��K�����~�4G��:yO=jj,�`>k����>o�>�c�ט�SãCvS[w�(G�{�cO[�|߆}�X՜�;���}nu?_�~o�>�R  �ζs��V��� 0ȈB>wR�O�����CV�@<�;�K��>s�>��^� (�_E�k�a0c�=y	B�縞��_uȆ?8�q" ��٫���>��
V�D""�Z��w��{w`�:��Q��4h��n�0�>���HeDDDF�5��zuo�����#k�F8kӦ2���/�x=:�:qw;[�5ႇ����(c�^��s<n����Ыō[�u�^�:�ZcwlY�.5�Z�}-�F�0�N�:��p���8��G����K�pӯN��1�4k��c�_}_�����L##
Z��r�'�oFa�����]Xܚ����vΥ����b�@��P�!
EA@�ej(r�3�H��ĝ"�S�-J�݋X�#<�n3АM�F)!34�L�]��,a����=.��+-��RI�6G;�D
 ?����@J1��[���	&��i: ����U�2���BЀ�\�B����"���"�R�
"�"�+ �JʐBҲX �Zɼ@5�+gL��t��U1�uS��t���>�񘆴�zo��l\,�I�TX(?��7 !@"12504A#BP`p$%3Ca���E-��u�5���$����� 19qt��̮"��\�r@x��g?��&��_��C6��
���cJ�GO&0��%�)���/�����#�W�
�ӂdJۗU<ֵ�G�V�#b�:��H�c����-��Dp/b(XYKuT��#{XY��1^T9䳾�yM*ŗ`x݄y��h��B�r!�W!^��ܹY��/潥W�dX(��|d���E����sU�H�,�cY��B�b�
1&0�E����s�V5�r��*�%���J}u<�R���T\a,�~���F�G���U�|�;�I�>��XN��46FW�=4��[�"�2MB,����qF�{��UF����BY�z�1D�
5
U+������-;�O%��=bJ�b��j�e
>��;]!VC�&��q��|��a+��G Ҿg�]+�����A�'���ߨ%!�,^C���ӳt�~��}�ʹu8�*U�J�E��)
�Ҩ
�y0��aƝ�<)n��0�r64W�aܑL���S%�����j+���TJ<X�����1�%� ��}r�8���F�H�C�&MY=X�P�3&.��:�q�l���*d(�K�iS*y>D�n�(��Di����I�qa���T�vQ��IǁM$��^Z�ǐ�jI��<}Cjv��{d��&4mI:�!lnI9?rl�:MT)R�$��9F֦"����U�4lj1�kR�/^Yʺf�q��5Z���5X���3NV�qF<>��w�s��k��7N�3#��H���<����<];9�u����,�o��p[�b���1�M����K���z�k��G7���M�-3&uV�Ֆq���Q��5֍�Vo��lE>J���i!�4�JtK}_KU�4�����'�m1ϊ'Ukj;[5����t����E��`�Ʋt|<�k��[
�}̾���`i�R[�c�--:kR�Pici�i2���EՔ�+V|A���E���z�ԡy>$iN
�����Io���
lV{�kUQˊ֪��Q6TDD�6N�kUQW��x�<g}�3���g���w��;��x�<g�3�������w��K��x�<i�4��_�/�Ɨ��K������X՘��?��Ƭ�ՍY���?Vuf~�j�[ՙ����oU���Õ��'�}���J��ȸ�U���O��+�v�����s�{a�	yWL)�q\�Ou�B[z�W�/fC�Ra��"��+��F!����R)����&oqa�	�LdL�bCk.I5oMϫ�7`���W���Q���8Ymbj�E��X�>fG�5�<�b}OM��#ɯ�x׵�������R�${'p[������������Wl*��k~��3��
��u��o���|�w�|�n�U�N�}��:��~���S}͏��eTH�Ȓ��8���G�L ��l�T�/c>��EHf�x�q�$�����2��5��)�Y���f5�3��*�準�S̽����3�j#:-qV�
+�X�>fWhd�bIu���#ɡ� ���|�|�J+cN�H�
�HxP� ������sy,c.&���qc�	��\W"�3�E:��R��m�2��g_#b̙fK.�M\�����~�l��2�7]�,?�3�Ve��C}mp�Ho��[�v�"�_��0'�/u�o����@�y\�Z��̛�'�^UM�2�-�	L�k<�]4HW
dژ�Y�<
�;�)T��ef@O��o��[�Ł<Ə2<RO���/)+=���e��6F��k%�.��
�5s��XF�i�u!�)���cc}ܩ�颶Rͩ��^a����sQ�h�4p9�"*�"J�"T2pb!Hь�x����D9���^�TO��<9r��|��yK�F1s��E�}:�
�b���
&�}xlc�����X�X#�=4�%:�>E�._�ρ��3[q��Ģ��r纚��/��, j9�|Ht2d�~�,+=?6-���M)收�%�m5$��2%F�5T�'ā@A��[M�Q�X*Z�I���h��}�m�*�]
rC�t{*��j*̵����
lZz:�����U�9S�TL�APP���$
�*@+.ڋo�k�7�y#�F����9GC��wܾU�.K��6+�,��ɨX��M@�'EJ���Z�jW�H��#X��R�$���u"c]�
x��hkwc2K�jç��G�u\�qa�N��[��ËuU]�{X�H����]GR֩
��cdېc�4��k\[:`@u��G�pRG�s<���Jc1�`L�,�Ȏ��d�hN.�{^�c�C�C�\��C-E���>x�%C'64��U�_��L�T�K۔%#Y�D�l׸lkNhL18��bRL��,̏�mGత)B-��.,�9�A�*승gH��W�ɤN���l�9ʮY�m(�����
X��G��}q`
�ҲRаRm+��YM�Ɠ0��,�`
ig�O��gEf���$X�f�����`�5�krr�'�<�1���9�Y��a�sF�����!mԎU�*/�ɻ\�=�������	m/���4�ȞkZ�8�[Z(��
��`�NB��e�r�T�T�tɈ�Klq�7U�Ji1�]R��x>`$�<(�a䬨��&f�0�y!���,$v4�:���K�,�=Deg1r�ʥ��s$z�j/ʛ�vN�L�g*y�g�}6Nݓ=<��܉^~I��X���T��0�5��XH#�sd�5�M�r��.Y�r���t6��&*F��*$�b��0f��FU��+�8�HT�SN`�]-�I�Yzj�$w����Ԑ0�Kg4�%R�Ēŗ��!�|���Șg8.3�rsc��Z�12���;��M������~_�ZΏL�y�}��$
���kPcA"d���A�IbO1�]Aj*���q�b��3Ai�rS&wG\�`^BK<-���ɋ*�lH���!7�X^���U��B&��P�E�M,9D*�j?ʗ�\�s\�B!9��R����r�5c#9mS�H�T9�U+HR��e$�Eb0��(LQ�e ��
R����(�F�#��w���ߛ�g��Tp�����✨�@�LF�@qUsQ�P��X��ɻ\�n��܋^�d��&9]�琯tA bG.j?����Ob����~�s�Q!8�U��N�F��Y��1�
��?o�f�Či�<�5�Ej�c��+Q鄎�"-���G�B~�,�q���Sg�tL���«��0&��*�bq]�t񳥍�C3�fsٝ@�u�Hg-�b���l��7:�gR,�E�H��u"Τ9ԇ:��TꃝPs�u`άՃ�����_�rf�\ӧcH�[����wκu�3�bys|��+�*�
��bf�{fٶm�`�TTã��h��\�]��*���������sq�Ev5=6ͳo�\۵U0�����4�P�s����}c
�g
+S8S8S G�$*������3��|�;o'�o�zb틶;l���c1Q1Q3�Ix�Rϔ�o�랹랸����l��s�=sg\�qZ��랹��wf��Wb���r���͍R�1�T�+��2-�>��_�[:���Eβ.uqs���\l�c�S:����Ƶ��G5>�2��{;|U���h�*��E���󍘮n9[�T�ͱ��{P�0~���Wr[�<|�bċ�Wq�c����T�4CZ�F�)�7~D�;9�t�꺰�D4�G=�OF�ؽ���v�a\)�Ugwء�2K��Ǎȟ+A9�G5A?9S�c5>~3��X�91=U ��膜�!��F�3l۵�j�I]��R��1�F�&�}p��`�V���� UWuFm���������z�<�\j�R����9q�`��1S8s��*�D���k��
=U�A��le�w4h��/���ȸ�EDɾ�je:�c���&*v�...;��Z����LT�LTçʙ>ln��͓1q|�Wh�\���X�T�O�پ؊�ظ���������/ʹJ(�j�*b�?�r�W"��N��^�����TWn�do�5&NҚ��N:GT�X��Ţ��R^��k�����;������;��������O����M;~�n��{������qt��.��_Ev�����h�S~���ţ�ţ�Ţ�������D!1"AQa�� 2Sq�0@R���#P��3BC�`bp$4r����	?�K����Oc1��2M=���G�8e�;#���� �bU;���
Dc:��'}�ImPrw�9a�	�֮�U�,� �9׌�j8�`]?�+h�r~A��;���b��	���t��؃�Gx�sͶ�.b
ip�ZK��5Djy��Yդ�y�����B�.%�ǰD+P����XY���K>�LW�&���X{��(��
��D����̠v��W*�5�ܤ�s6��5*��W;�Raݸ�s��NKdJ�9Mj~k�:�M�ZA�-�H��`oW�sR;F��u�Tу�W
�K_YGR
�CU�P<���w{�Q��BLC'�V�qՍ�S$�@e9S�>`�bV�ͧ��Z/6���9���:���)��*��oέƛ�Y�����ޥDU
k�9+�)�'�&�-��g_Z4�:=f*�H�ö�w8�"�z<w�Dc�h	�8l��f�4�+28\.2r3�N�q��젥%�2���4��A� �Y�R�+d��R� �������C��5�B��ٰ���yd�1��葩$����I@*	z~��܉���ik&IonHW��Q�9F;��m��P��]�>1�`w��D6��Tv�	�����q��1K�h1��.y6�	O<��RL��XԓP��Sjɮ�.`�LP0�m���h�矜�����`9n��䲮z/P�I��a�Ғq¢�P�����G�.��y�
A�lEFS,ͤ���u�zͯt�r�9��b`m�26vmD���_�:8~$J��{j�@�r{����0u[��6��g��'���A,(��seX��:�x��N�����yF�^�5�#0^��GW�P5O�5�\"#n�H"��J[\;�!�5l6��P�Q��T
�g�c�0ڡ�F��`�T`�����ʘ$I#��
��� y\1DΜ�㿤�y��n�פlj��ճ�FЁc~�Q�f�pC�]dΟ�Uh��&*������:���pFU*z�r:�3���D�H����X��^V.�d�UlNS-�,H�U��+4��8ˌ��	V��@�*m�8�Xi
��%s	!�P���'�&\�Q���I�*���96�g�\sAS����;�Kw�B�X%#��:ۜ[5�L�q���Vhس�����c(ȍ4)ޕ�H��0��pEr��iD����x�Es�Ʒ{��\E�q��Ԧ����h4��Ndj/�2j�Q��l@�Iq�{w�bu�	��>�yD=��K������
oY2=�V�_�x�
��ߋ��@$<�s��>Hȫx�{G�N�.����,�W<�5~Y�W����wd簹�g�j�� ��G��!,�P��u�V6�/��kr%'��=�Or���B��:rX��VQs���4�YE���5
C�Y f�R��~�6!�&LtӅ!v�A���Iq�Mq {f��,R&�k^������Is�d�&)�Ɯ\R���X���	 \�ssK4z$+����x�y�a!�u��ź�\�m��*J�Bd���N�瓘�y�a!�m���Kt���ʎq����s��:\���S����p��������u#�����@���t����a�J��i�x��\��(�6�H5��!F���$:ŔM9c��:�i�S�������S?���#ȉ$r�}�L���Y#kX�1�rO�ݿ��t�W
G��?X��?X��FA�����{gI	@S�UH�����1�H
]�����2���F�Kx$1�w��è���l.95�1�s��Q��$1�u����RI<�i��d3<��Բ������/��d�u��<Ea�KѸ��F�Y�h���]U�rA�9���w�6E�:�n����0;�>�:<G��*˒����L�
?$rI�ȏV�l����b���I�pB�ˬ�sRꤝ��"N�g�}ɳ?)�$�l$�γ\��|�7#%�к��O�tTN���(]��<ˌ���wa�.�	���q�r�+�]��)92P��9�I:,V誳��TuӶG��du������FG_���*��ʩ`�X<��*��ʩ`�X<��*��ʩ`�X<��*��ʩ`�X<��*��ʩ`�X<��*��ʩ`�X<���*�Fb�-<����k��%����%����%�����G���y�Oi�}Ii�}Ii��~�?���#�/�G�_��ҧt��D���p�>3�y4��'��|Rf8�����b(���goC>�@H	��4d��V́����W}G��s�W|��P�GƋ�¾��x�_��������eVӅ�q������m�NkV�q�#eǣ�Ȍ~JA��T*uu�;j'��V]	��n�!.��@��?���G�YGsgT��M|_���W��h��%|S����J����ۡ.��}IFu>X�Rʸ�H�>��V�<�`�ۅ��
�3ge%~���~�)u:�{z9#�#Na�G!du�zR.��(��O��;i0]�$�9�`� �>��_�JY�+�T����"��yW'H;U�s�d�N>��4��J�����8�ޥL�A@An����X��n*� T��#��;����S���L��="0$V٩��̣R�յK�
Di�ᤚ���cPX�����ά��o�]�9x�$���
����j�X�����JϽ�d�sZ�2ōepjI��a�����t�
>�X��*�Iҥ��GD,[h���1��@s͝���I
�Er�Ϲ �U����3�����orS	���ɥ\jҎ:���iQ@L����i
�lQ�ϖԇ�op�s����N���z"-����SbA�!)׏ܓP�;͌��O����J�3�#�7U��m)��Nh	����N�Ip:�u��皏�f��!�"�q�����]���P1�@hDq�{6%H�"& ����Bc
�ՃQ��OC$��5�@�݇Ќ��
�2O�
FGS�V �Ս�G���}'ڶ�]>��-�G��\��(*9\�d�sx��
je}�74n�~��Ɨ݉bwf�.Zʤh�o��Ww	>�ݘc8;V�8:FK�:]��9B�;����_1�y|�;*��m�8�]�v�<��I#j���ڸ��drP5Kp�Q��8)�U ��Mq��!Ɗ7�
c��E-3��V���g���liuD��\v��k���ű8q��7�A�5�c�����-�J�)���4��9����i�\ѕ��c%����^�--�s��2<�%��Q]A��!xnFu�!���ֲ5��l��4e��&��
`5k�ˑ��m�c<)�Np	�"�����.�6"8X�O'2��$R��P%�X�n���ǮK��-�'���si$f����
����?&��#���U��j_JU� o��=uf1�$�b���YJ	u�xWo�st�o\G�ꨞ.O��_}ٱV�r|�\��Ј��8�Ts�"�"��ĊKi�#[=���� �^]B��+�N��Or��r^V�K9]�'��j1,-q�C�^�
Kun���!R��Q�As�4�EBTҹ7!�.�@T���夰[Ն�~u�41[�RtN�^���;ޙ�AY"���U��ȹ���#�l�&��V�z�,���:8�\dTM%�Ƹ�`2�J�&�b�AOf������:��R�
Ų�aYEk�9l�u�I8չ�4��8c
	.(E�i��]�A�p��#9=ZpsKґ���Ү�Ɗ������K-[�ԵnR�s�O�����%�1�~C숢
r��1�j�>5w$I!˄8���6��W��[�WUO�n�?=�B�?�s[����5".xj U�_�U�?�U�?�{C5p֔B�NHx��9rP��歸���(�u0Y9������;ʱ�T@Hd��*[�
�lٌg%%N�U���J�Ӓ]G�(iga�Q[5��Z����CWq�Z�p�8-W���M$s��Œ�k����ı~�U�7p��1�a���6������TJ$���@���P���`1��US�b�0��_����rg`;}I��*���{
�
�{}`��8"KdQ*?��v�WP�~M�T�b5�*dY�J=���w6	�0*3lO�W��Hm��k�Q��\�)l�%G����;v��\YıLp�]{5r���1Ak�v�\�3���Q�H;sMg�5/�<�^�SƢD�FX
Yg�R�
���pgj�䨬x�"HN:ۨU�Z���gG����WB���p����K"���A;�t�l���z�}r0Xw��Ι%���z?
�>�zth�Mes���=�C��P�=A��I�.P��P$c��!f��Eq	��z?
�=��V������ڎ1�U�&�5���=b�m�T�Xf��]J��\��rj󾺱z�|:��4i�U�v����눑&��!�$ձ�&8�A�jЃ/����+��w
�;�[qI��{	5lyٶ�I�j1��������?NM�,R�Y����!�`]�U߸V
�oԃ�W��Y:"�b�S?�4+w�U����Nc;W&1�G������O*s8^[�s�r��J��8�V�OY�^�!�ȥW�U��������p]�E�
���VW<�74L��يj�+����m��}�)�%K�Ȇ](!x�㊰���g-o���`U��j��&��e�0�j0�ܦ���8�w���ܵ�I���b�L�M�D�p?�7_�+�q��}�~�as0e�l��7�R0|�Pc�=������̌u|�ޮfX��|�d	�t�!r:�SHd�-�Ʀ�I���o5#�~'b����΃��������U��xR:0���O����;>&�fu�fӱ
0��B���힪�fÍ_,(�1�߱��ћ�pM`*g�ΣCy\��m�+��X���5�3��e��3��w*\H&���G�_��VC��z>���J�� (��eI쫄f
: ���?��e`ApA��:����W/��N@꩸�N݃�1C��z?}�� �AR<�1�!��F���*�H�#�"����Vk5�υg�4ɞmu�Q<Ug³�D�Q>O��D�Q>�˜�S~�ߵ7�O�S���r=��iGҤ��K���5/�j_�}���'���}��E
(���~&�KKKC��扢h�&�g�SK�����β(�'Ɖ�:�ʶ�?����(�,FN*c�G؏H�B��_`P�B�(����j��;}i"7�EL�2��S��N�5:x���S'�L�52x����T�Q��S�cD�]A�ԩ�R'�H�5"�ӯ�:��a�(�ڈ�(�q}�������jF?���S �‰ƣ��:�N��Pҝm�i��В3��_�)��Xv����^��[�u�X
�KA1Vă���V�jߠ�݄p������o�jՉ<6h+K�!{�ϵ�]f�����
|�mC������!�R�I�ǎjl09���*='��n}��}?��o���>����+��~g����y2��5ɗ^Y�J�,P��r��\�}�W!_$<�reזk�.��\�u�l�&�f�6��5ɷ^Y�L���reזk�\�u�仯,�%]�f�&��5��Q�H��~�J���rUߖk����\�w�䛿(�$]�F��������3\�u��˯,�&]yf�2��5�w^Y�K�����-Q1 !0Aa@R`"P��q���?��^���n�>��"�w�a�
�2��#�z��瞐H[�I � _��*T�	��v��e�1��c�YD�a~�P[[����bm�	A��J�B*
P$LVm_{�m_{�^��k�B�AYN{��G_�ͩ�+6���V�����B�
l�
(�gl������ ���=��#��ܻ��\��8�{�\����V2���!c+1�1�1�1�c�,�X,�xX˹�IB�>3�c>8�z.A��*|�8�cg�b
Eԋ�Eԋ��D��ѧ�F�l�&M�u���U� �h5F����
A�T���
�,�x*�4��N`qA�;%J�<R�O�?��/0Q !1AaR�@P`�"B����?�A�5G�1�=W�ϯ/|E-ϱU*0���C��s�<��W�ĂO09
�Uj�į��ܑ̅q���º�>�W�w�W�"H$	~2D�X�d�+l��T�
�V���ƸC�(Ѥg�m�Xַ(�S
�?@B�1э��o��J�*T�R�J�<5�9u� ��
p��F�D���G徔a�c*uF#\`�`5�&4���D(r�,�Ld�U��V��Zo�i�U��V��Zo�i���a�D��`�Mܫcʶ<�0ƈY[� �'��ˑV�o�YN�A�A�A�A�Q��WN�U��zb���$�W�+��ʠI�$��$�@�S�Q���q=O$gv�%gv�9ܫ����P�����0��"�T(P�B�aF�B�����PK.3Y\=��:�::bunyad-amp/assets/images/reader-themes/twentyseventeen.jpg���JFIF���		

	

++&.%#%.&D5//5DNB>BN_UU_wqw���		

	

++&.%#%.&D5//5DNB>BN_UU_wqw����X"�����YV���AADm>W�� �8��:��+�b�J���(r\�311��}���]��*��O�栆(�ON�A���S���[�梆&4��J��_N�U8�'1��CLA�����R�S2�
��c���s�:�N�eP#�9�c���:`�Z�:�
�����a�65H���)�6ޠE���Clb��(�[;��{�@7=lcz`�Z��:oz��6,Lnz1�i��PZ�5u�r���qy���ӷ�d9':�Mm9^�DHq��XƱ�q�<8�Hh[ו�'{�#����Z�5:��e9ttT�j��eW�A��C66��kw}�9L�*zr�@fw9��1�b.�����	$u44\�����q�kR����aES�%eM
��PmL�8���.n�w}����ں7�U���…�ȹ�zn��%�0��[�OQ�P*��-��C�;y+GoJ
�3k]��'>u��ТOt��l����ѻ�Ӭ�R�����6FK4ڎ��Ⱥ���JI�
l�	m
�WJձ2�Y�Άu���;�YY�^��Vi�Y���_¶�� ���6)����EE&�i\��l�*�x�͚�,�ظ�'{#�ה��,�d�͚���R��H��B(�h�Zt�9Ώ/%/˓�[����d���wJ��c2��ry�p��_3r�W�]��\Ο�c[F`��$�E�h—�Mr�����݀�ǁ�c�Et�E�PGN�����㵭F���,P�^��=�jP�3�0U(��D��8%�Jc�Mnn�����7
ꂀ�VT�<��4���ן �-�}��@U}�V΅d\��o]�/#���x��kЪ�cϵ<0ڹ#k�k�9��gݣ�JI=����ƟZ�-ӽ0VC
�˥V&1��g��sC��k5�\���R�Id��ЩV��#"��5g���5�,e����<�5�֍�ccg�:YlH��FGm����R�x����ߕ�H�9U�������F�x"c#H�=�\�:G��U��e�S��5�H�{�{�G����8��5��5�H�}�(�*�4�A�2SF������T�"��*WtJ�!�*9@��|͂�Җ�F���μVkJF�*�$N��)Ů�F+��U>;
����5s�^�I���U�Ӏ�G*�䖭��z�Vuk�8��F�;l*�-Gn�
FEV�6�ё�QW-��MW����"�=:�A�����O����WI �3��nC��8����Fڑ9�"���&,�ڞ��#� ��x�.k%�noEҫ���_Bx��4�:|�Uc�yއ�g�dVڮ�lWM����	�i�M��w��?��v�$|��ֹ}K������U�*ύ�u��d��u��u��v<^��f~�������y�/Y֎���y�\fۯ
dq��Iۯ�Z}'�qT;^�_��(ez_R3%�+�ң��_2�/��(]�<������g�W���zdt44*������m��9�G�Х�\o��'��K@Ϸ<90M-���yNjc�soVO㣟F��YFT�{I��.�zY}C���LF>n�����R���$�JY]Ә�Дw���<+��G�9BKS<�y�|�>j��N�g���^�����1�W�:�@s��59w�OZ�|㛍�'�؎+������=�O�[ν*�K <��:�
��f6�����7	���s�y�m�b�����E띁���ɭr�ÌΞ�޴���=3���H�nl4�(�ڵ��i"%Bm���[V�"f�DVk|�1��]L�1zL���2�fՖM"�LR��Ԅ�ZV-��{LR�ڕ���e҉��c~��H�����'�-{Mq���芳��i;1�ׄ�k�\=yޑLG%�����"��i��WZi4�2�0�kiKc��S+[��Lߏ-�y��㶧Dt"<��L�T�S�X�)�������`O��9���M����8��=ޙ�?�p���w�'��p���w�3��rݭ�K��F���w�3��r����^ʷtg���O,8�n��z8����kB�s���(�WH���5���璫Z�r6�r���md�gs��4�(�ݱ��>x4�����c*�٘���r���dfU����V���5��i�b#�����<����*�=r��ͱ��#���V_6s��Ι$�z���̬'�0ry�^�fyoĭ�W�o��$0 p@���i���-\��+��L2X6�����8��(�Dc�4���^��ͪZ���i ~���R��KSѣ��i��y<=-/�Ե54Zq�5-/�Ե-���jZ_��jJ?
0��R�3RԔ~Y�=)S���jJ?
3�|���?R��i6�Q��KOG��s�&���MKOM��(~���Ϲv���L��|4�&������s��g�ٛ�89��۴�,Hh@1�-RS'�b�h�|
8p� l#O�h�7�)��(��H���ѣQ�ޤ���)�ՈF9ό�Q�Q�5IOO�Vw#�i����������Wgv�#�3���f.�	M�3��xI1�s�ە�Y-<�3K�(E�ȫ&d��yں��[~��C,s	yyL�t/}��N�&��<��eH&��&Z�1ҫS�瓗��-p.E��Ǚ���x9�"��d��j�X��f��Q4l��w��ɿ~�M噷n�;�nY9^�<�ԕ�ӫ��̄~M�Nr6��v�����4��hX;�+�j�:��(��6l�n�&���w���`�,Lkk�[^7��dzg&
۷nݻX:��\��T<�Hm�*!�����c���ݹ���Fj��T5;F#„�>1�k,�)��'�����g'9��h�i`���8[�巣'�z���Ep�Cl�\S�'���d���ٳn<'�*�hLԑ�H]5����8x���M��E�W�չ(bgZ��i��7e~J4f=�8�n�-����CW��OTM�V��Xjo�b{v�Kf-E�[Ml���Z�4�HX1���A��b1qq�u��T���ns��@cŕ]�i���aq=��AuZ)l�[[{x&�����a��Pk���;����w-�7p\�x�6�q]�v��SQ�?G�1oX[�]t�`p"DK��2�F��9ޯ�9�wg9��r�剣F��9��ó�SD��g�?Gɧg-G���>��BŨѣDc�۷���t:=�K����}>�K����N��=��~��?G���~��漞�=L܆��[Ym���
���9�s��9�s��9�s��9�s��9�sI�&��9���K-��=g+&s�;�7����{e���Z��:b�x��V��!e�Y��i�ag
��|ZM�M��X6r�y��iRJ˾����Y�9�n�:Fϭ�k4��.�F��-^��[�-�؋�Y,���f��Rc��=$�U�����4�-z���w6�e
���K;^��6�c%��1��w��Rm_ޝxk�W����{�q�Ǹ��Ck�'$ڇ�����?g���>����5=K[�Ex�H�.͛o��^��v�۳f͛6m����;�I$2C!�����Yd��E�?0�JC�5�25Z�T�t���h�kK��e�M�7FKƒ�O콡v��z���#�7~��+d�E��Q��#�G�v��J�	C����Hj�Z��/V��p�+�JW���/�Ks�RH���W����i�
H8jIE�v�jj�C��mkMmE$Kņ��;yU�	�(Q�>��-P���#
�1iL��oX�ҋ��vb�E�c%kl|
�aQ-Q2VR�;�0hM�O�kb��J���]ۨ��*rկ9�(SU�F]�J��L懌cn�u����a5��[�G��916U=-.�-ND��q/ �
5y8�N�un���pc��b>�mzv�-5M#J���3s�ɺK�9wL��=�ؾ�Z׹]z�P�ۓ�$IyDݞȜ���(��)���G��%�u���t��W���X��2�$�8�����;`jF�`��i�j�1�P�qqq��f0�5�c���5���1֤wn	���wf���B!"1AQ0Sa #2Bq���$3RT��@Cbr�т%p��DP`��?��Gi��n��1큨�y!�4w�LM�Fg�`��K��n������yq{L�st�-���2����e3����->�|v�L�G��->�}{\�]�ٓ��^�.����o��9�c�{M�8
����ӏe��C�ϰܷk��=���xvٞ�t�{S�_V}��;\�3ٜ}�C��V~M�	ǵ˴�Vg��۵˴�Vg��3t�חi��3�zjx�Y?�Q�{�M�?(�lXԭAØ:�?�(��|uZ	N�7��%�h
�wwq�5m*��7������� s�>^r���ثSl�/{��:5A��b�wE�њ�?dhδi��G��G�[�ufʒSZfʠyCP���/��=S)���w�a�3הGb��g6���R�Wt+�c��V޵�h������|��L�����E��R�?tH�����:�#�h�4hN�{0�3�����FԕM�|e鬰��&���k��1���\��
�J�۫�H�LYׇ��g���1KT`nKy&��U6+f<�5V���
40���G��s�b�T���J��T��R��O1M�70�(9�2�ZME����E���0<?�:��R�j�U��M�M���
�>�U��^�jP*�
5le���V���
�l�8��xU�V_6\E�?H���%;au'��Ba��1�F�4h��G�I��Z�_Ѿ~�GӣL��Ϝ�Yi�\ٍ�M�%J�G-��J�)UELhWyϺT�D����g`:��z�
�Sd�H��\�x��se[���
%9�H��0�c�k	T_�97<��(R���u�1(�]0Q�0���e�b"8�h��G�IP���gV�e3H�����u6��m �R��G��ҧ��JN�J��7�V�T����'mKjK�B��-�̜�m�ӥ���8�k�V,r�R���ڕp��UOlD���\\c �#<�p*�lO����R�z��-��KF�H�%�e�(V�SX{��<��}��;�[P�:�Wײ���hl߉�1{�z,�5*l8�?����ҕŷl�-�M�C���i[l�W�Rs�g�:M�?A)��O#�G$f��"� p�l�.%'<^2�bTogDZ>PzzAs�)�O~P
�(>�X^�r����[��9ʤ�@U1�N�""��l@Xo��
AB��Msoi�^�ee�aŦѮ�(~r��mb3%A`m��^a�{:��f"�]575���8�IC�Vv^���"�x¤Y�.���.E4���LP�~�8����o�]~1	�ě����ñ�b�/���\�%��1�-{�2Uرܳ0��}%Z���nG���"�d������.��hp��OiHz�%?V�|a�4�C��hQ���5��M��W�8X��sq����`my����
�>#�1�ڝ���pۑ�(��Vj�'�xLW80���Lʼn�z@	 =/fk1���g�ҹE!�v��z�c�9s�GR[W���� <;v�&_����V���= ,������x,kb��p��Ã�����s��-.��ܲ�6<&s�/��&N3�N�C��&^/H� �<��vil�oq4�Mp����c$u�m̽[�V�L�6^��1����,���?�_�m\�wף��+Qnj���A�����\g�Ck��]�m�|2�������R�p�![䯎�)@�
Mr�Ʒ�f�����o�lo�	���cdRCg�(#�%����U!�d:�h��K��w�%kP�
�S�4fEɽ)B���p�t^Q}-i8@�M4����3Cm�o����P�F�M�#�uq[)���
!S���GoB�Ѷwq}��JY-��M6�K��l��{_�X��p����V��s����=-t�<9J����޶(²���_��$��̛{f7v�I�QHa��D'0�_dYQ����jb;��4�:[��-%��1�N��J6�7�x�V�D�߁�0hը������'��3_��*U�D�a��qM='���*�W��j54���*ῢf@v���?3
��^[�s�w�q�]C_/�
���5f�ᔿ�^S��yѹK� �"V=��-���#����exrτ=u�������������Q���=!�CHzz�n�h}���Y��4>�f�ܬ�;��'r�E�Vh�К7t&��	�wBh�К7t&�ܬ�{��'r�D�Vh����Y�kq�)�'�'��G�Ϣ?!G�Ϣ?!G�Ϣ?!G�Ϣ?!G�Ϣ?!G�Ϣ?!G�Ϣ?!G�Ϣ?!G�Ϣ?!G�Ϣ?!G�Ϣ?!G�Ϣ?!G�Ϣ?!G�����.E������V�[��ЪթMj戮��,�3�065�����{lm�x����=�ȋWGY��s��7�"�w���i4W�i�p<0��} ���>'.I���*��No{{��+*57�fe��Dī|�=�Z�u�,��ǃ��o-{�9�o)��6��Jh��%1)��l,��#b���|�6�^)��������56?�`�׸����;*�iy�E`T���*��g�vc�ֿ���CZ���'������;
V�����7�p�v�ŏa�Cp��l8X���R���ޥ���y�'�W�S;e��+�Sz��ݑ��ቭ�p�B��6�ʼn�$�0�t����َr��L��ˀ�&򯝽�����T��ը��.��5�_�V�u}�z�[e�R� @[�c�bűp"3i�o@�52枌�wPU~���Fۊ�U2�[��o�Q�akb���0�8qS��l�0p�6���tsp#��v
��H'!�n��^���1�tJ�O
�4�D�b=1���m��×d��	�{���Y�A�M���]�CmJ��$��)P��E�F�f�M��@�)�����+:��R+Xߗ.���`��QY�.`�����6j������	���c��45��]�w@¿)UV�%GÆ�O&qc����ȷ �%Gj�n��H�z�!pR�m����Jw�)�����t���$%�;����R��<�]���Dp�S$��fұ�UA��E�{q�jFE�Q�`�]���,�+z�Fr��u83�UGZֽ����|.���Du�AQ��K��3��֨
���[�ğ9[3a��k~+�߼�tm,�<<r����ĬjT7�%�px]m�Z�Uu�t
@9|��V�v[�1|��[����L(PP����uo��\�l,Lj�X�M�8.x��J*��_\�`�]!=�����5��Ƥkٸo����<�@7�-DW^./�TVf6\��̠�5S�wo�;e���+�xU�5�}�0�ۧ?�g4���;�Wi|�c�j�D� 0&-����9Q+�o������2�;+�f���Y4}'�)q#<��G7Um�
��UQl2�"%DL*���のc;S4�n��*��b��5��N����8x* "*�0q��j8���K٢�:DH^1�!0�KDŽ|*�P=�8o�F۶P�#|Ű�.��c�PM�bB�,��u�p��������U\LX2�sҚ�D
�|���?�ҟ�h���?�Ґ��(���h����)����M����O��)wO򔻧�J=�O����J=�O���T�J=�O���T�J=���K�
�ه��I���G�	�:Jt�	F>�K���ݿ�R���)wo򔻷�J]��>�R�v�)O���ݿ�S���)�m�2�K4��.���)�ݫ�W��A3�g7`0�ȼ�a��m��Ն���A�L-�)��/��nƼ�q�,P8�np(g�ij)�dn����x��]f���-.ڲ�j���R��aZ3����iX�.��2�����L�W�o�f_D�#[�?	��Z��?�a�1�܇	�s9̥�I��j����t^��h�7i+[�]�k����i6U�?�ߴ��>R������_�.��Uf+0�(.��ⵌzt����q����z���g������R�U�L:��A�o�I�0>s]���K�┛�zn@j+��	��4���f&��ނKA�0�1�2�����~���3��d��[D�WQ����M�y��U�n�w��9��xM�����ts.��l��c2�\{�r�ݠ���y\&%�z���j�5 �BM�1�Ñ�S�������~eZjp2�񎅅Q��|��@c�aT�O�S^���\&�y��Z �&Z���YV٨�:	T���4�D�`&b҉�/+��-��a����jW�%�2�&�<'&�ϪҘ��@}�?G���>�))b��P��E��k�Kl�]*�E�$QA��Q�a��Y�i�<|�SL��P�ُׄ�_KkCh��Ǐ40��2�3·y��<�?I���\Hc-Y�bŋX ��)�����@�X嗓��O���z!8{g��A�2��*!1QAaq ��0��@�����p��?���|_�1#�)w 0�pc�6�@J��x��Ϳ�K�φp��\�._��qP_8yD �˗�� Ǟx%˗.\�r�ˋ9��#	+��|���˗."��>8c%���.\�r���w��"D�+�@�.\�|�qu4x���YM�3�LA$�P2B~7�-XFj��M	r��o��o�x1�y#��r�˗.\��j�#�/�n<3vn��<<�O�o+~f<�˗.\�r�ʼn�l�1�c����r�˗��)G�/ ��.\�r�ŋٚ3f1�~���e��8u`�d�r�˗.\xb�<3v1��e�.\�r�LJSV��2�˗.\���l��1�ѝ�\�r�ˉ�������\�r��i6x~�1c,^?u�r�˗!Úu��\�r��f`S�X�1yr)S/��*�ɹc�F<>��	y�%�X�1�,�/E˗.\`Ëڕ�@�����X�ŗ��<��*2�2�ˌ'��#
DT}Zq������ED;q�^᠇�pe�k�X�.>��Ꮙb���)�U��r��Bㆸ2�r��&ɧ9e�����Y$\�(�(�ʼnp`˗.\�L�QIe�0�)�X�#��hc)wF_ 0B._X��._ ��������YE�![�ʰ�\C����	���EYa('�=Mъt�}���	���5�_��^7���g#B� w�Tp�b#x
;bB�%���S���֑[��u�耝3o\[��#�q���K����]S�zf�F�˒��2��MfJB`#i,$7i�,,\C@�������;��2z�EI�H���\ �F����k� ��Ln�N��m�
�v,]r�H�I�0����K���M�X/D�v�:g�MR|K�?v����F_Df��M�Y���~ͬP�Dr
Z�˗�5X
�h�s����p��[�^`���R�4�x<
�����Rm�@����(ف����Pͬ�L��X�ce��yJ����et�g;�3m�C�#�D�i�9��l0���›�c�3��.
��G�ef?�� ��=j��Hf�E���]vSU���lx �`W`�/��¢0QD4q21���+X�`��5�O[�ЇT:"Q��S@�F"Cɮ�F1U-�aX�P@{E����p2�E�/�([-��^�.�Z��BUn��s����0���r�Ų�"k	P�:��W��z��21+����l�S"0e�c�?��qDa�Z�z7���<����I�Q�
9ݰ!�o�l�a/	0���ڻJDK01�dL5���Y�D
�����faHf5���;ҷ�^�!�a��.gCFYǃ�Ɋ�X
����c�	]�X��#$�����~�U��p�8� ��;���H�*���B7�ل���dI�=�q�i;�L�{^�O�&�!�EyD�S�b�,�w��7W�����	a�D�"�K���~�@g�w��o�ܹr���I�ȼ�-���2�vL�L��v����K<��t����*4!)p�Г�c��v��Lo�3!�\Z�+�F�Я
G���5����k-�2C�G
�e��t7�z:����F��?�ʗ�]�u6\ qv���:�9H�#�R��?ؔS�ͱ4�X/(���:�_�>���'��x�
J`US���ЍEf�w��v��熉Vy�k�^�A�(��	��`L���T�֚�)�������d:TA���ٛ׀�"4�(W��Y�&2�íJ�VD�7*� �(_����T���OP����#-�.ySA��VEKR9%��e�~V`v�
*,<�(�j�6��G��<�#v�dW�0vA�$���0&�	����h�A�'J�b�<c"�ʁo� �o�P��Ȯ�?�K�Z2).̶���=�����3���gp��*?pऽW�B\k�͛��G�=�:PJJ��J�Q�L~�CШ�h�%#��Y鍢��lt�~�T�bA�^�.PQ���-��y1�IW|���;֗��P���&̶}ٜ��>i�f��Xߒ^��CS��~e�P�,ՙ{*��B�2�A�d���mt[09�dr7-٫2Lo&�>�^a1q)m:�d3śε)�<Sf��o�uτN�#*�:�	W�&� �k�q�euEKe�;H:ز��;�6�	����@dW�����\�%�vdU-'�����톳a�V�y��1��y[G�W�+
ݞ�մT�sۓ7wlc+��=��>w�S��>xk���Q��
S��fp�<h��n!���Q��~XV��1F����+���ۺ��.D�}��
n��%��P�+~�z���a�Pih����8;eS񈄹F����h�⢦���c�3î���P����`ר����j��;��*ڗ_� ZS��nU`���4/�^�kj�c���W���c����p_T��F1gr6c��'�\V1�s2~�A��+��h�qX�Ř�G��e�>���a�q�V�&P�ln���0vAپ�a=�w���O��}�����/�����ek���?�w�~ֵ�kZ֑��a3�k���Ӄ�$P�A)w7�7I����mc�ey5�&����1�}kE��GT*�``�*۠AN�;��S�N�;��S�N�;��S�N�;��S�N�;��S�N�;��S�N�;��S�N�;��S�N�;����;E�d���Oŏ7�������t�M��:gs&��Y����5,�ch�m�V�ª�/�v
��b	si������r�8i�e1J���;�]4�6&���h�(=��N`�/~'��0(�D��Ϊ�6?��Ǝ�����6J�Pb�{�Ex`�#�r�J�x�03X���1Bh�x|M��vSF�0��hk�(�x������E�
�U�V�?��"��Ty^��
�Օ`�U�:���|r�
�R�/p�wRݹt`aG�F�)D%R�WKnax�"�G�Y��@s5��S��
*�%,J��E��ݸ�4���
&E_B��^~W�̚8�%��Q9���rmJ3�1@���r
��*^rȈ��=�b����f̘�����D�o�x�{��
`��W*������K'���AN#j��i��.,nYue��Q*!t�&�U4d�T��&�b�V�Y�7|�)/W��
@{�]���:�T����JWZ
M��	�")ؔ���ν�Ч����ej�d��h
�01��(ZC5�A&r� �!lJH`���x)"5�J*�YfXu�
�Ղ�]W0qi��ihQn�b��P8��e��A�y|�+�xB	�������+$:���*�C����nt��)%P7�%�$*�������h"��33�"�Z�.�K-RW� �oa�*����=����d��8����dΡ�bK�1j*�Q$t��Udx	|�Yn�Ph��J�`J�,��&����%���y�.��[l-��Z*`��q�G&��m�fF5�b2k�)k{`��j*V�1W����C�4��yrƲqp֐�ݽ�9Q�6�]� 9��]�f���Ӂ"�� _��4�tXGw`�B�Rhi�B�6�.WZ���ci�P��k�A�-��֐�&6���eP��?� ��D���m�����ȿ�P?�����y�����w�O��$��������@k�t��;ĥ(�#���32��B@�
��D��lo�����`,�a-A�w�P}A�/�
��a-��Bn�ZFZ�J���1lQdhܥ��a�̆�������
�"�#(�t#Qي���G��!�b��R91�s��F�3`����������0�Ȍ�,���b0D�e�n����b����|���K$Uo��
��P�^\�����bN����aSG���@�R%,`�8�m�����=
���t������E��p�ů�� YF��_F��]���ݐ{y%F}t���`��(�lF&f�Ž�8�P톮o�F����0�*���d�Q,L\o3D]���r�u��\^Mx'�p��<d̕��L+s;'P��Q�쟂c���S��3d+OW/�T?�q�4�����R4D2B�Q�28�u-�z����kf�>hfy-Jfr�>U~�W�*��c�,�p��E�d��1!��H%˄� #�1��(�Tg�=ʆA��xШ��h��70_��n,�H��<��U����]L�n�������ʼnV�]2��me�j111̻K� � meM��ԷQWQ�I���hX�K�3Q�a�f{�.�z�Z��b���`G`j\f�]�v�����p�>ZuVA�}ô+'�cΆ3 .�<�7�D��E\Q��n����k��Qơ�Ea��M�Ј�F���å��:�x{c���3܇�q�A�d��W�^�z���fT��W�O_H�^���t}�=�Ԡ��fp���;�=$z��t�N�b�	IHT*PHt�3fn�k�/�%Qd�?l�.^!��Iw"J\9���.! 1Q23A"0q#a�R�p��?'؊iWR��g��O+0��*"�\L97vK���{�LL�y��(c��3���?���8�s���S�O�~:0=�ֺ��Z�t`���M��Ye�Y��F�t��%t����.��[B�%d!�ҍ22O���
�r�:vd�bbyX�w�T�	RlЊ�J4&�(I[516QY"�(��%���5�KvǒB�yͲ�#V!Q�S������ڿ"�%��y���f�j�m���{ă�,�_cWLHشX����J���&ݤ���5���H�LR%į�ab,U��
ݦ��m���ȯ��Yj%l�h%L�[T���,ާM	R��آ�,���ss~�ɣ\�[�Q��DQ]�Z�f�Qe��C"�D~�BB�a�I��t1eK�)xE/��R)�#L|#D��:�c��9���LĞ��
�w)䒡��(�S)��IK*�aw$NM$q�4p�+4W�.��-Z�Y��#+H��Æ����0��Hf�V�hnKnX�:�
S��t�#$���I�;����CI#	��½
xt|!v0�Ľ,�����!���R��i�F�(�L��]O?6j�T�>u�Ņ/����wI�.�{���vif�Sˈ����2��	���k~g�d���]���G�dž�$�8�i�A��E�쇉3�1M��l�J�q�9�N���}�"x�\��9��~���9��=�d���Q��?�}�U�����{�?��, !1Q02Aq"3B#abp��?#ζ`/�
c*K;e�q��:��~��x�����|���:���|^O.��:��t��˨�{WK�я�z�㯦�Z1�R/R08y���%�/c�|��"sm�ڡ�ҵ�Ug��bX�C����ؤ���,�gs�Gj)h~�ظ��l�f�t:/*(�Ɍ�;J%�{��\9L��.K;QY�i�ʏ�-�����+L�m�1Dq>�����BKv��dbv�v6O&��10��G5N(�y$~M�gc([X�G��11T���
�P�Eg���(����'�tQEVV!
�5�a��c�h��䷦�o�o��J��Yd�,��؛��,��$�9�D��a$b��=��}���	<�+Vb-���V�4Ģ���ݎ*�ͯaƶ)��花��N��1l2$Ϸ���~H�_B�,��M'y^Oq��
w����%|��\��x���-����Q�%��=|�U�����(�N7�����B'��"����=3�=4U1���\25d0S�]���zK�༊���C��4�,������?��PK.3Y]���M�M8bunyad-amp/assets/images/reader-themes/twentysixteen.jpg���JFIF���		

	

++&.%#%.&D5//5DNB>BN_UU_wqw���		

	

++&.%#%.&D5//5DNB>BN_UU_wqw����X"�������p��%h���v�gN��N}{V��x�t�q;5iO���4�=�h1 #��8�� ��=62q����|��`�|nG���=��U�=��-�=G���"��gL�0�A�4�9�;却��8�Ȣ�K���֥~��X��4�R�t�_'��@Ƭ��xm��3�wG8�FA��׹��E�^�1�����7A:)QJ�P'�j5��J�|�;�ӥ���ͭ٠��	��$A=Y��aZ��e�1����y��1ӂ�c��ة�7���K�k���uد`WŐ��b~Wc���_�i�_+T彿#�͖���P�ל�Kxf��uHՈ���?1
�E��َ�~�
���y�3�[�iZ��d��P�4S�$3�Ζ����Y@��tyV,P�p�f�g�$��)/w�^($i��@�ӎ����ҧJ,t�R�ϭ�t�+�_K��ڵ���U�[�lz[漳֭҃hf���B�Vl�4s�h����MF�3~��-��X�A���#�I���ٮ`�j�*˼Y�M���9�AvH�Y��هK������m�M���[���z-7�8/C��
�a���Jm��=Kp�Ie��&�*sw��	2�Lms�Վ�xߕOj{�tݶ�k�t�]1�u��A���L��<�ْ[rk<X�X�ƹ�����,�r��K>�KjĒ�,U��Z�)І?�������4�M4��,�I5�"�V�xkŮ>�/�M4��,�K4�M=����ҫ0C`	�ɭ��kř�4�>T1ҧ_JM?I�����d�K�ū9�}��sAK�n������_�b9�af���������R�:߫����Y�z�����->o6t6��7���>g���͠���tx�M�-r%�Ǟu]K�AS��|��ܜ�u�ź�q�Z���y����m:u����w�K���6c��%��Y�<~�N
k���C���F�n
�gk�4�`8�7��]��Q�j������m�&�9��%_�ly�p���p��t��=�����\u8��g.�?r������mjK��w�M;���`c\� ٞ�i�s0CŰ�@���@���@���@������i�T2�+ZB[���ʱZeL���})��Jҙҝ��K_�N|b�g�y9���ot�&�l��j��Oy���ˇg~�	L9y�N���{�Q,�?����R�X��kM�i"#�=�JfZk����uͭ6��=V��;:^��u���Ή�ON���yE��#��������"H��,��@)	F� ��2 !1"02@A#5BP`3p����I1��>E�y�^y�l�Z�Z[WO���2�n�#;&r]��X�|n�����0��ղ6���6|��v��K�U�]��+�Ц�%�_�mm�-r:h�b�&�U�(ߥ����Y��5���.E��y����)�r�X\����[�ß�5�M������ͪ
���<�pZ��붧�u�W�Z�U����4x� �z���p}��U����#l�o��X�Z�K���ʼn�Z�l���<�>ӭq:B��τ�->:��ת)\}!�z�d�d�d䯬t��sZ�)�h�#�y�,��ID}�äNL�GY������Zmu�P-~ʮƊ/W��,������~�֢6{*��/[�nhnu�K�}#;���ӮL�t��:�α���X��+<�T�:�+��0w{�~��޿oeJ����vUvz���D��X�oB�NJ��R��� �6���=�+.[m�m~R���[/�~���x)�?F7S~�5C��B��7:�*���rd���.�9��w�ڝ
��|��l�g��ENG6�X�N�l8���๞���o�n���s�N�ޗ�?{�CPg������1�N���u��P�M>4m�o�ƭ�7��Ck��cq5?���'�
J99���XGwO�;0`A�Cf%��0`Ož�RQRq PS\AJ�!�;-dܨHF�EOEL�W!�����w~x��%a=�H�LD����ـ�&B3�c�Bc8,YL@��DLȐ���$&0C�\�F4{)+Wކ]��Y�іֿiU5���)��b6'S[0�ۜ�()ɐkƖ�e��ksc^٦���8u��&�H�ݲ���E���싶V��k-��(��n<V�jl?�W]%��4��J�Hu�t�gH�ւ�$W��M#��f�ݡ�~�:��N��& pb�}�ŧ]e��rݎ��LD�I����Y���@&&'�L�
"@B#F��)Α�'$b"dD�u�����t��钰���(�0��gW0���$�.�uH�Ğx�"# :t�L,��h���Gʹ��1�^ݷ�4�����)m���m��æ��~�yէ�k��ϸVT�6oe����A32 ����B�&�iY��BC2��O�,Y��Gj�̀�$�/\1?�^��៓�LC?�u]�)����;�$F+Q��(.�Un@#��F�17��ʳz�]f��5w+);Z�OH��(ڪ�w�V��U��CJGw��A�6)N�gm^��qWem���J؆�|t�l�+�wƶ�������u�s�jXS��!������>��~t$�_�ג�����+?=�5��b,֗
"l�li����1df�bR��'��(Q�-�@Ou�b�ֹ�:�=+/ɷj%���d􃔒��a(��z�Y��٤�P�*��*Ox�
�$Yu�i�ʔ�!������*W����E٘E���%���m�4u�P}/S[�u��e�WU^�I�m�n���Y�b�zݔ=~��!�~���*�lj��*�ő�j�_u
voV�\�t�5�k�.��r5�~�b��ݼ�j�e;,���XԽ/\1U�&��i(ee����O_	U"J�����r�d`�H�&'�e6@�_$ZIY:���֤\�h���}
ڍ���F��`wβ�S�"��	���v.���lM�
�
]�|�
�Tƙ�}N�ZV���(�]����Z�휃t��l:n��V	��[�\j�0��X�FJ=
Ҭ��4�����:z՞�R�oή=h(�LkuVk۴��E�L ���A�ئ��Ɩ"]#0ߚŕW&W�k욅DՌȕ����c<���.LAL˔31>@�1���Q�O��<����2��&Ӷ���/ D�ϝ�X�)TL�,�I��yW�q�RŒP�Luð�ʠ�ݯj�X��o�,^�]qyUԣ ���;FIez6�
�v��l
�k-?N�zx�ؒV��V�_��<148��:���V��g����&��l�m3+q�B5��F���S����Ec[h��xN��^�h��Y�K��;f��h�)��7��m۲�|�.�N�ǏMܽ
�-~
V��l�N�����kDv���V*���T����V9�i5"6v+4u�tlU [
]�sgV�e>f�H�ufʐJ#��b�,��ڵ����yY���辬YUW�FF„�X;5���N�^�augf��,1��J8�����:�֝X��j����X
��7e�WH1����m?��6����+�\�_$�gAfU
'k�m�ю;`f���\$5N
tk����2�&��7�8�J�ҽ#VGS�jQ{�h,-�[Ǟ����#oYj�61:�i�R��|�5�G���Idq�H��x	��4T��xHy�ޠLEn<u�=�8��D�ǚǽ�WT����m�:��^֡���~���5�W*����%OsJ�d�:���f�\�����u���֪�>�·����᚛Z�)M�
�v�MTO �uQd\�N��lh��'ި�����l�k�������H�3'b��q}͵Z���;z!��?�]��m#��'�~��kg�I����g%����r����_
o��K#�ċTER�!�Q,�ƛ���uo�DZ�y�a��NcUk��D��)�@�
S�O��XZ<_�!�%Q�l��l$<&\y���5��C�5,�	��Лe�K����)ӓ+\S������դTT��՗~F�]&+�mi��mE}�
R���Y '
��J��'j�u`�AU�T�li1�XF�XK[�}r������p�ƶ��n�+SVy�����#��h��j�V�u��oyM5,�H��|�
����m3mZ��7}�]#3��^O	�u���-�hr�ց��jܭl;��^�+�e�6�>���~�E�ɼt[�j�w�����र��U8�

SGV�&�Un<>�0���8��Y�O�s4�[b�-:�V��e]-�S��I���P����c�
w����d���D�:�[W��qt���b���R<.<����>��i�ɬG��+_���l)ds�[2	�C�CYE��@�`�hȤ�wt
G��kc���n���n�{���֏(/]�Mբ2�Ԓ�jM}���p/��7�Ӛ����,"=�Y�
CkH���W^��^c\���zTZ��kLH��(�T��AI�S�������G�oRU�xZ
�$1SR��!˵���L��)h����W�V��jۨC&�B�R3)1� J���A��U{-s$t����J%�쭤�U�X�ױ6d�AK�ԛ5jmH�n��sI�-R��&u���+��)ȌJ���x�� ��z*�ӣ���o�Є�dy3�!����p��r���pG���|H�s�cz��V[�a=�‹_f�+�j�mŃ���Nn1���^{TT�������S�W5�]���R�imD����n �L�DrMqL���ӰI�~��XZ5�܁Q^
�njd<k�XRX:���v)$�{���L%㡠0q��2&tԥ��^���E�M;��{�Tpg���)�=|�F���}^��=��q�{+sn��dɗ55.�˕�Q��YZ=�xZ��0t����ֶ�C�K��>�#KHT�
5]��=���cX�=us]0���DOa�u��Zե\��e:z�����z�Cm|M���zI�{�=�S�����'��Z���^{��#gB~�;J���fN�U|���s�u9ﺜ��F{�'u����s�Y��M��ry�>$��ĺ,��C�s��u`��Y8��6'��m�.��^?R���"���'���9�3���)��vd��B�/$�C΅��?vtɌ!�(ȏ�79�gVDNNN������~�1��t��jDG�i�g&������MR���^rk�#랟&�EB�*�I�\aa�Ft���sh�^O\�z�pA}:D'�u��?oNx(n>2%�����ȨtǮM?�E.�94�3ӈ�*0�U�q��®e?B�X5
L~nc1����f#��q��8�<��,t�d��AF�\�)XU��B��K  �0�Ν>�9�;���Ώ�L����g�
����k�
�ȷ6�"�`یq�n0m�
����#8F�Gf0���+1�j2m�ɲ9�G�~o�/�5`A}�"~�Q2��X�୿�zd.Ȅ�#<e?H�L���x���O���t"�=�͔W���A�=��)�+��S�k�N3`���[_��'�(��;3�뇺(.�c��n"�����Α]?�,��Y�l�<˞��d"~�DS�bg�t�D�H����r��}C�g�0��
������/��r�:&|J������y*̬ {�U38�癩�Ϭk��-&Ą��7�ILR���
P����NE��_������ �,��f�W+8�`FЙ2S�����9�	g�F�ٜ���OwtZX�ť	@�=!�#}aQ��s� �4d����>���TA���.�����
H����$��;�(:�&[rv-|�������ʮ�/��q�L��Q!�qǚ�,a-Sb#�()`�n9�#�\�rD�}�	U��	5�"%�LZC5�+Y
tŒ�2��IV"�*�g_5���5�(F栔+�o�:ly
���b��}vC�|AZO��~�O�M��DL�I�$v��[{r@�_�p��
�MV	D2$:w�Q��S"��lV�2�m��!���ۓ���G�*1I6��#�*�t���mD�c��f��%���K��}��X�؝��̀:Q�u�
>��^(��;t�}�J]KD�P�����$$��,T;u�_/≀q�I����;kX	¦��t2�Y��e��7C�+���lϊd�D�����{u7�E���D肹	��U҉�&�O#ex�]���Y�-v�}e1����X��Y�@�V`��^H�/���
n��&R33�vg�����#��(��n�����@���e�=&./��F�� �+�\��-�� Q-X��h�3�ח�r�}G�63��Ndfi7�sF�u��	����Y����+���]q����Gj�u}:���R�\v>��/�ʐl�L�lF:��~�Zz	����b�_�k���*�]���
�Ӟ��<+?NxV~�p��:�y�u³��g��
�Ӟ��\+?N�^��
	�%�8y}�N�^~�p��W���w
���y�:�ςx�DDG��28�����u�\'����N'�q\��'�?��4LL�7��N<[aO�H�@5c����+(��WT�1�^Y�9�DX�9$��J1� A2��ɟq�%Z�X_|i��ƃ����-١�1��Vdf}N�,
u��l�D�D�TC<�dy5RS1AĐ�d�̔�Tʈ��a�)
LL��mv�*��rL���gĜ�>$��'$ω9&|I�3�NI�rL���gĜ�>$��'$ω9&|I�3�NI�rL���gĜ�>$��'$ω9&|I�3�NI�rL���gĜ�>$����9��Tx���]�4��b���K�����j���MM�(��m�f\�f��֠�o�u
�T��z�3�W���I�v��l��B7(r��a,��e����f���xK�߄5EM�Z�)�Um�y�KI����kQ��(Un����U�M+���\|GHumT���Za�֎����3j�*�����������V��lBы����^��5��X��n�,��{�H�ӵ#����d� 2F�\>�%�8���wĻW}b��&�d��v"F�f�dt9�V~�i�oOI[=%l��V�I[=%l��V���.�*�2�/ES�=%l����D�YtOd�"-�-�Č2o����$=������:�"%(L�u�&z��Ȏ���޻���9�9�9�9�9�9�9�9�9�9�9�9�9�9�9�9�9�9�9�9�9�9�9�9�9�9�9�8B0%1�ޟ���z�_3��A|��������H	!1A"Q 2aq��#0BR���@Tr��$4`��3CPb�SUdp���	?��F�S�qN<�	/$�
7Dl�rvt�V���C<�ť�V��I9��A��
[��/]�j�NT�@/���H�W�Ѽ�0j�T�ñb4���Բ��Wq-��<]�ek����X�*<q�F8�E{Xf�RY�E�ԋ��uj�IB[-�H�ftCO��Է��}�����}��N�-��u)q����Z�8��.�
2*�*j�9�|�6�Yꫴ���uYdƕ��B��C��WGXՃ��F6j�q#����6��:�� ��ދ��``Ī��3EW�-}}���b�q�%"]v}���r�o&H$D9+��Gnf�9sn���5T6�a'f�
�n$\Ŋ�S��y{:��i�L�똥}n{���]���h!)�w������RCy,=�l��B8��վG�Oh�"p
�S�i)���P[�͕���n�L���ì�64�����f��Q���JJPռ��yӊ���,(FݧsqC�#���Y�)�$�1m�$*T�]���1�]q��$��IӒ��۫r$��УK���kV�P�GEF��v�jv�o�{�F�Yَ��$��ɠ]A��Q��h��S=�j�,v�<�0ܵ�n�*]JM]�-��b`��<�jVx-����N$�Rh���-��,
�T� �F�ژb�荫���k���@�~�)���Vcf�h8��Z+���w�d�:�eR�-Sk&V�n4c9ǁ:B�I���L�uG6��9IPE�XY�G^���K�'��wP�sCq��gx��vGt�cFv����;���,I��ǁ��L�!iWd�U��ݟ�A4���.��sZ�V{'�ȋ�c�-qM�k��K�I�O-��v,�������0��tD,�!�_�M�Z5�#-��ꅣ���%볍�v�Oyc�J^�JБ?��V�2u�Bع�%vr���Ë3Ap&R.3�4���V�	m��W��b/Q:�bY��X���1�b,�h.Uz�=k��v��t�M4�r=FZ�~IA!d�qچ/cgl���C�ԓ�����v�����rk�P=+��;4Kt�9 �������6��3�_�&)W��vP@�:[����I�~�$����j�r$�PXr8�R/{�۝"�ڔ*��`TH�r,��+ЀEF�''a�(�F	��Q�q�(,97���1ΑJ}�6�����"k}!�S�n���$�4�I���٩Af�<��J5c�w�.���H�O��*PG��H�>�6�
��X��gs�T��ȍ���I<�Ԛ �ȏ=��V@Ż�y`��^"En�����$:H'§Ex�Nh�]�QV'��,7��una�" Qp��98��E~�1�6�h��N�5v����H�y#��*�(gXeFꇉ��}��X��eЄ�p��8��A�;��n��@ZXC��A��Q��1WH�\�4��>�S�)$n�OZ��9��a��<09����ʰ��$HB���'8����Ĭ�i!��h��h��j��B�t��n*�v����t.�QNv��M\pDҮ
�	�*[n�]���x��.Q�ᚹR����H���a�;�WI"q� s�,�52lJ�)7L_Q�<SV�ɸ��l���\��6�x˦c!]���A��_����)VB� cUJ�������q�v�:%��U�G8�@�ֵpѠ�d*u`��B
B�#��,z10�"WZ2>7��>xR/��s�R.���]��"���GA ��W=Fh��q�́�O���)F!�PqJ��c9�)�@J=ՕYF�5�}B�Cr�IS��F(�i��y�T���c�(ڑq��ߓ��@s����Nh�Ldj`�$�M_ș����t�ʧ)�Z�F�:��@��Ǿ�&E�^���$$i i�=<E\��m`�u�>���<�K;��\F�ֻ@���S�f#�])�)���u����+j���r<���wIl$�m`lѕ��Bp0e<�9c�����|
�����32h��"�C6J�;�s���Yq����?<�* �)8�]	#R������U.��Lz�TBy`3�q�
�A#ǝ:�$�QO�H�b����(f�qIq�ڑr#p�,�.�8;��ya��M�N/x�����a�*k�sd�Ԓ��.�!_'��QN�pI�S���kl�W'wu�x��0�N�H�WD{2xЇ }%u��h\�@e̚�I���w���n��{:��*1���N�&��k�҂�&�:���]��i�2@��my!���d����3�a!�n:��,B �e�pY������Wb{�{y�y��[�7>�^����YH�(lnh܉��� *ñ$U�&����u
J���{�TK���Hg/�	�qk��V2oSD��r͒�3Ix�=��)��t@�u�5��[�̏�+8\n���<�%.s�2���f.�+�����ۯ�/�DB5��R�Q_G.�&��ByB��^hЀ�:����x���_��;��k�c��f��
���p�Ibyc�}D�H2��Tx�jx��5��5����ѝS�T =�@��K���nY>������K'
�i-�n��}5�'�|�:~b8�@�N>\��q9���8Ϙ��@��^;���f�
##��t��������i|��
A��@#�#][��
�yq�F�v>�,��2F�nbYĘ=��]��<n~���D�fI�HÄ8'�����i��6<m=�t�a�‚E<��d��*��+� �*=0#��&IC�l�a�ؘߴ���OJ3_���8��)�*ѳk[�pF��H��i*r�A�;�
	RK�0��)$`�#�J��GYb��ԌxAN�����c�Bś�&�dщ�Z��ds6La���b��H����.�ͼ*)خ�C���[WM�9���#��2���c|�?
֑���RDq�&T`N��ak{Q"4���2u��?�ԓO��Db҅�,�T�*b_,�R�m�h�C�ޠ�c7h�/�c�O��P�����h��g'r|z�$�ZԖi֑��'��D����j(�䢓�R�T`d���)�!$dx���h�G��J�ѱR0~bCO!�0���K`��aP�EC�@�
�THB|﹕"�g���,��TI�<�HY3�*CF�O?X�I2*�l)��'�i�1�e��#�����	R���V]�ך�x�v@�����L�p�/Z��kɧR�5N$\1^��T0��ι��|�<��6#P4�^	��}g�n�NG{IaZ�@+�C$H��8}@h�r�_b��W�z��}rZ>�xFhffs�;��4�T�`h�.̾:�G
1z����K�,hv����$D�I���퍹>w��e���rŰJŠ0;�X��Qc�-7T*t�*@"�e.m$��C-�Wl���⠆&{[t�plK��`�నa���4�8``t*NzT#����@.���!i"Y%K�9S!�9@�
��"N�>/���cpKg��oy�ΦoDd 
�x�8�s#��e�`�C�$ ��l��	1��%#%���*��Am?ڔ�F-�5il�g�z_e�@�;4�d�Id֡��l(D�#�I�26����6z�@��X��pϔPb�c%A;[_�Y��-;+E��~�H8mY�vy=�
�)bI���Z�R���9�S� g�J�c���F
3�ɧ^���?eH�S����A	�Q�~ʐ1$.}�#W�:����*E�ᑚ�78��<S��4ڻ�5T�,�`��L7 N�LGP�M�Ws�@�M��S��@�\����^�!w�m�����F� ��TN#���p)���t�Pɠ>���4��,@'"�c##l����ӝ�im��a-���́Q��*�kgL±��"�w,����3����.)��g.QY�B�c01��Ih�[��؅���m����c+���"�sF&�(`EEfN���� ��Inc����q�"UO�ȦF�tw�f)�d+����D�A8���b��œu�M%��m�2��X:�s����Ė+C���nK����P�Ġ�R�:�՗���Q�a,*#iT�C"��N���c<�6�Y5��u�J�#����|�p��8�tRZ���N�u2-�
�ž��4��gj�����
\�+�VI&iJaϽ�i��7YQ:%�&���ޣ��3�0���
���J�y$�|�WB��L�j6�����ν�=:���4  Z�IԺ�q�,=C�5���@Ͱ��Oݗ�"����Ya:�iTJْ]<��o�?Q"�, d�B�Fgp��˝�Nw<�N�9R&֡���$�{ԫ�x�H���<gN}�s�B����2x��7��s�4��WT�+/}���*�!���q�$�W��X���3ݧ$�.�3c���H�k���SR$�Dd
�	e�s�J�%׹�d�5qIP;Û�>��y��:�<�O����bP*�l��X�멣Tlib��W��4m���^B�dH�.6i��jUb$�+.S��C6O-�x�$dI�i���Y)�
cu��W�33iH��Fp*��D^���%���ﺀ�:I#z���Amc�3R��FYCG�}D�9N)
�	"���*x�ydF�?AĮ����� *�����W$N�*T

��6T���?-]D1Z*�FP��]Npܘ>�`H��Ց*ۮ4��X�Ȕ�''gnus��Sb�(���sݧ�L"Ee*H"A��F*{|��g�O�l�2g�Z��v����d�۟1��
�Gl��1��ҧ�cW1f�С�#�տ"o
��B�M@���S'w`sSD�C$�%E*~���a⭱�����:�T�SV�Fu֮�4�R�`�M\�MkE��V	�2���[ ԰�����$:�#�0[�Mu�$��Y��������Q|.U�<��vCO-y-�*<k��0T�0�:��$s;�`3K<�MMo����Ȅ��.\����¥���VV,��X�m�k����ߴ"��yk��銖K9vM+@�0b�7���#ddžd݆H�NM��B3*�����H��+FC�n��A��#�)�-l��?On�U�FH��@���z�T닩8p��f�o�R�:�]WS����I�3��C�D]w�����6ƤD�)Y4��>�YR5᱌���z52�=Wc��e�yd�	���z��?�S,���
�C�#�$T��f�Rt�h9�
N�B2Vj�3��-�R�D�b�D�PX(_�W1�t�¶v�*�-yQ�]]�/��(�-嗈��\F����i!yO�*nj��0uiV$�]�@�~u�1�1��w��V�Da��i9�DG4l�v8���W*�2�m�ߔ�
%u�U*fP�4y�D�r���Ы�I��F@K�g�#cW%T�o,}��6�T���"6ә@X��YYXc=uU�4!p�k����ЭMa�U!"���Y��lM\a��
�=8g}�\�d��W
��H8EI�b��H�X�98Z�[L9#ԍ�!�Ю�v~ tf@�i�L��5u�R���m�ݜ�_�>�1e+͚F�����*�tW��.I>=	�L��ޏu�b��;��Apҧs},��9R2���DQ٠�>bыͪ�5�K�ƌg�/�Q���d��0�#Q���������^)�Ҥ�H�X�=j�P�'�^;�`��$�@���]�X��!r�銸��
���B�*I�t�5s���.5*i
��+�NFR�i����f�NX���r@?P�SR�pN�t�UrBH�]Y0"8H
ר����=-�i�r��P�d�9��6(q�{�V�yK�;�Gu��Q�>��Y�W�۲���VةHY��X��8;t�����m�(q�l�J���M��?J�p�ژEv ��ǎ�rd�$B��Zȥ���j|*��j��Lj,�8����=A_PҌ���F�V@A!��p}k�9-��
@%I8����-��඀s�c51ՂpQ��]eyzX�O:i�YY~��8,�m� �:���0%���[��@�H�K��X`ڑu�`e�ԟH\�Wg
�q�x�r>�/�:[O��8o
q�JB��
��y
�5?)8zB��Zu�.2{��k�.�yAJ���@	�f�3�bE2�
N�Hġ����V1.X��
�@�ey�u&�؆���*O0|G�+'�F�����8��p����o�F�3�M��
@�y�
�ڮe*�
:64le�m�V��~G;&2�8�0W�\ϩb`� A�#��X����hVV!ݑ�)�[9;���r*(C��D��U�͋X��L酵��G!�F��q���4�dK��u�+�-�
��U��%�X�	�YP!���$�����h��թm��R����9��ȫ��0�Nҕ8�3�ӵ���Vmk/g�
������ P��F�F®_(���9Va�:��(�+�Q��>#�^L�̲��(]�TT (��(�U�:�F_Q W2�1Ή���ˇz��1k<H]��e�q�j��J$WS��pH�WS$Cɰ�V#Ɋ�݇];�̣He��q^Q+^�O!I��uF����1
��",m�v*��S��mL
���U����V tPX�LC,-��	�ƹ8�4��0��L���<F��Ji�lu�����Td$��`MZ4���3�� ��ᄯ�R�51]R�H�L��k�
I�������
�9dS�*8RAt��Ⱦ,|Qs*�E]�cc�b����A*��>	�s3�[	���[V|X�4e��p�h�)~�>*sPHDw�m&T�ה�:��QR
��b1I;<8׈���#<�G	�3�1�UA��=1�s�sYq�60��:�)T�b؇f���T�)ݒx��0FÀ��=x&�M"$D�b����
<��j��=�F�Vء1���Q�,�`m�ֲ�H��R��r��@F��up߄�dnCQ�������0G>�c�~��WZ8(psё�54��k�yE!�t�5,�Jʨ����\;�y�c���(��]��K>����S,�l�6�s�M �XaXp���8�w��e�5j$��̘9�dK�"dR0IA��H8Ҳ�g�[`�	�z����8mz�;G�#�0EK0�8>WR������v�<��@ �Ci�F	 f�����򀠍!�\r妥�f�n4�i��Ñ,��kd���뜎��⥘q��C�
	q�-�cO+�%���X��c��4�L�"�
��BOtS�e",>Wc�1��sSϯ!��3�1xl0y
�RI���d9<.Y�f:C�6/(�W.a��,�@&�;�r�F*i�V��xr�}iR��<c[��I'N{mR�܉m���)2���H�A���,�������$,X(‰��3�F�Hp�1��9NT�����n�1�A;���#@��8��+_�a�i��*0��FA#j�`a��R2k��V|���<��. 3mQN��*2� ;�N)[DQ��e�!�?,��;�?ٙ�V8J�s##qV��Q�+�P�9���\E�4�����f�L�c�t0Sט�G:*�Y\�hy��N|*��ʆ@�r�5W �Ձ����d��A�QH�����t�nƂO���E�Ќ$�8����n!?����rN���>�`���y�S���E��J�T( �2
G#�iHז42���当Op�M�c�
FG���F��R9��D�<(��֚�2v�t��u�4�P.}E"���4�c�(e�>�IQ$r.x�:��"���Oҷ(�2���?x8�8��xe�5�bn8�21�|dž���j��̬q�)��c�c��F��c%|	SBB��H��#1|U�����ʙ�7�I^G+H�!�S;��π�q�#8s�Y������W~��9D��_�|�r.�����:�$>��ȉ�%]�(�${(	�LT`f��o]��B��̊��8P�R������\aÆ��_*-�)��ַ�IVR�0�q<�\�[c����J��A$8s�Dg���O��$K��)�-�i.��pӆΣ�ڌ�ٜ4D9�7=v4��ʹ��� �>�j@��G1ˀڇ-�jid�DE�9P�&,���l�L��������\�
�Mv�U^'Ư�WK��J�J�Z�Z�J�J�O�^%^%^%^'ƯR�S�Wi����U�|j�?�_GW��hE]�v�^w�)���~bi�&�MH}��ԓG�4~�~w�)���i���(mLEo�%
<�B��+���~���hoB�J�H��
�|iiE��
��(P����xO�~��@�����&��h�jj�(����>�ѣF�4hѣ����#��:�H�S~4�ԍL(�D�Q9��5H�5P9����*�&���P��OI��
Lg��w�e���n}��qQ6j&�����߽�KQ�~5(*�\�ǰ���k@�G�*C\#�
�5-�*��
�Kx.Z�.��T��Y��W��'=3�ƞF�.@���%MC/�i����I�u]�		��JP��b����G?;���c�_R�i�цA�4Y��%�m��G_�ɥ���(��	5xO%|&>�}z��*�?#W�j��AЖ]�4��8�s�'�:�ϫ���|R�������$�_�Q}j�q(9$ܪ�L6r���:�ǹSQ�/��Z@����������S퍖�p��t���j�6>�4�����D�>Z��(C��j�	3�MZ÷P)_Š��&��:���f#��f�U��-���V/ �|��L7��,�Q��$����Q�Q+��E�;�Q�.��hD��PvU���2q�F3Ԓ?�h,6�3�}HT��:�i:�A��C���L��,[�MZ��K��
At<��8�$�ˆ?�f��cԄ2{��(�FH�P)�4�wɕ�6�8��
d����j�/��50SҥG�"�}�џWSQ��s՚,K���L8�X��6�(;7]&�a"�52��N—���9#ƣ�R?V�]؂��b���T'��F@	�jRF3�Uw�,*ѼoV;x��C�s�(z��W�@�5#�r�Du��S�;���J¥oeDO�P�#�j:8�*0�5����:U�6�58cJ��b���Sʡ򈛯QW/��j��d�kρ���L�Tq��T�}C&�rzwjfA묰k8�p��ޅ4�;��i��"�ڣ�P|*Ԋ�gsJqA�
�jbk�C�+R0�Y['�5k"��J���E:�U��Z@j<
9�
���4����y��<!��b@�+�!��]��z�H3�bC���{�bC�z�H}�]���!��v$?��!��v$>��ń~/]��z�H}�]����{���o]�{Y��a��vp��U���V�޻5?3Wf'�z�3�e'�z�x�3�b�A��E�f��_��B�y-!��]��n+iPq��,R�ZPv�3HU�K*��y�~� �mj��6��ΚΖB��DoZp��H���$ҕ;i<�g?�F�c���2����{�%Y�$��Z���9�A�PՐ}{�[��f9����Ʈֵ��8�����Щ��TC��F���@A$
�>|�$��H0���Ra�NA=I;��{�NX��G;x��p"�WקF}ԧr�6�u��ΒX�z�t�I�
�oʗ�I��>��o�.��>�^�E��
�{��+�]��`��w����E��
�{��+�]��`��w����E��
�{��+�]��`��w����E��
�{��+�]��`��w����E��
�{��+�]��`��w����E��
�{��+�]��`��w����E��
�{��+�]��`��w����F^~��d�9�gG
Ffr!D\�
$�Q��U��s[Yd7,���������Z������E1tT���J�Y���6���GD�+�
p�V������o�C��)*j&���Kt{k�3��H�4]�'gZ\K:�L�9*e}0�9�(Oi��g]H}k�.Uy%vZ=���iI[�0�8V�FQV�Ǵ-����Ki˂�>��
A�<��8��?��s��㱠����8c�$���x��!I��W�����`��(y������
;b��h��FYY�Ӝ���g�B�#$��ˇ楸�.Zy�g$�ܚ�-�x"㹊7~xJV3Y3�8b2.��P���ʂ	xSg:�#t���
�=�̲9Ta�9"�̾Z���,�$��T;@���G[^f�]\��
�y~Ȯ[���)CB�"�9$�="���P����'�@ ��{,�r��!�	�o�Ҹ�A�3��K0r�%UoD`�8�d�9(N����zb��.W@e\���gcI!N>�6��\U��F��
.���F��ѤI�B
E!/*n`(Q�������X1m!�	i[Hs�|X
>#5��,M��t�:H���("�Ou[�00;�j�j�V�Z�j�V�Z�A�����	�c8ޡZ��멋Q�$�����$��rT!A��v�gz����_HǨgz�������6��
�8�y-�v�|w��C)�j @~r�5�\���מyu�?ғ�9#''9�F�S�6}�~��B�
(P�B�
(P�B�
(P�B�
:;�O�|����������}��o��?��2Q!1 "aq�BAR`p�#0Cb��?�ɦ�/�y���V�Ao��r�Ӝg:s��Q�!���u�u�u�uނu��u�u����lw��F�5�4�T�p��$�9��w�g5��s��Ys��i��q�h�4��blC�P����Sq�S�8�A~��Կ�)'�U�����>���5�#���h̿�Ll���	���8v ��5Pe6�2B�*��L�(0$��о��t�f�˙��?�孍��M��5*{���H���-
d�q�0��
<Y#���}�ݛݴ������"~`�h��[��a��m��7�rL����eJTj<?g� ����Z��R綥�^���O�2���A|���o�?H�m�\bj�����R��R,>g���5:(�ء*eN
ٕ����6�(�K�Ѿ Z�
������XlD4H��9}�˸����������;9D�Cל����;��f�ɚ�&jl�s�56L��?����2!1QR "Aa�q�#2`p03Bb��?�It�i��r���2� �rL8q�L��}geF �0`��A�N��ޝM;�:�wh�0�:���i�����Sx0�zw���&A2	i���m���qH�=)�CS
†�-@���`���e�. �2��5c�q�*+���}L�N��X��|����p��s��П���
y�
���|F�Vt#�ҙ��
oa7��V;����Ek~�:�V��$��0��f#]G�qZ���vP	x�*i����}Dj�@�gV��|�;k7
�䰝�����govTQ�xquIկ�D�cU~|/����瘂��1&5��a锪פ�H?`,��^a�@H'��F�ȁy���VȧjMiP�]J>���{�Q��G�.[�Dל�������2�.)�:�N�eK#�6�8%,r*�z��t���6�P|�~��Z�I�;~�/c��@vS3��0����'������3��}���vÔ��,9KR�Xr��i��PK.3Y�@:W}B}B9bunyad-amp/assets/images/reader-themes/twentythirteen.jpg���JFIF���		

	

++&.%#%.&D5//5DNB>BN_UU_wqw���		

	

++&.%#%.&D5//5DNB>BN_UU_wqw����X"�����KM��s�[���"�Fޞ��W�|+>{�&��DU}�϶�\NYy�z;�u�z�6/���5�]ץ�|׳�5&�ɂX9֯v�mw�Lp|�Lh�9%�85%�漪��u�.�K�3Hy�A_Y+g�OΎ��4�]�F�����I��=��֖�A�ֱ��z×��c�ó�8������@p9�es���t���<�y�;���P~�1�
5��تt:^�~��g-5߯F����c�v��gHl�&����d˩��cdv ����Y�������=�zɰƻ�<ܲ�q.3��p���ϧbpc}�U*CfzU����W�!%э�F��e�c̀
���M#�v�`�z��h&�>�I���yd`d�*�2�:k6:��d��i�v�&�1I83$Yb�P%���$0��:bm�����:S��K���r�]�z@
������<�oK��n�U�椔{<�=���S��7��u���p�zWb�J�_�b$���ӛ��5����S���~�bz�x(z�q�-�>��/��Է��^�&�'^��;g�~���X
�	b[�OW�S���}�+I��6�g��>zM���:\���j\����6��HC���������r����<G�c9�:��_�xd�%�T{i<�M��G"�8�9�[�n�<D�n`Q����r�������������^���8�<�oG�k�-g{��S�}ތg�˫��X�@@����Z@$*,�@dh ���	2��0���@3���L�=�>0Zs�@�����/���W���N�q�N_G/����t�֖��{j�h��:��\�X�Ð����M2�@kD�Z�j	H�B+umM2��	��gP��T�l�Z������9@���`��ZК� �L��kX&�&@bK�KS~mq�[����"d$��0!1@ 0A`"P2$%R��sѩ����k��ٹ
��#��!�5
"e�c�� ��ر�*�3D�r�A&ކw�H�c��k����}4��l��_W}Z�TTUE�r�w[��Ə*a
a�
�/$��b��ɕ�L��q�f���I.����:�0ڏQ@%�jO�+

*�7B�u�	��V'JI�A;Q>�mh���FE5�,����4�1��s����y��6���"�**#�j.)��O5Ⳍ�vR�,�ݖ���X���U�g,+�f���Ą��*�M�l��4�C�R��8IUF��.}�ඡ�	�z�v��s܉YHʹ���65�U6�y�\�YS�6=���9&3�kw��L|�J�$*� ������?���lk�~��ɼ����%5�G&�Q�7{J7�#q�g�s(L"�**"���j��?�Պp��9X����/ �`�&��,����(/��+^�+�G~G��y��	���S�Z��n�6�t��xmr9?D��јts�w���UZ���D��8?E3D�	����a���J�Ҋ��;&B�&�Fy/�Ta<�D��լz;uO6}޾�)G�FY���jW+S7\�q�TT�~S�_����O]
C��'�4Q���A�$�C�>E|���(0Z`c��؟o�G�-&h���ݚ-���/�s���m"g��s�X��\��&.�|����>�iѦ�6���^���7:��T�ꛝSr0Vz͹��$1�������t���eF�ȓ|�R���d�@�_&S�&,�[J�c�S�Mk��Y�.Ŗ��p�$hQ�/���4��-"XJY^�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�K�"}�Mj�'��&���[�3��W:�E���,"BtF��n�:]��֖����8�h"���u�2E���r�)�ҫV
��J�I�"��eq��-mam_~e���ڈ�h��҂Qa�2�z�:�'�qԐ]p�u��TT�?h^Tn���_6ų���f�o����9�22��% p*���3P!/Ƹˇ�K�|b@��f+M؋���-ĸ(
ĉ,� �<�a��"Fk`��c�g�5p`��'�[��Fur�p��°':�7�n���Mb�t&�R�*8�E���-��1�⵽�������瑲�<�m�oX���&͟	Ȫ��D$�
�b�ʫq^�C��Cݩ��	�W����k�Hvy�sc���C��{�0�'�� ����x�v0�,]����iP�%�2
	Jס�B�B7I��%ZQ��!N!�
����V%�Ɖ"�'�8�5cQՍ|	�h��uj�xњ~+[��a`N&�9֫�<�k$:��^��� �qi�OW�#��80Z'��uK<����c�cQ��`�K�Q)Q�kڎo�EE���I�~�%u*��"�=Z�|���mK�g��nߪ�=�Dw^�1��w���	P������nr79���F�#s�����nr79���F�#s�����nr79���F�#s�����nr79���F�#s�����nr7�F雧��g���麧�L^x��a1�k�G��U�4�#<�ȣ��9&�w$�ފ��&8�c|Q��8�n�a�]�.[\�{&�Q8�S��w���<���;�G�'�C8����6
��@D�4��'3�@��o$�Q�՘�ᄎG9^�V��&n�U�0��
n��}3�~^�&��3t�a�^��b���F!8��kZ��{\�ry&4�s����∨��P��`���ڴ�s\�>��!�\�Cc%U��)�$q�t��+2Ms�q��\��xq�h�I>���Fʭ��^���Z��	��i�'��wS�Us\�+T�)ZZ罀j6��sY���Jb8FKX�!7Z��J�=��w��p4�{��3�
)��iL�Jg�S=�ҙ���p4�{��3�
)��iL�Jg�S=�ҙ���p4�{��3�
)��iL�Jg�S=�ҙ���p4�{��3�
)��iL�Jg�S=�ҙ���p4�{��3�
)�CeO���'�t��j�芎��e�|�Q1QS����x��Q�c*�[@F��t��"�aQ�R�*�<�WԢ�qS��m8��$E��bV�ho�h�Q��6Y�H����|�0�)<P�B
y�%���&Mc�YZ��#<j�#N F�ksI%mZ�B�`8�#�1��Rf�8�G(�h&(
�dUU_�=<Z�b�/�ſ_E1�,
���j��L�+��<[�LV�SeٿL�o�6L�3ſLaH���}�O�l����O�q!ʛ q������|,�tx�U~Ѡ͕����!<_�צ��,����-�+��x�|ICd?#F�(�~�w���g�M+�
����p�2��L��f�V+���MDԭԮ��5�fU�zH�7"��y\S&�a�	���<�J<��X�s�eb�E$���+nz蒆(�:���J��c����l�cgc;�����6v1�����l�cgc;�����6v1�����l�cgc;�����6v1�����l�cgc;�����6v1�����l�cIls�E+p��b��~�6��dT���#�j!AWUJ�W}��D�I=�M�vy�0�ɬ�I“ �4��4*�ZR\�E�]2r|*į�pM.3�
<��0�I��/4��Ou�?�
�Z�=���yt�dل�b�O�b1�55[�[Y�s�^��	���nf�ڂ�\��˕�&އ	����Z��*_A2���i������Ylhϧ �ĚY�|ƚ&�y��EET_O��0��੮������F%�,$�r��W<P��]Ag]\T�a^�V�+5�:�VS�@WG������L��}�T��	����d�R��6��ڼՑ ��x:����0����:4�L��Z�ı�J�”L!L�������Q,l�P����5��&���Oc \�7�c(W�pY\(5�� Â&.�`�*�V��i�:��B�)�&�N�8���wU���/o쯦��ѿ�O���UU]�vT�;/�PE��X�Y��
,�W��e�¥l���ZZ�	���!���ꨱa��/)�(�!N�Vc�.�(�;����אT1��B�t���\�J�1���Qe! 7K6ZG�����͍[N���iC+Y���=�K]Q$��.�	�b��B@!H!6UOܮ�X-��˘+Z�0�jHQ�Y(Ь$[���D&���4��iY1�9�bk�ۜ�/�f�D�L;L�ꬃ��[58DP
��Y|��y"��,�:�%�A�P����Cd��-�A2<�_�b�=�eL�N�dfWX�HR�P����P��&{�
UQQQU�\��_� ����R���	�i�V���4�D0����$M
�,l���4j8�O2L(2�YUN��fƯ��6��n��QC��]Z0���6�������(�u��k+H��i�α�� �	Zv���'�jjJ��$���0>б��j/����D�c��W!�ƺ�e��L��
���[�Ʉ����MN�v"�S�����a���SR�V\����QjT�h��PH�1�`����"�ŕu"H�X��6J,Ĝ�o(Ê��ˍh0o��	�[H�0O�ƞ&�'�ӦJs�c���<�TR�|����h�^Zz�6���Fؼ��y�c+N�@�02��<GT���)�F�ȭ�=q�A�SK+��]C,œ#6�b�N�Y:�|��ׇQMg��U턡�w5�l�~yco8�N�f����V���6\�}6_M��eOʍҎ>�ӈ�J Ơ0c9��t��d˚J`�D6�@;d��m�.F8z^�Q��Ӕ���Q�h�F��D\�w�UO�"'�<��*l�L�1UW�֕Q>���n��t_��?L0os��8�R��T�{�X�qE\C4Bj����F	&��\͎�3X�i�Z�(O	����|I�L�������sK!\�Mp�'�f?���MX�����و�J�:*�j�S��r���w7*7M��\uP�K0�!傦�a#<L����Sg�M�u6y���Sg�M�u6y���Sg�M�u6y���Sg�M�u6y���Sg�M�u6y���Sg�M�u6y���Sg�M�u6y���Sg�M�u6y���Sg�M�n���뛮n���뛮n���뛮n���뛮n���뛮n���뛮n���뛮n���뛮n����#UJ��3�D���]8��s>p?�Ҵ��|p�BW�i���6}<;�9�PWN��r+��ey�����TJ��JT>#�9��k[����A!1"AQ��2aq�� #@��03BP`�br��S$R����	?�U��u'�A�Q����l����~����*�>��
��9����9._D*y�W7!?_O0��s�v�5��}��\��K�ⴑP@��iK�f��PU�2jT0�($�F1#�jd2�M��Aۤs&��W���;��Oj��&�1�R�\���A�<"C)P��WP���a��>�NMR�[Tm#*�c:����P��4,���"�m�֕��.�B��w,`����rY�չH�ǘ�z����X�B�A�L��QLQ!����*n��8-+;0�9
ҍ1���vaL�ba�ϣ���7�9���(���ʢ�q�㱡�����>ԯ���H�ޥyP)Q�ݵI!V�d�q��ti1:2����s0
���p����Cb[i	Ϸ9Z����	Ɖ4蓇�9�'��� Ά34������H\Jg%�W	���J�f!3��`v�K�b��#��j��䔕emt�K��*�h�@F	�0S�ڼ��&}RG	5u=���\�G\��̤� �=��O&�=�`�rPO��?����4K��)���uQ�N)��'ow�E�>��>��I=�Q�u�m���0P9�HX����+H��A�� ���{����v�'W��O�v�K��юc���,�N��D\u��ԃ"Fʆ>��h� ���#?�O����A�nU!��$c:�[l���\�!��*"�$��Υ�v�l�_g!GX��H_ �!��4��N�3�W��A'<���Y�5j��fܯ�+��c(���^��L�`� ���G��c�&	
� vr��9��އaJ���`�F��ڐ���p��Y�5~�N�Z�����5_��Z�����3x�B_�H��Z�	|]!/�j��Q��v�Wo�v�])**�U�+�&o�i]#/�Z�9��4����t��-+�g�i]+?�J�Y�ZWIM�Z�)�]%7�k�f�-_�Gv����c��*v�����SҦ?�LJr�9r�͡�i�#b�^�bA-��Uv
�"5k �Iژ���ĊF!�s���<p›���T|I��g�1R�8uvd~*h�ԪH��VP�PHTZ���
���*�t� ����P�����O��' ؋]�1���>��ۨ��K�F�4i&��
P��U��Ab
B�C�DA�⮢�ϧ���FdC��Hl`x�R�F�G���	�S�}$QEDQEDQEDQEDQEDQEDQEDQEDQG�GH�[��UL�ݪ�I"q�t!��x#�)��cY2�0�ȂF���&�F��ǂ�U��M9Ss:��.��6����ڞ�$2�}�j����s-��o�*����WHt�7�����K(cv�0�ԝ,/n��֮�;b�3�I�d��b���t�ȥ��,�8��$�o-�u#	�sÒEW`M]t����Jᘼ�<AY"\[����8o�k[���]#�2Dzj�oY8���X�J���a{t&����m�.
�y�o,���Y4�<
A�Ưzi�lُ]�E��*�5
!�g@J��{s2�U�1���{�����b��h�]���G��	��8Uئ�<��!.2	�*O�N��򠶧������S�H�p�9u���4�@��;j�I�g�V��HPa�*���'6�/�ʅ�&�J�����w��Ń�k2;�Ҝ��|�����R��nI���"gp��$礊���;61=��)�Z�Q�����}#�Jȸ��~�;��l�
Fr;�s�c ��r3��H���Ce��>����Y�䶜.)u�ra�h�
��gB����p:�q@����H�<�
H�߸U�@8R�a�~D|i�b5��ve��Z�-��
 wa�d&?l_�^A��c�`T�%^�W�2����B�ui	��S"�2+:�eRz��F[��:�҃,�'����	�����O���+�@��,_�8�EN�/X0a\1R
\��@�7S���AA �c�*B0j� �Xk2���'�(,i�Ս�<�r�"�A��T��ci0�	*��T�imC����㈈\��Ӓ���qF��Č�Ӆ&F@�IS���� u@#*q���w��WR�y�؀��G�;*�E����WRh �W��1yw-R�dS�X	X��MN�$���ף�*g$>�0;�?��ź����y��$Ъ��r��9���"@��N�)��0~[��;���T��X���Y�9�M\:j/�"(R� a}��a���H:K1|�R3�I,mZtkƮ�V�^Z
�����U98v'P:`G�T�*��c���5LuD1���3�tt߰9�O&����m��6����ě/X>���-J�te`@�b��UL�t����i��'dcPa�M����岢ȱ�N�)�R2��i�Q�.S�]@���ljF!'3&Oq�\irԠ�j
��2� 5��v��{*Q�s�g�=��j^�\)�l.oaާ$�v~m�w��"�r��X���;ԁ�x����ڵ�i�P�,�@����O�4hѣF�4hѣF�4hѣF�4hѣF�4�]uwdg�FG�#�НK�2�G�є;jt�=i�K�U�%�$ �	��*�����<���_B�#��l	;�L�Gv���Si'�S��B�X��=ݴ��C�Wb�(�ɩ�w8*���(r��m��.O�����N���ӆq�K6{����m��l���B���� �R6�qZ�^�j�\��S��Xٛ�x���:yG�z����/h
/��˂���z#r�djQ������������8�2�s�l(�jO���[��$�����+����O~ڨ�a�(oɶ�.�Q�pM�{�����(�j��p
�z"�:�8�`�$s�Q�3M�/��q�q�ơ�Y���[�v��Q؀#DSn���84���q����Q��F3��S�%��\j:���b�2��[���{��G�=���㻫L���"��(f'r�T���J��1��ݾjX����a=���H�
�mAz����c���
�.H@�n��<x�,��I\.�� Ӧ���Z�����
1���6!����զM@�\.ɉ���|T�# �`3̍���.rt�b��(�!��}GڪuUH��1�ޚ05�@QF����Mpz�C�u�0��|��J�X'YF
���z�=��I��WU;��R	UfI	q��pHn��:��	�:���T�s�22�����#˜��K��;6��G�K��j�_���W�<�Z�������O/����y|�}/����~�_-_K��j�_���W�<�Z�������O/����y|�}/����~�_-_K��j�_���W�<�Z�������O/����y|�}/����~�_-_K��j�_���W�<�Z�������O/����y|�}/����~�_-_K��j�_���W�<�_�G�?a�;�~4��5ϻ����hǿ5�]���k��xv�9|�	��VE�Æ�ZD�a�w9jP�]D��+�R��m��ldTk"���21`"�bE\�	�-��q�X˯-�5[ۼ���,&)�[���Q�D-�e	:���s�7n�H^w�
�B�hv،�)ը1C3Ǝ�~)�R"I8c��i"d�&�x�~3J�;"��E'������Ԥ�v21Gp�
A��q�f�*�&I:V� �(�q$�
FU�/�RdrqI�`c�&%ܬ
+�U�!X]i'9�T�K�ZA���T��An��Α���)�3Q�cC
�pZ$D,ĺ���(�0�D�\n���הԨg��+�N�ic�=m#�FXm�-2_N)@��7l�6�bS��4C��>u��f���<�D����g܂�	�b�If�[h1b��i#aȃKB�mS�.�eΦr����ȃV������eHavr\�\(���
�lw\��q�')"�dΆI�N��zەJ79�葸J��;73@gҠ��&��Ս���ߝ(�u�/u(�(
n^�r�;t+�4��
�4<�Y�3����ZJe�<T���5o/P]u��)'��s@��dw犷w�d�sߨ�ꉸ!���,���7�#xM#lr�o�u@�U�Pq��M[��TŶ�W�5c92J� ��:g*=��u�_��GU�4�7%��w��\E�����rbEZɠ����	�� n�����e�V�k�Y�tg_$�H[P��*�̏,n�$u4�;mʬ�:T+�8- Tጝ=�d�V��e�x�.3�.=��B�b�9|I���ro����/����\�א*ɤ}o��7tr���TM�♢���j�Xz��$���9�tp�(ŰS̱�<��< �rA@9wգ�,�;��e�� �p_z�tU�i�;�9*W�W�}�g��Y�� `�7��T-;���θfv}Jǚ�"�����!�3SN��w?��4[�h���o	��E�&�xM�-�4[�h���o	��E�&�xM�-�4[�h���o	��E�&�xM�-�4[�h���o	��E�&�xM�-�4[�h���D�#G�n�M[
Dl3�H� u�2�ȍ@l�9H	'��<�Vp����gƬ����A�u�!Dž�y�b��%�
D��U'8f��g�Y�P2��v��mm�$�;3p�5i�L�Z�,�vFѕ*6Bv�wmo%̲�2���Bt�‚����I3����<k�mL��w�+�`���s$�Bq�˗\�;�6��֧���Dn�kVE�#]-d���v�Zcu
%r�*w5w\Mln �mFY#U-��U�Py�����j5�A*�]����ʮ��o�q���
8G��j[+�k���.l�W�tdz��j����VY--Y���Y�+�ٚ�(H�{�����h�2Im'B����<1Ĥ9� �S����x�vv�x#
�b�+9��>�]%gƲ@א��.�
�d�W�$����JT1;�-��m����C����y4(n[�2�j��+Hdd>��H�X�S��4���%d��i����52�8���\�^�5��3�@$e-�J��5�Q�e���(ߙ%}�������.-P��X ����*�%n��8:��J��
�]!i\��Z+�X(�r�F�N��8 �A��{����GWO<3��Lk69�\�n��)\��2
/�6��Q��z",�XOo��5%��$:�#Cq	�ur*�Z��c�#��'/.N�.w�m,eQ˭u(r���I:��I匨|ܐ��j��W6��l��GX���.U3����7�<vN1��\���)T��1���r��O�\��ID��Z�"�m/�e�w8�r��t#Zq�R��R\��.���#�p��\	3��^���W�l�G�r-E(�- ��2��ݗ5��Vv�j0��xF�7��A����]a
ȁl��٨��y�$G�m&����n��S8DQHe�%�rwj��$V��$`�k�K_ެ��kp�VnN�%��Os�=��}�!��rԷ2�3�M���V����p^yJe�M
��QMŶ���d`�r�Ϲ�n<
�ߔ�[Jd�?5_t��z�\Km' Dma���oD�;��D����18z��I��hRr��J1g:�s}�B��9WZ6*Ug�UWJ"�(��*���fL��~���+q�����ֻev��..���![v��I�i]"-���-�b#)`[@w�P�¯R8m��I'(Yt[��w�M{�[ekVS�I�-�S�c]&�]��ǎ	�,eK�v0X@��̶��u�����88B�x��ѝnf��B�-�9k&J���W�-�f�C�
���8\��y���N�AަD[C+O1�T�o���-Nf7s�K3����h�6����W3��k��g���!'�R[\���V�K,F&���(�l�Ҝq?H����.����]"�E�M�&&��K�%� QWO�i&Yd��{nº��bILU�Nם!��	��ڧ,�jz�������[$����%�����U�	x.-���0�3햫�����4o�;������e��T�N���F`;���288M�K*��hn^3l� �+���iv�����Go�U��	9Y��$L����ܚ�����#��ա��N�����@��3�*;��Vǩ���u�BP������0�ɭ�^661x���a3^�9LN��R�q�̫�r�=f��\�K��V�Ct���)|�5�{�Q����'��ծ�?�91�޵�CyC6�ăS���VR�d�2ڔY��_�Ҭ���P���J/O
s���FŖ��i�����Bq�U�R�Z���Bf0�d�!�����@�$-rgą�t�e
���W�Z�g-��{�s1��iR1V��J��������e(��[P��I�.I`Tը�9E�Q l�`�%�;ؒrZ����8�h�#+B�ט;w�M�a�q���'�--��ϣ�=d�a�������P ���?QK�FF��ڍݰNKg��4P,r�4���G-R݈L�2�eW��:���v�ޥsq*J��� �>���@���U��*�"����F�idDx>J�PI'��)'�w����q�"���-\4) ��f��\ls,X�
��#��쓄�,F�َ�u�6F���$�HDշy$�5�z2;ԶA���U#�w4�Mw{�&F�"`D��������\�yk�2",�r���n95\ݹ^����T@�q	�F��S�]H�S���G��N1�wT�E�,%��`1N��%__ql#�K�X�)�4���%�j7r�Ki�j��-r���p��j��[B��"�ff�3+F��Y�DS���`e^/�@�T�9������ܙ6
��f����I!!2��{�:ƿۈ�f�%��N(���w(���,�Y����r_�.HUttV���eU��,o����ե��VV0G
޶uI
�fT�Y��c]�Q@`���*d��1\�k�br�l'&Wht��5���l��6���#�'^����[�H�����[$�YGso3���EdL����pEt=��4/Gx����l�XMݽ��O�q�\�S�
]A1�����.������ba������
td	<���i��q!
r�ݪ�'7�E$����N A��)��Ie`I#C3��tl3���[�#xPD�]w�V��~�f5Ζ$	��*��^5�>�S�4�h�����J�ڳ��
��!�vu��
-����#�8vf�e+%�����ƽ�&v�Ā*),���$�Y���ʼF\�v��Г#C�	'�V�傾;� �:�-`��Q/�,��%���[�,���y I������q�rj	�[%�[Q.�v�S*�0�>2j;��ۣd�0,�u�f��u��K��~�k�&}Kj�2g���֡�2�����Ve{2w��{��
�.�+=ƅ<�
	m�[KnB�[S�G5'8?�H�d��9SZ:?5a�uZX�	�m�t��^��PZ��B���cNp�#NjH&7���=Q8$
�cIW$�C��*��1ع��h}N+V�X�F�úd��N�.V*�G(�����k�1h�M� p��-ZY<�w���"婳V֗&�n3��<E��wTp�u��*����ں�/%�χ��,�����pIk*pů@Β���Wr]o&��B��2����_v�b�Z\D/g�f8�x�_s�YlR��{
��B8XE�	Y�ľR�tl9�_
�,t��c�I-�_���KG@�M;<�S�[�����Qz�Y�L�4#��c-V��{�Ag�-�P2vS�AVIo� �Ơ�ڹlߋ�=A0;�A$�����2����@��y!��j@�=f\�(���͵l����1Q��8o�������^c=���	�A����4+��[�P;pE�)�2X�$�pWS��&$h�~{D�nB�u��:	ݸl09ڕX���o�9�{����\d1�4�$l���4W>�#%�N�ի��d��,ե1� "��$Ԩ4���$��I�S�c�uG=�
��L�q�#��
EӒ��:�qͩQ�`ϧ!I��ͩ�K��r!Fu6��I��P�T���o��L�H����;*H��
��cV@~�Z5���l�D�]|�<�au�$�Յ�ȓ�V_"O-X]|�<�au�$�Յ�ȓ�V_"O-X]|�<�au�$�Յ�ȓ�V_"O-X]|�<�au�$�Յ�ȓ�V_"O-X]|�<�au�$�Յ�ȓ�V_"O-X]|�<�au�$�Յ�ȓ�V_"O-X]|�<�au�$�Յ�ȓ�V_"O-X]|�<�au�$�Յ�ȓ�V_"O-X]|�<�au�$�Յ�ȓ�D�4MD�4MD�4MD�4MD�4MD�4MD�4MD�4MD�4O�E��)=�C*ۢ;��_ 8;�����s+�O1GR���V��ie����V�t���Z9�U�RC����Ot�n���td&��i�YΌ\cC#�U��S��_�V �d����\\9Yn�-	�N@TJ�n0�Pm�^�d0pX�;�
JC�"��Y�V�ɃsȯY*��'�]���'I�$����6Qa!A"1@R�0� BSbc#2Ppq����?i*���(�	���
�g�莒����\���mߘ^=)k�@=��NckT��!�Zz�/���o���80��� 5�>I��R�<4Iz�%=����
���U:�c���+���_	��:5�pz"$�>�.�a
՚I �	����@#!q��7v#�&V������s���렘�:�e}EB�#�w@�@��ЅmK"g��.˘�˕G�ee"���@���4Z�A��)��Ꮠ��Sޘ��'iub�	��	�
s�h�3�AS�7V]��'!
%f���H��򎖮:7�6�O���~��`|��u����4��B�>��\���O�x$U��=�rza��t�65X�cU�V5X�cU�V5X�cU�V5X�cU�V5X��R%X��j
9�GR �V��p!Z7V�n�!X>��#*�#?~��V�
��\KD� _Z���.��w�O��_yW�yW�yW�yW�yW�yW�yW�yW�yW�FTn�u���9Q���Q�ص�V�kU�Z�
��Z�Z�V�޹�
��+���nB��
��+���nB��
��+���nB��
��+���nB��
��z@�D�ᜅ�9��\3��=�\3��7�8����ᜫB, O�"TS�+Y�QOܭg�CzuD3�M��TS�z�^�뗧����z{�^�뗧����z{�^�뗧����z{�^�뗧����z{�^�뗧��=�?�6損!�p\3��yeY�(S���]" �Dh���	Om�"H��pǹщM�m��s���B�������PF��:z�Mm�>�2�eHʑ�#*FT��R2�eHʑ�#*FT��R2�gѵ�\7v�O�?|:�{�.0�����7!1ASb�"Q�@R� #02B3Pa4Dq���?��(��08�tMd��F'���
"����tY��c�&{�b�f���M9��ּ����?���'�1�{�� �ls�x�љ���(��d���dIü��B���	���¢���=��ȣ�
�NnkN�͡������^��efe�5�������5���(�3��c
ih�@��h�q8��h�UK�tH���ci�v�X���9��hp���<V�,�#%�N�)�h�6c̸���(�#�yG��̌��tQ�d,�uHm*ZC��)�)��>8V���׆�F���V��W���X���mP�O�;��4���kg�r��Rf�����!�Vݢs��GM�A�7�����B�Ϗ�����=�І�iC�<3�{��xg<�9i�/��c%9���3F���mP}_b��>��R���
[v�����ڵjիV�Z�jիV�Z��%�%w�Zކ�f�A\F`(�1�-6��Bc��Q���KM��ށkyє���4� �Bg����\EѤ���Qc����p�hJ����*�Z�>��ct�<��{��9��pl��ȑ� �s>�|ϲ�ו�'N���J�*T�R�J�*T�R�_&�C�Q{���9��A����%�/�7&�7WKX9aco,,B�j/���2M������O�	_%��k��͹	���C$'��Z�3ύ�t�X��_�	���z�&�
�'�o��4��&���O�i[<�������i[<�������i[<�������i[<�������i[<�������i[<�������i[<�������i[<�������i[<�����3�N�4�ik������-p6CM�������i�Z��.�e��%	A a6��\0�����Дe�Mxq"�#�(e�n�uo���09F�ZX�Y�b�k�0F\V9y\=V'�S]-����(�pr`"�sl���m�t�-�n�e�M��ɺ}��7O��&�[d�>�l���m�t�-�n�e�M��ɺ}��7O��&�[d�>�l���m�t�|����F�V�n^e�Y�2�יy��y��6���C�:X�� �\ �� �\���XB���� а��*?�+5NT�C�9S�9S�94~�pbX�Ʊ~��,!a@W�Kı �?��y��x���7�Ջ�%m-�üMZ���q'���K��00X���mQyձ��[NW�&韰>�+1��MT�~�	�p�V�h�q�I%ՙ�jG�皲x'鯑�/�"��h���$��ۛ膓W��?�
(W�x;ݍ�uf�!�<���R�C#���O��aXV�aXV�aXV�aXV�c�ɥ�,C�h*�!��PK.3Y�t~�`�`7bunyad-amp/assets/images/reader-themes/twentytwelve.jpg���JFIF���		

	

++&.%#%.&D5//5DNB>BN_UU_wqw���		

	

++&.%#%.&D5//5DNB>BN_UU_wqw����X"������ϣ6�[��w�Fס���j^�V��S���"ڥ	��፭j�0C6Q�F�1������`4���um"L'�DŽ��{��7=�ϝ�mjW�_��o�\?�_"������k��Y�6�y|�M�G�{�A�E����&�uӳ�k󾩻��Wُ��z^��ˏ���9�����y?�]��^/C�|~6�c��8{<�G[��y�4��Y���>W����|�;��pv}Wk�_w��>�W��qw8oK���*y���~o7U��s�qv��F�n����o�d�qj���y�#�;Lp������i�c�>��`�S�x�M��c��:�V�j�9}�7��nz��^�_^���(��]~e�7:[{��h�5��M��(���y<υ��^4_m����4�koN�Q�лB�y'���U�s�ki��lG�ל]�Uُ������7����u�h�߻��2��[+�����ع|��,�z�{>�T_��^�?��r��V����]��[��_}�[;��t�]�n���0�S���'6i���3�Ԥ�-��]�^�����ohm�1��+>�'��<-�w���j��4s�����U��ϴ��9��܎w!]�lg�}]��vg\�Y��<W�/Ҍز��L�IƩF���aV�g��9<oɹ�ȯl�o�B�Y�msw��-�l��}�O�+��skGsܕԆ�n�7�X�=8��ri�U��՜]W$FV!d��
}�"���1:�7���j�UuƆ�q���̶a^����JT��7(�r����
lQnu6�U�J�S�vU�c�W��k�㳫9٩nJ��KZ�lj�~�ڞ�Q�]���B�z:H��܆Ƽ����
�W�	C6B,�d"�^m��W�6disq:n���տaM�۫)�:�Zw���aT���sU��8���Fx�ѭ˻{������
�8ni��w���k�=�����(Bv�t0�֭;4�*g]����ue��i�B6�]t�s׻1�W|��ۚV��ʕ��ގR�Z{����c8d���A�U�#�Һ��-�k*��]f�g\����E:'���<��#W�m�S�^#u��矱��n�����S���(��,�B�B�1��r�9�Z��N����QY����v�����{���\�a�[�<�28�%b�vϾ�Ǎ��^��S9�:���]�J��px�_���9�xY��f�7C1�6%]���>w:�o�U�B�a��͜W)FP���j�=
�v�R�ڢ[�WWm6B7�8l��n:���Χ������C2׶y��J��o
�F:9���h ı
��?�5�-�ev]V�B�z�6Sn����������m�W+��fb�c���z���SOV�?.���m���;��yץ�ӯ�|�޿O����3���y�9|;��x���.���=��f����?=�W���}=�Fq|��9�=z�Ɗ�֥iJ���\X�B" GW��UQY��#��ˍ3�L�U:]��69{w9>�^���i�����,�MSh�I��e��fiǷI��������o���clp㢼0nѓ-�n�닅�#�nY�t��ׯ�����U�^�8J�J���{_q2L�ֵ#;�R�)�';�)Jf-qc��ŠcȰ;ҵOk6���/ M���6!1" #2A$B5@`4Q%03PRa������[��[D&��w	zĊ&d���"~�{�߭K�'���!-݌F{I����}R��W��^�:�L���[O�d�z̪$d�r]G''�g���r��r�$t�1h������ӭ\]����N-m�Geo���t�0-)�m�����[�'�ZX�
T�'�	'�e���/2��iN(�8��y�JB�?��'�V�(��5;͕ך|і�
yHP��/�O��O�Բȭ�2M��f�w�o&�'�I%i$ꢤg0#i������_آ�A�W�_�?���i�Fm�� 1K������֫Z�j���@:���~�p���)��[�k����}�W��/��:��.jn���?�Φ�����Q�u\-}ۨj
I�'E�?�+��*�9🉯��*�qO���������������ŽH�����G�OT��FX���}F_�F��[|�F���ađ�Cu����f�;%b�PD�N�0�m���$`f��H0����S�M�	�)V1I��r�����6�<�I��bl��#��>�zt�9,���[|.�����gD�� �L���C�׭E$��Rh��B������q��2�-Y1ut.Gk<Υa�(�a�Sܛ�K�kؖVWX9r��T��`ʁA�X�s�yW����� ]H���\K�d��؂^-�����hz����hZ�XN�7w�lG�9�6�	l �ThԽ��4�;��Y$�]4Ax�1����4��mָc���"%v�"ᣵ���QNZq�Ic%����F+�L1�
��+j��v�|\y�]_+O/@?��L�Fhz����J��*�����)e)P�:T@
��C�l��-%rעygf�	�Ũ���?/�?�ח-���H�Ao�mP[I#l��!�(I&�/�.�ie2O��ıFlf���LF�$˨[6��()Ձ�E���S�DP�C����PhH\S���.̏0G�'�P��Y�Ɵ��l���I {GO/�{h^Y��!���mG�#�*�%�X�\$�
�0.r�N;Ƙ��v�M
�5�j��h�q�����;-_[���+��3���¿�s�4�i#S
�5��S	6�K�C�O�2H�.��B¤�
jӼ�ǤQ\�H���@N��3����$�ȣ%d呎f���%�Z���Ld�k#�.�-gDJ�����P	���7��h;P|{���t��A�2(��?�q���u�w#,=)�Q�3�C �L���UN�XK+M�䄡�քdWl3��QEK7��C�ܢ��$�2���4 m�!���ҍ�Y��X�	Wp��k��6(\0�y�[��pEl��yy7WsBd>��[��-�y9޼.i�S]��$c ���V��-���?��Z�����)��5q��(�\��j
j��E�E�{2������a���zR�G�{:��ע(z^�@��*:?�MkqA�$ƌ��e��+�+��>v�D��H� 0� z<֮(W�
hG\&�HSw~�h3O���?����b?��c&(z���1Kw���=��D�*
�XҲ�{�E8)$R(d�r�����5�W+cW%	Z����4&����"�5��3N�R35��	ur*,������*�j��\��^�.p�7��'����8$�O*�{t@ _��翻�N�jN���vk�7sR_J�5�Χq�9�k�钽I��Nb<�*�Ǹ�E`�!H��w��x<���-q
_^���B�,>6�JQ�)_g���GHA_hZ�,�H+�pStX����T�~�k싚�$g��Wح�tK?���'��:w�/�
?�R��/���O��M�5��
�M�}�Ɠ�٫��׬�Z
�1^kbM|�m�<W�����
�ZF�AȬ�2+#��f�Y���=}z���4�q[�rIu�N�5�NF��Pu�A����j�A �r� ]T�}K&�`�l��(�P|�V�$ɠ���lEϠ[<���g�
��p����*�^e$��]�X᜷�r��F(3�f:,���ʃ ���:Б�"��%��� 
1$�a��2�v���'���BhJNZ�$v������m7�`ҷ�c  V&��ID��_^�3c�ky�B�V�Lj�!8&,1Q�ˊ�`�
�˩�D 5pG���	�RhG�y^:%�ȘK�)���F�}5���
|3rNp���6�h7�J�$8��P���׳�	&�!��*w]���O�r��m��e���>�fUӉ�d�E�1�l�2y\,�s����B��JA�W <e�<�k���Npy���9EfI\_^�qf
lB�.�y#��V<�f]EJT�(	gU��0b����: ��B����1�)!�6�3����m5%�I��u5��I#e�FW�x��g�M~B���b��|�d�c�j0��q!�1����
(]N�bH�*q�1)ݼݿkG�<��"�)���6�,UR�~,�/�8�E4�6�iw�M����ӝ��%^7@��h���V\!��-!j�P���,�ʊ�V�\.� h����Ep�K��G�Xn��X`���x����1G�����~�}�����zh�>��q�"�cg���"����Ӈ�����ӂ�G�����7�}��W�zm�Ӈ��t�&�}}���P�<C�9o��u����1M�l`��f}���}��IV ���V���V�nR���,�RH�:-ջ!q��,�8L�d�妉r��ex����ul��d������U�٩l%������5����8�#\Y�<?�[κ�d츫��~j��u�9$��i������I�����k?���C�n7��gE{�.	-v��5٬�f��s1�y�Tmx��Q����sx�U�ot�c"�C^0�r=���Q%Ӂ����C�8�����s�[�<��
�A�íF�:��
�2���ڋ<�xW��U?��c]�"�+�<f�Z�|Q�$��+e���;-6�]��k�2™�A'#�r'ʷAY]�Ȧ�d�&q��ku��\�⋨ֲ�1"�Vє�;�)mF�Ob��Z�9���`e/B��ll�vc喲C����Mh�-C�4mr��v �;Mֻ0!-�#uj8�F�|^�Yd��SZ��)lT.+�M�X���U앶�m�„�e�?,�sKt��(]y ��1rP�RQx�sF��8>�7��s��X�/��W����[��CB�M�wQ���}C�6+]���np����~(\�##=Ƥc��ٍ��c��G�{��4�J!nIYX��|�7��Օ\a�Q�c�:�]hE��0xbص2#{� тX�k�,0�C���E�Kjr�1c���(Z� ъ3ﷇ$�:i\i���R���4 �ia�T��C@0>��(�6��Cr�M��t��Q���9���u;A3��l�������m!���5��E�[^���ٕ��7��5��8~�N�,��{|$�4r��ԓ������@���7��ctsQE'8fy�JG��3*��u5�����YdFP�u�JiT��5:
����,���J�ie��Q���4d!�ֲ+e��2 ?���5R�a�V��Z2 ֶZ�|Һ��
����ȠQ��v�p�P�&�J��-��5v��v,Ԗl�9��Ͻ6%ڞ�3��b0�=��J=��AE���{o�kKi��(�lĞ�2ۇ
��W���5�+1��g4�Hv���!�,��]�ܽ[������e��P���K��tN�1u�x哻L�{��Wv��(�v(�{nj�OOr��v�\���Z�$��^)��b���ݞ�vK�[Cݝ�R�3*ѹ�x��v�k�Ld-���7�ݖe�]�r*;���W�ʬ0���,Q��� �H#q�(���Ŝъ3B8���1�s�8�b'4`B��b����"Lѷ����9�|P��J��q��'9㎖��b�ZFp!�zF=qG�h")$}g2΅���4� ��9�t����4�w��7��G���>h�-��~K�i{�$;;\�����3O���F��e�/v����),�n^�k�S�ĉM�$%d7�
�<ն�`���_@
=ң����jjq]�@�x���	�q�r�j^�+��34�����k�ͬ	!K�wֻџ��F��׻BN��F��/Gk����F
�n��x+�FJ�$��7 "�C#I�OԀ}�E�j�(C֌q�s�B`��(�aB�
r�D�x!����q��a���+B8�,;x1�0Bs��&cG9�hƄ`��#�F9/o�<��^+�=t�(�ኌQ�� ��7&�BoB�~���Pn�B(�v��y,׹�S��y�7cp�hdZ����2r#�Ye�@�Ss��]԰���H����9j�슉��e���Cq�A��v�n�yaI+��LJ�I&�������Y$H�fyQI��"h���8�3�F}n�(:aeFέ,k�eG�x��wMv���o)j3�������x�� pvt��.v��j�\Q�$�d�.�m	 �b�
�?JT�`�0�n�s]��[`#{ 3���UIU/�Coō�s��?��bY�� �eɆ�(o�G6��ø��_ޭ�����k��C��q�?�`�U�	m8��9��Ef=Χ.b;�OU�'��&i'GFq�FHӻ��\!Sw P���\~�u7Q�V��d�F�!)k��b�dU[�����)�[.c'ݭw�T���Fzmq@�v|��
�J��GC��l���Њ1��>�Q�c�<b��H�%�	�1�F�B�(�Tv� �hWZBA�#�-B�o�(����p�\i�h��s���pC�=;�[5t�'��]�Z g#��XӖ�C��2��҃R��F�k�K�:�(Iw���4#k��f�Dž��Kr�d��k�8�ט�-�γq�`q�l\���+�i�rw��[�W�u��I%mΉw5Z�V9�|?ʺ�M�$���u��Q �e5��P�@#�PtoE���0a�[($P�彁g�#7H�5'MV�%�ѥ�E�5�AV��WK����*u�k��E���kF�"!B�u�6K�C��YR�4���CGj����5�0�P���BЃ�Kmvɲ�F��+�9&���f����-�9��MUj~7g��N絷�u�I��EW]R>����К�ֺSo�횝�Fj��+�����!Y�7B�]�N)nU�0���MM烎�
LW��uJ7(3Mr�]��ٍ�#j{��V���F�y��+�=��G�Ep�`R>�3���vv����gk]��vV�P A⎸!�cC�E�p�B��1.q�q�ʸ�m���xb�5��+�/4cC�/���EpC�k�=J�T �;5q�g.#%3r���ܔ��=ɕA��g4�I%�R���Y}�W�!U2]�1BK�+4����K�'��^�&�pY]�5��i���oNe<ZF�#�b�[f�K��y����.s~i�����n����	�y	���o���@!1AQaq� "2�BR��������S`br�#P$@C�03���	?�Q�H
�B�1��e�����3>e���
��5�$����#Nf��A���c���Ȕ�d8~vω�,�O{C�٘#X���G3�-{���p��D��=|g6C?��,V��K�4!����ϲ�4Ya4��W�a���q����ym����;-}릟�8fkHMvF�09�`w��W�����4��_]E(�8x{�^����i�7�>�Ji��$���v+�/yhq��c��W�&�#���w��GI�{������;lc�M��P�~�Xq:AM�ѬYx��q����?4"@4d3wg�@xf�RCt�T�n)��c�	�!�XҨ�Zx&��P����hhkT(X�
6M�'KUZ�BNY�D��(��u��^�+��E#�ȏV��Em��� +�@��k
G5���p<�����X>ha�h��H�V����Xk��pz��fB�p|����氽�����X8k�``y�G��V���<y��z�5����{S�qX��D��4>��xYKMb4^0��͸�a�w	Xd��
�ɞ�T�qTA*�D�E����Tп���Nv��9Q8�5Mp1�ʣxj�5�A��R�J���M袪Q��G༓nt@�:�N��F��o��~Z�b�G8(�1ҁ2Z~K+F�L��ZtF��Aͮ��@ئ�t:*��Չ��I�U<P�:��A9�x��e�;6P�(���!J%MM���{�f�~�aC��sqi�5�ߚ�Q4�%ݛ,\�ٯ��.
ѠJs�����YNh;�b�ʟ)��!7���4��ȕPo)�R�����o�Õ�3�:x�䢞���-�;)���L�uXXR�!���%b��aa�b�Dh�T�%��m$51Ø��ީ���«(T�P�U(Uq�TҞ��������b�3��ud$&�P��	���*��!^V4H6�)�]+�0J�
�MtqC�y)�=G�Q�}V�;Ѻ�
P�}��|K�Q`�x,`ѵ�&a�=�ׂ�y*%���I�y8��!O����rN(��������c�&&8|Q)ê����0&y �9�S��[єa9b*#)��`O|,4
J��X��%ɠz� ����xt�H�1��XQ�ߋV4#��5b��߅QP@���p�#!YF�=E��}E��ݰழ� N�����c��@�
���x�WuX��a=㌣�{�"����\��'��,c�\(���V�Մq3�}�K�9��X� ��U�i�:�cu�V�;#�ƙ�<�X��9��zK��X�!c��!��w@���,gt�>zA豤m���^���/H��X��K�B�C�e1�|�/2��Ѱ��Xl��a����p�,9�|z�B!Q���\V�N��^��|+���)U�Fk���Q	�QNWS$U�Ϫ(�7��
z���>��SL��ӱ�����ժ-6Xb��b����
eA���۬0��'�v�Qt�媶�R�diT�<F�y )�,���QDئ�ˏE��'�e��;�Fv҈��"{�Go�3�Li�˪��RI]J�:��!2���b���!;|V�F�*�dᛊ��)�M�AHI�Ǿ���`A���͙��)�����hՠ��@@�_9N�;o� ּ�
��S��n���U�P1+r�]4o�'"�du'�1yj��)��B&f��X��:�Jֺ��~����
hGc��T�S���1��4�n^(��v	��T�@�H��)����а�]��AQ�L�@�J�U��F&�����ܠZ�f��4֓��sTMh����;Ƈ�Q�@
 �RL�*b���53�����u�{�
#���!�k$�$l�<#�.H�C��[*�1g� xZ���[�Fow�T�r�i�z#I�+ގ�W�z+����f�uN���N���E�p�5$k�JmnN%�Кr�T-�I�a���En�B�v�����/Fj�qE����k/G,/G�Ŗ^�Xai6X!`
YaIX�y,����;.
��Y����Wl�X;��F扉��f]���0��t^��fP`��8e����L7X�b��8�wX���S�s]M�4Ok� ��X���e&lE?�.E9��
�w��*���xa��vs1� ��.!��hBc��My�e�����M��k'<�o���{����B%e͛4{>,�y&37����}�d��m>��������3|�es�1@vQ/2`�̯��vi���Cp�����QGs����@�ϟ���L^&�6J�"N���A�ԑ_gJUS���S�H�J<�-S;������
�Â�:)h4A�ÙΒu�Ӣ9I'ٴ�{��a:|{��4㲑_v�4~8�to��� ȶĦ9��9b�7;�ܾ�����0]���T�i5n�d]LQP.�2c��Q����7X2�I���Aٲ6$Eu�'�Fa}�I��Zk�]���'{��;��{&(�{Y~(�*�LX^h�)tBuI�8�S�7�:�>�AtQ��8^F�E9;I��(�G�#sϼ���x�js��	�?�>J?��D�{�m��~PsXh�E6�:��f��r��H:j@�I- ��-��
6�0�
����DP�m��Q�ȥ�(�q�NT��,�.h)�'
小
"�q?T�%�Lm�D�s���S��J"b�m�'��E.��,��Ln�%�_DE�4�N ��?�!:qt���;c��j�k����8ò�obV��[Q�1���)�2`G�ePi惎}�������l��Z%5ѩڤ|�˖'���ba?Dk�7��9��w��L|��а�{4�q�(�|D=쩮�d}9��9�5�BAh+����9�Xn��ƨ:׎�� ����)��ᔊkP������s�		��$���`���`n���	�E4�)�M�mp�?UL��Y4
Bcb#�+�L,D�&ѕ�*!a��1�4Qa�G�	�R��	)�xL�� �m��
���5mJx~�].#���\
$t���I�tɠ�QhKG�+5
�HO9�&#�:��.zD�M���d)��k�\Ĝ�-Da���)��^Ё��@�)�tV�`6�f��5���3hڋ��U���t')�#X�Sa��=�&$rRAo�eH�[��͗��E�����CJ"�pם�We����G-�$h�
��Z��(��S�G �E�=��TES�V�S�z�QN����"N	¶D")thl�۳����S�ڶ#��p�F�3ΐ�(�-C�9�E-^��bډ���:V�����
O�R:�X�61k�S���Ų��>Ik���>��94���|�ᬊF�?��AB#���o��
�()��+��#�|��&5�|�(�Ji�X����p#�iS�vYl)�ѯW�1;|��6�m����,@L�������'R�;�}�w�	�5�i��M(Ja�E��
�L
k��S���}@:RL&;���x�Ұ��H�$�c6T�P�[�it�5"ߢ�jH<#�Lp:�i=�F�>����4��hM6	�W��7��2��U�,#�vT�ZN���{�V.��E��c��V&<�q��0�W�a2<�u�@!�Jf��`m���JS�$&� E6L2� Y
kƳ	�1��?BG�#d�T�@��(xL���3*��d2��	���E�
�8MOT�Tа�L����&OYL�3n��ӌ��&��l��r�|�;L�
�rY�)`�R�)2]qk#�c.�f�7�e�6^�3�;��~�^bQ9��G�@�DE&����#\M5��h� FS�
n�se���+8gzr��4�.�I�R�Fe;����j/�K�F’���(�6�LS��6H�oz-f�Cش,�s�$i��.掦I i��p�~0`��'��	���S������$-Y�L.�4�&��L9{�܂�1�cZV<�)��v��1�6b�U��"@��~I� [I@�|�L$	�@L�:f��U�Kd�`Mk�Sn	��0�~H��
�Jc��h7Lq+��Mq�kPO�7��ڄ���b>|�k	�Lp��!1՚X�Bt7�`&6w�ѯ��m,��	�?R�V7 D��>
�c��a�M��h��	�Xm�[&�&S%a7��i���i��0V��&���0i�	L �*�6ׂci�0e�0~ɍ�&�vä�����w&6NvR�
�fkg��Nb-<3�4���J���"�*�Vt]�"��T��PT�E�i�����+9�c��
Z(O�"daV�\"��K�R�^I/]vG2j�'�&@�H3�f����dLON6����[�\DsG����!��qd\��l+�8�h8�
��!<�Ow�S�d�g��D).�~����ӄD��DA����OoT�[V�êp0a<�p��<OT�������jt�>˸'�DA��v��zX�@�?��y���Rd���2�?T�a0�vТH�2�Oo1k(�03��bAy3De @>I�DXR�>�����"�*�u��Y�訿�:ؙ�8�Q�3-�B>��|Q�P�M��{���j�r�j���1��Tg���5���쁤���4F@�J�kO�6��5�x���踆��蘽Z��5z)����X	Xf`_Ք�D�l���覼�5��7A�ߤ�]ފ,���2��Y�Hڈ;���a������6����Vh��i�I�y"Na#��T�'��:�����k�dU�P�|^St�#��g��O&؍V�6eSh_���ot��(�%a4@@�P&�<�&���V
%
l�ꉂ�|wXm� rM��+���D���L	�����)	���0>)�3@��❮п��MȖ��Ber��&�n����d2�9 U4���O�n��jL�sg}ƕ�*	�nJei��>ed��dGw��
to)2I��}���6�	!{�I��3$�s}�v���"� ��)';b�H�>���_&)��q�[���D�VT�k�}��.�%y�+QF�G`�j=f����{z���Jw���٘��/�� G�G��Ҡ,f�h���Z�D
�ַDk����Oh�'�h��#4���y��]:ZSΔ����er�h,
2F��!*7��bx#M����O�bTF�E�'w����H�h�j$TB���Ӥ8�f���I�5"��صu�U�[y��L�ų���4fi?ܱ�T��%h	Xd��3$��馚�iM'��›O�a�RP��XNֺxs N@O8Aى�Y5�>W�^�1��j��P�c(3�~����k��1
d�Lu�M{���l����h#��g��t,?��� Sꩁ4&������`��ꉣ�tڦ
�LSS�h����޺`�����LO$�hB��5���T�'I-�A��6hlS]a7��^�恀˖�����H�XC�۪�fɹ��$�M(���)�|��&
/t؏��i��xF�+�W-3_��=��~���
��y t�NZM#���M��r�F�MO"�~�?h֓P�'k����k)�t�%���B�Ÿ_��,!1AQaq��� ���@`P��0p��?���N��8�R"��nDF�'R΃6��k�Za��0>����EUo�έpxMV�o?@����I��Ä)`��W8H�@���c��	��svBA(�dZ]?\\�1�b���Wa��Y6�vQ�&\<��H���dU[�a��W$E���
mF�4d
��%�/m]i����@�93�e%Mx�'�պ�P��7
�A��EGq�S��5A�xCĹ��/�\&�U�rq�8�h����a�*�+�Q1�DC��Na�Vݩ��:�Q-y6^�փ���1��X;Z�L��k�E�_���aޜ��T��=�n�Jj���Ʀ����`T��AP�7�se�86��n�ܢ���%��7�2�Gq���,;��?h�V����p��C�Ϲ�����oю����>-��� >�1UU-s���@9��?�g�/�Ð%LM�����8zݘ�}��>�|�o>��Gҙ��"\��g�fO�FZ��ɵs��W\��2�~��3��<����`�|�g=?���Y����Ƭ:3�y�g�u��\�
?R�7B�cm5���t���-�/�I���d���+L(��j�q�/��&�,&��i�w�4<�/(�q��+{�1��l��ʙmDY68�]�,�.N$!r�t�0�ˎc]a&p��\�
y���xg빻K4c�Y�G�q�E#�i��`��pI�E@�r�A��0+׷gX%��)�q��������B�|Z�V�QU��&^ڙ�/�)�>�.��
���m�Tp���!�q�:�2{��n��s1��`�,�G��8?Q	c+�ה��*

(h ��ɹ�FK
#��\���ǐ
65/.�w�+d\
S�`��md���`	����<�UW(l��cyk@��xۑ�y��G�cV#���~=枋��ZvX��_�J��2�eE5�3Z���s��4hF4�+�&�J���|:��Z�����7g~�ck��<1��ʦS��f�V?�1��Nì*�t��}�L=���p�K1�j�K���@���.|���m�p8��Y0!	`L{�뜀���x
X�'�(��;)�f��I$Ƞ//x����
Q>ɋkz#%��km�d�y�4t�7�%(�P|0Ͻ�q8
*1�*��aG*��>�`#�L�
����沙�\%E+Q|aH=��c�s�rⴉ���H֕�W)6����d�I�l�hY�BG�w~�����08��D��!뛑PW����,5����<aF�LQ�M�E����a{���c�H��Q�Քn,�8��`�O�6��k�†mM7Հ�|u�d�%����ʛ|�Q;�I\�
a�[�<p*�>�9=�Ü�x�����6�ƺ�"�͹nK�p_Z`�T������ bz"�i������%xd�=|D)��+� �D4?|!pҳ|q�H>A0�m8l0z&�n�Ph>����
L濃7=�ϟ���HB8�(�r��6c.�m��.��<�w�{��q��*L}�<��m|��L>�;
ƴ��g�z�8a�#z3���.gZ��0 "�[�u�7�� dL�U-�n���~��"�|��~p���˄<ۊ�ZG�1�٣�a,��� 17R'�3w�&�|�
?:G%B=&�#���(17Q��a?K�Bް���S���OX�?4�)�S�~���>%���6x�0����L�I��Z�z�����B����u�W�$|g/�L��xWX�o�a�`\;�qU�G�`�2���A��a��%9R�����u�9��5Ed���P�ͳ��k��W�w�v��_Gs�b�_l����[e��ct^�]����P���r�Ya��!���������%ͅ)݁�w�8�����MV���d2^��EA(*�3��mmF��7=��CV�p~�����3��hIr,�w<��D&�X'��i}?��t�C�J��eʚ�d��3s�O�%
��_5	��u3��VY3��$na�2��)�ue0��(�O�0A��}&)l��2�2�a��0���^�;�N�ۀVP?$mp�D���k�#ϧ�*��Ã�7�8���
`
�*�> �9�yrh@Oc�@ܭ��p�'ǒd�.
Ǽމ�L"�K������Tq<`Ha�qS��0M�����8�7�.����2�#	�ק���2�c�G��
qDnp~���2ܛ������*<y[���1����r�\��0-䘿')e	�b��x��50�Qr\c�8֩21{�2�f�a�ND�ɼ��]�3���pm��y�6�)f����Iw�1�.��UcɼV+�t�Ƅ'M����@�ch��]g]�	�����f���Sr,0t��}���›Zˈ�Os5:��@��nk�F�U���M�Ši6ܨN��1H�N<eohV�V���9@N��Y���x�������
�L��	�e�X�{�5RHժ��/<*�C�D�Q�����Q���߳�sC���t��0����WP��f�!'�
B|g5�c��>*%��!l_
ȑ�w�qZQ�e�`�i��B��B(w�.�(�_L��AO��������]�\�FQy�0�O^`>�y�p#��*�K��?�'���n�;qa�@�K�g*2F�8�V��qǖ�%����aکU�qj�#���ª��;&CM�:�B".�nyсZ�S�b�%@-S��]O;�0��X٦�N1��C�|c�4_Z��p/��j�W�A�Ť����Ƹ�j�����q�x�u|�p�a�7��B����׫O8�E����&�|{3\�I%��#����hd����p|~��2S��4ͭQ��#���
J�m¸������e�@P�cB�_V�82����@ W��M�����Ýah�(�����s���
��;G��Uj���X�W�I��Q6я�4f�:������m�2�Z0XdN��a_�axv`��[�"N��zh�M��1J �j ���p
X��0p��cHޡ�iyP��gY���EL�v��6c��
�6�İ��׬��9�X�E�	St"<��]�eF�߬�ܭ!�,�[F8	�/�\���޹"Hi��^�a���^��>�\�3�o-��*�S�5��·N�f�Z�U[Qt�l1,�-ی
�P�+�q��b�Qq6�~$ۖ^
r���7��X��Wˁ�x:���\)+x�	�#Ğf?�bۂ�k&��A�A��B�@Im�P��x�z�'m�'��������jaJ
5�pM
m�g��H3��|n(E�+U�P��ߎ�.�m����o��"�Uӽ�(����A//���X��iH$����n�VNI@/��f�`H5�ֲ�&����P��2��h}��<v��]�d�I�å�+B��Υ15����5�+�b��� �g괨�|����h���K�S@������
:N^�l���./_Z�x�n�G�#]=�Z��y��pD����H{s�0���[q��r�������pt�Up�����W1���*
)�UV�#�Z���Q}WII���\��I1�Py��+�Z�rU�
�D�9ZdT�̤�i29��I<�a�@DtgV�IkC��r��:�>��yO�E
�\���vʘCA���rB�����trwP�AX#�+:�+鸫T���1J�,e��,D�х��h�1�JԌW���������Z��ybo�)��t���
r%_�@�&iW6��v���؝#E'Y<�ܻ��,��>�_��_��'�	l+�;��N���l
ŊD勔Z�hTQ=�̬}��� �iy�1��J#��|��V[X�Je�F�J���葟�LW="���6u�
�DWwl�Zt%�9��J삛8�ٷ�Q"��n�+;C�-kX��Β�,�ed�H6���L���$�xR�%'����m<`( HiXO�������fjވ����9GMDD�;����Wg�]`({h"v\wtl_\��2x��ѣӬ�a���V`?���U�`�fo�e�քUu�"�}\O|�v'�F��8 ��R��拪�{���6�d3@�xnJ��'y�;��������[�٫�w�_A�7����r�F�S��PB�S
B.�.nH�e��Y��:%��r�sE�g8�e��s
 g3@j_tS�$�F끨��%
��`S��]��Ѵ�y��`КU�,�P�-&H%����O	(��[�W��0q���c�,EؘE��T�Ѵf7�k��Mu�(Ƌ[��������S�
�H��U���� ��.���ٴ/,¿v���,I���v4=Q�b��v�[�:A��1ڂ�#�A�$��
�%�m�h�,f$��I�&H�$�b���0[
�q䂕B|�z�6YUӿ�)!�P7�SPA[��R����>�l�xK�Ӄ�E���dGԋ��Í"PT�.[_�)?��yK�3*� ��sX7x��~��(�P�_|�����(�F�|��R�@F�\y�+�G�u��T��C�6*��(ɺ�܃��r�.�I�Ƈi�qi�xkk9G��ˈ���j)z�S�큠���
n�Z
!��]t^|o�F]��N����S�A	@4�႐n�H���4�ٚ��C��).�Mv���76�;�P� $H�5���00^՝��.)X��P
X�|����`���Q~�����ˏ�3�$����(�kA3x�:Ac߁}��s���C@���/����wך~w��Z����W��v�\A�c����p@i�3��(���V{��F�`%a���.�k�����{.9ȷ'1��@�����c���
�����-j����[	uN&p�4�'M(qU'��E���G��9G�'S�q��껇�\ݤ�q\�7���ح\�.2�໦QB��&�.5Ρ�<�oIj*�cF{+c_\�^���R#��H ԙs%��8<���*��!����C�Ae��c4ʹҶ�va�~'�&r� ���(a�����*P�m
E‹Utm�&���B�����ر�M�l�b�E��Ů�o�������վ04Xq��r
���%j�$���L=7���Xl�D'oĿ�!���p�'���bD����჊-G��Ȕ��������+����thCFq���F��p��Ԧ�0~WI����v�������8�p�V��#O_�r��KD�W��o1w��nGҥ
%}�N
�PV��4HQ�Pl��ob�G�aR�;��xT� $H���b��`����7L���Fh��H����������?wG�04$!㎒�At)-������`B��y�.��]��[u*�$���Cz�׌-��Q�4!H�jF�߅�WAZ$ʱ�n��]u�4D�Z�ʠ�V�g���a�Dܹ�x�4ȜP��F��#un�h2A5���;r��qk�+1�6`%���Z�XҺ���;�5&����3jfq�@k�s� o�ͷ�&B���t��
���(��ۀoQ��5�
LKK�Tsw� PUF��)��� G�	Z �+����_���f�z����`��[�,J��L��e[E�r�0l�RU�(7�B�7�菖�S�#�tc��~o-B� ���B���p�gQSᏜ/�T�c�-%�R�-丯}�Q��ȝe"�������{����x��*�4ؽ/9l��b��%�o��H��No�5����O���Xj�Sɛ��Ex�������x������Eț�`!�FD�l%[���`�7s_槿��.��4�4�3"	QOh.��]sZ�"k��7;����Du�_��������v0$B�"M�_��Ds�;�.�;�1U�jsJ�=ȟ���Q��u��s��T�?1��y)�{�,&ia=ˬ¨���p��]�I�B�$X�+S4������x�9��Bu�{��2G3Z\a�����
�f
�G)/
�Av^El|3a�B�D�y��~SoҘB�L=��fD������q�M��ƪ���;��N��
�r�,K<�E=`�|$C)�}86@�R�9�(&K��+f�
�]��YD�]f��\���KZ��f�D�8?����l5�t�ARc�#��7�syO���:�%�&I��!o8b8�hЏ.]�����(6MF�2=s��8p���� �4=�b��- �6m����Eg�P1�;%\�SN��BKd�aJ�X�8ԌXj .�BǬb��N
� ���ץv��Z촐���0�?�"��=΍���ܿ��L_9�r(�=��(#">p$�)��M�X��
^;ō�Ut<ǜ�n�s:d�Wȃ���%�4qf��/_сY��U���(�M�����I��B�Z{\��^̡��ܛ�'�CC���*&�:�<v&˧�2 ��,�#���6��<\7U
�`N�ɀ��ڮC��. ��fa9YHG��&5�	S��
 
(�4U���G2�i)8�.��P�_F*��-t�jE�����2
���d��H��ⱊ�+ Ch��!� �,��޾w�`��
k�t�b	(�w��9�rd����z�(N
�*��b0%�C�{�c����CFʀ��YŒ@�Q��K�k����H��B��$��2� vl�ET=��8��І,8F(�*nbjo"s;�2_R��{�?�I
`i�\;[?1��WM$�n%c@���8j��9x��7Z
{� ;��w#uD�Ǚ�A�
�e>?c��>U����=>02�i�;ɥ.!������l���h9��
.�8>���Z�s�oP�:�f-N��p��qH�ٜyɟ�q12�"�K�o�
Tn7&6���n����� ��E�8g�Z�üXEɑ ��Ľ7?�p�XJ��
��~q���r^Ms�谚�ӋmbD���8d�I�$w��  نQ�`BW�bG���
n�Q��"�E	�����tw/2�
Elځw�o,$��'RQ?�gAK���=O&Sɔ�e<�O&Sɔ�e<�O&Sɔ�e<�O&Sɔ�e<�O&Sɔ�e<�O&Sɔ�e<�O&Sɔ�e<�O&Sɔ�ҋ��`#~Mg%\�_��)�S	N��EE2ęϓN�K����	��fߵ���W
�F-����:!�
�Vѭ�dӡk�eJ�Or�qԘ~�v�9L.��]{�+�P�`��&

�h�@/�7�V�g m��iy�
�;�ai�n��Ak�	=��w�_�&���w����h�E��	@� �}J
�`UY��N�ȐP�� ��(�_�V� C��:g^�gH�mi�E�Zz���x@�r�!�@)���t��M���xA�KH��F�Gn� �6��x��ժ�h"&?��8:I8��[��ф�Mv6�P����`�Ut��<P=�N�k��̘�H�ʼn*�\V��?�\>��5��__?ۚ��N���V�w�	G
�>�l�vk��e�^���'�O�qv��������Au��PXv�"?���xUG�:�qN��s;�N�冰Ag�8�&�OӰ����.��&��M�[�
cۡ�*D
�*�)�К�ij	Їr]9]KPG{|b�*<�W-Ɠ.����ް��^�<�Z�_U�v��b�s�\�}L�dh�n��ٰ%�#�F��j�u[	��!�6���w��F'��y)OPc{��- �d����y��h��o	;�q�*pj���&��\�����M0��(����XoXm��	�cd�NAЭd�|t��5���;�)�J�� �@bO�0P��PҜ���� *�.9
c�q"��.S%T���S�,�x1h_ T����q�ž����>�e��B��R��R!Fj�\ә��͕/^)1 ���=Tm��a���XB�qYl*�K����2�ʏ�#�HE	�� l�i��hX5��<����"��C�(�]��.6N�A�����'/>o�.ʖ�f*�%�w��E��'NP�N�6�{�A��UL��:�^u��=����p�F���/X�6m�:����k�c-/�`��ؤg^~0���3lЫ5U�|,��ҝ��ҙBC�ټ���tf��Pap,��ի�:, �~qvDdjQ.��hi��j?&�@�$��*��7�z�ꩥ�p!P�`נ�?�]*�g�b)����Z[�� �	
$~T�O"�z��r�vD2'�(]&�>��+�
�M>�C?�;�B���8 ��#��9�<v1�qd84&��ukNY0Ծ�����f��8�%&'3f+�_^�3�����
������.��0 P����o+ѿ&6�Pr9A�R�� Z��?-�����Y������ A�I�Z
��YU���Вv3�w�2;Ӊ�4�7��t�ɔ���r��B.ޝذX�Z��0�,ע���Du�F�[MF������Eo.����S�n�r�:�}1�R�R�{2$�'�(Y�;��9b�E�Z��y�(:@,{j����i�2<��ŵOzbq&���Y�P�Fj� �
��7��`�@7{W-6Eׯ�����;����L����
x���N�1�N�D"s�\T��b�v|�,;A��y��k>���|��<!1�"AQRqSa�#02B�3r���4CP`�����?�v1��
n��^�5�Z�FbȰ��{��׻�^Q�{,�T9�`�G4p8�,�s\	.�C9�h`qQ�{'�9�wb����~+�9���@�Ѹ��kG5��M�-����4:x�]�
|縼bZ�
i���
HIi�p��㘍��#m��9�6��Α�@�������&�7�'��Vf��=���>G��p
�2��ha�Շ5<g6Zp֮�G��qly'K“�c���G`轶��g��c�%D֖5�.w4]
v�L�?(�bGҗ��_h��S9���4��eH���MY7L�9�u�P68������k���;�Ԭ<o�;�Xv��3w(���R��4�Mx���C�%�]L��{�%ķO�����U��	q�d��9�ΔƷC1?"���L߷�2�Aw�P@Xٞ�C�ւ֍5�踀���iA��X������f���B�,mb �a�0��O���Fɥ�;��_��f`F�v+$< �6Q�c�(�=h>GZ��@cm6��C��{ʈ���O��7û\�MS�F�+�ϊ0�B7��I��5��e+4�}��ट)2��8�����M-�m�'�#�-h�|�P�/sJ(y/q ��Yv�<6]"������7�����:8���7g��mޜ�ѧ Z��������wxw�7Wm1�����Y�ө��`ݠ���\��xQ��7�M�D1�[m˾�ڞX�ɑ����)���׽�"�l�ޔ�X�zR�^��[��3���0�?��tq��Xg���{�	�9���€r�%߀	�+����?���N�lׁ7&�t��3oGA��/q���x�mp�X\��h�ik5ߪbDR�i\W�c�\Yx��O2��6}/h��ƒ��]{gUƔ�k��5h��.4���)�GsD��sT|�S���A���+��Tٞ�j��=S��_�*�H��d>D{Ӫ�����ȶ����_E��e�]4���?�d���,!��Q5��j?5-5�*ǀYވ?TF�
Jʲ貕ѠԾ��}a��J���_��Y{��M8hUYA���n�ue�ݢ���+*�4����ӫu‹᷒���o%Ï��K����
�F�\8���Q��p��7����o%��K����
/��K��o%Ï��K��o$ֵ�5�z�4M4^{�9��߿�;�o�4�7�B�e��@+7��	��nB1�k��CI�O@p��7Q1��#��ѣEe�wL?�����CT�I.a����6	!1RAQ�"q�3Sa�#0� BCP`r����?��$4r�Ψm0����\h��+=H�U�b��3+�E�	�"�cj�rr�Fr(M惁�t���@��I��&"-�ɳ�%BabE�N��J��5M��JsìҸv�$�a�U�6��q��"�[�.kM{��E9-��p}
hwJ+�+ce��l��<z&A�8�n~qu��k�-vno$�yo�6����(��ڟ��{��zV�<T%�z&�34FdN7�=*S`
kjT�kr
Y&'�
ΐ�|���lL��
�vE[̝.��,~ʀ4-Уe�-N�vcq�h���Ț-�6��I ���:��e����S��"��[#����m׈xL$'��zk��F6�߄��,r�K8U<�U,;qB�
/٭���H�Fۜh�S��74F�)�=�Ch�tBF�rL���>��c���QòF��~dz��V�;�����'؄�h
L���ZጒI4�/��A�8e'6�]�@��F��P�éPu�V���(�#0���n9������%#�ޢ��
E����ګ�u#�n���MK�����pF)98!��A����Ff�ۺ0�U\t/��м4>�xh4}���h���м<��|���j����F2���
"��#�a?�ge��兵��,�)��#=G�UUTuX�$+Z�]d
�ꪪ���6{��3�+
�w��V�Q*���l͞�����
�����f������WuwmY��~7�=�7�=�7�=�7�=�'j+����������u���u���u���u���u����Nd��E�,�mDvN�F��X�H�����U��+�1K�|ع)�{�ό���r	�pCJ�I,U'�bI�H��Y��x�EE�a�g��"&��Ԣ#�a�����PK.3Y���r(r(7bunyad-amp/assets/images/reader-themes/twentytwenty.jpg���JFIF���		

	

++&.%#%.&D5//5DNB>BN_UU_wqw���		

	

++&.%#%.&D5//5DNB>BN_UU_wqw����X"�����G�� ��[j���~�o@b��׌&f���e#�+-ݤ��:�%p��{��,��)�PƳ9�NC1g�yc��e��e�[[l|}�
���Ӛk��\{�gX|�����/
�4�K����Y&`�k��]�[�-����3�|g�<�&C���xfU���r�iO���Ӳ�<����v�\&S�,�K`��|U��W����"���9�X��6�]�d>��W^L�@O5������&w� �>
��`�}2>�_
��`�}2ؘ�m�|���\t���9�L�*��eqU|������9�L����9�L����9�L����9�L����9�L��:*�����
��`�}2\�R��`Uד;�Uד;�솻?Zj��u��dI�,3�,hW^L�@W^L�@W^L�@W^L�@W^L�@�ҟ�W^L�@%��6u��du��d_YPu��d/�ZA����9�L����9�L����9�L����9�M��\�V�@]�t��րz�}����1�@���j�@SHT )�wH��)����S�7t���4�T ƀ�R6��yP�D�P���dMUg����T 1�`�N�P��y�o�;UB�퐵T �
)j�@|:"R�P�� tD���(���F�P���ђ���x�ޕ��������A
3�`H���"�Fyw���g�{���yw�!A�]�yw���sh3˽��.�(3˽��+���H	
Z	Z��8�	�N����q�������h�=��@����kE���Z�@�����v���-h�&Z�@-h��P}�_(-h��P	�-h��@ z��A����r_=��@+�_=��@)�x_T|�f|�����v&����:_T<>`�#K�yR��_T��o��00256@ !134`Pp�����ȟ"Ū�%�*&BC��CcmZ���x1<&,˪N,���Q�F�3�-�f3@����v*��r�ܚ�\����x���3"\����
�=���U�aE���IZ����a�;�fƺKY,�5��{6���a�Wa�1:�d�^H����I+\ZK� ԱiZݍT�㝏�6¶c����^�^$��ZE;�	E�WBj�Xm{*+'�D�.Qq�$HУ57/����[)�3�o�E�\�%FR-�3-ŴJs����(�I�s��S���2��{�Jf����C%�j4�p�z.#�.�.)��F�.�;&-ݩ�{��ō���sY5M7"M�m�Mцl_��lk1��V���@�`�\�ge*�k>!d��wTq�Y_͍���~��pg�v�fƣΗ�[X8��TQcJ]d���z��<�q2��oVz�N*��*���� ɬ��p�]FO�R���n�3�*l�l�]=u����}TŌo��5+������l��yXc�}Ն9�.|J�����x����/e�ˌ͊��z�u���Ve3ȋ�yy]��F�68ս�g��"T�pb���*%K��VBz����_��wYfeKj�&Vټ�=c�YXq���ynf�D�y�p���Ș�h���v�;�ف�cw璭u�X���M�F���U�[�J���%b�L�r<������<�ݡ��+�ÄT�C��[��k�6#M�5N��O>�v���}�
��{6W��F�X?:t!o�IZIi�:�)1�1.$�8�?�L�1
%$��De�gm��<B�<�������i�0�1m2�(Y�
DUg�}�����]"���%Z��|e9u�EV5*3�~]&�$���-����G���"�D����w���[q:7�c�"\�g�`��x���y�_Y���N_���%T�J�ٽ�г̂�J.j�����(y�mg]o"~���5��L7s���e���Yŝw��bs��9v�<G7��3��P��uT�{�QG��V1|�NaY}em�e����%�K(�����v�d����j�Fg��V������&�.qH�x���V(%��gvT���Ŭ[�+m��1�;Ӣ�lp��#\��S%f�%�G4��QEj�1�S�s��#p��$�^��V��^7iMe�ș����IXM%�?��/�.eq������0�r��Ѩ%�'�
̂����O�n�51��LjcS��Ʀ51��LjcS��Ʀ51��LjcS��Ʀ51��LjcS��Ʀ51���2��^dh��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8���AlW4𬋗~޷��Ɔ41���$`����_���j�C��n�h9F�"E؂IF�q#�#4SL��L���Q�H�?Kό�o[�jcS��ƾ�>I�y���}�#-5�
C0de��Oi$��Լ�����U
s��,�U@E:fdx6}ɩ�h
�B|�X����3K�0�%b�H�)�i�y��%H�O[d�b��(nJNm�~�~�>I�y���}�Q�����4�Nn1��ۻ	�4���]Z��N-KRո���@j3���H�?Kό�o[��$`����_����|�0�R��/��z>I�y����$��Լ�����H�A�jj���:����T�D<�cKn9����[~*�G�JQTj�f~�>I�y���}�Ҝ��Wg)D�l��2o��}�YLy)�I�ϓ�R{��߱��9&�m$��Լ����ޏ�F��^|e�z�p��Ȉ��5Em�F-d�M�K)�m�-و�Rd��	탨l��V�42️�F��^|e�z�p��K%��'̖�Ml�b��7�E�TJ��Br;$4�>�DԴ��h�$`����_����|�0�R��/��z>I�y����$��Լ����ޏ�F��^|e�z�y��u[Z(r�v��!j$�1e,�i�Q�H�?Kό�o[�V�j:�)����)і�2e6"��B��|�0�R��/��z>I�y���}�-F�
��6s�a��$`����_��������+�����!�U2ļ�o�f!��g�䑀~:��~޷���H�?Kό�o[��$`����_����|�0�R��'�V��6�ca��6�ca��6�ca��6�ca��6�ca��6�ca��6�ca��6JrF��^oC�!D��]`�u����X;]`�u����X;]`�u����X;]`�u����X;]`�u����X;]`�u����X;]`�u����X;]`�u����i�%����y��E�Q�UuQ�UuQ�UuQ�UuQ�UuQ�UuQ�UФ�"yF�L-�2%�Q�UuQ�UuQ�UuQ�UuQ�UuQ�UuQ�U%IZII積LjcS��Ʀ51��LjcS��è�P���|C��Ʀ51��LjcS��Ʀ51��O�[6⮽ķ3�8��N:<ӎ�4��8��N:<ӎ�4��8��N:<ӎ�4��8��N:<ӎ�4��8��N:<ӎ�4��8��V8<Վ5c��X��V8<Վ5c��X��V8<Վ�X����<�H�S��Ʀ51��LjcS��Ʀ51��LjcS��Ʀ50�1��LjcS��Ʀ51��O����ϴ����?��s�>�'�
hcC�Ɔ41��b����}�O�5
��7�oHޑ�#zF���7�oHޑ���w<��"���b_���}�O�s���K��ϴ��K#�hcC�Ɔ41��hcC�Ɔ1/����>�'�n �C�[+c�lx����<VNJ��[+c�lx����<VNJ��[��㵦\�ϴ��=�*����W<��"{�ʿ��?/U�<�H�������s�>�'��#bFč�6$lHؑ�#bFč�6$lHؑ�#bF(DX�w<��"{2��;�r��
��7(nPܡ�Cr��
��7(nPܡ�Cr��
��7(�0��T��>�'�/���τ�V��y��=���|'�<�ϴ��	q�t1�Ct1�Ct1�Ct1�Ct1�Ct1�Ct1�Ct1�Ct1�Ct1�Ct1�A�1%�r�	�}�O�!�T��0w	��L�`�p�;���&�0w	��L�`�p�;���&�0w	��L�`�p�;���&�0��Ha+S��J��<�H��/����_�C��?/��C�Q�!0ST�"12@ABPRaq #$�%3`p��4br�����	?�����3�\i��E�7f��k����^���Xd#4 �9dF]еh�{x
�V���?�N��#�m�S<�r�3��򕈑q9���r��?�M����}v�A5~�m5��ād�m�&��KF�1�#d	���ȯm3��7���,�$�+��t���Ě�+����8����`��X��Eq�;�i4^$l�r3Vm�|3�F1,��FY���#��w7k�o� �F��g��Z�Ko2��#1��{JDb��X挜�,*�~�-z�k��k�ݳ��P磺��K�'�q�A ���3=��Be���r5�e����;0�2k�I�j���|�⿂����9�4�Co)"X��}j�
s\[�%�|�ƚ�@-QѢh�0������2�jf���I8�NA!���dj�M7�Pڹ��D��3:�\�_�Eq���(�'�g��0Oi:FY�����}p;�e��2��m׹����V(b](�2
:`��=�!���Vʧ��g<�ƀ	/����.F'0Nr����V��gٟƣ�ķ��g�!��#���yV��N�Ȍ���MK0��&���'=VR|ي��<;��v�t.��q2W���|*yB%�+�w ���y��J'�k��
�n�;�T�s�]C���PU��R�[Kn��r+���;Y
����85a�����$�,�U�v�"Y4-��r��jm?ߌ���+�<�"���%s�+�ï&Mp�uzI��g��W$��:���sa=s�2e6>M4rGBW���0������i�H]��"?��R�����6��*�����X=p*����[5��5��^��o�Q�$�:K����&����`3�Օ�#]!x\�$�<�a�47�O���t�-}������)����-X�bRE#�D����Y���VC����I�E�+����w�<�tHZ���,G�~�4!�}��'�Rc5ܰ�e���Y�8oU���Y.��-*^[��uv��[�B�@CZ���Xl���R��Pkt@��x��߸BD/�V��7�d�A;�1�_c1��A	.��b� �J�:�TH�՞z2��t�x���t���[�>�\ɺ]�V2�%�ֹc�j|�#Z®�8z4�H��Q���X��� ����D@�_c1y����w,V��%h���P4ED��"��.~�=�^�*�Y"�,b������+�=�	=���0��k�48&�|N��'��]��"��Igr/���5�O$�Aκ�7yk
��k�	 ���'�W��/#��S�\�yN�ڰ�o����Ez�@=�?UX��<�t �d�i`�O1)"�=��"r@��R4f�@�52H��0��u���3�%�)l����R��:`T��0A��ee����M�R98GT�9M�0��#��� ���]u��7��sY��'s�"�	�8:����mhI��j(Z�[S3��˘I!�eA��	��8Ϣ���
����Ks-��$d�tvU���0�b�I2A"�r֔�/�&֤��s:j��W� ��f�P~��Ma�K����L�,BPSf�����Xe���d�$E�膭�˗��]�s�h�&)�~��K���֛,N�w��Q�P���+h�jr�+�k��
�a����%a�������$k�\�7��|Gw:X��I�Km�J�b�T��%Xٸ����9�H�8��ʰ�ɮR.�ʩ�k�K�Ύ�s\�嘢LXN�,�!���M���R܉ApJ8A�U��2a���D���%4
i�����\č�^}�q>|<�|���@��ug5����8=�F�b8e��uL���(�j{ R�|"�T~j��Ohy��F�l��Q�s
��t@�hέp�;��"xa��F�Dڴ�⍐��=#dJ��v�����(2|�G����5�$�X�Iq>�il"��q��$,ΉI�[؋rK��J0���-�]o��#��y���4tb�,NX�pu��H\k�pXY��ɮG
4
�'��P%�:��=��W6��gB��:�����8`e3ΐ��K��p4�������r��I��Y���ΙTq��i�_5%�V��쳗���=��=���9A�H�mI��9M5mE��&��ػg�60�?[	�P�%`o������+\V���
�qX��7��`o������+\V���
�qX��7��`o������+\V���
�qX��7��`o������+\V���
�qX����[Fz��˧���+�<ǧ�~�!�$.����V������:��T���q$�⪧�!�(�h�'%ɽ�Ȓ~�j�	&�"��@�"�Um=nZ�%ў_��x��1��G��='��+�<ǧ�~�}^�=>H�v�)��M�S�y,n��e�<J[W&P��]`���e[[�K8�&�@
������DY\!(���^�p�Z���x�~�@@���m<r�HX���c���B�Ƥqd ѐ��x�̹�qk��M6�� TH�Y��kPx�d3�["Ve-�^n�3g$p�bG���lع�y��Ss{��d*>P;�"��z|�����T�c�B�|���)��!L�K��5eYl(��s�i�bI$���-�e�w�W�y�O�<�_�W�y�O�<�_�W�y�O�<�_�W�y�O�<�_�W�y�O�<��#�5;��2�=ܢ(�	�%�#��R�˲���PU�v�8!dU��j�S��QJ��3�U�h�:��FL���S�R��2�1S*���l�������$y���J���XQ �3]!>e�G����3:�֝/1�.��fd#��(T)c�&JK��5�3EA�e�A�%���>C�w�Ex��#��Ex��#�ޤgRD�u�U&�6y
����G�'�J5)�4�E"�!h�G.`�Ϥ�������-7U;�i[0��D�Nt#y�"sq�*LrF"��X��H�R�ɇ�w�Ex��#��t.Z��$&z#��H��P���<�1�:��#�t�j��'�z�%�S:˓Ʀ"Hҟ��Dd�"��#�)nKG�āu�q�8��1��G���1��G���1��G���1��G���1��G�����J	5o)�rl��5���)$�5���)9�q�c��?|	
��2r��P��ơ����S<y�B�@��c$����3
*$h��FG��+�<ǧ���+�<ǧ�~�-�)�BB���Z��w�Ex��#���)�v˴�	ʄ�qAt��G�OXJ�Y�#FY���X�q��������u-µ�P6�2�4B�o�þ�+�<ǧ���+�<ǧ���+�<ǧ���+�<ǧ�z+����+����+����+����+����+����+����+����+����+����+����+����+����+����+����+��+�<Ǧ��t@��a���Vk�%a���Vk�%a���Vk�%a���Vk�%a���Vk�%a���Vk�%a���Vk�%a���Vk�%a���Vk�%a���Vk�%a���Vk�%a���Vk�%a���Vk�%a���Vk�%a���Vk�%a���Tj�>
�?�?&�T�52oS&�2oS&�2oS&�2oS&�2oS&�2oS&�2oS&��NY�JH݃��sڤU'�L��ɽL��ɽL��ɽL��ɽL��ɽL��ɽL��ɽA���4hѣF�4hѣD�݇������g3�hѣF�4hѣF��[y.˨9f+�ޱ[}��ޱ[}��ޱ[}��ޱ[}��ޱ[}��ޱ[}��ޱ[}��ޱ[}��ޱ[}��ޱ[}��ޱk}��ޱk}��ޱk}��ޱk}��ޱk}��ޥY"q���O����y�O�<ߐxg��c��y�O�<ߐxg��c��y�O�<ߐxg��c��`�4
@�4
@�4
@׆y�O�<��
qN)�8��S�qN)�8��S�qG0c<ǧ�n���xG��c��q�/��,y��?E�c��7|��mJ6�R��FԣjQ�(ڔmJ6�R��FԣjQ�(ڔm^�=>X�wLw�;����zc�1ޘ�Lw�;����zc�1ޘ�Lw�;����zc�xG��c��y�O�<ߐxG��c��
ރoA����m�6�z
�ރoA����m�6�z
�ރoA����m�6���c��7�BELv1�T�aS�Lv1�T�aS�Lv1�T�aS�Lv1�T�aS�Lv1�T�aS�Lv1�T�aS�Lv1�Q̘�1��Ǜ�|6������&Qa 102@!A`p��?����
�*`���
�*`���
�*`���
�*`���>4�q�M�&�a����bF$bF&�a����bl16�B#ۜ��=N�G�)�c�q��d{|�l�o�S����p'p����"D��S�����?y�u�=�
N�G������N$#�S����ju�=�
�.z�l�o�S��FeL0T�SL0T�SL0T�SL0T��O�$�J�J~(�$H�"D���!1�F�4h�0�®��4hѣF�4�9�Ʈ0��Dln5W��Uƪ�Uq���\j�5W���a�U���9S� 1Qr�!024R�@"3Aaqs�CPTp���?�HYVU�eYVU�eYVU�eYVU�eYV~���2�TʙS*eL��2�TʙS*eQݷG�…
�0-I�1>�/��!��,��ww-a���=ㄥ�m��rRRR�mGw�6���Qݵ
���Ɖ��}.S�ĤO�~J�Is$扐H�%q�wI����p*$��K�)��mGv��89�D+�"s��Ffh�#8�19J�3W�N+�H��f�~L��Qݷ�ඣ��Q��
��ۂ�>+Z�Yi�U҆CKi3���,�&(B�>s�x�mGw�6�����ڎ�mEYVU�eYVU�eYVU�eYVU���P��R
ĀA�-MFĉ��Z���1�5&c�jj6$L����lH�����ؑ3SQ�"f>��bD�|-MFĉ��Z���1�牘�Z��Z��Z��Z��T�*<&��q%��D��r�����G���x)K�wg����Y������m�ە�+nVܴ�����CV����wO�]�-���:U�}k9]�n#�2]���۞v�]��nx۞v�]����_G`��CV����wM��Q��:K��:�O�g+�lōٸ3�W��U�{?�zj�0��a���W���C
^��5�#�`�/�:U�}k9]�f�������բ}k9]Ҹ����{�+�/k��@v�d���l#�W�6�+��⍄r
�F�9x�a��Q��A^(�G �l#�W�6�-'�1�6��>����]7���Ŧ��y���PK.3Y�Q�<J<J:bunyad-amp/assets/images/reader-themes/twentytwentyone.jpg���JFIF���































































































































��X"������#��|w�O��@��;u[��Uz�\���y����;jv�����Cǧ��<����w�
��fj6��^�=�ڶ����ե[�w�gN��EI�w.^�~�v�%�@�b�8�+�����x���`+�� �!�}+Yz�*�Qq�
?x�_����v�Y�n����;�w}��5;��S�����9��_v@)U�.�FD\kR�k�vm֩j������@#��AS&x��%ou����>�����)�MZ�ځ��/��=Z�in�k������e�������o0츃R��n��|㉭�l�M��[>Һy�2E-K���ν�diʼn-m�q?[ y�>���ν"���ys�>=������<�I|�޼��	v�
�I�>y��<I�;RԻ$���g�\z뎢�{n�
�8����W��h�<N<�͉.l��n ��f�ǖ,s�
�t�c��f�fܮ�O$jy�m=�t@
��/��w�w
�M?�����l����*����Of՝}�7�
\����Η�5<ͣg�Fޥ�Y�����~6�q���t���7����}�N9�Φ��Ы�Ɵ}�Ź�/E�R�����9��2�̳�S�%�m�p�n}�#���b��+`ط&z_DT�>�y����b���g�
Uds�}�
��l���'�6	<u��ǹ�e]���y�6[?hgU�l�ޟ�����Z�}�B��r�KC��<í/	oC��Lܔ�9Ե>�6Z���Ks��ހ��պ�վ)͡��\I�gY�������+u/�mK�6��~c�}eEjܜ���8�Z�X:�F�����zQ��}��9���ҝ����|}똖�[���>o3�x˾�ǜ��bm(��%�P�2�C�5�PI�_�A#�;���(��`��o3]���\��:e�3U�*�_��g���y1��9We�Z�9��-��w�@�f�Ǟg\�ڥ^��e}z�m�j|�g~E�Rݏ�w���׎Z:��p���P�s=+����}��k���b4��K7\K7�y��I�Γ������`H$0 HD���DVfR�)hY��5rR�nKZ�e1��@����+Z��^�W��z�sM�+�h�c(�5�\"'3�i>��[9�[յbB
�Lb��� �9s�(�O]^(s�W.v�����2�nXi�qWz�7�S=!�m�M收�a�l���®��ˆ�ES���i�Hg�M⑷M+�F����� H@�`	  	3T���	�R���-���&խ/L���P&k�i[M��3��%zb�*����??R�1GJ^|���BP��۞|zkz��E�|y��j��\4���-�3�)��W��[+�1��|��}+[L_;W�N�i��<��W��I�5�	�mt�y�^�s3L�]����I
!1AQq"2a�R���#034Br��� b��Ss��@��$5CPt`p����?��rʽ�Qԁ��t`zj��L��X���m�heWRcO]?�?Z���2.��,\stYF���(2�O���5`:�(2�OB
~Z�%�K�ո���q�c-|:��5uX}��֮9�Ɨ�%�+��UƷ�z����}
,Hl�"�E�5�?Ə��b+@�$a�"�v�J�Wu�h���Z���˓�D �xvX�y�s_$���vI0���|f���҆D0�ī��2��̽��X�G�i���^��K��[2R%�l`�����\b<p��43�E72⺃��g�-+��-���ԭ��#4�fo6�{��,vN�n� �l��9�Ua �>6�1�E�*��1�.1,vķ�uS��D�#L #��@�X�n	�������9��8�0���(�|�����_;��޾�mǻ���,�n���*xn���I�s^���F�{?�&"{?s1o�}�/��9���n��m�X��r\>6�3�Ơý{�1o�ȧ�jt{�e�(x�f��,M�T�[��f97ZfQ�	�֙�����sq��;�%��&C)!.����������+��&��E�^9��2��e��.��Z�Wv�A$b��+n�T����#�_�m��M�O �/nt�꧘���&�n��V|'�hm�M7�N�O�f:ʨ���w�fbN�|�O�#��	_z�)h�Z몵��ye����b07�[��i{jM�fd�I���!%B�1��_B�|�X��p,��ч�t�ڕGԂ����W?�gp�F��G�q��j/,�p��8��ؙ��[�E���7���F���WF:^�54�
�"���ls)�x�
j�$M�h�Je��J���T�`H��c��p�,�m�(��d�,$���",���}�яjQ�g�8�"�olǁ�$�H�H�*�%11K#`�/ğF-�Ci���B�km>4m��c
��3��’nbc-�	�xFY��4�k�:M�>�����M�U/�^�M$@�[J4��$P�������6xF,�X�­%��2��h��vy�19�Wy0��M�W��N��7�ܢ�m��߻(����o!�l��6��|L_������8�~IS�nOAM���ꭳ�~
�&
��":(������U#Bэ�S����<
3�<����yp�1P��(�"��+i�K��{�#+XŁ4H�6\�����	g_�t����1�Y�Cގ�s���G�M9�6֌jΒ�wß��U,�lc5�:I�D����4i�/��H�d(��}�g@F�:
���X,s�f��9H,a��*��8T{<Q61��Ln����[�2	~��A��:,����<*��c�֡��#1a�g<,on��9W���eeq�b�_���]J��Pk�P����Sʬ-���a�J�4T^��8�+���rF���6o񒕕�%!��
��G"�&���k��"��]W��t�q;^g�VTwtSv��Ŵ����e���+
X]SNK[(m�u�[[���o�jiػG{�N�-���*9�}Ա��%q���ʟi"W�b.�)P
�qrI=м�ަy�N��UÁ 쭻��ҶF��h�p�0qi�xe[4��(������*�l�y�B����c�J /�Yy��'*����-�E�l�/ʖv���q�bF>�����X�(�ߊ*��|Ǖ�H��G���dă�{�G$M*�w�
�
I# <Mo��1�������o�Q�wt�(B��N�$�˄��]ـ�j�s�l�9K:avT��/�Om
�Y.`�F7|������3oC]J:.����_(�Bw�o�+�}j)�����*w�<�<A�J�S��Itތ��7�w�-�����|�f#�t�����6pŢhˠ9��mk����e�Fݘ~�LX���~6�Q�hyawhm_���b3��۴��O����kf���O�l?T���U'�6o�-E���{��֋�1^����-RC�K�3@���=�'��~ܟ�v����x[��O�;��EOȧ������ص?{a�wx<�v}	�]����zTS�i�"��F�����\@��ܑ�o���k|d�hR���Fĺ�� ��o�Cm7c������I����}��c����&�%���B
`�?Nj�������+��V,E����	�M�@��tq�	����$2c�&6[�TQo��ǭ,Xg�[�b�ۖe��FO�Z��X��^5N͟���PE�B�����{{)�-<R���Ź� m���E����i�s�fvV�PB�q��~lu6��1|��|�e0�7�m6��ņ�?��H%}�4{�^ p�[�T���ۆ0�Yta[���hL:c����(���+s�g�t��u¡o�Z�2N��LW.V[{�a�"��2��Ie����Pû����$=���Z8(��\l򨌛��K`��G
���H��_"ְ��*H$�#���4���ݚ5kbb�n(�1П��
�n�A�:�MƗ��9��P�r��������n\jt�^F��t�n��|ROψ�2��Sb�~�?�f�(�XKD�kp`Iy��v�)����]�o1w��g���ll�[38i`��hH��V����R���G���9�8� 1^��$�<�%m�!$�c�e��5$��/#Z�$�35���[�겕'�`/�h�"�h��7��G4s_^ڌ���O�B��=�a���wm̟
�c��s`WO�
�@�E�,��z-�۾�ȼуccbsҾE9��_7�G��K��hm0�7A��d	[���I�����T#�PmQ���+k�u1M�B����E��Z�S�*�h�RU�>��n���"�`��|��j�F��t�	���
�e' bI�١�l䁎����b-�C����[G�ʐF>qF�{r7#L��'���]�|7i�깘X`o��iu�e�E�"6�1X�a�/ۦ��	~�ʶ��$�늶�Nfx��S��<s�oB�B�b=�A3�ud�M�H�
��Τ�Ѭ�I ��.t΢�ܐ�I����*٥��C�;�uPE��PoÕϴ�"A*j��-�B8��4��n���T������Lـ��K?(�{r��m�/ɦ��(y6�ʠ7�"uݧ�V�}�[]�V�z�����#��ً�l�݌D��;(�U�t�K�<[���%�E@qy�A�)f��E�XՑ�R�`m�u�[:���o�H��n���M�8�o��H�P͵�g��0���֥�&\-��d�GkhP�Nȭ�����m*	A`c��rL���>��Xd�cp�b��T�&�DK��`�;ؐ4e�ʚy��g�X�[*�����������l_ͮ/�R�<k�M�Gu�2X��7��5��뼖[of7`4P;�:U�٤��m,2�vN�o�.*h	6�Q�31J��w�H�Jӣ�E��k4b�����zS�6��nZ$G�ػ?u��O�	vfp���v.0[���r�i�pJnbF�w>��f�FL�Ge�0���u�$���5�a-t��6�aR����<wSs%��9���T �Q�ȄPG���H�\��c�ϣkF�T��ˣ\=�����h�Ll�Ġ��`ys��w|N���`����Gvܪe�i$X<���0ڶ�g}���	�7���*H�
���,w�a���(ɴMd�'�\b���!Fw&�F;F��]PI���Φ���Fs$T
V���Er6���(Ӽ0��V
�]�_�A3;<R�Yc���e:2�ԁ��B�*ZY�sڵ��=�p5 z"�xew!Mu�E����pt7��۾�'�?�W�vk����Pb�iv�%�G!������$���;���#¶6�������^��/k���ˤ�7��e��F�o�s$�-�Q|��l������x_
�+e�s���Bfr��L��<�<�E
�c/�;��1{h)�2K��ڬ�+�:6W�}G:�7�dI��0�+������Dk��럟���Y?�b�

��M�a�j�M�"[�l:�L|n�M�d7�k8p]����W
�T�t�&��P�T_���;g�*	9����w���ks���h�~����In�fRm�1[ݘ��1�3�[ ���l�q��t_�?��k��
�V��/����ܽ62�D\x�P��@����u6�jx�5�[��[����s���9�?[�k{��5����G�/q��^����!����E�{��[��oq�+��5���ҷ�z��[��oq�[��m<
	�?�[�oq��Z�ˡ�+x��?I ���
�a�L4��-L3�}�mZ�Ul�t���>�
S��qCF�ޗQD8'�g�u����G���
?����j�<��Њ��ъ�\O�q����~4�^a������y�wO��U�u��7��֎�M�h��>�� �?�9~†x�t�ݭ�A�z�V��6a�_…_�i�}�4�K1��MI�_�5��~B��bq�d�`s�A��ŵ�C�5��5�(�#@�V�#n�������|��&����(�,���y�����޾4�&��F�n�ƾA74���}�=
�y_9�g���h2q {�t7���
�Z�2���@9�R�#�:zNz�҉�6��Ȱ�!��.�$���~���i �g&)�Pr�Ѫ�?�E��5�ܻy��40�8A�֬M�ߨ�qOL�26��ܛ5>�Nݖ:ro4�ވ����E�ҝ>��?�}�#��_�T��/x���^����U��?SW��A!Gh�V�/�׷�o��Th�K
2�~�ß��t�[h��5ӥo�nu�0ݿm=�⦄�;� ~���\i9r�l�����w�ON�+"���;�<l?ZkǙ����i�íaŗ�_�E-�J8
OZ�!�S�(����·R?h͕�yp�*�l�F��Q|�?Z;�p�u�}�W�!
l���嗕j|mǍ�^�x�
���~ښ-�
�0��Ƈ���l-�tsR�-q���:�h�-~T-t�}$��=?�+��9n��f�z�Sa��ޕ�W�L���q��'|&݃�ζ��ygQG��m�)uט־C��۝nS�O���fA�TV�x�/+q�%X��e%���
~�Qd[��:��[+j=���$����
�Y��w�S��t�*)U[���;u5�ԯ�K�:~����ɽ���9��klWyTmڱ��n�sDӶ�sΤ�{�h��3,8e�Q���.�r��\t�ʸZ�8�+��T=�[W��Q��
�ӏJڡ�JTwi��R���t�ef<�<I�8�<�y{B����|*<"%6���ۉ����3�b�������6N����d\KR :}�)���h���G!U�>�Kv�|�
��fț����}$���M�����D���:*�lu����1ǘ�!G�U#���v�k�X��RbA��4��ӶՌ�N&�m�p�1��a,k3[;~��T6��ӏ:���*�e�_�@al������p�q��O�
����� ���J�-�Ҋ�F�'?:~p5��I �
�o�XjՆ��RQ��"���h�H��ƞ�U�mt�+�2q_Қr��X��~��A�+���T��r�5��y�z93�y��c;�6�S��
(���$�^C!Hga�)٭��U}h梢:{>��å^��?���Sl(ݸ�$�A����q��vl�@��z�A�X��3��S\Q�Ǎ9�Ҡ��=*E��m좠�~Δ��E��ǥ`��>4�V��z>�DMר��$����?�\�:��c�v��,������W!a�&}���D_!�*F��	IbF�{E4� 隸t��h� �>+�
Ic�F��vu�k>"�4��^��%����tΥ�Αe�����8��	=o�Ұ�O,����c�e�@቏
|�y&��_/:��G�@�:h�kXe���f1�g��P�����u�b"��||�K
Zb-�t��9Q֓U�>�mGOE�����v���)�,A�q�S�e��Ұ���H��V���
id�=kgQn�؞b��#|�
��f9�g�9[����#��dp��
��T�.샫R�t�:�n~�cA��/���Q��;��Al���u?�g|�4cȚ \���Nk�A��ɑ����4���rn<�^Gƅ��˟J���R��֚�5�
�����QL�K�x��T�4�_��;��GZmi;��|~�]GOK�/eӝ7h��E����<�S����a����z���9�u$J�:s�nA>�
��5����|l���#\���_
�P$q[A�-��0
��6]F^�Y�,��Yd~��CRw����M�)�
w�5����Ͳ�����v��&�jDP�.h�Q��&����I�q�5ol�ˠ�Y��v��G/ύ<��i��~6�isQ�{y�kj�xȃ�_���\�'�*Q��-W�Ty_BmK|"���r�Q�R�����m�`+�?:�y������e�f(��V��X��}r'����J�U��K���4�wk}tn�#X-���<Q>�n�<���u�!��r'����+�N-�',_��=�2���fY�
5���t�<��ӯ-Fu{���*��ޔ��|+���>?I��<|�w����蠚��nN\�6x[SL�kp4��L
�Z��
�l=���A�c�
�ݓ�:��N�97��Tmm��YW��{3�S�Y{Hx�V�q>�)�b��6 ����u#agQ�:�_߅4eM�t���[�~��C=x���������Ҩ]=oLn��45��XxSf��/��U�
A���U�y5b��`m��Mn,Tu1M������oM��#8#	�B�j
��`��aj��-��a��V���)�:_�K������S�^T;��|~�l8���4+�Yt��ZMyP7@y�l9G��d:е���#������t�"ֵ���h랇ZVh�dm���U�J���C<?�m��SHSI�L�ke*�j�Yu��iA��5e���_��>��k
�>� Ձ���͜��!�t$P�{h��.mo�Ս�t���&����-H�P|�3/�8��G�á���1�|R3x��Ο5<��eb�£9ސ6 |G�mc�S�f��*E#>U���;K�$0���8쭹S�QȚ[f�F�R�t5	�Ν-��J6�^�G��)T�W�tj<���X\i��M�|���V�m?t����R�����VҹՅ��Z�9��+����r�toʣ2��ϗ��io:�
�Z�Q+��ΰ�|�������{��f��V5��@�S���3���.b���*���k�R��2��^V��9��fq,%
��mo�\����G�X�K�I�l3:��'�g�� al���&���~f�g^���]iV��K��Zڸ�C�޴?ZM}�t�mM{/�,�G!�Q �I��*㼹�hz�WϠ�ѣ�ϗ��*��u�4c���iC�q��>�?�\*���LX[/m}�o
� &����'��A2 d(%�ԍ�I�qxպ��8Q�}p���8U��7������n��%SΕБ�}&���3�~��T�E�r)��>yU���~��}�>6�=�և`�S�hken�cks�
��ޙyp��d*�Ǻ���o�d�
�42�ʶ���ƠB�������>�n����^Í[
�孫:Ư�����ϼ3˭j����[Ɣ]��|+9	6ʐ�	��8��J��H�
��4E�8�N	=��А��y~"��"�:�"�t�����>?G��-!1AQaq����0��� ��@P`p���?��z̎���\�j����us�
�@-U���0��]����Ǩ�0m�.�>��i�6�C��,�!e��6�5��	�G�D���҅���F�w,uK�^�ү�ܥ@T*�-
r�P�fX�p�X6��C�3���*��Z�TiA��q{.x�|/y�c
ʡo��|f!I �Tt��<w�
@6�k�!J��Z�/k�e�R׮w���T�d(�Z�U�q1��&t#�t���c��4�L4����Y�j`+�a
�c�K���(�5뉈��@�5tй�[o�2��,r���
�g�J����vU�}x2Q�k�37�[��h�cv�=^�2�!Uc��$|���F��p)͹Q�ɩ*���P�u������)�A�6�e�v�j;�[��,�A�L,+��x�z�BU=w[��A+�Sj��M�V6h4�RӅ6�
�E�5!
x8��q���:?�_���Q�Tt~�]�}�Q�(��.���5v��X�Ɠ�M�<>��X��kKeL�m�����%�S_�
�@�|lL��"��;����~��a\�X.�U�R(f2�&21H�N��4?-z
an�8y?Cؖ4*��U�\�n|�0.y��UP�m�@(�쁢G ?jc��w7�9�A����
[�[��:�d�����EP
�����wy�~��,6�F�60Ӌ0��$g�^X�D]���: �u�)@5/[U@$\NYW}~��]?R?��
�5���b*d�%���qԅ)�	��P�|���4~�
3;0�dfmߵ��e���r����,Z�hॉ�_:���D��6
�QЌ�S���f���f�QZ�+Y�(�j�|�H�
���^�A�-�f���D:����K*�d;C^!��ٽ��GF�U�"dD�mtB7����xs�o|���z�
�ma�o�i�$T�$TI���ن_ӛCv�#�9j�A1����@0�8iƅb�;��#�׹�:Y��@�h�)�Ҫ\�]��C�[E�P���鑓��gMšQ�Wh����D8Wi�EFH/E�0D"�%��/����)����V_W���}�&�V��i��ףF�]��{#b��%�[�iU��$ބ�kK`c5 ��4�i�~�'X�ekQ��"u��ԡ-e�-p`fʐ�Ӳ�'(�VtY��;t����D��X�5��]{4˜���Ŧh ���H�:�֔2��q��y=Њ�8�=j�X�*���N����2�$Ӵ6��8(ô��A�d ��b�E#��,R6��v)�q#��8��]SE�<������a~��E�U�gf���*sl�H9��3'r�ns�/�#��v��'�bX�4T�p�Kf,�?��Z��v>Y)�Ox�MS#�oU�����p.�\&�HX�Km�[[8���և(�
Bp�=������w�g�}�h�Iz�����v(^i�J�b�>@���&���R`t��@*�(���dn�B����a5�Z�0a �[�tTM'��F{��җ���]������g��`?1XT�])��CJ�R���
,���8E�Qfr�R��U����j1������Pv�P�]
Wm��
ӃRĭ9�Q�;_=yb/.zKXDٛ^��c���ay�0�Ay�� Yb
7F��#��A^q�r�:����XaB<|>�s\�WUN�h���@�z�N���\"�c����2�8��b6p%���rP��(�
�=1��K4+a������X�wZ,:���J����&ʀ
A���<Z�eT؛k�f��z��^��5��6nvD-l�P�p�*�P
��nX�[O�@���ф�L.�YI�vŏ«|�S��ˢ�����]1�f#b�U��m����+��Ѽ�ݹ�Q�W:Z�Z��.�t�>��P���G�f����C�!��n`��_��:3�d]�A�"�1]R�|̭:�g�ff&x��nqa�����an�
6�Ab%mJ�^J�ซ-"���@�9)NA���������.{W*�me=S�gL�P![o���E��w5th�@�;Wod�mc(�t`Rֈ����d0��v��V��H�$F-%�Gk`�Hk��PU�-�:��[k_�m��A�%ו�x�:�
�.p�n�ԅbƦs]�}��Qŧ7���Up�S|��g�u�**�[����b�{�[;�k�1��n�X���/ӏ-�s���!�8 �N��,oX&����ŪD+�&Ѫ��m��,�������&���dR��y
�b�_�A'�X%IX�hpj�m�xݒ�4
��
�G�'#/��x� |��.�'��l�B�c��,=)6Hqk������4ձ�M4Ӻk����jпW�]�~�P>�z.(e@�h ؉�?B��#OM�� �0+�6�Y�dZ�U���+@��5�����
+`U��m�k>Ե�]�P9S����Q�:���
N-�[�f���B3�B�X�V
�?�C��: Gk�w���^f#�{AW���0L�J/��/A1�bĪ7�@�-)�2�R{v��8l���?���?���_�Z�@�s;+;Ʀ�`�
�.���	&�)�K `�8�P������a��H�K7
b�3����#�D7��H�޹q�'֗�O�A�/���zw��?�f>������]�?�+�+����_�A�1��i��?&�n!�AB6�G1;Yj�YA��Mu��
��؂�x��sdH�e^���|W���/�&ׇ+���2�zx���s�ܪ�"��5����<�{XPS>?�z���8~���ET���&(SI�iL~p���7Sʟ��-��ľ�I�[Cc������]��ڿ�Q
�)��楌ߨ�<fo�o�?4������V���>�0 �� ssz��~䷉�X� ���w��:,Wy��.�wl��j�1篘3�BY�����o@7X�S��^� �M�����·]���C�_(;��ܢ%勃ܽ������F�<����|
{�\z��3���.��H�E33~"���e��B�P��5*�8��ox��g�X'�`����UuK��&�Dq���3i��ˡ��a࠻����(��va�.�,6+�`�����2��͝2���Xl�
}ߦlyK��g��nk5qZj��Rb�V�,=?����q��P��W�\rTq�g�0?�[^�
/�E{��|�gL҇��ܱ����jY^�ԛ�6��`FZi�~Ծ��.u�ԕC=+�����1X�覘�R���3<n��@�6�U�«5�����!ψ�~�\�����{�D1��_D:ȿ>E��W|�@�YM�s¾�`8b����a�AzF�x���P�Z�h�t&l��:�����C�&�זQ!V��\tb7�šs�\���.+�L��)���o���>fF�����X;���(8�\�VZ�&_���5e{�����k�FT���0����6P��F�fR�c�^C��i`e�_�`V��F�H)�Ljo�H��_e<����bN�2]�ר�KO0���,eЄ��(}����
}8��w�QWJbXh{��1��%ʯ�~�y��~�ǟ���_��7j��-���)��)ej�^��Y�YN+u���.��ѷ��q�?���.ت��U�)@��塺���[�PX�d��Wn7G"֢�e�.��:�@(��5�v8H앞.e��OYCX9�nm2e���W�__�����.�o�K����r����Lk����-�C�|+Cy��m4��bh�Ͷʜ`�#G��1m�j)��o�l��r>�Nm�q9F�#�y��������r.p�f�:��di���-t,��@ptK3k��C�tl��_���n�1���.��"�۰lV=n%�_���W�W�J��D�N���;-��X�
�2��^�A�^�
��K�E�G��λ�����({a��Oq����^~����R�K7IMw�%��Ƽ˖7Wa8�=Ɣv��<s�eݔ�N��`�Sr:n,�����hln�˾He��Dm������P3������P�tvs�z�ݐ�f�(C�-�����1�6Z��8��]����Ț��E
�����S9"�G��h����w����/P�+�~L*�p|�� 4[�KA�y�/����M~"��<�-�
�y*���si�JJ�n���R�G*������R��e|�u��_����w���U"���t��gp&\�;���J��X��B��q��n�Ը��AH&P��a�O�����|y�#_�[�g��qAF���2����i��
������꟦�?�U�=�)���c�8������:�e�P>�f�狌B�L��^�@�+��[��a����m1%���Dc�~8����C�Ńj��'�W�)�wM'��Ľze+���jiጯle���8�Mk�!ᘥڍ���jӍ
�FX�uD���W�4b��Wu�e��_L@�5�s��^>aE=]�7��E�<�F̀;�~l��k��ck��j���۬����X��:a�b���?���{@��;�ٙd��0@u1��!PغZ/Q��OTmX���{��02�a��^6>�<��8aE��Q'7ݶz�"��T��9�A�v:_�(�C*Z��X-�B��}1
�"�cG�.n��eʔ��,���?p_��vW��	usZ�D��˓o��x����>A�e�)��bs@1������ML+ ]�vAd8
�{^������7��f�C�q�4����yc��`�Lhó��Q�V�;
�`>��;������q
�̝�_�.�:�ƾ�a.�n��Sǧ�����#~�v�⿋�Dk�9��?�o	���|�.���Zc�n[~+PI��8�>Z[���ۭ������n'.�j��y`�'m��{����+����z�P#Z˘��?�W�Z~�NشN-@&R���,�������o�hi��.M����C�[��*�F��נ��a�B��Q.	�<g/�s�}��Tb��M^N�����u��"��e�r��J��㞱-b`-�昁�b�_�f;D�rA�x����r��ݰ>��f�;�.��+�c�� �8��0V���s�C/t�%2I��,<��nH�`��̵���u$���!ŏ,G�����)���m��̐����t�=��d���=�/P�[.�����ą��1t��OE.���/"U��=?q�;U6����Y]|MAo���U���9,:s]�㱊C�>����k�*��}]���k����FJl���Mߜ���AKb��/�S���W:�`�d�@[��T|e�CMj�jš6y�<%'F�9Tn�w^��.9(_g�S'[��df�&��S�w�`4o�������?p�m|�L�}�Qϧ��@	�~-�=£Pb�~.5L�ZR-�G�`ߧg��2��b�~�C&��)(S��
)�<�����>�I�-�/�O����5��G���wl�Tk��"a��"�*vw��q�F����x�k�O�`]U��$
9��Xؤx0~&����#�@�X��`��#��+r��7gg�ݟxO�C�W��\2�Ɣ��}���_fX<�L��yc�Kh�O�A!|���b�Å�S��}�0���͡ԧ�a����������h[�8�
A%	�׳��P-˽V���{�A��o�,oY�;�������˨����	����H��QI�	�ȏ��?(�қ66��j�Jo�I
�w׏�����'�cyy����]�žb���@�m.�{��5�c-��%<�����p?lB�0-������뷩l��樆��L�wa�A��!�MN��W��4��e]�OY0&=��o��C͟��*�o�P}�H�Wß��6�z}�6@�۳���%�,������ƞ�}�"7��W
.2��l�J�۵|�h"Xg.�>��km'�3����*�'���\�]�+>�x�WJ�)����Qa��~Yp=7��1Bf�����2�W���8����
l���ɶ�u�%���]ׁ,/+��;jT�%�S�d�ቨ�TO���E�M7�ޠ�~�Ԏ�h����@�\����N�Ü��@��F��exԯ���8��@�E��G���,���´W�D䫻X�W��v�M��0��x/����M߼jR}�q��-�0�n��<`��Sۇr���Ls�py��;n(v��m���H�U�?Y��i�Ǡ6�Ӭy�}���A�,J�ʟ9%aV�/�QN�CB�����͠Z�x�A����W�!�d����h
_S�c��Z�j���W�O��c���H5��p����m�O��l=�������핥�h�(��Uqi�?x�-�ځ[9�\�oV9\4���AMqͧ��"��8(=�L�i(����XF�'���E��h1���u���h.P3
j�q'W��Y¸;�;�&��@3&@2ҙ&36/��(�fI���ǯ�2��l��JbYe��َQ��m`'��y������*�.��M�}��k0�h֍����0��AMֹ`��U����C���?i٧��6� �K�C��x�^�E�W�Y}h�ƈ�N��uN���ZD�//�-�� �5����{-(]�~����!A�oI��q0�.t{�Vi��G�]z�#w�"��X������M;�/[^"Lkᬻ,���-���>
Z�������D��]�X�eF@��L�v��NE��}*:v���,?F�/|���A��bZ ��j�b�Ꚉ*����-(���Kb5~^4~VM
������L)���U����W�j��
{9dR{5�q�o�9u!���j��D��rz\Ai��^����ʡ]���5!1A Qaq�"2�@B��0���3`p���?�8Q�6B��Q�
��p��ǯ̋�q������ݍ�7����I*vB��B��B��k�W�t���3�F�?���[x�`��A'��dn6`�]������q*!�p�y"�5�v)�H4
��0E�A=���
 �93]�m�LC��t����bjn��I�pc`�7���v~>#�$�_���b���ۙ�ĀL	��>"㍸!d�wF�3]�m�.�j�E�(�C��O�Ƥ�fI2���=V\H�Uba�'�W��8�v�`�)芻�f��`��!���<IsjL�7���dL+9ө&Q� �H�$3CKW�ꋳTH�ɕ�\<�Šr��AD�97]��v��R�� �ij}�#�J-�Q{D�E���� � "9(���x�{��Ǘ����iN���F<>�1V� �u�>I�ɔ�Y��DBq����9o6��+���8."O]",������ɩ����67�O`�CSM�9��'2%�ׁB?<�b�����(3�*�<��@�	V-aƅ�	��&3�_b� ������-%g�������P��<A-��$[�8�:�/H8a�-lE)�
�+ű�-�e��Ǣ"��W��B��7m���7�L��&ޱ%Ph��:8 ����yK�Ө�

w��x;�ag#���C]�A-���o����Ұ�,p�L2r�1ŏ.�PppX�czQ�T��Q��+<�~�|�D_������{�r]��jC�����&��)<ʳ�D]��8�<h�/���(��i�׈F����O4k��`��Fb�վ����ȷ�@4�� ��`�p�P�q�p�����g�l"��
��}��}�_Gp�&�8��,$�
(��a�
��&��!b0:^�jG��N9��s3�E׆g���{�{(I�J�Bv�Nï%�좧�Ab4��D(�Ϥ��,�c�{��2!1Aa Qq�"2����0B�ဂ��?��m�y_W���^ٯ��.1��L����{3��>��L�?�ovJ9N勠7QwԦk�#�Wh�o�z�ᴣXB�.NcEI���2ݡ��Ӫ�:�}D�I����ϗʾF��Qs���C�i�M�y��f9���f:��C�+�Q�9(P
���$���	�ΚAQ�sA���I醰�!��(�Ԧ3�����#$�j
i8 [�[6�<	+>E@��v
㌧��ڱ�1� � �ibӆ!9��QtBh3�G���&:kD�2h@�1�MKs����D������bdhB�u��3foP��x�i�D]�(��7��
���ٗL�58'EL8ʓ*�Ђ�_fͅ�]hhxQ��t|�`\�9�Vb"hꃨ� �@:���M+ē)�!�2�Cr��P.��� z�z�5r;��,��=3���PD�����x���#�7��?�g���a��\�i>��P��Y�$W����]:�/u�lA�+�Ma2���Lc�P��9rD�&8��$ƪ�x��	��=�t�p�y���@t>KI�
dP�:�+\]�[Z�ꏆ�[��kۃ��{���9�� ב�)�4��]<�(���i%��|���ޛ�1�A�J���'a#
ї�uA8��?B�&�N��8�VS����VMv���ip�f$�Sp:�LQZ�#Y޳�&�*����!8I袈W�k���w�#c3DU[~=w����V�\H�� ��SQ|<��c6[�޾��^>�
#)��
��DP�
iSވ�]�Y�oX��TLPpP�^�s�kT^ͮ�]�Ȳ��Q���PK.3Y�`p�		/bunyad-amp/assets/js/amp-block-editor.asset.php<?php return array('dependencies' => array('lodash', 'moment', 'react', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-edit-post', 'wp-editor', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-plugins'), 'version' => 'a557acd8c2d862609b7b');
PK.3Y�OC����(bunyad-amp/assets/js/amp-block-editor.js(()=>{var e={55:(e,t,a)=>{var r={"./amp-brid-player/index.js":499,"./amp-ima-video/index.js":692,"./amp-jwplayer/index.js":122,"./amp-mathml/index.js":167,"./amp-o2-player/index.js":192,"./amp-ooyala-player/index.js":326,"./amp-reach-player/index.js":120,"./amp-springboard-player/index.js":884,"./amp-timeago/index.js":415};function i(e){var t=l(e);return a(t)}function l(e){if(!a.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}i.keys=function(){return Object.keys(r)},i.resolve=l,e.exports=i,i.id=55},72:(e,t,a)=>{var r={"./post-status-info.js":806,"./pre-publish-panel.js":492,"./wrapped-amp-preview-button.js":106};function i(e){var t=l(e);return a(t)}function l(e){if(!a.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}i.keys=function(){return Object.keys(r)},i.resolve=l,e.exports=i,i.id=72},499:(e,t,a)=>{"use strict";a.r(t),a.d(t,{name:()=>s,settings:()=>d});var r=a(736),i=a(196),l=a(175),o=a(609),n=a(503);const s="amp/amp-brid-player",d={title:(0,r.__)("AMP Brid Player","amp"),description:(0,r.__)("Displays the Brid Player used in Brid.tv Video Platform.","amp"),category:"embed",icon:"embed-generic",keywords:[(0,r.__)("Embed","amp")],attributes:{autoPlay:{type:"boolean"},dataPartner:{source:"attribute",selector:"amp-brid-player",attribute:"data-partner"},dataPlayer:{source:"attribute",selector:"amp-brid-player",attribute:"data-player"},dataVideo:{source:"attribute",selector:"amp-brid-player",attribute:"data-video"},dataPlaylist:{source:"attribute",selector:"amp-brid-player",attribute:"data-playlist"},dataOutstream:{source:"attribute",selector:"amp-brid-player",attribute:"data-outstream"},ampLayout:{default:"responsive",source:"attribute",selector:"amp-brid-player",attribute:"layout"},width:{type:"number",default:600},height:{default:400,source:"attribute",selector:"amp-brid-player",attribute:"height"}},edit:e=>{const{attributes:t,setAttributes:a}=e,{autoPlay:s,dataPartner:d,dataPlayer:m,dataVideo:u,dataPlaylist:c,dataOutstream:p}=t,h=[{value:"responsive",label:(0,r.__)("Responsive","amp")},{value:"fixed-height",label:(0,r.__)("Fixed Height","amp")},{value:"fixed",label:(0,r.__)("Fixed","amp")},{value:"fill",label:(0,r.__)("Fill","amp")},{value:"flex-item",label:(0,r.__)("Flex-item","amp")},{value:"nodisplay",label:(0,r.__)("No Display","amp")}];let b=!1;return d&&m&&(u||c||p)&&(b=`http://cdn.brid.tv/live/partners/${d}`),(0,i.createElement)(i.Fragment,null,(0,i.createElement)(l.InspectorControls,null,(0,i.createElement)(o.PanelBody,{title:(0,r.__)("Brid Player Settings","amp")},(0,i.createElement)(o.TextControl,{label:(0,r.__)("Partner ID (required)","amp"),value:d,onChange:e=>a({dataPartner:e})}),(0,i.createElement)(o.TextControl,{label:(0,r.__)("Player ID (required)","amp"),value:m,onChange:e=>a({dataPlayer:e})}),(0,i.createElement)(o.TextControl,{label:(0,r.__)("Video ID (one of video / playlist / outstream ID is required)","amp"),value:u,onChange:e=>a({dataVideo:e})}),(0,i.createElement)(o.TextControl,{label:(0,r.__)("Outstream unit ID (one of video / playlist / outstream ID is required)","amp"),value:p,onChange:e=>a({dataOutstream:e})}),(0,i.createElement)(o.TextControl,{label:(0,r.__)("Playlist ID (one of video / playlist / outstream ID is required)","amp"),value:c,onChange:e=>a({dataPlaylist:e})}),(0,i.createElement)(o.ToggleControl,{label:(0,r.__)("Autoplay","amp"),checked:s,onChange:()=>a({autoPlay:!s})}),(0,i.createElement)(n.CR,{...e,ampLayoutOptions:h}))),b&&(0,i.createElement)(n.om,{name:(0,r.__)("Brid Player","amp"),url:b}),!b&&(0,i.createElement)(o.Placeholder,{label:(0,r.__)("Brid Player","amp")},(0,i.createElement)("p",null,(0,r.__)("Add required data to use the block.","amp"))))},save:({attributes:e})=>{const{dataPlayer:t,dataOutstream:a,dataPartner:r,ampLayout:l,width:o,height:n,dataVideo:s,autoPlay:d,dataPlaylist:m}=e,u={layout:l,height:n,"data-player":t,"data-partner":r};return"fixed-height"!==l&&o&&(u.width=o),m&&(u["data-playlist"]=m),s&&(u["data-video"]=s),a&&(u["data-outstream"]=a),d&&(u.autoplay=d),(0,i.createElement)("amp-brid-player",{...u})}}},692:(e,t,a)=>{"use strict";a.r(t),a.d(t,{name:()=>s,settings:()=>d});var r=a(736),i=a(196),l=a(175),o=a(609),n=a(503);const s="amp/amp-ima-video",d={title:(0,r.__)("AMP IMA Video","amp"),description:(0,r.__)("Embeds a video player for instream video ads that are integrated with the IMA SDK","amp"),category:"embed",icon:"embed-generic",keywords:[(0,r.__)("Embed","amp")],attributes:{dataDelayAdRequest:{default:!1,source:"attribute",selector:"amp-ima-video",attribute:"data-delay-ad-request"},dataTag:{source:"attribute",selector:"amp-ima-video",attribute:"data-tag"},dataSrc:{source:"attribute",selector:"amp-ima-video",attribute:"data-src"},dataPoster:{source:"attribute",selector:"amp-ima-video",attribute:"data-poster"},ampLayout:{default:"responsive",source:"attribute",selector:"amp-ima-video",attribute:"layout"},width:{default:600,source:"attribute",selector:"amp-ima-video",attribute:"width"},height:{default:400,source:"attribute",selector:"amp-ima-video",attribute:"height"}},edit:e=>{const{attributes:t,setAttributes:a}=e,{dataDelayAdRequest:s,dataTag:d,dataSrc:m,dataPoster:u}=t,c=[{value:"responsive",label:(0,r.__)("Responsive","amp")},{value:"fixed",label:(0,r.__)("Fixed","amp")}];let p=!1;return d&&m&&(p=!0),(0,i.createElement)(i.Fragment,null,(0,i.createElement)(l.InspectorControls,null,(0,i.createElement)(o.PanelBody,{title:(0,r.__)("IMA Video Settings","amp")},(0,i.createElement)(o.TextControl,{label:(0,r.__)("HTTPS URL for your VAST ad document (required)","amp"),value:d,onChange:e=>a({dataTag:e})}),(0,i.createElement)(o.TextControl,{label:(0,r.__)("HTTPS URL of your video content (required)","amp"),value:m,onChange:e=>a({dataSrc:e})}),(0,i.createElement)(o.TextControl,{label:(0,r.__)("HTTPS URL to preview image","amp"),value:u,onChange:e=>a({dataPoster:e})}),(0,i.createElement)(o.ToggleControl,{label:(0,r.__)("Delay Ad Request","amp"),checked:s,onChange:()=>a({dataDelayAdRequest:!s})}),(0,i.createElement)(n.CR,{...e,ampLayoutOptions:c}))),p&&(0,i.createElement)(n.om,{name:(0,r.__)("IMA Video","amp"),url:m}),!p&&(0,i.createElement)(o.Placeholder,{label:(0,r.__)("IMA Video","amp")},(0,i.createElement)("p",null,(0,r.__)("Add required data to use the block.","amp"))))},save:({attributes:e})=>{const{width:t,dataSrc:a,ampLayout:r,dataTag:l,dataDelayAdRequest:o,height:n,dataPoster:s}=e,d={layout:r,height:n,width:t,"data-tag":l,"data-src":a};return s&&(d["data-poster"]=s),o&&(d["data-delay-ad-request"]=o),(0,i.createElement)("amp-ima-video",{...d})}}},122:(e,t,a)=>{"use strict";a.r(t),a.d(t,{name:()=>s,settings:()=>d});var r=a(736),i=a(196),l=a(175),o=a(609),n=a(503);const s="amp/amp-jwplayer",d={title:(0,r.__)("AMP JW Player","amp"),description:(0,r.__)("Displays a cloud-hosted JW Player.","amp"),category:"embed",icon:"embed-generic",keywords:[(0,r.__)("Embed","amp")],attributes:{dataPlayerId:{source:"attribute",selector:"amp-jwplayer",attribute:"data-player-id"},dataMediaId:{source:"attribute",selector:"amp-jwplayer",attribute:"data-media-id"},dataPlaylistId:{source:"attribute",selector:"amp-jwplayer",attribute:"data-playlist-id"},ampLayout:{default:"responsive",source:"attribute",selector:"amp-jwplayer",attribute:"layout"},width:{default:600,source:"attribute",selector:"amp-jwplayer",attribute:"width"},height:{default:400,source:"attribute",selector:"amp-jwplayer",attribute:"height"}},edit:e=>{const{attributes:t,setAttributes:a}=e,{dataPlayerId:s,dataMediaId:d,dataPlaylistId:m}=t,u=[{value:"responsive",label:(0,r.__)("Responsive","amp")},{value:"fixed-height",label:(0,r.__)("Fixed Height","amp")},{value:"fixed",label:(0,r.__)("Fixed","amp")},{value:"fill",label:(0,r.__)("Fill","amp")},{value:"flex-item",label:(0,r.__)("Flex-item","amp")},{value:"nodisplay",label:(0,r.__)("No Display","amp")}];let c=!1;return s&&(d||m)&&(c=m?`https://content.jwplatform.com/players/${m}-${s}`:`https://content.jwplatform.com/players/${d}-${s}`),(0,i.createElement)(i.Fragment,null,(0,i.createElement)(l.InspectorControls,null,(0,i.createElement)(o.PanelBody,{title:(0,r.__)("JW Player Settings","amp")},(0,i.createElement)(o.TextControl,{label:(0,r.__)("Player ID (required)","amp"),value:s,onChange:e=>a({dataPlayerId:e})}),(0,i.createElement)(o.TextControl,{label:(0,r.__)("Media ID (required if playlist ID not set)","amp"),value:d,onChange:e=>a({dataMediaId:e})}),(0,i.createElement)(o.TextControl,{label:(0,r.__)("Playlist ID (required if media ID not set)","amp"),value:m,onChange:e=>a({dataPlaylistId:e})}),(0,i.createElement)(n.CR,{...e,ampLayoutOptions:u}))),c&&(0,i.createElement)(n.om,{name:(0,r.__)("JW Player","amp"),url:c}),!c&&(0,i.createElement)(o.Placeholder,{label:(0,r.__)("JW Player","amp")},(0,i.createElement)("p",null,(0,r.__)("Add required data to use the block.","amp"))))},save:({attributes:e})=>{const{width:t,height:a,ampLayout:r,dataPlaylistId:l,dataPlayerId:o,dataMediaId:n}=e,s={layout:r,height:a,"data-player-id":o};return"fixed-height"!==r&&t&&(s.width=t),l&&(s["data-playlist-id"]=l),n&&(s["data-media-id"]=n),(0,i.createElement)("amp-jwplayer",{...s})}}},167:(e,t,a)=>{"use strict";a.r(t),a.d(t,{name:()=>o,settings:()=>n});var r=a(736),i=a(196),l=a(175);const o="amp/amp-mathml",n={title:(0,r.__)("AMP MathML","amp"),category:"common",icon:"welcome-learn-more",keywords:[(0,r.__)("Mathematical formula","amp"),(0,r.__)("Scientific content ","amp")],attributes:{dataFormula:{source:"attribute",selector:"amp-mathml",attribute:"data-formula"}},edit:({attributes:e,setAttributes:t})=>{const{dataFormula:a}=e;return(0,i.createElement)(l.PlainText,{value:a,placeholder:(0,r.__)("Insert formula","amp"),onChange:e=>t({dataFormula:e})})},save:({attributes:e})=>{const{dataFormula:t}=e,a={"data-formula":t,layout:"container"};return(0,i.createElement)("amp-mathml",{...a})}}},192:(e,t,a)=>{"use strict";a.r(t),a.d(t,{name:()=>s,settings:()=>d});var r=a(736),i=a(196),l=a(175),o=a(609),n=a(503);const s="amp/amp-o2-player",d={title:(0,r.__)("AMP O2 Player","amp"),category:"embed",icon:"embed-generic",keywords:[(0,r.__)("Embed","amp"),(0,r.__)("AOL O2Player","amp")],attributes:{dataPid:{source:"attribute",selector:"amp-o2-player",attribute:"data-pid"},dataVid:{source:"attribute",selector:"amp-o2-player",attribute:"data-vid"},dataBcid:{source:"attribute",selector:"amp-o2-player",attribute:"data-bcid"},dataBid:{source:"attribute",selector:"amp-o2-player",attribute:"data-bid"},autoPlay:{default:!1},ampLayout:{default:"responsive",source:"attribute",selector:"amp-o2-player",attribute:"layout"},width:{default:600,source:"attribute",selector:"amp-o2-player",attribute:"width"},height:{default:400,source:"attribute",selector:"amp-o2-player",attribute:"height"}},edit:e=>{const{attributes:t,setAttributes:a}=e,{autoPlay:s,dataPid:d,dataVid:m,dataBcid:u,dataBid:c}=t,p=[{value:"responsive",label:(0,r.__)("Responsive","amp")},{value:"fixed-height",label:(0,r.__)("Fixed Height","amp")},{value:"fixed",label:(0,r.__)("Fixed","amp")},{value:"fill",label:(0,r.__)("Fill","amp")},{value:"flex-item",label:(0,r.__)("Flex-item","amp")},{value:"nodisplay",label:(0,r.__)("No Display","amp")}];let h=!1;return d&&(u||m)&&(h=`https://delivery.vidible.tv/htmlembed/pid=${d}/`),(0,i.createElement)(i.Fragment,null,(0,i.createElement)(l.InspectorControls,null,(0,i.createElement)(o.PanelBody,{title:(0,r.__)("O2 Player Settings","amp")},(0,i.createElement)(o.TextControl,{label:(0,r.__)("Player ID (required)","amp"),value:d,onChange:e=>a({dataPid:e})}),(0,i.createElement)(o.TextControl,{label:(0,r.__)("Buyer Company ID (either buyer or video ID is required)","amp"),value:u,onChange:e=>a({dataBcid:e})}),(0,i.createElement)(o.TextControl,{label:(0,r.__)("Video ID (either buyer or video ID is required)","amp"),value:m,onChange:e=>a({dataVid:e})}),(0,i.createElement)(o.TextControl,{label:(0,r.__)("Playlist ID","amp"),value:c,onChange:e=>a({dataBid:e})}),(0,i.createElement)(o.ToggleControl,{label:(0,r.__)("Autoplay","amp"),checked:s,onChange:()=>a({autoPlay:!s})}),(0,i.createElement)(n.CR,{...e,ampLayoutOptions:p}))),h&&(0,i.createElement)(n.om,{name:(0,r.__)("O2 Player","amp"),url:h}),!h&&(0,i.createElement)(o.Placeholder,{label:(0,r.__)("O2 Player","amp")},(0,i.createElement)("p",null,(0,r.__)("Add required data to use the block.","amp"))))},save:({attributes:e})=>{const{dataPid:t,width:a,height:r,ampLayout:l,dataBid:o,autoPlay:n,dataBcid:s,dataVid:d}=e,m={layout:l,height:r,"data-pid":t};return"fixed-height"!==l&&a&&(m.width=a),n||(m["data-macros"]="m.playback=click"),d?m["data-vid"]=d:s&&(m["data-bcid"]=s),o&&(m["data-bid"]=o),(0,i.createElement)("amp-o2-player",{...m})}}},326:(e,t,a)=>{"use strict";a.r(t),a.d(t,{name:()=>s,settings:()=>d});var r=a(736),i=a(196),l=a(175),o=a(609),n=a(503);const s="amp/amp-ooyala-player",d={title:(0,r.__)("AMP Ooyala Player","amp"),description:(0,r.__)("Displays an Ooyala video.","amp"),category:"embed",icon:"embed-generic",keywords:[(0,r.__)("Embed","amp"),(0,r.__)("Ooyala video","amp")],attributes:{dataEmbedCode:{source:"attribute",selector:"amp-ooyala-player",attribute:"data-embedcode"},dataPlayerId:{source:"attribute",selector:"amp-ooyala-player",attribute:"data-playerid"},dataPcode:{source:"attribute",selector:"amp-ooyala-player",attribute:"data-pcode"},dataPlayerVersion:{default:"v3",source:"attribute",selector:"amp-ooyala-player",attribute:"data-playerversion"},ampLayout:{default:"responsive",source:"attribute",selector:"amp-ooyala-player",attribute:"layout"},width:{default:600,source:"attribute",selector:"amp-ooyala-player",attribute:"width"},height:{default:400,source:"attribute",selector:"amp-ooyala-player",attribute:"height"}},edit:e=>{const{attributes:t,setAttributes:a}=e,{dataEmbedCode:s,dataPlayerId:d,dataPcode:m,dataPlayerVersion:u}=t,c=[{value:"responsive",label:(0,r.__)("Responsive","amp")},{value:"fixed",label:(0,r.__)("Fixed","amp")},{value:"fill",label:(0,r.__)("Fill","amp")},{value:"flex-item",label:(0,r.__)("Flex-item","amp")}];let p=!1;return s&&d&&m&&(p=`http://cf.c.ooyala.com/${s}`),(0,i.createElement)(i.Fragment,null,(0,i.createElement)(l.InspectorControls,null,(0,i.createElement)(o.PanelBody,{title:(0,r.__)("Ooyala Settings","amp")},(0,i.createElement)(o.TextControl,{label:(0,r.__)("Video embed code (required)","amp"),value:s,onChange:e=>a({dataEmbedCode:e})}),(0,i.createElement)(o.TextControl,{label:(0,r.__)("Player ID (required)","amp"),value:d,onChange:e=>a({dataPlayerId:e})}),(0,i.createElement)(o.TextControl,{label:(0,r.__)("Provider code for the account (required)","amp"),value:m,onChange:e=>a({dataPcode:e})}),(0,i.createElement)(o.SelectControl,{label:(0,r.__)("Player version","amp"),value:u,options:[{value:"v3",label:(0,r.__)("V3","amp")},{value:"v4",label:(0,r.__)("V4","amp")}],onChange:e=>a({dataPlayerVersion:e})}),(0,i.createElement)(n.CR,{...e,ampLayoutOptions:c}))),p&&(0,i.createElement)(n.om,{name:(0,r.__)("Ooyala Player","amp"),url:p}),!p&&(0,i.createElement)(o.Placeholder,{label:(0,r.__)("Ooyala Player","amp")},(0,i.createElement)("p",null,(0,r.__)("Add required data to use the block.","amp"))))},save:({attributes:e})=>{const{dataEmbedCode:t,dataPlayerId:a,dataPcode:r,dataPlayerVersion:l,ampLayout:o,height:n,width:s}=e,d={layout:o,height:n,"data-embedcode":t,"data-playerid":a,"data-pcode":r,"data-playerversion":l};return"fixed-height"!==o&&s&&(d.width=s),(0,i.createElement)("amp-ooyala-player",{...d})}}},120:(e,t,a)=>{"use strict";a.r(t),a.d(t,{name:()=>s,settings:()=>d});var r=a(736),i=a(196),l=a(175),o=a(609),n=a(503);const s="amp/amp-reach-player",d={title:(0,r.__)("AMP Reach Player","amp"),description:(0,r.__)("Displays the Reach Player configured in the Beachfront Reach platform.","amp"),category:"embed",icon:"embed-generic",keywords:[(0,r.__)("Embed","amp"),(0,r.__)("Beachfront Reach video","amp")],attributes:{dataEmbedId:{source:"attribute",selector:"amp-reach-player",attribute:"data-embed-id"},ampLayout:{default:"fixed-height",source:"attribute",selector:"amp-reach-player",attribute:"layout"},width:{default:600,source:"attribute",selector:"amp-reach-player",attribute:"width"},height:{default:400,source:"attribute",selector:"amp-reach-player",attribute:"height"}},edit:e=>{const{attributes:t,setAttributes:a}=e,{dataEmbedId:s}=t,d=[{value:"responsive",label:(0,r.__)("Responsive","amp")},{value:"fixed-height",label:(0,r.__)("Fixed Height","amp")},{value:"fixed",label:(0,r.__)("Fixed","amp")},{value:"fill",label:(0,r.__)("Fill","amp")},{value:"flex-item",label:(0,r.__)("Flex-item","amp")}];let m=!1;return s&&(m="https://media-cdn.beachfrontreach.com/acct_1/video/"),(0,i.createElement)(i.Fragment,null,(0,i.createElement)(l.InspectorControls,null,(0,i.createElement)(o.PanelBody,{title:(0,r.__)("Reach Settings","amp")},(0,i.createElement)(o.TextControl,{label:(0,r.__)("Embed ID (required)","amp"),value:s,onChange:e=>a({dataEmbedId:e})}),(0,i.createElement)(n.CR,{...e,ampLayoutOptions:d}))),m&&(0,i.createElement)(n.om,{name:(0,r.__)("Reach Player","amp"),url:m}),!m&&(0,i.createElement)(o.Placeholder,{label:(0,r.__)("Reach Player","amp")},(0,i.createElement)("p",null,(0,r.__)("Add Reach player embed ID to use the block.","amp"))))},save:({attributes:e})=>{const{dataEmbedId:t,ampLayout:a,height:r,width:l}=e,o={layout:a,height:r,"data-embed-id":t};return"fixed-height"!==a&&l&&(o.width=l),(0,i.createElement)("amp-reach-player",{...o})}}},884:(e,t,a)=>{"use strict";a.r(t),a.d(t,{name:()=>s,settings:()=>d});var r=a(736),i=a(196),l=a(175),o=a(609),n=a(503);const s="amp/amp-springboard-player",d={title:(0,r.__)("AMP Springboard Player","amp"),description:(0,r.__)("Displays the Springboard Player used in the Springboard Video Platform","amp"),category:"embed",icon:"embed-generic",keywords:[(0,r.__)("Embed","amp")],attributes:{dataSiteId:{source:"attribute",selector:"amp-springboard-player",attribute:"data-site-id"},dataContentId:{source:"attribute",selector:"amp-springboard-player",attribute:"data-content-id"},dataPlayerId:{source:"attribute",selector:"amp-springboard-player",attribute:"data-player-id"},dataDomain:{source:"attribute",selector:"amp-springboard-player",attribute:"data-domain"},dataMode:{default:"video",source:"attribute",selector:"amp-springboard-player",attribute:"data-mode"},dataItems:{default:1,source:"attribute",selector:"amp-springboard-player",attribute:"data-items"},ampLayout:{default:"responsive",source:"attribute",selector:"amp-springboard-player",attribute:"layout"},width:{default:600,source:"attribute",selector:"amp-springboard-player",attribute:"width"},height:{default:400,source:"attribute",selector:"amp-springboard-player",attribute:"height"}},edit:e=>{const{attributes:t,setAttributes:a}=e,{dataSiteId:s,dataPlayerId:d,dataContentId:m,dataDomain:u,dataMode:c,dataItems:p}=t,h=[{value:"responsive",label:(0,r.__)("Responsive","amp")},{value:"fixed",label:(0,r.__)("Fixed","amp")},{value:"fill",label:(0,r.__)("Fill","amp")},{value:"flex-item",label:(0,r.__)("Flex-item","amp")}];let b=!1;return s&&m&&u&&c&&p&&(b="https://cms.springboardplatform.com/embed_iframe/"),(0,i.createElement)(i.Fragment,null,(0,i.createElement)(l.InspectorControls,null,(0,i.createElement)(o.PanelBody,{title:(0,r.__)("Springboard Player Settings","amp")},(0,i.createElement)(o.TextControl,{label:(0,r.__)("Site ID (required)","amp"),value:s,onChange:e=>a({dataSiteId:e})}),(0,i.createElement)(o.TextControl,{label:(0,r.__)("Content ID (required)","amp"),value:m,onChange:e=>a({dataContentId:e})}),(0,i.createElement)(o.TextControl,{label:(0,r.__)("Player ID","amp"),value:d,onChange:e=>a({dataPlayerId:e})}),(0,i.createElement)(o.TextControl,{label:(0,r.__)("Springboard partner domain","amp"),value:u,onChange:e=>a({dataDomain:e})}),(0,i.createElement)(o.SelectControl,{label:(0,r.__)("Mode (required)","amp"),value:c,options:[{value:"video",label:(0,r.__)("Video","amp")},{value:"playlist",label:(0,r.__)("Playlist","amp")}],onChange:e=>a({dataMode:e})}),(0,i.createElement)(o.TextControl,{type:"number",label:(0,r.__)("Number of video is playlist (required)","amp"),value:p,onChange:e=>a({dataItems:e})}),(0,i.createElement)(n.CR,{...e,ampLayoutOptions:h}))),b&&(0,i.createElement)(n.om,{name:(0,r.__)("Springboard Player","amp"),url:b}),!b&&(0,i.createElement)(o.Placeholder,{label:(0,r.__)("Springboard Player","amp")},(0,i.createElement)("p",null,(0,r.__)("Add required data to use the block.","amp"))))},save:({attributes:e})=>{const{dataSiteId:t,dataPlayerId:a,dataContentId:r,dataDomain:l,dataMode:o,dataItems:n,ampLayout:s,height:d,width:m}=e,u={layout:s,height:d,"data-site-id":t,"data-mode":o,"data-content-id":r,"data-player-id":a,"data-domain":l,"data-items":n};return"fixed-height"!==s&&m&&(u.width=e.width),(0,i.createElement)("amp-springboard-player",{...u})}}},415:(e,t,a)=>{"use strict";a.r(t),a.d(t,{name:()=>m,settings:()=>u});var r=a(736),i=a(196);const l=window.moment;var o=a.n(l),n=a(175),s=a(609),d=a(503);const m="amp/amp-timeago",u={title:(0,r.__)("AMP Timeago","amp"),category:"common",icon:"backup",keywords:[(0,r.__)("Time difference","amp"),(0,r.__)("Time ago","amp"),(0,r.__)("Date","amp")],attributes:{align:{type:"string"},cutoff:{source:"attribute",selector:"amp-timeago",attribute:"cutoff"},dateTime:{source:"attribute",selector:"amp-timeago",attribute:"datetime"},ampLayout:{default:"fixed-height",source:"attribute",selector:"amp-timeago",attribute:"layout"},width:{source:"attribute",selector:"amp-timeago",attribute:"width"},height:{default:20,source:"attribute",selector:"amp-timeago",attribute:"height"}},getEditWrapperProps(e){const{align:t}=e;if("left"===t||"right"===t||"center"===t)return{"data-align":t}},edit:e=>{const{attributes:t,setAttributes:a}=e,{align:l,cutoff:m,dateTime:u}=t;let c;u?c=m&&parseInt(m)<Math.abs(o()(u).diff(o()(),"seconds"))?o()(u).format("dddd D MMMM HH:mm"):o()(u).fromNow():(c=o()(Date.now()).fromNow(),a({dateTime:o()(o()(),o().ISO_8601,!0).format()}));const p=[{value:"",label:(0,r.__)("Responsive","amp")},{value:"fixed",label:(0,r.__)("Fixed","amp")},{value:"fixed-height",label:(0,r.__)("Fixed Height","amp")}];return(0,i.createElement)(i.Fragment,null,(0,i.createElement)(n.InspectorControls,null,(0,i.createElement)(s.PanelBody,{title:(0,r.__)("AMP Timeago Settings","amp")},(0,i.createElement)(s.DateTimePicker,{locale:"en",currentDate:u||o()(),onChange:e=>a({dateTime:o()(e,o().ISO_8601,!0).format()})}),(0,i.createElement)(d.CR,{...e,ampLayoutOptions:p}),(0,i.createElement)(s.TextControl,{type:"number",className:"blocks-amp-timeout__cutoff",label:(0,r.__)("Cutoff (seconds)","amp"),value:void 0!==m?m:"",onChange:e=>a({cutoff:e})}))),(0,i.createElement)(n.BlockControls,null,(0,i.createElement)(n.BlockAlignmentToolbar,{value:l,onChange:e=>{a({align:e})},controls:["left","center","right"]})),(0,i.createElement)("time",{dateTime:u},c))},save:({attributes:e})=>{const{ampLayout:t,width:a,height:r,align:l,cutoff:n,dateTime:s}=e,d={layout:"responsive",className:"align"+(l||"none"),datetime:s,locale:"en"};if(n&&(d.cutoff=n),t)switch(t){case"fixed-height":r&&(d.height=r,d.layout=t);break;case"fixed":r&&a&&(d.height=r,d.width=a,d.layout=t)}return(0,i.createElement)("amp-timeago",{...d},o()(e.dateTime).format("dddd D MMMM HH:mm"))}}},503:(e,t,a)=>{"use strict";a.d(t,{CR:()=>n,om:()=>o,kY:()=>m});var r=a(196),i=a(609),l=a(736);const o=({name:e,url:t})=>(0,r.createElement)(i.Placeholder,{label:e},(0,r.createElement)("p",{className:"components-placeholder__error"},t),(0,r.createElement)("p",{className:"components-placeholder__error"},(0,l.__)("Previews for this are unavailable in the editor, sorry!","amp"))),n=({attributes:e,setAttributes:t,ampLayoutOptions:a})=>{const{ampLayout:o,height:n,width:s}=e,d=!n&&("fixed"===o||"fixed-height"===o),m=!s&&"fixed"===o;return(0,r.createElement)(r.Fragment,null,(0,r.createElement)(i.SelectControl,{label:(0,l.__)("Layout","amp"),value:o,options:a,onChange:e=>t({ampLayout:e})}),m&&(0,r.createElement)(i.Notice,{status:"error",isDismissible:!1},(0,l.sprintf)(/* translators: %s is the layout name */
(0,l.__)("Width is required for %s layout","amp"),o)),(0,r.createElement)(i.TextControl,{type:"number",label:(0,l.__)("Width (px)","amp"),value:void 0!==s?s:"",onChange:e=>t({width:e})}),d&&(0,r.createElement)(i.Notice,{status:"error",isDismissible:!1},(0,l.sprintf)(/* translators: %s is the layout name */
(0,l.__)("Height is required for %s layout","amp"),o)),(0,r.createElement)(i.TextControl,{type:"number",label:(0,l.__)("Height (px)","amp"),value:n,onChange:e=>t({height:e})}))};var s=a(819),d=a(800);const m=(e,t)=>{if(!(0,s.isFunction)(e))return e;const{width:a,height:r}=t,i=()=>{const{wp:e}=window;return e.media.view.MediaFrame.Select.extend({createSelectToolbar(e,t){(t=t||this.options.button||{}).controller=this,t={...t,allowedTypes:(0,s.get)(this,["options","allowedTypes"],null)},e.view=new d.tb(t)},featuredImageToolbar(t){this.createSelectToolbar(t,{text:e.media.view.l10n.setFeaturedImage,state:this.options.state})},editState(){const t=this.state("featured-image").get("selection"),a=new e.media.view.EditImage({model:t.single(),controller:this}).render();this.content.set(a),a.loadEditor()},createStates:function(){this.on("toolbar:create:featured-image",this.featuredImageToolbar,this),this.on("content:render:edit-image",this.editState,this);const t=e.media.controller.FeaturedImage.extend({defaults:{...e.media.controller.FeaturedImage.prototype.defaults,date:!1,filterable:!1,suggestedWidth:a,suggestedHeight:r}});this.states.add([new t,new e.media.controller.EditImage({model:this.options.editImage})])}})};return class extends e{buildAndSetFeatureImageFrame(){const{wp:e}=window,t=i(),a=(e=>{const{wp:t}=window;return t.media.query({order:"ASC",orderby:"post__in",post__in:e,posts_per_page:-1,query:!0,type:"image"})})(this.props.value),r=new e.media.model.Selection(a.models,{props:a.props.toJSON()});this.frame=new t({mimeType:this.props.allowedTypes,state:"featured-image",multiple:this.props.multiple,selection:r,editing:Boolean(this.props.value)}),e.media.frame=this.frame}}}},80:(e,t,a)=>{"use strict";a.d(t,{lm:()=>c,XI:()=>b,pb:()=>v,qM:()=>p,VB:()=>h});var r=a(196),i=a(819),l=a(736),o=a(609),n=a(175),s=a(818),d=a(307);const m=["core/paragraph","core/heading","core/code","core/quote","core/subhead"];var u=a(669);const c=(e,t)=>(0,i.isObject)(e)&&(0,i.isString)(t)?("core/gallery"===t&&(e.attributes||(e.attributes={}),e.attributes.ampCarousel={type:"boolean",default:!(0,s.select)("amp/block-editor")?.hasThemeSupport()},e.attributes.ampLightbox={type:"boolean",default:!1}),"core/image"===t&&(e.attributes||(e.attributes={}),e.attributes.ampLightbox={type:"boolean",default:!1}),e):e,p=(e,t)=>{if(!(0,i.isObject)(e)||!(0,i.isString)(t))return e;if(m.includes(t)){e.deprecated||(e.deprecated=[]);for(const t of e.deprecated)if(t.attributes&&t.attributes.ampFitText)return e;e.deprecated.push({supports:e.supports,attributes:{...e.attributes||{},ampFitText:{type:"boolean",default:!1},minFont:{default:u.CP,source:"attribute",selector:"amp-fit-text",attribute:"min-font-size"},maxFont:{default:u.uK,source:"attribute",selector:"amp-fit-text",attribute:"max-font-size"},height:{default:"core/image"===t?200:10*Math.ceil(u.uK/10),source:"attribute",selector:"amp-fit-text",attribute:"height"}},save(t){const{attributes:a}=t,i={layout:"fixed-height"};return a.minFont&&(i["min-font-size"]=a.minFont),a.maxFont&&(i["max-font-size"]=a.maxFont),a.height&&(i.height=a.height),i.children=e.save(t),(0,r.createElement)("amp-fit-text",{...i})},isEligible:({ampFitText:e})=>void 0!==e,migrate:e=>(["ampFitText","minFont","maxFont","height"].forEach((t=>delete e[t])),e)})}return e},h=e=>{if((0,d.isValidElement)(e)&&"amp-fit-text"===e.type&&void 0!==e.props.className){const{className:t,...a}=e.props;a.className=null,e=(0,d.cloneElement)(e,a)}return e},b=e=>(0,i.isFunction)(e)?t=>{const{isSelected:a,name:i}=t;return a&&"core/image"===i?(0,r.createElement)(r.Fragment,null,(0,r.createElement)(e,{...t}),(0,r.createElement)(_,{...t})):a&&"core/gallery"===i?(0,r.createElement)(r.Fragment,null,(0,r.createElement)(e,{...t}),(0,r.createElement)(f,{...t})):(0,r.createElement)(e,{...t})}:e,g=e=>{const{attributes:{ampLightbox:t,linkTo:a},setAttributes:i}=e;return(0,r.createElement)(o.ToggleControl,{label:(0,l.__)("Add lightbox effect","amp"),checked:t,onChange:e=>{i({ampLightbox:!t}),e&&a&&"none"!==a&&i({linkTo:"none"})}})},y=e=>{const{attributes:{ampCarousel:t},setAttributes:a}=e;return(0,r.createElement)(o.ToggleControl,{label:(0,l.__)("Display as carousel","amp"),checked:t,onChange:()=>a({ampCarousel:!t})})},_=e=>{const{clientId:t}=e;return(0,s.useSelect)((e=>e("core/block-editor").getBlockParentsByBlockName(t,"core/gallery").length>0),[t])?null:(0,r.createElement)(n.InspectorControls,null,(0,r.createElement)(o.PanelBody,{title:(0,l.__)("AMP Settings","amp")},(0,r.createElement)(g,{...e})))},f=e=>(0,r.createElement)(n.InspectorAdvancedControls,null,(0,r.createElement)(o.BaseControl,{__nextHasNoMarginBottom:!0},(0,r.createElement)(o.BaseControl.VisualLabel,null,(0,l.__)("AMP Settings","amp")),(0,r.createElement)(g,{...e}),(0,r.createElement)(y,{...e}))),v=()=>{const{getEditedPostAttribute:e}=(0,s.select)("core/editor");return e("amp_enabled")||!1}},806:(e,t,a)=>{"use strict";a.r(t),a.d(t,{name:()=>m,render:()=>u});var r=a(196),i=a(67),l=a(818),o=a(736),n=a(609),s=a(307);function d(){const{isAMPEnabled:e,toggleAMP:t}=function(){const e=(0,l.useSelect)((e=>e("core/editor").getEditedPostAttribute("amp_enabled")||!1),[]),{editPost:t}=(0,l.useDispatch)("core/editor");return{isAMPEnabled:e,toggleAMP:()=>t({amp_enabled:!e})}}(),a=(0,s.useRef)(`amp-toggle-${Math.random().toString(32).substr(-4)}`);return(0,r.createElement)(r.Fragment,null,(0,r.createElement)("label",{htmlFor:a.current},(0,o.__)("Enable AMP","amp")),(0,r.createElement)(n.FormToggle,{checked:e,onChange:t,id:a.current}))}const m="amp-post-status-info",u=function(){return(0,l.useSelect)((e=>e("amp/block-editor").isDevToolsEnabled()),[])?null:(0,r.createElement)(i.PluginPostStatusInfo,null,(0,r.createElement)(d,null))}},492:(e,t,a)=>{"use strict";a.r(t),a.d(t,{name:()=>l,render:()=>o});var r=a(196),i=a(847);const l="amp-post-featured-image-pre-publish-panel",o=()=>(0,r.createElement)(i.qI,null)},106:(e,t,a)=>{"use strict";a.r(t),a.d(t,{name:()=>h,onlyPaired:()=>b,render:()=>g});var r=a(196),i=a(307),l=a(818),o=a(609),n=a(333),s=a(736),d=a(80),m=function(e){return(0,r.createElement)("svg",{...e},(0,r.createElement)("path",{d:"M41.629 28.161 28.624 49.804h-2.356l2.33-14.102-7.214.009-.1.002c-.65 0-1.176-.526-1.176-1.176 0-.279.259-.751.259-.751L33.329 12.17l2.395.01-2.388 14.123 7.251-.009h.115c.65 0 1.176.525 1.176 1.175 0 .264-.103.495-.25.691v.001ZM31 0C13.879 0 0 13.88 0 31c0 17.121 13.879 31 31 31 17.12 0 31-13.879 31-31C62 13.88 48.12 0 31 0Z",fill:"#82878c"}))};m.defaultProps={width:"62",height:"62",xmlns:"http://www.w3.org/2000/svg"};var u=function(e){return(0,r.createElement)("svg",{...e},(0,r.createElement)("path",{className:"outer",d:"M48 12c19.9 0 36 16.1 36 36S67.9 84 48 84 12 67.9 12 48s16.1-36 36-36",fill:"none"}),(0,r.createElement)("path",{className:"inner",d:"M48 33c8.285 0 15 6.716 15 15 0 8.284-6.715 15-15 15-8.284 0-15-6.716-15-15 0-8.284 6.716-15 15-15Zm-1.15 24.098 6.293-10.472a.555.555 0 0 0 .12-.335.569.569 0 0 0-.624-.568l-3.508.004 1.155-6.834-1.159-.005-6.272 10.46s-.125.228-.125.363a.57.57 0 0 0 .617.569l3.49-.005-1.126 6.823h1.14Z",fill:"none"}))};u.defaultProps={xmlns:"http://www.w3.org/2000/svg"};class c extends i.Component{constructor(...e){super(...e),this.buttonRef=(0,i.createRef)(),this.openPreviewWindow=this.openPreviewWindow.bind(this)}componentDidUpdate(e){const{previewLink:t}=this.props;t&&!e.previewLink&&this.setPreviewWindowLink(t)}setPreviewWindowLink(e){const{previewWindow:t}=this;t&&!t.closed&&(t.location=e,this.buttonRef.current&&this.buttonRef.current.focus())}getWindowTarget(){const{postId:e}=this.props;return`amp-preview-${e}`}openPreviewWindow(e){e.preventDefault();const{target:t}=e;this.previewWindow&&!this.previewWindow.closed||(this.previewWindow=window.open("",this.getWindowTarget())),this.previewWindow.focus(),this.props.isAutosaveable?(this.props.isDraft?this.props.savePost({isPreview:!0}):this.props.autosave({isPreview:!0}),function(e){let t=(0,i.renderToString)((0,r.createElement)("div",{className:"editor-post-preview-button__interstitial-message"},(0,r.createElement)(o.Icon,{icon:u({viewBox:"0 0 98 98"})}),(0,r.createElement)("p",null,(0,s.__)("Generating AMP preview…","amp"))));t+='\n\t\t<style>\n\t\t\tbody {\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t\t.editor-post-preview-button__interstitial-message {\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-direction: column;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\theight: 100vh;\n\t\t\t\twidth: 100vw;\n\t\t\t}\n\t\t\t@-webkit-keyframes paint {\n\t\t\t\t0% {\n\t\t\t\t\tstroke-dashoffset: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t@-moz-keyframes paint {\n\t\t\t\t0% {\n\t\t\t\t\tstroke-dashoffset: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t@-o-keyframes paint {\n\t\t\t\t0% {\n\t\t\t\t\tstroke-dashoffset: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t@keyframes paint {\n\t\t\t\t0% {\n\t\t\t\t\tstroke-dashoffset: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t.editor-post-preview-button__interstitial-message svg {\n\t\t\t\twidth: 198px;\n\t\t\t\theight: 198px;\n\t\t\t\tstroke: #555d66;\n\t\t\t\tstroke-width: 0.75;\n\t\t\t}\n\t\t\t.editor-post-preview-button__interstitial-message svg .outer,\n\t\t\t.editor-post-preview-button__interstitial-message svg .inner {\n\t\t\t\tstroke-dasharray: 280;\n\t\t\t\tstroke-dashoffset: 280;\n\t\t\t\t-webkit-animation: paint 1.5s ease infinite alternate;\n\t\t\t\t-moz-animation: paint 1.5s ease infinite alternate;\n\t\t\t\t-o-animation: paint 1.5s ease infinite alternate;\n\t\t\t\tanimation: paint 1.5s ease infinite alternate;\n\t\t\t}\n\t\t\tp {\n\t\t\t\ttext-align: center;\n\t\t\t\tfont-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;\n\t\t\t}\n\t\t</style>\n\t',e.write(t),e.title=(0,s.__)("Generating AMP preview…","amp"),e.close()}(this.previewWindow.document)):this.setPreviewWindowLink(t.href)}render(){const{previewLink:e,currentPostLink:t,errorMessages:a,isEnabled:i,isSaveable:l,isStandardMode:n}=this.props,d=e||t;return i&&!a.length&&!n&&(0,r.createElement)(o.Button,{className:"amp-editor-post-preview",href:d,title:(0,s.__)("Preview AMP","amp"),isSecondary:!0,disabled:!l,onClick:this.openPreviewWindow,ref:this.buttonRef},m({viewBox:"0 0 62 62",width:18,height:18}),(0,r.createElement)(o.VisuallyHidden,{as:"span"},/* translators: accessibility text */
(0,s.__)("(opens in a new tab)","amp")))}}const p=(0,n.compose)([(0,l.withSelect)(((e,{forcePreviewLink:t,forceIsAutosaveable:a})=>{const{getCurrentPostId:r,getEditedPostAttribute:i,isEditedPostSaveable:l,isEditedPostAutosaveable:o,getEditedPostPreviewLink:n}=e("core/editor"),{getAmpUrl:s,getAmpPreviewLink:m,getErrorMessages:u,isStandardMode:c}=e("amp/block-editor"),p=n(),h=p?((e,t)=>{const a=new URL(e),r=new URL(t);for(const[e,t]of a.searchParams.entries())r.searchParams.set(e,t);return r.href})(p,m()):void 0;return{postId:r(),currentPostLink:s(),previewLink:void 0!==t?t:h,isSaveable:l(),isAutosaveable:a||o(),isDraft:-1!==["draft","auto-draft"].indexOf(i("status")),isEnabled:(0,d.pb)(),errorMessages:u(),isStandardMode:c()}})),(0,l.withDispatch)((e=>({autosave:e("core/editor").autosave,savePost:e("core/editor").savePost})))])(c),h="amp-preview-button-wrapper",b=!0,g=function(){const e=(0,i.useRef)(null),t=(0,i.useRef)(null),{isEditedPostSaveable:a,isViewable:o}=(0,l.useSelect)((e=>({isEditedPostSaveable:e("core/editor").isEditedPostSaveable(),isViewable:e("core").getPostType(e("core/editor").getEditedPostAttribute("type"))?.viewable})),[]);return(0,i.useLayoutEffect)((()=>(t.current=document.querySelector(".editor-post-publish-button__button"),t.current?.parentNode&&(e.current||(e.current=document.createElement("div"),e.current.className="amp-wrapper-post-preview"),t.current.parentNode.insertBefore(e.current,t.current)),()=>{t.current&&e.current&&(t.current.parentNode.removeChild(e.current),t.current=null)})),[a,o]),e.current?(0,i.createPortal)((0,r.createElement)(p,null),e.current):null}},847:(e,t,a)=>{"use strict";a.d(t,{qI:()=>n,eA:()=>p});var r=a(196);const i=window.wp.editor;var l=a(67),o=a(736);const n=()=>(0,r.createElement)(l.PluginPrePublishPanel,{title:(0,o.__)("Featured Image","amp"),initialOpen:"true"},(0,r.createElement)(i.PostFeaturedImage,null));var s=a(819),d=a(333),m=a(609),u=a(761);const c=(e,t)=>(0,r.createElement)(m.Notice,{status:t,isDismissible:!1},e.map(((e,t)=>(0,r.createElement)("p",{key:`message-${t}`},e)))),p=(0,d.createHigherOrderComponent)((e=>(0,s.isFunction)(e)?t=>{const{media:a}=t;let i;if(a){const e=(0,u.oV)(a,(0,u.$2)());i=e?c(e,"warning"):null}else{const e=(0,o.__)("Selecting a featured image is recommended for an optimal user experience.","amp");i=c([e],"notice")}return(0,r.createElement)(e,{...t,noticeUI:i})}:e),"withFeaturedImageNotice");a(800);const{wp:h}=window},800:(e,t,a)=>{"use strict";a.d(t,{tb:()=>d}),a(819);var r=a(736),i=a(761);const{wp:l}=window,o="notice notice-warning notice-alt inline",n=l.media.View.extend({className:o,template:(()=>{let e=(0,r.sprintf)(/* translators: 1: image width in pixels. 2: image height in pixels. */
(0,r.__)("The selected image is too small (%1$s by %2$s pixels).","amp"),"{{width}}","{{height}}");return e+=" <# if ( minWidth && minHeight ) { #>",e+=(0,r.sprintf)(/* translators: 1: required minimum width in pixels. 2: required minimum height in pixels. */
(0,r.__)("It should have a size of at least %1$s by %2$s pixels.","amp"),"{{minWidth}}","{{minHeight}}"),e+="<# } else if ( minWidth ) { #>",e+=(0,r.sprintf)(/* translators: placeholder is required minimum width in pixels. */
(0,r.__)("It should have a width of at least %s pixels.","amp"),"{{minWidth}}"),e+="<# } else if ( minHeight ) { #>",e+=(0,r.sprintf)(/* translators: placeholder is required minimum height in pixels. */
(0,r.__)("It should have a height of at least %s pixels.","amp"),"{{minHeight}}"),e+="<# } #>",(0,i.kM)(e)})()}),s=l.media.View.extend({className:"notice notice-warning notice-alt inline",template:(()=>{const e=(0,r.sprintf)(/* translators: 1: the selected file type. */
(0,r.__)("The selected file mime type, %1$s, is not allowed.","amp"),"{{mimeType}}");return(0,i.kM)(e)})()}),d=(l.media.View.extend({className:o,template:(()=>{const e=(0,r.sprintf)(/* translators: 1: the recommended max MB per second for videos. 2: the actual MB per second of the video. */
(0,r.__)("A video size of less than %1$s MB per second is recommended. The selected video is %2$s MB per second.","amp"),"{{maxVideoMegabytesPerSecond}}","{{actualVideoMegabytesPerSecond}}");return(0,i.kM)(e)})()}),l.media.view.Toolbar.Select.extend({refresh(){l.media.view.Toolbar.Select.prototype.refresh.call(this);const e=this.controller.state(),t=e.get("selection").models[0],a=e.collection.get("featured-image").get("suggestedWidth"),r=e.collection.get("featured-image").get("suggestedHeight");t&&"image"===t.get("type")&&t.get("width")&&!(0,i.HG)({width:t.get("width"),height:t.get("height")},{width:a,height:r})?this.secondary.set("select-error",new n({minWidth:a,minHeight:r,width:t.get("width"),height:t.get("height")})):this.secondary.unset("select-error"),i.kC.call(this,t,s)}}));l.media.view.Toolbar.Select.extend({refresh(){l.media.view.Toolbar.Select.prototype.refresh.call(this);const e=this.controller.state().get("selection").models[0];i.kC.call(this,e,s)}})},669:(e,t,a)=>{"use strict";a.d(t,{CP:()=>r,TQ:()=>l,uK:()=>i});const r=6,i=72,l="select-file-type-error"},761:(e,t,a)=>{"use strict";a.d(t,{kC:()=>u,$2:()=>s,kM:()=>m,HG:()=>n,oV:()=>d});var r=a(819);const i=ampBlockEditor;var l=a(736),o=a(669);const n=(e,t)=>{if(!e||!e.width||!e.height)return!1;const{width:a,height:r}=t;return(!a||e.width>=a)&&(!r||e.height>=r)},s=()=>({width:i.featuredImageMinimumWidth,height:i.featuredImageMinimumHeight}),d=(e,t)=>{if(!e)return[(0,l.__)("Selecting a featured image is required.","amp")];const a=[];if(["image/png","image/gif","image/jpeg","image/webp","image/svg+xml"].includes(e.mime_type)||a.push((0,l.sprintf)(/* translators: List of image formats */
(0,l.__)("The featured image must be of either %1$s, %2$s, %3$s, %4$s, or %5$s format.","amp"),"JPEG","PNG","GIF","WebP","SVG")),!n(e.media_details,t)){const{width:e,height:r}=t;e&&r?a.push((0,l.sprintf)(/* translators: 1: minimum width, 2: minimum height. */
(0,l.__)("The featured image should have a size of at least %1$s by %2$s pixels.","amp"),Math.ceil(e),Math.ceil(r))):t.width?a.push((0,l.sprintf)(/* translators: placeholder is minimum width. */
(0,l.__)("The featured image should have a width of at least %s pixels.","amp"),Math.ceil(e))):t.height&&a.push((0,l.sprintf)(/* translators: placeholder is minimum height. */
(0,l.__)("The featured image should have a height of at least %s pixels.","amp"),Math.ceil(r)))}return 0===a.length?null:a},m=e=>{const t=(0,r.template)(`<p>${e}</p>`,{evaluate:/<#([\s\S]+?)#>/g,interpolate:/\{\{\{([\s\S]+?)\}\}\}/g,escape:/\{\{([^\}]+?)\}\}(?!\})/g});return e=>t(e)},u=function(e,t){if(!e)return;const a=(0,r.get)(this,["options","allowedTypes"],null),i=this.get("select");a&&e.get("type")&&!((e,t)=>{const a=e.get("type"),r=e.get("mime");return!(!t.includes(a)&&!t.includes(r))&&"video"!==a})(e,a)?(this.secondary.set(o.TQ,new t({mimeType:e.get("mime")})),i&&i.model&&i.model.set("disabled",!0)):(this.secondary.unset(o.TQ),i&&i.model&&i.model.set("disabled",!1))}},196:e=>{"use strict";e.exports=window.React},819:e=>{"use strict";e.exports=window.lodash},175:e=>{"use strict";e.exports=window.wp.blockEditor},609:e=>{"use strict";e.exports=window.wp.components},333:e=>{"use strict";e.exports=window.wp.compose},818:e=>{"use strict";e.exports=window.wp.data},67:e=>{"use strict";e.exports=window.wp.editPost},307:e=>{"use strict";e.exports=window.wp.element},736:e=>{"use strict";e.exports=window.wp.i18n}},t={};function a(r){var i=t[r];if(void 0!==i)return i.exports;var l=t[r]={exports:{}};return e[r](l,l.exports,a),l.exports}a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},a.d=(e,t)=>{for(var r in t)a.o(t,r)&&!a.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{"use strict";var e={};a.r(e),a.d(e,{getAmpBlocksInUse:()=>g,getAmpPreviewLink:()=>h,getAmpUrl:()=>b,getErrorMessages:()=>p,hasThemeSupport:()=>m,isDevToolsEnabled:()=>u,isStandardMode:()=>c});const t=window.wp.hooks,r=window.wp.plugins,i=window.wp.blocks;var l=a(818),o=a(847),n=a(761),s=a(503),d=a(80);function m(e){return Boolean(e.hasThemeSupport)}function u(e){return e.isDevToolsEnabled}function c(e){return Boolean(e.isStandardMode)}function p(e){return e.errorMessages}function h(e){return e.ampPreviewLink}function b(e){return e.ampUrl}function g(e){return e.ampBlocksInUse}(0,l.register)((0,l.createReduxStore)("amp/block-editor",{reducer:e=>e,selectors:e,initialState:{...window.ampBlockEditor}}));const{isStandardMode:y,getAmpBlocksInUse:_}=(0,l.select)("amp/block-editor"),f=a(72);f.keys().forEach((e=>{const{name:t,render:a,icon:i,onlyPaired:l=!1}=f(e);l&&y()||(0,r.registerPlugin)(t,{icon:i,render:a})})),(0,t.addFilter)("blocks.registerBlockType","ampEditorBlocks/addAttributes",d.lm),(0,t.addFilter)("blocks.registerBlockType","ampEditorBlocks/deprecateAmpFitText",d.qM),(0,t.addFilter)("blocks.getSaveElement","ampEditorBlocks/deprecateAmpFitText/removeMiscAttrs",d.VB),(0,t.addFilter)("editor.BlockEdit","ampEditorBlocks/filterEdit",d.XI,20),(0,t.addFilter)("editor.PostFeaturedImage","ampEditorBlocks/withFeaturedImageNotice",o.eA),(0,t.addFilter)("editor.MediaUpload","ampEditorBlocks/withMediaLibraryNotice",(e=>(0,s.kY)(e,(0,n.$2)())));const v=_(),w=a(55);w.keys().forEach((e=>{const{name:t,settings:a}=w(e);y()&&v.includes(t)&&(0,i.registerBlockType)(t,a)}))})()})();PK.3Y=xS���3bunyad-amp/assets/js/amp-block-validation.asset.php<?php return array('dependencies' => array('lodash', 'react', 'wp-api-fetch', 'wp-block-editor', 'wp-components', 'wp-compose', 'wp-data', 'wp-edit-post', 'wp-element', 'wp-hooks', 'wp-i18n', 'wp-plugins', 'wp-url'), 'version' => '72a1abd35171294dec72');
PK.3Y����͇͇,bunyad-amp/assets/js/amp-block-validation.js(()=>{var e={11:(e,t,r)=>{var n={"./amp-block-validation.js":93,"./amp-document-setting-panel.js":877,"./amp-pre-publish-panel.js":327};function i(e){var t=a(e);return r(t)}function a(e){if(!r.o(n,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return n[e]}i.keys=function(){return Object.keys(n)},i.resolve=a,e.exports=i,i.id=11},44:(e,t,r)=>{"use strict";r.d(t,{Z:()=>v});var n=r(196),i=r(736),a=r(609),s=r(818),o=r(883),l=r(201),c=r(361),u=r(504),d=r(590),m=r(93),E=r(307);function p(){const{isAMPEnabled:e,toggleAMP:t}=(0,u.c)(),r=(0,E.useRef)(`amp-toggle-${Math.random().toString(32).substr(-4)}`);return(0,n.createElement)(n.Fragment,null,(0,n.createElement)("label",{htmlFor:r.current},(0,i.__)("Enable AMP","amp")),(0,n.createElement)(a.FormToggle,{checked:e,onChange:t,id:r.current}))}var h=function(e){return(0,n.createElement)("svg",{...e},(0,n.createElement)("g",{clipPath:"url(#clip-amp-validation-errors-kept)",fill:"#BB522E"},(0,n.createElement)("path",{d:"M10.762 2.541c4.4 0 8 3.6 8 8 0 1.6-.5 3-1.2 4.2l1.4 1.5c1.1-1.6 1.8-3.6 1.8-5.7 0-5.5-4.5-10-10-10-2 0-3.9.6-5.5 1.7l1.4 1.5c1.2-.8 2.6-1.2 4.1-1.2ZM.762 10.541c0 5.5 4.5 10 10 10 2.7 0 5.1-1.1 6.9-2.8l-14-14.2c-1.8 1.8-2.9 4.3-2.9 7Zm10 8c-4.4 0-8-3.6-8-8 0-1.5.4-2.8 1.1-4l10.9 10.9c-1.2.7-2.5 1.1-4 1.1Z"}),(0,n.createElement)("path",{d:"M14.262 9.74c.1 0 .1-.1.1-.2 0-.2-.2-.4-.4-.4h-2l1.6 1.6.7-1ZM12.461 4.541h-.8l-1.6 2.6 1.7 1.7.7-4.3ZM7.462 11.541s-.1.1-.1.2c0 .2.2.4.4.4h2.3l-.8 4.5h.7l2.6-4.1-3.5-3.6-1.6 2.6Z"})),(0,n.createElement)("defs",null,(0,n.createElement)("clipPath",{id:"clip-amp-validation-errors-kept"},(0,n.createElement)("path",{fill:"#fff",transform:"translate(.762 .541)",d:"M0 0h20v20H0z"}))))};h.defaultProps={width:"21",height:"21",fill:"none",xmlns:"http://www.w3.org/2000/svg"};var g=function(e){return(0,n.createElement)("svg",{...e},(0,n.createElement)("path",{fill:"#707070",d:"M8 20c1.1 0 2-.9 2-2H6c0 1.1.9 2 2 2zm6-6V9c0-3.07-1.63-5.64-4.5-6.32V2C9.5 1.17 8.83.5 8 .5S6.5 1.17 6.5 2v.68C3.64 3.36 2 5.92 2 9v5l-2 2v1h16v-1l-2-2zm-2 1H4V9c0-2.48 1.51-4.5 4-4.5s4 2.02 4 4.5v6z"}))};function v(){const{isAMPEnabled:e}=(0,u.c)(),{isFetchingErrors:t,fetchingErrorsMessage:r}=(0,d.P)(),{openGeneralSidebar:E,closePublishSidebar:v}=(0,s.useDispatch)("core/edit-post"),{isPostDirty:_,maybeIsPostDirty:f,keptMarkupValidationErrorCount:w,reviewedValidationErrorCount:P,unreviewedValidationErrorCount:k}=(0,s.useSelect)((e=>({isPostDirty:e(o.h).getIsPostDirty(),maybeIsPostDirty:e(o.h).getMaybeIsPostDirty(),keptMarkupValidationErrorCount:e(o.h).getKeptMarkupValidationErrors().length,reviewedValidationErrorCount:e(o.h).getReviewedValidationErrors().length,unreviewedValidationErrorCount:e(o.h).getUnreviewedValidationErrors().length})),[]);if(!e)return(0,n.createElement)(a.PanelRow,null,(0,n.createElement)(p,null));if(t)return(0,n.createElement)(n.Fragment,null,(0,n.createElement)(a.PanelRow,null,(0,n.createElement)(p,null)),(0,n.createElement)(c.H,{message:r,isLoading:!0,isSmall:!0}));const b=()=>{v(),E(`${m.PLUGIN_NAME}/${m.SIDEBAR_NAME}`)};return _||f?(0,n.createElement)(n.Fragment,null,(0,n.createElement)(a.PanelRow,null,(0,n.createElement)(p,null)),(0,n.createElement)(c.H,{icon:(0,n.createElement)(g,null),message:f?(0,i.__)("Content may have changed. Trigger validation in the AMP Validation sidebar.","amp"):(0,i.__)("Content has changed. Trigger validation in the AMP Validation sidebar.","amp"),isSmall:!0}),(0,n.createElement)(a.PanelRow,null,(0,n.createElement)(a.Button,{onClick:b,isSecondary:!0,isSmall:!0},(0,i.__)("Open AMP Validation","amp")))):w>0?(0,n.createElement)(n.Fragment,null,(0,n.createElement)(a.PanelRow,null,(0,n.createElement)(p,null)),(0,n.createElement)(c.H,{icon:(0,n.createElement)(h,null),message:(0,i.sprintf)(/* translators: %d is count of validation errors whose invalid markup is kept */
(0,i._n)("AMP is blocked due to %d validation issue marked as kept.","AMP is blocked due to %d validation issues marked as kept.",w,"amp"),w),isSmall:!0}),(0,n.createElement)(a.PanelRow,null,(0,n.createElement)(a.Button,{onClick:b,isSecondary:!0,isSmall:!0},(0,i._n)("Review issue","Review issues",w,"amp")))):k>0?(0,n.createElement)(n.Fragment,null,(0,n.createElement)(a.PanelRow,null,(0,n.createElement)(p,null)),(0,n.createElement)(c.H,{icon:(0,n.createElement)(l.Jj,{broken:!0}),message:(0,i.sprintf)(/* translators: %d is count of unreviewed validation error */
(0,i._n)("AMP is valid, but %d issue needs review.","AMP is valid, but %d issues need review.",k,"amp"),k),isSmall:!0}),(0,n.createElement)(a.PanelRow,null,(0,n.createElement)(a.Button,{onClick:b,isSecondary:!0,isSmall:!0},(0,i._n)("Review issue","Review issues",k,"amp")))):(0,n.createElement)(n.Fragment,null,(0,n.createElement)(a.PanelRow,null,(0,n.createElement)(p,null)),(0,n.createElement)(c.H,{icon:(0,n.createElement)(l.Jj,null),message:P>0?(0,i.sprintf)(/* translators: %d is count of unreviewed validation error */
(0,i._n)("AMP is valid. %d issue was reviewed.","AMP is valid. %d issues were reviewed.",P,"amp"),P):(0,i.__)("No AMP validation issues detected.","amp"),isSmall:!0}),P>0&&(0,n.createElement)(a.PanelRow,null,(0,n.createElement)(a.Button,{onClick:b,isSecondary:!0,isSmall:!0},(0,i.__)("Open AMP Validation","amp"))))}g.defaultProps={fill:"none",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 20"}},201:(e,t,r)=>{"use strict";r.d(t,{Jj:()=>d,_4:()=>c,mE:()=>u});var n=r(196),i=function(e){return(0,n.createElement)("svg",{...e},(0,n.createElement)("path",{fill:"#0075C2",d:"m13.3 9.1-4 6.6h-.8l.7-4.3H7c-.2 0-.4-.2-.4-.4 0-.1.1-.2.1-.2l4-6.6h.7l-.7 4.3h2.2c.2 0 .4.2.4.4.1.1 0 .2 0 .2zM10 .5C4.7.5.4 4.8.4 10c0 5.3 4.3 9.5 9.6 9.5s9.6-4.3 9.6-9.5c0-5.3-4.3-9.5-9.6-9.5z"}))};i.defaultProps={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20"};var a=function(e){return(0,n.createElement)("svg",{...e},(0,n.createElement)("path",{d:"M9.863 16.815h-.7l.8-4.5h-2.3c-.2 0-.4-.2-.4-.4 0-.1.1-.2.1-.2l4.2-7h.8l-.8 4.6h2.3c.2 0 .4.2.4.4 0 .1 0 .2-.1.2l-4.3 6.9Zm.8-16.1c-5.5 0-10 4.5-10 10s4.5 10 10 10 10-4.5 10-10-4.5-10-10-10Z"}))};a.defaultProps={width:"21",height:"21",fill:"none",xmlns:"http://www.w3.org/2000/svg"};var s=function(e){return(0,n.createElement)("svg",{...e},(0,n.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M.913 10.283c0 5.5 4.5 10 10 10s10-4.5 10-10-4.5-10-10-10-10 4.5-10 10Z",fill:"#fff"}),(0,n.createElement)("path",{d:"M10.113 16.383h-.7l.8-4.5h-2.3c-.2 0-.4-.2-.4-.4 0-.1.1-.2.1-.2l4.2-7h.8l-.8 4.6h2.3c.2 0 .4.2.4.4 0 .1 0 .2-.1.2l-4.3 6.9Zm.8-16.1c-5.5 0-10 4.5-10 10s4.5 10 10 10 10-4.5 10-10-4.5-10-10-10Z",fill:"#37414B"}),(0,n.createElement)("circle",{cx:"10.913",cy:"10.283",r:"9",stroke:"#BB522E",strokeWidth:"2"}),(0,n.createElement)("path",{stroke:"#BB522E",strokeWidth:"2",d:"M16.518 17.346 3.791 4.618"}),(0,n.createElement)("path",{stroke:"#fff",strokeWidth:"2",d:"M19.805 18.118 3.282 1.249"}))};function o({hasBadge:e}){return(0,n.createElement)("span",{className:"amp-toolbar-icon components-menu-items__item-icon"+(e?" amp-toolbar-icon--has-badge":"")},(0,n.createElement)(a,null))}function l({hasBadge:e}){return(0,n.createElement)("span",{className:"amp-toolbar-broken-icon"+(e?" amp-toolbar-broken-icon--has-badge":"")},(0,n.createElement)(s,null))}function c({broken:e=!1,count:t}){return(0,n.createElement)("div",{className:"amp-plugin-icon "+(e?"amp-plugin-icon--broken":"")},e?(0,n.createElement)(l,{hasBadge:Boolean(t)}):(0,n.createElement)(o,{hasBadge:Boolean(t)}),0<t&&(0,n.createElement)("div",{className:"amp-error-count-badge"},t))}function u(){return(0,n.createElement)(o,{hasBadge:!1})}function d({broken:e=!1}){return(0,n.createElement)("div",{className:"amp-status-icon "+(e?"amp-status-icon--broken":"")},(0,n.createElement)(i,null))}s.defaultProps={width:"21",height:"21",fill:"none",xmlns:"http://www.w3.org/2000/svg"}},361:(e,t,r)=>{"use strict";r.d(t,{H:()=>l,Z:()=>c});var n=r(196),i=r(184),a=r.n(i),s=r(609);function o({inline:e=!1}){const t=e?"span":"div";return(0,n.createElement)(t,{className:a()("amp-spinner-container",{"amp-spinner-container--inline":e})},(0,n.createElement)(s.Spinner,null))}function l({action:e,icon:t,isLoading:r=!1,isSmall:i=!1,message:s}){const l=r?(0,n.createElement)(o,null):t;return(0,n.createElement)("div",{className:a()("sidebar-notification",{"is-loading":r,"is-small":i})},l&&(0,n.createElement)("div",{className:"sidebar-notification__icon"},l),(0,n.createElement)("div",{className:"sidebar-notification__content"},(0,n.createElement)("p",null,s),e&&(0,n.createElement)("div",{className:"sidebar-notification__action"},e)))}function c({children:e,isShady:t}){return(0,n.createElement)("div",{className:a()("sidebar-notifications-container",{"is-shady":t})},e)}},504:(e,t,r)=>{"use strict";r.d(t,{c:()=>i});var n=r(818);function i(){const e=(0,n.useSelect)((e=>e("core/editor").getEditedPostAttribute("amp_enabled")||!1),[]),{editPost:t}=(0,n.useDispatch)("core/editor");return{isAMPEnabled:e,toggleAMP:()=>t({amp_enabled:!e})}}},590:(e,t,r)=>{"use strict";r.d(t,{P:()=>l});var n=r(307),i=r(818),a=r(333),s=r(736),o=r(883);function l(){const[e,t]=(0,n.useState)(!1),[r,l]=(0,n.useState)(""),{isEditedPostNew:c,isFetchingErrors:u}=(0,i.useSelect)((e=>({isEditedPostNew:e("core/editor").isEditedPostNew(),isFetchingErrors:e(o.h).getIsFetchingErrors()})),[]),d=(0,a.usePrevious)(c),m=(0,a.usePrevious)(u);return(0,n.useEffect)((()=>{e||!u&&m&&t(!0)}),[e,u,m]),(0,n.useEffect)((()=>{l(e?(0,s.__)("Re-validating content.","amp"):c||d?(0,s.__)("Validating content.","amp"):u?(0,s.__)("Loading…","amp"):"")}),[e,c,u,d]),{isFetchingErrors:u,fetchingErrorsMessage:r}}},93:(e,t,r)=>{"use strict";r.r(t),r.d(t,{PLUGIN_ICON:()=>W,PLUGIN_NAME:()=>G,PLUGIN_TITLE:()=>$,SIDEBAR_NAME:()=>J,default:()=>K});var n=r(196),i=r(736),a=r(67),s=r(818),o=r(883),l=r(201),c=r(609),u=r(307),d=r(361),m=r(590),E=function(e){return(0,n.createElement)("svg",{...e},(0,n.createElement)("path",{fill:"#707070",d:"M8 20c1.1 0 2-.9 2-2H6c0 1.1.9 2 2 2zm6-6V9c0-3.07-1.63-5.64-4.5-6.32V2C9.5 1.17 8.83.5 8 .5S6.5 1.17 6.5 2v.68C3.64 3.36 2 5.92 2 9v5l-2 2v1h16v-1l-2-2zm-2 1H4V9c0-2.48 1.51-4.5 4-4.5s4 2.02 4 4.5v6z"}))};function p(){const{autosave:e,savePost:t}=(0,s.useDispatch)("core/editor"),{isFetchingErrors:r,fetchingErrorsMessage:a}=(0,m.P)(),{isDraft:l,isPostDirty:u,maybeIsPostDirty:p}=(0,s.useSelect)((e=>({isDraft:-1!==["draft","auto-draft"].indexOf(e("core/editor").getEditedPostAttribute("status")),isPostDirty:e(o.h).getIsPostDirty(),maybeIsPostDirty:e(o.h).getMaybeIsPostDirty()})),[]);return r?(0,n.createElement)(d.H,{message:a,isLoading:!0}):u||p?(0,n.createElement)(d.H,{icon:(0,n.createElement)(E,null),message:p?(0,i.__)("Content may have changed.","amp"):(0,i.__)("Content has changed.","amp"),action:l?(0,n.createElement)(c.Button,{isLink:!0,onClick:()=>t({isPreview:!0})},(0,i.__)("Save draft and validate","amp")):(0,n.createElement)(c.Button,{isLink:!0,onClick:()=>e({isPreview:!0})},(0,i.__)("Re-validate","amp"))}):null}E.defaultProps={fill:"none",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 20"};var h=function(e){return(0,n.createElement)("svg",{...e},(0,n.createElement)("g",{clipPath:"url(#clip-amp-validation-errors-kept)",fill:"#BB522E"},(0,n.createElement)("path",{d:"M10.762 2.541c4.4 0 8 3.6 8 8 0 1.6-.5 3-1.2 4.2l1.4 1.5c1.1-1.6 1.8-3.6 1.8-5.7 0-5.5-4.5-10-10-10-2 0-3.9.6-5.5 1.7l1.4 1.5c1.2-.8 2.6-1.2 4.1-1.2ZM.762 10.541c0 5.5 4.5 10 10 10 2.7 0 5.1-1.1 6.9-2.8l-14-14.2c-1.8 1.8-2.9 4.3-2.9 7Zm10 8c-4.4 0-8-3.6-8-8 0-1.5.4-2.8 1.1-4l10.9 10.9c-1.2.7-2.5 1.1-4 1.1Z"}),(0,n.createElement)("path",{d:"M14.262 9.74c.1 0 .1-.1.1-.2 0-.2-.2-.4-.4-.4h-2l1.6 1.6.7-1ZM12.461 4.541h-.8l-1.6 2.6 1.7 1.7.7-4.3ZM7.462 11.541s-.1.1-.1.2c0 .2.2.4.4.4h2.3l-.8 4.5h.7l2.6-4.1-3.5-3.6-1.6 2.6Z"})),(0,n.createElement)("defs",null,(0,n.createElement)("clipPath",{id:"clip-amp-validation-errors-kept"},(0,n.createElement)("path",{fill:"#fff",transform:"translate(.762 .541)",d:"M0 0h20v20H0z"}))))};function g(){const{autosave:e,savePost:t}=(0,s.useDispatch)("core/editor"),{isFetchingErrors:r}=(0,m.P)(),{fetchingErrorsRequestErrorMessage:a,isDraft:u,isEditedPostNew:E,keptMarkupValidationErrorCount:p,reviewLink:g,supportLink:v,unreviewedValidationErrorCount:_,validationErrorCount:f}=(0,s.useSelect)((e=>({fetchingErrorsRequestErrorMessage:e(o.h).getFetchingErrorsRequestErrorMessage(),isDraft:-1!==["draft","auto-draft"].indexOf(e("core/editor").getEditedPostAttribute("status")),isEditedPostNew:e("core/editor").isEditedPostNew(),keptMarkupValidationErrorCount:e(o.h).getKeptMarkupValidationErrors().length,reviewLink:e(o.h).getReviewLink(),supportLink:e(o.h).getSupportLink(),unreviewedValidationErrorCount:e(o.h).getUnreviewedValidationErrors().length,validationErrorCount:e(o.h).getValidationErrors().length})),[]);if(r)return null;if(E)return(0,n.createElement)(d.H,{icon:(0,n.createElement)(l.Jj,null),message:(0,i.__)("Validation will be checked upon saving.","amp")});const w=g&&(0,n.createElement)(n.Fragment,null,(0,n.createElement)(c.ExternalLink,{href:g},(0,i.__)("View technical details","amp")),(0,n.createElement)("br",null),v&&(0,n.createElement)(c.ExternalLink,{href:v},(0,i.__)("Get Support","amp")));return a?(0,n.createElement)(d.H,{icon:(0,n.createElement)(h,null),message:a,action:(0,n.createElement)(c.Button,{isLink:!0,onClick:u?()=>t({isPreview:!0}):()=>e({isPreview:!0})},(0,i.__)("Try again","amp"))}):p>0?(0,n.createElement)(d.H,{icon:(0,n.createElement)(h,null),message:(0,i.sprintf)(/* translators: %d is count of validation errors whose invalid markup is kept */
(0,i._n)("AMP is disabled due to invalid markup being kept for %d issue.","AMP is disabled due to invalid markup being kept for %d issues.",p,"amp"),p),action:w}):_>0?(0,n.createElement)(d.H,{icon:(0,n.createElement)(l.Jj,{broken:!0}),message:(0,i.sprintf)(/* translators: %d is count of unreviewed validation error */
(0,i._n)("AMP is valid, but %d issue needs review.","AMP is valid, but %d issues need review.",_,"amp"),_),action:w}):f>0?(0,n.createElement)(d.H,{icon:(0,n.createElement)(l.Jj,null),message:(0,i.sprintf)(/* translators: %d is count of unreviewed validation error */
(0,i._n)("AMP is valid. %d issue was reviewed.","AMP is valid. %d issues were reviewed.",f,"amp"),f),action:w}):(0,n.createElement)(d.H,{icon:(0,n.createElement)(l.Jj,null),message:(0,i.__)("No AMP validation issues detected.","amp")})}function v(){return(0,n.createElement)(d.Z,{isShady:!0},(0,n.createElement)(p,null),(0,n.createElement)(g,null))}h.defaultProps={width:"21",height:"21",fill:"none",xmlns:"http://www.w3.org/2000/svg"};var _=r(184),f=r.n(_),w=r(422),P=function(e){return(0,n.createElement)("svg",{...e},(0,n.createElement)("path",{d:"m2.45 3.068 3.34 1.178v1.64L.743 3.749V2.365L5.79.227v1.64L2.45 3.068Zm8.19-.017L7.237 1.86V.232l5.104 2.14v1.376L7.236 5.893V4.258l3.405-1.207Z",fill:"#fff"}))};P.defaultProps={width:"13",height:"6",fill:"none",xmlns:"http://www.w3.org/2000/svg"};var k=function(e){return(0,n.createElement)("svg",{...e},(0,n.createElement)("path",{d:"M3.675.959h1.5v4.9c0 .5-.1.9-.3 1.2-.2.3-.5.6-.8.8-.4.2-.8.3-1.2.3-.8 0-1.3-.2-1.8-.6-.4-.4-.6-.9-.6-1.6h1.5c0 .3.1.6.2.8.1.2.4.2.7.2.3 0 .5-.1.7-.3.2-.2.2-.5.2-.8v-4.9h-.1ZM10.075 6.26c0-.3-.1-.5-.3-.6-.2-.1-.5-.3-1.1-.5-.5-.2-.9-.3-1.2-.5-.8-.4-1.2-1-1.2-1.8 0-.4.1-.7.3-1 .2-.3.5-.5.9-.7.5-.2 1-.3 1.5-.3s1 .1 1.4.3c.4.2.7.4.9.8.2.3.3.7.3 1.1h-1.5c0-.3-.1-.6-.3-.8-.2-.2-.5-.3-.9-.3s-.6.1-.8.2c-.2.2-.3.3-.3.6 0 .2.1.4.3.6.2.2.6.3 1 .4.8.3 1.4.6 1.8.9.4.3.6.8.6 1.4 0 .6-.2 1.1-.7 1.4-.5.4-1.1.5-1.9.5-.5 0-1-.1-1.5-.3-.4-.2-.8-.5-1-.8-.2-.3-.4-.8-.4-1.2h1.5c0 .8.5 1.2 1.4 1.2.3 0 .6-.1.8-.2.3 0 .4-.2.4-.4Z",fill:"#fff"}))};k.defaultProps={width:"12",height:"9",fill:"none",xmlns:"http://www.w3.org/2000/svg"};var b=function(e){return(0,n.createElement)("svg",{...e},(0,n.createElement)("path",{d:"M4.13 6.46h-1.2l-.4 2.4h-1.1l.4-2.4H.53v-1h1.5l.3-1.7h-1.3v-1h1.5l.4-2.4h1.1l-.4 2.4h1.1l.4-2.4h1.1l-.4 2.4h1.3v1h-1.5l-.3 1.7h1.3v1h-1.5l-.4 2.4h-1.1l.5-2.4Zm-1-1h1.1l.3-1.7h-1.1l-.3 1.7Z",fill:"#fff"}))};function S({type:e}){switch(e){case w.HTML_ATTRIBUTE_ERROR_TYPE:case w.HTML_ELEMENT_ERROR_TYPE:return(0,n.createElement)(P,null);case w.JS_ERROR_TYPE:return(0,n.createElement)(k,null);case w.CSS_ERROR_TYPE:return(0,n.createElement)(b,null);default:return null}}function R({kept:e,title:t,error:{type:r}}){return(0,n.createElement)("div",{className:"amp-error__panel-title",title:e?(0,i.__)("This error has been kept, making this URL not AMP-compatible.","amp"):""},(0,n.createElement)("div",{className:"amp-error__icons"},r&&(0,n.createElement)("div",{className:`amp-error__error-type-icon amp-error__error-type-icon--${r?.replace(/_/g,"-")}`},(0,n.createElement)(S,{type:r}))),(0,n.createElement)("div",{className:"amp-error__title",dangerouslySetInnerHTML:{__html:t}}))}b.defaultProps={width:"8",height:"9",fill:"none",xmlns:"http://www.w3.org/2000/svg"};var A=r(175),y=function(e){return(0,n.createElement)("svg",{...e},(0,n.createElement)("path",{d:"m10.075 4.055 6.275 10.842H3.8l6.275-10.842Zm0-3.325L.908 16.564h18.333L10.075.73Zm.833 11.667H9.242v1.667h1.666v-1.667Zm0-5H9.242v3.333h1.666V7.397Z",fill:"#BE2C23"}))};y.defaultProps={width:"20",height:"17",fill:"none",xmlns:"http://www.w3.org/2000/svg"};var I=function(e){return(0,n.createElement)("svg",{...e},(0,n.createElement)("path",{d:"M12.258 9.043 10.49 10.81 8.716 9.043l-1.175 1.175 1.775 1.767-1.767 1.767 1.175 1.175 1.767-1.767 1.767 1.767 1.175-1.175-1.767-1.767 1.767-1.767-1.175-1.175Zm1.15-5.391-.834-.834H8.408l-.834.834H4.658v1.666h11.666V3.652h-2.916Zm-7.917 12.5c0 .916.75 1.666 1.667 1.666h6.666c.917 0 1.667-.75 1.667-1.666v-10h-10v10Zm1.667-8.334h6.666v8.334H7.158V7.818Z",fill:"#479696"}))};function T({clientId:e,blockTypeName:t,sources:r}){let a;const s=w.blockSources?.[t];if(e&&"core/shortcode"!==t)switch(s?.type){case"plugin":a=(0,i.sprintf)(/* translators: %s: plugin name. */
(0,i.__)("%s (plugin)","amp"),s.title);break;case"mu-plugin":a=(0,i.sprintf)(/* translators: %s: plugin name. */
(0,i.__)("%s (must-use plugin)","amp"),s.title);break;case"theme":a=(0,i.sprintf)(/* translators: %s: theme name. */
(0,i.__)("%s (theme)","amp"),s.title);break;default:a=s?.title}return a||(a=function(e=[]){const t=function(e){const t={theme:[],plugin:[],"mu-plugin":[],embed:[],core:[],blocks:[]};if(!e?.length)return t;for(const r of e)r.type&&r.type in t?t[r.type].push(r):"block_name"in r&&t.blocks.push(r);return t}(e),r=[],n=new Set(t.plugin.map((({name:e})=>e))),a=new Set(t["mu-plugin"].map((({name:e})=>e)));let s=[...n,...a];if(s.length>1&&(s=s.filter((e=>"gutenberg"!==e))),1===s.length)r.push(w.pluginNames[s[0]]||s[0]);else{const e=n.size,t=a.size;0<e&&r.push((0,i.sprintf)("%1$s (%2$d)",(0,i.__)("Plugins","amp"),e)),0<t&&r.push((0,i.sprintf)("%1$s (%2$d)",(0,i.__)("Must-use plugins","amp"),t))}if(0===t.embed.length){const e=t.theme.filter((({name:e})=>w.themeSlug===e)),n=t.theme.filter((({name:e})=>w.themeSlug!==e));0<e.length&&r.push(w.themeName),0<n.length&&
/* translators: placeholder is the slug of an inactive WordPress theme. */
r.push((0,i.__)("Inactive theme(s)","amp"))}return 0===r.length&&0<t.blocks.length&&r.push(t.blocks[0].block_name),0===r.length&&0<t.embed.length&&r.push((0,i.__)("Embed","amp")),0===r.length&&0<t.core.length&&r.push((0,i.__)("Core","amp")),!r.length&&e?.length&&r.push((0,i.__)("Unknown","amp")),r.join(", ")}(r)),(0,n.createElement)(n.Fragment,null,(0,n.createElement)("dt",null,(0,i.__)("Source","amp")),(0,n.createElement)("dd",null,a))}function M({status:e}){let t,r;return t=[w.VALIDATION_ERROR_NEW_ACCEPTED_STATUS,w.VALIDATION_ERROR_ACK_ACCEPTED_STATUS].includes(e)?(0,n.createElement)("span",{className:"amp-error__kept-removed amp-error__kept-removed--removed"},(0,i.__)("Removed","amp"),(0,n.createElement)("span",null,(0,n.createElement)(I,null))):(0,n.createElement)("span",{className:"amp-error__kept-removed amp-error__kept-removed--kept"},(0,i.__)("Kept","amp"),(0,n.createElement)("span",null,(0,n.createElement)(y,null))),r=[w.VALIDATION_ERROR_ACK_ACCEPTED_STATUS,w.VALIDATION_ERROR_ACK_REJECTED_STATUS].includes(e)?(0,i.__)("Yes","amp"):(0,i.__)("No","amp"),(0,n.createElement)(n.Fragment,null,(0,n.createElement)("dt",null,(0,i.__)("Markup status","amp")),(0,n.createElement)("dd",null,t),(0,n.createElement)("dt",null,(0,i.__)("Reviewed","amp")),(0,n.createElement)("dd",null,r))}function N({blockTypeIcon:e,blockTypeTitle:t}){return(0,n.createElement)(n.Fragment,null,(0,n.createElement)("dt",null,(0,i.__)("Block type","amp")),(0,n.createElement)("dd",null,(0,n.createElement)("span",{className:"amp-error__block-type-description"},t||(0,i.__)("unknown","amp"),e&&(0,n.createElement)("span",{className:"amp-error__block-type-icon"},(0,n.createElement)(A.BlockIcon,{icon:e})))))}function C({blockType:e,clientId:t,error:{sources:r},isExternal:a,removed:s,status:o}){const l=e?.title,c=e?.name,u=e?.icon;return(0,n.createElement)(n.Fragment,null,s&&(0,n.createElement)("p",null,(0,i.__)("This error is no longer detected, either because the block was removed or the editor mode was switched.","amp")),a&&(0,n.createElement)("p",null,(0,i.__)("This error comes from outside the content (e.g. header or footer).","amp")),(0,n.createElement)("dl",{className:"amp-error__details"},!(s||a)&&(0,n.createElement)(N,{blockTypeIcon:u,blockTypeTitle:l}),(0,n.createElement)(T,{blockTypeName:c,clientId:t,sources:r}),(0,n.createElement)(M,{status:o})))}function D({clientId:e,error:t,status:r,term_id:a,title:l}){const{selectBlock:u}=(0,s.useDispatch)("core/block-editor"),d=(0,s.useSelect)((e=>e(o.h).getReviewLink()),[]),m=r===w.VALIDATION_ERROR_ACK_ACCEPTED_STATUS||r===w.VALIDATION_ERROR_ACK_REJECTED_STATUS,E=r===w.VALIDATION_ERROR_ACK_REJECTED_STATUS||r===w.VALIDATION_ERROR_NEW_REJECTED_STATUS,p=!Boolean(e),{blockType:h,removed:g}=(0,s.useSelect)((t=>{const r=t("core/block-editor").getBlockName(e);return{removed:e&&!r,blockType:t("core/blocks").getBlockType(r)}}),[e]);let v=null;d&&(v=new URL(d),v.hash=`#tag-${a}`);const _=f()("amp-error",{"amp-error--reviewed":m,"amp-error--new":!m,"amp-error--removed":g,"amp-error--kept":E,[`error-${e}`]:e});return(0,n.createElement)(c.PanelBody,{className:_,title:(0,n.createElement)(R,{error:t,kept:E,title:l}),initialOpen:!1},(0,n.createElement)(C,{blockType:h,clientId:e,error:t,isExternal:p,removed:g,status:r}),(0,n.createElement)("div",{className:"amp-error__actions"},!(g||p)&&(0,n.createElement)(c.Button,{className:"amp-error__select-block",isSecondary:!0,onClick:()=>{u(e)}},(0,i.__)("Select block","amp")),v&&(0,n.createElement)(c.ExternalLink,{href:v.href,className:"amp-error__details-link"},(0,i.__)("View details","amp"))))}function V(){const{setIsShowingReviewed:e}=(0,s.useDispatch)(o.h),{displayedErrors:t,hasReviewedValidationErrors:r,isShowingReviewed:a}=(0,s.useSelect)((e=>{const t=e(o.h).getIsShowingReviewed();return{displayedErrors:t?e(o.h).getValidationErrors():e(o.h).getUnreviewedValidationErrors(),hasReviewedValidationErrors:e(o.h).getReviewedValidationErrors()?.length>0,isShowingReviewed:t}}),[]);return(0,u.useEffect)((()=>{const e=document.querySelector(".amp-sidebar a, .amp-sidebar button, .amp-sidebar input");e&&e.focus()}),[]),(0,n.createElement)("div",{className:"amp-sidebar"},(0,n.createElement)(v,null),0<t.length&&(0,n.createElement)("ul",{className:"amp-sidebar__errors-list"},t.map(((e,t)=>(0,n.createElement)("li",{key:`${e.clientId}${t}`,className:"amp-sidebar__errors-list-item"},(0,n.createElement)(D,{...e}))))),r&&(0,n.createElement)("div",{className:"amp-sidebar__options"},(0,n.createElement)(c.Button,{isLink:!0,onClick:()=>e(!a)},a?(0,i.__)("Hide reviewed issues","amp"):(0,i.__)("Show reviewed issues","amp"))))}function L(){const e=(0,s.useSelect)((e=>e(o.h).getUnreviewedValidationErrors()),[]),t=(0,u.useMemo)((()=>e.map((({clientId:e})=>e)).filter((e=>e)).map((e=>`#block-${e}::before`))),[e]);return(0,n.createElement)("style",null,`${t.join(",")} {\n\t\t\t\t\tborder-radius: 9px;\n\t\t\t\t\tbottom: -3px;\n\t\t\t\t\tbox-shadow: 0 0 0 2px #bb522e;\n\t\t\t\t\tcontent: '';\n\t\t\t\t\tleft: -3px;\n\t\t\t\t\tpointer-events: none;\n\t\t\t\t\tposition: absolute;\n\t\t\t\t\tright: -3px;\n\t\t\t\t\ttop: -3px;\n\t\t\t\t}`)}I.defaultProps={width:"21",height:"21",fill:"none",xmlns:"http://www.w3.org/2000/svg"};var O=r(333);const B=500,x=window.lodash,U=window.wp.apiFetch;var F=r.n(U);const H=window.wp.url;function Z({validationError:e,source:t,currentPostId:r,blockOrder:n,getBlock:i}){if(!t.block_name||void 0===t.block_content_index)return;if(r!==t.post_id)return;const a=n[t.block_content_index];if(!a)return;const s=i(a);s&&s.name===t.block_name&&(e.clientId=a)}var j=r(504);const G="amp-block-validation",J="amp-editor-sidebar",$=(0,i.__)("AMP Validation","amp"),W=l.mE;function K(){const{broken:e,errorCount:t}=(0,s.useSelect)((e=>({broken:e(o.h).getAMPCompatibilityBroken(),errorCount:e(o.h).getUnreviewedValidationErrors()?.length||0})),[]),{isAMPEnabled:r}=(0,j.c)();return function(){const[e,t]=(0,u.useState)([]),[r,n]=(0,u.useState)(!1),[a,l]=(0,u.useState)([]),[c,d]=(0,u.useState)(!1),{setIsFetchingErrors:m,setFetchingErrorsRequestErrorMessage:E,setReviewLink:p,setSupportLink:h,setValidationErrors:g}=(0,s.useDispatch)(o.h),{currentPostId:v,getBlock:_,getClientIdsWithDescendants:f,isAutosavingPost:w,isEditedPostNew:P,isPreviewingPost:k,isSavingPost:b,previewLink:S,validationErrors:R}=(0,s.useSelect)((e=>({currentPostId:e("core/editor").getCurrentPostId(),getBlock:e("core/block-editor").getBlock,getClientIdsWithDescendants:e("core/block-editor").getClientIdsWithDescendants,isAutosavingPost:e("core/editor").isAutosavingPost(),isEditedPostNew:e("core/editor").isEditedPostNew(),isPreviewingPost:e("core/editor").isPreviewingPost(),isSavingPost:e("core/editor").isSavingPost(),previewLink:e("core/editor").getEditedPostPreviewLink(),validationErrors:e(o.h).getValidationErrors()})),[]),A=(0,O.usePrevious)(P);(0,u.useEffect)((()=>{P||A||d(!0)}),[P,A]),(0,u.useEffect)((()=>{if(b)return k?(d(!0),void n(!0)):void(w||d(!0))}),[w,k,b]),(0,u.useEffect)((()=>{if(!c)return;if(b)return void m(!0);if(r&&!(0,H.isURL)(S))return;const e={id:v};r&&(e.preview_nonce=(0,H.getQueryArg)(S,"preview_nonce")),m(!0),d(!1),n(!1),E(""),t(f()),F()({path:"/amp/v1/validate-post-url/",method:"POST",data:e}).then((e=>{g(e.results),p(e.review_link),h(e.support_link)})).catch((e=>{E(e?.message||(0,i.__)("Whoops! Something went wrong.","amp"))})).finally((()=>{m(!1)}))}),[v,f,r,b,S,E,m,p,h,g,c]),(0,u.useEffect)((()=>{R&&!(0,x.isEqual)(a,R)&&l(R)}),[a,R]),(0,u.useEffect)((()=>{const t=a.map((t=>{if(!t.error.sources?.length)return t;for(const r of t.error.sources){if("clientId"in t)break;Z({validationError:t,source:r,getBlock:_,blockOrder:0<e.length?e:f(),currentPostId:v})}return t}));g(t)}),[e,v,_,f,g,a])}(),function(){const[e,t]=(0,u.useState)(null),[r,n]=(0,u.useState)(),i=(0,u.useRef)(null),{setIsPostDirty:a,setMaybeIsPostDirty:l}=(0,s.useDispatch)(o.h),{getEditedPostContent:c,hasErrorsFromRemovedBlocks:d,hasActiveMetaboxes:m,isPostDirty:E,isSavingOrPreviewingPost:p}=(0,s.useSelect)((e=>({getEditedPostContent:e("core/editor").getEditedPostContent,hasErrorsFromRemovedBlocks:Boolean(e(o.h).getValidationErrors().find((({clientId:t})=>t&&!e("core/block-editor").getBlockName(t)))),hasActiveMetaboxes:e("core/edit-post").hasMetaBoxes(),isPostDirty:e(o.h).getIsPostDirty(),isSavingOrPreviewingPost:e("core/editor").isSavingPost()&&!e("core/editor").isAutosavingPost()||e("core/editor").isPreviewingPost()})),[]);(0,u.useEffect)((()=>()=>{i.current&&i.current()}),[]),(0,u.useEffect)((()=>{E&&p&&(a(!1),t(null))}),[E,p,a]),(0,u.useEffect)((()=>{if(null===e){const e=c();return t(e),void n(e)}r!==e&&a(!0)}),[e,c,a,r]),(0,u.useEffect)((()=>{l(!E&&(m||d))}),[m,d,E,l]);const h=(0,u.useCallback)((()=>{n(c())}),[c]),g=(0,O.useDebounce)(h,B);(0,u.useEffect)((()=>{E&&i.current?(i.current(),i.current=null):p||E||i.current||(i.current=(0,s.subscribe)(g))}),[g,E,p])}(),r?(0,n.createElement)(n.Fragment,null,(0,n.createElement)(a.PluginSidebarMoreMenuItem,{icon:(0,n.createElement)(W,null),target:J},$),(0,n.createElement)(a.PluginSidebar,{className:`${G}-sidebar`,icon:(0,n.createElement)(l._4,{count:t,broken:e}),name:J,title:$},(0,n.createElement)(V,null),(0,n.createElement)(L,null))):null}},877:(e,t,r)=>{"use strict";r.r(t),r.d(t,{PLUGIN_ICON:()=>l,PLUGIN_NAME:()=>o,default:()=>c});var n=r(196),i=r(736),a=r(67),s=r(44);const o="amp-block-validation-document-setting-panel",l="";function c(){return(0,n.createElement)(a.PluginDocumentSettingPanel,{name:o,title:(0,i.__)("AMP","amp"),initialOpen:!0},(0,n.createElement)(s.Z,null))}},327:(e,t,r)=>{"use strict";r.r(t),r.d(t,{PLUGIN_ICON:()=>l,PLUGIN_NAME:()=>o,default:()=>c});var n=r(196),i=r(736),a=r(67),s=r(44);const o="amp-block-validation-pre-publish-panel",l="";function c(){return(0,n.createElement)(a.PluginPrePublishPanel,{title:(0,i.__)("AMP","amp"),initialOpen:!0},(0,n.createElement)(s.Z,null))}},883:(e,t,r)=>{"use strict";r.d(t,{h:()=>E});var n=r(422),i=r(818);const a="SET_FETCHING_ERRORS_REQUEST_ERROR_MESSAGE",s="SET_IS_FETCHING_ERRORS",o="SET_IS_POST_DIRTY",l="SET_IS_SHOWING_REVIEWED",c="SET_MAYBE_IS_POST_DIRTY",u="SET_REVIEW_LINK",d="SET_SUPPORT_LINK",m="SET_VALIDATION_ERRORS",E=(0,i.createReduxStore)("amp/block-validation",{reducer:(e=p,t)=>{switch(t.type){case a:return{...e,fetchingErrorsRequestErrorMessage:t.fetchingErrorsRequestErrorMessage};case s:return{...e,isFetchingErrors:t.isFetchingErrors};case o:return{...e,isPostDirty:t.isPostDirty};case l:return{...e,isShowingReviewed:t.isShowingReviewed};case c:return{...e,maybeIsPostDirty:t.maybeIsPostDirty};case u:return{...e,reviewLink:t.reviewLink};case d:return{...e,supportLink:t.supportLink};case m:return{...e,ampCompatibilityBroken:Boolean(t.validationErrors.filter((({status:e})=>e===n.VALIDATION_ERROR_NEW_REJECTED_STATUS||e===n.VALIDATION_ERROR_ACK_REJECTED_STATUS))?.length),reviewedValidationErrors:t.validationErrors.filter((({status:e})=>e===n.VALIDATION_ERROR_ACK_ACCEPTED_STATUS||e===n.VALIDATION_ERROR_ACK_REJECTED_STATUS)),unreviewedValidationErrors:t.validationErrors.filter((({status:e})=>e===n.VALIDATION_ERROR_NEW_ACCEPTED_STATUS||e===n.VALIDATION_ERROR_NEW_REJECTED_STATUS)),keptMarkupValidationErrors:t.validationErrors.filter((({status:e})=>e===n.VALIDATION_ERROR_NEW_REJECTED_STATUS||e===n.VALIDATION_ERROR_ACK_REJECTED_STATUS)),validationErrors:t.validationErrors};default:return e}},actions:{setFetchingErrorsRequestErrorMessage:e=>({type:a,fetchingErrorsRequestErrorMessage:e}),setIsFetchingErrors:e=>({type:s,isFetchingErrors:e}),setIsPostDirty:e=>({type:o,isPostDirty:e}),setIsShowingReviewed:e=>({type:l,isShowingReviewed:e}),setMaybeIsPostDirty:e=>({type:c,maybeIsPostDirty:e}),setReviewLink:e=>({type:u,reviewLink:e}),setSupportLink:e=>({type:d,supportLink:e}),setValidationErrors:e=>({type:m,validationErrors:e})},selectors:{getAMPCompatibilityBroken:({ampCompatibilityBroken:e})=>e,getFetchingErrorsRequestErrorMessage:({fetchingErrorsRequestErrorMessage:e})=>e,getIsFetchingErrors:({isFetchingErrors:e})=>e,getIsPostDirty:({isPostDirty:e})=>e,getIsShowingReviewed:({isShowingReviewed:e})=>e,getMaybeIsPostDirty:({maybeIsPostDirty:e})=>e,getReviewLink:({reviewLink:e})=>e,getSupportLink:({supportLink:e})=>e,getReviewedValidationErrors:({reviewedValidationErrors:e})=>e,getUnreviewedValidationErrors:({unreviewedValidationErrors:e})=>e,getKeptMarkupValidationErrors:({keptMarkupValidationErrors:e})=>e,getValidationErrors:({validationErrors:e})=>e},initialState:p={ampCompatibilityBroken:!1,fetchingErrorsRequestErrorMessage:"",isPostDirty:!1,isFetchingErrors:!1,isShowingReviewed:!1,keptMarkupValidationErrors:[],maybeIsPostDirty:!1,rawValidationErrors:[],reviewLink:null,supportLink:null,reviewedValidationErrors:[],unreviewedValidationErrors:[],validationErrors:[]}});var p;(0,i.register)(E)},184:(e,t)=>{var r;!function(){"use strict";var n={}.hasOwnProperty;function i(){for(var e=[],t=0;t<arguments.length;t++){var r=arguments[t];if(r){var a=typeof r;if("string"===a||"number"===a)e.push(r);else if(Array.isArray(r)){if(r.length){var s=i.apply(null,r);s&&e.push(s)}}else if("object"===a){if(r.toString!==Object.prototype.toString&&!r.toString.toString().includes("[native code]")){e.push(r.toString());continue}for(var o in r)n.call(r,o)&&r[o]&&e.push(o)}}}return e.join(" ")}e.exports?(i.default=i,e.exports=i):void 0===(r=function(){return i}.apply(t,[]))||(e.exports=r)}()},422:e=>{"use strict";e.exports=ampBlockValidation},196:e=>{"use strict";e.exports=window.React},175:e=>{"use strict";e.exports=window.wp.blockEditor},609:e=>{"use strict";e.exports=window.wp.components},333:e=>{"use strict";e.exports=window.wp.compose},818:e=>{"use strict";e.exports=window.wp.data},67:e=>{"use strict";e.exports=window.wp.editPost},307:e=>{"use strict";e.exports=window.wp.element},736:e=>{"use strict";e.exports=window.wp.i18n}},t={};function r(n){var i=t[n];if(void 0!==i)return i.exports;var a=t[n]={exports:{}};return e[n](a,a.exports,r),a.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{"use strict";const e=window.wp.hooks,t=window.wp.plugins;var n=r(196),i=r(818),a=r(333),s=r(883),o=r(175),l=r(609),c=r(201),u=r(93),d=r(504);function m({clientId:e,count:t}){const{openGeneralSidebar:r}=(0,i.useDispatch)("core/edit-post"),{isAMPEnabled:a}=(0,d.c)();return a?(0,n.createElement)(o.BlockControls,null,(0,n.createElement)(l.ToolbarButton,{onClick:()=>{r(`${u.PLUGIN_NAME}/${u.SIDEBAR_NAME}`),setTimeout((()=>{const t=Array.from(document.querySelectorAll(`.error-${e} button`)),r=t[0];t.reverse();for(const e of t)"false"===e.getAttribute("aria-expanded")&&e.click();r&&r.scrollIntoView({block:"start",inline:"nearest",behavior:"smooth"})}))}},(0,n.createElement)(c._4,{count:t}))):null}function E(e){const{BlockEdit:t,clientId:r}=e,a=(0,i.useSelect)((e=>(e(s.h).getUnreviewedValidationErrors()||[]).filter((({clientId:e})=>r===e)).length||0),[r]);return(0,n.createElement)(n.Fragment,null,0<a&&(0,n.createElement)(m,{clientId:r,count:a}),(0,n.createElement)(t,{...e}))}const p=(0,a.createHigherOrderComponent)((e=>t=>(0,n.createElement)(E,{...t,BlockEdit:e})),"BlockEditWithAMPToolbar"),h=r(11);h.keys().forEach((e=>{const{default:r,PLUGIN_NAME:n,PLUGIN_ICON:i}=h(e);(0,t.registerPlugin)(n,{icon:i,render:r})})),(0,e.addFilter)("editor.BlockEdit","ampBlockValidation/filterEdit",p,-99)})()})();PK.3Y���D]]<bunyad-amp/assets/js/amp-customize-controls-legacy.asset.php<?php return array('dependencies' => array('wp-i18n'), 'version' => '27ef6c89057c08d33752');
PK.3YV�'225bunyad-amp/assets/js/amp-customize-controls-legacy.js(()=>{"use strict";const e=window.wp.i18n;window.ampCustomizeControls=function(t,a){const i={data:{queryVar:"amp",panelId:"",ampUrl:"",l10n:{unavailableMessage:"",unavailableLinkText:""}},tooltipTimeout:5e3,tooltipVisible:new t.Value(!1),tooltipFocused:new t.Value(0),boot:function(e){function a(){t.panel(i.data.panelId,i.panelReady)}i.data=e,t.state?(i.addState(),t.bind("ready",a)):t.bind("ready",(function(){i.addState(),a()}))},addState:function(){t.state.add("ampEnabled",new t.Value(!1)),t.state.add("ampAvailable",new t.Value(!1))},isAmpUrl:function(e){const t=document.createElement("a"),a=new RegExp("\\/"+i.data.queryVar+"\\/?$");return t.href=e,!_.isUndefined(wp.customize.utils.parseQueryString(t.search.substr(1))[i.data.queryVar])||a.test(t.pathname)},unampifyUrl:function(e){const t=document.createElement("a"),n=new RegExp("\\/"+i.data.queryVar+"\\/?$");if(t.href=e,t.pathname=t.pathname.replace(n,""),1<t.search.length){const e=window.wp.customize.utils.parseQueryString(t.search.substr(1));delete e[i.data.queryVar],t.search=a.param(e)}return t.href},ampifyUrl:function(e){const t=document.createElement("a");return t.href=i.unampifyUrl(e),t.search.length&&(t.search+="&"),t.search+=i.data.queryVar+"=1",t.href},tryToCloseTooltip:function(){clearTimeout(i.tooltipTimeoutId),i.tooltipTimeoutId=setTimeout((function(){i.tooltipVisible.get()&&(0<i.tooltipFocused.get()?i.tryToCloseTooltip():i.tooltipVisible.set(!1))}),i.tooltipTimeout)},setCurrentAmpUrl:function(e){const a=t.state("ampEnabled").get();return!a&&i.isAmpUrl(e)?i.unampifyUrl(e):a&&!i.isAmpUrl(e)?i.ampifyUrl(e):e},updatePreviewUrl:function(){t.previewer.previewUrl.set(i.setCurrentAmpUrl(t.previewer.previewUrl.get()))},enableAndNavigateToUrl:function(e){t.state("ampEnabled").set(!0),t.previewer.previewUrl.set(e)},updatePanelNotifications:function(){const e=t.panel(i.data.panelId),a=e.sections().concat([e]);t.state("ampAvailable").get()?_.each(a,(function(e){e.notifications.remove("amp_unavailable")})):_.each(a,(function(e){e.notifications.add(new t.Notification("amp_unavailable",{message:i.data.l10n.unavailableMessage,type:"info",linkText:i.data.l10n.unavailableLinkText,url:i.data.ampUrl,templateId:"customize-amp-unavailable-notification",render(){const e=t.Notification.prototype.render.call(this);return e.find("a").on("click",(function(e){e.preventDefault(),i.enableAndNavigateToUrl(this.href)})),e}}))}))},panelReady:function(n){const o=a(wp.template("customize-amp-enabled-toggle")({message:i.data.l10n.unavailableMessage,linkText:i.data.l10n.unavailableLinkText,url:i.data.ampUrl})),l=o.find("input[type=checkbox]"),s=o.find(".tooltip"),r=s.find("a");var p;n.expanded.bind((function(e){e&&(t.state("ampAvailable").get()?t.state("ampEnabled").set(n.expanded.get()):n.notifications||setTimeout((function(){i.tooltipVisible.set(!0)}),250))})),n.notifications&&(t.state("ampAvailable").bind(i.updatePanelNotifications),i.updatePanelNotifications(),t.section.bind("add",i.updatePanelNotifications)),t.previewer.bind("amp-status",(function(e){t.state("ampAvailable").set(e.available)})),t.previewer.bind("amp-status",(function e(a){t.state("ampEnabled").set(a.enabled),t.previewer.unbind("amp-status",e)})),t.previewer.previewUrl.validate=(p=t.previewer.previewUrl.validate,function(e){let t=p.call(this,e);return t&&(t=i.setCurrentAmpUrl(t)),t}),t.state("ampEnabled").bind((function(e){if(l.prop("checked",e),i.updatePreviewUrl(),e){const e="tablet";e in t.settings.previewableDevices&&t.state("previewedDevice").set(e)}})),t.state("ampAvailable").bind((function(e){l.toggleClass("disabled",!e),t.state("ampEnabled").get()&&i.tooltipVisible.set(!e)})),a(".devices-wrapper").prepend(o);const u=a(".collapse-sidebar.button"),c=u.find("> .collapse-sidebar-label"),d=()=>{t.state("paneVisible").get()?u.prop("title",c.text()):u.prop("title",(0,e.__)("Show Controls","amp"))};d(),t.state("paneVisible").bind(d),r.on("click",(function(e){e.preventDefault(),i.enableAndNavigateToUrl(this.href)})),i.tooltipVisible.bind((function(e){s.attr("aria-hidden",e?"false":"true"),e?(a(document).on("click.amp-toggle-outside",(function(e){a.contains(o[0],e.target)||i.tooltipVisible.set(!1)})),s.fadeIn(),i.tryToCloseTooltip()):(s.fadeOut(),i.tooltipFocused.set(0),a(document).off("click.amp-toggle-outside"))})),l.on("click",(function(){this.checked=!this.checked,t.state("ampAvailable").get()?t.state("ampEnabled").set(!t.state("ampEnabled").get()):i.tooltipVisible.set(!0)})),s.on("mouseenter",(function(){t.state("ampAvailable").get()||i.tooltipVisible.set(!0),i.tooltipFocused.set(i.tooltipFocused.get()+1)})),s.on("mouseleave",(function(){i.tooltipFocused.set(i.tooltipFocused.get()-1)})),r.on("focus",(function(){t.state("ampAvailable").get()||i.tooltipVisible.set(!0),i.tooltipFocused.set(i.tooltipFocused.get()+1)})),r.on("blur",(function(){i.tooltipFocused.set(i.tooltipFocused.get()-1)}))}};return i}(wp.customize,jQuery)})();PK.3Y�.!gg5bunyad-amp/assets/js/amp-customize-controls.asset.php<?php return array('dependencies' => array('lodash', 'wp-i18n'), 'version' => 'a0e5e200caed2b3076b9');
PK.3Ye�^�66.bunyad-amp/assets/js/amp-customize-controls.js(()=>{"use strict";const e=window.lodash,t=window.wp.i18n;window.ampCustomizeControls=function(n,i){const o={nonAmpCustomizerLink:null,data:{queryVar:"",l10n:{ampVersionNotice:"",rootPanelDescription:""},optionSettings:[],activeThemeSettingImports:{},mimeTypeIcons:{image:"",document:""}},boot:function(e){o.data=e,o.updatePreviewNotice(),o.extendRootDescription(),i.ajaxPrefilter(o.injectAmpIntoAjaxRequests),n.bind("ready",o.updateNonAmpCustomizeLink),n.bind("ready",o.forceAmpPreviewUrl),n.bind("ready",o.addOptionSettingNotices),n.bind("ready",o.addNavMenuPanelNotice),n.bind("ready",o.addActiveThemeSettingsImporting)},updatePreviewNotice:function(){const e=i("#customize-info .preview-notice");e.html(o.data.l10n.ampVersionNotice),o.nonAmpCustomizerLink=e.find("a[href]")[0]},updateNonAmpCustomizeLink:function(){if(!(o.nonAmpCustomizerLink instanceof HTMLAnchorElement))return;const e=()=>{const e=new URL(n.previewer.previewUrl());e.searchParams.delete(o.data.queryVar);const t=new URL(o.nonAmpCustomizerLink.href);t.searchParams.set("url",e),o.nonAmpCustomizerLink.href=t.href};e(),n.previewer.previewUrl.bind(e)},extendRootDescription:function(){const e=i("#customize-info .customize-panel-description");if(0===e.find("p").length){const t=i("<p></p>");t.html(e.html()),e.html(""),e.append(t)}const t=i("<p>"+o.data.l10n.rootPanelDescription+"</p>");e.append(t)}},a=["background_position","background_size","background_repeat","background_attachment"],r={display_header_text:"blank",background_attachment:"fixed",background_repeat:"no-repeat"},s={accent_hue_active:["accent_hue"]};function c(e){for(const t of e)t.id in o.data.activeThemeSettingImports&&t.set(o.data.activeThemeSettingImports[t.id])}const d=n.Section.extend({isContextuallyActive:()=>!0,expand(){},otherSections(){const e=[];return n.section.each((t=>{t.id!==this.id&&e.push(t)})),e.sort(((e,t)=>e.priority()-t.priority())),e},renderDetails(){const e=this.headContainer.find("dl");for(const n of this.otherSections()){const o=[];for(const e of n.controls())this.params.controls.has(e)&&o.push(e);if(!o.length)continue;let a;a="menu_locations"===n.id?(0,t.__)("Menu Locations","amp"):n.params.title;const r=i("<dt></dt>");r.text(a),e.append(r);for(const t of o){const n=i("<dd></dd>"),o=`amp-import-${t.id}`,a=i("<input type=checkbox checked>");a.attr("id",o),a.val(t.id);const r=i("<label></label>");r.attr("for",o),r.html(t.params.label),n.append(a),n.append(r),e.append(n)}}},attachEvents(){this.headContainer.find("button").on("click",(()=>{this.importSelectedSettings()}))},importSelectedSettings(){const e=this;let t=0;e.headContainer.find("input[type=checkbox]").each((function(){const e=i(this);e.prop("checked")?(function(e){if(a.includes(e.id)){const e=n("background_preset");e&&e.set("custom")}e.id in r?function(e){e.id in r&&"element"in e&&e.setting.id in o.data.activeThemeSettingImports&&e.element.set(r[e.id]!==o.data.activeThemeSettingImports[e.setting.id])}(e):c(Object.values(e.settings)),function(e){if(e.id in s){const t=[];for(const i of s[e.id]){const e=n(i);e&&t.push(e)}c(t)}}(e),e.extended(n.UploadControl)?function(e){const t=e.setting();if(!t||e.params.attachment&&e.params.attachment.url===t)return;const i=new URL(t),a=["jpg","png","gif","bmp"].includes(i.pathname.substr(-3))?"image":"document",r={id:1,url:i.href,type:a,icon:o.data.mimeTypeIcons[a],title:(s=i.pathname,decodeURIComponent(encodeURIComponent(s).replace(/%(2F|5C)/g,"/").replace(/^.*\//,"")))};var s;"image"===a&&(r.sizes={full:{url:i.href}}),e.frame||e.initFrame(),e.frame.state()||e.frame.setState("library"),e.frame.state().get("selection").set([r]),e.extended(n.BackgroundControl)?n.UploadControl.prototype.select.call(e):e.select(),e.renderContent()}(e):e.extended(n.HeaderControl)&&function(e){const t=n("header_image_data").get();t&&e.setImageFromURL(t.url,t.attachment_id,t.width,t.height)}(e)}(n.control(e.val())),e.closest("dd").remove()):t++})),e.headContainer.find("dt").each((function(){const e=i(this);e.next("dd").length||e.remove()})),0===t&&e.active(!1)},ready(){n.Section.prototype.ready.call(this),this.renderDetails()}});return n.sectionConstructor.amp_active_theme_settings_import=d,o.addActiveThemeSettingsImporting=function(){const i=new Set;for(const[t,a]of Object.entries(o.data.activeThemeSettingImports)){const o=n(t);o&&!(0,e.isEqual)(o(),a)&&i.add(t)}if(0===i.size)return;const a=new Set;if(n.control.each((e=>{for(const t of Object.values(e.settings))e.params.label&&(i.has(t.id)||e.id in s&&s[e.id].find((e=>i.has(e))))&&a.add(e)})),0===a.size)return;const r=new d("amp_settings_import",{title:(0,t.__)("Primary Theme Settings","amp"),priority:-1,controls:a});n.section.add(r)},o.injectAmpIntoAjaxRequests=function(e){const t=new URL(e.url,window.location.href);t.searchParams.has(o.data.queryVar)||(t.searchParams.append(o.data.queryVar,"1"),e.url=t.href)},o.forceAmpPreviewUrl=function(){var e;n.previewer.previewUrl.validate=(e=n.previewer.previewUrl.validate,function(t){let n=e.call(this,t);if(n){const e=new URL(n);e.searchParams.has(o.data.queryVar)||(e.searchParams.append(o.data.queryVar,"1"),n=e.href)}return n})},o.addOptionSettingNotices=function(){for(const e of o.data.optionSettings)n(e,(e=>{const i=new n.Notification("amp_option_setting",{type:"info",message:(0,t.__)("Also applies to non-AMP version of your site.","amp")});e.notifications.add(i.code,i)}))},o.addNavMenuPanelNotice=function(){n.panel("nav_menus",(e=>{e.notifications.container.length||(e.notifications.container=i('<div class="customize-control-notifications-container"></div>'),e.container.find(".panel-meta:first").append(e.notifications.container));const o=new n.Notification("amp_version",{type:"info",message:(0,t.__)("The menus here are shared with the non-AMP version of your site. Assign existing menus to menu locations in the Reader theme or create new AMP-specific menus.","amp")});e.notifications.add(o.code,o)}))},o}(wp.customize,jQuery)})();PK.3Y��$TT;bunyad-amp/assets/js/amp-customize-preview-legacy.asset.php<?php return array('dependencies' => array(), 'version' => '3a7dbe299cdcf4cabfd6');
PK.3Y�ij��4bunyad-amp/assets/js/amp-customize-preview-legacy.jswindow.ampCustomizePreview=function(e){"use strict";return{boot:function(i){e.bind("preview-ready",(function(){e.preview.bind("active",(function(){e.preview.send("amp-status",i)}))}))}}}(wp.customize);PK.3Y!�u�TTCbunyad-amp/assets/js/amp-customizer-design-preview-legacy.asset.php<?php return array('dependencies' => array(), 'version' => 'e0622116543e409e9f46');
PK.3Y pKd��<bunyad-amp/assets/js/amp-customizer-design-preview-legacy.js!function(o){"use strict";wp.customize("amp_customizer[header_color]",(function(e){e.bind((function(e){o(".amp-wp-header a").css("color",e),o(".amp-wp-header div").css("color",e),o(".amp-wp-header .amp-wp-site-icon").css("border-color",e).css("background-color",e)}))})),wp.customize("amp_customizer[header_background_color]",(function(e){e.bind((function(e){o("html, .amp-wp-header").css("background-color",e),o(".amp-wp-article a, .amp-wp-article a:visited, .amp-wp-footer a, .amp-wp-footer a:visited").css("color",e),o("blockquote, .amp-wp-byline amp-img").css("border-color",e)}))})),wp.customize("amp_customizer[color_scheme]",(function(e){e.bind((function(e){var c=amp_customizer_design.color_schemes[e];c?(o("body").css("background-color",c.theme_color),o("body, a:hover, a:active, a:focus, blockquote, .amp-wp-article, .amp-wp-title").css("color",c.text_color),o(".amp-wp-meta, .wp-caption .wp-caption-text, .amp-wp-tax-category, .amp-wp-tax-tag, .amp-wp-footer p").css("color",c.muted_text_color),o(".wp-caption .wp-caption-text, .amp-wp-comments-link a, .amp-wp-footer").css("border-color",c.border_color),o(".amp-wp-iframe-placeholder, amp-carousel, amp-iframe, amp-youtube, amp-instagram, amp-vine").css("background-color",c.border_color)):console.error('Selected color scheme "%s" not registered.',e)}))})),wp.customize("blogname",(function(e){e.bind((function(e){o(".amp-wp-header .amp-site-title, .amp-wp-footer h2").text(e)}))}))}(jQuery);PK.3YYb��4bunyad-amp/assets/js/amp-onboarding-wizard.asset.php<?php return array('dependencies' => array('wp-api-fetch', 'wp-dom-ready', 'wp-html-entities', 'wp-i18n', 'wp-url'), 'version' => 'a9c48e50976bbd650cdb');
PK.3YC�D��A�A-bunyad-amp/assets/js/amp-onboarding-wizard.js(()=>{var e,t,n={184:(e,t)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e=[],t=0;t<arguments.length;t++){var n=arguments[t];if(n){var a=typeof n;if("string"===a||"number"===a)e.push(n);else if(Array.isArray(n)){if(n.length){var i=o.apply(null,n);i&&e.push(i)}}else if("object"===a){if(n.toString!==Object.prototype.toString&&!n.toString.toString().includes("[native code]")){e.push(n.toString());continue}for(var l in n)r.call(n,l)&&n[l]&&e.push(l)}}}return e.join(" ")}e.exports?(o.default=o,e.exports=o):void 0===(n=function(){return o}.apply(t,[]))||(e.exports=n)}()},152:function(e){var t;t=function(){return function(){var e={686:function(e,t,n){"use strict";n.d(t,{default:function(){return E}});var r=n(279),o=n.n(r),a=n(370),i=n.n(a),l=n(817),s=n.n(l);function u(e){try{return document.execCommand(e)}catch(e){return!1}}var c=function(e){var t=s()(e);return u("cut"),t},d=function(e,t){var n=function(e){var t="rtl"===document.documentElement.getAttribute("dir"),n=document.createElement("textarea");n.style.fontSize="12pt",n.style.border="0",n.style.padding="0",n.style.margin="0",n.style.position="absolute",n.style[t?"right":"left"]="-9999px";var r=window.pageYOffset||document.documentElement.scrollTop;return n.style.top="".concat(r,"px"),n.setAttribute("readonly",""),n.value=e,n}(e);t.container.appendChild(n);var r=s()(n);return u("copy"),n.remove(),r},f=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{container:document.body},n="";return"string"==typeof e?n=d(e,t):e instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(null==e?void 0:e.type)?n=d(e.value,t):(n=s()(e),u("copy")),n};function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}function m(e){return m="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},m(e)}function h(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function g(e,t){return g=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},g(e,t)}function v(e){return v=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},v(e)}function y(e,t){var n="data-clipboard-".concat(e);if(t.hasAttribute(n))return t.getAttribute(n)}var b=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&g(e,t)}(s,e);var t,n,r,o,a,l=(o=s,a=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,t,n=v(o);if(a){var r=v(this).constructor;e=Reflect.construct(n,arguments,r)}else e=n.apply(this,arguments);return!(t=e)||"object"!==m(t)&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(this):t});function s(e,t){var n;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,s),(n=l.call(this)).resolveOptions(t),n.listenClick(e),n}return t=s,n=[{key:"resolveOptions",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof e.action?e.action:this.defaultAction,this.target="function"==typeof e.target?e.target:this.defaultTarget,this.text="function"==typeof e.text?e.text:this.defaultText,this.container="object"===m(e.container)?e.container:document.body}},{key:"listenClick",value:function(e){var t=this;this.listener=i()(e,"click",(function(e){return t.onClick(e)}))}},{key:"onClick",value:function(e){var t=e.delegateTarget||e.currentTarget,n=this.action(t)||"copy",r=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.action,n=void 0===t?"copy":t,r=e.container,o=e.target,a=e.text;if("copy"!==n&&"cut"!==n)throw new Error('Invalid "action" value, use either "copy" or "cut"');if(void 0!==o){if(!o||"object"!==p(o)||1!==o.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===n&&o.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===n&&(o.hasAttribute("readonly")||o.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes')}return a?f(a,{container:r}):o?"cut"===n?c(o):f(o,{container:r}):void 0}({action:n,container:this.container,target:this.target(t),text:this.text(t)});this.emit(r?"success":"error",{action:n,text:r,trigger:t,clearSelection:function(){t&&t.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(e){return y("action",e)}},{key:"defaultTarget",value:function(e){var t=y("target",e);if(t)return document.querySelector(t)}},{key:"defaultText",value:function(e){return y("text",e)}},{key:"destroy",value:function(){this.listener.destroy()}}],r=[{key:"copy",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{container:document.body};return f(e,t)}},{key:"cut",value:function(e){return c(e)}},{key:"isSupported",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],t="string"==typeof e?[e]:e,n=!!document.queryCommandSupported;return t.forEach((function(e){n=n&&!!document.queryCommandSupported(e)})),n}}],n&&h(t.prototype,n),r&&h(t,r),s}(o()),E=b},828:function(e){if("undefined"!=typeof Element&&!Element.prototype.matches){var t=Element.prototype;t.matches=t.matchesSelector||t.mozMatchesSelector||t.msMatchesSelector||t.oMatchesSelector||t.webkitMatchesSelector}e.exports=function(e,t){for(;e&&9!==e.nodeType;){if("function"==typeof e.matches&&e.matches(t))return e;e=e.parentNode}}},438:function(e,t,n){var r=n(828);function o(e,t,n,r,o){var i=a.apply(this,arguments);return e.addEventListener(n,i,o),{destroy:function(){e.removeEventListener(n,i,o)}}}function a(e,t,n,o){return function(n){n.delegateTarget=r(n.target,t),n.delegateTarget&&o.call(e,n)}}e.exports=function(e,t,n,r,a){return"function"==typeof e.addEventListener?o.apply(null,arguments):"function"==typeof n?o.bind(null,document).apply(null,arguments):("string"==typeof e&&(e=document.querySelectorAll(e)),Array.prototype.map.call(e,(function(e){return o(e,t,n,r,a)})))}},879:function(e,t){t.node=function(e){return void 0!==e&&e instanceof HTMLElement&&1===e.nodeType},t.nodeList=function(e){var n=Object.prototype.toString.call(e);return void 0!==e&&("[object NodeList]"===n||"[object HTMLCollection]"===n)&&"length"in e&&(0===e.length||t.node(e[0]))},t.string=function(e){return"string"==typeof e||e instanceof String},t.fn=function(e){return"[object Function]"===Object.prototype.toString.call(e)}},370:function(e,t,n){var r=n(879),o=n(438);e.exports=function(e,t,n){if(!e&&!t&&!n)throw new Error("Missing required arguments");if(!r.string(t))throw new TypeError("Second argument must be a String");if(!r.fn(n))throw new TypeError("Third argument must be a Function");if(r.node(e))return function(e,t,n){return e.addEventListener(t,n),{destroy:function(){e.removeEventListener(t,n)}}}(e,t,n);if(r.nodeList(e))return function(e,t,n){return Array.prototype.forEach.call(e,(function(e){e.addEventListener(t,n)})),{destroy:function(){Array.prototype.forEach.call(e,(function(e){e.removeEventListener(t,n)}))}}}(e,t,n);if(r.string(e))return function(e,t,n){return o(document.body,e,t,n)}(e,t,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}},817:function(e){e.exports=function(e){var t;if("SELECT"===e.nodeName)e.focus(),t=e.value;else if("INPUT"===e.nodeName||"TEXTAREA"===e.nodeName){var n=e.hasAttribute("readonly");n||e.setAttribute("readonly",""),e.select(),e.setSelectionRange(0,e.value.length),n||e.removeAttribute("readonly"),t=e.value}else{e.hasAttribute("contenteditable")&&e.focus();var r=window.getSelection(),o=document.createRange();o.selectNodeContents(e),r.removeAllRanges(),r.addRange(o),t=r.toString()}return t}},279:function(e){function t(){}t.prototype={on:function(e,t,n){var r=this.e||(this.e={});return(r[e]||(r[e]=[])).push({fn:t,ctx:n}),this},once:function(e,t,n){var r=this;function o(){r.off(e,o),t.apply(n,arguments)}return o._=t,this.on(e,o,n)},emit:function(e){for(var t=[].slice.call(arguments,1),n=((this.e||(this.e={}))[e]||[]).slice(),r=0,o=n.length;r<o;r++)n[r].fn.apply(n[r].ctx,t);return this},off:function(e,t){var n=this.e||(this.e={}),r=n[e],o=[];if(r&&t)for(var a=0,i=r.length;a<i;a++)r[a].fn!==t&&r[a].fn._!==t&&o.push(r[a]);return o.length?n[e]=o:delete n[e],this}},e.exports=t,e.exports.TinyEmitter=t}},t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={exports:{}};return e[r](o,o.exports,n),o.exports}return n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n(686)}().default},e.exports=t()},996:e=>{"use strict";var t=function(e){return function(e){return!!e&&"object"==typeof e}(e)&&!function(e){var t=Object.prototype.toString.call(e);return"[object RegExp]"===t||"[object Date]"===t||function(e){return e.$$typeof===n}(e)}(e)},n="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103;function r(e,t){return!1!==t.clone&&t.isMergeableObject(e)?l((n=e,Array.isArray(n)?[]:{}),e,t):e;var n}function o(e,t,n){return e.concat(t).map((function(e){return r(e,n)}))}function a(e){return Object.keys(e).concat(function(e){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e).filter((function(t){return Object.propertyIsEnumerable.call(e,t)})):[]}(e))}function i(e,t){try{return t in e}catch(e){return!1}}function l(e,n,s){(s=s||{}).arrayMerge=s.arrayMerge||o,s.isMergeableObject=s.isMergeableObject||t,s.cloneUnlessOtherwiseSpecified=r;var u=Array.isArray(n);return u===Array.isArray(e)?u?s.arrayMerge(e,n,s):function(e,t,n){var o={};return n.isMergeableObject(e)&&a(e).forEach((function(t){o[t]=r(e[t],n)})),a(t).forEach((function(a){(function(e,t){return i(e,t)&&!(Object.hasOwnProperty.call(e,t)&&Object.propertyIsEnumerable.call(e,t))})(e,a)||(i(e,a)&&n.isMergeableObject(t[a])?o[a]=function(e,t){if(!t.customMerge)return l;var n=t.customMerge(e);return"function"==typeof n?n:l}(a,n)(e[a],t[a],n):o[a]=r(t[a],n))})),o}(e,n,s):r(n,s)}l.all=function(e,t){if(!Array.isArray(e))throw new Error("first argument should be an array");return e.reduce((function(e,n){return l(e,n,t)}),{})};var s=l;e.exports=s},991:e=>{"use strict";e.exports=function e(t,n){if(t===n)return!0;if(t&&n&&"object"==typeof t&&"object"==typeof n){if(t.constructor!==n.constructor)return!1;var r,o,a;if(Array.isArray(t)){if((r=t.length)!=n.length)return!1;for(o=r;0!=o--;)if(!e(t[o],n[o]))return!1;return!0}if(t instanceof Map&&n instanceof Map){if(t.size!==n.size)return!1;for(o of t.entries())if(!n.has(o[0]))return!1;for(o of t.entries())if(!e(o[1],n.get(o[0])))return!1;return!0}if(t instanceof Set&&n instanceof Set){if(t.size!==n.size)return!1;for(o of t.entries())if(!n.has(o[0]))return!1;return!0}if(ArrayBuffer.isView(t)&&ArrayBuffer.isView(n)){if((r=t.length)!=n.length)return!1;for(o=r;0!=o--;)if(t[o]!==n[o])return!1;return!0}if(t.constructor===RegExp)return t.source===n.source&&t.flags===n.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===n.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===n.toString();if((r=(a=Object.keys(t)).length)!==Object.keys(n).length)return!1;for(o=r;0!=o--;)if(!Object.prototype.hasOwnProperty.call(n,a[o]))return!1;for(o=r;0!=o--;){var i=a[o];if(!e(t[i],n[i]))return!1}return!0}return t!=t&&n!=n}},679:(e,t,n)=>{"use strict";var r=n(296),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||o}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var o=p(n);o&&o!==m&&e(t,o,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),h=s(n),g=0;g<i.length;++g){var v=i[g];if(!(a[v]||r&&r[v]||h&&h[v]||l&&l[v])){var y=f(n,v);try{u(t,v,y)}catch(e){}}}}return t}},103:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,a=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,l=n?Symbol.for("react.profiler"):60114,s=n?Symbol.for("react.provider"):60109,u=n?Symbol.for("react.context"):60110,c=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,f=n?Symbol.for("react.forward_ref"):60112,p=n?Symbol.for("react.suspense"):60113,m=n?Symbol.for("react.suspense_list"):60120,h=n?Symbol.for("react.memo"):60115,g=n?Symbol.for("react.lazy"):60116,v=n?Symbol.for("react.block"):60121,y=n?Symbol.for("react.fundamental"):60117,b=n?Symbol.for("react.responder"):60118,E=n?Symbol.for("react.scope"):60119;function k(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case c:case d:case a:case l:case i:case p:return e;default:switch(e=e&&e.$$typeof){case u:case f:case g:case h:case s:return e;default:return t}}case o:return t}}}function w(e){return k(e)===d}t.AsyncMode=c,t.ConcurrentMode=d,t.ContextConsumer=u,t.ContextProvider=s,t.Element=r,t.ForwardRef=f,t.Fragment=a,t.Lazy=g,t.Memo=h,t.Portal=o,t.Profiler=l,t.StrictMode=i,t.Suspense=p,t.isAsyncMode=function(e){return w(e)||k(e)===c},t.isConcurrentMode=w,t.isContextConsumer=function(e){return k(e)===u},t.isContextProvider=function(e){return k(e)===s},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return k(e)===f},t.isFragment=function(e){return k(e)===a},t.isLazy=function(e){return k(e)===g},t.isMemo=function(e){return k(e)===h},t.isPortal=function(e){return k(e)===o},t.isProfiler=function(e){return k(e)===l},t.isStrictMode=function(e){return k(e)===i},t.isSuspense=function(e){return k(e)===p},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===d||e===l||e===i||e===p||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===g||e.$$typeof===h||e.$$typeof===s||e.$$typeof===u||e.$$typeof===f||e.$$typeof===y||e.$$typeof===b||e.$$typeof===E||e.$$typeof===v)},t.typeOf=k},296:(e,t,n)=>{"use strict";e.exports=n(103)},703:(e,t,n)=>{"use strict";var r=n(414);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},697:(e,t,n)=>{e.exports=n(703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},448:(e,t,n)=>{"use strict";var r=n(294),o=n(840);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var i=new Set,l={};function s(e,t){u(e,t),u(e+"Capture",t)}function u(e,t){for(l[e]=t,e=0;e<t.length;e++)i.add(t[e])}var c=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),d=Object.prototype.hasOwnProperty,f=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,p={},m={};function h(e,t,n,r,o,a,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=a,this.removeEmptyString=i}var g={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){g[e]=new h(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];g[t]=new h(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){g[e]=new h(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){g[e]=new h(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){g[e]=new h(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){g[e]=new h(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){g[e]=new h(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){g[e]=new h(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){g[e]=new h(e,5,!1,e.toLowerCase(),null,!1,!1)}));var v=/[\-:]([a-z])/g;function y(e){return e[1].toUpperCase()}function b(e,t,n,r){var o=g.hasOwnProperty(t)?g[t]:null;(null!==o?0!==o.type:r||!(2<t.length)||"o"!==t[0]&&"O"!==t[0]||"n"!==t[1]&&"N"!==t[1])&&(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,o,r)&&(n=null),r||null===o?function(e){return!!d.call(m,e)||!d.call(p,e)&&(f.test(e)?m[e]=!0:(p[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&"":n:(t=o.attributeName,r=o.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(o=o.type)||4===o&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(v,y);g[t]=new h(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(v,y);g[t]=new h(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(v,y);g[t]=new h(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){g[e]=new h(e,1,!1,e.toLowerCase(),null,!1,!1)})),g.xlinkHref=new h("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){g[e]=new h(e,1,!1,e.toLowerCase(),null,!0,!0)}));var E=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,k=Symbol.for("react.element"),w=Symbol.for("react.portal"),C=Symbol.for("react.fragment"),x=Symbol.for("react.strict_mode"),S=Symbol.for("react.profiler"),_=Symbol.for("react.provider"),L=Symbol.for("react.context"),M=Symbol.for("react.forward_ref"),P=Symbol.for("react.suspense"),T=Symbol.for("react.suspense_list"),N=Symbol.for("react.memo"),O=Symbol.for("react.lazy");Symbol.for("react.scope"),Symbol.for("react.debug_trace_mode");var A=Symbol.for("react.offscreen");Symbol.for("react.legacy_hidden"),Symbol.for("react.cache"),Symbol.for("react.tracing_marker");var R=Symbol.iterator;function j(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=R&&e[R]||e["@@iterator"])?e:null}var F,z=Object.assign;function I(e){if(void 0===F)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);F=t&&t[1]||""}return"\n"+F+e}var H=!1;function B(e,t){if(!e||H)return"";H=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(e){var r=e}Reflect.construct(e,[],t)}else{try{t.call()}catch(e){r=e}e.call(t.prototype)}else{try{throw Error()}catch(e){r=e}e()}}catch(t){if(t&&r&&"string"==typeof t.stack){for(var o=t.stack.split("\n"),a=r.stack.split("\n"),i=o.length-1,l=a.length-1;1<=i&&0<=l&&o[i]!==a[l];)l--;for(;1<=i&&0<=l;i--,l--)if(o[i]!==a[l]){if(1!==i||1!==l)do{if(i--,0>--l||o[i]!==a[l]){var s="\n"+o[i].replace(" at new "," at ");return e.displayName&&s.includes("<anonymous>")&&(s=s.replace("<anonymous>",e.displayName)),s}}while(1<=i&&0<=l);break}}}finally{H=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?I(e):""}function D(e){switch(e.tag){case 5:return I(e.type);case 16:return I("Lazy");case 13:return I("Suspense");case 19:return I("SuspenseList");case 0:case 2:case 15:return B(e.type,!1);case 11:return B(e.type.render,!1);case 1:return B(e.type,!0);default:return""}}function W(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case C:return"Fragment";case w:return"Portal";case S:return"Profiler";case x:return"StrictMode";case P:return"Suspense";case T:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case L:return(e.displayName||"Context")+".Consumer";case _:return(e._context.displayName||"Context")+".Provider";case M:var t=e.render;return(e=e.displayName)||(e=""!==(e=t.displayName||t.name||"")?"ForwardRef("+e+")":"ForwardRef"),e;case N:return null!==(t=e.displayName||null)?t:W(e.type)||"Memo";case O:t=e._payload,e=e._init;try{return W(e(t))}catch(e){}}return null}function $(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=(e=t.render).displayName||e.name||"",t.displayName||(""!==e?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return W(t);case 8:return t===x?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if("function"==typeof t)return t.displayName||t.name||null;if("string"==typeof t)return t}return null}function U(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":case"object":return e;default:return""}}function V(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function Z(e){e._valueTracker||(e._valueTracker=function(e){var t=V(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var o=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function q(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=V(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function Q(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function G(e,t){var n=t.checked;return z({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function Y(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=U(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function K(e,t){null!=(t=t.checked)&&b(e,"checked",t,!1)}function X(e,t){K(e,t);var n=U(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?ee(e,t.type,n):t.hasOwnProperty("defaultValue")&&ee(e,t.type,U(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function J(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function ee(e,t,n){"number"===t&&Q(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var te=Array.isArray;function ne(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+U(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function re(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(a(91));return z({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function oe(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(a(92));if(te(n)){if(1<n.length)throw Error(a(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:U(n)}}function ae(e,t){var n=U(t.value),r=U(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function ie(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}function le(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function se(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?le(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var ue,ce,de=(ce=function(e,t){if("http://www.w3.org/2000/svg"!==e.namespaceURI||"innerHTML"in e)e.innerHTML=t;else{for((ue=ue||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=ue.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return ce(e,t)}))}:ce);function fe(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var pe={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},me=["Webkit","ms","Moz","O"];function he(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||pe.hasOwnProperty(e)&&pe[e]?(""+t).trim():t+"px"}function ge(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),o=he(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}Object.keys(pe).forEach((function(e){me.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),pe[t]=pe[e]}))}));var ve=z({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ye(e,t){if(t){if(ve[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(a(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(a(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(a(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(a(62))}}function be(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Ee=null;function ke(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var we=null,Ce=null,xe=null;function Se(e){if(e=ko(e)){if("function"!=typeof we)throw Error(a(280));var t=e.stateNode;t&&(t=Co(t),we(e.stateNode,e.type,t))}}function _e(e){Ce?xe?xe.push(e):xe=[e]:Ce=e}function Le(){if(Ce){var e=Ce,t=xe;if(xe=Ce=null,Se(e),t)for(e=0;e<t.length;e++)Se(t[e])}}function Me(e,t){return e(t)}function Pe(){}var Te=!1;function Ne(e,t,n){if(Te)return e(t,n);Te=!0;try{return Me(e,t,n)}finally{Te=!1,(null!==Ce||null!==xe)&&(Pe(),Le())}}function Oe(e,t){var n=e.stateNode;if(null===n)return null;var r=Co(n);if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(a(231,t,typeof n));return n}var Ae=!1;if(c)try{var Re={};Object.defineProperty(Re,"passive",{get:function(){Ae=!0}}),window.addEventListener("test",Re,Re),window.removeEventListener("test",Re,Re)}catch(ce){Ae=!1}function je(e,t,n,r,o,a,i,l,s){var u=Array.prototype.slice.call(arguments,3);try{t.apply(n,u)}catch(e){this.onError(e)}}var Fe=!1,ze=null,Ie=!1,He=null,Be={onError:function(e){Fe=!0,ze=e}};function De(e,t,n,r,o,a,i,l,s){Fe=!1,ze=null,je.apply(Be,arguments)}function We(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(4098&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function $e(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&null!==(e=e.alternate)&&(t=e.memoizedState),null!==t)return t.dehydrated}return null}function Ue(e){if(We(e)!==e)throw Error(a(188))}function Ve(e){return null!==(e=function(e){var t=e.alternate;if(!t){if(null===(t=We(e)))throw Error(a(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var i=o.alternate;if(null===i){if(null!==(r=o.return)){n=r;continue}break}if(o.child===i.child){for(i=o.child;i;){if(i===n)return Ue(o),e;if(i===r)return Ue(o),t;i=i.sibling}throw Error(a(188))}if(n.return!==r.return)n=o,r=i;else{for(var l=!1,s=o.child;s;){if(s===n){l=!0,n=o,r=i;break}if(s===r){l=!0,r=o,n=i;break}s=s.sibling}if(!l){for(s=i.child;s;){if(s===n){l=!0,n=i,r=o;break}if(s===r){l=!0,r=i,n=o;break}s=s.sibling}if(!l)throw Error(a(189))}}if(n.alternate!==r)throw Error(a(190))}if(3!==n.tag)throw Error(a(188));return n.stateNode.current===n?e:t}(e))?Ze(e):null}function Ze(e){if(5===e.tag||6===e.tag)return e;for(e=e.child;null!==e;){var t=Ze(e);if(null!==t)return t;e=e.sibling}return null}var qe=o.unstable_scheduleCallback,Qe=o.unstable_cancelCallback,Ge=o.unstable_shouldYield,Ye=o.unstable_requestPaint,Ke=o.unstable_now,Xe=o.unstable_getCurrentPriorityLevel,Je=o.unstable_ImmediatePriority,et=o.unstable_UserBlockingPriority,tt=o.unstable_NormalPriority,nt=o.unstable_LowPriority,rt=o.unstable_IdlePriority,ot=null,at=null,it=Math.clz32?Math.clz32:function(e){return 0===(e>>>=0)?32:31-(lt(e)/st|0)|0},lt=Math.log,st=Math.LN2,ut=64,ct=4194304;function dt(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194240&e;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return 130023424&e;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function ft(e,t){var n=e.pendingLanes;if(0===n)return 0;var r=0,o=e.suspendedLanes,a=e.pingedLanes,i=268435455&n;if(0!==i){var l=i&~o;0!==l?r=dt(l):0!=(a&=i)&&(r=dt(a))}else 0!=(i=n&~o)?r=dt(i):0!==a&&(r=dt(a));if(0===r)return 0;if(0!==t&&t!==r&&0==(t&o)&&((o=r&-r)>=(a=t&-t)||16===o&&0!=(4194240&a)))return t;if(0!=(4&r)&&(r|=16&n),0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)o=1<<(n=31-it(t)),r|=e[n],t&=~o;return r}function pt(e,t){switch(e){case 1:case 2:case 4:return t+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;default:return-1}}function mt(e){return 0!=(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function ht(){var e=ut;return 0==(4194240&(ut<<=1))&&(ut=64),e}function gt(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function vt(e,t,n){e.pendingLanes|=t,536870912!==t&&(e.suspendedLanes=0,e.pingedLanes=0),(e=e.eventTimes)[t=31-it(t)]=n}function yt(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var r=31-it(n),o=1<<r;o&t|e[r]&t&&(e[r]|=t),n&=~o}}var bt=0;function Et(e){return 1<(e&=-e)?4<e?0!=(268435455&e)?16:536870912:4:1}var kt,wt,Ct,xt,St,_t=!1,Lt=[],Mt=null,Pt=null,Tt=null,Nt=new Map,Ot=new Map,At=[],Rt="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function jt(e,t){switch(e){case"focusin":case"focusout":Mt=null;break;case"dragenter":case"dragleave":Pt=null;break;case"mouseover":case"mouseout":Tt=null;break;case"pointerover":case"pointerout":Nt.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":Ot.delete(t.pointerId)}}function Ft(e,t,n,r,o,a){return null===e||e.nativeEvent!==a?(e={blockedOn:t,domEventName:n,eventSystemFlags:r,nativeEvent:a,targetContainers:[o]},null!==t&&null!==(t=ko(t))&&wt(t),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function zt(e){var t=Eo(e.target);if(null!==t){var n=We(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=$e(n)))return e.blockedOn=t,void St(e.priority,(function(){Ct(n)}))}else if(3===t&&n.stateNode.current.memoizedState.isDehydrated)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function It(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Gt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=ko(n))&&wt(t),e.blockedOn=n,!1;var r=new(n=e.nativeEvent).constructor(n.type,n);Ee=r,n.target.dispatchEvent(r),Ee=null,t.shift()}return!0}function Ht(e,t,n){It(e)&&n.delete(t)}function Bt(){_t=!1,null!==Mt&&It(Mt)&&(Mt=null),null!==Pt&&It(Pt)&&(Pt=null),null!==Tt&&It(Tt)&&(Tt=null),Nt.forEach(Ht),Ot.forEach(Ht)}function Dt(e,t){e.blockedOn===t&&(e.blockedOn=null,_t||(_t=!0,o.unstable_scheduleCallback(o.unstable_NormalPriority,Bt)))}function Wt(e){function t(t){return Dt(t,e)}if(0<Lt.length){Dt(Lt[0],e);for(var n=1;n<Lt.length;n++){var r=Lt[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==Mt&&Dt(Mt,e),null!==Pt&&Dt(Pt,e),null!==Tt&&Dt(Tt,e),Nt.forEach(t),Ot.forEach(t),n=0;n<At.length;n++)(r=At[n]).blockedOn===e&&(r.blockedOn=null);for(;0<At.length&&null===(n=At[0]).blockedOn;)zt(n),null===n.blockedOn&&At.shift()}var $t=E.ReactCurrentBatchConfig,Ut=!0;function Vt(e,t,n,r){var o=bt,a=$t.transition;$t.transition=null;try{bt=1,qt(e,t,n,r)}finally{bt=o,$t.transition=a}}function Zt(e,t,n,r){var o=bt,a=$t.transition;$t.transition=null;try{bt=4,qt(e,t,n,r)}finally{bt=o,$t.transition=a}}function qt(e,t,n,r){if(Ut){var o=Gt(e,t,n,r);if(null===o)Vr(e,t,r,Qt,n),jt(e,r);else if(function(e,t,n,r,o){switch(t){case"focusin":return Mt=Ft(Mt,e,t,n,r,o),!0;case"dragenter":return Pt=Ft(Pt,e,t,n,r,o),!0;case"mouseover":return Tt=Ft(Tt,e,t,n,r,o),!0;case"pointerover":var a=o.pointerId;return Nt.set(a,Ft(Nt.get(a)||null,e,t,n,r,o)),!0;case"gotpointercapture":return a=o.pointerId,Ot.set(a,Ft(Ot.get(a)||null,e,t,n,r,o)),!0}return!1}(o,e,t,n,r))r.stopPropagation();else if(jt(e,r),4&t&&-1<Rt.indexOf(e)){for(;null!==o;){var a=ko(o);if(null!==a&&kt(a),null===(a=Gt(e,t,n,r))&&Vr(e,t,r,Qt,n),a===o)break;o=a}null!==o&&r.stopPropagation()}else Vr(e,t,r,null,n)}}var Qt=null;function Gt(e,t,n,r){if(Qt=null,null!==(e=Eo(e=ke(r))))if(null===(t=We(e)))e=null;else if(13===(n=t.tag)){if(null!==(e=$e(t)))return e;e=null}else if(3===n){if(t.stateNode.current.memoizedState.isDehydrated)return 3===t.tag?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null);return Qt=e,null}function Yt(e){switch(e){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(Xe()){case Je:return 1;case et:return 4;case tt:case nt:return 16;case rt:return 536870912;default:return 16}default:return 16}}var Kt=null,Xt=null,Jt=null;function en(){if(Jt)return Jt;var e,t,n=Xt,r=n.length,o="value"in Kt?Kt.value:Kt.textContent,a=o.length;for(e=0;e<r&&n[e]===o[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===o[a-t];t++);return Jt=o.slice(e,1<t?1-t:void 0)}function tn(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function nn(){return!0}function rn(){return!1}function on(e){function t(t,n,r,o,a){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?nn:rn,this.isPropagationStopped=rn,this}return z(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=nn)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=nn)},persist:function(){},isPersistent:nn}),t}var an,ln,sn,un={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},cn=on(un),dn=z({},un,{view:0,detail:0}),fn=on(dn),pn=z({},dn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Sn,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==sn&&(sn&&"mousemove"===e.type?(an=e.screenX-sn.screenX,ln=e.screenY-sn.screenY):ln=an=0,sn=e),an)},movementY:function(e){return"movementY"in e?e.movementY:ln}}),mn=on(pn),hn=on(z({},pn,{dataTransfer:0})),gn=on(z({},dn,{relatedTarget:0})),vn=on(z({},un,{animationName:0,elapsedTime:0,pseudoElement:0})),yn=z({},un,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),bn=on(yn),En=on(z({},un,{data:0})),kn={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},wn={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},Cn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function xn(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=Cn[e])&&!!t[e]}function Sn(){return xn}var Ln=z({},dn,{key:function(e){if(e.key){var t=kn[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=tn(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?wn[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Sn,charCode:function(e){return"keypress"===e.type?tn(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?tn(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Mn=on(Ln),Pn=on(z({},pn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),Tn=on(z({},dn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Sn})),Nn=on(z({},un,{propertyName:0,elapsedTime:0,pseudoElement:0})),On=z({},pn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),An=on(On),Rn=[9,13,27,32],jn=c&&"CompositionEvent"in window,Fn=null;c&&"documentMode"in document&&(Fn=document.documentMode);var zn=c&&"TextEvent"in window&&!Fn,In=c&&(!jn||Fn&&8<Fn&&11>=Fn),Hn=String.fromCharCode(32),Bn=!1;function Dn(e,t){switch(e){case"keyup":return-1!==Rn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Wn(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var $n=!1,Un={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Vn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Un[e.type]:"textarea"===t}function Zn(e,t,n,r){_e(r),0<(t=qr(t,"onChange")).length&&(n=new cn("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var qn=null,Qn=null;function Gn(e){Hr(e,0)}function Yn(e){if(q(wo(e)))return e}function Kn(e,t){if("change"===e)return t}var Xn=!1;if(c){var Jn;if(c){var er="oninput"in document;if(!er){var tr=document.createElement("div");tr.setAttribute("oninput","return;"),er="function"==typeof tr.oninput}Jn=er}else Jn=!1;Xn=Jn&&(!document.documentMode||9<document.documentMode)}function nr(){qn&&(qn.detachEvent("onpropertychange",rr),Qn=qn=null)}function rr(e){if("value"===e.propertyName&&Yn(Qn)){var t=[];Zn(t,Qn,e,ke(e)),Ne(Gn,t)}}function or(e,t,n){"focusin"===e?(nr(),Qn=n,(qn=t).attachEvent("onpropertychange",rr)):"focusout"===e&&nr()}function ar(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Yn(Qn)}function ir(e,t){if("click"===e)return Yn(t)}function lr(e,t){if("input"===e||"change"===e)return Yn(t)}var sr="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t};function ur(e,t){if(sr(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++){var o=n[r];if(!d.call(t,o)||!sr(e[o],t[o]))return!1}return!0}function cr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function dr(e,t){var n,r=cr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=cr(r)}}function fr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?fr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function pr(){for(var e=window,t=Q();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(e){n=!1}if(!n)break;t=Q((e=t.contentWindow).document)}return t}function mr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}function hr(e){var t=pr(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&fr(n.ownerDocument.documentElement,n)){if(null!==r&&mr(n))if(t=r.start,void 0===(e=r.end)&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if((e=(t=n.ownerDocument||document)&&t.defaultView||window).getSelection){e=e.getSelection();var o=n.textContent.length,a=Math.min(r.start,o);r=void 0===r.end?a:Math.min(r.end,o),!e.extend&&a>r&&(o=r,r=a,a=o),o=dr(n,a);var i=dr(n,r);o&&i&&(1!==e.rangeCount||e.anchorNode!==o.node||e.anchorOffset!==o.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&((t=t.createRange()).setStart(o.node,o.offset),e.removeAllRanges(),a>r?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}for(t=[],e=n;e=e.parentNode;)1===e.nodeType&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for("function"==typeof n.focus&&n.focus(),n=0;n<t.length;n++)(e=t[n]).element.scrollLeft=e.left,e.element.scrollTop=e.top}}var gr=c&&"documentMode"in document&&11>=document.documentMode,vr=null,yr=null,br=null,Er=!1;function kr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;Er||null==vr||vr!==Q(r)||(r="selectionStart"in(r=vr)&&mr(r)?{start:r.selectionStart,end:r.selectionEnd}:{anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},br&&ur(br,r)||(br=r,0<(r=qr(yr,"onSelect")).length&&(t=new cn("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=vr)))}function wr(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var Cr={animationend:wr("Animation","AnimationEnd"),animationiteration:wr("Animation","AnimationIteration"),animationstart:wr("Animation","AnimationStart"),transitionend:wr("Transition","TransitionEnd")},xr={},Sr={};function _r(e){if(xr[e])return xr[e];if(!Cr[e])return e;var t,n=Cr[e];for(t in n)if(n.hasOwnProperty(t)&&t in Sr)return xr[e]=n[t];return e}c&&(Sr=document.createElement("div").style,"AnimationEvent"in window||(delete Cr.animationend.animation,delete Cr.animationiteration.animation,delete Cr.animationstart.animation),"TransitionEvent"in window||delete Cr.transitionend.transition);var Lr=_r("animationend"),Mr=_r("animationiteration"),Pr=_r("animationstart"),Tr=_r("transitionend"),Nr=new Map,Or="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function Ar(e,t){Nr.set(e,t),s(t,[e])}for(var Rr=0;Rr<Or.length;Rr++){var jr=Or[Rr];Ar(jr.toLowerCase(),"on"+(jr[0].toUpperCase()+jr.slice(1)))}Ar(Lr,"onAnimationEnd"),Ar(Mr,"onAnimationIteration"),Ar(Pr,"onAnimationStart"),Ar("dblclick","onDoubleClick"),Ar("focusin","onFocus"),Ar("focusout","onBlur"),Ar(Tr,"onTransitionEnd"),u("onMouseEnter",["mouseout","mouseover"]),u("onMouseLeave",["mouseout","mouseover"]),u("onPointerEnter",["pointerout","pointerover"]),u("onPointerLeave",["pointerout","pointerover"]),s("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),s("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),s("onBeforeInput",["compositionend","keypress","textInput","paste"]),s("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),s("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),s("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Fr="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),zr=new Set("cancel close invalid load scroll toggle".split(" ").concat(Fr));function Ir(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,o,i,l,s,u){if(De.apply(this,arguments),Fe){if(!Fe)throw Error(a(198));var c=ze;Fe=!1,ze=null,Ie||(Ie=!0,He=c)}}(r,t,void 0,e),e.currentTarget=null}function Hr(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var a=void 0;if(t)for(var i=r.length-1;0<=i;i--){var l=r[i],s=l.instance,u=l.currentTarget;if(l=l.listener,s!==a&&o.isPropagationStopped())break e;Ir(o,l,u),a=s}else for(i=0;i<r.length;i++){if(s=(l=r[i]).instance,u=l.currentTarget,l=l.listener,s!==a&&o.isPropagationStopped())break e;Ir(o,l,u),a=s}}}if(Ie)throw e=He,Ie=!1,He=null,e}function Br(e,t){var n=t[vo];void 0===n&&(n=t[vo]=new Set);var r=e+"__bubble";n.has(r)||(Ur(t,e,2,!1),n.add(r))}function Dr(e,t,n){var r=0;t&&(r|=4),Ur(n,e,r,t)}var Wr="_reactListening"+Math.random().toString(36).slice(2);function $r(e){if(!e[Wr]){e[Wr]=!0,i.forEach((function(t){"selectionchange"!==t&&(zr.has(t)||Dr(t,!1,e),Dr(t,!0,e))}));var t=9===e.nodeType?e:e.ownerDocument;null===t||t[Wr]||(t[Wr]=!0,Dr("selectionchange",!1,t))}}function Ur(e,t,n,r){switch(Yt(t)){case 1:var o=Vt;break;case 4:o=Zt;break;default:o=qt}n=o.bind(null,t,n,e),o=void 0,!Ae||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(o=!0),r?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function Vr(e,t,n,r,o){var a=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var l=r.stateNode.containerInfo;if(l===o||8===l.nodeType&&l.parentNode===o)break;if(4===i)for(i=r.return;null!==i;){var s=i.tag;if((3===s||4===s)&&((s=i.stateNode.containerInfo)===o||8===s.nodeType&&s.parentNode===o))return;i=i.return}for(;null!==l;){if(null===(i=Eo(l)))return;if(5===(s=i.tag)||6===s){r=a=i;continue e}l=l.parentNode}}r=r.return}Ne((function(){var r=a,o=ke(n),i=[];e:{var l=Nr.get(e);if(void 0!==l){var s=cn,u=e;switch(e){case"keypress":if(0===tn(n))break e;case"keydown":case"keyup":s=Mn;break;case"focusin":u="focus",s=gn;break;case"focusout":u="blur",s=gn;break;case"beforeblur":case"afterblur":s=gn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":s=mn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":s=hn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":s=Tn;break;case Lr:case Mr:case Pr:s=vn;break;case Tr:s=Nn;break;case"scroll":s=fn;break;case"wheel":s=An;break;case"copy":case"cut":case"paste":s=bn;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":s=Pn}var c=0!=(4&t),d=!c&&"scroll"===e,f=c?null!==l?l+"Capture":null:l;c=[];for(var p,m=r;null!==m;){var h=(p=m).stateNode;if(5===p.tag&&null!==h&&(p=h,null!==f&&null!=(h=Oe(m,f))&&c.push(Zr(m,h,p))),d)break;m=m.return}0<c.length&&(l=new s(l,u,null,n,o),i.push({event:l,listeners:c}))}}if(0==(7&t)){if(s="mouseout"===e||"pointerout"===e,(!(l="mouseover"===e||"pointerover"===e)||n===Ee||!(u=n.relatedTarget||n.fromElement)||!Eo(u)&&!u[go])&&(s||l)&&(l=o.window===o?o:(l=o.ownerDocument)?l.defaultView||l.parentWindow:window,s?(s=r,null!==(u=(u=n.relatedTarget||n.toElement)?Eo(u):null)&&(u!==(d=We(u))||5!==u.tag&&6!==u.tag)&&(u=null)):(s=null,u=r),s!==u)){if(c=mn,h="onMouseLeave",f="onMouseEnter",m="mouse","pointerout"!==e&&"pointerover"!==e||(c=Pn,h="onPointerLeave",f="onPointerEnter",m="pointer"),d=null==s?l:wo(s),p=null==u?l:wo(u),(l=new c(h,m+"leave",s,n,o)).target=d,l.relatedTarget=p,h=null,Eo(o)===r&&((c=new c(f,m+"enter",u,n,o)).target=p,c.relatedTarget=d,h=c),d=h,s&&u)e:{for(f=u,m=0,p=c=s;p;p=Qr(p))m++;for(p=0,h=f;h;h=Qr(h))p++;for(;0<m-p;)c=Qr(c),m--;for(;0<p-m;)f=Qr(f),p--;for(;m--;){if(c===f||null!==f&&c===f.alternate)break e;c=Qr(c),f=Qr(f)}c=null}else c=null;null!==s&&Gr(i,l,s,c,!1),null!==u&&null!==d&&Gr(i,d,u,c,!0)}if("select"===(s=(l=r?wo(r):window).nodeName&&l.nodeName.toLowerCase())||"input"===s&&"file"===l.type)var g=Kn;else if(Vn(l))if(Xn)g=lr;else{g=ar;var v=or}else(s=l.nodeName)&&"input"===s.toLowerCase()&&("checkbox"===l.type||"radio"===l.type)&&(g=ir);switch(g&&(g=g(e,r))?Zn(i,g,n,o):(v&&v(e,l,r),"focusout"===e&&(v=l._wrapperState)&&v.controlled&&"number"===l.type&&ee(l,"number",l.value)),v=r?wo(r):window,e){case"focusin":(Vn(v)||"true"===v.contentEditable)&&(vr=v,yr=r,br=null);break;case"focusout":br=yr=vr=null;break;case"mousedown":Er=!0;break;case"contextmenu":case"mouseup":case"dragend":Er=!1,kr(i,n,o);break;case"selectionchange":if(gr)break;case"keydown":case"keyup":kr(i,n,o)}var y;if(jn)e:{switch(e){case"compositionstart":var b="onCompositionStart";break e;case"compositionend":b="onCompositionEnd";break e;case"compositionupdate":b="onCompositionUpdate";break e}b=void 0}else $n?Dn(e,n)&&(b="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(b="onCompositionStart");b&&(In&&"ko"!==n.locale&&($n||"onCompositionStart"!==b?"onCompositionEnd"===b&&$n&&(y=en()):(Xt="value"in(Kt=o)?Kt.value:Kt.textContent,$n=!0)),0<(v=qr(r,b)).length&&(b=new En(b,e,null,n,o),i.push({event:b,listeners:v}),(y||null!==(y=Wn(n)))&&(b.data=y))),(y=zn?function(e,t){switch(e){case"compositionend":return Wn(t);case"keypress":return 32!==t.which?null:(Bn=!0,Hn);case"textInput":return(e=t.data)===Hn&&Bn?null:e;default:return null}}(e,n):function(e,t){if($n)return"compositionend"===e||!jn&&Dn(e,t)?(e=en(),Jt=Xt=Kt=null,$n=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return In&&"ko"!==t.locale?null:t.data}}(e,n))&&0<(r=qr(r,"onBeforeInput")).length&&(o=new En("onBeforeInput","beforeinput",null,n,o),i.push({event:o,listeners:r}),o.data=y)}Hr(i,t)}))}function Zr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function qr(e,t){for(var n=t+"Capture",r=[];null!==e;){var o=e,a=o.stateNode;5===o.tag&&null!==a&&(o=a,null!=(a=Oe(e,n))&&r.unshift(Zr(e,a,o)),null!=(a=Oe(e,t))&&r.push(Zr(e,a,o))),e=e.return}return r}function Qr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Gr(e,t,n,r,o){for(var a=t._reactName,i=[];null!==n&&n!==r;){var l=n,s=l.alternate,u=l.stateNode;if(null!==s&&s===r)break;5===l.tag&&null!==u&&(l=u,o?null!=(s=Oe(n,a))&&i.unshift(Zr(n,s,l)):o||null!=(s=Oe(n,a))&&i.push(Zr(n,s,l))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}var Yr=/\r\n?/g,Kr=/\u0000|\uFFFD/g;function Xr(e){return("string"==typeof e?e:""+e).replace(Yr,"\n").replace(Kr,"")}function Jr(e,t,n){if(t=Xr(t),Xr(e)!==t&&n)throw Error(a(425))}function eo(){}var to=null,no=null;function ro(e,t){return"textarea"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var oo="function"==typeof setTimeout?setTimeout:void 0,ao="function"==typeof clearTimeout?clearTimeout:void 0,io="function"==typeof Promise?Promise:void 0,lo="function"==typeof queueMicrotask?queueMicrotask:void 0!==io?function(e){return io.resolve(null).then(e).catch(so)}:oo;function so(e){setTimeout((function(){throw e}))}function uo(e,t){var n=t,r=0;do{var o=n.nextSibling;if(e.removeChild(n),o&&8===o.nodeType)if("/$"===(n=o.data)){if(0===r)return e.removeChild(o),void Wt(t);r--}else"$"!==n&&"$?"!==n&&"$!"!==n||r++;n=o}while(n);Wt(t)}function co(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break;if(8===t){if("$"===(t=e.data)||"$!"===t||"$?"===t)break;if("/$"===t)return null}}return e}function fo(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var po=Math.random().toString(36).slice(2),mo="__reactFiber$"+po,ho="__reactProps$"+po,go="__reactContainer$"+po,vo="__reactEvents$"+po,yo="__reactListeners$"+po,bo="__reactHandles$"+po;function Eo(e){var t=e[mo];if(t)return t;for(var n=e.parentNode;n;){if(t=n[go]||n[mo]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=fo(e);null!==e;){if(n=e[mo])return n;e=fo(e)}return t}n=(e=n).parentNode}return null}function ko(e){return!(e=e[mo]||e[go])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function wo(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(a(33))}function Co(e){return e[ho]||null}var xo=[],So=-1;function _o(e){return{current:e}}function Lo(e){0>So||(e.current=xo[So],xo[So]=null,So--)}function Mo(e,t){So++,xo[So]=e.current,e.current=t}var Po={},To=_o(Po),No=_o(!1),Oo=Po;function Ao(e,t){var n=e.type.contextTypes;if(!n)return Po;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,a={};for(o in n)a[o]=t[o];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function Ro(e){return null!=e.childContextTypes}function jo(){Lo(No),Lo(To)}function Fo(e,t,n){if(To.current!==Po)throw Error(a(168));Mo(To,t),Mo(No,n)}function zo(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var o in r=r.getChildContext())if(!(o in t))throw Error(a(108,$(e)||"Unknown",o));return z({},n,r)}function Io(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Po,Oo=To.current,Mo(To,e),Mo(No,No.current),!0}function Ho(e,t,n){var r=e.stateNode;if(!r)throw Error(a(169));n?(e=zo(e,t,Oo),r.__reactInternalMemoizedMergedChildContext=e,Lo(No),Lo(To),Mo(To,e)):Lo(No),Mo(No,n)}var Bo=null,Do=!1,Wo=!1;function $o(e){null===Bo?Bo=[e]:Bo.push(e)}function Uo(){if(!Wo&&null!==Bo){Wo=!0;var e=0,t=bt;try{var n=Bo;for(bt=1;e<n.length;e++){var r=n[e];do{r=r(!0)}while(null!==r)}Bo=null,Do=!1}catch(t){throw null!==Bo&&(Bo=Bo.slice(e+1)),qe(Je,Uo),t}finally{bt=t,Wo=!1}}return null}var Vo=[],Zo=0,qo=null,Qo=0,Go=[],Yo=0,Ko=null,Xo=1,Jo="";function ea(e,t){Vo[Zo++]=Qo,Vo[Zo++]=qo,qo=e,Qo=t}function ta(e,t,n){Go[Yo++]=Xo,Go[Yo++]=Jo,Go[Yo++]=Ko,Ko=e;var r=Xo;e=Jo;var o=32-it(r)-1;r&=~(1<<o),n+=1;var a=32-it(t)+o;if(30<a){var i=o-o%5;a=(r&(1<<i)-1).toString(32),r>>=i,o-=i,Xo=1<<32-it(t)+o|n<<o|r,Jo=a+e}else Xo=1<<a|n<<o|r,Jo=e}function na(e){null!==e.return&&(ea(e,1),ta(e,1,0))}function ra(e){for(;e===qo;)qo=Vo[--Zo],Vo[Zo]=null,Qo=Vo[--Zo],Vo[Zo]=null;for(;e===Ko;)Ko=Go[--Yo],Go[Yo]=null,Jo=Go[--Yo],Go[Yo]=null,Xo=Go[--Yo],Go[Yo]=null}var oa=null,aa=null,ia=!1,la=null;function sa(e,t){var n=Au(5,null,null,0);n.elementType="DELETED",n.stateNode=t,n.return=e,null===(t=e.deletions)?(e.deletions=[n],e.flags|=16):t.push(n)}function ua(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,oa=e,aa=co(t.firstChild),!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,oa=e,aa=null,!0);case 13:return null!==(t=8!==t.nodeType?null:t)&&(n=null!==Ko?{id:Xo,overflow:Jo}:null,e.memoizedState={dehydrated:t,treeContext:n,retryLane:1073741824},(n=Au(18,null,null,0)).stateNode=t,n.return=e,e.child=n,oa=e,aa=null,!0);default:return!1}}function ca(e){return 0!=(1&e.mode)&&0==(128&e.flags)}function da(e){if(ia){var t=aa;if(t){var n=t;if(!ua(e,t)){if(ca(e))throw Error(a(418));t=co(n.nextSibling);var r=oa;t&&ua(e,t)?sa(r,n):(e.flags=-4097&e.flags|2,ia=!1,oa=e)}}else{if(ca(e))throw Error(a(418));e.flags=-4097&e.flags|2,ia=!1,oa=e}}}function fa(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;oa=e}function pa(e){if(e!==oa)return!1;if(!ia)return fa(e),ia=!0,!1;var t;if((t=3!==e.tag)&&!(t=5!==e.tag)&&(t="head"!==(t=e.type)&&"body"!==t&&!ro(e.type,e.memoizedProps)),t&&(t=aa)){if(ca(e))throw ma(),Error(a(418));for(;t;)sa(e,t),t=co(t.nextSibling)}if(fa(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(a(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){aa=co(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}aa=null}}else aa=oa?co(e.stateNode.nextSibling):null;return!0}function ma(){for(var e=aa;e;)e=co(e.nextSibling)}function ha(){aa=oa=null,ia=!1}function ga(e){null===la?la=[e]:la.push(e)}var va=E.ReactCurrentBatchConfig;function ya(e,t){if(e&&e.defaultProps){for(var n in t=z({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var ba=_o(null),Ea=null,ka=null,wa=null;function Ca(){wa=ka=Ea=null}function xa(e){var t=ba.current;Lo(ba),e._currentValue=t}function Sa(e,t,n){for(;null!==e;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,null!==r&&(r.childLanes|=t)):null!==r&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function _a(e,t){Ea=e,wa=ka=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(kl=!0),e.firstContext=null)}function La(e){var t=e._currentValue;if(wa!==e)if(e={context:e,memoizedValue:t,next:null},null===ka){if(null===Ea)throw Error(a(308));ka=e,Ea.dependencies={lanes:0,firstContext:e}}else ka=ka.next=e;return t}var Ma=null;function Pa(e){null===Ma?Ma=[e]:Ma.push(e)}function Ta(e,t,n,r){var o=t.interleaved;return null===o?(n.next=n,Pa(t)):(n.next=o.next,o.next=n),t.interleaved=n,Na(e,r)}function Na(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}var Oa=!1;function Aa(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Ra(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function ja(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Fa(e,t,n){var r=e.updateQueue;if(null===r)return null;if(r=r.shared,0!=(2&Ts)){var o=r.pending;return null===o?t.next=t:(t.next=o.next,o.next=t),r.pending=t,Na(e,n)}return null===(o=r.interleaved)?(t.next=t,Pa(r)):(t.next=o.next,o.next=t),r.interleaved=t,Na(e,n)}function za(e,t,n){if(null!==(t=t.updateQueue)&&(t=t.shared,0!=(4194240&n))){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,yt(e,n)}}function Ia(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,a=null;if(null!==(n=n.firstBaseUpdate)){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===a?o=a=i:a=a.next=i,n=n.next}while(null!==n);null===a?o=a=t:a=a.next=t}else o=a=t;return n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Ha(e,t,n,r){var o=e.updateQueue;Oa=!1;var a=o.firstBaseUpdate,i=o.lastBaseUpdate,l=o.shared.pending;if(null!==l){o.shared.pending=null;var s=l,u=s.next;s.next=null,null===i?a=u:i.next=u,i=s;var c=e.alternate;null!==c&&(l=(c=c.updateQueue).lastBaseUpdate)!==i&&(null===l?c.firstBaseUpdate=u:l.next=u,c.lastBaseUpdate=s)}if(null!==a){var d=o.baseState;for(i=0,c=u=s=null,l=a;;){var f=l.lane,p=l.eventTime;if((r&f)===f){null!==c&&(c=c.next={eventTime:p,lane:0,tag:l.tag,payload:l.payload,callback:l.callback,next:null});e:{var m=e,h=l;switch(f=t,p=n,h.tag){case 1:if("function"==typeof(m=h.payload)){d=m.call(p,d,f);break e}d=m;break e;case 3:m.flags=-65537&m.flags|128;case 0:if(null==(f="function"==typeof(m=h.payload)?m.call(p,d,f):m))break e;d=z({},d,f);break e;case 2:Oa=!0}}null!==l.callback&&0!==l.lane&&(e.flags|=64,null===(f=o.effects)?o.effects=[l]:f.push(l))}else p={eventTime:p,lane:f,tag:l.tag,payload:l.payload,callback:l.callback,next:null},null===c?(u=c=p,s=d):c=c.next=p,i|=f;if(null===(l=l.next)){if(null===(l=o.shared.pending))break;l=(f=l).next,f.next=null,o.lastBaseUpdate=f,o.shared.pending=null}}if(null===c&&(s=d),o.baseState=s,o.firstBaseUpdate=u,o.lastBaseUpdate=c,null!==(t=o.shared.interleaved)){o=t;do{i|=o.lane,o=o.next}while(o!==t)}else null===a&&(o.shared.lanes=0);Is|=i,e.lanes=i,e.memoizedState=d}}function Ba(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],o=r.callback;if(null!==o){if(r.callback=null,r=n,"function"!=typeof o)throw Error(a(191,o));o.call(r)}}}var Da=(new r.Component).refs;function Wa(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:z({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var $a={isMounted:function(e){return!!(e=e._reactInternals)&&We(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=nu(),o=ru(e),a=ja(r,o);a.payload=t,null!=n&&(a.callback=n),null!==(t=Fa(e,a,o))&&(ou(t,e,o,r),za(t,e,o))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=nu(),o=ru(e),a=ja(r,o);a.tag=1,a.payload=t,null!=n&&(a.callback=n),null!==(t=Fa(e,a,o))&&(ou(t,e,o,r),za(t,e,o))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=nu(),r=ru(e),o=ja(n,r);o.tag=2,null!=t&&(o.callback=t),null!==(t=Fa(e,o,r))&&(ou(t,e,r,n),za(t,e,r))}};function Ua(e,t,n,r,o,a,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,i):!(t.prototype&&t.prototype.isPureReactComponent&&ur(n,r)&&ur(o,a))}function Va(e,t,n){var r=!1,o=Po,a=t.contextType;return"object"==typeof a&&null!==a?a=La(a):(o=Ro(t)?Oo:To.current,a=(r=null!=(r=t.contextTypes))?Ao(e,o):Po),t=new t(n,a),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=$a,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=a),t}function Za(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&$a.enqueueReplaceState(t,t.state,null)}function qa(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs=Da,Aa(e);var a=t.contextType;"object"==typeof a&&null!==a?o.context=La(a):(a=Ro(t)?Oo:To.current,o.context=Ao(e,a)),o.state=e.memoizedState,"function"==typeof(a=t.getDerivedStateFromProps)&&(Wa(e,t,a,n),o.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof o.getSnapshotBeforeUpdate||"function"!=typeof o.UNSAFE_componentWillMount&&"function"!=typeof o.componentWillMount||(t=o.state,"function"==typeof o.componentWillMount&&o.componentWillMount(),"function"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&$a.enqueueReplaceState(o,o.state,null),Ha(e,n,o,r),o.state=e.memoizedState),"function"==typeof o.componentDidMount&&(e.flags|=4194308)}function Qa(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(a(309));var r=n.stateNode}if(!r)throw Error(a(147,e));var o=r,i=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===i?t.ref:(t=function(e){var t=o.refs;t===Da&&(t=o.refs={}),null===e?delete t[i]:t[i]=e},t._stringRef=i,t)}if("string"!=typeof e)throw Error(a(284));if(!n._owner)throw Error(a(290,e))}return e}function Ga(e,t){throw e=Object.prototype.toString.call(t),Error(a(31,"[object Object]"===e?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function Ya(e){return(0,e._init)(e._payload)}function Ka(e){function t(t,n){if(e){var r=t.deletions;null===r?(t.deletions=[n],t.flags|=16):r.push(n)}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=ju(e,t)).index=0,e.sibling=null,e}function i(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags|=2,n):r:(t.flags|=2,n):(t.flags|=1048576,n)}function l(t){return e&&null===t.alternate&&(t.flags|=2),t}function s(e,t,n,r){return null===t||6!==t.tag?((t=Hu(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function u(e,t,n,r){var a=n.type;return a===C?d(e,t,n.props.children,r,n.key):null!==t&&(t.elementType===a||"object"==typeof a&&null!==a&&a.$$typeof===O&&Ya(a)===t.type)?((r=o(t,n.props)).ref=Qa(e,t,n),r.return=e,r):((r=Fu(n.type,n.key,n.props,null,e.mode,r)).ref=Qa(e,t,n),r.return=e,r)}function c(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Bu(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function d(e,t,n,r,a){return null===t||7!==t.tag?((t=zu(n,e.mode,r,a)).return=e,t):((t=o(t,n)).return=e,t)}function f(e,t,n){if("string"==typeof t&&""!==t||"number"==typeof t)return(t=Hu(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case k:return(n=Fu(t.type,t.key,t.props,null,e.mode,n)).ref=Qa(e,null,t),n.return=e,n;case w:return(t=Bu(t,e.mode,n)).return=e,t;case O:return f(e,(0,t._init)(t._payload),n)}if(te(t)||j(t))return(t=zu(t,e.mode,n,null)).return=e,t;Ga(e,t)}return null}function p(e,t,n,r){var o=null!==t?t.key:null;if("string"==typeof n&&""!==n||"number"==typeof n)return null!==o?null:s(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case k:return n.key===o?u(e,t,n,r):null;case w:return n.key===o?c(e,t,n,r):null;case O:return p(e,t,(o=n._init)(n._payload),r)}if(te(n)||j(n))return null!==o?null:d(e,t,n,r,null);Ga(e,n)}return null}function m(e,t,n,r,o){if("string"==typeof r&&""!==r||"number"==typeof r)return s(t,e=e.get(n)||null,""+r,o);if("object"==typeof r&&null!==r){switch(r.$$typeof){case k:return u(t,e=e.get(null===r.key?n:r.key)||null,r,o);case w:return c(t,e=e.get(null===r.key?n:r.key)||null,r,o);case O:return m(e,t,n,(0,r._init)(r._payload),o)}if(te(r)||j(r))return d(t,e=e.get(n)||null,r,o,null);Ga(t,r)}return null}function h(o,a,l,s){for(var u=null,c=null,d=a,h=a=0,g=null;null!==d&&h<l.length;h++){d.index>h?(g=d,d=null):g=d.sibling;var v=p(o,d,l[h],s);if(null===v){null===d&&(d=g);break}e&&d&&null===v.alternate&&t(o,d),a=i(v,a,h),null===c?u=v:c.sibling=v,c=v,d=g}if(h===l.length)return n(o,d),ia&&ea(o,h),u;if(null===d){for(;h<l.length;h++)null!==(d=f(o,l[h],s))&&(a=i(d,a,h),null===c?u=d:c.sibling=d,c=d);return ia&&ea(o,h),u}for(d=r(o,d);h<l.length;h++)null!==(g=m(d,o,h,l[h],s))&&(e&&null!==g.alternate&&d.delete(null===g.key?h:g.key),a=i(g,a,h),null===c?u=g:c.sibling=g,c=g);return e&&d.forEach((function(e){return t(o,e)})),ia&&ea(o,h),u}function g(o,l,s,u){var c=j(s);if("function"!=typeof c)throw Error(a(150));if(null==(s=c.call(s)))throw Error(a(151));for(var d=c=null,h=l,g=l=0,v=null,y=s.next();null!==h&&!y.done;g++,y=s.next()){h.index>g?(v=h,h=null):v=h.sibling;var b=p(o,h,y.value,u);if(null===b){null===h&&(h=v);break}e&&h&&null===b.alternate&&t(o,h),l=i(b,l,g),null===d?c=b:d.sibling=b,d=b,h=v}if(y.done)return n(o,h),ia&&ea(o,g),c;if(null===h){for(;!y.done;g++,y=s.next())null!==(y=f(o,y.value,u))&&(l=i(y,l,g),null===d?c=y:d.sibling=y,d=y);return ia&&ea(o,g),c}for(h=r(o,h);!y.done;g++,y=s.next())null!==(y=m(h,o,g,y.value,u))&&(e&&null!==y.alternate&&h.delete(null===y.key?g:y.key),l=i(y,l,g),null===d?c=y:d.sibling=y,d=y);return e&&h.forEach((function(e){return t(o,e)})),ia&&ea(o,g),c}return function e(r,a,i,s){if("object"==typeof i&&null!==i&&i.type===C&&null===i.key&&(i=i.props.children),"object"==typeof i&&null!==i){switch(i.$$typeof){case k:e:{for(var u=i.key,c=a;null!==c;){if(c.key===u){if((u=i.type)===C){if(7===c.tag){n(r,c.sibling),(a=o(c,i.props.children)).return=r,r=a;break e}}else if(c.elementType===u||"object"==typeof u&&null!==u&&u.$$typeof===O&&Ya(u)===c.type){n(r,c.sibling),(a=o(c,i.props)).ref=Qa(r,c,i),a.return=r,r=a;break e}n(r,c);break}t(r,c),c=c.sibling}i.type===C?((a=zu(i.props.children,r.mode,s,i.key)).return=r,r=a):((s=Fu(i.type,i.key,i.props,null,r.mode,s)).ref=Qa(r,a,i),s.return=r,r=s)}return l(r);case w:e:{for(c=i.key;null!==a;){if(a.key===c){if(4===a.tag&&a.stateNode.containerInfo===i.containerInfo&&a.stateNode.implementation===i.implementation){n(r,a.sibling),(a=o(a,i.children||[])).return=r,r=a;break e}n(r,a);break}t(r,a),a=a.sibling}(a=Bu(i,r.mode,s)).return=r,r=a}return l(r);case O:return e(r,a,(c=i._init)(i._payload),s)}if(te(i))return h(r,a,i,s);if(j(i))return g(r,a,i,s);Ga(r,i)}return"string"==typeof i&&""!==i||"number"==typeof i?(i=""+i,null!==a&&6===a.tag?(n(r,a.sibling),(a=o(a,i)).return=r,r=a):(n(r,a),(a=Hu(i,r.mode,s)).return=r,r=a),l(r)):n(r,a)}}var Xa=Ka(!0),Ja=Ka(!1),ei={},ti=_o(ei),ni=_o(ei),ri=_o(ei);function oi(e){if(e===ei)throw Error(a(174));return e}function ai(e,t){switch(Mo(ri,t),Mo(ni,e),Mo(ti,ei),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:se(null,"");break;default:t=se(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}Lo(ti),Mo(ti,t)}function ii(){Lo(ti),Lo(ni),Lo(ri)}function li(e){oi(ri.current);var t=oi(ti.current),n=se(t,e.type);t!==n&&(Mo(ni,e),Mo(ti,n))}function si(e){ni.current===e&&(Lo(ti),Lo(ni))}var ui=_o(0);function ci(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(128&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var di=[];function fi(){for(var e=0;e<di.length;e++)di[e]._workInProgressVersionPrimary=null;di.length=0}var pi=E.ReactCurrentDispatcher,mi=E.ReactCurrentBatchConfig,hi=0,gi=null,vi=null,yi=null,bi=!1,Ei=!1,ki=0,wi=0;function Ci(){throw Error(a(321))}function xi(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!sr(e[n],t[n]))return!1;return!0}function Si(e,t,n,r,o,i){if(hi=i,gi=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,pi.current=null===e||null===e.memoizedState?sl:ul,e=n(r,o),Ei){i=0;do{if(Ei=!1,ki=0,25<=i)throw Error(a(301));i+=1,yi=vi=null,t.updateQueue=null,pi.current=cl,e=n(r,o)}while(Ei)}if(pi.current=ll,t=null!==vi&&null!==vi.next,hi=0,yi=vi=gi=null,bi=!1,t)throw Error(a(300));return e}function _i(){var e=0!==ki;return ki=0,e}function Li(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===yi?gi.memoizedState=yi=e:yi=yi.next=e,yi}function Mi(){if(null===vi){var e=gi.alternate;e=null!==e?e.memoizedState:null}else e=vi.next;var t=null===yi?gi.memoizedState:yi.next;if(null!==t)yi=t,vi=e;else{if(null===e)throw Error(a(310));e={memoizedState:(vi=e).memoizedState,baseState:vi.baseState,baseQueue:vi.baseQueue,queue:vi.queue,next:null},null===yi?gi.memoizedState=yi=e:yi=yi.next=e}return yi}function Pi(e,t){return"function"==typeof t?t(e):t}function Ti(e){var t=Mi(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var r=vi,o=r.baseQueue,i=n.pending;if(null!==i){if(null!==o){var l=o.next;o.next=i.next,i.next=l}r.baseQueue=o=i,n.pending=null}if(null!==o){i=o.next,r=r.baseState;var s=l=null,u=null,c=i;do{var d=c.lane;if((hi&d)===d)null!==u&&(u=u.next={lane:0,action:c.action,hasEagerState:c.hasEagerState,eagerState:c.eagerState,next:null}),r=c.hasEagerState?c.eagerState:e(r,c.action);else{var f={lane:d,action:c.action,hasEagerState:c.hasEagerState,eagerState:c.eagerState,next:null};null===u?(s=u=f,l=r):u=u.next=f,gi.lanes|=d,Is|=d}c=c.next}while(null!==c&&c!==i);null===u?l=r:u.next=s,sr(r,t.memoizedState)||(kl=!0),t.memoizedState=r,t.baseState=l,t.baseQueue=u,n.lastRenderedState=r}if(null!==(e=n.interleaved)){o=e;do{i=o.lane,gi.lanes|=i,Is|=i,o=o.next}while(o!==e)}else null===o&&(n.lanes=0);return[t.memoizedState,n.dispatch]}function Ni(e){var t=Mi(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,i=t.memoizedState;if(null!==o){n.pending=null;var l=o=o.next;do{i=e(i,l.action),l=l.next}while(l!==o);sr(i,t.memoizedState)||(kl=!0),t.memoizedState=i,null===t.baseQueue&&(t.baseState=i),n.lastRenderedState=i}return[i,r]}function Oi(){}function Ai(e,t){var n=gi,r=Mi(),o=t(),i=!sr(r.memoizedState,o);if(i&&(r.memoizedState=o,kl=!0),r=r.queue,Vi(Fi.bind(null,n,r,e),[e]),r.getSnapshot!==t||i||null!==yi&&1&yi.memoizedState.tag){if(n.flags|=2048,Bi(9,ji.bind(null,n,r,o,t),void 0,null),null===Ns)throw Error(a(349));0!=(30&hi)||Ri(n,t,o)}return o}function Ri(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},null===(t=gi.updateQueue)?(t={lastEffect:null,stores:null},gi.updateQueue=t,t.stores=[e]):null===(n=t.stores)?t.stores=[e]:n.push(e)}function ji(e,t,n,r){t.value=n,t.getSnapshot=r,zi(t)&&Ii(e)}function Fi(e,t,n){return n((function(){zi(t)&&Ii(e)}))}function zi(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!sr(e,n)}catch(e){return!0}}function Ii(e){var t=Na(e,1);null!==t&&ou(t,e,1,-1)}function Hi(e){var t=Li();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Pi,lastRenderedState:e},t.queue=e,e=e.dispatch=rl.bind(null,gi,e),[t.memoizedState,e]}function Bi(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=gi.updateQueue)?(t={lastEffect:null,stores:null},gi.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function Di(){return Mi().memoizedState}function Wi(e,t,n,r){var o=Li();gi.flags|=e,o.memoizedState=Bi(1|t,n,void 0,void 0===r?null:r)}function $i(e,t,n,r){var o=Mi();r=void 0===r?null:r;var a=void 0;if(null!==vi){var i=vi.memoizedState;if(a=i.destroy,null!==r&&xi(r,i.deps))return void(o.memoizedState=Bi(t,n,a,r))}gi.flags|=e,o.memoizedState=Bi(1|t,n,a,r)}function Ui(e,t){return Wi(8390656,8,e,t)}function Vi(e,t){return $i(2048,8,e,t)}function Zi(e,t){return $i(4,2,e,t)}function qi(e,t){return $i(4,4,e,t)}function Qi(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function Gi(e,t,n){return n=null!=n?n.concat([e]):null,$i(4,4,Qi.bind(null,t,e),n)}function Yi(){}function Ki(e,t){var n=Mi();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&xi(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Xi(e,t){var n=Mi();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&xi(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Ji(e,t,n){return 0==(21&hi)?(e.baseState&&(e.baseState=!1,kl=!0),e.memoizedState=n):(sr(n,t)||(n=ht(),gi.lanes|=n,Is|=n,e.baseState=!0),t)}function el(e,t){var n=bt;bt=0!==n&&4>n?n:4,e(!0);var r=mi.transition;mi.transition={};try{e(!1),t()}finally{bt=n,mi.transition=r}}function tl(){return Mi().memoizedState}function nl(e,t,n){var r=ru(e);n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},ol(e)?al(t,n):null!==(n=Ta(e,t,n,r))&&(ou(n,e,r,nu()),il(n,t,r))}function rl(e,t,n){var r=ru(e),o={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(ol(e))al(t,o);else{var a=e.alternate;if(0===e.lanes&&(null===a||0===a.lanes)&&null!==(a=t.lastRenderedReducer))try{var i=t.lastRenderedState,l=a(i,n);if(o.hasEagerState=!0,o.eagerState=l,sr(l,i)){var s=t.interleaved;return null===s?(o.next=o,Pa(t)):(o.next=s.next,s.next=o),void(t.interleaved=o)}}catch(e){}null!==(n=Ta(e,t,o,r))&&(ou(n,e,r,o=nu()),il(n,t,r))}}function ol(e){var t=e.alternate;return e===gi||null!==t&&t===gi}function al(e,t){Ei=bi=!0;var n=e.pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function il(e,t,n){if(0!=(4194240&n)){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,yt(e,n)}}var ll={readContext:La,useCallback:Ci,useContext:Ci,useEffect:Ci,useImperativeHandle:Ci,useInsertionEffect:Ci,useLayoutEffect:Ci,useMemo:Ci,useReducer:Ci,useRef:Ci,useState:Ci,useDebugValue:Ci,useDeferredValue:Ci,useTransition:Ci,useMutableSource:Ci,useSyncExternalStore:Ci,useId:Ci,unstable_isNewReconciler:!1},sl={readContext:La,useCallback:function(e,t){return Li().memoizedState=[e,void 0===t?null:t],e},useContext:La,useEffect:Ui,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,Wi(4194308,4,Qi.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Wi(4194308,4,e,t)},useInsertionEffect:function(e,t){return Wi(4,2,e,t)},useMemo:function(e,t){var n=Li();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Li();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=nl.bind(null,gi,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},Li().memoizedState=e},useState:Hi,useDebugValue:Yi,useDeferredValue:function(e){return Li().memoizedState=e},useTransition:function(){var e=Hi(!1),t=e[0];return e=el.bind(null,e[1]),Li().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=gi,o=Li();if(ia){if(void 0===n)throw Error(a(407));n=n()}else{if(n=t(),null===Ns)throw Error(a(349));0!=(30&hi)||Ri(r,t,n)}o.memoizedState=n;var i={value:n,getSnapshot:t};return o.queue=i,Ui(Fi.bind(null,r,i,e),[e]),r.flags|=2048,Bi(9,ji.bind(null,r,i,n,t),void 0,null),n},useId:function(){var e=Li(),t=Ns.identifierPrefix;if(ia){var n=Jo;t=":"+t+"R"+(n=(Xo&~(1<<32-it(Xo)-1)).toString(32)+n),0<(n=ki++)&&(t+="H"+n.toString(32)),t+=":"}else t=":"+t+"r"+(n=wi++).toString(32)+":";return e.memoizedState=t},unstable_isNewReconciler:!1},ul={readContext:La,useCallback:Ki,useContext:La,useEffect:Vi,useImperativeHandle:Gi,useInsertionEffect:Zi,useLayoutEffect:qi,useMemo:Xi,useReducer:Ti,useRef:Di,useState:function(){return Ti(Pi)},useDebugValue:Yi,useDeferredValue:function(e){return Ji(Mi(),vi.memoizedState,e)},useTransition:function(){return[Ti(Pi)[0],Mi().memoizedState]},useMutableSource:Oi,useSyncExternalStore:Ai,useId:tl,unstable_isNewReconciler:!1},cl={readContext:La,useCallback:Ki,useContext:La,useEffect:Vi,useImperativeHandle:Gi,useInsertionEffect:Zi,useLayoutEffect:qi,useMemo:Xi,useReducer:Ni,useRef:Di,useState:function(){return Ni(Pi)},useDebugValue:Yi,useDeferredValue:function(e){var t=Mi();return null===vi?t.memoizedState=e:Ji(t,vi.memoizedState,e)},useTransition:function(){return[Ni(Pi)[0],Mi().memoizedState]},useMutableSource:Oi,useSyncExternalStore:Ai,useId:tl,unstable_isNewReconciler:!1};function dl(e,t){try{var n="",r=t;do{n+=D(r),r=r.return}while(r);var o=n}catch(e){o="\nError generating stack: "+e.message+"\n"+e.stack}return{value:e,source:t,stack:o,digest:null}}function fl(e,t,n){return{value:e,source:null,stack:null!=n?n:null,digest:null!=t?t:null}}function pl(e,t){try{console.error(t.value)}catch(e){setTimeout((function(){throw e}))}}var ml="function"==typeof WeakMap?WeakMap:Map;function hl(e,t,n){(n=ja(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Zs||(Zs=!0,qs=r),pl(0,t)},n}function gl(e,t,n){(n=ja(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var o=t.value;n.payload=function(){return r(o)},n.callback=function(){pl(0,t)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(n.callback=function(){pl(0,t),"function"!=typeof r&&(null===Qs?Qs=new Set([this]):Qs.add(this));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}function vl(e,t,n){var r=e.pingCache;if(null===r){r=e.pingCache=new ml;var o=new Set;r.set(t,o)}else void 0===(o=r.get(t))&&(o=new Set,r.set(t,o));o.has(n)||(o.add(n),e=Lu.bind(null,e,t,n),t.then(e,e))}function yl(e){do{var t;if((t=13===e.tag)&&(t=null===(t=e.memoizedState)||null!==t.dehydrated),t)return e;e=e.return}while(null!==e);return null}function bl(e,t,n,r,o){return 0==(1&e.mode)?(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,1===n.tag&&(null===n.alternate?n.tag=17:((t=ja(-1,1)).tag=2,Fa(n,t,1))),n.lanes|=1),e):(e.flags|=65536,e.lanes=o,e)}var El=E.ReactCurrentOwner,kl=!1;function wl(e,t,n,r){t.child=null===e?Ja(t,null,n,r):Xa(t,e.child,n,r)}function Cl(e,t,n,r,o){n=n.render;var a=t.ref;return _a(t,o),r=Si(e,t,n,r,a,o),n=_i(),null===e||kl?(ia&&n&&na(t),t.flags|=1,wl(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,Zl(e,t,o))}function xl(e,t,n,r,o){if(null===e){var a=n.type;return"function"!=typeof a||Ru(a)||void 0!==a.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Fu(n.type,null,r,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=a,Sl(e,t,a,r,o))}if(a=e.child,0==(e.lanes&o)){var i=a.memoizedProps;if((n=null!==(n=n.compare)?n:ur)(i,r)&&e.ref===t.ref)return Zl(e,t,o)}return t.flags|=1,(e=ju(a,r)).ref=t.ref,e.return=t,t.child=e}function Sl(e,t,n,r,o){if(null!==e){var a=e.memoizedProps;if(ur(a,r)&&e.ref===t.ref){if(kl=!1,t.pendingProps=r=a,0==(e.lanes&o))return t.lanes=e.lanes,Zl(e,t,o);0!=(131072&e.flags)&&(kl=!0)}}return Ml(e,t,n,r,o)}function _l(e,t,n){var r=t.pendingProps,o=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode)if(0==(1&t.mode))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},Mo(js,Rs),Rs|=n;else{if(0==(1073741824&n))return e=null!==a?a.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,Mo(js,Rs),Rs|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=null!==a?a.baseLanes:n,Mo(js,Rs),Rs|=r}else null!==a?(r=a.baseLanes|n,t.memoizedState=null):r=n,Mo(js,Rs),Rs|=r;return wl(e,t,o,n),t.child}function Ll(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function Ml(e,t,n,r,o){var a=Ro(n)?Oo:To.current;return a=Ao(t,a),_a(t,o),n=Si(e,t,n,r,a,o),r=_i(),null===e||kl?(ia&&r&&na(t),t.flags|=1,wl(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,Zl(e,t,o))}function Pl(e,t,n,r,o){if(Ro(n)){var a=!0;Io(t)}else a=!1;if(_a(t,o),null===t.stateNode)Vl(e,t),Va(t,n,r),qa(t,n,r,o),r=!0;else if(null===e){var i=t.stateNode,l=t.memoizedProps;i.props=l;var s=i.context,u=n.contextType;u="object"==typeof u&&null!==u?La(u):Ao(t,u=Ro(n)?Oo:To.current);var c=n.getDerivedStateFromProps,d="function"==typeof c||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==r||s!==u)&&Za(t,i,r,u),Oa=!1;var f=t.memoizedState;i.state=f,Ha(t,r,i,o),s=t.memoizedState,l!==r||f!==s||No.current||Oa?("function"==typeof c&&(Wa(t,n,c,r),s=t.memoizedState),(l=Oa||Ua(t,n,l,r,f,s,u))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4194308)):("function"==typeof i.componentDidMount&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=s),i.props=r,i.state=s,i.context=u,r=l):("function"==typeof i.componentDidMount&&(t.flags|=4194308),r=!1)}else{i=t.stateNode,Ra(e,t),l=t.memoizedProps,u=t.type===t.elementType?l:ya(t.type,l),i.props=u,d=t.pendingProps,f=i.context,s="object"==typeof(s=n.contextType)&&null!==s?La(s):Ao(t,s=Ro(n)?Oo:To.current);var p=n.getDerivedStateFromProps;(c="function"==typeof p||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==d||f!==s)&&Za(t,i,r,s),Oa=!1,f=t.memoizedState,i.state=f,Ha(t,r,i,o);var m=t.memoizedState;l!==d||f!==m||No.current||Oa?("function"==typeof p&&(Wa(t,n,p,r),m=t.memoizedState),(u=Oa||Ua(t,n,u,r,f,m,s)||!1)?(c||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,m,s),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,m,s)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=1024)):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=m),i.props=r,i.state=m,i.context=s,r=u):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),r=!1)}return Tl(e,t,n,r,a,o)}function Tl(e,t,n,r,o,a){Ll(e,t);var i=0!=(128&t.flags);if(!r&&!i)return o&&Ho(t,n,!1),Zl(e,t,a);r=t.stateNode,El.current=t;var l=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=Xa(t,e.child,null,a),t.child=Xa(t,null,l,a)):wl(e,t,l,a),t.memoizedState=r.state,o&&Ho(t,n,!0),t.child}function Nl(e){var t=e.stateNode;t.pendingContext?Fo(0,t.pendingContext,t.pendingContext!==t.context):t.context&&Fo(0,t.context,!1),ai(e,t.containerInfo)}function Ol(e,t,n,r,o){return ha(),ga(o),t.flags|=256,wl(e,t,n,r),t.child}var Al,Rl,jl,Fl,zl={dehydrated:null,treeContext:null,retryLane:0};function Il(e){return{baseLanes:e,cachePool:null,transitions:null}}function Hl(e,t,n){var r,o=t.pendingProps,i=ui.current,l=!1,s=0!=(128&t.flags);if((r=s)||(r=(null===e||null!==e.memoizedState)&&0!=(2&i)),r?(l=!0,t.flags&=-129):null!==e&&null===e.memoizedState||(i|=1),Mo(ui,1&i),null===e)return da(t),null!==(e=t.memoizedState)&&null!==(e=e.dehydrated)?(0==(1&t.mode)?t.lanes=1:"$!"===e.data?t.lanes=8:t.lanes=1073741824,null):(s=o.children,e=o.fallback,l?(o=t.mode,l=t.child,s={mode:"hidden",children:s},0==(1&o)&&null!==l?(l.childLanes=0,l.pendingProps=s):l=Iu(s,o,0,null),e=zu(e,o,n,null),l.return=t,e.return=t,l.sibling=e,t.child=l,t.child.memoizedState=Il(n),t.memoizedState=zl,e):Bl(t,s));if(null!==(i=e.memoizedState)&&null!==(r=i.dehydrated))return function(e,t,n,r,o,i,l){if(n)return 256&t.flags?(t.flags&=-257,Dl(e,t,l,r=fl(Error(a(422))))):null!==t.memoizedState?(t.child=e.child,t.flags|=128,null):(i=r.fallback,o=t.mode,r=Iu({mode:"visible",children:r.children},o,0,null),(i=zu(i,o,l,null)).flags|=2,r.return=t,i.return=t,r.sibling=i,t.child=r,0!=(1&t.mode)&&Xa(t,e.child,null,l),t.child.memoizedState=Il(l),t.memoizedState=zl,i);if(0==(1&t.mode))return Dl(e,t,l,null);if("$!"===o.data){if(r=o.nextSibling&&o.nextSibling.dataset)var s=r.dgst;return r=s,Dl(e,t,l,r=fl(i=Error(a(419)),r,void 0))}if(s=0!=(l&e.childLanes),kl||s){if(null!==(r=Ns)){switch(l&-l){case 4:o=2;break;case 16:o=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:o=32;break;case 536870912:o=268435456;break;default:o=0}0!==(o=0!=(o&(r.suspendedLanes|l))?0:o)&&o!==i.retryLane&&(i.retryLane=o,Na(e,o),ou(r,e,o,-1))}return vu(),Dl(e,t,l,r=fl(Error(a(421))))}return"$?"===o.data?(t.flags|=128,t.child=e.child,t=Pu.bind(null,e),o._reactRetry=t,null):(e=i.treeContext,aa=co(o.nextSibling),oa=t,ia=!0,la=null,null!==e&&(Go[Yo++]=Xo,Go[Yo++]=Jo,Go[Yo++]=Ko,Xo=e.id,Jo=e.overflow,Ko=t),(t=Bl(t,r.children)).flags|=4096,t)}(e,t,s,o,r,i,n);if(l){l=o.fallback,s=t.mode,r=(i=e.child).sibling;var u={mode:"hidden",children:o.children};return 0==(1&s)&&t.child!==i?((o=t.child).childLanes=0,o.pendingProps=u,t.deletions=null):(o=ju(i,u)).subtreeFlags=14680064&i.subtreeFlags,null!==r?l=ju(r,l):(l=zu(l,s,n,null)).flags|=2,l.return=t,o.return=t,o.sibling=l,t.child=o,o=l,l=t.child,s=null===(s=e.child.memoizedState)?Il(n):{baseLanes:s.baseLanes|n,cachePool:null,transitions:s.transitions},l.memoizedState=s,l.childLanes=e.childLanes&~n,t.memoizedState=zl,o}return e=(l=e.child).sibling,o=ju(l,{mode:"visible",children:o.children}),0==(1&t.mode)&&(o.lanes=n),o.return=t,o.sibling=null,null!==e&&(null===(n=t.deletions)?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=o,t.memoizedState=null,o}function Bl(e,t){return(t=Iu({mode:"visible",children:t},e.mode,0,null)).return=e,e.child=t}function Dl(e,t,n,r){return null!==r&&ga(r),Xa(t,e.child,null,n),(e=Bl(t,t.pendingProps.children)).flags|=2,t.memoizedState=null,e}function Wl(e,t,n){e.lanes|=t;var r=e.alternate;null!==r&&(r.lanes|=t),Sa(e.return,t,n)}function $l(e,t,n,r,o){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o}:(a.isBackwards=t,a.rendering=null,a.renderingStartTime=0,a.last=r,a.tail=n,a.tailMode=o)}function Ul(e,t,n){var r=t.pendingProps,o=r.revealOrder,a=r.tail;if(wl(e,t,r.children,n),0!=(2&(r=ui.current)))r=1&r|2,t.flags|=128;else{if(null!==e&&0!=(128&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Wl(e,n,t);else if(19===e.tag)Wl(e,n,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(Mo(ui,r),0==(1&t.mode))t.memoizedState=null;else switch(o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===ci(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),$l(t,!1,o,n,a);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===ci(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}$l(t,!0,n,null,a);break;case"together":$l(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function Vl(e,t){0==(1&t.mode)&&null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2)}function Zl(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),Is|=t.lanes,0==(n&t.childLanes))return null;if(null!==e&&t.child!==e.child)throw Error(a(153));if(null!==t.child){for(n=ju(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=ju(e,e.pendingProps)).return=t;n.sibling=null}return t.child}function ql(e,t){if(!ia)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function Ql(e){var t=null!==e.alternate&&e.alternate.child===e.child,n=0,r=0;if(t)for(var o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=14680064&o.subtreeFlags,r|=14680064&o.flags,o.return=e,o=o.sibling;else for(o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=o.subtreeFlags,r|=o.flags,o.return=e,o=o.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function Gl(e,t,n){var r=t.pendingProps;switch(ra(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Ql(t),null;case 1:case 17:return Ro(t.type)&&jo(),Ql(t),null;case 3:return r=t.stateNode,ii(),Lo(No),Lo(To),fi(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(pa(t)?t.flags|=4:null===e||e.memoizedState.isDehydrated&&0==(256&t.flags)||(t.flags|=1024,null!==la&&(su(la),la=null))),Rl(e,t),Ql(t),null;case 5:si(t);var o=oi(ri.current);if(n=t.type,null!==e&&null!=t.stateNode)jl(e,t,n,r,o),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!r){if(null===t.stateNode)throw Error(a(166));return Ql(t),null}if(e=oi(ti.current),pa(t)){r=t.stateNode,n=t.type;var i=t.memoizedProps;switch(r[mo]=t,r[ho]=i,e=0!=(1&t.mode),n){case"dialog":Br("cancel",r),Br("close",r);break;case"iframe":case"object":case"embed":Br("load",r);break;case"video":case"audio":for(o=0;o<Fr.length;o++)Br(Fr[o],r);break;case"source":Br("error",r);break;case"img":case"image":case"link":Br("error",r),Br("load",r);break;case"details":Br("toggle",r);break;case"input":Y(r,i),Br("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!i.multiple},Br("invalid",r);break;case"textarea":oe(r,i),Br("invalid",r)}for(var s in ye(n,i),o=null,i)if(i.hasOwnProperty(s)){var u=i[s];"children"===s?"string"==typeof u?r.textContent!==u&&(!0!==i.suppressHydrationWarning&&Jr(r.textContent,u,e),o=["children",u]):"number"==typeof u&&r.textContent!==""+u&&(!0!==i.suppressHydrationWarning&&Jr(r.textContent,u,e),o=["children",""+u]):l.hasOwnProperty(s)&&null!=u&&"onScroll"===s&&Br("scroll",r)}switch(n){case"input":Z(r),J(r,i,!0);break;case"textarea":Z(r),ie(r);break;case"select":case"option":break;default:"function"==typeof i.onClick&&(r.onclick=eo)}r=o,t.updateQueue=r,null!==r&&(t.flags|=4)}else{s=9===o.nodeType?o:o.ownerDocument,"http://www.w3.org/1999/xhtml"===e&&(e=le(n)),"http://www.w3.org/1999/xhtml"===e?"script"===n?((e=s.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=s.createElement(n,{is:r.is}):(e=s.createElement(n),"select"===n&&(s=e,r.multiple?s.multiple=!0:r.size&&(s.size=r.size))):e=s.createElementNS(e,n),e[mo]=t,e[ho]=r,Al(e,t,!1,!1),t.stateNode=e;e:{switch(s=be(n,r),n){case"dialog":Br("cancel",e),Br("close",e),o=r;break;case"iframe":case"object":case"embed":Br("load",e),o=r;break;case"video":case"audio":for(o=0;o<Fr.length;o++)Br(Fr[o],e);o=r;break;case"source":Br("error",e),o=r;break;case"img":case"image":case"link":Br("error",e),Br("load",e),o=r;break;case"details":Br("toggle",e),o=r;break;case"input":Y(e,r),o=G(e,r),Br("invalid",e);break;case"option":default:o=r;break;case"select":e._wrapperState={wasMultiple:!!r.multiple},o=z({},r,{value:void 0}),Br("invalid",e);break;case"textarea":oe(e,r),o=re(e,r),Br("invalid",e)}for(i in ye(n,o),u=o)if(u.hasOwnProperty(i)){var c=u[i];"style"===i?ge(e,c):"dangerouslySetInnerHTML"===i?null!=(c=c?c.__html:void 0)&&de(e,c):"children"===i?"string"==typeof c?("textarea"!==n||""!==c)&&fe(e,c):"number"==typeof c&&fe(e,""+c):"suppressContentEditableWarning"!==i&&"suppressHydrationWarning"!==i&&"autoFocus"!==i&&(l.hasOwnProperty(i)?null!=c&&"onScroll"===i&&Br("scroll",e):null!=c&&b(e,i,c,s))}switch(n){case"input":Z(e),J(e,r,!1);break;case"textarea":Z(e),ie(e);break;case"option":null!=r.value&&e.setAttribute("value",""+U(r.value));break;case"select":e.multiple=!!r.multiple,null!=(i=r.value)?ne(e,!!r.multiple,i,!1):null!=r.defaultValue&&ne(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof o.onClick&&(e.onclick=eo)}switch(n){case"button":case"input":case"select":case"textarea":r=!!r.autoFocus;break e;case"img":r=!0;break e;default:r=!1}}r&&(t.flags|=4)}null!==t.ref&&(t.flags|=512,t.flags|=2097152)}return Ql(t),null;case 6:if(e&&null!=t.stateNode)Fl(e,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(a(166));if(n=oi(ri.current),oi(ti.current),pa(t)){if(r=t.stateNode,n=t.memoizedProps,r[mo]=t,(i=r.nodeValue!==n)&&null!==(e=oa))switch(e.tag){case 3:Jr(r.nodeValue,n,0!=(1&e.mode));break;case 5:!0!==e.memoizedProps.suppressHydrationWarning&&Jr(r.nodeValue,n,0!=(1&e.mode))}i&&(t.flags|=4)}else(r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[mo]=t,t.stateNode=r}return Ql(t),null;case 13:if(Lo(ui),r=t.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(ia&&null!==aa&&0!=(1&t.mode)&&0==(128&t.flags))ma(),ha(),t.flags|=98560,i=!1;else if(i=pa(t),null!==r&&null!==r.dehydrated){if(null===e){if(!i)throw Error(a(318));if(!(i=null!==(i=t.memoizedState)?i.dehydrated:null))throw Error(a(317));i[mo]=t}else ha(),0==(128&t.flags)&&(t.memoizedState=null),t.flags|=4;Ql(t),i=!1}else null!==la&&(su(la),la=null),i=!0;if(!i)return 65536&t.flags?t:null}return 0!=(128&t.flags)?(t.lanes=n,t):((r=null!==r)!=(null!==e&&null!==e.memoizedState)&&r&&(t.child.flags|=8192,0!=(1&t.mode)&&(null===e||0!=(1&ui.current)?0===Fs&&(Fs=3):vu())),null!==t.updateQueue&&(t.flags|=4),Ql(t),null);case 4:return ii(),Rl(e,t),null===e&&$r(t.stateNode.containerInfo),Ql(t),null;case 10:return xa(t.type._context),Ql(t),null;case 19:if(Lo(ui),null===(i=t.memoizedState))return Ql(t),null;if(r=0!=(128&t.flags),null===(s=i.rendering))if(r)ql(i,!1);else{if(0!==Fs||null!==e&&0!=(128&e.flags))for(e=t.child;null!==e;){if(null!==(s=ci(e))){for(t.flags|=128,ql(i,!1),null!==(r=s.updateQueue)&&(t.updateQueue=r,t.flags|=4),t.subtreeFlags=0,r=n,n=t.child;null!==n;)e=r,(i=n).flags&=14680066,null===(s=i.alternate)?(i.childLanes=0,i.lanes=e,i.child=null,i.subtreeFlags=0,i.memoizedProps=null,i.memoizedState=null,i.updateQueue=null,i.dependencies=null,i.stateNode=null):(i.childLanes=s.childLanes,i.lanes=s.lanes,i.child=s.child,i.subtreeFlags=0,i.deletions=null,i.memoizedProps=s.memoizedProps,i.memoizedState=s.memoizedState,i.updateQueue=s.updateQueue,i.type=s.type,e=s.dependencies,i.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return Mo(ui,1&ui.current|2),t.child}e=e.sibling}null!==i.tail&&Ke()>Us&&(t.flags|=128,r=!0,ql(i,!1),t.lanes=4194304)}else{if(!r)if(null!==(e=ci(s))){if(t.flags|=128,r=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),ql(i,!0),null===i.tail&&"hidden"===i.tailMode&&!s.alternate&&!ia)return Ql(t),null}else 2*Ke()-i.renderingStartTime>Us&&1073741824!==n&&(t.flags|=128,r=!0,ql(i,!1),t.lanes=4194304);i.isBackwards?(s.sibling=t.child,t.child=s):(null!==(n=i.last)?n.sibling=s:t.child=s,i.last=s)}return null!==i.tail?(t=i.tail,i.rendering=t,i.tail=t.sibling,i.renderingStartTime=Ke(),t.sibling=null,n=ui.current,Mo(ui,r?1&n|2:1&n),t):(Ql(t),null);case 22:case 23:return pu(),r=null!==t.memoizedState,null!==e&&null!==e.memoizedState!==r&&(t.flags|=8192),r&&0!=(1&t.mode)?0!=(1073741824&Rs)&&(Ql(t),6&t.subtreeFlags&&(t.flags|=8192)):Ql(t),null;case 24:case 25:return null}throw Error(a(156,t.tag))}function Yl(e,t){switch(ra(t),t.tag){case 1:return Ro(t.type)&&jo(),65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 3:return ii(),Lo(No),Lo(To),fi(),0!=(65536&(e=t.flags))&&0==(128&e)?(t.flags=-65537&e|128,t):null;case 5:return si(t),null;case 13:if(Lo(ui),null!==(e=t.memoizedState)&&null!==e.dehydrated){if(null===t.alternate)throw Error(a(340));ha()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 19:return Lo(ui),null;case 4:return ii(),null;case 10:return xa(t.type._context),null;case 22:case 23:return pu(),null;default:return null}}Al=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Rl=function(){},jl=function(e,t,n,r){var o=e.memoizedProps;if(o!==r){e=t.stateNode,oi(ti.current);var a,i=null;switch(n){case"input":o=G(e,o),r=G(e,r),i=[];break;case"select":o=z({},o,{value:void 0}),r=z({},r,{value:void 0}),i=[];break;case"textarea":o=re(e,o),r=re(e,r),i=[];break;default:"function"!=typeof o.onClick&&"function"==typeof r.onClick&&(e.onclick=eo)}for(c in ye(n,r),n=null,o)if(!r.hasOwnProperty(c)&&o.hasOwnProperty(c)&&null!=o[c])if("style"===c){var s=o[c];for(a in s)s.hasOwnProperty(a)&&(n||(n={}),n[a]="")}else"dangerouslySetInnerHTML"!==c&&"children"!==c&&"suppressContentEditableWarning"!==c&&"suppressHydrationWarning"!==c&&"autoFocus"!==c&&(l.hasOwnProperty(c)?i||(i=[]):(i=i||[]).push(c,null));for(c in r){var u=r[c];if(s=null!=o?o[c]:void 0,r.hasOwnProperty(c)&&u!==s&&(null!=u||null!=s))if("style"===c)if(s){for(a in s)!s.hasOwnProperty(a)||u&&u.hasOwnProperty(a)||(n||(n={}),n[a]="");for(a in u)u.hasOwnProperty(a)&&s[a]!==u[a]&&(n||(n={}),n[a]=u[a])}else n||(i||(i=[]),i.push(c,n)),n=u;else"dangerouslySetInnerHTML"===c?(u=u?u.__html:void 0,s=s?s.__html:void 0,null!=u&&s!==u&&(i=i||[]).push(c,u)):"children"===c?"string"!=typeof u&&"number"!=typeof u||(i=i||[]).push(c,""+u):"suppressContentEditableWarning"!==c&&"suppressHydrationWarning"!==c&&(l.hasOwnProperty(c)?(null!=u&&"onScroll"===c&&Br("scroll",e),i||s===u||(i=[])):(i=i||[]).push(c,u))}n&&(i=i||[]).push("style",n);var c=i;(t.updateQueue=c)&&(t.flags|=4)}},Fl=function(e,t,n,r){n!==r&&(t.flags|=4)};var Kl=!1,Xl=!1,Jl="function"==typeof WeakSet?WeakSet:Set,es=null;function ts(e,t){var n=e.ref;if(null!==n)if("function"==typeof n)try{n(null)}catch(n){_u(e,t,n)}else n.current=null}function ns(e,t,n){try{n()}catch(n){_u(e,t,n)}}var rs=!1;function os(e,t,n){var r=t.updateQueue;if(null!==(r=null!==r?r.lastEffect:null)){var o=r=r.next;do{if((o.tag&e)===e){var a=o.destroy;o.destroy=void 0,void 0!==a&&ns(t,n,a)}o=o.next}while(o!==r)}}function as(e,t){if(null!==(t=null!==(t=t.updateQueue)?t.lastEffect:null)){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function is(e){var t=e.ref;if(null!==t){var n=e.stateNode;e.tag,e=n,"function"==typeof t?t(e):t.current=e}}function ls(e){var t=e.alternate;null!==t&&(e.alternate=null,ls(t)),e.child=null,e.deletions=null,e.sibling=null,5===e.tag&&null!==(t=e.stateNode)&&(delete t[mo],delete t[ho],delete t[vo],delete t[yo],delete t[bo]),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function ss(e){return 5===e.tag||3===e.tag||4===e.tag}function us(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||ss(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(2&e.flags)continue e;if(null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function cs(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=eo));else if(4!==r&&null!==(e=e.child))for(cs(e,t,n),e=e.sibling;null!==e;)cs(e,t,n),e=e.sibling}function ds(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(ds(e,t,n),e=e.sibling;null!==e;)ds(e,t,n),e=e.sibling}var fs=null,ps=!1;function ms(e,t,n){for(n=n.child;null!==n;)hs(e,t,n),n=n.sibling}function hs(e,t,n){if(at&&"function"==typeof at.onCommitFiberUnmount)try{at.onCommitFiberUnmount(ot,n)}catch(e){}switch(n.tag){case 5:Xl||ts(n,t);case 6:var r=fs,o=ps;fs=null,ms(e,t,n),ps=o,null!==(fs=r)&&(ps?(e=fs,n=n.stateNode,8===e.nodeType?e.parentNode.removeChild(n):e.removeChild(n)):fs.removeChild(n.stateNode));break;case 18:null!==fs&&(ps?(e=fs,n=n.stateNode,8===e.nodeType?uo(e.parentNode,n):1===e.nodeType&&uo(e,n),Wt(e)):uo(fs,n.stateNode));break;case 4:r=fs,o=ps,fs=n.stateNode.containerInfo,ps=!0,ms(e,t,n),fs=r,ps=o;break;case 0:case 11:case 14:case 15:if(!Xl&&null!==(r=n.updateQueue)&&null!==(r=r.lastEffect)){o=r=r.next;do{var a=o,i=a.destroy;a=a.tag,void 0!==i&&(0!=(2&a)||0!=(4&a))&&ns(n,t,i),o=o.next}while(o!==r)}ms(e,t,n);break;case 1:if(!Xl&&(ts(n,t),"function"==typeof(r=n.stateNode).componentWillUnmount))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(e){_u(n,t,e)}ms(e,t,n);break;case 21:ms(e,t,n);break;case 22:1&n.mode?(Xl=(r=Xl)||null!==n.memoizedState,ms(e,t,n),Xl=r):ms(e,t,n);break;default:ms(e,t,n)}}function gs(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new Jl),t.forEach((function(t){var r=Tu.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function vs(e,t){var n=t.deletions;if(null!==n)for(var r=0;r<n.length;r++){var o=n[r];try{var i=e,l=t,s=l;e:for(;null!==s;){switch(s.tag){case 5:fs=s.stateNode,ps=!1;break e;case 3:case 4:fs=s.stateNode.containerInfo,ps=!0;break e}s=s.return}if(null===fs)throw Error(a(160));hs(i,l,o),fs=null,ps=!1;var u=o.alternate;null!==u&&(u.return=null),o.return=null}catch(e){_u(o,t,e)}}if(12854&t.subtreeFlags)for(t=t.child;null!==t;)ys(t,e),t=t.sibling}function ys(e,t){var n=e.alternate,r=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(vs(t,e),bs(e),4&r){try{os(3,e,e.return),as(3,e)}catch(t){_u(e,e.return,t)}try{os(5,e,e.return)}catch(t){_u(e,e.return,t)}}break;case 1:vs(t,e),bs(e),512&r&&null!==n&&ts(n,n.return);break;case 5:if(vs(t,e),bs(e),512&r&&null!==n&&ts(n,n.return),32&e.flags){var o=e.stateNode;try{fe(o,"")}catch(t){_u(e,e.return,t)}}if(4&r&&null!=(o=e.stateNode)){var i=e.memoizedProps,l=null!==n?n.memoizedProps:i,s=e.type,u=e.updateQueue;if(e.updateQueue=null,null!==u)try{"input"===s&&"radio"===i.type&&null!=i.name&&K(o,i),be(s,l);var c=be(s,i);for(l=0;l<u.length;l+=2){var d=u[l],f=u[l+1];"style"===d?ge(o,f):"dangerouslySetInnerHTML"===d?de(o,f):"children"===d?fe(o,f):b(o,d,f,c)}switch(s){case"input":X(o,i);break;case"textarea":ae(o,i);break;case"select":var p=o._wrapperState.wasMultiple;o._wrapperState.wasMultiple=!!i.multiple;var m=i.value;null!=m?ne(o,!!i.multiple,m,!1):p!==!!i.multiple&&(null!=i.defaultValue?ne(o,!!i.multiple,i.defaultValue,!0):ne(o,!!i.multiple,i.multiple?[]:"",!1))}o[ho]=i}catch(t){_u(e,e.return,t)}}break;case 6:if(vs(t,e),bs(e),4&r){if(null===e.stateNode)throw Error(a(162));o=e.stateNode,i=e.memoizedProps;try{o.nodeValue=i}catch(t){_u(e,e.return,t)}}break;case 3:if(vs(t,e),bs(e),4&r&&null!==n&&n.memoizedState.isDehydrated)try{Wt(t.containerInfo)}catch(t){_u(e,e.return,t)}break;case 4:default:vs(t,e),bs(e);break;case 13:vs(t,e),bs(e),8192&(o=e.child).flags&&(i=null!==o.memoizedState,o.stateNode.isHidden=i,!i||null!==o.alternate&&null!==o.alternate.memoizedState||($s=Ke())),4&r&&gs(e);break;case 22:if(d=null!==n&&null!==n.memoizedState,1&e.mode?(Xl=(c=Xl)||d,vs(t,e),Xl=c):vs(t,e),bs(e),8192&r){if(c=null!==e.memoizedState,(e.stateNode.isHidden=c)&&!d&&0!=(1&e.mode))for(es=e,d=e.child;null!==d;){for(f=es=d;null!==es;){switch(m=(p=es).child,p.tag){case 0:case 11:case 14:case 15:os(4,p,p.return);break;case 1:ts(p,p.return);var h=p.stateNode;if("function"==typeof h.componentWillUnmount){r=p,n=p.return;try{t=r,h.props=t.memoizedProps,h.state=t.memoizedState,h.componentWillUnmount()}catch(e){_u(r,n,e)}}break;case 5:ts(p,p.return);break;case 22:if(null!==p.memoizedState){Cs(f);continue}}null!==m?(m.return=p,es=m):Cs(f)}d=d.sibling}e:for(d=null,f=e;;){if(5===f.tag){if(null===d){d=f;try{o=f.stateNode,c?"function"==typeof(i=o.style).setProperty?i.setProperty("display","none","important"):i.display="none":(s=f.stateNode,l=null!=(u=f.memoizedProps.style)&&u.hasOwnProperty("display")?u.display:null,s.style.display=he("display",l))}catch(t){_u(e,e.return,t)}}}else if(6===f.tag){if(null===d)try{f.stateNode.nodeValue=c?"":f.memoizedProps}catch(t){_u(e,e.return,t)}}else if((22!==f.tag&&23!==f.tag||null===f.memoizedState||f===e)&&null!==f.child){f.child.return=f,f=f.child;continue}if(f===e)break e;for(;null===f.sibling;){if(null===f.return||f.return===e)break e;d===f&&(d=null),f=f.return}d===f&&(d=null),f.sibling.return=f.return,f=f.sibling}}break;case 19:vs(t,e),bs(e),4&r&&gs(e);case 21:}}function bs(e){var t=e.flags;if(2&t){try{e:{for(var n=e.return;null!==n;){if(ss(n)){var r=n;break e}n=n.return}throw Error(a(160))}switch(r.tag){case 5:var o=r.stateNode;32&r.flags&&(fe(o,""),r.flags&=-33),ds(e,us(e),o);break;case 3:case 4:var i=r.stateNode.containerInfo;cs(e,us(e),i);break;default:throw Error(a(161))}}catch(t){_u(e,e.return,t)}e.flags&=-3}4096&t&&(e.flags&=-4097)}function Es(e,t,n){es=e,ks(e,t,n)}function ks(e,t,n){for(var r=0!=(1&e.mode);null!==es;){var o=es,a=o.child;if(22===o.tag&&r){var i=null!==o.memoizedState||Kl;if(!i){var l=o.alternate,s=null!==l&&null!==l.memoizedState||Xl;l=Kl;var u=Xl;if(Kl=i,(Xl=s)&&!u)for(es=o;null!==es;)s=(i=es).child,22===i.tag&&null!==i.memoizedState?xs(o):null!==s?(s.return=i,es=s):xs(o);for(;null!==a;)es=a,ks(a,t,n),a=a.sibling;es=o,Kl=l,Xl=u}ws(e)}else 0!=(8772&o.subtreeFlags)&&null!==a?(a.return=o,es=a):ws(e)}}function ws(e){for(;null!==es;){var t=es;if(0!=(8772&t.flags)){var n=t.alternate;try{if(0!=(8772&t.flags))switch(t.tag){case 0:case 11:case 15:Xl||as(5,t);break;case 1:var r=t.stateNode;if(4&t.flags&&!Xl)if(null===n)r.componentDidMount();else{var o=t.elementType===t.type?n.memoizedProps:ya(t.type,n.memoizedProps);r.componentDidUpdate(o,n.memoizedState,r.__reactInternalSnapshotBeforeUpdate)}var i=t.updateQueue;null!==i&&Ba(t,i,r);break;case 3:var l=t.updateQueue;if(null!==l){if(n=null,null!==t.child)switch(t.child.tag){case 5:case 1:n=t.child.stateNode}Ba(t,l,n)}break;case 5:var s=t.stateNode;if(null===n&&4&t.flags){n=s;var u=t.memoizedProps;switch(t.type){case"button":case"input":case"select":case"textarea":u.autoFocus&&n.focus();break;case"img":u.src&&(n.src=u.src)}}break;case 6:case 4:case 12:case 19:case 17:case 21:case 22:case 23:case 25:break;case 13:if(null===t.memoizedState){var c=t.alternate;if(null!==c){var d=c.memoizedState;if(null!==d){var f=d.dehydrated;null!==f&&Wt(f)}}}break;default:throw Error(a(163))}Xl||512&t.flags&&is(t)}catch(e){_u(t,t.return,e)}}if(t===e){es=null;break}if(null!==(n=t.sibling)){n.return=t.return,es=n;break}es=t.return}}function Cs(e){for(;null!==es;){var t=es;if(t===e){es=null;break}var n=t.sibling;if(null!==n){n.return=t.return,es=n;break}es=t.return}}function xs(e){for(;null!==es;){var t=es;try{switch(t.tag){case 0:case 11:case 15:var n=t.return;try{as(4,t)}catch(e){_u(t,n,e)}break;case 1:var r=t.stateNode;if("function"==typeof r.componentDidMount){var o=t.return;try{r.componentDidMount()}catch(e){_u(t,o,e)}}var a=t.return;try{is(t)}catch(e){_u(t,a,e)}break;case 5:var i=t.return;try{is(t)}catch(e){_u(t,i,e)}}}catch(e){_u(t,t.return,e)}if(t===e){es=null;break}var l=t.sibling;if(null!==l){l.return=t.return,es=l;break}es=t.return}}var Ss,_s=Math.ceil,Ls=E.ReactCurrentDispatcher,Ms=E.ReactCurrentOwner,Ps=E.ReactCurrentBatchConfig,Ts=0,Ns=null,Os=null,As=0,Rs=0,js=_o(0),Fs=0,zs=null,Is=0,Hs=0,Bs=0,Ds=null,Ws=null,$s=0,Us=1/0,Vs=null,Zs=!1,qs=null,Qs=null,Gs=!1,Ys=null,Ks=0,Xs=0,Js=null,eu=-1,tu=0;function nu(){return 0!=(6&Ts)?Ke():-1!==eu?eu:eu=Ke()}function ru(e){return 0==(1&e.mode)?1:0!=(2&Ts)&&0!==As?As&-As:null!==va.transition?(0===tu&&(tu=ht()),tu):0!==(e=bt)?e:e=void 0===(e=window.event)?16:Yt(e.type)}function ou(e,t,n,r){if(50<Xs)throw Xs=0,Js=null,Error(a(185));vt(e,n,r),0!=(2&Ts)&&e===Ns||(e===Ns&&(0==(2&Ts)&&(Hs|=n),4===Fs&&uu(e,As)),au(e,r),1===n&&0===Ts&&0==(1&t.mode)&&(Us=Ke()+500,Do&&Uo()))}function au(e,t){var n=e.callbackNode;!function(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,o=e.expirationTimes,a=e.pendingLanes;0<a;){var i=31-it(a),l=1<<i,s=o[i];-1===s?0!=(l&n)&&0==(l&r)||(o[i]=pt(l,t)):s<=t&&(e.expiredLanes|=l),a&=~l}}(e,t);var r=ft(e,e===Ns?As:0);if(0===r)null!==n&&Qe(n),e.callbackNode=null,e.callbackPriority=0;else if(t=r&-r,e.callbackPriority!==t){if(null!=n&&Qe(n),1===t)0===e.tag?function(e){Do=!0,$o(e)}(cu.bind(null,e)):$o(cu.bind(null,e)),lo((function(){0==(6&Ts)&&Uo()})),n=null;else{switch(Et(r)){case 1:n=Je;break;case 4:n=et;break;case 16:default:n=tt;break;case 536870912:n=rt}n=Nu(n,iu.bind(null,e))}e.callbackPriority=t,e.callbackNode=n}}function iu(e,t){if(eu=-1,tu=0,0!=(6&Ts))throw Error(a(327));var n=e.callbackNode;if(xu()&&e.callbackNode!==n)return null;var r=ft(e,e===Ns?As:0);if(0===r)return null;if(0!=(30&r)||0!=(r&e.expiredLanes)||t)t=yu(e,r);else{t=r;var o=Ts;Ts|=2;var i=gu();for(Ns===e&&As===t||(Vs=null,Us=Ke()+500,mu(e,t));;)try{Eu();break}catch(t){hu(e,t)}Ca(),Ls.current=i,Ts=o,null!==Os?t=0:(Ns=null,As=0,t=Fs)}if(0!==t){if(2===t&&0!==(o=mt(e))&&(r=o,t=lu(e,o)),1===t)throw n=zs,mu(e,0),uu(e,r),au(e,Ke()),n;if(6===t)uu(e,r);else{if(o=e.current.alternate,0==(30&r)&&!function(e){for(var t=e;;){if(16384&t.flags){var n=t.updateQueue;if(null!==n&&null!==(n=n.stores))for(var r=0;r<n.length;r++){var o=n[r],a=o.getSnapshot;o=o.value;try{if(!sr(a(),o))return!1}catch(e){return!1}}}if(n=t.child,16384&t.subtreeFlags&&null!==n)n.return=t,t=n;else{if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}(o)&&(2===(t=yu(e,r))&&0!==(i=mt(e))&&(r=i,t=lu(e,i)),1===t))throw n=zs,mu(e,0),uu(e,r),au(e,Ke()),n;switch(e.finishedWork=o,e.finishedLanes=r,t){case 0:case 1:throw Error(a(345));case 2:case 5:Cu(e,Ws,Vs);break;case 3:if(uu(e,r),(130023424&r)===r&&10<(t=$s+500-Ke())){if(0!==ft(e,0))break;if(((o=e.suspendedLanes)&r)!==r){nu(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=oo(Cu.bind(null,e,Ws,Vs),t);break}Cu(e,Ws,Vs);break;case 4:if(uu(e,r),(4194240&r)===r)break;for(t=e.eventTimes,o=-1;0<r;){var l=31-it(r);i=1<<l,(l=t[l])>o&&(o=l),r&=~i}if(r=o,10<(r=(120>(r=Ke()-r)?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*_s(r/1960))-r)){e.timeoutHandle=oo(Cu.bind(null,e,Ws,Vs),r);break}Cu(e,Ws,Vs);break;default:throw Error(a(329))}}}return au(e,Ke()),e.callbackNode===n?iu.bind(null,e):null}function lu(e,t){var n=Ds;return e.current.memoizedState.isDehydrated&&(mu(e,t).flags|=256),2!==(e=yu(e,t))&&(t=Ws,Ws=n,null!==t&&su(t)),e}function su(e){null===Ws?Ws=e:Ws.push.apply(Ws,e)}function uu(e,t){for(t&=~Bs,t&=~Hs,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-it(t),r=1<<n;e[n]=-1,t&=~r}}function cu(e){if(0!=(6&Ts))throw Error(a(327));xu();var t=ft(e,0);if(0==(1&t))return au(e,Ke()),null;var n=yu(e,t);if(0!==e.tag&&2===n){var r=mt(e);0!==r&&(t=r,n=lu(e,r))}if(1===n)throw n=zs,mu(e,0),uu(e,t),au(e,Ke()),n;if(6===n)throw Error(a(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,Cu(e,Ws,Vs),au(e,Ke()),null}function du(e,t){var n=Ts;Ts|=1;try{return e(t)}finally{0===(Ts=n)&&(Us=Ke()+500,Do&&Uo())}}function fu(e){null!==Ys&&0===Ys.tag&&0==(6&Ts)&&xu();var t=Ts;Ts|=1;var n=Ps.transition,r=bt;try{if(Ps.transition=null,bt=1,e)return e()}finally{bt=r,Ps.transition=n,0==(6&(Ts=t))&&Uo()}}function pu(){Rs=js.current,Lo(js)}function mu(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,ao(n)),null!==Os)for(n=Os.return;null!==n;){var r=n;switch(ra(r),r.tag){case 1:null!=(r=r.type.childContextTypes)&&jo();break;case 3:ii(),Lo(No),Lo(To),fi();break;case 5:si(r);break;case 4:ii();break;case 13:case 19:Lo(ui);break;case 10:xa(r.type._context);break;case 22:case 23:pu()}n=n.return}if(Ns=e,Os=e=ju(e.current,null),As=Rs=t,Fs=0,zs=null,Bs=Hs=Is=0,Ws=Ds=null,null!==Ma){for(t=0;t<Ma.length;t++)if(null!==(r=(n=Ma[t]).interleaved)){n.interleaved=null;var o=r.next,a=n.pending;if(null!==a){var i=a.next;a.next=o,r.next=i}n.pending=r}Ma=null}return e}function hu(e,t){for(;;){var n=Os;try{if(Ca(),pi.current=ll,bi){for(var r=gi.memoizedState;null!==r;){var o=r.queue;null!==o&&(o.pending=null),r=r.next}bi=!1}if(hi=0,yi=vi=gi=null,Ei=!1,ki=0,Ms.current=null,null===n||null===n.return){Fs=1,zs=t,Os=null;break}e:{var i=e,l=n.return,s=n,u=t;if(t=As,s.flags|=32768,null!==u&&"object"==typeof u&&"function"==typeof u.then){var c=u,d=s,f=d.tag;if(0==(1&d.mode)&&(0===f||11===f||15===f)){var p=d.alternate;p?(d.updateQueue=p.updateQueue,d.memoizedState=p.memoizedState,d.lanes=p.lanes):(d.updateQueue=null,d.memoizedState=null)}var m=yl(l);if(null!==m){m.flags&=-257,bl(m,l,s,0,t),1&m.mode&&vl(i,c,t),u=c;var h=(t=m).updateQueue;if(null===h){var g=new Set;g.add(u),t.updateQueue=g}else h.add(u);break e}if(0==(1&t)){vl(i,c,t),vu();break e}u=Error(a(426))}else if(ia&&1&s.mode){var v=yl(l);if(null!==v){0==(65536&v.flags)&&(v.flags|=256),bl(v,l,s,0,t),ga(dl(u,s));break e}}i=u=dl(u,s),4!==Fs&&(Fs=2),null===Ds?Ds=[i]:Ds.push(i),i=l;do{switch(i.tag){case 3:i.flags|=65536,t&=-t,i.lanes|=t,Ia(i,hl(0,u,t));break e;case 1:s=u;var y=i.type,b=i.stateNode;if(0==(128&i.flags)&&("function"==typeof y.getDerivedStateFromError||null!==b&&"function"==typeof b.componentDidCatch&&(null===Qs||!Qs.has(b)))){i.flags|=65536,t&=-t,i.lanes|=t,Ia(i,gl(i,s,t));break e}}i=i.return}while(null!==i)}wu(n)}catch(e){t=e,Os===n&&null!==n&&(Os=n=n.return);continue}break}}function gu(){var e=Ls.current;return Ls.current=ll,null===e?ll:e}function vu(){0!==Fs&&3!==Fs&&2!==Fs||(Fs=4),null===Ns||0==(268435455&Is)&&0==(268435455&Hs)||uu(Ns,As)}function yu(e,t){var n=Ts;Ts|=2;var r=gu();for(Ns===e&&As===t||(Vs=null,mu(e,t));;)try{bu();break}catch(t){hu(e,t)}if(Ca(),Ts=n,Ls.current=r,null!==Os)throw Error(a(261));return Ns=null,As=0,Fs}function bu(){for(;null!==Os;)ku(Os)}function Eu(){for(;null!==Os&&!Ge();)ku(Os)}function ku(e){var t=Ss(e.alternate,e,Rs);e.memoizedProps=e.pendingProps,null===t?wu(e):Os=t,Ms.current=null}function wu(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(32768&t.flags)){if(null!==(n=Gl(n,t,Rs)))return void(Os=n)}else{if(null!==(n=Yl(n,t)))return n.flags&=32767,void(Os=n);if(null===e)return Fs=6,void(Os=null);e.flags|=32768,e.subtreeFlags=0,e.deletions=null}if(null!==(t=t.sibling))return void(Os=t);Os=t=e}while(null!==t);0===Fs&&(Fs=5)}function Cu(e,t,n){var r=bt,o=Ps.transition;try{Ps.transition=null,bt=1,function(e,t,n,r){do{xu()}while(null!==Ys);if(0!=(6&Ts))throw Error(a(327));n=e.finishedWork;var o=e.finishedLanes;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(a(177));e.callbackNode=null,e.callbackPriority=0;var i=n.lanes|n.childLanes;if(function(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0<n;){var o=31-it(n),a=1<<o;t[o]=0,r[o]=-1,e[o]=-1,n&=~a}}(e,i),e===Ns&&(Os=Ns=null,As=0),0==(2064&n.subtreeFlags)&&0==(2064&n.flags)||Gs||(Gs=!0,Nu(tt,(function(){return xu(),null}))),i=0!=(15990&n.flags),0!=(15990&n.subtreeFlags)||i){i=Ps.transition,Ps.transition=null;var l=bt;bt=1;var s=Ts;Ts|=4,Ms.current=null,function(e,t){if(to=Ut,mr(e=pr())){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{var r=(n=(n=e.ownerDocument)&&n.defaultView||window).getSelection&&n.getSelection();if(r&&0!==r.rangeCount){n=r.anchorNode;var o=r.anchorOffset,i=r.focusNode;r=r.focusOffset;try{n.nodeType,i.nodeType}catch(e){n=null;break e}var l=0,s=-1,u=-1,c=0,d=0,f=e,p=null;t:for(;;){for(var m;f!==n||0!==o&&3!==f.nodeType||(s=l+o),f!==i||0!==r&&3!==f.nodeType||(u=l+r),3===f.nodeType&&(l+=f.nodeValue.length),null!==(m=f.firstChild);)p=f,f=m;for(;;){if(f===e)break t;if(p===n&&++c===o&&(s=l),p===i&&++d===r&&(u=l),null!==(m=f.nextSibling))break;p=(f=p).parentNode}f=m}n=-1===s||-1===u?null:{start:s,end:u}}else n=null}n=n||{start:0,end:0}}else n=null;for(no={focusedElem:e,selectionRange:n},Ut=!1,es=t;null!==es;)if(e=(t=es).child,0!=(1028&t.subtreeFlags)&&null!==e)e.return=t,es=e;else for(;null!==es;){t=es;try{var h=t.alternate;if(0!=(1024&t.flags))switch(t.tag){case 0:case 11:case 15:case 5:case 6:case 4:case 17:break;case 1:if(null!==h){var g=h.memoizedProps,v=h.memoizedState,y=t.stateNode,b=y.getSnapshotBeforeUpdate(t.elementType===t.type?g:ya(t.type,g),v);y.__reactInternalSnapshotBeforeUpdate=b}break;case 3:var E=t.stateNode.containerInfo;1===E.nodeType?E.textContent="":9===E.nodeType&&E.documentElement&&E.removeChild(E.documentElement);break;default:throw Error(a(163))}}catch(e){_u(t,t.return,e)}if(null!==(e=t.sibling)){e.return=t.return,es=e;break}es=t.return}h=rs,rs=!1}(e,n),ys(n,e),hr(no),Ut=!!to,no=to=null,e.current=n,Es(n,e,o),Ye(),Ts=s,bt=l,Ps.transition=i}else e.current=n;if(Gs&&(Gs=!1,Ys=e,Ks=o),0===(i=e.pendingLanes)&&(Qs=null),function(e){if(at&&"function"==typeof at.onCommitFiberRoot)try{at.onCommitFiberRoot(ot,e,void 0,128==(128&e.current.flags))}catch(e){}}(n.stateNode),au(e,Ke()),null!==t)for(r=e.onRecoverableError,n=0;n<t.length;n++)r((o=t[n]).value,{componentStack:o.stack,digest:o.digest});if(Zs)throw Zs=!1,e=qs,qs=null,e;0!=(1&Ks)&&0!==e.tag&&xu(),0!=(1&(i=e.pendingLanes))?e===Js?Xs++:(Xs=0,Js=e):Xs=0,Uo()}(e,t,n,r)}finally{Ps.transition=o,bt=r}return null}function xu(){if(null!==Ys){var e=Et(Ks),t=Ps.transition,n=bt;try{if(Ps.transition=null,bt=16>e?16:e,null===Ys)var r=!1;else{if(e=Ys,Ys=null,Ks=0,0!=(6&Ts))throw Error(a(331));var o=Ts;for(Ts|=4,es=e.current;null!==es;){var i=es,l=i.child;if(0!=(16&es.flags)){var s=i.deletions;if(null!==s){for(var u=0;u<s.length;u++){var c=s[u];for(es=c;null!==es;){var d=es;switch(d.tag){case 0:case 11:case 15:os(8,d,i)}var f=d.child;if(null!==f)f.return=d,es=f;else for(;null!==es;){var p=(d=es).sibling,m=d.return;if(ls(d),d===c){es=null;break}if(null!==p){p.return=m,es=p;break}es=m}}}var h=i.alternate;if(null!==h){var g=h.child;if(null!==g){h.child=null;do{var v=g.sibling;g.sibling=null,g=v}while(null!==g)}}es=i}}if(0!=(2064&i.subtreeFlags)&&null!==l)l.return=i,es=l;else e:for(;null!==es;){if(0!=(2048&(i=es).flags))switch(i.tag){case 0:case 11:case 15:os(9,i,i.return)}var y=i.sibling;if(null!==y){y.return=i.return,es=y;break e}es=i.return}}var b=e.current;for(es=b;null!==es;){var E=(l=es).child;if(0!=(2064&l.subtreeFlags)&&null!==E)E.return=l,es=E;else e:for(l=b;null!==es;){if(0!=(2048&(s=es).flags))try{switch(s.tag){case 0:case 11:case 15:as(9,s)}}catch(e){_u(s,s.return,e)}if(s===l){es=null;break e}var k=s.sibling;if(null!==k){k.return=s.return,es=k;break e}es=s.return}}if(Ts=o,Uo(),at&&"function"==typeof at.onPostCommitFiberRoot)try{at.onPostCommitFiberRoot(ot,e)}catch(e){}r=!0}return r}finally{bt=n,Ps.transition=t}}return!1}function Su(e,t,n){e=Fa(e,t=hl(0,t=dl(n,t),1),1),t=nu(),null!==e&&(vt(e,1,t),au(e,t))}function _u(e,t,n){if(3===e.tag)Su(e,e,n);else for(;null!==t;){if(3===t.tag){Su(t,e,n);break}if(1===t.tag){var r=t.stateNode;if("function"==typeof t.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Qs||!Qs.has(r))){t=Fa(t,e=gl(t,e=dl(n,e),1),1),e=nu(),null!==t&&(vt(t,1,e),au(t,e));break}}t=t.return}}function Lu(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=nu(),e.pingedLanes|=e.suspendedLanes&n,Ns===e&&(As&n)===n&&(4===Fs||3===Fs&&(130023424&As)===As&&500>Ke()-$s?mu(e,0):Bs|=n),au(e,t)}function Mu(e,t){0===t&&(0==(1&e.mode)?t=1:(t=ct,0==(130023424&(ct<<=1))&&(ct=4194304)));var n=nu();null!==(e=Na(e,t))&&(vt(e,t,n),au(e,n))}function Pu(e){var t=e.memoizedState,n=0;null!==t&&(n=t.retryLane),Mu(e,n)}function Tu(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,o=e.memoizedState;null!==o&&(n=o.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(a(314))}null!==r&&r.delete(t),Mu(e,n)}function Nu(e,t){return qe(e,t)}function Ou(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Au(e,t,n,r){return new Ou(e,t,n,r)}function Ru(e){return!(!(e=e.prototype)||!e.isReactComponent)}function ju(e,t){var n=e.alternate;return null===n?((n=Au(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=14680064&e.flags,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Fu(e,t,n,r,o,i){var l=2;if(r=e,"function"==typeof e)Ru(e)&&(l=1);else if("string"==typeof e)l=5;else e:switch(e){case C:return zu(n.children,o,i,t);case x:l=8,o|=8;break;case S:return(e=Au(12,n,t,2|o)).elementType=S,e.lanes=i,e;case P:return(e=Au(13,n,t,o)).elementType=P,e.lanes=i,e;case T:return(e=Au(19,n,t,o)).elementType=T,e.lanes=i,e;case A:return Iu(n,o,i,t);default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case _:l=10;break e;case L:l=9;break e;case M:l=11;break e;case N:l=14;break e;case O:l=16,r=null;break e}throw Error(a(130,null==e?e:typeof e,""))}return(t=Au(l,n,t,o)).elementType=e,t.type=r,t.lanes=i,t}function zu(e,t,n,r){return(e=Au(7,e,r,t)).lanes=n,e}function Iu(e,t,n,r){return(e=Au(22,e,r,t)).elementType=A,e.lanes=n,e.stateNode={isHidden:!1},e}function Hu(e,t,n){return(e=Au(6,e,null,t)).lanes=n,e}function Bu(e,t,n){return(t=Au(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Du(e,t,n,r,o){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=gt(0),this.expirationTimes=gt(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=gt(0),this.identifierPrefix=r,this.onRecoverableError=o,this.mutableSourceEagerHydrationData=null}function Wu(e,t,n,r,o,a,i,l,s){return e=new Du(e,t,n,l,s),1===t?(t=1,!0===a&&(t|=8)):t=0,a=Au(3,null,null,t),e.current=a,a.stateNode=e,a.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Aa(a),e}function $u(e){if(!e)return Po;e:{if(We(e=e._reactInternals)!==e||1!==e.tag)throw Error(a(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(Ro(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(null!==t);throw Error(a(171))}if(1===e.tag){var n=e.type;if(Ro(n))return zo(e,n,t)}return t}function Uu(e,t,n,r,o,a,i,l,s){return(e=Wu(n,r,!0,e,0,a,0,l,s)).context=$u(null),n=e.current,(a=ja(r=nu(),o=ru(n))).callback=null!=t?t:null,Fa(n,a,o),e.current.lanes=o,vt(e,o,r),au(e,r),e}function Vu(e,t,n,r){var o=t.current,a=nu(),i=ru(o);return n=$u(n),null===t.context?t.context=n:t.pendingContext=n,(t=ja(a,i)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),null!==(e=Fa(o,t,i))&&(ou(e,o,i,a),za(e,o,i)),i}function Zu(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function qu(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function Qu(e,t){qu(e,t),(e=e.alternate)&&qu(e,t)}Ss=function(e,t,n){if(null!==e)if(e.memoizedProps!==t.pendingProps||No.current)kl=!0;else{if(0==(e.lanes&n)&&0==(128&t.flags))return kl=!1,function(e,t,n){switch(t.tag){case 3:Nl(t),ha();break;case 5:li(t);break;case 1:Ro(t.type)&&Io(t);break;case 4:ai(t,t.stateNode.containerInfo);break;case 10:var r=t.type._context,o=t.memoizedProps.value;Mo(ba,r._currentValue),r._currentValue=o;break;case 13:if(null!==(r=t.memoizedState))return null!==r.dehydrated?(Mo(ui,1&ui.current),t.flags|=128,null):0!=(n&t.child.childLanes)?Hl(e,t,n):(Mo(ui,1&ui.current),null!==(e=Zl(e,t,n))?e.sibling:null);Mo(ui,1&ui.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(128&e.flags)){if(r)return Ul(e,t,n);t.flags|=128}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),Mo(ui,ui.current),r)break;return null;case 22:case 23:return t.lanes=0,_l(e,t,n)}return Zl(e,t,n)}(e,t,n);kl=0!=(131072&e.flags)}else kl=!1,ia&&0!=(1048576&t.flags)&&ta(t,Qo,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Vl(e,t),e=t.pendingProps;var o=Ao(t,To.current);_a(t,n),o=Si(null,t,r,e,o,n);var i=_i();return t.flags|=1,"object"==typeof o&&null!==o&&"function"==typeof o.render&&void 0===o.$$typeof?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Ro(r)?(i=!0,Io(t)):i=!1,t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,Aa(t),o.updater=$a,t.stateNode=o,o._reactInternals=t,qa(t,r,e,n),t=Tl(null,t,r,!0,i,n)):(t.tag=0,ia&&i&&na(t),wl(null,t,o,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Vl(e,t),e=t.pendingProps,r=(o=r._init)(r._payload),t.type=r,o=t.tag=function(e){if("function"==typeof e)return Ru(e)?1:0;if(null!=e){if((e=e.$$typeof)===M)return 11;if(e===N)return 14}return 2}(r),e=ya(r,e),o){case 0:t=Ml(null,t,r,e,n);break e;case 1:t=Pl(null,t,r,e,n);break e;case 11:t=Cl(null,t,r,e,n);break e;case 14:t=xl(null,t,r,ya(r.type,e),n);break e}throw Error(a(306,r,""))}return t;case 0:return r=t.type,o=t.pendingProps,Ml(e,t,r,o=t.elementType===r?o:ya(r,o),n);case 1:return r=t.type,o=t.pendingProps,Pl(e,t,r,o=t.elementType===r?o:ya(r,o),n);case 3:e:{if(Nl(t),null===e)throw Error(a(387));r=t.pendingProps,o=(i=t.memoizedState).element,Ra(e,t),Ha(t,r,null,n);var l=t.memoizedState;if(r=l.element,i.isDehydrated){if(i={element:r,isDehydrated:!1,cache:l.cache,pendingSuspenseBoundaries:l.pendingSuspenseBoundaries,transitions:l.transitions},t.updateQueue.baseState=i,t.memoizedState=i,256&t.flags){t=Ol(e,t,r,n,o=dl(Error(a(423)),t));break e}if(r!==o){t=Ol(e,t,r,n,o=dl(Error(a(424)),t));break e}for(aa=co(t.stateNode.containerInfo.firstChild),oa=t,ia=!0,la=null,n=Ja(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|4096,n=n.sibling}else{if(ha(),r===o){t=Zl(e,t,n);break e}wl(e,t,r,n)}t=t.child}return t;case 5:return li(t),null===e&&da(t),r=t.type,o=t.pendingProps,i=null!==e?e.memoizedProps:null,l=o.children,ro(r,o)?l=null:null!==i&&ro(r,i)&&(t.flags|=32),Ll(e,t),wl(e,t,l,n),t.child;case 6:return null===e&&da(t),null;case 13:return Hl(e,t,n);case 4:return ai(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=Xa(t,null,r,n):wl(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,Cl(e,t,r,o=t.elementType===r?o:ya(r,o),n);case 7:return wl(e,t,t.pendingProps,n),t.child;case 8:case 12:return wl(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,o=t.pendingProps,i=t.memoizedProps,l=o.value,Mo(ba,r._currentValue),r._currentValue=l,null!==i)if(sr(i.value,l)){if(i.children===o.children&&!No.current){t=Zl(e,t,n);break e}}else for(null!==(i=t.child)&&(i.return=t);null!==i;){var s=i.dependencies;if(null!==s){l=i.child;for(var u=s.firstContext;null!==u;){if(u.context===r){if(1===i.tag){(u=ja(-1,n&-n)).tag=2;var c=i.updateQueue;if(null!==c){var d=(c=c.shared).pending;null===d?u.next=u:(u.next=d.next,d.next=u),c.pending=u}}i.lanes|=n,null!==(u=i.alternate)&&(u.lanes|=n),Sa(i.return,n,t),s.lanes|=n;break}u=u.next}}else if(10===i.tag)l=i.type===t.type?null:i.child;else if(18===i.tag){if(null===(l=i.return))throw Error(a(341));l.lanes|=n,null!==(s=l.alternate)&&(s.lanes|=n),Sa(l,n,t),l=i.sibling}else l=i.child;if(null!==l)l.return=i;else for(l=i;null!==l;){if(l===t){l=null;break}if(null!==(i=l.sibling)){i.return=l.return,l=i;break}l=l.return}i=l}wl(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=t.pendingProps.children,_a(t,n),r=r(o=La(o)),t.flags|=1,wl(e,t,r,n),t.child;case 14:return o=ya(r=t.type,t.pendingProps),xl(e,t,r,o=ya(r.type,o),n);case 15:return Sl(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:ya(r,o),Vl(e,t),t.tag=1,Ro(r)?(e=!0,Io(t)):e=!1,_a(t,n),Va(t,r,o),qa(t,r,o,n),Tl(null,t,r,!0,e,n);case 19:return Ul(e,t,n);case 22:return _l(e,t,n)}throw Error(a(156,t.tag))};var Gu="function"==typeof reportError?reportError:function(e){console.error(e)};function Yu(e){this._internalRoot=e}function Ku(e){this._internalRoot=e}function Xu(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType)}function Ju(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function ec(){}function tc(e,t,n,r,o){var a=n._reactRootContainer;if(a){var i=a;if("function"==typeof o){var l=o;o=function(){var e=Zu(i);l.call(e)}}Vu(t,i,e,o)}else i=function(e,t,n,r,o){if(o){if("function"==typeof r){var a=r;r=function(){var e=Zu(i);a.call(e)}}var i=Uu(t,r,e,0,null,!1,0,"",ec);return e._reactRootContainer=i,e[go]=i.current,$r(8===e.nodeType?e.parentNode:e),fu(),i}for(;o=e.lastChild;)e.removeChild(o);if("function"==typeof r){var l=r;r=function(){var e=Zu(s);l.call(e)}}var s=Wu(e,0,!1,null,0,!1,0,"",ec);return e._reactRootContainer=s,e[go]=s.current,$r(8===e.nodeType?e.parentNode:e),fu((function(){Vu(t,s,n,r)})),s}(n,t,e,o,r);return Zu(i)}Ku.prototype.render=Yu.prototype.render=function(e){var t=this._internalRoot;if(null===t)throw Error(a(409));Vu(e,t,null,null)},Ku.prototype.unmount=Yu.prototype.unmount=function(){var e=this._internalRoot;if(null!==e){this._internalRoot=null;var t=e.containerInfo;fu((function(){Vu(null,e,null,null)})),t[go]=null}},Ku.prototype.unstable_scheduleHydration=function(e){if(e){var t=xt();e={blockedOn:null,target:e,priority:t};for(var n=0;n<At.length&&0!==t&&t<At[n].priority;n++);At.splice(n,0,e),0===n&&zt(e)}},kt=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var n=dt(t.pendingLanes);0!==n&&(yt(t,1|n),au(t,Ke()),0==(6&Ts)&&(Us=Ke()+500,Uo()))}break;case 13:fu((function(){var t=Na(e,1);if(null!==t){var n=nu();ou(t,e,1,n)}})),Qu(e,1)}},wt=function(e){if(13===e.tag){var t=Na(e,134217728);null!==t&&ou(t,e,134217728,nu()),Qu(e,134217728)}},Ct=function(e){if(13===e.tag){var t=ru(e),n=Na(e,t);null!==n&&ou(n,e,t,nu()),Qu(e,t)}},xt=function(){return bt},St=function(e,t){var n=bt;try{return bt=e,t()}finally{bt=n}},we=function(e,t,n){switch(t){case"input":if(X(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=Co(r);if(!o)throw Error(a(90));q(r),X(r,o)}}}break;case"textarea":ae(e,n);break;case"select":null!=(t=n.value)&&ne(e,!!n.multiple,t,!1)}},Me=du,Pe=fu;var nc={usingClientEntryPoint:!1,Events:[ko,wo,Co,_e,Le,du]},rc={findFiberByHostInstance:Eo,bundleType:0,version:"18.2.0",rendererPackageName:"react-dom"},oc={bundleType:rc.bundleType,version:rc.version,rendererPackageName:rc.rendererPackageName,rendererConfig:rc.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:E.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Ve(e))?null:e.stateNode},findFiberByHostInstance:rc.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.2.0-next-9e3b772b8-20220608"};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var ac=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!ac.isDisabled&&ac.supportsFiber)try{ot=ac.inject(oc),at=ac}catch(ce){}}t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=nc,t.createPortal=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!Xu(t))throw Error(a(200));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:w,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)},t.createRoot=function(e,t){if(!Xu(e))throw Error(a(299));var n=!1,r="",o=Gu;return null!=t&&(!0===t.unstable_strictMode&&(n=!0),void 0!==t.identifierPrefix&&(r=t.identifierPrefix),void 0!==t.onRecoverableError&&(o=t.onRecoverableError)),t=Wu(e,1,!1,null,0,n,0,r,o),e[go]=t.current,$r(8===e.nodeType?e.parentNode:e),new Yu(t)},t.findDOMNode=function(e){if(null==e)return null;if(1===e.nodeType)return e;var t=e._reactInternals;if(void 0===t){if("function"==typeof e.render)throw Error(a(188));throw e=Object.keys(e).join(","),Error(a(268,e))}return null===(e=Ve(t))?null:e.stateNode},t.flushSync=function(e){return fu(e)},t.hydrate=function(e,t,n){if(!Ju(t))throw Error(a(200));return tc(null,e,t,!0,n)},t.hydrateRoot=function(e,t,n){if(!Xu(e))throw Error(a(405));var r=null!=n&&n.hydratedSources||null,o=!1,i="",l=Gu;if(null!=n&&(!0===n.unstable_strictMode&&(o=!0),void 0!==n.identifierPrefix&&(i=n.identifierPrefix),void 0!==n.onRecoverableError&&(l=n.onRecoverableError)),t=Uu(t,null,e,1,null!=n?n:null,o,0,i,l),e[go]=t.current,$r(e),r)for(e=0;e<r.length;e++)o=(o=(n=r[e])._getVersion)(n._source),null==t.mutableSourceEagerHydrationData?t.mutableSourceEagerHydrationData=[n,o]:t.mutableSourceEagerHydrationData.push(n,o);return new Ku(t)},t.render=function(e,t,n){if(!Ju(t))throw Error(a(200));return tc(null,e,t,!1,n)},t.unmountComponentAtNode=function(e){if(!Ju(e))throw Error(a(40));return!!e._reactRootContainer&&(fu((function(){tc(null,null,e,!1,(function(){e._reactRootContainer=null,e[go]=null}))})),!0)},t.unstable_batchedUpdates=du,t.unstable_renderSubtreeIntoContainer=function(e,t,n,r){if(!Ju(n))throw Error(a(200));if(null==e||void 0===e._reactInternals)throw Error(a(38));return tc(e,t,n,!1,r)},t.version="18.2.0-next-9e3b772b8-20220608"},745:(e,t,n)=>{"use strict";var r=n(935);t.s=r.createRoot,r.hydrateRoot},935:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(e){console.error(e)}}(),e.exports=n(448)},251:(e,t,n)=>{"use strict";var r=n(294),o=Symbol.for("react.element"),a=Symbol.for("react.fragment"),i=Object.prototype.hasOwnProperty,l=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,s={key:!0,ref:!0,__self:!0,__source:!0};function u(e,t,n){var r,a={},u=null,c=null;for(r in void 0!==n&&(u=""+n),void 0!==t.key&&(u=""+t.key),void 0!==t.ref&&(c=t.ref),t)i.call(t,r)&&!s.hasOwnProperty(r)&&(a[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===a[r]&&(a[r]=t[r]);return{$$typeof:o,type:e,key:u,ref:c,props:a,_owner:l.current}}t.Fragment=a,t.jsx=u,t.jsxs=u},408:(e,t)=>{"use strict";var n=Symbol.for("react.element"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),l=Symbol.for("react.provider"),s=Symbol.for("react.context"),u=Symbol.for("react.forward_ref"),c=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),f=Symbol.for("react.lazy"),p=Symbol.iterator,m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},h=Object.assign,g={};function v(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||m}function y(){}function b(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||m}v.prototype.isReactComponent={},v.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},y.prototype=v.prototype;var E=b.prototype=new y;E.constructor=b,h(E,v.prototype),E.isPureReactComponent=!0;var k=Array.isArray,w=Object.prototype.hasOwnProperty,C={current:null},x={key:!0,ref:!0,__self:!0,__source:!0};function S(e,t,r){var o,a={},i=null,l=null;if(null!=t)for(o in void 0!==t.ref&&(l=t.ref),void 0!==t.key&&(i=""+t.key),t)w.call(t,o)&&!x.hasOwnProperty(o)&&(a[o]=t[o]);var s=arguments.length-2;if(1===s)a.children=r;else if(1<s){for(var u=Array(s),c=0;c<s;c++)u[c]=arguments[c+2];a.children=u}if(e&&e.defaultProps)for(o in s=e.defaultProps)void 0===a[o]&&(a[o]=s[o]);return{$$typeof:n,type:e,key:i,ref:l,props:a,_owner:C.current}}function _(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}var L=/\/+/g;function M(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function P(e,t,o,a,i){var l=typeof e;"undefined"!==l&&"boolean"!==l||(e=null);var s=!1;if(null===e)s=!0;else switch(l){case"string":case"number":s=!0;break;case"object":switch(e.$$typeof){case n:case r:s=!0}}if(s)return i=i(s=e),e=""===a?"."+M(s,0):a,k(i)?(o="",null!=e&&(o=e.replace(L,"$&/")+"/"),P(i,t,o,"",(function(e){return e}))):null!=i&&(_(i)&&(i=function(e,t){return{$$typeof:n,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,o+(!i.key||s&&s.key===i.key?"":(""+i.key).replace(L,"$&/")+"/")+e)),t.push(i)),1;if(s=0,a=""===a?".":a+":",k(e))for(var u=0;u<e.length;u++){var c=a+M(l=e[u],u);s+=P(l,t,o,c,i)}else if(c=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=p&&e[p]||e["@@iterator"])?e:null}(e),"function"==typeof c)for(e=c.call(e),u=0;!(l=e.next()).done;)s+=P(l=l.value,t,o,c=a+M(l,u++),i);else if("object"===l)throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return s}function T(e,t,n){if(null==e)return e;var r=[],o=0;return P(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function N(e){if(-1===e._status){var t=e._result;(t=t()).then((function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)}),(function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)})),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var O={current:null},A={transition:null},R={ReactCurrentDispatcher:O,ReactCurrentBatchConfig:A,ReactCurrentOwner:C};t.Children={map:T,forEach:function(e,t,n){T(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return T(e,(function(){t++})),t},toArray:function(e){return T(e,(function(e){return e}))||[]},only:function(e){if(!_(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},t.Component=v,t.Fragment=o,t.Profiler=i,t.PureComponent=b,t.StrictMode=a,t.Suspense=c,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=R,t.cloneElement=function(e,t,r){if(null==e)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var o=h({},e.props),a=e.key,i=e.ref,l=e._owner;if(null!=t){if(void 0!==t.ref&&(i=t.ref,l=C.current),void 0!==t.key&&(a=""+t.key),e.type&&e.type.defaultProps)var s=e.type.defaultProps;for(u in t)w.call(t,u)&&!x.hasOwnProperty(u)&&(o[u]=void 0===t[u]&&void 0!==s?s[u]:t[u])}var u=arguments.length-2;if(1===u)o.children=r;else if(1<u){s=Array(u);for(var c=0;c<u;c++)s[c]=arguments[c+2];o.children=s}return{$$typeof:n,type:e.type,key:a,ref:i,props:o,_owner:l}},t.createContext=function(e){return(e={$$typeof:s,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null}).Provider={$$typeof:l,_context:e},e.Consumer=e},t.createElement=S,t.createFactory=function(e){var t=S.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:u,render:e}},t.isValidElement=_,t.lazy=function(e){return{$$typeof:f,_payload:{_status:-1,_result:e},_init:N}},t.memo=function(e,t){return{$$typeof:d,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=A.transition;A.transition={};try{e()}finally{A.transition=t}},t.unstable_act=function(){throw Error("act(...) is not supported in production builds of React.")},t.useCallback=function(e,t){return O.current.useCallback(e,t)},t.useContext=function(e){return O.current.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e){return O.current.useDeferredValue(e)},t.useEffect=function(e,t){return O.current.useEffect(e,t)},t.useId=function(){return O.current.useId()},t.useImperativeHandle=function(e,t,n){return O.current.useImperativeHandle(e,t,n)},t.useInsertionEffect=function(e,t){return O.current.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return O.current.useLayoutEffect(e,t)},t.useMemo=function(e,t){return O.current.useMemo(e,t)},t.useReducer=function(e,t,n){return O.current.useReducer(e,t,n)},t.useRef=function(e){return O.current.useRef(e)},t.useState=function(e){return O.current.useState(e)},t.useSyncExternalStore=function(e,t,n){return O.current.useSyncExternalStore(e,t,n)},t.useTransition=function(){return O.current.useTransition()},t.version="18.2.0"},294:(e,t,n)=>{"use strict";e.exports=n(408)},893:(e,t,n)=>{"use strict";e.exports=n(251)},53:(e,t)=>{"use strict";function n(e,t){var n=e.length;e.push(t);e:for(;0<n;){var r=n-1>>>1,o=e[r];if(!(0<a(o,t)))break e;e[r]=t,e[n]=o,n=r}}function r(e){return 0===e.length?null:e[0]}function o(e){if(0===e.length)return null;var t=e[0],n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length,i=o>>>1;r<i;){var l=2*(r+1)-1,s=e[l],u=l+1,c=e[u];if(0>a(s,n))u<o&&0>a(c,s)?(e[r]=c,e[u]=n,r=u):(e[r]=s,e[l]=n,r=l);else{if(!(u<o&&0>a(c,n)))break e;e[r]=c,e[u]=n,r=u}}}return t}function a(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var l=Date,s=l.now();t.unstable_now=function(){return l.now()-s}}var u=[],c=[],d=1,f=null,p=3,m=!1,h=!1,g=!1,v="function"==typeof setTimeout?setTimeout:null,y="function"==typeof clearTimeout?clearTimeout:null,b="undefined"!=typeof setImmediate?setImmediate:null;function E(e){for(var t=r(c);null!==t;){if(null===t.callback)o(c);else{if(!(t.startTime<=e))break;o(c),t.sortIndex=t.expirationTime,n(u,t)}t=r(c)}}function k(e){if(g=!1,E(e),!h)if(null!==r(u))h=!0,A(w);else{var t=r(c);null!==t&&R(k,t.startTime-e)}}function w(e,n){h=!1,g&&(g=!1,y(_),_=-1),m=!0;var a=p;try{for(E(n),f=r(u);null!==f&&(!(f.expirationTime>n)||e&&!P());){var i=f.callback;if("function"==typeof i){f.callback=null,p=f.priorityLevel;var l=i(f.expirationTime<=n);n=t.unstable_now(),"function"==typeof l?f.callback=l:f===r(u)&&o(u),E(n)}else o(u);f=r(u)}if(null!==f)var s=!0;else{var d=r(c);null!==d&&R(k,d.startTime-n),s=!1}return s}finally{f=null,p=a,m=!1}}"undefined"!=typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var C,x=!1,S=null,_=-1,L=5,M=-1;function P(){return!(t.unstable_now()-M<L)}function T(){if(null!==S){var e=t.unstable_now();M=e;var n=!0;try{n=S(!0,e)}finally{n?C():(x=!1,S=null)}}else x=!1}if("function"==typeof b)C=function(){b(T)};else if("undefined"!=typeof MessageChannel){var N=new MessageChannel,O=N.port2;N.port1.onmessage=T,C=function(){O.postMessage(null)}}else C=function(){v(T,0)};function A(e){S=e,x||(x=!0,C())}function R(e,n){_=v((function(){e(t.unstable_now())}),n)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){h||m||(h=!0,A(w))},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):L=0<e?Math.floor(1e3/e):5},t.unstable_getCurrentPriorityLevel=function(){return p},t.unstable_getFirstCallbackNode=function(){return r(u)},t.unstable_next=function(e){switch(p){case 1:case 2:case 3:var t=3;break;default:t=p}var n=p;p=t;try{return e()}finally{p=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=function(){},t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=p;p=e;try{return t()}finally{p=n}},t.unstable_scheduleCallback=function(e,o,a){var i=t.unstable_now();switch(a="object"==typeof a&&null!==a&&"number"==typeof(a=a.delay)&&0<a?i+a:i,e){case 1:var l=-1;break;case 2:l=250;break;case 5:l=1073741823;break;case 4:l=1e4;break;default:l=5e3}return e={id:d++,callback:o,priorityLevel:e,startTime:a,expirationTime:l=a+l,sortIndex:-1},a>i?(e.sortIndex=a,n(c,e),null===r(u)&&e===r(c)&&(g?(y(_),_=-1):g=!0,R(k,a-i))):(e.sortIndex=l,n(u,e),h||m||(h=!0,A(w))),e},t.unstable_shouldYield=P,t.unstable_wrapCallback=function(e){var t=p;return function(){var n=p;p=t;try{return e.apply(this,arguments)}finally{p=n}}}},840:(e,t,n)=>{"use strict";e.exports=n(53)},250:(e,t,n)=>{"use strict";var r=n(294),o="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},a=r.useState,i=r.useEffect,l=r.useLayoutEffect,s=r.useDebugValue;function u(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(e){return!0}}var c="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=a({inst:{value:n,getSnapshot:t}}),o=r[0].inst,c=r[1];return l((function(){o.value=n,o.getSnapshot=t,u(o)&&c({inst:o})}),[e,n,t]),i((function(){return u(o)&&c({inst:o}),e((function(){u(o)&&c({inst:o})}))}),[e]),s(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:c},688:(e,t,n)=>{"use strict";e.exports=n(250)}},r={};function o(e){var t=r[e];if(void 0!==t)return t.exports;var a=r[e]={exports:{}};return n[e].call(a.exports,a,a.exports,o),a.exports}o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,o.t=function(n,r){if(1&r&&(n=this(n)),8&r)return n;if("object"==typeof n&&n){if(4&r&&n.__esModule)return n;if(16&r&&"function"==typeof n.then)return n}var a=Object.create(null);o.r(a);var i={};e=e||[null,t({}),t([]),t(t)];for(var l=2&r&&n;"object"==typeof l&&!~e.indexOf(l);l=t(l))Object.getOwnPropertyNames(l).forEach((e=>i[e]=()=>n[e]));return i.default=()=>n,o.d(a,i),a},o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{"use strict";var e=o(294),t=o.t(e,2);const n=ampSettings;var r=o(745);const a=window.wp.domReady;var i=o.n(a);const l=window.wp.i18n,s=window.wp.url;var u=o(935);const c=window.wp.apiFetch;var d=o.n(c);function f(){const[t,n]=(0,e.useState)(),r=(0,e.useCallback)((e=>{n((()=>{throw e}))}),[]);return{error:t,setAsyncError:r}}const p=(0,e.createContext)();function m({children:t}){const[n,r]=(0,e.useState)(null);return(0,e.createElement)(p.Provider,{value:{error:n,setError:r}},t)}const h=(0,e.createContext)();function g({children:t,optionsRestPath:n,populateDefaultValues:r,hasErrorBoundary:o=!1,delaySave:a=!1}){const[i,l]=(0,e.useState)({}),[c,m]=(0,e.useState)(!1),[g,v]=(0,e.useState)(null),[y,b]=(0,e.useState)({}),[E,k]=(0,e.useState)(!1),[w,C]=(0,e.useState)(!1),[x,S]=(0,e.useState)({}),[_,L]=(0,e.useState)({}),{error:M,setError:P}=(0,e.useContext)(p),{setAsyncError:T}=f(),[N,O]=(0,e.useState)(!1),A=(0,e.useRef)(!1);(0,e.useEffect)((()=>()=>{A.current=!0}),[]);const R=(0,e.useCallback)((()=>{M||c||(async()=>{m(!0);try{const e=await d()({path:(0,s.addQueryArgs)(n,{_fields:["suppressed_plugins","suppressible_plugins"]})});if(!0===A.current)return;S({...x,...e})}catch(e){if(!0===A.current)return;return P(e),void(o&&T(e))}m(!1)})()}),[M,c,o,n,x,T,P]);(0,e.useEffect)((()=>{M||Object.keys(x).length||g||(async()=>{v(!0);try{const e=await d()({path:n});if(!0===A.current)return;r||!1!==e.plugin_configured||(e.mobile_redirect=!0,e.reader_theme=null,e.theme_support=null),S(e)}catch(e){if(!0===A.current)return;return P(e),void(o&&T(e))}v(!1)})()}),[M,g,o,x,n,r,T,P]);const j=(0,e.useCallback)((async()=>{k(!0);try{const e={...i};null===e.reader_theme&&delete e.reader_theme,x.plugin_configured||"mobile_redirect"in e||(e.mobile_redirect=x.mobile_redirect),x.plugin_configured||(e.plugin_configured=!0);const[t]=await Promise.all([d()({method:"post",path:n,data:e}),a?new Promise((e=>{setTimeout(e,1e3)})):()=>{}]);if(!0===A.current)return;S(t),P(null)}catch(e){if(!0===A.current)return;return k(!1),P(e),void(o&&T(e))}L({..._,...i}),(0,u.flushSync)((()=>{b(i),l({}),C(!0)})),k(!1)}),[a,o,n,T,x,P,i,_]),F=(0,e.useCallback)((e=>{l({...i,...e}),C(!1)}),[i]),z=(0,e.useCallback)((e=>{const t={...i};delete t[e],l(t)}),[i]);return(0,e.createElement)(h.Provider,{value:{editedOptions:{...x,...i},fetchingOptions:g,hasOptionsChanges:Boolean(Object.keys(i).length),didSaveOptions:w,updates:i,originalOptions:x,saveOptions:j,savedOptions:y,savingOptions:E,unsetOption:z,updateOptions:F,readerModeWasOverridden:N,refetchPluginSuppression:R,setReaderModeWasOverridden:O,modifiedOptions:_}},t)}const v="reader",y="standard",b="transitional",E=783,k=(0,e.createContext)();function w({wpAjaxUrl:t,children:r,currentTheme:a,hideCurrentlyActiveTheme:i=!1,readerThemesRestPath:s,updatesNonce:u,hasErrorBoundary:c=!1}){const{setAsyncError:m}=f(),{error:g,setError:y}=(0,e.useContext)(p),[E,w]=(0,e.useState)(null),[C,x]=(0,e.useState)(!1),[S,_]=(0,e.useState)(null),[L,M]=(0,e.useState)(null),[P,T]=(0,e.useState)(!1),[N,O]=(0,e.useState)(!1),[A,R]=(0,e.useState)(null),{didSaveOptions:j,editedOptions:F,originalOptions:z,updateOptions:I,savingOptions:H}=(0,e.useContext)(h),{reader_theme:B,theme_support:D}=z,{reader_theme:W,theme_support:$}=F,U=(0,e.useRef)(!1);(0,e.useEffect)((()=>()=>{U.current=!0}),[]);const{originalSelectedTheme:V,selectedTheme:Z}=(0,e.useMemo)((()=>{const e={name:null,availability:null};return S?{originalSelectedTheme:S.find((({slug:e})=>e===B))||e,selectedTheme:S.find((({slug:e})=>e===W))||e}:{originalSelectedTheme:e,selectedTheme:e}}),[B,W,S]),[q,Q]=(0,e.useState)(null);(0,e.useEffect)((()=>{if(null===E){if(D&&D!==v)return void w(!1);V.availability&&w(!1)}E?j&&w(!1):D===v&&"active"===V.availability&&(I({theme_support:b,reader_theme:n.LEGACY_THEME_SLUG}),w(!0))}),[j,D,V.availability,E,I]),(0,e.useEffect)((()=>{C||("non-installable"===Z.availability||n.USING_FALLBACK_READER_THEME)&&(I({reader_theme:n.LEGACY_THEME_SLUG}),x(!0))}),[V.availability,Z.availability,C,I]),(0,e.useEffect)((()=>{Z&&H&&!P&&"installable"===Z.availability&&(async()=>{if(!P&&!q){T(!0);try{const e=new o.g.FormData;e.append("action","install-theme"),e.append("slug",Z.slug),e.append("_wpnonce",u);const n=await o.g.fetch(t,{body:e,method:"POST"});if(!0===U.current)return;if(!n.ok)throw new Error((0,l.__)("Reader theme failed to download.","amp"));O(Z.slug)}catch(e){if(!0===U.current)return;Q(e)}T(!1)}})()}),[t,P,q,H,Z,$,u]),(0,e.useEffect)((()=>{L||(g||!s||S||v!==$?M(!1):(async()=>{M(!0);try{const e=await d()({path:s,parse:!1});R(e.headers.get("X-AMP-Theme-API-Error"));const t=await e.json();if(!0===U.current)return;_(t)}catch(e){if(!0===U.current)return;return y(e),void(c&&m(e))}M(!1)})())}),[g,c,L,s,m,y,S,$]);const{filteredThemes:G}=(0,e.useMemo)((()=>{let e;return e=i?(S||[]).filter((e=>"active"!==e.availability)):S,{filteredThemes:e}}),[i,S]),{availableThemes:Y,unavailableThemes:K}=(0,e.useMemo)((()=>(G||[]).reduce(((e,t)=>("non-installable"===t.availability?e.unavailableThemes.push(t):e.availableThemes.push(t),e)),{availableThemes:[],unavailableThemes:[]})),[G]);return(0,e.createElement)(k.Provider,{value:{availableThemes:Y,currentTheme:a,downloadedTheme:N,downloadingTheme:P,downloadingThemeError:q,fetchingThemes:L,selectedTheme:Z||{},templateModeWasOverridden:E,themes:G,themesAPIError:A,unavailableThemes:K}},r)}var C=o(184),x=o.n(C);const S=function({label:t,children:n}){return(0,e.createElement)("div",{className:"components-panel__header"},t&&(0,e.createElement)("h2",null,t),n)},_=(0,e.forwardRef)((function({header:t,className:n,children:r},o){const a=x()(n,"components-panel");return(0,e.createElement)("div",{className:a,ref:o},t&&(0,e.createElement)(S,{label:t}),r)}));let L,M,P,T;const N=/<(\/)?(\w+)\s*(\/)?>/g;function O(e,t,n,r,o){return{element:e,tokenStart:t,tokenLength:n,prevOffset:r,leadingTextStart:o,children:[]}}function A(t){const n=function(){const e=N.exec(L);if(null===e)return["no-more-tokens"];const t=e.index,[n,r,o,a]=e,i=n.length;return a?["self-closed",o,t,i]:r?["closer",o,t,i]:["opener",o,t,i]}(),[r,o,a,i]=n,l=T.length,s=a>M?M:null;if(!t[o])return R(),!1;switch(r){case"no-more-tokens":if(0!==l){const{leadingTextStart:e,tokenStart:t}=T.pop();P.push(L.substr(e,t))}return R(),!1;case"self-closed":return 0===l?(null!==s&&P.push(L.substr(s,a-s)),P.push(t[o]),M=a+i,!0):(j(O(t[o],a,i)),M=a+i,!0);case"opener":return T.push(O(t[o],a,i,a+i,s)),M=a+i,!0;case"closer":if(1===l)return function(t){const{element:n,leadingTextStart:r,prevOffset:o,tokenStart:a,children:i}=T.pop(),l=t?L.substr(o,t-o):L.substr(o);l&&i.push(l),null!==r&&P.push(L.substr(r,a-r)),P.push((0,e.cloneElement)(n,null,...i))}(a),M=a+i,!0;const n=T.pop(),r=L.substr(n.prevOffset,a-n.prevOffset);n.children.push(r),n.prevOffset=a+i;const u=O(n.element,n.tokenStart,n.tokenLength,a+i);return u.children=n.children,j(u),M=a+i,!0;default:return R(),!1}}function R(){const e=L.length-M;0!==e&&P.push(L.substr(M,e))}function j(t){const{element:n,tokenStart:r,tokenLength:o,prevOffset:a,children:i}=t,l=T[T.length-1],s=L.substr(l.prevOffset,r-l.prevOffset);s&&l.children.push(s),l.children.push((0,e.cloneElement)(n,null,...i)),l.prevOffset=a||r+o}const F=(t,n)=>{if(L=t,M=0,P=[],T=[],N.lastIndex=0,!(t=>{const n="object"==typeof t,r=n&&Object.values(t);return n&&r.length&&r.every((t=>(0,e.isValidElement)(t)))})(n))throw new TypeError("The conversionMap provided is not valid. It must be an object with values that are React Elements");do{}while(A(n));return(0,e.createElement)(e.Fragment,null,...P)};var z=o(152),I=o.n(z);function H(t){const n=(0,e.useRef)(t);return n.current=t,n}function B(t,n){const r=H(t),o=H(n);return function(t,n){const a=(0,e.useRef)();return(0,e.useCallback)((e=>{e?a.current=(e=>{const t=new(I())(e,{text:()=>"function"==typeof r.current?r.current():r.current||""});return t.on("success",(({clearSelection:t})=>{t(),e.focus(),o.current&&o.current()})),()=>{t.destroy()}})(e):a.current&&a.current()}),[])}()}const D=function(e){return"string"!=typeof e||""===e?(console.error("The namespace must be a non-empty string."),!1):!!/^[a-zA-Z][a-zA-Z0-9_.\-\/]*$/.test(e)||(console.error("The namespace can only contain numbers, letters, dashes, periods, underscores and slashes."),!1)},W=function(e){return"string"!=typeof e||""===e?(console.error("The hook name must be a non-empty string."),!1):/^__/.test(e)?(console.error("The hook name cannot begin with `__`."),!1):!!/^[a-zA-Z][a-zA-Z0-9_.-]*$/.test(e)||(console.error("The hook name can only contain numbers, letters, dashes, periods and underscores."),!1)},$=function(e,t){return function(n,r,o,a=10){const i=e[t];if(!W(n))return;if(!D(r))return;if("function"!=typeof o)return void console.error("The hook callback must be a function.");if("number"!=typeof a)return void console.error("If specified, the hook priority must be a number.");const l={callback:o,priority:a,namespace:r};if(i[n]){const e=i[n].handlers;let t;for(t=e.length;t>0&&!(a>=e[t-1].priority);t--);t===e.length?e[t]=l:e.splice(t,0,l),i.__current.forEach((e=>{e.name===n&&e.currentIndex>=t&&e.currentIndex++}))}else i[n]={handlers:[l],runs:0};"hookAdded"!==n&&e.doAction("hookAdded",n,r,o,a)}},U=function(e,t,n=!1){return function(r,o){const a=e[t];if(!W(r))return;if(!n&&!D(o))return;if(!a[r])return 0;let i=0;if(n)i=a[r].handlers.length,a[r]={runs:a[r].runs,handlers:[]};else{const e=a[r].handlers;for(let t=e.length-1;t>=0;t--)e[t].namespace===o&&(e.splice(t,1),i++,a.__current.forEach((e=>{e.name===r&&e.currentIndex>=t&&e.currentIndex--})))}return"hookRemoved"!==r&&e.doAction("hookRemoved",r,o),i}},V=function(e,t){return function(n,r){const o=e[t];return void 0!==r?n in o&&o[n].handlers.some((e=>e.namespace===r)):n in o}},Z=function(e,t,n=!1){return function(r,...o){const a=e[t];a[r]||(a[r]={handlers:[],runs:0}),a[r].runs++;const i=a[r].handlers;if(!i||!i.length)return n?o[0]:void 0;const l={name:r,currentIndex:0};for(a.__current.push(l);l.currentIndex<i.length;){const e=i[l.currentIndex].callback.apply(null,o);n&&(o[0]=e),l.currentIndex++}return a.__current.pop(),n?o[0]:void 0}},q=function(e,t){return function(){var n;const r=e[t];return null!==(n=r.__current[r.__current.length-1]?.name)&&void 0!==n?n:null}},Q=function(e,t){return function(n){const r=e[t];return void 0===n?void 0!==r.__current[0]:!!r.__current[0]&&n===r.__current[0].name}},G=function(e,t){return function(n){const r=e[t];if(W(n))return r[n]&&r[n].runs?r[n].runs:0}};class Y{constructor(){this.actions=Object.create(null),this.actions.__current=[],this.filters=Object.create(null),this.filters.__current=[],this.addAction=$(this,"actions"),this.addFilter=$(this,"filters"),this.removeAction=U(this,"actions"),this.removeFilter=U(this,"filters"),this.hasAction=V(this,"actions"),this.hasFilter=V(this,"filters"),this.removeAllActions=U(this,"actions",!0),this.removeAllFilters=U(this,"filters",!0),this.doAction=Z(this,"actions"),this.applyFilters=Z(this,"filters",!0),this.currentAction=q(this,"actions"),this.currentFilter=q(this,"filters"),this.doingAction=Q(this,"actions"),this.doingFilter=Q(this,"filters"),this.didAction=G(this,"actions"),this.didFilter=G(this,"filters")}}const K=new Y,{addAction:X,addFilter:J,removeAction:ee,removeFilter:te,hasAction:ne,hasFilter:re,removeAllActions:oe,removeAllFilters:ae,doAction:ie,applyFilters:le,currentAction:se,currentFilter:ue,doingAction:ce,doingFilter:de,didAction:fe,didFilter:pe,actions:me,filters:he}=K,ge=Object.create(null);function ve(e,t={}){const{since:n,version:r,alternative:o,plugin:a,link:i,hint:l}=t,s=`${e} is deprecated${n?` since version ${n}`:""}${r?` and will be removed${a?` from ${a}`:""} in version ${r}`:""}.${o?` Please use ${o} instead.`:""}${i?` See: ${i}`:""}${l?` Note: ${l}`:""}`;s in ge||(ie("deprecated",e,t,s),console.warn(s),ge[s]=!0)}const ye=new WeakMap,be=function(t,n,r){return(0,e.useMemo)((()=>{if(r)return r;const e=function(e){const t=ye.get(e)||0;return ye.set(e,t+1),t}(t);return n?`${n}-${e}`:e}),[t,r,n])};var Ee=Object.defineProperty,ke=Object.defineProperties,we=Object.getOwnPropertyDescriptors,Ce=Object.getOwnPropertySymbols,xe=Object.prototype.hasOwnProperty,Se=Object.prototype.propertyIsEnumerable,_e=(e,t,n)=>t in e?Ee(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Le=(e,t)=>{for(var n in t||(t={}))xe.call(t,n)&&_e(e,n,t[n]);if(Ce)for(var n of Ce(t))Se.call(t,n)&&_e(e,n,t[n]);return e},Me=(e,t)=>ke(e,we(t)),Pe=(e,t)=>{var n={};for(var r in e)xe.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&Ce)for(var r of Ce(e))t.indexOf(r)<0&&Se.call(e,r)&&(n[r]=e[r]);return n},Te=Object.defineProperty,Ne=Object.defineProperties,Oe=Object.getOwnPropertyDescriptors,Ae=Object.getOwnPropertySymbols,Re=Object.prototype.hasOwnProperty,je=Object.prototype.propertyIsEnumerable,Fe=(e,t,n)=>t in e?Te(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,ze=(e,t)=>{for(var n in t||(t={}))Re.call(t,n)&&Fe(e,n,t[n]);if(Ae)for(var n of Ae(t))je.call(t,n)&&Fe(e,n,t[n]);return e},Ie=(e,t)=>Ne(e,Oe(t)),He=(e,t)=>{var n={};for(var r in e)Re.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&Ae)for(var r of Ae(e))t.indexOf(r)<0&&je.call(e,r)&&(n[r]=e[r]);return n};function Be(...e){}function De(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function We(...e){return(...t)=>{for(const n of e)"function"==typeof n&&n(...t)}}function $e(e){return e}function Ue(e,t){if(!e){if("string"!=typeof t)throw new Error("Invariant failed");throw new Error(t)}}function Ve(e,...t){const n="function"==typeof e?e(...t):e;return null!=n&&!n}function Ze(e){return e.disabled||!0===e["aria-disabled"]||"true"===e["aria-disabled"]}function qe(...e){for(const t of e)if(void 0!==t)return t}function Qe(e,t){"function"==typeof e?e(t):e&&(e.current=t)}var Ge,Ye="undefined"!=typeof window&&!!(null==(Ge=window.document)?void 0:Ge.createElement);function Ke(e){return e?e.ownerDocument||e:document}function Xe(e,t=!1){const{activeElement:n}=Ke(e);if(!(null==n?void 0:n.nodeName))return null;if(et(n)&&n.contentDocument)return Xe(n.contentDocument.body,t);if(t){const e=n.getAttribute("aria-activedescendant");if(e){const t=Ke(n).getElementById(e);if(t)return t}}return n}function Je(e,t){return e===t||e.contains(t)}function et(e){return"IFRAME"===e.tagName}function tt(e){const t=e.tagName.toLowerCase();return"button"===t||!("input"!==t||!e.type)&&-1!==nt.indexOf(e.type)}var nt=["button","color","file","image","reset","submit"];function rt(e,t){return"matches"in e?e.matches(t):"msMatchesSelector"in e?e.msMatchesSelector(t):e.webkitMatchesSelector(t)}function ot(e){const t=e;return t.offsetWidth>0||t.offsetHeight>0||e.getClientRects().length>0}function at(e,t){if("closest"in e)return e.closest(t);do{if(rt(e,t))return e;e=e.parentElement||e.parentNode}while(null!==e&&1===e.nodeType);return null}function it(e){return e.target===e.currentTarget}function lt(e,t){const n=t||e.currentTarget,r=e.relatedTarget;return!r||!Je(n,r)}function st(e,t,n){const r=requestAnimationFrame((()=>{e.removeEventListener(t,o,!0),n()})),o=()=>{cancelAnimationFrame(r),n()};return e.addEventListener(t,o,{once:!0,capture:!0}),r}function ut(e,t,n,r=window){const o=[];try{r.document.addEventListener(e,t,n);for(const a of Array.from(r.frames))o.push(ut(e,t,n,a))}catch(e){}return()=>{try{r.document.removeEventListener(e,t,n)}catch(e){}o.forEach((e=>e()))}}var ct=Le({},t),dt=ct.useId,ft=(ct.useDeferredValue,ct.useInsertionEffect),pt=Ye?e.useLayoutEffect:e.useEffect;function mt(t){const n=(0,e.useRef)(t);return pt((()=>{n.current=t})),n}function ht(t){const n=(0,e.useRef)((()=>{throw new Error("Cannot call an event handler while rendering.")}));return ft?ft((()=>{n.current=t})):n.current=t,(0,e.useCallback)(((...e)=>{var t;return null==(t=n.current)?void 0:t.call(n,...e)}),[])}function gt(...t){return(0,e.useMemo)((()=>{if(t.some(Boolean))return e=>{t.forEach((t=>Qe(t,e)))}}),t)}function vt(t){if(dt){const e=dt();return t||e}const[n,r]=(0,e.useState)(t);return pt((()=>{if(t||n)return;const e=Math.random().toString(36).substr(2,6);r(`id-${e}`)}),[t,n]),t||n}function yt(t,n){const r=(0,e.useRef)(!1);(0,e.useEffect)((()=>{if(r.current)return t();r.current=!0}),n),(0,e.useEffect)((()=>()=>{r.current=!1}),[])}function bt(e){return ht("function"==typeof e?e:()=>e)}function Et(t,n,r=[]){const o=(0,e.useCallback)((e=>(t.wrapElement&&(e=t.wrapElement(e)),n(e))),[...r,t.wrapElement]);return Me(Le({},t),{wrapElement:o})}function kt(t=!1,n){const[r,o]=(0,e.useState)(null);return{portalRef:gt(o,n),portalNode:r,domReady:!t||r}}Symbol("setNextState");var wt=!1,Ct=0,xt=0;function St(e){(function(e){const t=e.movementX||e.screenX-Ct,n=e.movementY||e.screenY-xt;return Ct=e.screenX,xt=e.screenY,t||n||!1})(e)&&(wt=!0)}function _t(){wt=!1}function Lt(e,t){const n=e.__unstableInternals;return Ue(n,"Invalid store"),n[t]}function Mt(e,...t){let n=e,r=n,o=Symbol(),a=!1;const i=new Set,l=new Set,s=new Set,u=new Set,c=new WeakMap,d=new WeakMap,f=(e,t,n=s)=>(n.add(t),d.set(t,e),()=>{var e;null==(e=c.get(t))||e(),c.delete(t),d.delete(t),n.delete(t)}),p=(e,a,l=!1)=>{if(!De(n,e))return;const f=(p=a,m=n[e],function(e){return"function"==typeof e}(p)?p(function(e){return"function"==typeof e}(m)?m():m):p);var p,m;if(f===n[e])return;l||t.forEach((t=>{var n;null==(n=null==t?void 0:t.setState)||n.call(t,e,f)}));const h=n;n=Ie(ze({},n),{[e]:f});const g=Symbol();o=g,i.add(e);const v=(t,r,o)=>{var a;const i=d.get(t);i&&!i.some((t=>o?o.has(t):t===e))||(null==(a=c.get(t))||a(),c.set(t,t(n,r)))};s.forEach((e=>{v(e,h)})),queueMicrotask((()=>{if(o!==g)return;const e=n;u.forEach((e=>{v(e,r,i)})),r=e,i.clear()}))},m={getState:()=>n,setState:p,__unstableInternals:{setup:e=>(l.add(e),()=>l.delete(e)),init:()=>{if(a)return Be;if(!t.length)return Be;a=!0;const e=(r=n,Object.keys(r)).map((e=>We(...t.map((t=>{var n;const r=null==(n=null==t?void 0:t.getState)?void 0:n.call(t);if(r&&De(r,e))return Ot(t,[e],(t=>p(e,t[e],!0)))})))));var r;const o=[];l.forEach((e=>o.push(e())));const i=t.map(Tt);return We(...e,...o,...i,(()=>{a=!1}))},subscribe:(e,t)=>f(e,t),sync:(e,t)=>(c.set(t,t(n,n)),f(e,t)),batch:(e,t)=>(c.set(t,t(n,r)),f(e,t,u)),pick:e=>Mt(function(e,t){const n={};for(const r of t)De(e,r)&&(n[r]=e[r]);return n}(n,e),m),omit:e=>Mt(function(e,t){const n=ze({},e);for(const e of t)De(n,e)&&delete n[e];return n}(n,e),m)}};return m}function Pt(e,...t){if(e)return Lt(e,"setup")(...t)}function Tt(e,...t){if(e)return Lt(e,"init")(...t)}function Nt(e,...t){if(e)return Lt(e,"subscribe")(...t)}function Ot(e,...t){if(e)return Lt(e,"sync")(...t)}function At(e,...t){if(e)return Lt(e,"omit")(...t)}function Rt(...e){const t=e.reduce(((e,t)=>{var n;const r=null==(n=null==t?void 0:t.getState)?void 0:n.call(t);return r?ze(ze({},e),r):e}),{});return Mt(t,...e)}var jt=o(688),{useSyncExternalStore:Ft}=jt,zt=()=>()=>{};function It(t,n=$e){const r=e.useCallback((e=>t?Nt(t,null,e):zt()),[t]),o=()=>{const e="string"==typeof n?n:null,r="function"==typeof n?n:null,o=null==t?void 0:t.getState();return r?r(o):o&&e&&De(o,e)?o[e]:void 0};return Ft(r,o,o)}function Ht(t,n,r,o){const a=De(n,r)?n[r]:void 0,i=o?n[o]:void 0,l=mt({value:a,setValue:i}),s=e.useRef(!0);pt((()=>Ot(t,[r],((e,t)=>{const{value:n,setValue:o}=l.current;o&&e[r]!==t[r]&&e[r]!==n&&(s.current=!1,o(e[r]))}))),[t,r]),pt((()=>{if(void 0!==a)return s.current=!0,Ot(t,[r],(()=>{void 0!==a&&s.current&&t.setState(r,a)}))}))}function Bt(t,n){const[r,o]=e.useState((()=>t(n)));pt((()=>Tt(r)),[r]);const a=e.useCallback((e=>It(r,e)),[r]);return[e.useMemo((()=>Me(Le({},r),{useState:a})),[r,a]),ht((()=>{o((e=>t(Le(Le({},n),e.getState()))))}))]}function Dt(e={}){const t=Rt(e.store,At(e.disclosure,["contentElement","disclosureElement"])),n=null==t?void 0:t.getState(),r=qe(e.open,null==n?void 0:n.open,e.defaultOpen,!1),o=qe(e.animated,null==n?void 0:n.animated,!1),a=Mt({open:r,animated:o,animating:!!o&&r,mounted:r,contentElement:qe(null==n?void 0:n.contentElement,null),disclosureElement:qe(null==n?void 0:n.disclosureElement,null)},t);return Pt(a,(()=>Ot(a,["animated","animating"],(e=>{e.animated||a.setState("animating",!1)})))),Pt(a,(()=>Nt(a,["open"],(()=>{a.getState().animated&&a.setState("animating",!0)})))),Pt(a,(()=>Ot(a,["open","animating"],(e=>{a.setState("mounted",e.open||e.animating)})))),Ie(ze({},a),{setOpen:e=>a.setState("open",e),show:()=>a.setState("open",!0),hide:()=>a.setState("open",!1),toggle:()=>a.setState("open",(e=>!e)),stopAnimation:()=>a.setState("animating",!1),setContentElement:e=>a.setState("contentElement",e),setDisclosureElement:e=>a.setState("disclosureElement",e)})}function Wt(e,t,n){return yt(t,[n.store,n.disclosure]),Ht(e,n,"open","setOpen"),Ht(e,n,"mounted","setMounted"),Ht(e,n,"animated"),e}function $t(e={}){return Dt(e)}function Ut(e,t,n){return Wt(e,t,n)}function Vt(e,t,n){return Ht(e=function(e,t,n){return yt(t,[n.popover]),Ht(e=Ut(e,t,n),n,"placement"),e}(e,t,n),n,"timeout"),Ht(e,n,"showTimeout"),Ht(e,n,"hideTimeout"),e}function Zt(e={}){var t;const n=null==(t=e.store)?void 0:t.getState(),r=function(e={}){var t;const n=null==(t=e.store)?void 0:t.getState(),r=function(e={}){var t=e,{popover:n}=t,r=He(t,["popover"]);const o=Rt(r.store,At(n,["arrowElement","anchorElement","contentElement","popoverElement","disclosureElement"])),a=null==o?void 0:o.getState(),i=$t(Ie(ze({},r),{store:o})),l=qe(r.placement,null==a?void 0:a.placement,"bottom"),s=Mt(Ie(ze({},i.getState()),{placement:l,currentPlacement:l,anchorElement:qe(null==a?void 0:a.anchorElement,null),popoverElement:qe(null==a?void 0:a.popoverElement,null),arrowElement:qe(null==a?void 0:a.arrowElement,null),rendered:Symbol("rendered")}),i,o);return Ie(ze(ze({},i),s),{setAnchorElement:e=>s.setState("anchorElement",e),setPopoverElement:e=>s.setState("popoverElement",e),setArrowElement:e=>s.setState("arrowElement",e),render:()=>s.setState("rendered",Symbol("rendered"))})}(Ie(ze({},e),{placement:qe(e.placement,null==n?void 0:n.placement,"bottom")})),o=qe(e.timeout,null==n?void 0:n.timeout,500),a=Mt(Ie(ze({},r.getState()),{timeout:o,showTimeout:qe(e.showTimeout,null==n?void 0:n.showTimeout),hideTimeout:qe(e.hideTimeout,null==n?void 0:n.hideTimeout),autoFocusOnShow:qe(null==n?void 0:n.autoFocusOnShow,!1)}),r,e.store);return Ie(ze(ze({},r),a),{setAutoFocusOnShow:e=>a.setState("autoFocusOnShow",e)})}(Ie(ze({},e),{placement:qe(e.placement,null==n?void 0:n.placement,"top"),hideTimeout:qe(e.hideTimeout,null==n?void 0:n.hideTimeout,0)})),o=Mt(Ie(ze({},r.getState()),{type:qe(e.type,null==n?void 0:n.type,"description"),skipTimeout:qe(e.skipTimeout,null==n?void 0:n.skipTimeout,300)}),r,e.store);return ze(ze({},r),o)}var qt=o(893);function Qt(t){return e.forwardRef(((e,n)=>t(Le({ref:n},e))))}function Gt(t,n){const r=n,{as:o,wrapElement:a,render:i}=r,l=Pe(r,["as","wrapElement","render"]);let s;const u=gt(n.ref,function(t){return function(t){return!!t&&!!(0,e.isValidElement)(t)&&"ref"in t}(t)?t.ref:null}(i));if(o&&"string"!=typeof o)s=(0,qt.jsx)(o,Me(Le({},l),{render:i}));else if(e.isValidElement(i)){const t=Me(Le({},i.props),{ref:u});s=e.cloneElement(i,function(e,t){const n=Le({},e);for(const r in t){if(!De(t,r))continue;if("className"===r){const r="className";n[r]=e[r]?`${e[r]} ${t[r]}`:t[r];continue}if("style"===r){const r="style";n[r]=e[r]?Le(Le({},e[r]),t[r]):t[r];continue}const o=t[r];if("function"==typeof o&&r.startsWith("on")){const t=e[r];if("function"==typeof t){n[r]=(...e)=>{o(...e),t(...e)};continue}}n[r]=o}return n}(l,t))}else if(i)s=i(l);else if("function"==typeof n.children){const e=l,{children:t}=e,r=Pe(e,["children"]);s=n.children(r)}else s=o?(0,qt.jsx)(o,Le({},l)):(0,qt.jsx)(t,Le({},l));return a?a(s):s}function Yt(e){return(t={})=>{const n=e(t),r={};for(const e in n)De(n,e)&&void 0!==n[e]&&(r[e]=n[e]);return r}}function Kt(t=[],n=[]){const r=e.createContext(void 0),o=e.createContext(void 0),a=()=>e.useContext(r),i=e=>t.reduceRight(((t,n)=>(0,qt.jsx)(n,Me(Le({},e),{children:t}))),(0,qt.jsx)(r.Provider,Le({},e)));return{context:r,scopedContext:o,useContext:a,useScopedContext:(t=!1)=>{const n=e.useContext(o),r=a();return t?n:n||r},useProviderContext:()=>{const t=e.useContext(o),n=a();if(!t||t!==n)return n},ContextProvider:i,ScopedContextProvider:e=>(0,qt.jsx)(i,Me(Le({},e),{children:n.reduceRight(((t,n)=>(0,qt.jsx)(n,Me(Le({},e),{children:t}))),(0,qt.jsx)(o.Provider,Le({},e)))}))}}var Xt=Kt(),Jt=(Xt.useContext,Xt.useScopedContext,Xt.useProviderContext),en=Kt([Xt.ContextProvider],[Xt.ScopedContextProvider]),tn=(en.useContext,en.useScopedContext,en.useProviderContext),nn=en.ContextProvider,rn=en.ScopedContextProvider,on=(0,e.createContext)(void 0),an=(0,e.createContext)(void 0),ln=Kt([nn],[rn]),sn=(ln.useContext,ln.useScopedContext,ln.useProviderContext),un=ln.ContextProvider,cn=ln.ScopedContextProvider,dn=Kt([un],[cn]),fn=(dn.useContext,dn.useScopedContext,dn.useProviderContext),pn=dn.ContextProvider,mn=dn.ScopedContextProvider,hn=(0,e.createContext)(!0),gn="input:not([type='hidden']):not([disabled]), select:not([disabled]), textarea:not([disabled]), a[href], button:not([disabled]), [tabindex], iframe, object, embed, area[href], audio[controls], video[controls], [contenteditable]:not([contenteditable='false'])";function vn(e){return!!rt(e,gn)&&!!ot(e)&&!at(e,"[inert]")}function yn(e){if(!vn(e))return!1;if(function(e){return parseInt(e.getAttribute("tabindex")||"0",10)<0}(e))return!1;if(!("form"in e))return!0;if(!e.form)return!0;if(e.checked)return!0;if("radio"!==e.type)return!0;const t=e.form.elements.namedItem(e.name);if(!t)return!0;if(!("length"in t))return!0;const n=Xe(e);return!n||n===e||!("form"in n)||n.form!==e.form||n.name!==e.name}function bn(e,t){const n=Array.from(e.querySelectorAll(gn));t&&n.unshift(e);const r=n.filter(vn);return r.forEach(((e,t)=>{if(et(e)&&e.contentDocument){const n=e.contentDocument.body;r.splice(t,1,...bn(n))}})),r}function En(e,t,n){const r=Array.from(e.querySelectorAll(gn)),o=r.filter(yn);return t&&yn(e)&&o.unshift(e),o.forEach(((e,t)=>{if(et(e)&&e.contentDocument){const r=En(e.contentDocument.body,!1,n);o.splice(t,1,...r)}})),!o.length&&n?r:o}function kn(e,t){return function(e,t,n,r){const o=Xe(e),a=bn(e,!1),i=a.indexOf(o),l=a.slice(i+1);return l.find(yn)||(n?a.find(yn):null)||(r?l[0]:null)||null}(document.body,0,e,t)}function wn(e,t){return function(e,t,n,r){const o=Xe(e),a=bn(e,!1).reverse(),i=a.indexOf(o),l=a.slice(i+1);return l.find(yn)||(n?a.find(yn):null)||(r?l[0]:null)||null}(document.body,0,e,t)}function Cn(e){const t=Xe(e);if(!t)return!1;if(t===e)return!0;const n=t.getAttribute("aria-activedescendant");return!!n&&n===e.id}function xn(e){const t=Xe(e);if(!t)return!1;if(Je(e,t))return!0;const n=t.getAttribute("aria-activedescendant");return!!n&&"id"in e&&(n===e.id||!!e.querySelector(`#${CSS.escape(n)}`))}function Sn(e){!xn(e)&&vn(e)&&e.focus()}function Ln(e){var t;const n=null!=(t=e.getAttribute("tabindex"))?t:"";e.setAttribute("data-tabindex",n),e.setAttribute("tabindex","-1")}function Mn(){return!!Ye&&/mac|iphone|ipad|ipod/i.test(navigator.platform)}function Pn(){return Ye&&Mn()&&/apple/i.test(navigator.vendor)}var Tn=Pn(),Nn=["text","search","url","tel","email","password","number","date","month","week","time","datetime","datetime-local"];function On(e){return!("input"!==e.tagName.toLowerCase()||!e.type||"radio"!==e.type&&"checkbox"!==e.type)}function An(e,t,n,r,o){return e?t?n&&!r?-1:void 0:n?o:o||0:o}function Rn(e,t){return ht((n=>{null==e||e(n),n.defaultPrevented||t&&(n.stopPropagation(),n.preventDefault())}))}var jn=!0;function Fn(e){const t=e.target;t&&"hasAttribute"in t&&(t.hasAttribute("data-focus-visible")||(jn=!1))}function zn(e){e.metaKey||e.ctrlKey||e.altKey||(jn=!0)}var In=Yt((t=>{var n=t,{focusable:r=!0,accessibleWhenDisabled:o,autoFocus:a,onFocusVisible:i}=n,l=Pe(n,["focusable","accessibleWhenDisabled","autoFocus","onFocusVisible"]);const s=(0,e.useRef)(null);(0,e.useEffect)((()=>{r&&(ut("mousedown",Fn,!0),ut("keydown",zn,!0))}),[r]),Tn&&(0,e.useEffect)((()=>{if(!r)return;const e=s.current;if(!e)return;if(!On(e))return;const t=function(e){return"labels"in e?e.labels:null}(e);if(!t)return;const n=()=>queueMicrotask((()=>e.focus()));return t.forEach((e=>e.addEventListener("mouseup",n))),()=>{t.forEach((e=>e.removeEventListener("mouseup",n)))}}),[r]);const u=r&&Ze(l),c=!!u&&!o,[d,f]=(0,e.useState)(!1);(0,e.useEffect)((()=>{r&&c&&d&&f(!1)}),[r,c,d]),(0,e.useEffect)((()=>{if(!r)return;if(!d)return;const e=s.current;if(!e)return;if("undefined"==typeof IntersectionObserver)return;const t=new IntersectionObserver((()=>{vn(e)||f(!1)}));return t.observe(e),()=>t.disconnect()}),[r,d]);const p=Rn(l.onKeyPressCapture,u),m=Rn(l.onMouseDownCapture,u),h=Rn(l.onClickCapture,u),g=l.onMouseDown,v=ht((e=>{if(null==g||g(e),e.defaultPrevented)return;if(!r)return;const t=e.currentTarget;if(!Tn)return;if(function(e){return Boolean(e.currentTarget&&!Je(e.currentTarget,e.target))}(e))return;if(!tt(t)&&!On(t))return;let n=!1;const o=()=>{n=!0};t.addEventListener("focusin",o,{capture:!0,once:!0}),st(t,"mouseup",(()=>{t.removeEventListener("focusin",o,!0),n||Sn(t)}))})),y=(e,t)=>{if(t&&(e.currentTarget=t),!r)return;const n=e.currentTarget;n&&Cn(n)&&(null==i||i(e),e.defaultPrevented||f(!0))},b=l.onKeyDownCapture,E=ht((e=>{if(null==b||b(e),e.defaultPrevented)return;if(!r)return;if(d)return;if(e.metaKey)return;if(e.altKey)return;if(e.ctrlKey)return;if(!it(e))return;const t=e.currentTarget;queueMicrotask((()=>y(e,t)))})),k=l.onFocusCapture,w=ht((e=>{if(null==k||k(e),e.defaultPrevented)return;if(!r)return;if(!it(e))return void f(!1);const t=e.currentTarget,n=()=>y(e,t);jn||function(e){const{tagName:t,readOnly:n,type:r}=e;return"TEXTAREA"===t&&!n||"SELECT"===t&&!n||("INPUT"!==t||n?!!e.isContentEditable:Nn.includes(r))}(e.target)?queueMicrotask(n):function(e){return"combobox"===e.getAttribute("role")&&!!e.dataset.name}(e.target)?st(e.target,"focusout",n):f(!1)})),C=l.onBlur,x=ht((e=>{null==C||C(e),r&&lt(e)&&f(!1)})),S=(0,e.useContext)(hn),_=ht((e=>{r&&a&&e&&S&&queueMicrotask((()=>{Cn(e)||vn(e)&&e.focus()}))})),L=function(t,n){const r=e=>{if("string"==typeof e)return e},[o,a]=(0,e.useState)((()=>r(n)));return pt((()=>{const e=t&&"current"in t?t.current:t;a((null==e?void 0:e.tagName.toLowerCase())||r(n))}),[t,n]),o}(s,l.as),M=r&&function(e){return!e||"button"===e||"input"===e||"select"===e||"textarea"===e||"a"===e}(L),P=r&&function(e){return!e||"button"===e||"input"===e||"select"===e||"textarea"===e}(L),T=c?Le({pointerEvents:"none"},l.style):l.style;return Me(Le({"data-focus-visible":r&&d?"":void 0,"data-autofocus":!!a||void 0,"aria-disabled":!!u||void 0},l),{ref:gt(s,_,l.ref),style:T,tabIndex:An(r,c,M,P,l.tabIndex),disabled:!(!P||!c)||void 0,contentEditable:u?void 0:l.contentEditable,onKeyPressCapture:p,onClickCapture:h,onMouseDownCapture:m,onMouseDown:v,onKeyDownCapture:E,onFocusCapture:w,onBlur:x})}));Qt((e=>Gt("div",e=In(e))));var Hn=Yt((t=>{var n=t,{store:r,showOnHover:o=!0}=n,a=Pe(n,["store","showOnHover"]);const i=fn();Ue(r=r||i,!1);const l=r.useState("mounted"),s=Ze(a),u=(0,e.useRef)(0);(0,e.useEffect)((()=>()=>window.clearTimeout(u.current)),[]),(0,e.useEffect)((()=>ut("mouseleave",(e=>{if(!r)return;const{anchorElement:t}=r.getState();t&&e.target===t&&(window.clearTimeout(u.current),u.current=0)}),!0)),[r]);const c=a.onMouseMove,d=bt(o),f=((0,e.useEffect)((()=>{ut("mousemove",St,!0),ut("mousedown",_t,!0),ut("mouseup",_t,!0),ut("keydown",_t,!0),ut("scroll",_t,!0)}),[]),ht((()=>wt))),p=ht((e=>{if(null==r||r.setAnchorElement(e.currentTarget),null==c||c(e),s)return;if(e.defaultPrevented)return;if(u.current)return;if(!f())return;if(!r)return;if(!d(e))return;const{showTimeout:t,timeout:n}=r.getState();u.current=window.setTimeout((()=>{u.current=0,f()&&(null==r||r.show())}),null!=t?t:n)}));return a=Me(Le({},a),{ref:gt(r.setAnchorElement,l?r.setDisclosureElement:void 0,a.ref),onMouseMove:p}),In(a)}));Qt((e=>Gt("a",Hn(e))));var Bn=Kt([pn],[mn]),Dn=(Bn.useContext,Bn.useScopedContext,Bn.useProviderContext),Wn=(Bn.ContextProvider,Bn.ScopedContextProvider),$n=Mt({activeStore:null}),Un=Yt((t=>{var n=t,{store:r,showOnHover:o=!0}=n,a=Pe(n,["store","showOnHover"]);const i=Dn();Ue(r=r||i,!1);const l=(0,e.useRef)(!1);(0,e.useEffect)((()=>Ot(r,["mounted"],(e=>{e.mounted||(l.current=!1)}))),[r]),(0,e.useEffect)((()=>Ot(r,["mounted","skipTimeout"],(e=>{if(!r)return;if(e.mounted){const{activeStore:e}=$n.getState();return e!==r&&(null==e||e.hide()),$n.setState("activeStore",r)}const t=setTimeout((()=>{const{activeStore:e}=$n.getState();e===r&&$n.setState("activeStore",null)}),e.skipTimeout);return()=>clearTimeout(t)}))),[r]);const s=a.onMouseEnter,u=ht((e=>{null==s||s(e),l.current=!0})),c=a.onFocusVisible,d=ht((e=>{null==c||c(e),e.defaultPrevented||(null==r||r.setAnchorElement(e.currentTarget),null==r||r.show())})),f=a.onBlur,p=ht((e=>{if(null==f||f(e),e.defaultPrevented)return;const{activeStore:t}=$n.getState();t===r&&$n.setState("activeStore",null)})),m=r.useState("type"),h=r.useState((e=>{var t;return null==(t=e.contentElement)?void 0:t.id}));return a=Me(Le({"aria-labelledby":"label"===m?h:void 0,"aria-describedby":"description"===m?h:void 0},a),{onMouseEnter:u,onFocusVisible:d,onBlur:p}),Hn(Le({store:r,showOnHover:e=>{if(!l.current)return!1;if(Ve(o,e))return!1;const{activeStore:t}=$n.getState();return!t||(null==r||r.show(),!1)}},a))})),Vn=Qt((e=>Gt("div",Un(e))));function Zn(e){return[e.clientX,e.clientY]}function qn(e,t){const[n,r]=e;let o=!1;for(let e=t.length,a=0,i=e-1;a<e;i=a++){const[l,s]=t[a],[u,c]=t[i],[,d]=t[0===i?e-1:i-1]||[0,0],f=(s-c)*(n-l)-(l-u)*(r-s);if(c<s){if(r>=c&&r<s){if(0===f)return!0;f>0&&(r===c?r>d&&(o=!o):o=!o)}}else if(s<c){if(r>s&&r<=c){if(0===f)return!0;f<0&&(r===c?r<d&&(o=!o):o=!o)}}else if(r==s&&(n>=u&&n<=l||n>=l&&n<=u))return!0}return o}function Qn(e,t){const n=e.getBoundingClientRect(),{top:r,right:o,bottom:a,left:i}=n,[l,s]=function(e,t){const{top:n,right:r,bottom:o,left:a}=t,[i,l]=e;return[i<a?"left":i>r?"right":null,l<n?"top":l>o?"bottom":null]}(t,n),u=[t];return l?("top"!==s&&u.push(["left"===l?i:o,r]),u.push(["left"===l?o:i,r]),u.push(["left"===l?o:i,a]),"bottom"!==s&&u.push(["left"===l?i:o,a])):"top"===s?(u.push([i,r]),u.push([i,a]),u.push([o,a]),u.push([o,r])):(u.push([i,a]),u.push([i,r]),u.push([o,r]),u.push([o,a])),u}function Gn(e,...t){if(!e)return!1;const n=e.getAttribute("data-backdrop");return null!=n&&(""===n||"true"===n||!t.length||t.some((e=>n===e)))}var Yn=new WeakMap;function Kn(e,t,n){Yn.has(e)||Yn.set(e,new Map);const r=Yn.get(e),o=r.get(t);if(!o)return r.set(t,n()),()=>{var e;null==(e=r.get(t))||e(),r.delete(t)};const a=n(),i=()=>{a(),o(),r.delete(t)};return r.set(t,i),()=>{r.get(t)===i&&(a(),r.set(t,o))}}function Xn(e,t,n){return Kn(e,t,(()=>{const r=e.getAttribute(t);return e.setAttribute(t,n),()=>{null==r?e.removeAttribute(t):e.setAttribute(t,r)}}))}function Jn(e,t,n){return Kn(e,t,(()=>{const r=t in e,o=e[t];return e[t]=n,()=>{r?e[t]=o:delete e[t]}}))}function er(e,t){return e?Kn(e,"style",(()=>{const n=e.style.cssText;return Object.assign(e.style,t),()=>{e.style.cssText=n}})):()=>{}}var tr=["SCRIPT","STYLE"];function nr(e){return`__ariakit-dialog-snapshot-${e}`}function rr(e,t,n){return!tr.includes(t.tagName)&&!!function(e,t){const n=Ke(t),r=nr(e);if(!n.body[r])return!0;for(;;){if(t===n.body)return!1;if(t[r])return!0;if(!t.parentElement)return!1;t=t.parentElement}}(e,t)&&!n.some((e=>e&&Je(t,e)))}function or(e,t,n,r){for(let o of t){if(!(null==o?void 0:o.isConnected))continue;const a=t.some((e=>!!e&&e!==o&&e.contains(o))),i=Ke(o),l=o;for(;o.parentElement&&o!==i.body;){if(null==r||r(o.parentElement,l),!a)for(const r of o.parentElement.children)rr(e,r,t)&&n(r,l);o=o.parentElement}}}function ar(e="",t=!1){return`__ariakit-dialog-${t?"ancestor":"outside"}${e?`-${e}`:""}`}function ir(e,t=""){return We(Jn(e,ar("",!0),!0),Jn(e,ar(t,!0),!0))}function lr(e,t){if(e[ar(t,!0)])return!0;const n=ar(t);for(;;){if(e[n])return!0;if(!e.parentElement)return!1;e=e.parentElement}}function sr(e,t){const n=[],r=t.map((e=>null==e?void 0:e.id));return or(e,t,(t=>{Gn(t,...r)||n.unshift(function(e,t=""){return We(Jn(e,ar(),!0),Jn(e,ar(t),!0))}(t,e))}),((t,r)=>{r.hasAttribute("data-dialog")&&r.id!==e||n.unshift(ir(t,e))})),()=>{n.forEach((e=>e()))}}Yt((e=>e));var ur=Qt((e=>Gt("div",e)));function cr(e,t){const n=setTimeout(t,e);return()=>clearTimeout(n)}function dr(...e){return e.join(", ").split(", ").reduce(((e,t)=>{const n=1e3*parseFloat(t||"0s");return n>e?n:e}),0)}function fr(e,t,n){return!(n||!1===t||e&&!t)}Object.assign(ur,["a","button","details","dialog","div","form","h1","h2","h3","h4","h5","h6","header","img","input","label","li","nav","ol","p","section","select","span","textarea","ul","svg"].reduce(((e,t)=>(e[t]=Qt((e=>Gt(t,e))),e)),{}));var pr=Yt((t=>{var n=t,{store:r,alwaysVisible:o}=n,a=Pe(n,["store","alwaysVisible"]);const i=Jt();Ue(r=r||i,!1);const l=vt(a.id),[s,u]=(0,e.useState)(null),c=r.useState("open"),d=r.useState("mounted"),f=r.useState("animated"),p=r.useState("contentElement");pt((()=>{if(f){if(null==p?void 0:p.isConnected)return function(e){let t=requestAnimationFrame((()=>{t=requestAnimationFrame(e)}));return()=>cancelAnimationFrame(t)}((()=>{u(c?"enter":"leave")}));u(null)}}),[f,p,c]),pt((()=>{if(!r)return;if(!f)return;if(!p)return;if(!s)return;if("enter"===s&&!c)return;if("leave"===s&&c)return;if("number"==typeof f)return cr(f,r.stopAnimation);const{transitionDuration:e,animationDuration:t,transitionDelay:n,animationDelay:o}=getComputedStyle(p),a=dr(n,o)+dr(e,t);return a?cr(a,r.stopAnimation):void 0}),[r,f,p,c,s]);const m=fr(d,(a=Et(a,(e=>(0,qt.jsx)(rn,{value:r,children:e})),[r])).hidden,o),h=m?Me(Le({},a.style),{display:"none"}):a.style;return Me(Le({id:l,"data-enter":"enter"===s?"":void 0,"data-leave":"leave"===s?"":void 0,hidden:m},a),{ref:gt(l?r.setContentElement:null,a.ref),style:h})})),mr=Qt((e=>Gt("div",pr(e))));function hr({store:t,backdrop:n,backdropProps:r,alwaysVisible:o,hidden:a}){const i=(0,e.useRef)(null),l=function(e={}){const[t,n]=Bt(Dt,e);return Wt(t,n,e)}({disclosure:t}),s=t.useState("contentElement");pt((()=>{const e=i.current,t=s;e&&t&&(e.style.zIndex=getComputedStyle(t).zIndex)}),[s]),pt((()=>{const e=null==s?void 0:s.id;if(!e)return;const t=i.current;return t?ir(t,e):void 0}),[s]),null!=a&&(r=Me(Le({},r),{hidden:a}));const u=pr(Me(Le({store:l,role:"presentation","data-backdrop":(null==s?void 0:s.id)||"",alwaysVisible:o},r),{ref:gt(null==r?void 0:r.ref,i),style:Le({position:"fixed",top:0,right:0,bottom:0,left:0},null==r?void 0:r.style)}));if(!n)return null;if((0,e.isValidElement)(n))return(0,qt.jsx)(ur,Me(Le({},u),{render:n}));const c="boolean"!=typeof n?n:"div";return(0,qt.jsx)(ur,Me(Le({},u),{render:(0,qt.jsx)(c,{})}))}Qt((e=>{var t=e,{unmountOnHide:n}=t,r=Pe(t,["unmountOnHide"]);const o=Jt();return!1===It(r.store||o,(e=>!n||(null==e?void 0:e.mounted)))?null:(0,qt.jsx)(mr,Le({},r))}));var gr=(0,e.createContext)({});function vr({store:t,type:n,listener:r,capture:o,domReady:a}){const i=ht(r),l=t.useState("open"),s=(0,e.useRef)(!1);pt((()=>{if(!l)return;if(!a)return;const{contentElement:e}=t.getState();if(!e)return;const n=()=>{s.current=!0};return e.addEventListener("focusin",n,!0),()=>e.removeEventListener("focusin",n,!0)}),[t,l,a]),(0,e.useEffect)((()=>{if(l)return ut(n,(e=>{const{contentElement:n,disclosureElement:r}=t.getState(),o=e.target;n&&o&&function(e){return"HTML"===e.tagName||Je(Ke(e).body,e)}(o)&&(Je(n,o)||function(e,t){if(!e)return!1;if(Je(e,t))return!0;const n=t.getAttribute("aria-activedescendant");if(n){const t=Ke(e).getElementById(n);if(t)return Je(e,t)}return!1}(r,o)||o.hasAttribute("data-focus-trap")||function(e,t){if(!("clientY"in e))return!1;const n=t.getBoundingClientRect();return 0!==n.width&&0!==n.height&&n.top<=e.clientY&&e.clientY<=n.top+n.height&&n.left<=e.clientX&&e.clientX<=n.left+n.width}(e,n)||s.current&&!lr(o,n.id)||i(e))}),o)}),[l,o])}function yr(e,t){return"function"==typeof e?e(t):!!e}function br(e){return Xn(e,"aria-hidden","true")}function Er(e,t){return"style"in e?"inert"in HTMLElement.prototype?Jn(e,"inert",!0):We(...En(e,!0).map((e=>(null==t?void 0:t.some((t=>t&&Je(t,e))))?Be:Xn(e,"tabindex","-1"))),br(e),er(e,{pointerEvents:"none",userSelect:"none",cursor:"default"})):Be}function kr(t,n,r){const o=function({attribute:t,contentId:n,contentElement:r,enabled:o}){const[a,i]=(0,e.useReducer)((()=>[]),[]),l=(0,e.useCallback)((()=>{if(!o)return!1;if(!r)return!1;const{body:e}=Ke(r),a=e.getAttribute(t);return!a||a===n}),[a,o,r,t,n]);return(0,e.useEffect)((()=>{if(!o)return;if(!n)return;if(!r)return;const{body:e}=Ke(r);if(l())return e.setAttribute(t,n),()=>e.removeAttribute(t);const a=new MutationObserver((()=>(0,u.flushSync)(i)));return a.observe(e,{attributeFilter:[t]}),()=>a.disconnect()}),[a,o,n,r,l,t]),l}({attribute:"data-dialog-prevent-body-scroll",contentElement:t,contentId:n,enabled:r});(0,e.useEffect)((()=>{if(!o())return;if(!t)return;const e=Ke(t),n=function(e){return Ke(e).defaultView||window}(t),{documentElement:r,body:a}=e,i=r.style.getPropertyValue("--scrollbar-width"),l=i?parseInt(i):n.innerWidth-r.clientWidth,s=function(e){const t=e.getBoundingClientRect().left;return Math.round(t)+e.scrollLeft?"paddingLeft":"paddingRight"}(r),u=Mn()&&!(Ye&&navigator.platform.startsWith("Mac")&&(!Ye||!navigator.maxTouchPoints));return We((d="--scrollbar-width",f=`${l}px`,(c=r)?Kn(c,d,(()=>{const e=c.style.getPropertyValue(d);return c.style.setProperty(d,f),()=>{e?c.style.setProperty(d,e):c.style.removeProperty(d)}})):()=>{}),u?(()=>{var e,t;const{scrollX:r,scrollY:o,visualViewport:i}=n,u=null!=(e=null==i?void 0:i.offsetLeft)?e:0,c=null!=(t=null==i?void 0:i.offsetTop)?t:0,d=er(a,{position:"fixed",overflow:"hidden",top:-(o-Math.floor(c))+"px",left:-(r-Math.floor(u))+"px",right:"0",[s]:`${l}px`});return()=>{d(),n.scrollTo(r,o)}})():er(a,{overflow:"hidden",[s]:`${l}px`}));var c,d,f}),[o,t])}var wr=Yt((e=>{var t=e,{autoFocusOnShow:n=!0}=t,r=Pe(t,["autoFocusOnShow"]);return Et(r,(e=>(0,qt.jsx)(hn.Provider,{value:n,children:e})),[n])}));Qt((e=>Gt("div",wr(e))));var Cr=(0,e.createContext)(0);function xr({level:t,children:n}){const r=(0,e.useContext)(Cr),o=Math.max(Math.min(t||r+1,6),1);return(0,qt.jsx)(Cr.Provider,{value:o,children:n})}var Sr=Yt((e=>Me(Le({},e),{style:Le({border:0,clip:"rect(0 0 0 0)",height:"1px",margin:"-1px",overflow:"hidden",padding:0,position:"absolute",whiteSpace:"nowrap",width:"1px"},e.style)})));Qt((e=>Gt("span",Sr(e))));var _r=Yt((e=>(e=Me(Le({"data-focus-trap":"",tabIndex:0,"aria-hidden":!0},e),{style:Le({position:"fixed",top:0,left:0},e.style)}),Sr(e)))),Lr=Qt((e=>Gt("span",_r(e)))),Mr=(0,e.createContext)(null);function Pr(e){queueMicrotask((()=>{null==e||e.focus()}))}var Tr=Yt((t=>{var n=t,{preserveTabOrder:r,portalElement:o,portalRef:a,portal:i=!0}=n,l=Pe(n,["preserveTabOrder","portalElement","portalRef","portal"]);const s=(0,e.useRef)(null),c=gt(s,l.ref),d=(0,e.useContext)(Mr),[f,p]=(0,e.useState)(null),m=(0,e.useRef)(null),h=(0,e.useRef)(null),g=(0,e.useRef)(null),v=(0,e.useRef)(null);return pt((()=>{const e=s.current;if(!e||!i)return void p(null);const t=function(e,t){return t?"function"==typeof t?t(e):t:Ke(e).createElement("div")}(e,o);if(!t)return void p(null);const n=t.isConnected;if(!n){const n=d||function(e){return Ke(e).body}(e);n.appendChild(t)}return t.id||(t.id=e.id?`portal/${e.id}`:function(e="id"){return`${e?`${e}-`:""}${Math.random().toString(36).substr(2,6)}`}()),p(t),Qe(a,t),n?void 0:()=>{t.remove(),Qe(a,null)}}),[i,o,d,a]),(0,e.useEffect)((()=>{if(!f)return;if(!r)return;let e=0;const t=t=>{if(lt(t))return"focusin"===t.type?function(e){const t=e.querySelectorAll("[data-tabindex]"),n=e=>{const t=e.getAttribute("data-tabindex");e.removeAttribute("data-tabindex"),t?e.setAttribute("tabindex",t):e.removeAttribute("tabindex")};e.hasAttribute("data-tabindex")&&n(e),t.forEach(n)}(f):(cancelAnimationFrame(e),void(e=requestAnimationFrame((()=>{En(f,!0).forEach(Ln)}))))};return f.addEventListener("focusin",t,!0),f.addEventListener("focusout",t,!0),()=>{f.removeEventListener("focusin",t,!0),f.removeEventListener("focusout",t,!0)}}),[f,r]),l=Et(l,(e=>(e=(0,qt.jsx)(Mr.Provider,{value:f||d,children:e}),i?f?(e=(0,qt.jsxs)(qt.Fragment,{children:[r&&f&&(0,qt.jsx)(Lr,{ref:h,className:"__focus-trap-inner-before",onFocus:e=>{lt(e,f)?Pr(kn()):Pr(m.current)}}),e,r&&f&&(0,qt.jsx)(Lr,{ref:g,className:"__focus-trap-inner-after",onFocus:e=>{lt(e,f)?Pr(wn()):Pr(v.current)}})]}),f&&(e=(0,u.createPortal)(e,f)),e=(0,qt.jsxs)(qt.Fragment,{children:[r&&f&&(0,qt.jsx)(Lr,{ref:m,className:"__focus-trap-outer-before",onFocus:e=>{e.relatedTarget!==v.current&&lt(e,f)?Pr(h.current):Pr(wn())}}),r&&(0,qt.jsx)("span",{"aria-owns":null==f?void 0:f.id,style:{position:"fixed"}}),e,r&&f&&(0,qt.jsx)(Lr,{ref:v,className:"__focus-trap-outer-after",onFocus:e=>{if(lt(e,f))Pr(g.current);else{const e=kn();if(e===h.current)return void requestAnimationFrame((()=>{var e;return null==(e=kn())?void 0:e.focus()}));Pr(e)}}})]})):(0,qt.jsx)("span",{ref:c,id:l.id,style:{position:"fixed"},hidden:!0}):e)),[f,d,i,l.id,r]),l=Me(Le({},l),{ref:c})}));Qt((e=>Gt("div",Tr(e))));var Nr=Pn();function Or(e,t=!1){if(!e)return null;const n="current"in e?e.current:e;return n?t?vn(n)?n:null:n:null}var Ar=Yt((t=>{var n=t,{store:r,open:o,onClose:a,focusable:i=!0,modal:l=!0,portal:s=!!l,backdrop:u=!!l,backdropProps:c,hideOnEscape:d=!0,hideOnInteractOutside:f=!0,getPersistentElements:p,preventBodyScroll:m=!!l,autoFocusOnShow:h=!0,autoFocusOnHide:g=!0,initialFocus:v,finalFocus:y,unmountOnHide:b}=n,E=Pe(n,["store","open","onClose","focusable","modal","portal","backdrop","backdropProps","hideOnEscape","hideOnInteractOutside","getPersistentElements","preventBodyScroll","autoFocusOnShow","autoFocusOnHide","initialFocus","finalFocus","unmountOnHide"]);const k=tn(),w=(0,e.useRef)(null),C=function(e={}){const[t,n]=Bt($t,e);return Ut(t,n,e)}({store:r||k,open:o,setOpen(e){if(e)return;const t=w.current;if(!t)return;const n=new Event("close",{bubbles:!1,cancelable:!0});a&&t.addEventListener("close",a,{once:!0}),t.dispatchEvent(n),n.defaultPrevented&&C.setOpen(!0)}}),{portalRef:x,domReady:S}=kt(s,E.portalRef),_=E.preserveTabOrder,L=C.useState((e=>_&&!l&&e.mounted)),M=vt(E.id),P=C.useState("open"),T=C.useState("mounted"),N=C.useState("contentElement"),O=fr(T,E.hidden,E.alwaysVisible);kr(N,M,m&&!O),function(t,n,r){const o=function(t){const n=(0,e.useRef)();return(0,e.useEffect)((()=>{if(t)return ut("mousedown",(e=>{n.current=e.target}),!0);n.current=null}),[t]),n}(t.useState("open")),a={store:t,domReady:r,capture:!0};vr(Me(Le({},a),{type:"click",listener:e=>{const{contentElement:r}=t.getState(),a=o.current;a&&ot(a)&&lr(a,null==r?void 0:r.id)&&yr(n,e)&&t.hide()}})),vr(Me(Le({},a),{type:"focusin",listener:e=>{const{contentElement:r}=t.getState();r&&e.target!==Ke(r)&&yr(n,e)&&t.hide()}})),vr(Me(Le({},a),{type:"contextmenu",listener:e=>{yr(n,e)&&t.hide()}}))}(C,f,S);const{wrapElement:A,nestedDialogs:R}=function(t){const n=(0,e.useContext)(gr),[r,o]=(0,e.useState)([]),a=(0,e.useCallback)((e=>{var t;return o((t=>[...t,e])),We(null==(t=n.add)?void 0:t.call(n,e),(()=>{o((t=>t.filter((t=>t!==e))))}))}),[n]);pt((()=>Ot(t,["open","contentElement"],(e=>{var r;if(e.open&&e.contentElement)return null==(r=n.add)?void 0:r.call(n,t)}))),[t,n]);const i=(0,e.useMemo)((()=>({store:t,add:a})),[t,a]);return{wrapElement:(0,e.useCallback)((e=>(0,qt.jsx)(gr.Provider,{value:i,children:e})),[i]),nestedDialogs:r}}(C);E=Et(E,A,[A]),pt((()=>{if(!P)return;const e=w.current,t=Xe(e,!0);t&&"BODY"!==t.tagName&&(e&&Je(e,t)||C.setDisclosureElement(t))}),[C,P]),Nr&&(0,e.useEffect)((()=>{if(!T)return;const{disclosureElement:e}=C.getState();if(!e)return;if(!tt(e))return;const t=()=>{let t=!1;const n=()=>{t=!0};e.addEventListener("focusin",n,{capture:!0,once:!0}),st(e,"mouseup",(()=>{e.removeEventListener("focusin",n,!0),t||Sn(e)}))};return e.addEventListener("mousedown",t),()=>{e.removeEventListener("mousedown",t)}}),[C,T]);const j=l||s&&L&&Pn();(0,e.useEffect)((()=>{if(!T)return;if(!S)return;const e=w.current;return e&&j?e.querySelector("[data-dialog-dismiss]")?void 0:function(e,t){const n=Ke(e).createElement("button");return n.type="button",n.tabIndex=-1,n.textContent="Dismiss popup",Object.assign(n.style,{border:"0px",clip:"rect(0 0 0 0)",height:"1px",margin:"-1px",overflow:"hidden",padding:"0px",position:"absolute",whiteSpace:"nowrap",width:"1px"}),n.addEventListener("click",t),e.prepend(n),()=>{n.removeEventListener("click",t),n.remove()}}(e,C.hide):void 0}),[C,T,S,j]),pt((()=>{if(P)return;if(!T)return;if(!S)return;const e=w.current;return e?Er(e):void 0}),[P,T,S]);const F=P&&S;pt((()=>{if(!M)return;if(!F)return;const e=w.current;return function(e,t){const{body:n}=Ke(t[0]),r=[];return or(e,t,(t=>{r.push(Jn(t,nr(e),!0))})),We(Jn(n,nr(e),!0),(()=>r.forEach((e=>e()))))}(M,[e])}),[M,F]);const z=ht(p);pt((()=>{if(!M)return;if(!F)return;const{disclosureElement:e}=C.getState(),t=[w.current,...z()||[],...R.map((e=>e.getState().contentElement))];return j?l?We(sr(M,t),function(e,t){const n=[],r=t.map((e=>null==e?void 0:e.id));return or(e,t,(e=>{Gn(e,...r)||n.unshift(Er(e,t))})),()=>{n.forEach((e=>e()))}}(M,t)):We(sr(M,[e,...t]),function(e,t){const n=[],r=t.map((e=>null==e?void 0:e.id));return or(e,t,(e=>{Gn(e,...r)||n.unshift(br(e))})),()=>{n.forEach((e=>e()))}}(M,t)):sr(M,[e,...t])}),[M,C,F,z,R,j,l]);const I=!!h,H=bt(h),[B,D]=(0,e.useState)(!1);(0,e.useEffect)((()=>{if(!P)return;if(!I)return;if(!S)return;if(!(null==N?void 0:N.isConnected))return;const e=Or(v,!0)||N.querySelector("[data-autofocus=true],[autofocus]")||function(e,t,n){const[r]=En(e,t,n);return r||null}(N,!0,s&&L)||N,t=vn(e);H(t?e:null)&&(D(!0),queueMicrotask((()=>{e.focus(),Nr&&e.scrollIntoView({block:"nearest",inline:"nearest"})})))}),[P,I,S,N,v,s,L,H]);const W=!!g,$=bt(g),[U,V]=(0,e.useState)(!1);(0,e.useEffect)((()=>{if(P)return V(!0),()=>V(!1)}),[P]);const Z=(0,e.useCallback)(((e,t=!0)=>{const{disclosureElement:n}=C.getState();if(function(e){const t=Xe();return!(!t||e&&Je(e,t)||!vn(t))}(e))return;let r=Or(y)||n;if(null==r?void 0:r.id){const e=Ke(r),t=`[aria-activedescendant="${r.id}"]`,n=e.querySelector(t);n&&(r=n)}if(r&&!vn(r)){const e=at(r,"[data-dialog]");if(e&&e.id){const t=Ke(e),n=`[aria-controls~="${e.id}"]`,o=t.querySelector(n);o&&(r=o)}}const o=r&&vn(r);o||!t?$(o?r:null)&&o&&(null==r||r.focus()):requestAnimationFrame((()=>Z(e,!1)))}),[C,y,$]);pt((()=>{if(P)return;if(!U)return;if(!W)return;const e=w.current;Z(e)}),[P,U,S,W,Z]),(0,e.useEffect)((()=>{if(!U)return;if(!W)return;const e=w.current;return()=>Z(e)}),[U,W,Z]);const q=bt(d);(0,e.useEffect)((()=>{if(S&&T)return ut("keydown",(e=>{if("Escape"!==e.key)return;if(e.defaultPrevented)return;const t=w.current;if(!t)return;if(lr(t))return;const n=e.target;if(!n)return;const{disclosureElement:r}=C.getState();("BODY"===n.tagName||Je(t,n)||!r||Je(r,n))&&q(e)&&C.hide()}),!0)}),[C,S,T,q]);const Q=(E=Et(E,(e=>(0,qt.jsx)(xr,{level:l?1:void 0,children:e})),[l])).hidden,G=E.alwaysVisible;E=Et(E,(e=>u?(0,qt.jsxs)(qt.Fragment,{children:[(0,qt.jsx)(hr,{store:C,backdrop:u,backdropProps:c,hidden:Q,alwaysVisible:G}),e]}):e),[C,u,c,Q,G]);const[Y,K]=(0,e.useState)(),[X,J]=(0,e.useState)();return E=Et(E,(e=>(0,qt.jsx)(rn,{value:C,children:(0,qt.jsx)(on.Provider,{value:K,children:(0,qt.jsx)(an.Provider,{value:J,children:e})})})),[C]),E=Me(Le({id:M,"data-dialog":"",role:"dialog",tabIndex:i?-1:void 0,"aria-labelledby":Y,"aria-describedby":X},E),{ref:gt(w,E.ref)}),E=wr(Me(Le({},E),{autoFocusOnShow:B})),E=pr(Le({store:C},E)),E=In(Me(Le({},E),{focusable:i})),Tr(Me(Le({portal:s},E),{portalRef:x,preserveTabOrder:L}))}));function Rr(e,t=tn){return Qt((n=>{const r=t();return It(n.store||r,(e=>!n.unmountOnHide||(null==e?void 0:e.mounted)||!!n.open))?(0,qt.jsx)(e,Le({},n)):null}))}Rr(Qt((e=>Gt("div",Ar(e)))),tn);const jr=Math.min,Fr=Math.max,zr=Math.round,Ir=Math.floor,Hr=e=>({x:e,y:e}),Br={left:"right",right:"left",bottom:"top",top:"bottom"},Dr={start:"end",end:"start"};function Wr(e,t,n){return Fr(e,jr(t,n))}function $r(e,t){return"function"==typeof e?e(t):e}function Ur(e){return e.split("-")[0]}function Vr(e){return e.split("-")[1]}function Zr(e){return"x"===e?"y":"x"}function qr(e){return"y"===e?"height":"width"}function Qr(e){return["top","bottom"].includes(Ur(e))?"y":"x"}function Gr(e){return Zr(Qr(e))}function Yr(e){return e.replace(/start|end/g,(e=>Dr[e]))}function Kr(e){return e.replace(/left|right|bottom|top/g,(e=>Br[e]))}function Xr(e){return"number"!=typeof e?function(e){return{top:0,right:0,bottom:0,left:0,...e}}(e):{top:e,right:e,bottom:e,left:e}}function Jr(e){return{...e,top:e.y,left:e.x,right:e.x+e.width,bottom:e.y+e.height}}function eo(e,t,n){let{reference:r,floating:o}=e;const a=Qr(t),i=Gr(t),l=qr(i),s=Ur(t),u="y"===a,c=r.x+r.width/2-o.width/2,d=r.y+r.height/2-o.height/2,f=r[l]/2-o[l]/2;let p;switch(s){case"top":p={x:c,y:r.y-o.height};break;case"bottom":p={x:c,y:r.y+r.height};break;case"right":p={x:r.x+r.width,y:d};break;case"left":p={x:r.x-o.width,y:d};break;default:p={x:r.x,y:r.y}}switch(Vr(t)){case"start":p[i]-=f*(n&&u?-1:1);break;case"end":p[i]+=f*(n&&u?-1:1)}return p}async function to(e,t){var n;void 0===t&&(t={});const{x:r,y:o,platform:a,rects:i,elements:l,strategy:s}=e,{boundary:u="clippingAncestors",rootBoundary:c="viewport",elementContext:d="floating",altBoundary:f=!1,padding:p=0}=$r(t,e),m=Xr(p),h=l[f?"floating"===d?"reference":"floating":d],g=Jr(await a.getClippingRect({element:null==(n=await(null==a.isElement?void 0:a.isElement(h)))||n?h:h.contextElement||await(null==a.getDocumentElement?void 0:a.getDocumentElement(l.floating)),boundary:u,rootBoundary:c,strategy:s})),v="floating"===d?{...i.floating,x:r,y:o}:i.reference,y=await(null==a.getOffsetParent?void 0:a.getOffsetParent(l.floating)),b=await(null==a.isElement?void 0:a.isElement(y))&&await(null==a.getScale?void 0:a.getScale(y))||{x:1,y:1},E=Jr(a.convertOffsetParentRelativeRectToViewportRelativeRect?await a.convertOffsetParentRelativeRectToViewportRelativeRect({rect:v,offsetParent:y,strategy:s}):v);return{top:(g.top-E.top+m.top)/b.y,bottom:(E.bottom-g.bottom+m.bottom)/b.y,left:(g.left-E.left+m.left)/b.x,right:(E.right-g.right+m.right)/b.x}}function no(e){return ao(e)?(e.nodeName||"").toLowerCase():"#document"}function ro(e){var t;return(null==e||null==(t=e.ownerDocument)?void 0:t.defaultView)||window}function oo(e){var t;return null==(t=(ao(e)?e.ownerDocument:e.document)||window.document)?void 0:t.documentElement}function ao(e){return e instanceof Node||e instanceof ro(e).Node}function io(e){return e instanceof Element||e instanceof ro(e).Element}function lo(e){return e instanceof HTMLElement||e instanceof ro(e).HTMLElement}function so(e){return"undefined"!=typeof ShadowRoot&&(e instanceof ShadowRoot||e instanceof ro(e).ShadowRoot)}function uo(e){const{overflow:t,overflowX:n,overflowY:r,display:o}=ho(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&!["inline","contents"].includes(o)}function co(e){return["table","td","th"].includes(no(e))}function fo(e){const t=po(),n=ho(e);return"none"!==n.transform||"none"!==n.perspective||!!n.containerType&&"normal"!==n.containerType||!t&&!!n.backdropFilter&&"none"!==n.backdropFilter||!t&&!!n.filter&&"none"!==n.filter||["transform","perspective","filter"].some((e=>(n.willChange||"").includes(e)))||["paint","layout","strict","content"].some((e=>(n.contain||"").includes(e)))}function po(){return!("undefined"==typeof CSS||!CSS.supports)&&CSS.supports("-webkit-backdrop-filter","none")}function mo(e){return["html","body","#document"].includes(no(e))}function ho(e){return ro(e).getComputedStyle(e)}function go(e){return io(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function vo(e){if("html"===no(e))return e;const t=e.assignedSlot||e.parentNode||so(e)&&e.host||oo(e);return so(t)?t.host:t}function yo(e){const t=vo(e);return mo(t)?e.ownerDocument?e.ownerDocument.body:e.body:lo(t)&&uo(t)?t:yo(t)}function bo(e,t){var n;void 0===t&&(t=[]);const r=yo(e),o=r===(null==(n=e.ownerDocument)?void 0:n.body),a=ro(r);return o?t.concat(a,a.visualViewport||[],uo(r)?r:[]):t.concat(r,bo(r))}function Eo(e){const t=ho(e);let n=parseFloat(t.width)||0,r=parseFloat(t.height)||0;const o=lo(e),a=o?e.offsetWidth:n,i=o?e.offsetHeight:r,l=zr(n)!==a||zr(r)!==i;return l&&(n=a,r=i),{width:n,height:r,$:l}}function ko(e){return io(e)?e:e.contextElement}function wo(e){const t=ko(e);if(!lo(t))return Hr(1);const n=t.getBoundingClientRect(),{width:r,height:o,$:a}=Eo(t);let i=(a?zr(n.width):n.width)/r,l=(a?zr(n.height):n.height)/o;return i&&Number.isFinite(i)||(i=1),l&&Number.isFinite(l)||(l=1),{x:i,y:l}}const Co=Hr(0);function xo(e){const t=ro(e);return po()&&t.visualViewport?{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}:Co}function So(e,t,n,r){void 0===t&&(t=!1),void 0===n&&(n=!1);const o=e.getBoundingClientRect(),a=ko(e);let i=Hr(1);t&&(r?io(r)&&(i=wo(r)):i=wo(e));const l=function(e,t,n){return void 0===t&&(t=!1),!(!n||t&&n!==ro(e))&&t}(a,n,r)?xo(a):Hr(0);let s=(o.left+l.x)/i.x,u=(o.top+l.y)/i.y,c=o.width/i.x,d=o.height/i.y;if(a){const e=ro(a),t=r&&io(r)?ro(r):r;let n=e.frameElement;for(;n&&r&&t!==e;){const e=wo(n),t=n.getBoundingClientRect(),r=ho(n),o=t.left+(n.clientLeft+parseFloat(r.paddingLeft))*e.x,a=t.top+(n.clientTop+parseFloat(r.paddingTop))*e.y;s*=e.x,u*=e.y,c*=e.x,d*=e.y,s+=o,u+=a,n=ro(n).frameElement}}return Jr({width:c,height:d,x:s,y:u})}function _o(e){return So(oo(e)).left+go(e).scrollLeft}function Lo(e,t,n){let r;if("viewport"===t)r=function(e,t){const n=ro(e),r=oo(e),o=n.visualViewport;let a=r.clientWidth,i=r.clientHeight,l=0,s=0;if(o){a=o.width,i=o.height;const e=po();(!e||e&&"fixed"===t)&&(l=o.offsetLeft,s=o.offsetTop)}return{width:a,height:i,x:l,y:s}}(e,n);else if("document"===t)r=function(e){const t=oo(e),n=go(e),r=e.ownerDocument.body,o=Fr(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),a=Fr(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight);let i=-n.scrollLeft+_o(e);const l=-n.scrollTop;return"rtl"===ho(r).direction&&(i+=Fr(t.clientWidth,r.clientWidth)-o),{width:o,height:a,x:i,y:l}}(oo(e));else if(io(t))r=function(e,t){const n=So(e,!0,"fixed"===t),r=n.top+e.clientTop,o=n.left+e.clientLeft,a=lo(e)?wo(e):Hr(1);return{width:e.clientWidth*a.x,height:e.clientHeight*a.y,x:o*a.x,y:r*a.y}}(t,n);else{const n=xo(e);r={...t,x:t.x-n.x,y:t.y-n.y}}return Jr(r)}function Mo(e,t){const n=vo(e);return!(n===t||!io(n)||mo(n))&&("fixed"===ho(n).position||Mo(n,t))}function Po(e,t,n){const r=lo(t),o=oo(t),a="fixed"===n,i=So(e,!0,a,t);let l={scrollLeft:0,scrollTop:0};const s=Hr(0);if(r||!r&&!a)if(("body"!==no(t)||uo(o))&&(l=go(t)),r){const e=So(t,!0,a,t);s.x=e.x+t.clientLeft,s.y=e.y+t.clientTop}else o&&(s.x=_o(o));return{x:i.left+l.scrollLeft-s.x,y:i.top+l.scrollTop-s.y,width:i.width,height:i.height}}function To(e,t){return lo(e)&&"fixed"!==ho(e).position?t?t(e):e.offsetParent:null}function No(e,t){const n=ro(e);if(!lo(e))return n;let r=To(e,t);for(;r&&co(r)&&"static"===ho(r).position;)r=To(r,t);return r&&("html"===no(r)||"body"===no(r)&&"static"===ho(r).position&&!fo(r))?n:r||function(e){let t=vo(e);for(;lo(t)&&!mo(t);){if(fo(t))return t;t=vo(t)}return null}(e)||n}const Oo={convertOffsetParentRelativeRectToViewportRelativeRect:function(e){let{rect:t,offsetParent:n,strategy:r}=e;const o=lo(n),a=oo(n);if(n===a)return t;let i={scrollLeft:0,scrollTop:0},l=Hr(1);const s=Hr(0);if((o||!o&&"fixed"!==r)&&(("body"!==no(n)||uo(a))&&(i=go(n)),lo(n))){const e=So(n);l=wo(n),s.x=e.x+n.clientLeft,s.y=e.y+n.clientTop}return{width:t.width*l.x,height:t.height*l.y,x:t.x*l.x-i.scrollLeft*l.x+s.x,y:t.y*l.y-i.scrollTop*l.y+s.y}},getDocumentElement:oo,getClippingRect:function(e){let{element:t,boundary:n,rootBoundary:r,strategy:o}=e;const a="clippingAncestors"===n?function(e,t){const n=t.get(e);if(n)return n;let r=bo(e).filter((e=>io(e)&&"body"!==no(e))),o=null;const a="fixed"===ho(e).position;let i=a?vo(e):e;for(;io(i)&&!mo(i);){const t=ho(i),n=fo(i);n||"fixed"!==t.position||(o=null),(a?!n&&!o:!n&&"static"===t.position&&o&&["absolute","fixed"].includes(o.position)||uo(i)&&!n&&Mo(e,i))?r=r.filter((e=>e!==i)):o=t,i=vo(i)}return t.set(e,r),r}(t,this._c):[].concat(n),i=[...a,r],l=i[0],s=i.reduce(((e,n)=>{const r=Lo(t,n,o);return e.top=Fr(r.top,e.top),e.right=jr(r.right,e.right),e.bottom=jr(r.bottom,e.bottom),e.left=Fr(r.left,e.left),e}),Lo(t,l,o));return{width:s.right-s.left,height:s.bottom-s.top,x:s.left,y:s.top}},getOffsetParent:No,getElementRects:async function(e){let{reference:t,floating:n,strategy:r}=e;const o=this.getOffsetParent||No,a=this.getDimensions;return{reference:Po(t,await o(n),r),floating:{x:0,y:0,...await a(n)}}},getClientRects:function(e){return Array.from(e.getClientRects())},getDimensions:function(e){return Eo(e)},getScale:wo,isElement:io,isRTL:function(e){return"rtl"===ho(e).direction}};function Ao(e=0,t=0,n=0,r=0){if("function"==typeof DOMRect)return new DOMRect(e,t,n,r);const o={x:e,y:t,width:n,height:r,top:t,right:e+n,bottom:t+r,left:e};return Me(Le({},o),{toJSON:()=>o})}function Ro(e){return/^(?:top|bottom|left|right)(?:-(?:start|end))?$/.test(e)}function jo(e){const t=window.devicePixelRatio||1;return Math.round(e*t)/t}function Fo(e,t){return n=({placement:n})=>{var r;const o=((null==e?void 0:e.clientHeight)||0)/2,a="number"==typeof t.gutter?t.gutter+o:null!=(r=t.gutter)?r:o;return{crossAxis:n.split("-")[1]?void 0:t.shift,mainAxis:a,alignmentAxis:t.shift}},void 0===n&&(n=0),{name:"offset",options:n,async fn(e){const{x:t,y:r}=e,o=await async function(e,t){const{placement:n,platform:r,elements:o}=e,a=await(null==r.isRTL?void 0:r.isRTL(o.floating)),i=Ur(n),l=Vr(n),s="y"===Qr(n),u=["left","top"].includes(i)?-1:1,c=a&&s?-1:1,d=$r(t,e);let{mainAxis:f,crossAxis:p,alignmentAxis:m}="number"==typeof d?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:0,crossAxis:0,alignmentAxis:null,...d};return l&&"number"==typeof m&&(p="end"===l?-1*m:m),s?{x:p*c,y:f*u}:{x:f*u,y:p*c}}(e,n);return{x:t+o.x,y:r+o.y,data:o}}};var n}function zo(e){if(!1===e.flip)return;const t="string"==typeof e.flip?e.flip.split(" "):void 0;return Ue(!t||t.every(Ro),!1),void 0===(n={padding:e.overflowPadding,fallbackPlacements:t})&&(n={}),{name:"flip",options:n,async fn(e){var t;const{placement:r,middlewareData:o,rects:a,initialPlacement:i,platform:l,elements:s}=e,{mainAxis:u=!0,crossAxis:c=!0,fallbackPlacements:d,fallbackStrategy:f="bestFit",fallbackAxisSideDirection:p="none",flipAlignment:m=!0,...h}=$r(n,e),g=Ur(r),v=Ur(i)===i,y=await(null==l.isRTL?void 0:l.isRTL(s.floating)),b=d||(v||!m?[Kr(i)]:function(e){const t=Kr(e);return[Yr(e),t,Yr(t)]}(i));d||"none"===p||b.push(...function(e,t,n,r){const o=Vr(e);let a=function(e,t,n){const r=["left","right"],o=["right","left"],a=["top","bottom"],i=["bottom","top"];switch(e){case"top":case"bottom":return n?t?o:r:t?r:o;case"left":case"right":return t?a:i;default:return[]}}(Ur(e),"start"===n,r);return o&&(a=a.map((e=>e+"-"+o)),t&&(a=a.concat(a.map(Yr)))),a}(i,m,p,y));const E=[i,...b],k=await to(e,h),w=[];let C=(null==(t=o.flip)?void 0:t.overflows)||[];if(u&&w.push(k[g]),c){const e=function(e,t,n){void 0===n&&(n=!1);const r=Vr(e),o=Gr(e),a=qr(o);let i="x"===o?r===(n?"end":"start")?"right":"left":"start"===r?"bottom":"top";return t.reference[a]>t.floating[a]&&(i=Kr(i)),[i,Kr(i)]}(r,a,y);w.push(k[e[0]],k[e[1]])}if(C=[...C,{placement:r,overflows:w}],!w.every((e=>e<=0))){var x,S;const e=((null==(x=o.flip)?void 0:x.index)||0)+1,t=E[e];if(t)return{data:{index:e,overflows:C},reset:{placement:t}};let n=null==(S=C.filter((e=>e.overflows[0]<=0)).sort(((e,t)=>e.overflows[1]-t.overflows[1]))[0])?void 0:S.placement;if(!n)switch(f){case"bestFit":{var _;const e=null==(_=C.map((e=>[e.placement,e.overflows.filter((e=>e>0)).reduce(((e,t)=>e+t),0)])).sort(((e,t)=>e[1]-t[1]))[0])?void 0:_[0];e&&(n=e);break}case"initialPlacement":n=i}if(r!==n)return{reset:{placement:n}}}return{}}};var n}function Io(e){var t;if(e.slide||e.overlap)return void 0===(t={mainAxis:e.slide,crossAxis:e.overlap,padding:e.overflowPadding})&&(t={}),{name:"shift",options:t,async fn(e){const{x:n,y:r,placement:o}=e,{mainAxis:a=!0,crossAxis:i=!1,limiter:l={fn:e=>{let{x:t,y:n}=e;return{x:t,y:n}}},...s}=$r(t,e),u={x:n,y:r},c=await to(e,s),d=Qr(Ur(o)),f=Zr(d);let p=u[f],m=u[d];if(a){const e="y"===f?"bottom":"right";p=Wr(p+c["y"===f?"top":"left"],p,p-c[e])}if(i){const e="y"===d?"bottom":"right";m=Wr(m+c["y"===d?"top":"left"],m,m-c[e])}const h=l.fn({...e,[f]:p,[d]:m});return{...h,data:{x:h.x-n,y:h.y-r}}}}}function Ho(e){return void 0===(t={padding:e.overflowPadding,apply({elements:t,availableWidth:n,availableHeight:r,rects:o}){const a=t.floating,i=Math.round(o.reference.width);n=Math.floor(n),r=Math.floor(r),a.style.setProperty("--popover-anchor-width",`${i}px`),a.style.setProperty("--popover-available-width",`${n}px`),a.style.setProperty("--popover-available-height",`${r}px`),e.sameWidth&&(a.style.width=`${i}px`),e.fitViewport&&(a.style.maxWidth=`${n}px`,a.style.maxHeight=`${r}px`)}})&&(t={}),{name:"size",options:t,async fn(e){const{placement:n,rects:r,platform:o,elements:a}=e,{apply:i=(()=>{}),...l}=$r(t,e),s=await to(e,l),u=Ur(n),c=Vr(n),d="y"===Qr(n),{width:f,height:p}=r.floating;let m,h;"top"===u||"bottom"===u?(m=u,h=c===(await(null==o.isRTL?void 0:o.isRTL(a.floating))?"start":"end")?"left":"right"):(h=u,m="end"===c?"top":"bottom");const g=p-s[m],v=f-s[h],y=!e.middlewareData.shift;let b=g,E=v;if(d){const e=f-s.left-s.right;E=c||y?jr(v,e):e}else{const e=p-s.top-s.bottom;b=c||y?jr(g,e):e}if(y&&!c){const e=Fr(s.left,0),t=Fr(s.right,0),n=Fr(s.top,0),r=Fr(s.bottom,0);d?E=f-2*(0!==e||0!==t?e+t:Fr(s.left,s.right)):b=p-2*(0!==n||0!==r?n+r:Fr(s.top,s.bottom))}await i({...e,availableWidth:E,availableHeight:b});const k=await o.getDimensions(a.floating);return f!==k.width||p!==k.height?{reset:{rects:!0}}:{}}};var t}function Bo(e,t){var n;if(e)return{name:"arrow",options:n={element:e,padding:t.arrowPadding},async fn(e){const{x:t,y:r,placement:o,rects:a,platform:i,elements:l}=e,{element:s,padding:u=0}=$r(n,e)||{};if(null==s)return{};const c=Xr(u),d={x:t,y:r},f=Gr(o),p=qr(f),m=await i.getDimensions(s),h="y"===f,g=h?"top":"left",v=h?"bottom":"right",y=h?"clientHeight":"clientWidth",b=a.reference[p]+a.reference[f]-d[f]-a.floating[p],E=d[f]-a.reference[f],k=await(null==i.getOffsetParent?void 0:i.getOffsetParent(s));let w=k?k[y]:0;w&&await(null==i.isElement?void 0:i.isElement(k))||(w=l.floating[y]||a.floating[p]);const C=b/2-E/2,x=w/2-m[p]/2-1,S=jr(c[g],x),_=jr(c[v],x),L=S,M=w-m[p]-_,P=w/2-m[p]/2+C,T=Wr(L,P,M),N=null!=Vr(o)&&P!=T&&a.reference[p]/2-(P<L?S:_)-m[p]/2<0?P<L?L-P:M-P:0;return{[f]:d[f]-N,data:{[f]:T,centerOffset:P-T+N}}}}}var Do=Yt((t=>{var n=t,{store:r,modal:o=!1,portal:a=!!o,preserveTabOrder:i=!0,autoFocusOnShow:l=!0,wrapperProps:s,fixed:u=!1,flip:c=!0,shift:d=0,slide:f=!0,overlap:p=!1,sameWidth:m=!1,fitViewport:h=!1,gutter:g,arrowPadding:v=4,overflowPadding:y=8,getAnchorRect:b,updatePosition:E}=n,k=Pe(n,["store","modal","portal","preserveTabOrder","autoFocusOnShow","wrapperProps","fixed","flip","shift","slide","overlap","sameWidth","fitViewport","gutter","arrowPadding","overflowPadding","getAnchorRect","updatePosition"]);const w=sn();Ue(r=r||w,!1);const C=r.useState("arrowElement"),x=r.useState("anchorElement"),S=r.useState("popoverElement"),_=r.useState("contentElement"),L=r.useState("placement"),M=r.useState("mounted"),P=r.useState("rendered"),[T,N]=(0,e.useState)(!1),{portalRef:O,domReady:A}=kt(a,k.portalRef),R=ht(b),j=ht(E),F=!!E;pt((()=>{if(!(null==S?void 0:S.isConnected))return;S.style.setProperty("--popover-overflow-padding",`${y}px`);const e=function(e,t){return{contextElement:e||void 0,getBoundingClientRect:()=>{const n=e,r=null==t?void 0:t(n);return r||!n?function(e){if(!e)return Ao();const{x:t,y:n,width:r,height:o}=e;return Ao(t,n,r,o)}(r):n.getBoundingClientRect()}}}(x,R),t=async()=>{if(!M)return;const t=[Fo(C,{gutter:g,shift:d}),zo({flip:c,overflowPadding:y}),Io({slide:f,overlap:p,overflowPadding:y}),Bo(C,{arrowPadding:v}),Ho({sameWidth:m,fitViewport:h,overflowPadding:y})],n=await((e,t,n)=>{const r=new Map,o={platform:Oo,...n},a={...o.platform,_c:r};return(async(e,t,n)=>{const{placement:r="bottom",strategy:o="absolute",middleware:a=[],platform:i}=n,l=a.filter(Boolean),s=await(null==i.isRTL?void 0:i.isRTL(t));let u=await i.getElementRects({reference:e,floating:t,strategy:o}),{x:c,y:d}=eo(u,r,s),f=r,p={},m=0;for(let n=0;n<l.length;n++){const{name:a,fn:h}=l[n],{x:g,y:v,data:y,reset:b}=await h({x:c,y:d,initialPlacement:r,placement:f,strategy:o,middlewareData:p,rects:u,platform:i,elements:{reference:e,floating:t}});c=null!=g?g:c,d=null!=v?v:d,p={...p,[a]:{...p[a],...y}},b&&m<=50&&(m++,"object"==typeof b&&(b.placement&&(f=b.placement),b.rects&&(u=!0===b.rects?await i.getElementRects({reference:e,floating:t,strategy:o}):b.rects),({x:c,y:d}=eo(u,f,s))),n=-1)}return{x:c,y:d,placement:f,strategy:o,middlewareData:p}})(e,t,{...o,platform:a})})(e,S,{placement:L,strategy:u?"fixed":"absolute",middleware:t});null==r||r.setState("currentPlacement",n.placement),N(!0);const o=jo(n.x),a=jo(n.y);if(Object.assign(S.style,{top:"0",left:"0",transform:`translate3d(${o}px,${a}px,0)`}),C&&n.middlewareData.arrow){const{x:e,y:t}=n.middlewareData.arrow,r=n.placement.split("-")[0];Object.assign(C.style,{left:null!=e?`${e}px`:"",top:null!=t?`${t}px`:"",[r]:"100%"})}},n=function(e,t,n,r){void 0===r&&(r={});const{ancestorScroll:o=!0,ancestorResize:a=!0,elementResize:i="function"==typeof ResizeObserver,layoutShift:l="function"==typeof IntersectionObserver,animationFrame:s=!1}=r,u=ko(e),c=o||a?[...u?bo(u):[],...bo(t)]:[];c.forEach((e=>{o&&e.addEventListener("scroll",n,{passive:!0}),a&&e.addEventListener("resize",n)}));const d=u&&l?function(e,t){let n,r=null;const o=oo(e);function a(){clearTimeout(n),r&&r.disconnect(),r=null}return function i(l,s){void 0===l&&(l=!1),void 0===s&&(s=1),a();const{left:u,top:c,width:d,height:f}=e.getBoundingClientRect();if(l||t(),!d||!f)return;const p={rootMargin:-Ir(c)+"px "+-Ir(o.clientWidth-(u+d))+"px "+-Ir(o.clientHeight-(c+f))+"px "+-Ir(u)+"px",threshold:Fr(0,jr(1,s))||1};let m=!0;function h(e){const t=e[0].intersectionRatio;if(t!==s){if(!m)return i();t?i(!1,t):n=setTimeout((()=>{i(!1,1e-7)}),100)}m=!1}try{r=new IntersectionObserver(h,{...p,root:o.ownerDocument})}catch(e){r=new IntersectionObserver(h,p)}r.observe(e)}(!0),a}(u,n):null;let f,p=-1,m=null;i&&(m=new ResizeObserver((e=>{let[r]=e;r&&r.target===u&&m&&(m.unobserve(t),cancelAnimationFrame(p),p=requestAnimationFrame((()=>{m&&m.observe(t)}))),n()})),u&&!s&&m.observe(u),m.observe(t));let h=s?So(e):null;return s&&function t(){const r=So(e);!h||r.x===h.x&&r.y===h.y&&r.width===h.width&&r.height===h.height||n(),h=r,f=requestAnimationFrame(t)}(),n(),()=>{c.forEach((e=>{o&&e.removeEventListener("scroll",n),a&&e.removeEventListener("resize",n)})),d&&d(),m&&m.disconnect(),m=null,s&&cancelAnimationFrame(f)}}(e,S,(async()=>{F?(await j({updatePosition:t}),N(!0)):await t()}),{elementResize:"function"==typeof ResizeObserver});return()=>{N(!1),n()}}),[r,P,S,C,x,S,L,M,A,u,c,d,f,p,m,h,g,v,y,R,F,j]),pt((()=>{if(!M)return;if(!A)return;if(!(null==S?void 0:S.isConnected))return;if(!(null==_?void 0:_.isConnected))return;const e=()=>{S.style.zIndex=getComputedStyle(_).zIndex};e();let t=requestAnimationFrame((()=>{t=requestAnimationFrame(e)}));return()=>cancelAnimationFrame(t)}),[M,A,S,_]);const z=u?"fixed":"absolute";return k=Et(k,(e=>(0,qt.jsx)("div",Me(Le({role:"presentation"},s),{style:Le({position:z,top:0,left:0,width:"max-content"},null==s?void 0:s.style),ref:null==r?void 0:r.setPopoverElement,children:e}))),[r,z,s]),k=Et(k,(e=>(0,qt.jsx)(cn,{value:r,children:e})),[r]),k=Me(Le({"data-placing":T?void 0:""},k),{style:Le({position:"relative"},k.style)}),Ar(Me(Le({store:r,modal:o,preserveTabOrder:i,portal:a,autoFocusOnShow:T&&l},k),{portalRef:O}))}));function Wo(e,t,n,r){return!!(xn(t)||e&&(Je(t,e)||n&&Je(n,e)||(null==r?void 0:r.some((t=>Wo(e,t,n))))))}Rr(Qt((e=>Gt("div",Do(e)))),sn);var $o=(0,e.createContext)(null),Uo=Yt((t=>{var n=t,{store:r,modal:o=!1,portal:a=!!o,hideOnEscape:i=!0,hideOnHoverOutside:l=!0,disablePointerEventsOnApproach:s=!!l}=n,u=Pe(n,["store","modal","portal","hideOnEscape","hideOnHoverOutside","disablePointerEventsOnApproach"]);const c=fn();Ue(r=r||c,!1);const d=(0,e.useRef)(null),[f,p]=(0,e.useState)([]),m=(0,e.useRef)(0),h=(0,e.useRef)(null),{portalRef:g,domReady:v}=kt(a,u.portalRef),y=!!l,b=bt(l),E=!!s,k=bt(s),w=r.useState("open"),C=r.useState("mounted");(0,e.useEffect)((()=>{if(!v)return;if(!C)return;if(!y&&!E)return;const e=d.current;return e?We(ut("mousemove",(t=>{if(!r)return;const{anchorElement:n,hideTimeout:o,timeout:a}=r.getState(),i=h.current,l=t.target,s=n;if(Wo(l,e,s,f))return h.current=l&&s&&Je(s,l)?Zn(t):null,window.clearTimeout(m.current),void(m.current=0);if(!m.current){if(i){const n=Zn(t);if(qn(n,Qn(e,i))){if(h.current=n,!k(t))return;return t.preventDefault(),void t.stopPropagation()}}b(t)&&(m.current=window.setTimeout((()=>{m.current=0,null==r||r.hide()}),null!=o?o:a))}}),!0),(()=>clearTimeout(m.current))):void 0}),[r,v,C,y,E,f,k,b]),(0,e.useEffect)((()=>{if(!v)return;if(!C)return;if(!E)return;const e=e=>{const t=d.current;if(!t)return;const n=h.current;if(!n)return;const r=Qn(t,n);if(qn(Zn(e),r)){if(!k(e))return;e.preventDefault(),e.stopPropagation()}};return We(ut("mouseenter",e,!0),ut("mouseover",e,!0),ut("mouseout",e,!0),ut("mouseleave",e,!0))}),[v,C,E,k]),(0,e.useEffect)((()=>{v&&(w||null==r||r.setAutoFocusOnShow(!1))}),[r,v,w]);const x=mt(w);(0,e.useEffect)((()=>{if(v)return()=>{x.current||null==r||r.setAutoFocusOnShow(!1)}}),[r,v]);const S=(0,e.useContext)($o);pt((()=>{if(o)return;if(!a)return;if(!C)return;if(!v)return;const e=d.current;return e?null==S?void 0:S(e):void 0}),[o,a,C,v]);const _=(0,e.useCallback)((e=>{p((t=>[...t,e]));const t=null==S?void 0:S(e);return()=>{p((t=>t.filter((t=>t!==e)))),null==t||t()}}),[S]);u=Et(u,(e=>(0,qt.jsx)(mn,{value:r,children:(0,qt.jsx)($o.Provider,{value:_,children:e})})),[r,_]),u=Me(Le({},u),{ref:gt(d,u.ref)}),u=function(t){var n=t,{store:r}=n,o=Pe(n,["store"]);const[a,i]=(0,e.useState)(!1),l=r.useState("mounted");(0,e.useEffect)((()=>{l||i(!1)}),[l]);const s=o.onFocus,u=ht((e=>{null==s||s(e),e.defaultPrevented||i(!0)})),c=(0,e.useRef)(null);return(0,e.useEffect)((()=>Ot(r,["anchorElement"],(e=>{c.current=e.anchorElement}))),[]),Me(Le({autoFocusOnHide:a,finalFocus:c},o),{onFocus:u})}(Le({store:r},u));const L=r.useState((e=>o||e.autoFocusOnShow));return Do(Me(Le({store:r,modal:o,portal:a,autoFocusOnShow:L},u),{portalRef:g,hideOnEscape:e=>!Ve(i,e)&&(requestAnimationFrame((()=>{requestAnimationFrame((()=>{null==r||r.hide()}))})),!0)}))}));Rr(Qt((e=>Gt("div",Uo(e)))),fn);var Vo=Yt((e=>{var t=e,{store:n,portal:r=!0,gutter:o=8,preserveTabOrder:a=!1,hideOnHoverOutside:i=!0,hideOnInteractOutside:l=!0}=t,s=Pe(t,["store","portal","gutter","preserveTabOrder","hideOnHoverOutside","hideOnInteractOutside"]);const u=Dn();Ue(n=n||u,!1),s=Et(s,(e=>(0,qt.jsx)(Wn,{value:n,children:e})),[n]);const c=n.useState((e=>"description"===e.type?"tooltip":"none"));return s=Le({role:c},s),Uo(Me(Le({},s),{store:n,portal:r,gutter:o,preserveTabOrder:a,hideOnHoverOutside:e=>{if(Ve(i,e))return!1;const t=null==n?void 0:n.getState().anchorElement;return!t||!("focusVisible"in t.dataset)},hideOnInteractOutside:e=>{if(Ve(l,e))return!1;const t=null==n?void 0:n.getState().anchorElement;return!t||!Je(t,e.target)}}))})),Zo=Rr(Qt((e=>Gt("div",Vo(e)))),Dn);const qo=function(t){const{shortcut:n,className:r}=t;if(!n)return null;let o,a;return"string"==typeof n&&(o=n),null!==n&&"object"==typeof n&&(o=n.display,a=n.ariaLabel),(0,e.createElement)("span",{className:r,"aria-label":a},o)},Qo={bottom:"bottom",top:"top","middle left":"left","middle right":"right","bottom left":"bottom-end","bottom center":"bottom","bottom right":"bottom-start","top left":"top-end","top center":"top","top right":"top-start","middle left left":"left","middle left right":"left","middle left bottom":"left-end","middle left top":"left-start","middle right left":"right","middle right right":"right","middle right bottom":"right-end","middle right top":"right-start","bottom left left":"bottom-end","bottom left right":"bottom-end","bottom left bottom":"bottom-end","bottom left top":"bottom-end","bottom center left":"bottom","bottom center right":"bottom","bottom center bottom":"bottom","bottom center top":"bottom","bottom right left":"bottom-start","bottom right right":"bottom-start","bottom right bottom":"bottom-start","bottom right top":"bottom-start","top left left":"top-end","top left right":"top-end","top left bottom":"top-end","top left top":"top-end","top center left":"top","top center right":"top","top center bottom":"top","top center top":"top","top right left":"top-start","top right right":"top-start","top right bottom":"top-start","top right top":"top-start",middle:"bottom","middle center":"bottom","middle center bottom":"bottom","middle center left":"bottom","middle center right":"bottom","middle center top":"bottom"},Go=e=>{var t;return null!==(t=Qo[e])&&void 0!==t?t:"bottom"},Yo=700,Ko=function t(n){const{children:r,delay:o=Yo,hideOnClick:a=!0,placement:i,position:l,shortcut:s,text:u}=n,c=be(t,"tooltip"),d=u||s?c:void 0,f=1===e.Children.count(r);let p;void 0!==i?p=i:void 0!==l&&(p=Go(l),ve("`position` prop in wp.components.tooltip",{since:"6.4",alternative:"`placement` prop"})),p=p||"bottom";const m=function(e={}){const[t,n]=Bt(Zt,e);return function(e,t,n){return Ht(e=Vt(e,t,n),n,"type"),Ht(e,n,"skipTimeout"),e}(t,n,e)}({placement:p,timeout:o});return(0,e.createElement)(e.Fragment,null,(0,e.createElement)(Vn,{onClick:a?m.hide:void 0,store:m,render:f?r:void 0},f?void 0:r),f&&(u||s)&&(0,e.createElement)(Zo,{unmountOnHide:!0,className:"components-tooltip",gutter:4,id:d,overflowPadding:.5,store:m},u,s&&(0,e.createElement)(qo,{className:u?"components-tooltip__shortcut":"",shortcut:s})))},Xo=t=>(0,e.createElement)("path",t),Jo=(0,e.forwardRef)((({className:t,isPressed:n,...r},o)=>{const a={...r,className:x()(t,{"is-pressed":n})||void 0,"aria-hidden":!0,focusable:!1};return(0,e.createElement)("svg",{...a,ref:o})}));Jo.displayName="SVG";const ea=function({icon:t,className:n,size:r=20,style:o={},...a}){const i=["dashicon","dashicons","dashicons-"+t,n].filter(Boolean).join(" "),l={...20!=r?{fontSize:`${r}px`,width:`${r}px`,height:`${r}px`}:{},...o};return(0,e.createElement)("span",{className:i,style:l,...a})},ta=function({icon:t=null,size:n=("string"==typeof t?20:24),...r}){if("string"==typeof t)return(0,e.createElement)(ea,{icon:t,size:n,...r});if((0,e.isValidElement)(t)&&ea===t.type)return(0,e.cloneElement)(t,{...r});if("function"==typeof t)return(0,e.createElement)(t,{size:n,...r});if(t&&("svg"===t.type||t.type===Jo)){const o={...t.props,width:n,height:n,...r};return(0,e.createElement)(Jo,{...o})}return(0,e.isValidElement)(t)?(0,e.cloneElement)(t,{size:n,...r}):t};var na=o(996),ra=o.n(na),oa=o(991),aa=o.n(oa);function ia(e){return"[object Object]"===Object.prototype.toString.call(e)}function la(e){var t,n;return!1!==ia(e)&&(void 0===(t=e.constructor)||!1!==ia(n=t.prototype)&&!1!==n.hasOwnProperty("isPrototypeOf"))}const sa=function(t,n){const r=(0,e.useRef)(!1);(0,e.useEffect)((()=>{if(r.current)return t();r.current=!0}),n)},ua=(0,e.createContext)({}),ca=()=>(0,e.useContext)(ua);(0,e.memo)((({children:t,value:n})=>{const r=function({value:t}){const n=ca(),r=(0,e.useRef)(t);return sa((()=>{aa()(r.current,t)&&r.current}),[t]),(0,e.useMemo)((()=>ra()(null!=n?n:{},null!=t?t:{},{isMergeableObject:la})),[n,t])}({value:n});return(0,e.createElement)(ua.Provider,{value:r},t)}));const da="data-wp-component",fa="data-wp-c16t",pa="__contextSystemKey__";var ma=function(){return ma=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},ma.apply(this,arguments)};function ha(e){return e.toLowerCase()}Object.create,Object.create,"function"==typeof SuppressedError&&SuppressedError;var ga=[/([a-z0-9])([A-Z])/g,/([A-Z])([A-Z][a-z])/g],va=/[^A-Z0-9]+/gi;function ya(e,t,n){return t instanceof RegExp?e.replace(t,n):t.reduce((function(e,t){return e.replace(t,n)}),e)}function ba(e,t){var n,r,o=0;function a(){var a,i,l=n,s=arguments.length;e:for(;l;){if(l.args.length===arguments.length){for(i=0;i<s;i++)if(l.args[i]!==arguments[i]){l=l.next;continue e}return l!==n&&(l===r&&(r=l.prev),l.prev.next=l.next,l.next&&(l.next.prev=l.prev),l.next=n,l.prev=null,n.prev=l,n=l),l.val}l=l.next}for(a=new Array(s),i=0;i<s;i++)a[i]=arguments[i];return l={args:a,val:e.apply(null,a)},n?(n.prev=l,l.next=n):r=l,o===t.maxSize?(r=r.prev).next=null:o++,n=l,l.val}return t=t||{},a.clear=function(){n=null,r=null,o=0},a}const Ea=ba((function(e){var t;return`components-${void 0===t&&(t={}),function(e,t){return void 0===t&&(t={}),function(e,t){void 0===t&&(t={});for(var n=t.splitRegexp,r=void 0===n?ga:n,o=t.stripRegexp,a=void 0===o?va:o,i=t.transform,l=void 0===i?ha:i,s=t.delimiter,u=void 0===s?" ":s,c=ya(ya(e,r,"$1\0$2"),a,"\0"),d=0,f=c.length;"\0"===c.charAt(d);)d++;for(;"\0"===c.charAt(f-1);)f--;return c.slice(d,f).split("\0").map(l).join(u)}(e,ma({delimiter:"."},t))}(e,ma({delimiter:"-"},t))}`}));var ka=function(){function e(e){var t=this;this._insertTag=function(e){var n;n=0===t.tags.length?t.insertionPoint?t.insertionPoint.nextSibling:t.prepend?t.container.firstChild:t.before:t.tags[t.tags.length-1].nextSibling,t.container.insertBefore(e,n),t.tags.push(e)},this.isSpeedy=void 0===e.speedy||e.speedy,this.tags=[],this.ctr=0,this.nonce=e.nonce,this.key=e.key,this.container=e.container,this.prepend=e.prepend,this.insertionPoint=e.insertionPoint,this.before=null}var t=e.prototype;return t.hydrate=function(e){e.forEach(this._insertTag)},t.insert=function(e){this.ctr%(this.isSpeedy?65e3:1)==0&&this._insertTag(function(e){var t=document.createElement("style");return t.setAttribute("data-emotion",e.key),void 0!==e.nonce&&t.setAttribute("nonce",e.nonce),t.appendChild(document.createTextNode("")),t.setAttribute("data-s",""),t}(this));var t=this.tags[this.tags.length-1];if(this.isSpeedy){var n=function(e){if(e.sheet)return e.sheet;for(var t=0;t<document.styleSheets.length;t++)if(document.styleSheets[t].ownerNode===e)return document.styleSheets[t]}(t);try{n.insertRule(e,n.cssRules.length)}catch(e){}}else t.appendChild(document.createTextNode(e));this.ctr++},t.flush=function(){this.tags.forEach((function(e){return e.parentNode&&e.parentNode.removeChild(e)})),this.tags=[],this.ctr=0},e}(),wa=Math.abs,Ca=String.fromCharCode,xa=Object.assign;function Sa(e){return e.trim()}function _a(e,t,n){return e.replace(t,n)}function La(e,t){return e.indexOf(t)}function Ma(e,t){return 0|e.charCodeAt(t)}function Pa(e,t,n){return e.slice(t,n)}function Ta(e){return e.length}function Na(e){return e.length}function Oa(e,t){return t.push(e),e}var Aa=1,Ra=1,ja=0,Fa=0,za=0,Ia="";function Ha(e,t,n,r,o,a,i){return{value:e,root:t,parent:n,type:r,props:o,children:a,line:Aa,column:Ra,length:i,return:""}}function Ba(e,t){return xa(Ha("",null,null,"",null,null,0),e,{length:-e.length},t)}function Da(){return za=Fa>0?Ma(Ia,--Fa):0,Ra--,10===za&&(Ra=1,Aa--),za}function Wa(){return za=Fa<ja?Ma(Ia,Fa++):0,Ra++,10===za&&(Ra=1,Aa++),za}function $a(){return Ma(Ia,Fa)}function Ua(){return Fa}function Va(e,t){return Pa(Ia,e,t)}function Za(e){switch(e){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function qa(e){return Aa=Ra=1,ja=Ta(Ia=e),Fa=0,[]}function Qa(e){return Ia="",e}function Ga(e){return Sa(Va(Fa-1,Xa(91===e?e+2:40===e?e+1:e)))}function Ya(e){for(;(za=$a())&&za<33;)Wa();return Za(e)>2||Za(za)>3?"":" "}function Ka(e,t){for(;--t&&Wa()&&!(za<48||za>102||za>57&&za<65||za>70&&za<97););return Va(e,Ua()+(t<6&&32==$a()&&32==Wa()))}function Xa(e){for(;Wa();)switch(za){case e:return Fa;case 34:case 39:34!==e&&39!==e&&Xa(za);break;case 40:41===e&&Xa(e);break;case 92:Wa()}return Fa}function Ja(e,t){for(;Wa()&&e+za!==57&&(e+za!==84||47!==$a()););return"/*"+Va(t,Fa-1)+"*"+Ca(47===e?e:Wa())}function ei(e){for(;!Za($a());)Wa();return Va(e,Fa)}var ti="-ms-",ni="-moz-",ri="-webkit-",oi="comm",ai="rule",ii="decl",li="@keyframes";function si(e,t){for(var n="",r=Na(e),o=0;o<r;o++)n+=t(e[o],o,e,t)||"";return n}function ui(e,t,n,r){switch(e.type){case"@layer":if(e.children.length)break;case"@import":case ii:return e.return=e.return||e.value;case oi:return"";case li:return e.return=e.value+"{"+si(e.children,r)+"}";case ai:e.value=e.props.join(",")}return Ta(n=si(e.children,r))?e.return=e.value+"{"+n+"}":""}function ci(e){return Qa(di("",null,null,null,[""],e=qa(e),0,[0],e))}function di(e,t,n,r,o,a,i,l,s){for(var u=0,c=0,d=i,f=0,p=0,m=0,h=1,g=1,v=1,y=0,b="",E=o,k=a,w=r,C=b;g;)switch(m=y,y=Wa()){case 40:if(108!=m&&58==Ma(C,d-1)){-1!=La(C+=_a(Ga(y),"&","&\f"),"&\f")&&(v=-1);break}case 34:case 39:case 91:C+=Ga(y);break;case 9:case 10:case 13:case 32:C+=Ya(m);break;case 92:C+=Ka(Ua()-1,7);continue;case 47:switch($a()){case 42:case 47:Oa(pi(Ja(Wa(),Ua()),t,n),s);break;default:C+="/"}break;case 123*h:l[u++]=Ta(C)*v;case 125*h:case 59:case 0:switch(y){case 0:case 125:g=0;case 59+c:-1==v&&(C=_a(C,/\f/g,"")),p>0&&Ta(C)-d&&Oa(p>32?mi(C+";",r,n,d-1):mi(_a(C," ","")+";",r,n,d-2),s);break;case 59:C+=";";default:if(Oa(w=fi(C,t,n,u,c,o,l,b,E=[],k=[],d),a),123===y)if(0===c)di(C,t,w,w,E,a,d,l,k);else switch(99===f&&110===Ma(C,3)?100:f){case 100:case 108:case 109:case 115:di(e,w,w,r&&Oa(fi(e,w,w,0,0,o,l,b,o,E=[],d),k),o,k,d,l,r?E:k);break;default:di(C,w,w,w,[""],k,0,l,k)}}u=c=p=0,h=v=1,b=C="",d=i;break;case 58:d=1+Ta(C),p=m;default:if(h<1)if(123==y)--h;else if(125==y&&0==h++&&125==Da())continue;switch(C+=Ca(y),y*h){case 38:v=c>0?1:(C+="\f",-1);break;case 44:l[u++]=(Ta(C)-1)*v,v=1;break;case 64:45===$a()&&(C+=Ga(Wa())),f=$a(),c=d=Ta(b=C+=ei(Ua())),y++;break;case 45:45===m&&2==Ta(C)&&(h=0)}}return a}function fi(e,t,n,r,o,a,i,l,s,u,c){for(var d=o-1,f=0===o?a:[""],p=Na(f),m=0,h=0,g=0;m<r;++m)for(var v=0,y=Pa(e,d+1,d=wa(h=i[m])),b=e;v<p;++v)(b=Sa(h>0?f[v]+" "+y:_a(y,/&\f/g,f[v])))&&(s[g++]=b);return Ha(e,t,n,0===o?ai:l,s,u,c)}function pi(e,t,n){return Ha(e,t,n,oi,Ca(za),Pa(e,2,-2),0)}function mi(e,t,n,r){return Ha(e,t,n,ii,Pa(e,0,r),Pa(e,r+1,-1),r)}var hi=function(e,t,n){for(var r=0,o=0;r=o,o=$a(),38===r&&12===o&&(t[n]=1),!Za(o);)Wa();return Va(e,Fa)},gi=new WeakMap,vi=function(e){if("rule"===e.type&&e.parent&&!(e.length<1)){for(var t=e.value,n=e.parent,r=e.column===n.column&&e.line===n.line;"rule"!==n.type;)if(!(n=n.parent))return;if((1!==e.props.length||58===t.charCodeAt(0)||gi.get(n))&&!r){gi.set(e,!0);for(var o=[],a=function(e,t){return Qa(function(e,t){var n=-1,r=44;do{switch(Za(r)){case 0:38===r&&12===$a()&&(t[n]=1),e[n]+=hi(Fa-1,t,n);break;case 2:e[n]+=Ga(r);break;case 4:if(44===r){e[++n]=58===$a()?"&\f":"",t[n]=e[n].length;break}default:e[n]+=Ca(r)}}while(r=Wa());return e}(qa(e),t))}(t,o),i=n.props,l=0,s=0;l<a.length;l++)for(var u=0;u<i.length;u++,s++)e.props[s]=o[l]?a[l].replace(/&\f/g,i[u]):i[u]+" "+a[l]}}},yi=function(e){if("decl"===e.type){var t=e.value;108===t.charCodeAt(0)&&98===t.charCodeAt(2)&&(e.return="",e.value="")}};function bi(e,t){switch(function(e,t){return 45^Ma(e,0)?(((t<<2^Ma(e,0))<<2^Ma(e,1))<<2^Ma(e,2))<<2^Ma(e,3):0}(e,t)){case 5103:return ri+"print-"+e+e;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return ri+e+e;case 5349:case 4246:case 4810:case 6968:case 2756:return ri+e+ni+e+ti+e+e;case 6828:case 4268:return ri+e+ti+e+e;case 6165:return ri+e+ti+"flex-"+e+e;case 5187:return ri+e+_a(e,/(\w+).+(:[^]+)/,ri+"box-$1$2"+ti+"flex-$1$2")+e;case 5443:return ri+e+ti+"flex-item-"+_a(e,/flex-|-self/,"")+e;case 4675:return ri+e+ti+"flex-line-pack"+_a(e,/align-content|flex-|-self/,"")+e;case 5548:return ri+e+ti+_a(e,"shrink","negative")+e;case 5292:return ri+e+ti+_a(e,"basis","preferred-size")+e;case 6060:return ri+"box-"+_a(e,"-grow","")+ri+e+ti+_a(e,"grow","positive")+e;case 4554:return ri+_a(e,/([^-])(transform)/g,"$1"+ri+"$2")+e;case 6187:return _a(_a(_a(e,/(zoom-|grab)/,ri+"$1"),/(image-set)/,ri+"$1"),e,"")+e;case 5495:case 3959:return _a(e,/(image-set\([^]*)/,ri+"$1$`$1");case 4968:return _a(_a(e,/(.+:)(flex-)?(.*)/,ri+"box-pack:$3"+ti+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+ri+e+e;case 4095:case 3583:case 4068:case 2532:return _a(e,/(.+)-inline(.+)/,ri+"$1$2")+e;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(Ta(e)-1-t>6)switch(Ma(e,t+1)){case 109:if(45!==Ma(e,t+4))break;case 102:return _a(e,/(.+:)(.+)-([^]+)/,"$1"+ri+"$2-$3$1"+ni+(108==Ma(e,t+3)?"$3":"$2-$3"))+e;case 115:return~La(e,"stretch")?bi(_a(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(115!==Ma(e,t+1))break;case 6444:switch(Ma(e,Ta(e)-3-(~La(e,"!important")&&10))){case 107:return _a(e,":",":"+ri)+e;case 101:return _a(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+ri+(45===Ma(e,14)?"inline-":"")+"box$3$1"+ri+"$2$3$1"+ti+"$2box$3")+e}break;case 5936:switch(Ma(e,t+11)){case 114:return ri+e+ti+_a(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return ri+e+ti+_a(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return ri+e+ti+_a(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return ri+e+ti+e+e}return e}var Ei=[function(e,t,n,r){if(e.length>-1&&!e.return)switch(e.type){case ii:e.return=bi(e.value,e.length);break;case li:return si([Ba(e,{value:_a(e.value,"@","@"+ri)})],r);case ai:if(e.length)return function(e,t){return e.map(t).join("")}(e.props,(function(t){switch(function(e,t){return(e=/(::plac\w+|:read-\w+)/.exec(e))?e[0]:e}(t)){case":read-only":case":read-write":return si([Ba(e,{props:[_a(t,/:(read-\w+)/,":-moz-$1")]})],r);case"::placeholder":return si([Ba(e,{props:[_a(t,/:(plac\w+)/,":"+ri+"input-$1")]}),Ba(e,{props:[_a(t,/:(plac\w+)/,":-moz-$1")]}),Ba(e,{props:[_a(t,/:(plac\w+)/,ti+"input-$1")]})],r)}return""}))}}],ki=function(e){var t=e.key;if("css"===t){var n=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(n,(function(e){-1!==e.getAttribute("data-emotion").indexOf(" ")&&(document.head.appendChild(e),e.setAttribute("data-s",""))}))}var r,o,a=e.stylisPlugins||Ei,i={},l=[];r=e.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+t+' "]'),(function(e){for(var t=e.getAttribute("data-emotion").split(" "),n=1;n<t.length;n++)i[t[n]]=!0;l.push(e)}));var s,u,c,d,f=[ui,(d=function(e){s.insert(e)},function(e){e.root||(e=e.return)&&d(e)})],p=(u=[vi,yi].concat(a,f),c=Na(u),function(e,t,n,r){for(var o="",a=0;a<c;a++)o+=u[a](e,t,n,r)||"";return o});o=function(e,t,n,r){s=n,si(ci(e?e+"{"+t.styles+"}":t.styles),p),r&&(m.inserted[t.name]=!0)};var m={key:t,sheet:new ka({key:t,container:r,nonce:e.nonce,speedy:e.speedy,prepend:e.prepend,insertionPoint:e.insertionPoint}),nonce:e.nonce,inserted:i,registered:{},insert:o};return m.sheet.hydrate(l),m},wi={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};function Ci(e){var t=Object.create(null);return function(n){return void 0===t[n]&&(t[n]=e(n)),t[n]}}var xi=/[A-Z]|^ms/g,Si=/_EMO_([^_]+?)_([^]*?)_EMO_/g,_i=function(e){return 45===e.charCodeAt(1)},Li=function(e){return null!=e&&"boolean"!=typeof e},Mi=Ci((function(e){return _i(e)?e:e.replace(xi,"-$&").toLowerCase()})),Pi=function(e,t){switch(e){case"animation":case"animationName":if("string"==typeof t)return t.replace(Si,(function(e,t,n){return Ni={name:t,styles:n,next:Ni},t}))}return 1===wi[e]||_i(e)||"number"!=typeof t||0===t?t:t+"px"};function Ti(e,t,n){if(null==n)return"";if(void 0!==n.__emotion_styles)return n;switch(typeof n){case"boolean":return"";case"object":if(1===n.anim)return Ni={name:n.name,styles:n.styles,next:Ni},n.name;if(void 0!==n.styles){var r=n.next;if(void 0!==r)for(;void 0!==r;)Ni={name:r.name,styles:r.styles,next:Ni},r=r.next;return n.styles+";"}return function(e,t,n){var r="";if(Array.isArray(n))for(var o=0;o<n.length;o++)r+=Ti(e,t,n[o])+";";else for(var a in n){var i=n[a];if("object"!=typeof i)null!=t&&void 0!==t[i]?r+=a+"{"+t[i]+"}":Li(i)&&(r+=Mi(a)+":"+Pi(a,i)+";");else if(!Array.isArray(i)||"string"!=typeof i[0]||null!=t&&void 0!==t[i[0]]){var l=Ti(e,t,i);switch(a){case"animation":case"animationName":r+=Mi(a)+":"+l+";";break;default:r+=a+"{"+l+"}"}}else for(var s=0;s<i.length;s++)Li(i[s])&&(r+=Mi(a)+":"+Pi(a,i[s])+";")}return r}(e,t,n);case"function":if(void 0!==e){var o=Ni,a=n(e);return Ni=o,Ti(e,t,a)}}if(null==t)return n;var i=t[n];return void 0!==i?i:n}var Ni,Oi=/label:\s*([^\s;\n{]+)\s*(;|$)/g,Ai=function(e,t,n){if(1===e.length&&"object"==typeof e[0]&&null!==e[0]&&void 0!==e[0].styles)return e[0];var r=!0,o="";Ni=void 0;var a=e[0];null==a||void 0===a.raw?(r=!1,o+=Ti(n,t,a)):o+=a[0];for(var i=1;i<e.length;i++)o+=Ti(n,t,e[i]),r&&(o+=a[i]);Oi.lastIndex=0;for(var l,s="";null!==(l=Oi.exec(o));)s+="-"+l[1];var u=function(e){for(var t,n=0,r=0,o=e.length;o>=4;++r,o-=4)t=1540483477*(65535&(t=255&e.charCodeAt(r)|(255&e.charCodeAt(++r))<<8|(255&e.charCodeAt(++r))<<16|(255&e.charCodeAt(++r))<<24))+(59797*(t>>>16)<<16),n=1540483477*(65535&(t^=t>>>24))+(59797*(t>>>16)<<16)^1540483477*(65535&n)+(59797*(n>>>16)<<16);switch(o){case 3:n^=(255&e.charCodeAt(r+2))<<16;case 2:n^=(255&e.charCodeAt(r+1))<<8;case 1:n=1540483477*(65535&(n^=255&e.charCodeAt(r)))+(59797*(n>>>16)<<16)}return(((n=1540483477*(65535&(n^=n>>>13))+(59797*(n>>>16)<<16))^n>>>15)>>>0).toString(36)}(o)+s;return{name:u,styles:o,next:Ni}},Ri=!!t.useInsertionEffect&&t.useInsertionEffect,ji=Ri||function(e){return e()},Fi=(Ri||e.useLayoutEffect,e.createContext("undefined"!=typeof HTMLElement?ki({key:"css"}):null));Fi.Provider;var zi=e.createContext({});function Ii(e,t,n){var r="";return n.split(" ").forEach((function(n){void 0!==e[n]?t.push(e[n]+";"):r+=n+" "})),r}var Hi=function(e,t,n){var r=e.key+"-"+t.name;!1===n&&void 0===e.registered[r]&&(e.registered[r]=t.styles)},Bi=function(e,t,n){Hi(e,t,n);var r=e.key+"-"+t.name;if(void 0===e.inserted[t.name]){var o=t;do{e.insert(t===o?"."+r:"",o,e.sheet,!0),o=o.next}while(void 0!==o)}};function Di(e,t){if(void 0===e.inserted[t.name])return e.insert("",t,e.sheet,!0)}function Wi(e,t,n){var r=[],o=Ii(e,r,n);return r.length<2?n:o+t(r)}var $i=function e(t){for(var n="",r=0;r<t.length;r++){var o=t[r];if(null!=o){var a=void 0;switch(typeof o){case"boolean":break;case"object":if(Array.isArray(o))a=e(o);else for(var i in a="",o)o[i]&&i&&(a&&(a+=" "),a+=i);break;default:a=o}a&&(n&&(n+=" "),n+=a)}}return n},Ui=function(e){var t=ki({key:"css"});t.sheet.speedy=function(e){this.isSpeedy=e},t.compat=!0;var n=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];var o=Ai(n,t.registered,void 0);return Bi(t,o,!1),t.key+"-"+o.name};return{css:n,cx:function(){for(var e=arguments.length,r=new Array(e),o=0;o<e;o++)r[o]=arguments[o];return Wi(t.registered,n,$i(r))},injectGlobal:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];var o=Ai(n,t.registered);Di(t,o)},keyframes:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];var o=Ai(n,t.registered),a="animation-"+o.name;return Di(t,{name:o.name,styles:"@keyframes "+a+"{"+o.styles+"}"}),a},hydrate:function(e){e.forEach((function(e){t.inserted[e]=!0}))},flush:function(){t.registered={},t.inserted={},t.sheet.flush()},sheet:t.sheet,cache:t,getRegisteredStyles:Ii.bind(null,t.registered),merge:Wi.bind(null,t.registered,n)}}(),Vi=(Ui.flush,Ui.hydrate,Ui.cx);Ui.merge,Ui.getRegisteredStyles,Ui.injectGlobal,Ui.keyframes,Ui.css,Ui.sheet,Ui.cache;const Zi=()=>{const t=(0,e.useContext)(Fi),n=(0,e.useCallback)(((...e)=>{if(null===t)throw new Error("The `useCx` hook should be only used within a valid Emotion Cache Context");return Vi(...e.map((e=>(e=>null!=e&&["name","styles"].every((t=>void 0!==e[t])))(e)?(Bi(t,e,!1),`${t.key}-${e.name}`):e)))}),[t]);return n};function qi(e,t){const n=ca(),r=n?.[t]||{},o={[fa]:!0,...(a=t,{[da]:a})};var a;const{_overrides:i,...l}=r,s=Object.entries(l).length?Object.assign({},l,e):e,u=Zi()(Ea(t),e.className),c="function"==typeof s.renderChildren?s.renderChildren(s):s.children;for(const e in s)o[e]=s[e];for(const e in i)o[e]=i[e];return void 0!==c&&(o.children=c),o.className=u,o}function Qi(t,n){return function(t,n,r){const o=r?.forwardsRef?(0,e.forwardRef)(t):t;let a=o[pa]||[n];return Array.isArray(n)&&(a=[...a,...n]),"string"==typeof n&&(a=[...a,n]),Object.assign(o,{[pa]:[...new Set(a)],displayName:n,selector:`.${Ea(n)}`})}(t,n,{forwardsRef:!0})}function Gi(e){if(!e)return[];let t=[];return e[pa]&&(t=e[pa]),e.type&&e.type[pa]&&(t=e.type[pa]),t}const Yi={border:0,clip:"rect(1px, 1px, 1px, 1px)",WebkitClipPath:"inset( 50% )",clipPath:"inset( 50% )",height:"1px",margin:"-1px",overflow:"hidden",padding:0,position:"absolute",width:"1px",wordWrap:"normal"};function Ki(){return Ki=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Ki.apply(this,arguments)}var Xi=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/,Ji=Ci((function(e){return Xi.test(e)||111===e.charCodeAt(0)&&110===e.charCodeAt(1)&&e.charCodeAt(2)<91})),el=function(e){return"theme"!==e},tl=function(e){return"string"==typeof e&&e.charCodeAt(0)>96?Ji:el},nl=function(e,t,n){var r;if(t){var o=t.shouldForwardProp;r=e.__emotion_forwardProp&&o?function(t){return e.__emotion_forwardProp(t)&&o(t)}:o}return"function"!=typeof r&&n&&(r=e.__emotion_forwardProp),r},rl=function(e){var t=e.cache,n=e.serialized,r=e.isStringTag;return Hi(t,n,r),ji((function(){return Bi(t,n,r)})),null},ol=function t(n,r){var o,a,i=n.__emotion_real===n,l=i&&n.__emotion_base||n;void 0!==r&&(o=r.label,a=r.target);var s=nl(n,r,i),u=s||tl(l),c=!u("as");return function(){var d=arguments,f=i&&void 0!==n.__emotion_styles?n.__emotion_styles.slice(0):[];if(void 0!==o&&f.push("label:"+o+";"),null==d[0]||void 0===d[0].raw)f.push.apply(f,d);else{f.push(d[0][0]);for(var p=d.length,m=1;m<p;m++)f.push(d[m],d[0][m])}var h,g=(h=function(t,n,r){var o=c&&t.as||l,i="",d=[],p=t;if(null==t.theme){for(var m in p={},t)p[m]=t[m];p.theme=e.useContext(zi)}"string"==typeof t.className?i=Ii(n.registered,d,t.className):null!=t.className&&(i=t.className+" ");var h=Ai(f.concat(d),n.registered,p);i+=n.key+"-"+h.name,void 0!==a&&(i+=" "+a);var g=c&&void 0===s?tl(o):u,v={};for(var y in t)c&&"as"===y||g(y)&&(v[y]=t[y]);return v.className=i,v.ref=r,e.createElement(e.Fragment,null,e.createElement(rl,{cache:n,serialized:h,isStringTag:"string"==typeof o}),e.createElement(o,v))},(0,e.forwardRef)((function(t,n){var r=(0,e.useContext)(Fi);return h(t,r,n)})));return g.displayName=void 0!==o?o:"Styled("+("string"==typeof l?l:l.displayName||l.name||"Component")+")",g.defaultProps=n.defaultProps,g.__emotion_real=g,g.__emotion_base=l,g.__emotion_styles=f,g.__emotion_forwardProp=s,Object.defineProperty(g,"toString",{value:function(){return"."+a}}),g.withComponent=function(e,n){return t(e,Ki({},r,n,{shouldForwardProp:nl(g,n,!0)})).apply(void 0,f)},g}};const al=ol("div",{target:"e19lxcc00"})("");al.selector=".components-view",al.displayName="View";const il=al,ll=Qi((function(t,n){const{style:r,...o}=qi(t,"VisuallyHidden");return(0,e.createElement)(il,{ref:n,...o,style:{...Yi,...r||{}}})}),"VisuallyHidden"),sl=["onMouseDown","onClick"],ul=(0,e.forwardRef)((function(t,n){const{__next40pxDefaultSize:r,isBusy:o,isDestructive:a,className:i,disabled:l,icon:s,iconPosition:u="left",iconSize:c,showTooltip:d,tooltipPosition:f,shortcut:p,label:m,children:h,size:g="default",text:v,variant:y,__experimentalIsFocusable:b,describedBy:E,...k}=function({isDefault:e,isPrimary:t,isSecondary:n,isTertiary:r,isLink:o,isPressed:a,isSmall:i,size:l,variant:s,...u}){let c=l,d=s;const f={"aria-pressed":a};var p,m,h,g,v,y;return i&&(null!==(p=c)&&void 0!==p||(c="small")),t&&(null!==(m=d)&&void 0!==m||(d="primary")),r&&(null!==(h=d)&&void 0!==h||(d="tertiary")),n&&(null!==(g=d)&&void 0!==g||(d="secondary")),e&&(ve("Button isDefault prop",{since:"5.4",alternative:'variant="secondary"',version:"6.2"}),null!==(v=d)&&void 0!==v||(d="secondary")),o&&(null!==(y=d)&&void 0!==y||(d="link")),{...f,...u,size:c,variant:d}}(t),{href:w,target:C,"aria-checked":S,"aria-pressed":_,"aria-selected":L,...M}="href"in k?k:{href:void 0,target:void 0,...k},P=be(ul,"components-button__description"),T="string"==typeof h&&!!h||Array.isArray(h)&&h?.[0]&&null!==h[0]&&"components-tooltip"!==h?.[0]?.props?.className,N=x()("components-button",i,{"is-next-40px-default-size":r,"is-secondary":"secondary"===y,"is-primary":"primary"===y,"is-small":"small"===g,"is-compact":"compact"===g,"is-tertiary":"tertiary"===y,"is-pressed":[!0,"true","mixed"].includes(_),"is-pressed-mixed":"mixed"===_,"is-busy":o,"is-link":"link"===y,"is-destructive":a,"has-text":!!s&&T,"has-icon":!!s}),O=l&&!b,A=void 0===w||O?"button":"a",R="button"===A?{type:"button",disabled:O,"aria-checked":S,"aria-pressed":_,"aria-selected":L}:{},j="a"===A?{href:w,target:C}:{};if(l&&b){R["aria-disabled"]=!0,j["aria-disabled"]=!0;for(const e of sl)M[e]=e=>{e&&(e.stopPropagation(),e.preventDefault())}}const F=!O&&(d&&m||p||!!m&&!h?.length&&!1!==d),z=E?P:void 0,I=M["aria-describedby"]||z,H={className:N,"aria-label":M["aria-label"]||m,"aria-describedby":I,ref:n},B=(0,e.createElement)(e.Fragment,null,s&&"left"===u&&(0,e.createElement)(ta,{icon:s,size:c}),v&&(0,e.createElement)(e.Fragment,null,v),s&&"right"===u&&(0,e.createElement)(ta,{icon:s,size:c}),h),D="a"===A?(0,e.createElement)("a",{...j,...M,...H},B):(0,e.createElement)("button",{...R,...M,...H},B);let W;return void 0!==f&&(W=Go(f)),F?(0,e.createElement)(e.Fragment,null,(0,e.createElement)(Ko,{text:h?.length&&E?E:m,shortcut:p,placement:W},D),E&&(0,e.createElement)(ll,null,(0,e.createElement)("span",{id:z},E))):(0,e.createElement)(e.Fragment,null,D,E&&(0,e.createElement)(ll,null,(0,e.createElement)("span",{id:z},E)))})),cl=ul,dl=4e3;function fl({children:t,onCopy:n,onFinishCopy:r,text:o,...a}){const i=(0,e.useRef)(),l=B(o,(()=>{n&&n(),clearTimeout(i.current),r&&(i.current=setTimeout((()=>r()),dl))}));return(0,e.useEffect)((()=>{clearTimeout(i.current)}),[]),(0,e.createElement)(cl,{...a,className:"components-clipboard-button",ref:l,onCopy:e=>{e.target.focus()}},t)}function pl({error:t,finishLinkLabel:n,finishLinkUrl:r,title:o}){const[a,i]=(0,e.useState)(!1),{message:s,stack:u}=t;return(0,e.createElement)("div",{className:"error-screen-container"},(0,e.createElement)(_,{className:"error-screen"},(0,e.createElement)("h1",null,o||(0,l.__)("Something went wrong.","amp")),(0,e.createElement)("p",{dangerouslySetInnerHTML:{__html:s||(0,l.__)("There was an error loading the page.","amp")}}),(0,e.createElement)("p",null,F((0,l.__)("Please submit details to our <a>support forum</a>.","amp"),{a:(0,e.createElement)("a",{href:"https://wordpress.org/support/plugin/amp/",target:"_blank",rel:"noreferrer noopener"})})),u&&(0,e.createElement)("details",null,(0,e.createElement)("summary",null,(0,l.__)("Details","amp")),(0,e.createElement)("pre",null,u),(0,e.createElement)(fl,{isSmall:!0,isSecondary:!0,text:JSON.stringify({message:s,stack:u},null,2),onCopy:()=>i(!0),onFinishCopy:()=>i(!1)},a?(0,l.__)("Copied!","amp"):(0,l.__)("Copy Error","amp"))),r&&n&&(0,e.createElement)("p",null,(0,e.createElement)("a",{href:r},n))))}class ml extends e.Component{constructor(e){super(e),this.timeout=null,this.state={error:null}}componentDidMount(){this.mounted=!0}componentWillUnmount(){this.mounted=!1}componentDidCatch(e){this.setState({error:e})}render(){const{error:t}=this.state,{children:n,exitLinkLabel:r,exitLinkUrl:o,title:a}=this.props;return t?(0,e.createElement)(pl,{error:t,finishLinkLabel:r,finishLinkUrl:o,title:a}):n}}function hl(e=""){return e.replace(/\/.*$/,"").replace(/\.php$/,"")}const gl=(0,e.createContext)(),vl="ACTION_SET_STATUS",yl="ACTION_SCANNABLE_URLS_REQUEST",bl="ACTION_SCANNABLE_URLS_RECEIVE",El="ACTION_SCAN_INITIALIZE",kl="ACTION_SCAN_URL",wl="ACTION_SCAN_RECEIVE_RESULTS",Cl="ACTION_SCAN_COMPLETE",xl="ACTION_SCAN_CANCEL",Sl="STATUS_REQUEST_SCANNABLE_URLS",_l="STATUS_FETCHING_SCANNABLE_URLS",Ll="STATUS_REFETCHING_PLUGIN_SUPPRESSION",Ml="STATUS_READY",Pl="STATUS_IDLE",Tl="STATUS_IN_PROGRESS",Nl="STATUS_COMPLETED",Ol="STATUS_FAILED",Al="STATUS_CANCELLED",Rl="STATUS_SKIPPED",jl={currentlyScannedUrlIndexes:[],forceStandardMode:!1,scannableUrls:[],scanOnce:!1,status:"",scansCount:0,urlIndexesPendingScan:[]},Fl=3,zl=500;function Il(e,t){if(e.status===Rl)return e;switch(t.type){case vl:return{...e,status:t.status};case yl:var n;return{...e,status:Sl,forceStandardMode:null!==(n=t?.forceStandardMode)&&void 0!==n&&n,currentlyScannedUrlIndexes:[],urlIndexesPendingScan:[]};case bl:{const n=Array.isArray(t.scannableUrls)&&t.scannableUrls.length>0;return{...e,status:e.scanOnce&&e.scansCount>0||!n?Nl:Ml,scannableUrls:n?t.scannableUrls:[]}}case El:return[Ml,Nl,Ol,Al].includes(e.status)?e.scanOnce&&e.scansCount>0?{...e,status:Nl}:{...e,status:Pl,currentlyScannedUrlIndexes:[],scansCount:e.scansCount+1,urlIndexesPendingScan:e.scannableUrls.map(((e,t)=>t))}:e;case kl:return[Pl,Tl].includes(e.status)?{...e,status:Tl,currentlyScannedUrlIndexes:[...e.currentlyScannedUrlIndexes,t.currentlyScannedUrlIndex],urlIndexesPendingScan:e.urlIndexesPendingScan.filter((e=>e!==t.currentlyScannedUrlIndex))}:e;case wl:var r;return[Pl,Tl].includes(e.status)?{...e,status:Pl,currentlyScannedUrlIndexes:e.currentlyScannedUrlIndexes.filter((e=>e!==t.currentlyScannedUrlIndex)),scannableUrls:[...e.scannableUrls.slice(0,t.currentlyScannedUrlIndex),{...e.scannableUrls[t.currentlyScannedUrlIndex],stale:!1,error:null!==(r=t.error)&&void 0!==r&&r,validated_url_post:t.error?{}:t.validatedUrlPost,validation_errors:t.error?[]:t.validationErrors},...e.scannableUrls.slice(t.currentlyScannedUrlIndex+1)]}:e;case Cl:{const t=e.scannableUrls.every((e=>Boolean(e.error)));return{...e,status:t?Ol:Ll}}case xl:return[Pl,Tl].includes(e.status)?{...e,status:Al,currentlyScannedUrlIndexes:[],urlIndexesPendingScan:[]}:e;default:throw new Error(`Unhandled action type: ${t.type}`)}}function Hl({children:t,fetchCachedValidationErrors:n=!1,refetchPluginSuppressionOnScanComplete:r=!1,resetOnOptionsChange:o=!1,scannableUrlsRestPath:a,scanOnce:i=!1,validateNonce:l}){var u;const{originalOptions:{theme_support:c},savedOptions:p,refetchPluginSuppression:m}=(0,e.useContext)(h),{setAsyncError:g}=f(),[v,b]=(0,e.useReducer)(Il,{...jl,scanOnce:i}),{currentlyScannedUrlIndexes:E,forceStandardMode:k,scannableUrls:w,urlIndexesPendingScan:C,status:x}=v,S=k||c===y?"url":"amp_url",_=null!==(u=w?.[0]?.[S])&&void 0!==u?u:"",{hasSiteScanResults:L,pluginsWithAmpIncompatibility:M,stale:P,themesWithAmpIncompatibility:T}=(0,e.useMemo)((()=>{if(![Ml,Nl,Rl].includes(x))return{hasSiteScanResults:!1,pluginsWithAmpIncompatibility:[],stale:!1,themesWithAmpIncompatibility:[]};const e=function(e=[],{useAmpUrls:t=!1}={}){const n=new Map,r=new Map;for(const o of e){const{amp_url:e,url:a,validation_errors:i}=o;if(i?.length)for(const o of i)if(o?.sources?.length)for(const i of o.sources)if(i?.type)if("plugin"===i.type){const r=hl(i.name);if("gutenberg"===r&&o.sources.length>1)continue;n.set(r,new Set([...n.get(r)||[],t?e:a]))}else"theme"===i.type&&r.set(i.name,new Set([...r.get(i.name)||[],t?e:a]))}return n.delete("amp"),{plugins:[...n].map((([e,t])=>({slug:e,urls:[...t]}))),themes:[...r].map((([e,t])=>({slug:e,urls:[...t]})))}}(w,{useAmpUrls:"amp_url"===S});return{hasSiteScanResults:w.some((e=>Boolean(e?.validation_errors))),pluginsWithAmpIncompatibility:e.plugins,stale:w.some((e=>!0===e?.stale)),themesWithAmpIncompatibility:e.themes}}),[w,x,S]);(0,e.useEffect)((()=>{l||x===Rl||b({type:vl,status:Rl})}),[x,l]);const N=(0,e.useRef)(!1);(0,e.useEffect)((()=>()=>{N.current=!0}),[]);const O=(0,e.useCallback)(((e={})=>{b({type:yl,forceStandardMode:e?.forceStandardMode})}),[]),A=(0,e.useCallback)((()=>{b({type:El})}),[]),R=(0,e.useCallback)((()=>{b({type:xl})}),[]);(0,e.useEffect)((()=>{o&&Object.keys(p).length>0&&b({type:yl})}),[o,p]),(0,e.useEffect)((()=>{x===Ml&&Object.keys(p.suppressed_plugins||{}).length>0&&b({type:El})}),[p?.suppressed_plugins,x]),(0,e.useEffect)((()=>{x===Ll&&(r&&m(),b({type:vl,status:Nl}))}),[m,r,x]);const[j,F]=(0,e.useState)(!1);return(0,e.useEffect)((()=>{let e;return j&&(async()=>{await new Promise((t=>{e=setTimeout(t,zl)})),!0!==N.current&&F(!1)})(),()=>{e&&clearTimeout(e)}}),[j]),(0,e.useEffect)((()=>{(async()=>{if(x===Sl){b({type:vl,status:_l});try{const e=["url","amp_url","type","label"],t=await d()({path:(0,s.addQueryArgs)(a,{_fields:n?[...e,"validation_errors","stale"]:e,force_standard_mode:k?1:void 0})});if(!0===N.current)return;b({type:bl,scannableUrls:t})}catch(e){if(!0===N.current)return;g(e)}}})()}),[n,k,a,g,x]),(0,e.useEffect)((()=>{if(![Pl,Tl].includes(x))return;if(0===C.length)return void(0===E.length&&b({type:Cl}));if(j||E.length>=Fl)return;F(!0);const e=C[0];b({type:kl,currentlyScannedUrlIndex:e}),(async()=>{const t={};try{const n=w[e][S],r={amp_validate:{cache:!0,cache_bust:Math.random(),force_standard_mode:k||void 0,nonce:l,omit_stylesheets:!0}},o=await fetch((0,s.addQueryArgs)(n,r)),a=await o.json();if(!0===N.current)return;o.ok?(t.validatedUrlPost=a.validated_url_post,t.validationErrors=a.results.map((({error:e})=>e))):t.error=a?.code||!0}catch(e){if(!0===N.current)return;t.error=!0}b({type:wl,currentlyScannedUrlIndex:e,...t}),F(!1)})()}),[E.length,k,w,j,x,C,S,l]),(0,e.createElement)(gl.Provider,{value:{cancelSiteScan:R,fetchScannableUrls:O,forceStandardMode:k,hasSiteScanResults:L,isBusy:[Pl,Tl].includes(x),isCancelled:x===Al,isCompleted:[Ll,Nl].includes(x),isFailed:x===Ol,isFetchingScannableUrls:[Sl,_l].includes(x),isInitializing:!Boolean(x),isReady:x===Ml,isSiteScannable:w.length>0,isSkipped:x===Rl,pluginsWithAmpIncompatibility:M,previewPermalink:_,scannableUrls:w,scannedUrlsMaxIndex:([Tl,Pl].includes(x)?Math.min(w.length,...C):0)-1,stale:P,startSiteScan:A,themesWithAmpIncompatibility:T}},t)}const Bl=(0,e.createContext)();function Dl({children:t,onlyFetchIfPluginIsConfigured:n=!0,userFieldReviewPanelDismissedForTemplateMode:r,userOptionDeveloperTools:o,usersResourceRestPath:a}){const{originalOptions:i,fetchingOptions:l}=(0,e.useContext)(h),{plugin_configured:s}=i,[u,c]=(0,e.useState)(!1),[p,m]=(0,e.useState)(null),[g,v]=(0,e.useState)(null),[y,b]=(0,e.useState)(null),[E,k]=(0,e.useState)(!1),[w,C]=(0,e.useState)(!1),[x,S]=(0,e.useState)(!1),{setAsyncError:_}=f(),L=(0,e.useRef)(!1);(0,e.useEffect)((()=>()=>{L.current=!0}),[]);const M=(0,e.useMemo)((()=>null!==p&&p!==y),[p,y]);(0,e.useEffect)((()=>{if(!l)return!s&&n?(b(null),void m(null)):void(a&&!u&&null===y&&(async()=>{c(!0);try{const e=await d()({path:`${a}/me`});if(!0===L.current)return;b(e[o]),m(e[o]),r&&v(e[r])}catch(e){return void _(e)}c(!1)})())}),[n,l,u,y,s,_,r,o,a]);const P=(0,e.useCallback)((async()=>{if(M){k(!0);try{const e=await d()({method:"post",path:`${a}/me`,data:{[o]:p}});if(!0===L.current)return;b(e[o]),m(e[o])}catch(e){return void _(e)}S(!0),k(!1)}}),[M,p,_,o,a]),T=(0,e.useCallback)((async e=>{if(!w&&r){v(e),C(!0);try{if(await d()({method:"post",path:`${a}/me`,data:{[r]:e}}),!0===L.current)return}catch(e){return void _(e)}C(!1)}}),[w,_,r,a]);return(0,e.createElement)(Bl.Provider,{value:{developerToolsOption:p,fetchingUser:u,didSaveDeveloperToolsOption:x,hasDeveloperToolsOptionChange:M,reviewPanelDismissedForTemplateMode:g,originalDeveloperToolsOption:y,saveDeveloperToolsOption:P,savingDeveloperToolsOption:E,setDeveloperToolsOption:m,saveReviewPanelDismissedForTemplateMode:T,savingReviewPanelDismissedForTemplateMode:w}},t)}const Wl=(0,e.createContext)();function $l({children:t}){const[n,r]=(0,e.useState)([]),[o,a]=(0,e.useState)(null),[i,l]=(0,e.useState)(),u=(0,e.useRef)(!1);return(0,e.useEffect)((()=>()=>{u.current=!0}),[]),(0,e.useEffect)((()=>{i||n.length>0||o||(async()=>{a(!0);try{const e=await d()({path:(0,s.addQueryArgs)("/wp/v2/plugins",{_fields:["author","name","plugin","status","version"]})});if(!0===u.current)return;r(e)}catch(e){if(!0===u.current)return;l(e)}a(!1)})()}),[i,o,n]),(0,e.createElement)(Wl.Provider,{value:{fetchingPlugins:o,plugins:n}},t)}const Ul=(0,e.createContext)();function Vl({children:t}){const[n,r]=(0,e.useState)([]),[o,a]=(0,e.useState)(null),[i,l]=(0,e.useState)(),u=(0,e.useRef)(!1);return(0,e.useEffect)((()=>()=>{u.current=!0}),[]),(0,e.useEffect)((()=>{i||n.length>0||o||(async()=>{a(!0);try{const e=await d()({path:(0,s.addQueryArgs)("/wp/v2/themes",{_fields:["author","name","status","stylesheet","template","version"]})});if(!0===u.current)return;r(e)}catch(e){if(!0===u.current)return;l(e)}a(!1)})()}),[i,o,n]),(0,e.createElement)(Ul.Provider,{value:{fetchingThemes:o,themes:n}},t)}const Zl=(0,e.createContext)();function ql({children:t,pages:r}){const[o,a]=(0,e.useState)(r[0]),[i,l]=(0,e.useState)(!0),{editedOptions:s}=(0,e.useContext)(h),{isSkipped:u}=(0,e.useContext)(gl),{theme_support:c}=s,d=(0,e.useMemo)((()=>r.filter((e=>!("technical-background"===e.slug&&!n.HAS_DEPENDENCY_SUPPORT||"site-scan"===e.slug&&u||"theme-selection"===e.slug&&v!==c)))),[u,r,c]),f=d.findIndex((e=>e.slug===o.slug)),p=f===d.length-1;return(0,e.createElement)(Zl.Provider,{value:{activePageIndex:f,canGoForward:i,currentPage:o,isLastPage:p,moveBack:()=>{a(d[f-1]),l(!0)},moveForward:()=>{p||(a(d[f+1]),l(!1))},pages:d,setCanGoForward:l}},t)}function Ql(){return(0,e.createElement)("svg",{width:"80",height:"70",viewBox:"0 0 80 70",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,e.createElement)("g",{clipPath:"url(#clip-user-1)"},(0,e.createElement)("path",{d:"M1.9 41.7258C2.6732 41.7258 3.3 41.099 3.3 40.3258C3.3 39.5526 2.6732 38.9258 1.9 38.9258C1.1268 38.9258 0.5 39.5526 0.5 40.3258C0.5 41.099 1.1268 41.7258 1.9 41.7258Z",fill:"#285BE7"}),(0,e.createElement)("path",{d:"M4.2999 32.3273C5.0731 32.3273 5.6999 31.7005 5.6999 30.9273C5.6999 30.1541 5.0731 29.5273 4.2999 29.5273C3.5267 29.5273 2.8999 30.1541 2.8999 30.9273C2.8999 31.7005 3.5267 32.3273 4.2999 32.3273Z",fill:"#285BE7"}),(0,e.createElement)("path",{d:"M13.1 35.3273C13.8732 35.3273 14.5 34.7005 14.5 33.9273C14.5 33.1541 13.8732 32.5273 13.1 32.5273C12.3268 32.5273 11.7 33.1541 11.7 33.9273C11.7 34.7005 12.3268 35.3273 13.1 35.3273Z",fill:"#285BE7"}),(0,e.createElement)("path",{d:"M9.5001 45.425C10.2733 45.425 10.9001 44.7982 10.9001 44.025C10.9001 43.2518 10.2733 42.625 9.5001 42.625C8.7269 42.625 8.1001 43.2518 8.1001 44.025C8.1001 44.7982 8.7269 45.425 9.5001 45.425Z",fill:"#285BE7"}),(0,e.createElement)("path",{d:"M67.5001 36.6281C68.2733 36.6281 68.9001 36.0013 68.9001 35.2281C68.9001 34.4549 68.2733 33.8281 67.5001 33.8281C66.7269 33.8281 66.1001 34.4549 66.1001 35.2281C66.1001 36.0013 66.7269 36.6281 67.5001 36.6281Z",fill:"#285BE7"}),(0,e.createElement)("path",{d:"M73.0001 44.5266C73.7733 44.5266 74.4001 43.8998 74.4001 43.1266C74.4001 42.3534 73.7733 41.7266 73.0001 41.7266C72.2269 41.7266 71.6001 42.3534 71.6001 43.1266C71.6001 43.8998 72.2269 44.5266 73.0001 44.5266Z",fill:"#285BE7"}),(0,e.createElement)("path",{d:"M78.6 35.925C79.3732 35.925 80 35.2982 80 34.525C80 33.7518 79.3732 33.125 78.6 33.125C77.8268 33.125 77.2 33.7518 77.2 34.525C77.2 35.2982 77.8268 35.925 78.6 35.925Z",fill:"#285BE7"}),(0,e.createElement)("path",{d:"M74.0001 26.6281C74.7733 26.6281 75.4001 26.0013 75.4001 25.2281C75.4001 24.4549 74.7733 23.8281 74.0001 23.8281C73.2269 23.8281 72.6001 24.4549 72.6001 25.2281C72.6001 26.0013 73.2269 26.6281 74.0001 26.6281Z",fill:"#285BE7"}),(0,e.createElement)("path",{d:"M2.9 50.7258C3.6732 50.7258 4.3 50.099 4.3 49.3258C4.3 48.5526 3.6732 47.9258 2.9 47.9258C2.1268 47.9258 1.5 48.5526 1.5 49.3258C1.5 50.099 2.1268 50.7258 2.9 50.7258Z",fill:"#285BE7"}),(0,e.createElement)("path",{d:"M13.2 66.7273V47.5273C13.2 47.5273 13.9 40.5273 21.2 40.5273C28.5 40.5273 28.5 40.5273 28.5 40.5273",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M32.1 41.1273L31.1 40.0273L28 44.6273L34.1 52.1273L39.1 48.4273L32.1 41.1273Z",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M34.1001 52.125C34.1001 52.125 35.2001 66.925 36.4001 68.925",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M23 66.925C23 66.925 21.4 59.125 24.4 56.725C24.4 49.625 24.4 49.625 24.4 49.625",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M65.5 66.7273V47.5273C65.5 47.5273 64.8 40.5273 57.5 40.5273C50.2 40.5273 50.2 40.5273 50.2 40.5273",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M47.6001 40.0273L50.7001 44.6273L44.6001 52.1273L39.6001 48.4273L47.6001 40.0273Z",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M44.6 52.125C44.6 52.125 43.5 66.925 42.3 68.925",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M55.7001 66.925C55.7001 66.925 57.3 59.125 54.3 56.725C54.3 49.625 54.3 49.625 54.3 49.625",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M26.2 19.5262L30 14.9262H46.6L50.2 19.3262L52.9 19.1262V13.1262C52.9 13.1262 52.9 13.1262 51.3 13.1262C51.3 3.72618 41.6 -1.07382 33.3 2.32618C26.4 5.22618 25.9 12.4262 26.1 19.7262",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M50 7.22804H55.2C55.2 7.22804 59.8 6.52804 59.8 12.028C59.8 30.228 59.8 30.228 59.8 30.228C59.8 30.228 61.5 34.928 62.5 35.928C56.8 35.928 56.8 35.928 56.8 35.928C56.8 35.928 51.6 35.228 51.3 30.428C51.3 23.328 51.3 23.328 51.3 23.328",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M30.2001 38.7281C27.4001 35.6281 26.3 32.0281 26.3 27.9281C26.3 26.8281 26.6 24.6281 26.5 23.3281",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M31.8001 40.3273C31.6001 40.2273 31.3001 40.1273 31.1001 40.0273",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M48.4001 39.2266C47.8001 39.8266 47.1001 40.3266 46.2001 40.6266C46.2001 40.6266 41.1 43.6266 31.8 40.3266",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M51.3999 33.125C51.3999 33.125 50.7999 37.025 48.3999 39.325",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M31.6 26.5266C33.7539 26.5266 35.5 24.7805 35.5 22.6266C35.5 20.4727 33.7539 18.7266 31.6 18.7266C29.446 18.7266 27.7 20.4727 27.7 22.6266C27.7 24.7805 29.446 26.5266 31.6 26.5266Z",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M45.5999 26.925C47.7539 26.925 49.5 25.1789 49.5 23.025C49.5 20.8711 47.7539 19.125 45.5999 19.125C43.446 19.125 41.7 20.8711 41.7 23.025C41.7 25.1789 43.446 26.925 45.5999 26.925Z",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M26.9001 21.4258H23.6001",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M53 21.8281H49.7",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M41.6999 22.7266H35.8999",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"})),(0,e.createElement)("defs",null,(0,e.createElement)("clipPath",{id:"clip-user-1"},(0,e.createElement)("rect",{width:"79.5",height:"69.7",fill:"white",transform:"translate(0.5 0.226562)"}))))}function Gl(){return(0,e.createElement)("svg",{width:"76",height:"71",viewBox:"0 0 76 71",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,e.createElement)("g",{clipPath:"url(#clip-user-)"},(0,e.createElement)("path",{d:"M51.3999 22.6414C51.3999 22.6414 45.4999 14.9414 45.6999 13.4414C38.5999 15.8414 37.8999 18.2414 25.0999 18.4414V37.8414C25.0999 37.8414 31.6999 45.9414 36.5999 46.0414C42.4999 46.0414 42.4999 46.0414 42.4999 46.0414C42.4999 46.0414 51.3999 41.0414 51.3999 36.9414C51.3999 22.6414 51.3999 22.6414 51.3999 22.6414Z",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M25.0998 22.1406C23.2998 22.2406 21.0998 22.8406 20.3998 24.6406C18.9998 28.3406 22.3998 31.2406 24.5998 33.4406",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M51.0999 22.1406C52.8999 22.2406 55.0999 22.8406 55.7999 24.6406C57.1999 28.3406 53.7999 31.2406 51.5999 33.4406",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M21.5998 22.2397C21.5998 22.2397 17.4998 15.8397 23.6998 10.0397C20.5998 2.83973 20.5998 2.83973 20.5998 2.83973C20.5998 2.83973 52.4998 -2.36028 50.8998 11.2397C52.9998 12.0397 58.4998 15.8397 54.0998 22.1397",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M25.7998 27.4391L28.0998 29.1391H34.8998L36.3998 27.5391V22.5391H27.8998",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M50.5999 27.4391L48.2999 29.1391H41.4999L39.8999 27.5391V22.5391H48.4999",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M36.3999 22.5391H39.8999",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M31.4999 44.9414C31.4999 44.9414 31.4999 49.7414 30.0999 49.9414C24.3999 50.3414 24.3999 50.3414 24.3999 50.3414C24.3999 50.3414 14.1999 48.5414 13.8999 56.7414C13.8999 69.1414 13.8999 69.1414 13.8999 69.1414",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M45.9998 44.9414C45.9998 44.9414 45.9998 49.7414 47.3998 49.9414C53.0998 50.3414 53.0998 50.3414 53.0998 50.3414C53.0998 50.3414 63.2998 48.5414 63.5998 56.7414C63.5998 69.1414 63.5998 69.1414 63.5998 69.1414",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M28.0999 50.9383C28.0999 50.9383 28.3999 57.3383 35.8999 57.3383C39.4999 57.3383 39.4999 57.3383 39.4999 57.3383C39.4999 57.3383 44.9999 58.3383 48.3999 50.7383",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M63.2999 43.0383C64.0731 43.0383 64.6999 42.4115 64.6999 41.6383C64.6999 40.8651 64.0731 40.2383 63.2999 40.2383C62.5267 40.2383 61.8999 40.8651 61.8999 41.6383C61.8999 42.4115 62.5267 43.0383 63.2999 43.0383Z",fill:"#285BE7"}),(0,e.createElement)("path",{d:"M74.5997 41.5383C75.3729 41.5383 75.9997 40.9115 75.9997 40.1383C75.9997 39.3651 75.3729 38.7383 74.5997 38.7383C73.8265 38.7383 73.1997 39.3651 73.1997 40.1383C73.1997 40.9115 73.8265 41.5383 74.5997 41.5383Z",fill:"#285BE7"}),(0,e.createElement)("path",{d:"M73.1998 30.9406C73.973 30.9406 74.5998 30.3138 74.5998 29.5406C74.5998 28.7674 73.973 28.1406 73.1998 28.1406C72.4266 28.1406 71.7998 28.7674 71.7998 29.5406C71.7998 30.3138 72.4266 30.9406 73.1998 30.9406Z",fill:"#285BE7"}),(0,e.createElement)("path",{d:"M68.2999 51.9406C69.0731 51.9406 69.6999 51.3138 69.6999 50.5406C69.6999 49.7674 69.0731 49.1406 68.2999 49.1406C67.5267 49.1406 66.8999 49.7674 66.8999 50.5406C66.8999 51.3138 67.5267 51.9406 68.2999 51.9406Z",fill:"#285BE7"}),(0,e.createElement)("path",{d:"M8.99985 53.2414C9.77305 53.2414 10.3999 52.6146 10.3999 51.8414C10.3999 51.0682 9.77305 50.4414 8.99985 50.4414C8.22665 50.4414 7.59985 51.0682 7.59985 51.8414C7.59985 52.6146 8.22665 53.2414 8.99985 53.2414Z",fill:"#285BE7"}),(0,e.createElement)("path",{d:"M12.6998 43.1398C13.473 43.1398 14.0998 42.513 14.0998 41.7398C14.0998 40.9666 13.473 40.3398 12.6998 40.3398C11.9266 40.3398 11.2998 40.9666 11.2998 41.7398C11.2998 42.513 11.9266 43.1398 12.6998 43.1398Z",fill:"#285BE7"}),(0,e.createElement)("path",{d:"M3.6998 39.9406C4.473 39.9406 5.0998 39.3138 5.0998 38.5406C5.0998 37.7674 4.473 37.1406 3.6998 37.1406C2.92661 37.1406 2.2998 37.7674 2.2998 38.5406C2.2998 39.3138 2.92661 39.9406 3.6998 39.9406Z",fill:"#285BE7"}),(0,e.createElement)("path",{d:"M1.6998 49.2414C2.473 49.2414 3.0998 48.6146 3.0998 47.8414C3.0998 47.0682 2.473 46.4414 1.6998 46.4414C0.926606 46.4414 0.299805 47.0682 0.299805 47.8414C0.299805 48.6146 0.926606 49.2414 1.6998 49.2414Z",fill:"#285BE7"}),(0,e.createElement)("path",{d:"M2.6998 58.2414C3.473 58.2414 4.0998 57.6146 4.0998 56.8414C4.0998 56.0682 3.473 55.4414 2.6998 55.4414C1.92661 55.4414 1.2998 56.0682 1.2998 56.8414C1.2998 57.6146 1.92661 58.2414 2.6998 58.2414Z",fill:"#285BE7"})),(0,e.createElement)("defs",null,(0,e.createElement)("clipPath",{id:"clip-user-2"},(0,e.createElement)("rect",{width:"75.7",height:"69.4",fill:"white",transform:"translate(0.299805 0.839844)"}))))}function Yl({children:t,className:n="",direction:r="left",ElementName:o="div",selected:a=!1,...i}){return(0,e.createElement)(o,{className:x()(n,"selectable",{"selectable--selected":a},`selectable--${r}`),...i},t)}function Kl(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return Ai(t)}o(679);const Xl="4px";function Jl(e){if(void 0===e)return;if(!e)return"0";const t="number"==typeof e?e:Number(e);return"undefined"!=typeof window&&window.CSS?.supports?.("margin",e.toString())||Number.isNaN(t)?e.toString():`calc(${Xl} * ${e})`}var es={grad:.9,turn:360,rad:360/(2*Math.PI)},ts=function(e){return"string"==typeof e?e.length>0:"number"==typeof e},ns=function(e,t,n){return void 0===t&&(t=0),void 0===n&&(n=Math.pow(10,t)),Math.round(n*e)/n+0},rs=function(e,t,n){return void 0===t&&(t=0),void 0===n&&(n=1),e>n?n:e>t?e:t},os=function(e){return(e=isFinite(e)?e%360:0)>0?e:e+360},as=function(e){return{r:rs(e.r,0,255),g:rs(e.g,0,255),b:rs(e.b,0,255),a:rs(e.a)}},is=function(e){return{r:ns(e.r),g:ns(e.g),b:ns(e.b),a:ns(e.a,3)}},ls=/^#([0-9a-f]{3,8})$/i,ss=function(e){var t=e.toString(16);return t.length<2?"0"+t:t},us=function(e){var t=e.r,n=e.g,r=e.b,o=e.a,a=Math.max(t,n,r),i=a-Math.min(t,n,r),l=i?a===t?(n-r)/i:a===n?2+(r-t)/i:4+(t-n)/i:0;return{h:60*(l<0?l+6:l),s:a?i/a*100:0,v:a/255*100,a:o}},cs=function(e){var t=e.h,n=e.s,r=e.v,o=e.a;t=t/360*6,n/=100,r/=100;var a=Math.floor(t),i=r*(1-n),l=r*(1-(t-a)*n),s=r*(1-(1-t+a)*n),u=a%6;return{r:255*[r,l,i,i,s,r][u],g:255*[s,r,r,l,i,i][u],b:255*[i,i,s,r,r,l][u],a:o}},ds=function(e){return{h:os(e.h),s:rs(e.s,0,100),l:rs(e.l,0,100),a:rs(e.a)}},fs=function(e){return{h:ns(e.h),s:ns(e.s),l:ns(e.l),a:ns(e.a,3)}},ps=function(e){return cs((n=(t=e).s,{h:t.h,s:(n*=((r=t.l)<50?r:100-r)/100)>0?2*n/(r+n)*100:0,v:r+n,a:t.a}));var t,n,r},ms=function(e){return{h:(t=us(e)).h,s:(o=(200-(n=t.s))*(r=t.v)/100)>0&&o<200?n*r/100/(o<=100?o:200-o)*100:0,l:o/2,a:t.a};var t,n,r,o},hs=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,gs=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,vs=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,ys=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,bs={string:[[function(e){var t=ls.exec(e);return t?(e=t[1]).length<=4?{r:parseInt(e[0]+e[0],16),g:parseInt(e[1]+e[1],16),b:parseInt(e[2]+e[2],16),a:4===e.length?ns(parseInt(e[3]+e[3],16)/255,2):1}:6===e.length||8===e.length?{r:parseInt(e.substr(0,2),16),g:parseInt(e.substr(2,2),16),b:parseInt(e.substr(4,2),16),a:8===e.length?ns(parseInt(e.substr(6,2),16)/255,2):1}:null:null},"hex"],[function(e){var t=vs.exec(e)||ys.exec(e);return t?t[2]!==t[4]||t[4]!==t[6]?null:as({r:Number(t[1])/(t[2]?100/255:1),g:Number(t[3])/(t[4]?100/255:1),b:Number(t[5])/(t[6]?100/255:1),a:void 0===t[7]?1:Number(t[7])/(t[8]?100:1)}):null},"rgb"],[function(e){var t=hs.exec(e)||gs.exec(e);if(!t)return null;var n,r,o=ds({h:(n=t[1],r=t[2],void 0===r&&(r="deg"),Number(n)*(es[r]||1)),s:Number(t[3]),l:Number(t[4]),a:void 0===t[5]?1:Number(t[5])/(t[6]?100:1)});return ps(o)},"hsl"]],object:[[function(e){var t=e.r,n=e.g,r=e.b,o=e.a,a=void 0===o?1:o;return ts(t)&&ts(n)&&ts(r)?as({r:Number(t),g:Number(n),b:Number(r),a:Number(a)}):null},"rgb"],[function(e){var t=e.h,n=e.s,r=e.l,o=e.a,a=void 0===o?1:o;if(!ts(t)||!ts(n)||!ts(r))return null;var i=ds({h:Number(t),s:Number(n),l:Number(r),a:Number(a)});return ps(i)},"hsl"],[function(e){var t=e.h,n=e.s,r=e.v,o=e.a,a=void 0===o?1:o;if(!ts(t)||!ts(n)||!ts(r))return null;var i=function(e){return{h:os(e.h),s:rs(e.s,0,100),v:rs(e.v,0,100),a:rs(e.a)}}({h:Number(t),s:Number(n),v:Number(r),a:Number(a)});return cs(i)},"hsv"]]},Es=function(e,t){for(var n=0;n<t.length;n++){var r=t[n][0](e);if(r)return[r,t[n][1]]}return[null,void 0]},ks=function(e,t){var n=ms(e);return{h:n.h,s:rs(n.s+100*t,0,100),l:n.l,a:n.a}},ws=function(e){return(299*e.r+587*e.g+114*e.b)/1e3/255},Cs=function(e,t){var n=ms(e);return{h:n.h,s:n.s,l:rs(n.l+100*t,0,100),a:n.a}},xs=function(){function e(e){this.parsed=function(e){return"string"==typeof e?Es(e.trim(),bs.string):"object"==typeof e&&null!==e?Es(e,bs.object):[null,void 0]}(e)[0],this.rgba=this.parsed||{r:0,g:0,b:0,a:1}}return e.prototype.isValid=function(){return null!==this.parsed},e.prototype.brightness=function(){return ns(ws(this.rgba),2)},e.prototype.isDark=function(){return ws(this.rgba)<.5},e.prototype.isLight=function(){return ws(this.rgba)>=.5},e.prototype.toHex=function(){return t=(e=is(this.rgba)).r,n=e.g,r=e.b,a=(o=e.a)<1?ss(ns(255*o)):"","#"+ss(t)+ss(n)+ss(r)+a;var e,t,n,r,o,a},e.prototype.toRgb=function(){return is(this.rgba)},e.prototype.toRgbString=function(){return t=(e=is(this.rgba)).r,n=e.g,r=e.b,(o=e.a)<1?"rgba("+t+", "+n+", "+r+", "+o+")":"rgb("+t+", "+n+", "+r+")";var e,t,n,r,o},e.prototype.toHsl=function(){return fs(ms(this.rgba))},e.prototype.toHslString=function(){return t=(e=fs(ms(this.rgba))).h,n=e.s,r=e.l,(o=e.a)<1?"hsla("+t+", "+n+"%, "+r+"%, "+o+")":"hsl("+t+", "+n+"%, "+r+"%)";var e,t,n,r,o},e.prototype.toHsv=function(){return e=us(this.rgba),{h:ns(e.h),s:ns(e.s),v:ns(e.v),a:ns(e.a,3)};var e},e.prototype.invert=function(){return Ss({r:255-(e=this.rgba).r,g:255-e.g,b:255-e.b,a:e.a});var e},e.prototype.saturate=function(e){return void 0===e&&(e=.1),Ss(ks(this.rgba,e))},e.prototype.desaturate=function(e){return void 0===e&&(e=.1),Ss(ks(this.rgba,-e))},e.prototype.grayscale=function(){return Ss(ks(this.rgba,-1))},e.prototype.lighten=function(e){return void 0===e&&(e=.1),Ss(Cs(this.rgba,e))},e.prototype.darken=function(e){return void 0===e&&(e=.1),Ss(Cs(this.rgba,-e))},e.prototype.rotate=function(e){return void 0===e&&(e=15),this.hue(this.hue()+e)},e.prototype.alpha=function(e){return"number"==typeof e?Ss({r:(t=this.rgba).r,g:t.g,b:t.b,a:e}):ns(this.rgba.a,3);var t},e.prototype.hue=function(e){var t=ms(this.rgba);return"number"==typeof e?Ss({h:e,s:t.s,l:t.l,a:t.a}):ns(t.h)},e.prototype.isEqual=function(e){return this.toHex()===Ss(e).toHex()},e}(),Ss=function(e){return e instanceof xs?e:new xs(e)},_s=[];let Ls;function Ms(e="",t=1){return Ss(e).alpha(t).toRgbString()}!function(e){e.forEach((function(e){_s.indexOf(e)<0&&(e(xs,bs),_s.push(e))}))}([function(e,t){var n={white:"#ffffff",bisque:"#ffe4c4",blue:"#0000ff",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",antiquewhite:"#faebd7",aqua:"#00ffff",azure:"#f0ffff",whitesmoke:"#f5f5f5",papayawhip:"#ffefd5",plum:"#dda0dd",blanchedalmond:"#ffebcd",black:"#000000",gold:"#ffd700",goldenrod:"#daa520",gainsboro:"#dcdcdc",cornsilk:"#fff8dc",cornflowerblue:"#6495ed",burlywood:"#deb887",aquamarine:"#7fffd4",beige:"#f5f5dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkkhaki:"#bdb76b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",peachpuff:"#ffdab9",darkmagenta:"#8b008b",darkred:"#8b0000",darkorchid:"#9932cc",darkorange:"#ff8c00",darkslateblue:"#483d8b",gray:"#808080",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",deeppink:"#ff1493",deepskyblue:"#00bfff",wheat:"#f5deb3",firebrick:"#b22222",floralwhite:"#fffaf0",ghostwhite:"#f8f8ff",darkviolet:"#9400d3",magenta:"#ff00ff",green:"#008000",dodgerblue:"#1e90ff",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",blueviolet:"#8a2be2",forestgreen:"#228b22",lawngreen:"#7cfc00",indianred:"#cd5c5c",indigo:"#4b0082",fuchsia:"#ff00ff",brown:"#a52a2a",maroon:"#800000",mediumblue:"#0000cd",lightcoral:"#f08080",darkturquoise:"#00ced1",lightcyan:"#e0ffff",ivory:"#fffff0",lightyellow:"#ffffe0",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",linen:"#faf0e6",mediumaquamarine:"#66cdaa",lemonchiffon:"#fffacd",lime:"#00ff00",khaki:"#f0e68c",mediumseagreen:"#3cb371",limegreen:"#32cd32",mediumspringgreen:"#00fa9a",lightskyblue:"#87cefa",lightblue:"#add8e6",midnightblue:"#191970",lightpink:"#ffb6c1",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",mintcream:"#f5fffa",lightslategray:"#778899",lightslategrey:"#778899",navajowhite:"#ffdead",navy:"#000080",mediumvioletred:"#c71585",powderblue:"#b0e0e6",palegoldenrod:"#eee8aa",oldlace:"#fdf5e6",paleturquoise:"#afeeee",mediumturquoise:"#48d1cc",mediumorchid:"#ba55d3",rebeccapurple:"#663399",lightsteelblue:"#b0c4de",mediumslateblue:"#7b68ee",thistle:"#d8bfd8",tan:"#d2b48c",orchid:"#da70d6",mediumpurple:"#9370db",purple:"#800080",pink:"#ffc0cb",skyblue:"#87ceeb",springgreen:"#00ff7f",palegreen:"#98fb98",red:"#ff0000",yellow:"#ffff00",slateblue:"#6a5acd",lavenderblush:"#fff0f5",peru:"#cd853f",palevioletred:"#db7093",violet:"#ee82ee",teal:"#008080",slategray:"#708090",slategrey:"#708090",aliceblue:"#f0f8ff",darkseagreen:"#8fbc8f",darkolivegreen:"#556b2f",greenyellow:"#adff2f",seagreen:"#2e8b57",seashell:"#fff5ee",tomato:"#ff6347",silver:"#c0c0c0",sienna:"#a0522d",lavender:"#e6e6fa",lightgreen:"#90ee90",orange:"#ffa500",orangered:"#ff4500",steelblue:"#4682b4",royalblue:"#4169e1",turquoise:"#40e0d0",yellowgreen:"#9acd32",salmon:"#fa8072",saddlebrown:"#8b4513",sandybrown:"#f4a460",rosybrown:"#bc8f8f",darksalmon:"#e9967a",lightgoldenrodyellow:"#fafad2",snow:"#fffafa",lightgrey:"#d3d3d3",lightgray:"#d3d3d3",dimgray:"#696969",dimgrey:"#696969",olivedrab:"#6b8e23",olive:"#808000"},r={};for(var o in n)r[n[o]]=o;var a={};e.prototype.toName=function(t){if(!(this.rgba.a||this.rgba.r||this.rgba.g||this.rgba.b))return"transparent";var o,i,l=r[this.toHex()];if(l)return l;if(null==t?void 0:t.closest){var s=this.toRgb(),u=1/0,c="black";if(!a.length)for(var d in n)a[d]=new e(n[d]).toRgb();for(var f in n){var p=(o=s,i=a[f],Math.pow(o.r-i.r,2)+Math.pow(o.g-i.g,2)+Math.pow(o.b-i.b,2));p<u&&(u=p,c=f)}return c}},t.string.push([function(t){var r=t.toLowerCase(),o="transparent"===r?"#0000":n[r];return o?new e(o).toRgb():null},"name"])}]),ba((function(e){if("string"!=typeof e)return"";if("string"==typeof(t=e)&&Ss(t).isValid())return e;var t;if(!e.includes("var("))return"";if("undefined"==typeof document)return"";const n=function(){if("undefined"!=typeof document){if(!Ls){const e=document.createElement("div");e.setAttribute("data-g2-color-computation-node",""),document.body.appendChild(e),Ls=e}return Ls}}();if(!n)return"";n.style.background=e;const r=window?.getComputedStyle(n).background;return n.style.background="",r||""}));const Ps="#fff",Ts={900:"#1e1e1e",800:"#2f2f2f",700:"#757575",600:"#949494",400:"#ccc",300:"#ddd",200:"#e0e0e0",100:"#f0f0f0"},Ns="var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9))",Os={background:Ps,backgroundDisabled:Ts[100],border:Ts[600],borderHover:Ts[700],borderFocus:Ns,borderDisabled:Ts[400],textDisabled:Ts[600],textDark:Ps,darkGrayPlaceholder:Ms(Ts[900],.62),lightGrayPlaceholder:Ms(Ps,.65)},As={accent:Ns,accentDarker10:"var(--wp-components-color-accent-darker-10, var(--wp-admin-theme-color-darker-10, #2145e6))"},Rs=Object.freeze({gray:Ts,white:Ps,alert:{yellow:"#f0b849",red:"#d94f4f",green:"#4ab866"},theme:As,ui:Os}),js="36px",Fs="12px",zs={controlSurfaceColor:Rs.white,controlTextActiveColor:Rs.theme.accent,controlPaddingX:Fs,controlPaddingXLarge:`calc(${Fs} * 1.3334)`,controlPaddingXSmall:`calc(${Fs} / 1.3334)`,controlBackgroundColor:Rs.white,controlBorderRadius:"2px",controlBoxShadow:"transparent",controlBoxShadowFocus:`0 0 0 0.5px ${Rs.theme.accent}`,controlDestructiveBorderColor:Rs.alert.red,controlHeight:js,controlHeightXSmall:`calc( ${js} * 0.6 )`,controlHeightSmall:`calc( ${js} * 0.8 )`,controlHeightLarge:`calc( ${js} * 1.2 )`,controlHeightXLarge:`calc( ${js} * 1.4 )`},Is={toggleGroupControlBackgroundColor:zs.controlBackgroundColor,toggleGroupControlBorderColor:Rs.ui.border,toggleGroupControlBackdropBackgroundColor:zs.controlSurfaceColor,toggleGroupControlBackdropBorderColor:Rs.ui.border,toggleGroupControlButtonColorActive:zs.controlBackgroundColor},Hs=Object.assign({},zs,Is,{colorDivider:"rgba(0, 0, 0, 0.1)",colorScrollbarThumb:"rgba(0, 0, 0, 0.2)",colorScrollbarThumbHover:"rgba(0, 0, 0, 0.5)",colorScrollbarTrack:"rgba(0, 0, 0, 0.04)",elevationIntensity:1,radiusBlockUi:"2px",borderWidth:"1px",borderWidthFocus:"1.5px",borderWidthTab:"4px",spinnerSize:16,fontSize:"13px",fontSizeH1:"calc(2.44 * 13px)",fontSizeH2:"calc(1.95 * 13px)",fontSizeH3:"calc(1.56 * 13px)",fontSizeH4:"calc(1.25 * 13px)",fontSizeH5:"13px",fontSizeH6:"calc(0.8 * 13px)",fontSizeInputMobile:"16px",fontSizeMobile:"15px",fontSizeSmall:"calc(0.92 * 13px)",fontSizeXSmall:"calc(0.75 * 13px)",fontLineHeightBase:"1.2",fontWeight:"normal",fontWeightHeading:"600",gridBase:"4px",cardBorderRadius:"2px",cardPaddingXSmall:`${Jl(2)}`,cardPaddingSmall:`${Jl(4)}`,cardPaddingMedium:`${Jl(4)} ${Jl(6)}`,cardPaddingLarge:`${Jl(6)} ${Jl(8)}`,popoverShadow:"0 0.7px 1px rgba(0, 0, 0, 0.1), 0 1.2px 1.7px -0.2px rgba(0, 0, 0, 0.1), 0 2.3px 3.3px -0.5px rgba(0, 0, 0, 0.1)",surfaceBackgroundColor:Rs.white,surfaceBackgroundSubtleColor:"#F3F3F3",surfaceBackgroundTintColor:"#F5F5F5",surfaceBorderColor:"rgba(0, 0, 0, 0.1)",surfaceBorderBoldColor:"rgba(0, 0, 0, 0.15)",surfaceBorderSubtleColor:"rgba(0, 0, 0, 0.05)",surfaceBackgroundTertiaryColor:Rs.white,surfaceColor:Rs.white,transitionDuration:"200ms",transitionDurationFast:"160ms",transitionDurationFaster:"120ms",transitionDurationFastest:"100ms",transitionTimingFunction:"cubic-bezier(0.08, 0.52, 0.52, 1)",transitionTimingFunctionControl:"cubic-bezier(0.12, 0.8, 0.32, 1)"}),Bs=(function(){var e=Kl.apply(void 0,arguments),t="animation-"+e.name;return{name:t,styles:"@keyframes "+t+"{"+e.styles+"}",anim:1,toString:function(){return"_EMO_"+this.name+"_"+this.styles+"_EMO_"}}})`
	from {
		transform: rotate(0deg);
	}
	to {
		transform: rotate(360deg);
	}
 `,Ds=ol("svg",{target:"ea4tfvq2"})("width:",Hs.spinnerSize,"px;height:",Hs.spinnerSize,"px;display:inline-block;margin:5px 11px 0;position:relative;color:",Rs.theme.accent,";overflow:visible;opacity:1;background-color:transparent;"),Ws={name:"9s4963",styles:"fill:transparent;stroke-width:1.5px"},$s=ol("circle",{target:"ea4tfvq1"})(Ws,";stroke:",Rs.gray[300],";"),Us=ol("path",{target:"ea4tfvq0"})(Ws,";stroke:currentColor;stroke-linecap:round;transform-origin:50% 50%;animation:1.4s linear infinite both ",Bs,";"),Vs=(0,e.forwardRef)((function({className:t,...n},r){return(0,e.createElement)(Ds,{className:x()("components-spinner",t),viewBox:"0 0 100 100",width:"16",height:"16",xmlns:"http://www.w3.org/2000/svg",role:"presentation",focusable:"false",...n,ref:r},(0,e.createElement)($s,{cx:"50",cy:"50",r:"50",vectorEffect:"non-scaling-stroke"}),(0,e.createElement)(Us,{d:"m 50 0 a 50 50 0 0 1 50 50",vectorEffect:"non-scaling-stroke"}))}));function Zs({inline:t=!1}){const n=t?"span":"div";return(0,e.createElement)(n,{className:x()("amp-spinner-container",{"amp-spinner-container--inline":t})},(0,e.createElement)(Vs,null))}const qs=(0,e.createElement)(Jo,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,e.createElement)(Xo,{d:"M19.5 4.5h-7V6h4.44l-5.97 5.97 1.06 1.06L18 7.06v4.44h1.5v-7Zm-13 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-3H17v3a.5.5 0 0 1-.5.5h-10a.5.5 0 0 1-.5-.5v-10a.5.5 0 0 1 .5-.5h3V5.5h-3Z"})),Qs=ol((0,e.forwardRef)((function({icon:t,size:n=24,...r},o){return(0,e.cloneElement)(t,{width:n,height:n,...r,ref:o})})),{target:"esh4a730"})({name:"rvs7bx",styles:"width:1em;height:1em;margin:0;vertical-align:middle;fill:currentColor"}),Gs=(0,e.forwardRef)((function(t,n){const{href:r,children:o,className:a,rel:i="",...s}=t,u=[...new Set([...i.split(" "),"external","noreferrer","noopener"].filter(Boolean))].join(" "),c=x()("components-external-link",a),d=!!r?.startsWith("#");return(0,e.createElement)("a",{...s,className:c,href:r,onClick:e=>{d&&e.preventDefault(),t.onClick&&t.onClick(e)},target:"_blank",rel:u,ref:n},o,(0,e.createElement)(ll,{as:"span"},/* translators: accessibility text */
(0,l.__)("(opens in a new tab)")),(0,e.createElement)(Qs,{icon:qs,className:"components-external-link__icon"}))})),Ys=144,Ks=69,Xs=2;function Js({width:t=Ys,...n}){const r=Xs*(Ys/t);return(0,e.createElement)("svg",{viewBox:`0 0 ${Ys} ${Ks}`,width:t,fill:"none",xmlns:"http://www.w3.org/2000/svg",...n},(0,e.createElement)("path",{d:"M47.855 67.71s17.35-17 54.65-8.8",stroke:"#2459E7",strokeWidth:r,strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M59.206 60.96s-21.95-12.2-41.75-4.65M89.056 63.209c-4.5-2.25-8.6-.9-8.45-.55",stroke:"#2459E7",strokeWidth:r,strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M24.856 54.21c-.85-.3-1.35-1.4-.95-2.25.35-.85 1.5-1.25 2.3-.8-.1-.6.3-1.2.85-1.4.55-.2 1.25 0 1.6.45.35-1 1.45-1.65 2.55-1.55.8.1 1.5.6 1.85 1.35.45-.45 1.3-.45 1.75.05.45.45.4 1.3-.1 1.75.6-.15 1.25.1 1.55.6.3.5.35 1.2 0 1.7M26.005 59.76c.65-.15 1.35-.25 1.95-.55.5-.25.95-.8.4-1.25-.35-.3-1.25-.25-1.7-.25-.8-.05-1.6-.1-2.35.25-.5.25-2.2 1.45-2 2.1.3.75 3.1-.2 3.7-.3ZM34.606 57.259c-.35-.1-.75-.2-1.1-.15-1.25.05-2.25 1.05-1 1.9.8.55 1.95.6 2.85.7.55.1 1.25.05 1.5-.45.15-.35 0-.8-.25-1.05-.25-.3-.65-.45-1-.55-.3-.2-.65-.3-1-.4Z",stroke:"#2459E7",strokeWidth:r,strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M123.678 44.28c.45-.1.9-.25 1.25-.65.55-.55.95-1.35.6-2.15-.25-.65-1.1-1.7-3-1.55-.4.05-.95-1.7-1.2-2-.65-.8-1.55-1.25-2.55-1.45-.5-.1-1.05-.1-1.5.1-.2.1-1.1.75-.95 1.05 0 0-2.2-3.75-5.3-.55-.75.9-1 1.6-1 1.6s-2.85-.65-3.45 1.65c-.25 1.2-.75 3.6 2.95 3.8 2.6 0 5.2.05 7.8.1 1.8.05 3.6.3 5.45.1.3.05.6 0 .9-.05ZM118.079 53.843h9.55c.6-.8.4-2.1-.35-2.75-.75-.65-2-.7-2.7 0 .05-1.05-.65-2.05-1.65-2.35-1-.3-2.15.15-2.7 1-1.25-.85-3.2-.35-3.85 1.05-.7 1.35.2 2.65 1.7 3.05ZM138.139 27.787l1.05 2.95 2.95 1.05-2.95 1.05-1.05 2.95-1.05-2.95-2.95-1.05 2.95-1.05 1.05-2.95ZM17.456 31.787l1.05 2.95 2.95 1.05-2.95 1.05-1.05 2.95-1.05-2.95-2.95-1.05 2.95-1.05 1.05-2.95ZM5.5 40.096l1.2 3.3 3.3 1.2-3.3 1.2-1.2 3.3-1.2-3.3-3.3-1.2 3.3-1.2 1.2-3.3Z",fill:"#fff",stroke:"#2459E7",strokeWidth:r,strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"m72.312 36.848.603 4.704 3.338 1.166 2.365 3.522-.675 3.435 4.617 2.436 2.541-2.558 4.214-.7L92.46 51l3.523-2.365-.894-3.233 2.437-4.617 3.329-1.384-.7-4.214-3.338-1.166-2.856-3.619.675-3.434-4.126-2.34-2.637 3.049-4.118.21-3.636-2.244-2.935 1.971.797 3.724-2.436 4.616-3.233.894Z",stroke:"#2459E7",strokeWidth:r,strokeMiterlimit:"10"}),(0,e.createElement)("path",{d:"M85.57 43.277a5 5 0 1 0 1.93-9.813 5 5 0 0 0-1.93 9.813ZM69.46 22.836l5.012 3.023-1.157 5.888-5.783.901-1.463 2.26 1.392 5.88-5.284 3.547-4.914-3.514-2.646.5-2.436 4.616-6.378-1.254-.508-5.195-2.654-2.05-4.898 1.584-3.547-5.283 2.927-4.52-.5-2.646-5.01-3.024 1.157-5.887 5.782-.902 1.56-2.75-1.489-5.389 5.188-3.057 4.914 3.514 2.742-.99 2.437-4.616 6.378 1.254.998 5.291 2.163 1.955 5.389-1.49 3.644 4.794-3.418 4.424.403 3.136Z",stroke:"#2459E7",strokeWidth:r,strokeMiterlimit:"10"}),(0,e.createElement)("path",{d:"M52.078 29.61a5 5 0 1 0 1.929-9.812 5 5 0 0 0-1.93 9.813Z",stroke:"#2459E7",strokeWidth:r,strokeMiterlimit:"10"}),(0,e.createElement)("path",{d:"M51.123 34.467c5.392 1.06 10.623-2.452 11.682-7.844 1.06-5.392-2.452-10.622-7.844-11.682-5.392-1.06-10.622 2.452-11.682 7.844-1.06 5.392 2.452 10.622 7.844 11.682Z",stroke:"#2459E7",strokeWidth:r,strokeMiterlimit:"10"}))}function eu({value:t}){const n={transform:`translateX(${Math.max(t,3)-100}%)`,transitionDuration:(t<100?800:200)+"ms"};return(0,e.createElement)("div",{className:"progress-bar",role:"progressbar","aria-valuenow":t,"aria-valuemin":"0","aria-valuemax":"100"},(0,e.createElement)("div",{className:"progress-bar__track"},(0,e.createElement)("div",{className:"progress-bar__indicator",style:n})))}function tu({callToAction:t,children:n,className:r,count:o,icon:a,title:i}){return(0,e.createElement)(Yl,{className:x()("site-scan-results",r)},(0,e.createElement)("div",{className:"site-scan-results__header"},a,(0,e.createElement)("p",{className:"site-scan-results__heading","data-badge-content":o},i,(0,e.createElement)(ll,{as:"span"},`(${o})`))),(0,e.createElement)("div",{className:"site-scan-results__content"},n,t&&(0,e.createElement)("p",{className:"site-scan-results__cta"},t)))}const nu=58,ru=38,ou=2;function au({width:t=nu,...n}){const r=ou*(nu/t);return(0,e.createElement)("svg",{viewBox:`0 0 ${nu} ${ru}`,width:t,fill:"none",xmlns:"http://www.w3.org/2000/svg",...n},(0,e.createElement)("path",{d:"m5.764 8.012-.031 7.59A1.89 1.89 0 0 0 7.615 17.5l24.96.105a1.89 1.89 0 0 0 1.897-1.882l.032-7.59a1.89 1.89 0 0 0-1.882-1.898L7.662 6.13a1.89 1.89 0 0 0-1.898 1.882ZM20.22 29.17a1.9 1.9 0 0 1-1.88-1.9v-3.13a1.9 1.9 0 0 1 1.9-1.88l12.38.07a1.91 1.91 0 0 1 1.88 1.9v3.13a1.869 1.869 0 0 1-1.89 1.87l-12.39-.06ZM7.61 29.18a1.92 1.92 0 0 1-1.88-1.91v-3.13a1.87 1.87 0 0 1 1.89-1.86h3.57a1.92 1.92 0 0 1 1.89 1.91v3.13a1.862 1.862 0 0 1-1.89 1.86H7.61Z",stroke:"#005AF0",strokeWidth:"2.08",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M11.71 12.77a1.69 1.69 0 1 0 0-3.38 1.69 1.69 0 0 0 0 3.38Z",fill:"#005AF0"}),(0,e.createElement)("path",{d:"M13.65 17.21 25.39 9.9l6.41 7.69",stroke:"#005AF0",strokeWidth:r,strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M2.4 1h35.43a1.4 1.4 0 0 1 1.4 1.4v32.07H1V2.4A1.4 1.4 0 0 1 2.4 1v0Z",stroke:"#005AF0",strokeWidth:r,strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"m48.87 29.137-14-14-7.283 7.283 14 14 7.283-7.283Z",fill:"#fff",stroke:"#005AF0",strokeWidth:r,strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"m41.797 12.362 9.836 9.836a2.94 2.94 0 0 1 0 4.158l-2.78 2.779L34.86 15.14l2.779-2.779a2.94 2.94 0 0 1 4.158 0ZM55.774 8.23a4.17 4.17 0 0 1 0 5.897l-6.102 6.103-5.897-5.898 6.102-6.102a4.17 4.17 0 0 1 5.897 0Z",fill:"#fff",stroke:"#005AF0",strokeWidth:r,strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"m32.55 26.42 6.55-6.56M37.59 31.46l6.55-6.56",stroke:"#005AF0",strokeWidth:r,strokeLinecap:"round",strokeLinejoin:"round"}))}const iu=e=>o.g?.location?.host!==new URL(e).host,lu="error",su="warning",uu="info",cu="plain",du="success",fu="small",pu="large";function mu({children:t,className:n,size:r=pu,type:o=uu,...a}){const i=function(t){let n;switch(t){case du:n=()=>(0,e.createElement)("svg",{width:"35",height:"36",viewBox:"0 0 35 36",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,e.createElement)("rect",{x:"1.90112",y:"1.98828",width:"32.0691",height:"32.0691",rx:"16.0345",stroke:"#00A02F",strokeWidth:"2"}),(0,e.createElement)("mask",{id:"mask-notice-success",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:"10",y:"12",width:"16",height:"12"},(0,e.createElement)("path",{d:"M15.0921 21.461L11.3924 17.7613L10.1326 19.0122L15.0921 23.9718L25.7387 13.3252L24.4877 12.0742L15.0921 21.461Z",fill:"white"})),(0,e.createElement)("g",{mask:"url(#mask-notice-success)"},(0,e.createElement)("rect",{x:"7.28906",y:"7.375",width:"21.2932",height:"21.2932",fill:"#00A02F"})));break;case lu:n=()=>(0,e.createElement)("svg",{width:"44",height:"44",viewBox:"0 0 44 44",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,e.createElement)("path",{d:"M8.18125 16.1001L16.4324 7.84902L28.1012 7.84902L36.3523 16.1001L36.3523 27.769L28.1012 36.0201L16.4324 36.0201L8.18125 27.769L8.18125 16.1001Z",stroke:"#EF0000",strokeWidth:"2"}),(0,e.createElement)("path",{d:"M24.2671 27.4609C24.2671 28.5654 23.3716 29.4609 22.2671 29.4609C21.1626 29.4609 20.2671 28.5654 20.2671 27.4609C20.2671 26.3564 21.1626 25.4609 22.2671 25.4609C23.3716 25.4609 24.2671 26.3564 24.2671 27.4609Z",fill:"#EF0000"}),(0,e.createElement)("line",{x1:"22.2891",y1:"14.0586",x2:"22.2891",y2:"23.5659",stroke:"#EF0000",strokeWidth:"2"}));break;default:n=()=>(0,e.createElement)("svg",{width:"35",height:"35",viewBox:"0 0 35 35",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,e.createElement)("rect",{x:"1.66626",y:"1.76172",width:"31.4597",height:"31.4597",rx:"15.7299",stroke:"currentColor",strokeWidth:"2"}),(0,e.createElement)("path",{d:"M15.3048 11.3424C15.3048 10.1875 16.2412 9.25113 17.3961 9.25113C18.5509 9.25113 19.4873 10.1875 19.4873 11.3424C19.4873 12.4972 18.5509 13.4336 17.3961 13.4336C16.2412 13.4336 15.3048 12.4972 15.3048 11.3424Z",fill:"currentColor"}),(0,e.createElement)("line",{x1:"17.4184",y1:"25.3594",x2:"17.4184",y2:"15.4184",stroke:"currentColor",strokeWidth:"2"}))}return(0,e.createElement)(n,null)}(o);return(0,e.createElement)("div",{className:x()(n,"amp-notice",`amp-notice--${o}`,`amp-notice--${r}`),...a},(0,e.createElement)("div",{className:"amp-notice__icon"},i),(0,e.createElement)("div",{className:"amp-notice__body"},t))}function hu(e,t){return e.filter((e=>e?.name&&t===hl(e.name)))}function gu({slug:t}){const[n,r]=(0,e.useState)(!1),{scannableUrls:o}=(0,e.useContext)(gl),a=(0,e.useMemo)((()=>o.map((e=>{const n=function(e,t){const n=[];for(const r of e){const e=hu(r.sources||[],t);if(e&&0<e.length){const t={...r,sources:e};n.push(t)}}return n}(e.validation_errors||[],t);return n?.length>0?{...e,validation_errors:n}:null})).filter(Boolean)),[o,t]),i=JSON.stringify(a,null,4);return(0,e.createElement)("div",{className:"site-scan-results__detail-body"},(0,e.createElement)("ul",{className:"site-scan-results__urls-list"},a.map((({url:t})=>(0,e.createElement)("li",{key:t},(0,e.createElement)(Gs,{href:t},t))))),(0,e.createElement)("p",{className:"site-scan-results__source-intro"},(0,l.__)("Raw validation data which you may want to share with the author so they can fix AMP compatibility:","amp")),(0,e.createElement)("pre",{className:"site-scan-results__source-detail"},i),(0,e.createElement)(fl,{isSmall:!0,text:i,onCopy:()=>r(!0),onFinishCopy:()=>r(!1)},n?(0,l.__)("Copied!","amp"):(0,l.__)("Copy Validation Data","amp")))}function vu({author:t,name:n,slug:r,status:o,version:a,inactiveSourceNotice:i,uninstalledSourceNotice:s}){const[u,c]=(0,e.useState)(!1);return(0,e.createElement)("details",{open:!1,onKeyDown:({key:e})=>{[" ","return"].includes(e)&&c(!0)},onClick:()=>{c(!0)}},(0,e.createElement)("summary",null,(0,e.createElement)("span",{className:"site-scan-results__summary-wrapper"},n&&(0,e.createElement)("span",{className:x()("site-scan-results__source-name",{"site-scan-results__source-name--inactive":["inactive","uninstalled"].includes(o)})},n),!n&&r&&(0,e.createElement)("code",{className:"site-scan-results__source-slug"},r),"active"===o?(0,e.createElement)(e.Fragment,null,t&&(0,e.createElement)("span",{className:"site-scan-results__source-author"},(0,l.sprintf)(/* translators: %s is an author name. */
(0,l.__)("by %s","amp"),t)),a&&(0,e.createElement)("span",{className:"site-scan-results__source-version"},(0,l.sprintf)(/* translators: %s is a version number. */
(0,l.__)("Version %s","amp"),a))):(0,e.createElement)(mu,{className:"site-scan-results__source-notice",type:cu,size:fu},"inactive"===o?i:null,"uninstalled"===o?s:null))),u&&(0,e.createElement)(gu,{slug:r}))}function yu({sources:t,inactiveSourceNotice:n,uninstalledSourceNotice:r}){return 0===t.length?(0,e.createElement)(Zs,null):(0,e.createElement)("ul",{className:"site-scan-results__sources"},t.map((t=>(0,e.createElement)("li",{key:t.slug,className:"site-scan-results__source"},(0,e.createElement)(vu,{...t,inactiveSourceNotice:n,uninstalledSourceNotice:r})))))}function bu({className:t,showHelpText:r=!1,slugs:o=[],...a}){const i=function(){const{fetchingThemes:t,themes:n}=(0,e.useContext)(Ul),[r,o]=(0,e.useState)({});return(0,e.useEffect)((()=>{t||0===n.length||o((()=>n.reduce(((e,t)=>({...e,[t.stylesheet]:Object.keys(t).reduce(((e,r)=>{var o;const a={...e,slug:t.stylesheet,[r]:null!==(o=t[r]?.raw)&&void 0!==o?o:t[r]},i=n.find((e=>e.template===t.stylesheet&&e.template!==e.stylesheet))?.stylesheet;return i&&(a.child=i),t.template&&t.template!==t.stylesheet&&(a.parent=t.template),a}),{})})),{})))}),[t,n]),r}(),s=(0,e.useMemo)((()=>o?.map((e=>{const t=i?.[e];if(!t)return{slug:e,status:"uninstalled"};const n="active"===i?.[t?.child]?.status;return{...t,status:n?"active":t.status}}))),[o,i]);return(0,e.createElement)(tu,{title:(0,l.__)("Themes with AMP incompatibility","amp"),icon:(0,e.createElement)(au,null),count:o.length,className:x()("site-scan-results--themes",t),...a},r&&(0,e.createElement)("p",null,F((0,l.__)("Because of theme issue(s) we’ve found, you’ll want to consider a different <a>template mode</a> below.","amp"),{a:(0,e.createElement)("a",{href:"#template-modes"})}),n.AMP_COMPATIBLE_THEMES_URL?F(` ${(0,l.__)("You may also want to browse alternative <a>AMP compatible themes</a>.","amp")}`,{a:iu(n.AMP_COMPATIBLE_THEMES_URL)?(0,e.createElement)(Gs,{href:n.AMP_COMPATIBLE_THEMES_URL}):(0,e.createElement)("a",{href:n.AMP_COMPATIBLE_THEMES_URL})}):""),(0,e.createElement)(yu,{sources:s,inactiveSourceNotice:(0,l.__)("This theme has been deactivated since last site scan."),uninstalledSourceNotice:(0,l.__)("This theme has been uninstalled or its metadata is unavailable.")}))}const Eu=58,ku=40,wu=2;function Cu({width:t=Eu,...n}){const r=wu*(Eu/t);return(0,e.createElement)("svg",{viewBox:`0 0 ${Eu} ${ku}`,width:t,fill:"none",xmlns:"http://www.w3.org/2000/svg",...n},(0,e.createElement)("g",{stroke:"#005AF0",strokeWidth:r,strokeLinecap:"round",strokeLinejoin:"round"},(0,e.createElement)("path",{d:"M6.2 31.05V5.37A4.37 4.37 0 0 1 10.57 1H47.2a4.37 4.37 0 0 1 4.37 4.37v26.47M37.25 32.14v1.32H20.76v-1.32H1v3.14a3.37 3.37 0 0 0 3.36 3.37h49.28A3.36 3.36 0 0 0 57 35.28v-3.14H37.25Z"}),(0,e.createElement)("path",{d:"M21.2 11.53h2.15v12.35H21.2a6.178 6.178 0 0 1-5.728-8.54 6.183 6.183 0 0 1 5.728-3.81v0ZM36.99 23.89h-2.15V11.54h2.15a6.181 6.181 0 0 1 6.18 6.18 6.18 6.18 0 0 1-6.18 6.17v0ZM29.15 13.4h-5.79v2.83h5.79V13.4ZM29.15 19.19h-5.79v2.83h5.79v-2.83Z"}),(0,e.createElement)("path",{d:"M42.76 15.62h5.39v4.18h-5.39M15 19.8H9.61v-4.18H15"})))}function xu({className:t,showHelpText:r=!1,slugs:o=[],...a}){const i=function(){const{fetchingPlugins:t,plugins:n}=(0,e.useContext)(Wl),[r,o]=(0,e.useState)({});return(0,e.useEffect)((()=>{t||0===n.length||o(n.reduce(((e,t)=>{const n=hl(t.plugin);return{...e,[n]:Object.keys(t).reduce(((e,r)=>{var o;return{...e,slug:n,[r]:null!==(o=t[r]?.raw)&&void 0!==o?o:t[r]}}),{})}}),{}))}),[t,n]),r}(),s=(0,e.useMemo)((()=>o?.map((e=>{var t;return null!==(t=i?.[e])&&void 0!==t?t:{slug:e,status:"uninstalled"}}))||[]),[i,o]);return(0,e.createElement)(tu,{title:(0,l.__)("Plugins with AMP incompatibility","amp"),icon:(0,e.createElement)(Cu,null),count:o.length,className:x()("site-scan-results--plugins",t),...a},r&&(0,e.createElement)("p",null,F((0,l.__)("Because of plugin issue(s) detected, you may want to <a>review and suppress plugins</a>.","amp"),{a:(0,e.createElement)("a",{href:"#plugin-suppression"})}),n.AMP_COMPATIBLE_PLUGINS_URL?F(` ${(0,l.__)("You may also want to browse alternative <a>AMP compatible plugins</a>.","amp")}`,{a:iu(n.AMP_COMPATIBLE_PLUGINS_URL)?(0,e.createElement)(Gs,{href:n.AMP_COMPATIBLE_PLUGINS_URL}):(0,e.createElement)("a",{href:n.AMP_COMPATIBLE_PLUGINS_URL})}):""),(0,e.createElement)(yu,{sources:s,inactiveSourceNotice:(0,l.__)("This plugin has been deactivated since last site scan."),uninstalledSourceNotice:(0,l.__)("This plugin has been uninstalled or its metadata is unavailable.")}))}function Su({children:t,headerContent:n,title:r}){return(0,e.createElement)("div",{className:"site-scan"},(0,e.createElement)(Yl,{className:"site-scan__section"},(0,e.createElement)("div",{className:"site-scan__header"},(0,e.createElement)(Js,null),(0,e.createElement)("p",{className:"site-scan__heading"},r)),n),t)}const _u="recommended",Lu="neutral",Mu="notRecommended";const Pu=(0,e.createContext)();function Tu({children:t}){const{editedOptions:n,originalOptions:r,updateOptions:o,readerModeWasOverridden:a,setReaderModeWasOverridden:i}=(0,e.useContext)(h),{currentPage:l}=(0,e.useContext)(Zl),{selectedTheme:s,currentTheme:u}=(0,e.useContext)(k),{developerToolsOption:c,fetchingUser:d,originalDeveloperToolsOption:f}=(0,e.useContext)(Bl),[p,m]=(0,e.useState)(!1),[g,y]=(0,e.useState)(null),[b,E]=(0,e.useState)(!1),{slug:w}=l||{},{theme_support:C}=n||{},{theme_support:x}=r||{},S=!d&&c!==f;return(0,e.useEffect)((()=>{S&&E(!0)}),[S]),(0,e.useEffect)((()=>{C&&y(C)}),[C]),(0,e.useEffect)((()=>{"done"===w&&v===C&&s.name===u.name&&(a?i(!1):(o({theme_support:"transitional"}),i(!0)))}),[s.name,u.name,C,w,a,o,i]),(0,e.useEffect)((()=>{if(!d&&"technical-background"===w)if(p||x===C){if(p||c===f||(m(!0),o({theme_support:void 0})),p&&c===f){const e=g||x;C!==e&&o({theme_support:e})}}else m(!0)}),[w,c,d,g,f,x,p,C,o]),(0,e.createElement)(Pu.Provider,{value:{technicalQuestionChangedAtLeastOnce:b}},t)}const Nu=()=>function(t){const n=(0,e.useMemo)((()=>{const e=function(e){return e&&"undefined"!=typeof window&&"function"==typeof window.matchMedia?window.matchMedia(e):null}(t);return{subscribe:t=>e?(e.addEventListener?.("change",t),()=>{e.removeEventListener?.("change",t)}):()=>{},getValue(){var t;return null!==(t=e?.matches)&&void 0!==t&&t}}}),[t]);return(0,e.useSyncExternalStore)(n.subscribe,n.getValue,(()=>!1))}("(prefers-reduced-motion: reduce)");function Ou(e,t){"function"==typeof e?e(t):e&&e.hasOwnProperty("current")&&(e.current=t)}function Au(t){const n=(0,e.useRef)(),r=(0,e.useRef)(!1),o=(0,e.useRef)(!1),a=(0,e.useRef)([]),i=(0,e.useRef)(t);return i.current=t,(0,e.useLayoutEffect)((()=>{!1===o.current&&!0===r.current&&t.forEach(((e,t)=>{const r=a.current[t];e!==r&&(Ou(r,null),Ou(e,n.current))})),a.current=t}),t),(0,e.useLayoutEffect)((()=>{o.current=!1})),(0,e.useCallback)((e=>{Ou(n,e),o.current=!0,r.current=null!==e;const t=e?i.current:a.current;for(const n of t)Ou(n,e)}),[])}const Ru=(0,e.createElement)(Jo,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},(0,e.createElement)(Xo,{d:"M6.5 12.4L12 8l5.5 4.4-.9 1.2L12 10l-4.5 3.6-1-1.2z"})),ju=(0,e.createElement)(Jo,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},(0,e.createElement)(Xo,{d:"M17.5 11.6L12 16l-5.5-4.4.9-1.2L12 14l4.5-3.6 1 1.2z"}));function Fu(e){return null!=e}const zu={initial:void 0,fallback:""},Iu=()=>{},Hu=(0,e.forwardRef)((({isOpened:t,icon:n,title:r,...o},a)=>r?(0,e.createElement)("h2",{className:"components-panel__body-title"},(0,e.createElement)(cl,{className:"components-panel__body-toggle","aria-expanded":t,ref:a,...o},(0,e.createElement)("span",{"aria-hidden":"true"},(0,e.createElement)(ta,{className:"components-panel__arrow",icon:t?Ru:ju})),r,n&&(0,e.createElement)(ta,{icon:n,className:"components-panel__icon",size:20}))):null)),Bu=(0,e.forwardRef)((function(t,n){const{buttonProps:r={},children:o,className:a,icon:i,initialOpen:l,onToggle:s=Iu,opened:u,title:c,scrollAfterOpen:d=!0}=t,[f,p]=function(t,n=zu){const{initial:r,fallback:o}={...zu,...n},[a,i]=(0,e.useState)(t),l=Fu(t);return(0,e.useEffect)((()=>{l&&a&&i(void 0)}),[l,a]),[function(e=[],t){var n;return null!==(n=e.find(Fu))&&void 0!==n?n:t}([t,a,r],o),(0,e.useCallback)((e=>{l||i(e)}),[l])]}(u,{initial:void 0===l||l,fallback:!1}),m=(0,e.useRef)(null),h=Nu()?"auto":"smooth",g=(0,e.useRef)();g.current=d,sa((()=>{f&&g.current&&m.current?.scrollIntoView&&m.current.scrollIntoView({inline:"nearest",block:"nearest",behavior:h})}),[f,h]);const v=x()("components-panel__body",a,{"is-opened":f});return(0,e.createElement)("div",{className:v,ref:Au([m,n])},(0,e.createElement)(Hu,{icon:i,isOpened:Boolean(f),onClick:e=>{e.preventDefault();const t=!f;p(t),s(t)},title:c,...r}),"function"==typeof o?o({opened:Boolean(f)}):f&&o)})),Du=Bu,Wu="full-width",$u="right";function Uu({children:t=null,className:n,heading:r,handleType:a=Wu,id:i,initialOpen:l=!1,labelExtra:s=null,selected:u=!1,hiddenTitle:c}){const[d,f]=(0,e.useState)(l),[p,m]=(0,e.useState)(null);return(0,e.useEffect)((()=>{const e=new o.g.MutationObserver((([e])=>{e.target.classList.contains("is-opened")&&!d?f(!0):d&&f(!1)})),t=document.getElementById(i)?.querySelector(".components-panel__body");return t&&e.observe(t,{attributes:!0}),()=>{e.disconnect()}}),[i,d]),(0,e.useEffect)((()=>{m(null!==p?"resetting":"waiting")}),[l]),(0,e.useEffect)((()=>{"resetting"===p&&m("waiting")}),[p]),(0,e.createElement)(Yl,{id:i,className:x()("amp-drawer",`amp-drawer--handle-type-${a}`,n,d?"amp-drawer--opened":""),selected:u},a===$u&&(0,e.createElement)(e.Fragment,null,(0,e.createElement)("div",{className:"amp-drawer__heading"},r),s&&(0,e.createElement)("div",{className:"amp-drawer__label-extra"},s)),"resetting"!==p&&(0,e.createElement)(Du,{title:a===$u?(0,e.createElement)(ll,{as:"span"},c):(0,e.createElement)(e.Fragment,null,(0,e.createElement)("div",{className:"amp-drawer__heading"},r),s&&(0,e.createElement)("div",{className:"amp-drawer__label-extra"},s)),className:"amp-drawer__panel-body",initialOpen:l},(0,e.createElement)("div",{className:"amp-drawer__panel-body-inner"},t)))}function Vu({children:t,className:n,icon:r}){return(0,e.createElement)("div",{className:x()("amp-info",n)},r&&(0,e.createElement)(r,{className:"amp-info__icon"}),t)}function Zu(){return(0,e.createElement)("svg",{width:"66",height:"58",viewBox:"0 0 66 58",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,e.createElement)("path",{d:"M15.4008 9.85391C16.5008 9.85391 17.5008 8.95391 17.5008 7.75391C17.5008 6.55391 16.5008 5.75391 15.4008 5.75391C14.3008 5.75391 13.3008 6.65391 13.3008 7.85391C13.3008 9.05391 14.2008 9.85391 15.4008 9.85391Z",fill:"#285BE7"}),(0,e.createElement)("path",{d:"M22.1006 7.75391H25.1006",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M13.6006 37.3555H24.4006",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M29.8008 7.75391H32.8008",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M64.9004 1.75391H6.90039V45.9539H64.8004V1.75391H64.9004Z",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M60.4005 14.1523H13.0005V33.2523H60.4005V14.1523Z",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M19.8008 24.6523C21.2008 24.6523 22.3008 23.5523 22.3008 22.1523C22.3008 20.7523 21.2008 19.6523 19.8008 19.6523C18.4008 19.6523 17.3008 20.7523 17.3008 22.1523C17.3008 23.5523 18.4008 24.6523 19.8008 24.6523Z",fill:"#285BE7"}),(0,e.createElement)("path",{d:"M23.6006 28.0523L32.0006 22.0523L38.0006 25.4523L44.9006 20.1523V28.1523C44.9006 28.0523 25.1006 28.0523 23.6006 28.0523Z",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M8.3542 57.5023C12.6542 57.5023 16.1542 54.0023 16.1542 49.7023C16.1542 45.4023 12.6542 41.9023 8.3542 41.9023C4.0542 41.9023 0.554199 45.4023 0.554199 49.7023C0.554199 54.0023 4.0542 57.5023 8.3542 57.5023Z",fill:"#3363E8"}),(0,e.createElement)("path",{d:"M9.35446 45.2992L8.95446 48.6992H10.4545C10.4545 48.6992 11.0545 48.5992 10.4545 49.5992C7.75446 54.0992 7.75446 54.0992 7.75446 54.0992H7.25446L7.75446 50.6992H6.45446C6.45446 50.6992 5.45446 50.9992 6.15446 49.8992C8.95446 45.4992 9.05446 45.1992 9.05446 45.1992L9.35446 45.2992Z",fill:"white"}))}function qu({props:t}){return(0,e.createElement)("svg",{width:"80",height:"64",viewBox:"0 0 80 64",fill:"none",xmlns:"http://www.w3.org/2000/svg",...t},(0,e.createElement)("path",{d:"M15.0067 10.0961C16.1067 10.0961 17.0067 9.19609 17.0067 7.99609C17.0067 6.79609 16.1067 5.99609 15.0067 5.99609C13.9067 5.99609 12.9067 6.89609 12.9067 8.09609C12.9067 9.29609 13.8067 10.0961 15.0067 10.0961Z",fill:"#285BE7"}),(0,e.createElement)("path",{d:"M21.7068 7.99609H24.7068",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M13.2068 37.5977H24.0068",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M29.407 7.99609H32.407",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M64.5068 1.99609H6.50684V46.1961H64.4068V1.99609H64.5068Z",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M60.0069 14.3945H12.6069V33.4945H60.0069V14.3945Z",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M19.4067 24.8945C20.8067 24.8945 21.9067 23.7945 21.9067 22.3945C21.9067 20.9945 20.8067 19.8945 19.4067 19.8945C18.0067 19.8945 16.9067 20.9945 16.9067 22.3945C16.9067 23.7945 18.0067 24.8945 19.4067 24.8945Z",fill:"#285BE7"}),(0,e.createElement)("path",{d:"M23.2068 28.2945L31.6068 22.2945L37.6068 25.6945L44.5068 20.3945V28.3945C44.5068 28.2945 24.7068 28.2945 23.2068 28.2945Z",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M71.6678 17.6953H50.4678V54.3953H71.6678V17.6953Z",fill:"white",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M60.1677 23.5977H62.5677",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M65.3677 23.5977H68.1677",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M55.8676 25.3953C56.9676 25.3953 57.9676 24.4953 57.9676 23.2953C57.9676 22.1953 57.0676 21.1953 55.8676 21.1953C54.7676 21.1953 53.7676 22.0953 53.7676 23.2953C53.8676 24.4953 54.7676 25.3953 55.8676 25.3953Z",fill:"#285BE7"}),(0,e.createElement)("path",{d:"M68.1676 29.1953H53.7676V39.9953H68.1676V29.1953Z",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M60.3676 36.9953C62.7676 36.9953 64.6676 36.9953 64.6676 36.9953V32.1953L58.2676 36.9953H60.3676Z",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M60.5676 44.5977H68.9676",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M71.6677 63.8383C75.9677 63.8383 79.4677 60.3383 79.4677 56.0383C79.4677 51.7383 75.9677 48.2383 71.6677 48.2383C67.3677 48.2383 63.8677 51.7383 63.8677 56.0383C63.8677 60.3383 67.3677 63.8383 71.6677 63.8383Z",fill:"#3363E8"}),(0,e.createElement)("path",{d:"M72.6679 51.6352L72.2679 55.0352H73.7679C73.7679 55.0352 74.3679 54.9352 73.7679 55.9352C71.0679 60.4352 71.0679 60.4352 71.0679 60.4352H70.5679L71.0679 57.0352H69.7679C69.7679 57.0352 68.7679 57.3352 69.4679 56.2352C72.2679 51.8352 72.3679 51.5352 72.3679 51.5352L72.6679 51.6352Z",fill:"white"}),(0,e.createElement)("circle",{cx:"8.16113",cy:"49.9844",r:"8",fill:"white"}),(0,e.createElement)("circle",{cx:"8.16113",cy:"49.9844",r:"8",fill:"white"}),(0,e.createElement)("path",{d:"M8.16089 41.9844C3.76089 41.9844 0.160889 45.5844 0.160889 49.9844C0.160889 54.3844 3.76089 57.9844 8.16089 57.9844C12.5609 57.9844 16.1609 54.3844 16.1609 49.9844C16.1609 45.5844 12.5609 41.9844 8.16089 41.9844ZM13.6809 46.7844H11.3609C11.1209 45.8244 10.7209 44.8644 10.2409 43.9044C11.6809 44.4644 12.9609 45.4244 13.6809 46.7844ZM8.16089 43.5844C8.80089 44.5444 9.36089 45.5844 9.68089 46.7844H6.64089C6.96089 45.6644 7.52089 44.5444 8.16089 43.5844ZM2.00089 51.5844C1.84089 51.1044 1.76089 50.5444 1.76089 49.9844C1.76089 49.4244 1.84089 48.8644 2.00089 48.3844H4.72089C4.64089 48.9444 4.64089 49.4244 4.64089 49.9844C4.64089 50.5444 4.72089 51.0244 4.72089 51.5844H2.00089ZM2.64089 53.1844H5.04089C5.28089 54.1444 5.68089 55.1844 6.16089 56.0644C4.64089 55.5044 3.36089 54.5444 2.64089 53.1844ZM4.96089 46.7844H2.56089C3.36089 45.4244 4.56089 44.4644 6.00089 43.9044C5.60089 44.8644 5.28089 45.8244 4.96089 46.7844ZM8.16089 56.3844C7.52089 55.4244 6.96089 54.3844 6.64089 53.1844H9.68089C9.36089 54.3044 8.80089 55.4244 8.16089 56.3844ZM10.0009 51.5844H6.32089C6.24089 51.0244 6.16089 50.5444 6.16089 49.9844C6.16089 49.4244 6.24089 48.8644 6.32089 48.3844H10.0809C10.1609 48.8644 10.2409 49.4244 10.2409 49.9844C10.2409 50.5444 10.0809 51.0244 10.0009 51.5844ZM10.2409 56.0644C10.7209 55.1844 11.1209 54.2244 11.3609 53.1844H13.6809C12.9609 54.4644 11.6809 55.5044 10.2409 56.0644ZM11.6809 51.5844C11.7609 51.0244 11.7609 50.5444 11.7609 49.9844C11.7609 49.4244 11.6809 48.9444 11.6809 48.3844H14.4009C14.5609 48.8644 14.6409 49.4244 14.6409 49.9844C14.6409 50.5444 14.5609 51.1044 14.4009 51.5844H11.6809Z",fill:"#285BE7"}),(0,e.createElement)("path",{d:"M23.1069 58.5844C27.9592 58.5844 31.9069 54.6367 31.9069 49.7844C31.9069 44.9321 27.9592 40.9844 23.1069 40.9844C18.2546 40.9844 14.3069 44.9321 14.3069 49.7844C14.3069 54.6367 18.2546 58.5844 23.1069 58.5844Z",fill:"#285BE7",stroke:"white",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M24.1071 45.3812L23.7071 48.7812H25.2071C25.2071 48.7812 25.8071 48.6813 25.2071 49.6813C22.5071 54.1813 22.5071 54.1813 22.5071 54.1813H22.0071L22.5071 50.7812H21.2071C21.2071 50.7812 20.2071 51.0813 20.9071 49.9813C23.7071 45.5813 23.8071 45.2812 23.8071 45.2812L24.1071 45.3812Z",fill:"white"}))}function Qu(){return(0,e.createElement)("svg",{width:"78",height:"63",viewBox:"0 0 78 63",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,e.createElement)("path",{d:"M13.2068 37.5117H24.0068",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M14.9067 10.0102C16.0067 10.0102 17.0067 9.11016 17.0067 7.91016C17.0067 6.71016 16.1067 5.91016 14.9067 5.91016C13.8067 5.91016 12.9067 6.81016 12.9067 7.91016C12.9067 9.01016 13.8067 10.0102 14.9067 10.0102Z",fill:"#285BE7"}),(0,e.createElement)("path",{d:"M21.6069 7.91016H24.6069",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M29.4067 7.91016H32.4067",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M64.4068 1.91016H6.50684V46.1102H64.4068V1.91016Z",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M60.0069 14.3086H12.6069V33.4086H60.0069V14.3086Z",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M19.3069 24.8086C20.7069 24.8086 21.8069 23.7086 21.8069 22.3086C21.8069 20.9086 20.7069 19.8086 19.3069 19.8086C17.9069 19.8086 16.8069 20.9086 16.8069 22.3086C16.8069 23.7086 17.9069 24.8086 19.3069 24.8086Z",fill:"#285BE7"}),(0,e.createElement)("path",{d:"M23.2068 28.2086L31.6068 22.2086L37.6068 25.6086L44.5068 20.3086V28.3086C44.5068 28.2086 24.7068 28.2086 23.2068 28.2086Z",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M69.6069 17.6094H48.3069V54.3094H69.5069V17.6094H69.6069Z",fill:"white",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M69.7068 17.6094H48.5068V28.4094H69.7068V17.6094Z",fill:"#285BE7",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M59.6069 23.3086H62.6069",stroke:"white",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M53.8068 25.3094C54.9068 25.3094 55.9068 24.4094 55.9068 23.2094C55.9068 22.1094 55.0068 21.1094 53.8068 21.1094C52.7068 21.1094 51.7068 22.0094 51.7068 23.2094C51.7068 24.4094 52.7068 25.3094 53.8068 25.3094Z",fill:"white"}),(0,e.createElement)("path",{d:"M56.9067 33.9102H65.1067",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M53.1069 33.9102H53.4069",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M56.9067 37.3086H65.1067",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M53.1069 37.3086H53.4069",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M56.9067 41.0117H65.1067",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M53.1069 41.0117H53.4069",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M69.2192 62.1117C73.5192 62.1117 77.0192 58.6117 77.0192 54.3117C77.0192 50.0117 73.5192 46.5117 69.2192 46.5117C64.9192 46.5117 61.4192 50.0117 61.4192 54.3117C61.4192 58.6117 64.9192 62.1117 69.2192 62.1117Z",fill:"#3363E8"}),(0,e.createElement)("path",{d:"M70.2194 49.9086L69.8194 53.3086H71.3194C71.3194 53.3086 71.9194 53.2086 71.3194 54.2086C68.6194 58.7086 68.6194 58.7086 68.6194 58.7086H68.1194L68.6194 55.3086H67.3194C67.3194 55.3086 66.3194 55.6086 67.0194 54.5086C69.8194 50.1086 69.9194 49.8086 69.9194 49.8086L70.2194 49.9086Z",fill:"white"}),(0,e.createElement)("circle",{cx:"8.16113",cy:"49.8125",r:"8",fill:"white"}),(0,e.createElement)("circle",{cx:"8.16113",cy:"49.8125",r:"8",fill:"white"}),(0,e.createElement)("path",{d:"M8.16089 41.8125C3.76089 41.8125 0.160889 45.4125 0.160889 49.8125C0.160889 54.2125 3.76089 57.8125 8.16089 57.8125C12.5609 57.8125 16.1609 54.2125 16.1609 49.8125C16.1609 45.4125 12.5609 41.8125 8.16089 41.8125ZM13.6809 46.6125H11.3609C11.1209 45.6525 10.7209 44.6925 10.2409 43.7325C11.6809 44.2925 12.9609 45.2525 13.6809 46.6125ZM8.16089 43.4125C8.80089 44.3725 9.36089 45.4125 9.68089 46.6125H6.64089C6.96089 45.4925 7.52089 44.3725 8.16089 43.4125ZM2.00089 51.4125C1.84089 50.9325 1.76089 50.3725 1.76089 49.8125C1.76089 49.2525 1.84089 48.6925 2.00089 48.2125H4.72089C4.64089 48.7725 4.64089 49.2525 4.64089 49.8125C4.64089 50.3725 4.72089 50.8525 4.72089 51.4125H2.00089ZM2.64089 53.0125H5.04089C5.28089 53.9725 5.68089 55.0125 6.16089 55.8925C4.64089 55.3325 3.36089 54.3725 2.64089 53.0125ZM4.96089 46.6125H2.56089C3.36089 45.2525 4.56089 44.2925 6.00089 43.7325C5.60089 44.6925 5.28089 45.6525 4.96089 46.6125ZM8.16089 56.2125C7.52089 55.2525 6.96089 54.2125 6.64089 53.0125H9.68089C9.36089 54.1325 8.80089 55.2525 8.16089 56.2125ZM10.0009 51.4125H6.32089C6.24089 50.8525 6.16089 50.3725 6.16089 49.8125C6.16089 49.2525 6.24089 48.6925 6.32089 48.2125H10.0809C10.1609 48.6925 10.2409 49.2525 10.2409 49.8125C10.2409 50.3725 10.0809 50.8525 10.0009 51.4125ZM10.2409 55.8925C10.7209 55.0125 11.1209 54.0525 11.3609 53.0125H13.6809C12.9609 54.2925 11.6809 55.3325 10.2409 55.8925ZM11.6809 51.4125C11.7609 50.8525 11.7609 50.3725 11.7609 49.8125C11.7609 49.2525 11.6809 48.7725 11.6809 48.2125H14.4009C14.5609 48.6925 14.6409 49.2525 14.6409 49.8125C14.6409 50.3725 14.5609 50.9325 14.4009 51.4125H11.6809Z",fill:"#285BE7"}))}function Gu({mode:t}){switch(t){case y:return(0,e.createElement)(Zu,null);case b:return(0,e.createElement)(qu,null);case v:return(0,e.createElement)(Qu,null);default:return null}}function Yu(e){switch(e){case y:return(0,l.__)("Standard","amp");case b:return(0,l.__)("Transitional","amp");case v:return(0,l.__)("Reader","amp");default:return null}}function Ku({children:t,details:n,detailsUrl:r,initialOpen:o,labelExtra:a=null,mode:i,previouslySelected:s=!1}){const{editedOptions:u,updateOptions:c}=(0,e.useContext)(h),{theme_support:d}=u,f=function(e){return`template-mode-${e}`}(i);return(0,e.createElement)(Uu,{className:"template-mode-option",handleType:$u,heading:(0,e.createElement)("label",{className:"template-mode-option__label",htmlFor:f},(0,e.createElement)("div",{className:"template-mode-selection__input-container"},(0,e.createElement)("input",{type:"radio",id:f,checked:i===d,onChange:()=>{c({theme_support:i})}})),(0,e.createElement)("div",{className:"template-mode-selection__illustration"},(0,e.createElement)(Gu,{mode:i})),(0,e.createElement)("div",{className:"template-mode-selection__description"},(0,e.createElement)("h3",null,Yu(i)),s&&(0,e.createElement)(Vu,null,(0,l.__)("Previously selected","amp")),a&&(0,e.createElement)("div",{className:"template-mode-selection__label-extra"},a))),hiddenTitle:Yu(i),id:`${f}-container`,initialOpen:"boolean"==typeof o?o:i&&d&&i===d,selected:i===d},(0,e.createElement)("div",{className:"template-mode-selection__details"},t,Array.isArray(n)&&(0,e.createElement)("ul",{className:"template-mode-selection__details-list"},n.filter(Boolean).map(((t,n)=>(0,e.createElement)("li",{key:n,className:"template-mode-selection__details-list-item"},t)))),n&&!Array.isArray(n)&&(0,e.createElement)("p",null,(0,e.createElement)("span",null,n),r&&(0,e.createElement)(e.Fragment,null," ",(0,e.createElement)("a",{href:r,target:"_blank",rel:"noreferrer noopener"},(0,l.__)("Learn more.","amp"))))))}function Xu(){return(0,e.createElement)(mu,{size:fu,type:du},(0,l.__)("Recommended","amp"))}function Ju(e,t,n){if(n===e||!t)return!0;switch(t[e].recommendationLevel){case _u:return!0;case Mu:return!1;default:return!Object.values(t).some((e=>e.recommendationLevel===_u))}}function ec({firstTimeInWizard:t,savedCurrentMode:n,technicalQuestionChanged:r,templateModeRecommendation:o}){return(0,e.createElement)("form",null,(0,e.createElement)(Ku,{details:o?.[v]?.details,initialOpen:Ju(v,o,n),mode:v,previouslySelected:n===v&&r&&!t,labelExtra:o?.[v]?.recommendationLevel===_u?(0,e.createElement)(Xu,null):null}),(0,e.createElement)(Ku,{details:o?.[b]?.details,initialOpen:Ju(b,o,n),mode:b,previouslySelected:n===b&&r&&!t,labelExtra:o?.[b]?.recommendationLevel===_u?(0,e.createElement)(Xu,null):null}),(0,e.createElement)(Ku,{details:o?.[y]?.details,initialOpen:Ju(y,o,n),mode:y,previouslySelected:n===y&&r&&!t,labelExtra:o?.[y]?.recommendationLevel===_u?(0,e.createElement)(Xu,null):null}))}const tc=window.wp.htmlEntities;function nc({children:t,isLoading:n=!1}){return(0,e.createElement)("div",{className:"phone "+(n?"is-loading":"")},(0,e.createElement)("div",{className:"phone__inner"},(0,e.createElement)("div",{className:"phone__overlay"},(0,e.createElement)(Zs,null)),t))}var rc=function(t){return(0,e.createElement)("svg",{...t},(0,e.createElement)("defs",null,(0,e.createElement)("style",null,".cls-1","{","fill:#fff","}",".cls-2","{","fill:#c4c4c4","}",".cls-4","{","fill:#e7e7e7","}")),(0,e.createElement)("path",{className:"cls-1",d:"M.13 140.05V-.14h78.89v140.19z"}),(0,e.createElement)("path",{className:"cls-2",d:"m7.51 14.71 16.68.07a2.31 2.31 0 0 1 2.3 2.33 2.3 2.3 0 0 1-2.32 2.3l-16.68-.07A2.33 2.33 0 0 1 5.18 17a2.31 2.31 0 0 1 2.33-2.29Z"}),(0,e.createElement)("rect",{className:"cls-2",x:"32.11",y:"-4.06",width:"2.31",height:"56.24",rx:"1.16",transform:"rotate(-90 33.14 24.08)"}),(0,e.createElement)("rect",{className:"cls-2",x:"18.84",y:"58.89",width:"4.63",height:"32.47",rx:"2.31",transform:"rotate(-89.74 21.163 75.128)"}),(0,e.createElement)("path",{className:"cls-2",d:"M6.19 61.26h9.27a1.15 1.15 0 0 1 1.15 1.16 1.16 1.16 0 0 1-1.16 1.16H6.18A1.15 1.15 0 0 1 5 62.41a1.15 1.15 0 0 1 1.19-1.15ZM22.4 61.33h9.27a1.16 1.16 0 0 1 1.15 1.17 1.15 1.15 0 0 1-1.16 1.15h-9.27a1.16 1.16 0 0 1-1.15-1.16 1.16 1.16 0 0 1 1.16-1.16ZM6.06 80.48h11a1.15 1.15 0 0 1 1.15 1.16 1.15 1.15 0 0 1-1.16 1.15h-11a1.16 1.16 0 0 1-1.16-1.16 1.16 1.16 0 0 1 1.17-1.15ZM73.15 99.46l-19.56-.09a1.15 1.15 0 0 0-1.16 1.15 1.15 1.15 0 0 0 1.15 1.16l19.56.09a1.15 1.15 0 0 0 1.16-1.15 1.15 1.15 0 0 0-1.15-1.16ZM6 91.43h11a1.15 1.15 0 0 1 1.15 1.16 1.15 1.15 0 0 1-1.15 1.2l-11-.05a1.16 1.16 0 0 1-1.16-1.16A1.16 1.16 0 0 1 6 91.43ZM62.17 86.26h11a1.17 1.17 0 0 1 1.15 1.17 1.16 1.16 0 0 1-1.16 1.15h-11A1.16 1.16 0 0 1 61 87.41a1.16 1.16 0 0 1 1.17-1.15ZM25.92 104.78l-20-.09a1.15 1.15 0 0 0-1.16 1.15A1.15 1.15 0 0 0 5.94 107l20 .09a1.15 1.15 0 0 0 1.16-1.15 1.15 1.15 0 0 0-1.18-1.16ZM24 80.56l49.28.22a1.16 1.16 0 0 1 1.16 1.16 1.18 1.18 0 0 1-1.17 1.16l-49.28-.23a1.15 1.15 0 0 1-1.15-1.16A1.15 1.15 0 0 1 24 80.56ZM47.71 99.34 6 99.15a1.15 1.15 0 0 0-1.16 1.15A1.17 1.17 0 0 0 6 101.47l41.74.18a1.16 1.16 0 0 0 1.17-1.15 1.16 1.16 0 0 0-1.2-1.16ZM23.9 91.51l49.28.22a1.16 1.16 0 0 1 1.16 1.16 1.18 1.18 0 0 1-1.17 1.16l-49.28-.23a1.15 1.15 0 0 1-1.15-1.16 1.15 1.15 0 0 1 1.16-1.15ZM6 86l49.28.22a1.15 1.15 0 0 1 1.15 1.16 1.16 1.16 0 0 1-1.16 1.16L6 88.32a1.15 1.15 0 0 1-1.15-1.16A1.15 1.15 0 0 1 6 86ZM73.13 105l-41.79-.19a1.18 1.18 0 0 0-1.17 1.19 1.17 1.17 0 0 0 1.15 1.16l41.8.19a1.17 1.17 0 0 0 1.16-1.16 1.16 1.16 0 0 0-1.15-1.19ZM38.62 61.41h9.26a1.16 1.16 0 0 1 1.12 1.2 1.16 1.16 0 0 1-1.17 1.15h-9.26a1.16 1.16 0 0 1-1.16-1.16 1.16 1.16 0 0 1 1.21-1.19ZM54.83 61.48h9.27a1.15 1.15 0 0 1 1.15 1.16 1.15 1.15 0 0 1-1.16 1.15h-9.27a1.15 1.15 0 0 1-1.15-1.16 1.15 1.15 0 0 1 1.16-1.15ZM5.7 4.65h4.63a.45.45 0 0 1 .46.46.46.46 0 0 1-.46.46H5.7a.46.46 0 0 1-.46-.46.47.47 0 0 1 .46-.46ZM5.69 6.51h4.63a.45.45 0 0 1 .46.46.45.45 0 0 1-.46.46H5.69A.46.46 0 0 1 5.23 7a.45.45 0 0 1 .46-.49ZM5.69 8.36h4.63a.47.47 0 0 1 .46.46.46.46 0 0 1-.47.46H5.68a.47.47 0 0 1-.46-.46.46.46 0 0 1 .47-.46Z"}),(0,e.createElement)("path",{d:"M56.12 5.88 72.55 6a1.31 1.31 0 0 1 1.31 1.32 1.31 1.31 0 0 1-1.32 1.31l-16.43-.12a1.32 1.32 0 0 1-1.31-1.32 1.3 1.3 0 0 1 1.32-1.31Z",style:{fill:"none",stroke:"#c4c4c4",strokeWidth:"2px"}}),(0,e.createElement)("rect",{className:"cls-4",x:"27.33",y:"9.56",width:"24.99",height:"69.44",rx:"10",transform:"rotate(-89.74 39.83 44.28)"}),(0,e.createElement)("path",{className:"cls-2",d:"M29.36 44.42 9.54 56.64l60.56.28-20-18-16.56 11.15Z"}),(0,e.createElement)("circle",{className:"cls-1",cx:"14.39",cy:"40.41",r:"3.76"}),(0,e.createElement)("rect",{className:"cls-4",x:"8.41",y:"108",width:"24.99",height:"32.41",rx:"10",transform:"rotate(-90 20.58 123.97)"}),(0,e.createElement)("path",{className:"cls-2",d:"m17.35 124.37-8.22 12.28 25 .11-8.23-18L19.06 130Z"}),(0,e.createElement)("circle",{className:"cls-1",cx:"12.56",cy:"118.49",r:"3.76"}),(0,e.createElement)("rect",{className:"cls-4",x:"45.64",y:"108.16",width:"24.99",height:"32.41",rx:"10",transform:"rotate(-89.74 58.139 124.366)"}),(0,e.createElement)("path",{className:"cls-2",d:"m54.58 124.54-8.22 12.27 25 .11-8.23-18-6.85 11.24Z"}),(0,e.createElement)("circle",{className:"cls-1",cx:"49.78",cy:"118.66",r:"3.76"}))};function oc({description:t,ElementName:n="li",homepage:r,screenshotUrl:o,slug:a,name:i,disabled:s,style:u}){const{editedOptions:c,updateOptions:d}=(0,e.useContext)(h),{reader_theme:f}=c,p=`theme-card__${a}`;return(0,e.createElement)(Yl,{className:"theme-card "+(s?"theme-card--disabled":""),direction:"bottom",ElementName:n,selected:f===a,style:u},(0,e.createElement)("label",{htmlFor:p,className:"theme-card__label"},(0,e.createElement)(nc,null,o?(0,e.createElement)("img",{src:o,alt:i||a,height:"2165",width:"1000",loading:"lazy",decoding:"async"}):(0,e.createElement)(rc,{style:{width:"100%"}}),s&&(0,e.createElement)("div",{className:"theme-card__disabled-overlay"},(0,l.__)("Unavailable","amp"))),(0,e.createElement)("div",{className:"theme-card__label-header"},(0,e.createElement)("input",{disabled:Boolean(s),type:"radio",id:p,checked:f===a,onChange:()=>{d({reader_theme:a})}}),(0,e.createElement)("h4",{className:"theme-card__title"},(0,tc.decodeEntities)(i||a))),t&&(0,e.createElement)("p",{className:"theme-card__description"},(0,tc.decodeEntities)(t))),r&&(0,e.createElement)("p",{className:"theme-card__theme-link"},(0,e.createElement)("a",{href:r,target:"_blank",rel:"noreferrer noopener"},(0,l.__)("Learn more","amp"))))}function ac(){const{themesAPIError:t}=(0,e.useContext)(k);return t?(0,e.createElement)(mu,{type:su},(0,e.createElement)("p",null,t)):null}function ic(){const{availableThemes:t,fetchingThemes:n,unavailableThemes:r}=(0,e.useContext)(k);return n?(0,e.createElement)(Zs,null):(0,e.createElement)("div",{className:"reader-theme-selection"},(0,e.createElement)("p",null,(0,l.__)("Select the theme template for mobile visitors","amp")),(0,e.createElement)(ac,null),(0,e.createElement)("div",null,0<t.length&&(0,e.createElement)("ul",{className:"choose-reader-theme__grid"},t.map((t=>(0,e.createElement)(oc,{key:`theme-card-${t.slug}`,screenshotUrl:t.screenshot_url,...t})))),0<r.length&&(0,e.createElement)("div",{className:"choose-reader-theme__unavailable"},(0,e.createElement)("h3",null,(0,l.__)("Unavailable themes","amp")),(0,e.createElement)("p",null,(0,l.__)("The following themes are compatible but cannot be installed automatically. Please install them manually, or contact your host if you are not able to do so.","amp")),(0,e.createElement)("ul",{className:"choose-reader-theme__grid"},r.map((t=>(0,e.createElement)(oc,{key:`theme-card-${t.slug}`,screenshotUrl:t.screenshot_url,disabled:!0,...t})))))))}function lc(t){const n=`clip-icon-laptop-toggles-${be(lc)}`;return(0,e.createElement)("svg",{viewBox:"0 0 40 28",fill:"none",xmlns:"http://www.w3.org/2000/svg",...t},(0,e.createElement)("g",{clipPath:`url(#${n})`,stroke:"#005AF0",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},(0,e.createElement)("path",{d:"M4.46 21.02V3.91A2.92 2.92 0 017.38 1h24.4a2.91 2.91 0 012.91 2.91v17.64M25.15 21.76v.88h-11v-.88H1v2.09a2.24 2.24 0 002.28 2.25h32.79a2.24 2.24 0 002.21-2.25v-2.09H25.15zM11.2 5.79v11.6"}),(0,e.createElement)("path",{d:"M11.2 14.06a2.47 2.47 0 100-4.94 2.47 2.47 0 000 4.94z",fill:"#fff"}),(0,e.createElement)("path",{d:"M19.58 5.79v11.6"}),(0,e.createElement)("path",{d:"M19.58 12.06a2.47 2.47 0 100-4.94 2.47 2.47 0 000 4.94z",fill:"#fff"}),(0,e.createElement)("path",{d:"M27.95 5.79v11.6"}),(0,e.createElement)("path",{d:"M27.95 16.06a2.47 2.47 0 100-4.94 2.47 2.47 0 000 4.94z",fill:"#fff"})),(0,e.createElement)("defs",null,(0,e.createElement)("clipPath",{id:n},(0,e.createElement)("path",{fill:"#fff",d:"M0 0h39.31v27.09H0z"}))))}rc.defaultProps={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 79 139"};function sc({width:t=42,...n}){const r=`clip-icon-laptop-search-${be(sc)}`,o=42/t*2;return(0,e.createElement)("svg",{viewBox:"0 0 42 29",fill:"none",xmlns:"http://www.w3.org/2000/svg",width:t,...n},(0,e.createElement)("g",{clipPath:`url(#${r})`},(0,e.createElement)("path",{d:"M9.102 6.577l-.017 3.95a1.89 1.89 0 001.882 1.897l15.76.066a1.89 1.89 0 001.898-1.882l.016-3.95a1.89 1.89 0 00-1.882-1.897L11 4.694a1.89 1.89 0 00-1.897 1.883z",stroke:"#005AF0",strokeWidth:o,strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M13.14 9.2a1.15 1.15 0 100-2.3 1.15 1.15 0 000 2.3zM9.13 18.03a1.15 1.15 0 100-2.3 1.15 1.15 0 000 2.3z",fill:"#005AF0"}),(0,e.createElement)("path",{d:"M12.24 16.88h4.63M19.83 16.88h1.79M14.46 12.22l7.98-4.97 4.36 5.22",stroke:"#005AF0",strokeWidth:o,strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M4.24 19.65V3.71A2.71 2.71 0 016.95 1h22.74a2.71 2.71 0 012.72 2.71v16.43M23.5 20.35v.82H13.24v-.82H1v2a2.1 2.1 0 002.09 2h30.59a2.1 2.1 0 002.09-2.09v-2l-12.27.09z",stroke:"#005AF0",strokeWidth:o,strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M33.622 20.67l-.686.686a2 2 0 000 2.829l3.14 3.14a2 2 0 002.828 0l.686-.687a2 2 0 000-2.828l-3.14-3.14a2 2 0 00-2.828 0z",fill:"#fff"}),(0,e.createElement)("path",{d:"M33.622 20.67l-.686.686a2 2 0 000 2.829l3.14 3.14a2 2 0 002.828 0l.686-.687a2 2 0 000-2.828l-3.14-3.14a2 2 0 00-2.828 0z",stroke:"#005AF0",strokeWidth:o,strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M29.37 23.51a6.4 6.4 0 100-12.8 6.4 6.4 0 000 12.8z",fill:"#fff",stroke:"#005AF0",strokeWidth:o,strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M32.11 15.98a2.999 2.999 0 01-2.93 3.8",stroke:"#005AF0",strokeWidth:o,strokeLinecap:"round",strokeLinejoin:"round"})),(0,e.createElement)("defs",null,(0,e.createElement)("clipPath",{id:r},(0,e.createElement)("path",{fill:"#fff",d:"M0 0h41.21v28.96H0z"}))))}const uc=(0,e.createContext)({flexItemDisplay:void 0}),cc={name:"zjik7",styles:"display:flex"},dc={name:"qgaee5",styles:"display:block;max-height:100%;max-width:100%;min-height:0;min-width:0"},fc={name:"82a6rk",styles:"flex:1"},pc={name:"13nosa1",styles:">*{min-height:0;}"},mc={name:"1pwxzk4",styles:">*{min-width:0;}"};function hc(t){const{className:n,display:r,isBlock:o=!1,...a}=qi(t,"FlexItem"),i={},l=(0,e.useContext)(uc).flexItemDisplay;return i.Base=Kl({display:r||l},"",""),{...a,className:Zi()(dc,i.Base,o&&fc,n)}}const gc=Qi((function(t,n){const r=function(e){return hc({isBlock:!0,...qi(e,"FlexBlock")})}(t);return(0,e.createElement)(il,{...r,ref:n})}),"FlexBlock"),vc=()=>{},yc=function(t){const{className:n,checked:r,id:o,disabled:a,onChange:i=vc,...l}=t,s=x()("components-form-toggle",n,{"is-checked":r,"is-disabled":a});return(0,e.createElement)("span",{className:s},(0,e.createElement)("input",{className:"components-form-toggle__input",id:o,type:"checkbox",checked:r,onChange:i,disabled:a,...l}),(0,e.createElement)("span",{className:"components-form-toggle__track"}),(0,e.createElement)("span",{className:"components-form-toggle__thumb"}))},bc={"default.fontFamily":"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif","default.fontSize":"13px","helpText.fontSize":"12px",mobileTextMinFontSize:"16px"};function Ec(e){var t;return null!==(t=bc[e])&&void 0!==t?t:""}const kc={name:"9amh4a",styles:"font-size:11px;font-weight:500;line-height:1.4;text-transform:uppercase"},wc=ol("div",{target:"ej5x27r4"})("font-family:",Ec("default.fontFamily"),";font-size:",Ec("default.fontSize"),";",{name:"kv6lnz",styles:"box-sizing:border-box;*,*::before,*::after{box-sizing:inherit;}"},";"),Cc=ol("div",{target:"ej5x27r3"})((({__nextHasNoMarginBottom:e=!1})=>!e&&Kl("margin-bottom:",Jl(2),";",""))," .components-panel__row &{margin-bottom:inherit;}"),xc=Kl(kc,";display:inline-block;margin-bottom:",Jl(2),";padding:0;",""),Sc=ol("label",{target:"ej5x27r2"})(xc,";");var _c={name:"11yad0w",styles:"margin-bottom:revert"};const Lc=ol("p",{target:"ej5x27r1"})("margin-top:",Jl(2),";margin-bottom:0;font-size:",Ec("helpText.fontSize"),";font-style:normal;color:",Rs.gray[700],";",(({__nextHasNoMarginBottom:e=!1})=>!e&&_c),";"),Mc=ol("span",{target:"ej5x27r0"})(xc,";"),Pc=({__nextHasNoMarginBottom:t=!1,id:n,label:r,hideLabelFromVision:o=!1,help:a,className:i,children:l})=>(0,e.createElement)(wc,{className:x()("components-base-control",i)},(0,e.createElement)(Cc,{className:"components-base-control__field",__nextHasNoMarginBottom:t},r&&n&&(o?(0,e.createElement)(ll,{as:"label",htmlFor:n},r):(0,e.createElement)(Sc,{className:"components-base-control__label",htmlFor:n},r)),r&&!n&&(o?(0,e.createElement)(ll,{as:"label"},r):(0,e.createElement)(Pc.VisualLabel,null,r)),l),!!a&&(0,e.createElement)(Lc,{id:n?n+"__help":void 0,className:"components-base-control__help",__nextHasNoMarginBottom:t},a));Pc.VisualLabel=({className:t,children:n,...r})=>(0,e.createElement)(Mc,{...r,className:x()("components-base-control__label",t)},n);const Tc=Pc,Nc=Qi((function(t,n){const r=hc(t);return(0,e.createElement)(il,{...r,ref:n})}),"FlexItem"),Oc=["40em","52em","64em"],Ac=(t={})=>{const{defaultIndex:n=0}=t;if("number"!=typeof n)throw new TypeError(`Default breakpoint index should be a number. Got: ${n}, ${typeof n}`);if(n<0||n>Oc.length-1)throw new RangeError(`Default breakpoint index out of range. Theme has ${Oc.length} breakpoints, got index ${n}`);const[r,o]=(0,e.useState)(n);return(0,e.useEffect)((()=>{const e=()=>{const e=Oc.filter((e=>"undefined"!=typeof window&&window.matchMedia(`screen and (min-width: ${e})`).matches)).length;r!==e&&o(e)};return e(),"undefined"!=typeof window&&window.addEventListener("resize",e),()=>{"undefined"!=typeof window&&window.removeEventListener("resize",e)}}),[r]),r};const Rc={bottom:{align:"flex-end",justify:"center"},bottomLeft:{align:"flex-end",justify:"flex-start"},bottomRight:{align:"flex-end",justify:"flex-end"},center:{align:"center",justify:"center"},edge:{align:"center",justify:"space-between"},left:{align:"center",justify:"flex-start"},right:{align:"center",justify:"flex-end"},stretch:{align:"stretch"},top:{align:"flex-start",justify:"center"},topLeft:{align:"flex-start",justify:"flex-start"},topRight:{align:"flex-start",justify:"flex-end"}},jc={bottom:{justify:"flex-end",align:"center"},bottomLeft:{justify:"flex-end",align:"flex-start"},bottomRight:{justify:"flex-end",align:"flex-end"},center:{justify:"center",align:"center"},edge:{justify:"space-between",align:"center"},left:{justify:"center",align:"flex-start"},right:{justify:"center",align:"flex-end"},stretch:{align:"stretch"},top:{justify:"flex-start",align:"center"},topLeft:{justify:"flex-start",align:"flex-start"},topRight:{justify:"flex-start",align:"flex-end"}};function Fc(t){const{alignment:n="edge",children:r,direction:o,spacing:a=2,...i}=qi(t,"HStack"),l=function(e,t="row"){if(!Fu(e))return{};const n="column"===t?jc:Rc;return e in n?n[e]:{align:e}}(n,o),s=function(t){return"string"==typeof t?[t]:e.Children.toArray(t).filter((t=>(0,e.isValidElement)(t)))}(r);return function(t){const{align:n,className:r,direction:o="row",expanded:a=!0,gap:i=2,justify:l="space-between",wrap:s=!1,...u}=qi(function(e){const{isReversed:t,...n}=e;return void 0!==t?(ve("Flex isReversed",{alternative:'Flex direction="row-reverse" or "column-reverse"',since:"5.9"}),{...n,direction:t?"row-reverse":"row"}):n}(t),"Flex"),c=function(e,t={}){const n=Ac(t);if(!Array.isArray(e)&&"function"!=typeof e)return e;const r=e||[];return r[n>=r.length?r.length-1:n]}(Array.isArray(o)?o:[o]),d="string"==typeof c&&!!c.includes("column"),f=Zi();return{...u,className:(0,e.useMemo)((()=>{const e=Kl({alignItems:null!=n?n:d?"normal":"center",flexDirection:c,flexWrap:s?"wrap":void 0,gap:Jl(i),justifyContent:l,height:d&&a?"100%":void 0,width:!d&&a?"100%":void 0},"","");return f(cc,e,d?pc:mc,r)}),[n,r,f,c,a,i,d,l,s]),isColumn:d}}({children:s.map(((t,n)=>{if(o=["Spacer"],(r=t)&&("string"==typeof o?Gi(r).includes(o):Array.isArray(o)&&o.some((e=>Gi(r).includes(e))))){const r=t,o=r.key||`hstack-${n}`;return(0,e.createElement)(Nc,{isBlock:!0,key:o,...r.props})}var r,o;return t})),direction:o,justify:"center",...l,...i,gap:a})}const zc=Qi((function(t,n){const r=Fc(t);return(0,e.createElement)(il,{...r,ref:n})}),"HStack"),Ic=function t({__nextHasNoMarginBottom:n,label:r,checked:o,help:a,className:i,onChange:l,disabled:s}){const u=`inspector-toggle-control-${be(t)}`,c=Zi()("components-toggle-control",i,!n&&Kl({marginBottom:Jl(3)},"",""));let d,f;return a&&("function"==typeof a?void 0!==o&&(f=a(o)):f=a,f&&(d=u+"__help")),(0,e.createElement)(Tc,{id:u,help:f,className:c,__nextHasNoMarginBottom:!0},(0,e.createElement)(zc,{justify:"flex-start",spacing:3},(0,e.createElement)(yc,{id:u,checked:o,onChange:function(e){l(e.target.checked)},"aria-describedby":d,disabled:s}),(0,e.createElement)(gc,{as:"label",htmlFor:u,className:"components-toggle-control__label"},r)))};function Hc({checked:t,compact:n=!1,disabled:r=!1,onChange:o,text:a,title:i}){return(0,e.createElement)("div",{className:x()("amp-setting-toggle",{"amp-setting-toggle--disabled":r,"amp-setting-toggle--compact":n})},(0,e.createElement)(Ic,{checked:!r&&t,label:(0,e.createElement)("div",{className:"amp-setting-toggle__label-text"},i&&((0,e.isValidElement)(i)?i:(0,e.createElement)("h3",null,i)),a&&(0,e.createElement)("p",null,a)),onChange:o}))}function Bc({links:t=[],onClick:n}){return(0,e.createElement)(Yl,{ElementName:"nav",className:"nav-menu"},(0,e.createElement)("ul",{className:"nav-menu__list"},t.map(((t,r)=>(0,e.createElement)("li",{key:`${t.url}-${r}`,className:"nav-menu__item"},(0,e.createElement)("a",{className:x()("nav-menu__link",{"nav-menu__link--active":t.isActive}),href:t.url,onClick:e=>n(e,t)},t.label))))))}function Dc({url:t}){const n=(0,e.useRef)(null),[r,o]=(0,e.useState)(!0);return(0,e.useEffect)((()=>{if(!n.current)return null;const e=n.current,t=()=>o(!1);return e.addEventListener("load",t),()=>{e.removeEventListener("load",t)}}),[]),(0,e.useEffect)((()=>{t&&o(!0)}),[t]),(0,e.createElement)(nc,{isLoading:r},(0,e.createElement)("iframe",{className:"done__preview-iframe",src:t,ref:n,title:(0,l.__)("Site preview","amp"),name:"amp-wizard-completion-preview"}))}function Wc(){return(0,e.createElement)("div",{className:"saving"},(0,e.createElement)("svg",{width:"285",height:"138",viewBox:"0 0 285 138",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,e.createElement)("path",{d:"M95.1831 136.785C95.1831 136.785 129.883 102.785 204.483 119.185",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M117.883 123.285C117.883 123.285 73.9833 98.8854 34.3833 113.985",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M177.583 127.785C168.583 123.285 160.383 125.985 160.683 126.685",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M49.1836 109.788C47.4836 109.188 46.4836 106.988 47.2836 105.288C47.9836 103.588 50.2836 102.788 51.8836 103.688C51.6836 102.488 52.4836 101.288 53.5836 100.888C54.6836 100.488 56.0836 100.888 56.7836 101.788C57.4836 99.7882 59.6836 98.4882 61.8836 98.6882C63.4836 98.8882 64.8836 99.8882 65.5836 101.388C66.4836 100.488 68.1836 100.488 69.0836 101.488C69.9836 102.388 69.8836 104.088 68.8836 104.988C70.0836 104.688 71.3836 105.188 71.9836 106.188C72.5836 107.188 72.6836 108.588 71.9836 109.588",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M51.4828 120.886C52.7828 120.586 54.1828 120.386 55.3828 119.786C56.3828 119.286 57.2828 118.186 56.1828 117.286C55.4828 116.686 53.6828 116.786 52.7828 116.786C51.1828 116.686 49.5828 116.586 48.0828 117.286C47.0828 117.786 43.6828 120.186 44.0828 121.486C44.6828 122.986 50.2828 121.086 51.4828 120.886Z",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M68.6833 115.885C67.9833 115.685 67.1833 115.485 66.4833 115.585C63.9833 115.685 61.9833 117.685 64.4833 119.385C66.0833 120.485 68.3833 120.585 70.1833 120.785C71.2833 120.985 72.6833 120.885 73.1833 119.885C73.4833 119.185 73.1833 118.285 72.6833 117.785C72.1833 117.185 71.3833 116.885 70.6833 116.685C70.0833 116.285 69.3833 116.085 68.6833 115.885Z",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M246.827 89.9262C247.727 89.7262 248.627 89.4262 249.327 88.6262C250.427 87.5262 251.227 85.9262 250.527 84.3262C250.027 83.0262 248.327 80.9262 244.527 81.2262C243.727 81.3262 242.627 77.8262 242.127 77.2262C240.827 75.6262 239.027 74.7262 237.027 74.3262C236.027 74.1262 234.927 74.1262 234.027 74.5262C233.627 74.7262 231.827 76.0262 232.127 76.6262C232.127 76.6262 227.727 69.1262 221.527 75.5262C220.027 77.3262 219.527 78.7262 219.527 78.7262C219.527 78.7262 213.827 77.4262 212.627 82.0262C212.127 84.4262 211.127 89.2262 218.527 89.6262C223.727 89.6262 228.927 89.7262 234.127 89.8262C237.727 89.9262 241.327 90.4262 245.027 90.0262C245.627 90.1262 246.227 90.0262 246.827 89.9262Z",fill:"white",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M235.629 109.054H254.729C255.929 107.454 255.529 104.854 254.029 103.554C252.529 102.254 250.029 102.154 248.629 103.554C248.729 101.454 247.329 99.454 245.329 98.854C243.329 98.254 241.029 99.154 239.929 100.854C237.429 99.154 233.529 100.154 232.229 102.954C230.829 105.654 232.629 108.254 235.629 109.054Z",fill:"white",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M275.75 56.9414L277.85 62.8414L283.75 64.9414L277.85 67.0414L275.75 72.9414L273.65 67.0414L267.75 64.9414L273.65 62.8414L275.75 56.9414Z",fill:"white",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M34.3833 64.9414L36.4833 70.8414L42.3833 72.9414L36.4833 75.0414L34.3833 80.9414L32.2833 75.0414L26.3833 72.9414L32.2833 70.8414L34.3833 64.9414Z",fill:"white",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M10.4722 81.5586L12.8722 88.1586L19.4722 90.5586L12.8722 92.9586L10.4722 99.5586L8.07217 92.9586L1.47217 90.5586L8.07217 88.1586L10.4722 81.5586Z",fill:"white",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M144.095 75.0624L145.303 84.4721L151.979 86.8034L156.709 93.8481L155.359 100.717L164.592 105.589L169.674 100.473L178.103 99.0727L184.393 103.366L191.437 98.6364L189.651 92.1705L194.524 82.9369L201.182 80.1693L199.782 71.7409L193.106 69.4095L187.395 62.172L188.745 55.3034L180.493 50.6238L175.218 56.7209L166.982 57.1403L159.711 52.6535L153.84 56.5953L155.434 64.0425L150.561 73.276L144.095 75.0624Z",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10"}),(0,e.createElement)("path",{d:"M170.614 87.9204C176.033 88.9857 181.29 85.4562 182.355 80.037C183.42 74.6179 179.891 69.3612 174.471 68.296C169.052 67.2307 163.796 70.7603 162.73 76.1794C161.665 81.5986 165.195 86.8552 170.614 87.9204Z",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10"}),(0,e.createElement)("path",{d:"M138.394 47.0394L148.416 53.086L146.101 64.8607L134.536 66.6639L131.609 71.1842L134.394 82.9421L123.827 90.0372L113.998 83.0094L108.706 84.0074L103.834 93.241L91.0776 90.7336L90.0628 80.3427L84.7541 76.2417L74.9587 79.4119L67.8636 68.845L73.7173 59.8043L72.7192 54.5124L62.6973 48.4659L65.0119 36.6912L76.5768 34.888L79.6966 29.3864L76.7193 18.6098L87.0933 12.4959L96.9223 19.5237L102.407 17.5445L107.28 8.31088L120.035 10.8183L122.032 21.4021L126.359 25.3101L137.136 22.3328L144.424 31.9185L137.589 40.7664L138.394 47.0394Z",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10"}),(0,e.createElement)("path",{d:"M103.628 60.5884C109.047 61.6537 114.304 58.1241 115.369 52.705C116.434 47.2858 112.905 42.0292 107.486 40.964C102.066 39.8987 96.8098 43.4282 95.7445 48.8474C94.6793 54.2665 98.2088 59.5232 103.628 60.5884Z",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10"}),(0,e.createElement)("path",{d:"M101.718 70.3011C112.502 72.421 122.963 65.3972 125.083 54.6131C127.203 43.829 120.179 33.3683 109.395 31.2485C98.6109 29.1286 88.1502 36.1524 86.0303 46.9365C83.9105 57.7206 90.9342 68.1813 101.718 70.3011Z",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10"})),(0,e.createElement)("h1",null,(0,l.__)("Saving your settings …","amp")))}const $c=[{slug:"welcome",title:(0,l.__)("Welcome","amp"),PageComponent:function(){return(0,e.createElement)("div",{className:"welcome"},(0,e.createElement)("div",{className:"welcome__header"},(0,e.createElement)("div",{className:"welcome__illustration"},(0,e.createElement)("svg",{width:"201",height:"152",viewBox:"0 0 201 152",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,e.createElement)("g",{clipPath:"url(#clip-welcome)"},(0,e.createElement)("path",{d:"M62.7531 150.5C62.7531 150.5 97.4531 116.5 172.053 132.9",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M85.4531 137C85.4531 137 41.5531 112.6 1.95306 127.7",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M133.353 138.103C131.953 137.103 132.053 135.703 131.553 134.403C130.853 132.703 130.553 130.903 130.253 129.203C130.253 128.903 130.153 128.503 130.253 128.203C130.453 127.503 131.553 127.703 131.753 127.203C131.853 126.703 130.753 125.603 130.453 125.103C129.553 123.603 129.253 121.903 129.453 120.203C129.553 119.503 129.653 118.903 130.053 118.303C130.353 117.803 130.853 117.403 131.453 117.203C132.053 117.003 132.853 117.203 133.153 116.603C133.253 116.403 133.253 116.203 133.253 116.003C133.053 113.703 132.053 110.603 134.953 109.103C136.153 108.503 137.753 108.503 139.153 108.803C141.553 109.403 143.753 110.803 144.853 112.703C146.453 115.503 145.453 118.803 143.453 121.203C142.953 121.803 142.953 122.703 143.753 123.203C144.353 123.603 145.053 123.603 145.453 124.103C145.853 124.603 145.853 125.403 145.853 125.903C145.753 126.903 145.753 127.903 145.553 128.903C145.353 130.003 145.053 131.103 144.553 132.103C144.053 133.103 143.353 134.003 142.653 134.903C141.853 135.703 141.253 136.703 140.353 137.403C139.453 138.203 138.353 138.803 137.053 138.903C135.753 139.203 134.353 138.803 133.353 138.103Z",fill:"white",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M141.553 117.203C141.553 117.203 138.153 120.503 137.153 120.803",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M140.053 123.402C140.053 123.402 137.653 125.902 135.653 126.702",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M141.353 128.801C141.353 128.801 136.953 131.101 134.453 131.601",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M136.153 138.903C136.153 138.903 137.353 132.503 137.853 131.103C138.153 129.803 138.153 127.003 137.153 124.503C136.853 123.003 136.753 117.803 137.453 114.603C138.053 111.203 138.153 109.503 138.153 108.703",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M145.153 141.5C136.153 137 127.953 139.7 128.253 140.4",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M16.7531 123.503C15.0531 122.903 14.0531 120.703 14.8531 119.003C15.5531 117.303 17.8531 116.503 19.4531 117.403C19.2531 116.203 20.0531 115.003 21.1531 114.603C22.2531 114.203 23.6531 114.603 24.3531 115.503C25.0531 113.503 27.2531 112.203 29.4531 112.403C31.0531 112.603 32.4531 113.603 33.1531 115.103C34.0531 114.203 35.7531 114.203 36.6531 115.203C37.5531 116.103 37.4531 117.803 36.4531 118.703C37.6531 118.403 38.9531 118.903 39.5531 119.903C40.1531 120.903 40.2531 122.303 39.5531 123.303",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M19.0531 134.6C20.3531 134.3 21.7531 134.1 22.9531 133.5C23.9531 133 24.8531 131.9 23.7531 131C23.0531 130.4 21.2531 130.5 20.3531 130.5C18.7531 130.4 17.1531 130.3 15.6531 131C14.6531 131.5 11.2531 133.9 11.6531 135.2C12.2531 136.7 17.8531 134.8 19.0531 134.6Z",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M36.2531 129.6C35.5531 129.4 34.7531 129.2 34.0531 129.3C31.5531 129.4 29.5531 131.4 32.0531 133.1C33.6531 134.2 35.9531 134.3 37.7531 134.5C38.8531 134.7 40.2531 134.6 40.7531 133.6C41.0531 132.9 40.7531 132 40.2531 131.5C39.7531 130.9 38.9531 130.6 38.2531 130.4C37.6531 130 36.9531 129.8 36.2531 129.6Z",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M195.353 76.5004C196.253 76.3004 197.153 76.0004 197.853 75.2004C198.953 74.1004 199.753 72.5004 199.053 70.9004C198.553 69.6004 196.853 67.5004 193.053 67.8004C192.253 67.9004 191.153 64.4004 190.653 63.8004C189.353 62.2004 187.553 61.3004 185.553 60.9004C184.553 60.7004 183.453 60.7004 182.553 61.1004C182.153 61.3004 180.353 62.6004 180.653 63.2004C180.653 63.2004 176.253 55.7004 170.053 62.1004C168.553 63.9004 168.053 65.3004 168.053 65.3004C168.053 65.3004 162.353 64.0004 161.153 68.6004C160.653 71.0004 159.653 75.8004 167.053 76.2004C172.253 76.2004 177.453 76.3004 182.653 76.4004C186.253 76.5004 189.853 77.0004 193.553 76.6004C194.153 76.7004 194.753 76.6004 195.353 76.5004Z",fill:"white",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M150.553 101.3H169.653C170.853 99.7001 170.453 97.1001 168.953 95.8001C167.453 94.5001 164.953 94.4001 163.553 95.8001C163.653 93.7001 162.253 91.7001 160.253 91.1001C158.253 90.5001 155.953 91.4001 154.853 93.1001C152.353 91.4001 148.453 92.4001 147.153 95.2001C145.753 97.9001 147.553 100.5 150.553 101.3Z",fill:"white",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M92.0531 12.4023L100.753 20.9023L111.953 16.4023L116.753 27.5023L128.853 27.7023L129.053 39.8023L140.153 44.5023L135.653 55.8023L144.053 64.5023L135.653 73.1023L140.153 84.4023L129.053 89.2023L128.853 101.302L116.753 101.402L111.953 112.502L100.753 108.102L92.0531 116.502L83.3531 108.102L72.1531 112.502L67.3531 101.402L55.2531 101.302L55.0531 89.2023L43.9531 84.4023L48.4531 73.1023L39.9531 64.5023L48.4531 55.8023L43.9531 44.5023L55.0531 39.8023L55.2531 27.7023L67.3531 27.5023L72.1531 16.4023L83.3531 20.9023L92.0531 12.4023Z",fill:"white",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M91.7531 26.0017C70.2531 26.1017 52.9531 43.5017 53.1531 64.8017C53.2531 86.1017 70.8531 103.202 92.2531 103.002C113.753 102.902 131.053 85.5017 130.853 64.2017C130.753 42.9017 113.253 25.8017 91.7531 26.0017Z",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M105.353 60.9016L89.0531 87.8016H86.0531L88.9531 70.3016H79.9531H79.8531C79.0531 70.3016 78.3531 69.6016 78.3531 68.8016C78.3531 68.5016 78.6531 67.9016 78.6531 67.9016L94.9531 41.1016H97.9531L94.9531 58.6016H104.053H104.153C104.953 58.6016 105.653 59.3016 105.653 60.1016C105.653 60.4016 105.553 60.7016 105.353 60.9016Z",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M152.853 1.60156L154.953 7.50156L160.853 9.60156L154.953 11.7016L152.853 17.6016L150.753 11.7016L144.853 9.60156L150.753 7.50156L152.853 1.60156Z",fill:"white",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M14.8531 50.6016L16.9531 56.5016L22.8531 58.6016L16.9531 60.7016L14.8531 66.6016L12.7531 60.7016L6.85309 58.6016L12.7531 56.5016L14.8531 50.6016Z",fill:"white",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,e.createElement)("path",{d:"M170.853 21.6016L173.253 28.2016L179.853 30.6016L173.253 33.0016L170.853 39.6016L168.453 33.0016L161.853 30.6016L168.453 28.2016L170.853 21.6016Z",fill:"white",stroke:"#2459E7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"})),(0,e.createElement)("defs",null,(0,e.createElement)("clipPath",{id:"clip-welcome"},(0,e.createElement)("rect",{width:"199.4",height:"150.9",fill:"white",transform:"translate(0.953064 0.601562)"}))))),(0,e.createElement)("h1",null,(0,l.__)("AMP for WordPress","amp"))),(0,e.createElement)("div",{className:"welcome__body"},(0,e.createElement)("div",{className:"welcome__section"},(0,e.createElement)("div",{className:"welcome__section-icon"},(0,e.createElement)("svg",{width:"41",height:"41",viewBox:"0 0 41 41",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,e.createElement)("g",{clipPath:"url(#clip-welcome-2"},(0,e.createElement)("path",{d:"M8.37808 39.1765C7.85308 39.1765 7.41558 38.739 7.41558 38.214C7.41558 38.1265 7.41558 38.1265 7.41558 38.039L9.60308 25.439L0.415576 16.514C0.0655762 16.164 0.0655762 15.5515 0.415576 15.114C0.590576 14.939 0.765576 14.8515 0.940576 14.8515L13.6281 13.014L19.3156 1.55146C19.5781 1.11396 20.1906 0.93896 20.7156 1.20146C20.8031 1.28896 20.8906 1.37646 20.9781 1.55146L26.6656 13.014L39.3531 14.8515C39.8781 14.939 40.2281 15.3765 40.1406 15.9015C40.1406 16.0765 40.0531 16.339 39.8781 16.4265L30.6906 25.439L32.8781 38.039C32.9656 38.564 32.6156 39.089 32.0906 39.1765C31.9156 39.1765 31.6531 39.1765 31.4781 39.089L20.1031 33.139L8.72808 39.089C8.64058 39.1765 8.46558 39.1765 8.37808 39.1765ZM3.12808 16.5146L11.2656 24.4771C11.5281 24.7396 11.6156 25.0021 11.5281 25.3521L9.60308 36.5521L19.6656 31.3021C19.9281 31.1271 20.2781 31.1271 20.5406 31.3021L30.6031 36.5521L28.7656 25.2646C28.6781 24.9146 28.8531 24.6521 29.0281 24.3896L37.1656 16.4271L25.8781 14.7646C25.5281 14.6771 25.2656 14.5021 25.1781 14.2396L20.1031 4.08958L15.0281 14.3271C14.8531 14.5896 14.5906 14.7646 14.3281 14.8521L3.12808 16.5146Z",fill:"#005AF0"}),(0,e.createElement)("path",{d:"M18.8774 29.0242H17.9149L18.8774 23.3367H15.9899C15.7274 23.3367 15.5524 23.1617 15.5524 22.8992C15.5524 22.8117 15.6399 22.7242 15.6399 22.6367L20.8024 13.8867H21.7649L20.8024 19.5742H23.7774C24.0399 19.5742 24.2149 19.7492 24.2149 20.0117C24.2149 20.0992 24.2149 20.1867 24.1274 20.2742L18.8774 29.0242Z",fill:"#005AF0"})),(0,e.createElement)("defs",null,(0,e.createElement)("clipPath",{id:"clip-welcome-2"},(0,e.createElement)("rect",{width:"40",height:"40",fill:"white",transform:"translate(0.153076 0.125)"}))))),(0,e.createElement)("div",{className:"welcome__section-description"},(0,e.createElement)("h4",null,(0,l.__)("AMP and WordPress","amp")),(0,e.createElement)("p",null,(0,l.__)("AMP provides support for building beautiful, fast, engaging, secure, and accessible sites, and the AMP plugin makes it easy to take advantage of AMP on WordPress.","amp")," ",(0,e.createElement)("a",{href:"https://amp-wp.org/",target:"_blank",rel:"noreferrer noopener"},(0,l.__)("Learn more.","amp"))))),(0,e.createElement)("div",{className:"welcome__section"},(0,e.createElement)("div",{className:"welcome__section-icon"},(0,e.createElement)("svg",{width:"41",height:"40",viewBox:"0 0 41 40",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,e.createElement)("g",{clipPath:"url(#clip-welcome-3)"},(0,e.createElement)("path",{d:"M16.045 18.1819H3.35247C1.83747 18.1806 0.609343 16.9525 0.608093 15.4375V2.74437C0.609343 1.22937 1.83747 0.00125 3.35247 0H16.0456C17.5606 0.00125 18.7887 1.22937 18.79 2.74437V15.4375C18.7887 16.9525 17.5606 18.1806 16.0456 18.1819H16.045ZM3.35247 1.81813C2.84122 1.81875 2.42684 2.23312 2.42622 2.74437V15.4369C2.42684 15.9481 2.84122 16.3625 3.35247 16.3631H16.045C16.5562 16.3625 16.9706 15.9481 16.9712 15.4369V2.74437C16.9706 2.23312 16.5562 1.81875 16.045 1.81813H3.35247Z",fill:"#005AF0"}),(0,e.createElement)("path",{d:"M1.51684 16.3639C1.01497 16.3639 0.608093 15.957 0.608093 15.4552C0.608093 15.2039 0.709968 14.977 0.874343 14.8127L6.97184 8.71516L9.69934 11.4427L15.1537 5.98828L18.5237 9.35828C18.6818 9.52141 18.7787 9.74453 18.7787 9.99016C18.7787 10.492 18.3718 10.8989 17.87 10.8989C17.6243 10.8989 17.4018 10.8014 17.2381 10.6433L15.1537 8.55891L9.69934 14.0133L6.97184 11.2858L2.15997 16.0977C1.99559 16.262 1.76809 16.3639 1.51747 16.3639H1.51684Z",fill:"#005AF0"}),(0,e.createElement)("path",{d:"M8.78933 5.00047C8.78933 5.75359 8.1787 6.36422 7.42558 6.36422C6.67245 6.36422 6.06183 5.75359 6.06183 5.00047C6.06183 4.24734 6.67245 3.63672 7.42558 3.63672C8.1787 3.63672 8.78933 4.24734 8.78933 5.00047Z",fill:"#005AF0"}),(0,e.createElement)("path",{d:"M34.2437 6.36438H26.9712C26.4693 6.36438 26.0618 5.9575 26.0618 5.45562C26.0618 4.95375 26.4687 4.54688 26.9712 4.54688H34.2437C34.7456 4.54688 35.1531 4.95375 35.1531 5.45562C35.1531 5.9575 34.7462 6.36438 34.2437 6.36438Z",fill:"#005AF0"}),(0,e.createElement)("path",{d:"M34.2438 10.0011H26.9713C26.4694 10.0011 26.0619 9.59422 26.0619 9.09234C26.0619 8.59047 26.4688 8.18359 26.9713 8.18359H34.2438C34.7456 8.18359 35.1531 8.59047 35.1531 9.09234C35.1531 9.59422 34.7463 10.0011 34.2438 10.0011Z",fill:"#005AF0"}),(0,e.createElement)("path",{d:"M34.2438 13.6378H26.9713C26.4694 13.6378 26.0619 13.2309 26.0619 12.7291C26.0619 12.2272 26.4688 11.8203 26.9713 11.8203H34.2438C34.7456 11.8203 35.1531 12.2272 35.1531 12.7291C35.1531 13.2309 34.7463 13.6378 34.2438 13.6378Z",fill:"#005AF0"}),(0,e.createElement)("path",{d:"M36.9543 18.1819H24.2618C22.7468 18.1806 21.5187 16.9525 21.5175 15.4375V2.74437C21.5187 1.22937 22.7468 0.00125 24.2618 0H36.955C38.47 0.00125 39.6981 1.22937 39.6993 2.74437V15.4375C39.6981 16.9525 38.47 18.1806 36.955 18.1819H36.9543ZM24.2612 1.81813C23.75 1.81875 23.3356 2.23312 23.335 2.74437V15.4369C23.3356 15.9481 23.75 16.3625 24.2612 16.3631H36.9537C37.465 16.3625 37.8793 15.9481 37.88 15.4369V2.74437C37.8793 2.23312 37.465 1.81875 36.9537 1.81813H24.2612Z",fill:"#005AF0"}),(0,e.createElement)("path",{d:"M36.9543 40H3.35247C1.83747 39.9988 0.609343 38.7706 0.608093 37.2556V22.7444C0.609343 21.2294 1.83747 20.0013 3.35247 20H36.9543C38.4693 20.0013 39.6975 21.2294 39.6987 22.7444V37.2556C39.6975 38.7706 38.4693 39.9988 36.9543 40ZM3.35247 21.8181C2.84122 21.8188 2.42684 22.2331 2.42622 22.7444V37.2556C2.42684 37.7669 2.84122 38.1812 3.35247 38.1819H36.9543C37.4656 38.1812 37.88 37.7669 37.8806 37.2556V22.7444C37.88 22.2331 37.4656 21.8188 36.9543 21.8181H3.35247Z",fill:"#005AF0"}),(0,e.createElement)("path",{d:"M17.8806 34.5456C17.3787 34.5456 16.9718 34.1388 16.9718 33.6362V26.4244C16.9718 25.9225 17.3787 25.5156 17.8806 25.5156C18.0668 25.5156 18.2406 25.5719 18.3849 25.6681L18.3818 25.6663L23.8362 29.2719C24.0831 29.4369 24.2437 29.715 24.2437 30.03C24.2437 30.345 24.0831 30.6231 23.8393 30.7862L23.8362 30.7881L18.3818 34.3944C18.2406 34.4887 18.0674 34.545 17.8812 34.545L17.8806 34.5456ZM18.7893 28.1156V31.9456L21.6868 30.03L18.7893 28.1156Z",fill:"#005AF0"})),(0,e.createElement)("defs",null,(0,e.createElement)("clipPath",{id:"clip-welcome-3"},(0,e.createElement)("rect",{width:"40",height:"40",fill:"white",transform:"translate(0.153076)"}))))),(0,e.createElement)("div",{className:"welcome__section-description"},(0,e.createElement)("h4",null,(0,l.__)("Configure your site with AMP","amp")),(0,e.createElement)("p",null,(0,l.__)("Regardless of technical expertise, the onboarding flow guides you through configuring the plugin in a few easy steps.","amp")))),(0,e.createElement)("div",{className:"welcome__section"},(0,e.createElement)("div",{className:"welcome__section-icon"},(0,e.createElement)(sc,null)),(0,e.createElement)("div",{className:"welcome__section-description"},(0,e.createElement)("h4",null,(0,l.__)("Site review","amp")),(0,e.createElement)("p",null,(0,l.__)("At the end of onboarding the AMP plugin is fully configured, and your site is ready to start serving great experiences to your users.","amp"))))))},showTitle:!1},{slug:"technical-background",title:(0,l.__)("Technical Background","amp"),PageComponent:function(){const{setCanGoForward:t}=(0,e.useContext)(Zl),{developerToolsOption:n,fetchingUser:r,setDeveloperToolsOption:o}=(0,e.useContext)(Bl),a=(0,e.useCallback)((e=>{o(e)}),[o]);(0,e.useEffect)((()=>{"boolean"==typeof n&&t(!0)}),[n,t]);const i="technical-background-disable",s="technical-background-enable";return r?(0,e.createElement)(Zs,null):(0,e.createElement)("div",{className:"technical-background"},(0,e.createElement)("div",{className:"technical-background__header"},(0,e.createElement)("h1",null,(0,l.__)("Technical Background","amp")),(0,e.createElement)("p",null,(0,l.__)("To recommend the best AMP experience we’d like to know if you’re a more technical user, or less technical.","amp"))),(0,e.createElement)("form",null,(0,e.createElement)(Yl,{className:"technical-background-option-container",selected:!0===n},(0,e.createElement)("label",{htmlFor:s,className:"technical-background-option"},(0,e.createElement)("div",{className:"technical-background-option__input-container"},(0,e.createElement)("input",{type:"radio",id:s,checked:!0===n,onChange:()=>{a(!0)}})),(0,e.createElement)(Ql,null),(0,e.createElement)("div",{className:"technical-background-option__description"},(0,e.createElement)("h2",null,(0,l.__)("Developer or technically savvy","amp")),(0,e.createElement)("p",null,(0,l.__)("I can do WordPress development by modifying themes and plugins. I am familiar with PHP, JavaScript, HTML, and CSS.","amp"))))),(0,e.createElement)(Yl,{className:"technical-background-option-container",selected:!1===n},(0,e.createElement)("label",{htmlFor:i,className:"technical-background-option"},(0,e.createElement)("div",{className:"technical-background-option__input-container"},(0,e.createElement)("input",{type:"radio",id:i,checked:!1===n,onChange:()=>{a(!1)}})),(0,e.createElement)(Gl,null),(0,e.createElement)("div",{className:"technical-background-option__description"},(0,e.createElement)("h2",null,(0,l.__)("Non-technical or wanting a simpler setup","amp")),(0,e.createElement)("p",null,(0,l.__)("I am not responsible for configuring and fixing issues on my site. I am a site owner and/or content creator who wants to take advantage of AMP performance.","amp")))))))},showTitle:!1},{slug:"site-scan",title:(0,l.__)("Site Scan","amp"),PageComponent:function(){const{setCanGoForward:t}=(0,e.useContext)(Zl),{cancelSiteScan:r,isCancelled:o,isCompleted:a,isFailed:i,isFetchingScannableUrls:s,isReady:u,pluginsWithAmpIncompatibility:c,scannableUrls:d,scannedUrlsMaxIndex:f,startSiteScan:p,themesWithAmpIncompatibility:m}=(0,e.useContext)(gl),{developerToolsOption:h}=(0,e.useContext)(Bl),g=(0,e.useMemo)((()=>!0===h),[h]);(0,e.useEffect)((()=>()=>r()),[r]),(0,e.useEffect)((()=>{(u||o)&&p()}),[o,u,p]),(0,e.useEffect)((()=>{(a||i)&&t(!0)}),[a,i,t]);const v=function(t,{delay:n=500}={}){const[r,o]=(0,e.useState)(t),a=(0,e.useRef)(!1);return(0,e.useEffect)((()=>()=>{a.current=!0}),[]),(0,e.useEffect)((()=>{let e=()=>{};return t&&!r?e=setTimeout((()=>{a.current||o(!0)}),n):!t&&r&&o(!1),()=>{clearTimeout(e)}}),[t,r,n]),r}(a);return s||u?(0,e.createElement)(Su,{title:(0,l.__)("Please wait a minute…","amp"),headerContent:(0,e.createElement)(Zs,null)}):i?(0,e.createElement)(Su,{title:(0,l.__)("Scan failed","amp"),headerContent:(0,e.createElement)(e.Fragment,null,(0,e.createElement)("p",null,(0,l.__)("Site scan was unsuccessful.","amp")),(0,e.createElement)("p",null,(0,l.__)("You can trigger the site scan again on the AMP Settings page after completing the Wizard.","amp")))}):v?(0,e.createElement)(Su,{title:(0,l.__)("Scan complete","amp"),headerContent:(0,e.createElement)("p",null,m.length>0||c.length>0?(0,l.__)("Site scan found issues on your site. Proceed to the next step to follow recommendations for choosing a template mode.","amp"):(0,l.__)("Site scan found no issues on your site. Proceed to the next step to follow recommendations for choosing a template mode.","amp"))},m.length>0&&(0,e.createElement)(bu,{className:"site-scan__section",slugs:m.map((({slug:e})=>e)),callToAction:g?(0,e.createElement)(Gs,{href:n.VALIDATED_URLS_LINK},(0,l.__)("Review Validated URLs","amp")):null}),c.length>0&&(0,e.createElement)(xu,{className:"site-scan__section",slugs:c.map((({slug:e})=>e)),callToAction:g?(0,e.createElement)(Gs,{href:n.VALIDATED_URLS_LINK},(0,l.__)("Review Validated URLs","amp")):null})):(0,e.createElement)(Su,{title:(0,l.__)("Please wait a minute…","amp"),headerContent:(0,e.createElement)(e.Fragment,null,(0,e.createElement)("p",null,(0,l.__)("Site scan is checking if there are AMP compatibility issues with your active theme and plugins. We’ll then recommend how to use the AMP plugin.","amp")),(0,e.createElement)(eu,{value:a?100:f/d.length*100}),(0,e.createElement)("p",{className:"site-scan__status"},a?(0,l.__)("Scan complete","amp"):(0,l.sprintf)(
// translators: 1: currently scanned URL index; 2: scannable URLs count; 3: scanned page type.
(0,l.__)("Scanning %1$d/%2$d URLs: Checking %3$s…","amp"),f+1,d.length,d[f]?.label)))})}},{slug:"template-modes",title:(0,l.__)("Template Modes","amp"),PageComponent:function(){const{setCanGoForward:t}=(0,e.useContext)(Zl),{editedOptions:{theme_support:n},originalOptions:r}=(0,e.useContext)(h),{technicalQuestionChangedAtLeastOnce:o}=(0,e.useContext)(Pu),a=function(){const{hasSiteScanResults:t,isBusy:n,isFetchingScannableUrls:r,pluginsWithAmpIncompatibility:o,stale:a,themesWithAmpIncompatibility:i}=(0,e.useContext)(gl),{developerToolsOption:s,fetchingUser:u,savingDeveloperToolsOption:c}=(0,e.useContext)(Bl),{fetchingOptions:d,originalOptions:f,savedOptions:p,savingOptions:m}=(0,e.useContext)(h),[g,E]=(0,e.useState)(null);return(0,e.useLayoutEffect)((()=>{if(n||r||d||m||u||c)return;const h={...f,...p},g=Object.entries(h?.suppressed_plugins||{}).some((([e,t])=>t&&Boolean(h.suppressible_plugins?.[e])));E(function({hasFreshSiteScanResults:t,hasPluginIssues:n,hasSuppressedPlugins:r,hasThemeIssues:o,userIsTechnical:a}){const i=(0,l.__)("If automatic mobile redirection is enabled, the AMP version of the content will be served on mobile devices. If AMP-to-AMP linking is enabled, once users are on an AMP page, they will continue navigating your AMP content.","amp"),s=F((0,l.__)("In Reader mode <b>your site will have a non-AMP and an AMP version</b>, and <b>each version will use its own theme</b>.","amp")+" "+i,{b:(0,e.createElement)("b",null)}),u=F((0,l.__)("In Transitional mode <b>your site will have a non-AMP and an AMP version</b>, and <b>both will use the same theme</b>.","amp")+" "+i,{b:(0,e.createElement)("b",null)}),c=F((0,l.__)("In Standard mode <b>your site will be completely AMP</b> (except in cases where you opt-out of AMP for specific parts of your site), and <b>it will use a single theme</b>.","amp"),{b:(0,e.createElement)("b",null)}),d=(0,l.__)("To address plugin compatibility issue(s), you may need to use Plugin Suppression to disable incompatible plugins on AMP pages or else select an alternative AMP-compatible plugin.","amp"),f=(0,l.__)("Recommended if you want to enable AMP on your site despite the detected compatibility issue(s).","amp"),p=(0,l.__)("Recommended so you can progressively enable AMP on your site while still making the non-AMP version available to visitors for functionality that is not AMP-compatible. Choose this mode if compatibility issues can be fixed or if your theme degrades gracefully when JavaScript is disabled.","amp"),m=(0,l.__)("Not recommended as your site has no AMP compatibility issues detected.","amp"),h=(0,l.__)("Not recommended until you can fix the detected compatibility issue(s).","amp"),g=(0,l.__)("Recommended since there were no theme compatibility issues detected.","amp"),E=(0,l.__)("Not recommended due to compatibility issue(s) which may break key site functionality, without developer assistance.","amp"),k=(0,l.__)("Not recommended because you have suppressed plugins.","amp");switch(!0){case!t:return{[v]:{recommendationLevel:Lu,details:[s]},[b]:{recommendationLevel:Lu,details:[u]},[y]:{recommendationLevel:Lu,details:[c]}};case o&&n&&a:return{[v]:{recommendationLevel:_u,details:[s,f,d]},[b]:{recommendationLevel:Lu,details:[u,p,d]},[y]:{recommendationLevel:Mu,details:[c,h,d]}};case o&&n&&!a:return{[v]:{recommendationLevel:_u,details:[s,f,d]},[b]:{recommendationLevel:Mu,details:[u,E,d]},[y]:{recommendationLevel:Mu,details:[c,E,d]}};case o&&!n&&a:return{[v]:{recommendationLevel:_u,details:[s,f]},[b]:{recommendationLevel:_u,details:[u,p]},[y]:{recommendationLevel:Lu,details:[c,h]}};case o&&!n&&!a:return{[v]:{recommendationLevel:_u,details:[s,f]},[b]:{recommendationLevel:Mu,details:[u,E]},[y]:{recommendationLevel:Mu,details:[c,E]}};case!o&&n&&a:return{[v]:{recommendationLevel:Mu,details:[s,d]},[b]:{recommendationLevel:_u,details:[u,g,d]},[y]:{recommendationLevel:Lu,details:[c,h,d]}};case!o&&n&&!a:return{[v]:{recommendationLevel:_u,details:[s,d]},[b]:{recommendationLevel:_u,details:[u,g,d]},[y]:{recommendationLevel:Mu,details:[c,E,d]}};case!o&&!n&&a:return{[v]:{recommendationLevel:Mu,details:[s,m]},[b]:{recommendationLevel:r?_u:Mu,details:[u,m]},[y]:{recommendationLevel:r?Mu:_u,details:[c,(0,l.__)("Recommended as you have an AMP-compatible theme and no issues were detected with any of the plugins on your site.","amp"),r?k:null]}};case!o&&!n&&!a:return{[v]:{recommendationLevel:Mu,details:[s,m]},[b]:{recommendationLevel:r?_u:Lu,details:[u,(0,l.__)("Recommended if you can’t commit to choosing plugins that are AMP compatible when extending your site. This mode will make it easy to keep AMP content even if non-AMP-compatible plugins are used later on.","amp")]},[y]:{recommendationLevel:Lu,details:[c,(0,l.__)("Recommended if you can commit to always choosing plugins that are AMP compatible when extending your site.","amp"),r?k:null]}};default:throw new Error((0,l.__)("A template mode recommendation case was not accounted for.","amp"))}}({hasPluginIssues:o?.length>0,hasFreshSiteScanResults:t&&!a,hasSuppressedPlugins:g,hasThemeIssues:i?.length>0,userIsTechnical:!0===s}))}),[s,d,u,t,n,r,f,o?.length,p,c,m,a,i?.length]),g}();return(0,e.useEffect)((()=>{void 0!==n&&t(!0)}),[t,n]),(0,e.createElement)("div",{className:"template-modes"},(0,e.createElement)("div",{className:"template-modes__header"},(0,e.createElement)("h1",null,(0,l.__)("Template Modes","amp")),(0,e.createElement)("p",null,F((0,l.__)("Based on site scan results the AMP plugin provides the following choices. Learn more about the <GettingStartedLink>AMP experience with different modes</GettingStartedLink> and availability of <EcosystemLink>AMP components in the ecosystem</EcosystemLink>.","amp"),{GettingStartedLink:(0,e.createElement)("a",{href:"https://amp-wp.org/documentation/getting-started/template-modes/",target:"_blank",rel:"noreferrer noopener"}),EcosystemLink:(0,e.createElement)("a",{href:"https://amp-wp.org/ecosystem/",target:"_blank",rel:"noreferrer noopener"})}))),(0,e.createElement)(ec,{currentMode:n,firstTimeInWizard:!1===r.plugin_configured,savedCurrentMode:r.theme_support,technicalQuestionChanged:o,templateModeRecommendation:a}))},showTitle:!1},{slug:"theme-selection",title:(0,l.__)("Theme Selection","amp"),PageComponent:function(){const{canGoForward:t,setCanGoForward:n}=(0,e.useContext)(Zl),{editedOptions:r}=(0,e.useContext)(h),{fetchingThemes:o,themes:a}=(0,e.useContext)(k),{reader_theme:i,theme_support:l}=r;return(0,e.useEffect)((()=>{a&&i&&!1===t&&a.map((({slug:e})=>e)).includes(i)&&n(!0)}),[t,n,i,a,l]),o?(0,e.createElement)(Zs,null):(0,e.createElement)("div",{className:"choose-reader-theme"},(0,e.createElement)(ic,null))}},{slug:"done",title:(0,l.__)("Done","amp"),PageComponent:function(){const{didSaveOptions:t,editedOptions:{theme_support:r,reader_theme:o},hasOptionsChanges:a,readerModeWasOverridden:i,saveOptions:s,savingOptions:u}=(0,e.useContext)(h),{didSaveDeveloperToolsOption:c,saveDeveloperToolsOption:d,savingDeveloperToolsOption:f}=(0,e.useContext)(Bl),{canGoForward:p,setCanGoForward:m}=(0,e.useContext)(Zl),{downloadedTheme:g,downloadingTheme:E,downloadingThemeError:w}=(0,e.useContext)(k),{fetchScannableUrls:C,forceStandardMode:x,isFetchingScannableUrls:S}=(0,e.useContext)(gl),{hasPreview:_,isPreviewingAMP:L,previewLinks:M,previewUrl:P,setActivePreviewLink:T,toggleIsPreviewingAMP:N}=function(){const{scannableUrls:t}=(0,e.useContext)(gl),{editedOptions:{theme_support:n}}=(0,e.useContext)(h),[r,o]=(0,e.useState)(n!==y),[a,i]=(0,e.useState)(t.length>0?t[0].type:null);(0,e.useEffect)((()=>{i(t.length>0?t[0].type:null)}),[t]);const l=(0,e.useMemo)((()=>t.map((({url:e,amp_url:t,type:n,label:o})=>({type:n,label:o,url:r?t:e,isActive:n===a})))),[r,a,t]),s=(0,e.useMemo)((()=>l.find((e=>e.isActive))?.url),[l]);return{hasPreview:t.length>0,isPreviewingAMP:r,previewLinks:l,previewUrl:s,setActivePreviewLink:e=>i(e.type),toggleIsPreviewingAMP:()=>o((e=>!e))}}();return(0,e.useEffect)((()=>{p||m(!0)}),[m,p]),(0,e.useEffect)((()=>{t||u||s()}),[t,s,u]),(0,e.useEffect)((()=>{t&&x&&C()}),[t,C,x]),(0,e.useEffect)((()=>{c||f||d()}),[c,f,d]),u||f||E||a||S?(0,e.createElement)(Wc,null):(0,e.createElement)("div",{className:"done"},(0,e.createElement)("h1",{className:"done__heading"},(0,l.__)("Done","amp")),(0,e.createElement)("div",{className:"done__content done__content--primary"},(0,e.createElement)("h2",{className:"done__icon-title"},(0,e.createElement)(sc,null),(0,l.__)("Review","amp")),v===r&&g===o&&(0,e.createElement)(mu,{size:pu,type:du},(0,l.__)("Your Reader theme was automatically installed","amp")),i&&(0,e.createElement)(mu,{type:uu,size:pu},(0,l.__)("Because you selected a Reader theme that is the same as your site's active theme, your site has automatically been switched to Transitional template mode.","amp")),(0,e.createElement)("p",null,(0,l.__)("Your site is ready to bring great experiences to your users!","amp")),y===r&&(0,e.createElement)(e.Fragment,null,(0,e.createElement)("p",null,(0,l.__)("In Standard mode there is a single AMP version of your site.","amp")),_&&(0,e.createElement)("p",null,(0,l.__)("Browse your site here to ensure it meets your expectations.","amp"))),b===r&&(0,e.createElement)(e.Fragment,null,(0,e.createElement)("p",null,(0,l.__)("In Transitional mode AMP and non-AMP versions of your site are served using your currently active theme.","amp")),_&&(0,e.createElement)("p",null,(0,l.__)("Browse your site here to ensure it meets your expectations, and toggle the AMP setting to compare both versions.","amp"))),v===r&&(0,e.createElement)(e.Fragment,null,(0,e.createElement)("p",null,(0,l.__)("In Reader mode AMP is served using your selected Reader theme, and pages for your non-AMP site are served using your primary theme.","amp")),_&&(0,e.createElement)("p",null,(0,l.__)("Browse your site here to ensure it meets your expectations, and toggle the AMP setting to compare both versions.","amp")),(0,e.createElement)("p",null,(0,l.__)("As a last step, use the Customizer to tailor the Reader theme as needed.","amp"))),_&&(0,e.createElement)("div",{className:"done__links-container"},(0,e.createElement)(Bc,{links:M,onClick:(e,t)=>{e.preventDefault(),T(t)}}))),(0,e.createElement)("div",{className:"done__preview-container"},v===r&&w&&(0,e.createElement)(mu,{size:pu,type:uu},(0,l.__)("There was an error downloading your Reader theme. As a result, your site is currently using the legacy reader theme. Please install your chosen theme manually.","amp")),_&&(0,e.createElement)(e.Fragment,null,y!==r&&(0,e.createElement)(Hc,{text:(0,l.__)("AMP","amp"),checked:L,onChange:N,compact:!0}),(0,e.createElement)(Dc,{url:P}))),(0,e.createElement)("div",{className:"done__content done__content--secondary"},(0,e.createElement)("h2",{className:"done__icon-title"},(0,e.createElement)(lc,null),(0,l.__)("Need help?","amp")),(0,e.createElement)("ul",{className:"done__list"},(0,e.createElement)("li",null,F((0,l.__)("Reach out in the <a>support forums</a>","amp"),{a:(0,e.createElement)("a",{href:"https://wordpress.org/support/plugin/amp/#new-topic-0",target:"_blank",rel:"noreferrer noopener"})})),(0,e.createElement)("li",null,F((0,l.__)("Try a different template mode <a>in settings</a>","amp"),{a:(0,e.createElement)("a",{href:n.SETTINGS_LINK,target:"_blank",rel:"noreferrer noopener"})})),(0,e.createElement)("li",null,F((0,l.__)("<a>Learn more</a> how the AMP plugin works","amp"),{a:(0,e.createElement)("a",{href:"https://amp-wp.org/documentation/how-the-plugin-works/",target:"_blank",rel:"noreferrer noopener"})})))))},showTitle:!1}];function Uc(){return(0,e.createElement)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 30 30"},(0,e.createElement)("g",{fill:"none",fillRule:"evenodd"},(0,e.createElement)("path",{fill:"#FFF",d:"M0 15c0 8.284 6.716 15 15 15 8.285 0 15-6.716 15-15 0-8.284-6.715-15-15-15C6.716 0 0 6.716 0 15z"}),(0,e.createElement)("path",{fill:"#005AF0",fillRule:"nonzero",d:"M13.85 24.098h-1.14l1.128-6.823-3.49.005h-.05a.57.57 0 0 1-.568-.569c0-.135.125-.363.125-.363l6.272-10.46 1.16.005-1.156 6.834 3.508-.004h.056c.314 0 .569.254.569.568 0 .128-.05.24-.121.335L13.85 24.098zM15 0C6.716 0 0 6.716 0 15c0 8.284 6.716 15 15 15 8.285 0 15-6.716 15-15 0-8.284-6.715-15-15-15z"})))}var Vc=o(697),Zc=o.n(Vc);function qc({excludeUserContext:t=!1,appRoot:n}){const{hasOptionsChanges:r,didSaveOptions:o}=(0,e.useContext)(h),[a,i]=(0,e.useState)({hasDeveloperToolsOptionChange:!1,didSaveDeveloperToolsOption:!0}),{hasDeveloperToolsOptionChange:s,didSaveDeveloperToolsOption:u}=a;return(0,e.useEffect)((()=>{if(r&&!o||s&&!u){const e=e=>(e.returnValue=(0,l.__)("This page has unsaved changes. Are you sure you want to leave?","amp"),null);return n.ownerDocument.addEventListener("beforeunload",e),()=>{n.ownerDocument.removeEventListener("beforeunload",e)}}return()=>{}}),[n,r,o,s,u]),t?null:(0,e.createElement)(Qc,{setUserState:i})}function Qc({setUserState:t}){const{hasDeveloperToolsOptionChange:n,didSaveDeveloperToolsOption:r}=(0,e.useContext)(Bl);return(0,e.useEffect)((()=>{t({hasDeveloperToolsOptionChange:n,didSaveDeveloperToolsOption:r})}),[n,r,t]),null}function Gc(t={}){t={...t,mobileBreakpoint:E};const{mobileBreakpoint:n}=t,[r,a]=(0,e.useState)(window.innerWidth);return(0,e.useEffect)((()=>{const e=()=>{a(window.innerWidth)};return o.g.addEventListener("resize",e,{passive:!0}),()=>{o.g.removeEventListener("resize",e)}}),[]),{windowWidth:r,isMobile:r<n}}function Yc(){const t=be(Yc);return(0,e.createElement)("svg",{width:"20",height:"21",viewBox:"0 0 20 21",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,e.createElement)("mask",{id:`mask-${t}`,style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:"2",y:"5",width:"16",height:"12"},(0,e.createElement)("path",{d:"M7.32923 14.137L3.85423 10.662L2.6709 11.837L7.32923 16.4953L17.3292 6.49531L16.1542 5.32031L7.32923 14.137Z",fill:"white"})),(0,e.createElement)("g",{mask:`url(#mask-${t})`},(0,e.createElement)("rect",{y:"0.90625",width:"20",height:"20",fill:"white"})))}function Kc({activePageIndex:t,index:n}){const r=t>n,o=!r&&t===n;return r?(0,e.createElement)("span",{className:"amp-stepper__bullet amp-stepper__bullet--check"},(0,e.createElement)(Yc,null)):o?(0,e.createElement)("span",{className:"amp-stepper__bullet amp-stepper__bullet--dot"},(0,e.createElement)("span",null)):(0,e.createElement)("span",{className:"amp-stepper__bullet"},n+1)}function Xc({activePageIndex:t,pages:n}){const r=be(Xc);return(0,e.createElement)("div",{className:"amp-stepper"},(0,e.createElement)("ul",null,n.map((({title:n},o)=>(0,e.createElement)("li",{className:`amp-stepper__item ${o===t?"amp-stepper__item--active":""} ${t>o?"amp-stepper__item--done":""}`,key:`${r}-${o}`},(0,e.createElement)(Kc,{activePageIndex:t,index:o}),(0,e.createElement)("span",{className:"amp-stepper__item-title"},n))))))}function Jc({closeLink:t}){return(0,e.createElement)(cl,{isLink:!0,href:t},(0,e.createElement)("svg",{width:"25",height:"25",viewBox:"0 0 25 25",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,e.createElement)("mask",{id:"close-icon",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:"3",y:"3",width:"19",height:"19"},(0,e.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M19.895 3.71875H5.89502C4.79502 3.71875 3.89502 4.61875 3.89502 5.71875V19.7188C3.89502 20.8188 4.79502 21.7188 5.89502 21.7188H19.895C21.005 21.7188 21.895 20.8188 21.895 19.7188V15.7188H19.895V19.7188H5.89502V5.71875H19.895V9.71875H21.895V5.71875C21.895 4.61875 21.005 3.71875 19.895 3.71875ZM13.395 17.7188L14.805 16.3088L12.225 13.7188H21.895V11.7188H12.225L14.805 9.12875L13.395 7.71875L8.39502 12.7188L13.395 17.7188Z",fill:"white"})),(0,e.createElement)("g",{mask:"url(#close-icon)"},(0,e.createElement)("rect",{width:"24",height:"24",transform:"matrix(-1 0 0 1 24.895 0.71875)",fill:"#2459E7"}))),(0,l.__)("Close","amp"))}function ed({closeLink:t,finishLink:r}){const{isMobile:o}=Gc(),{activePageIndex:a,canGoForward:i,isLastPage:u,moveBack:c,moveForward:d}=(0,e.useContext)(Zl),{savingOptions:f,editedOptions:{theme_support:p},originalOptions:{preview_permalink:m,reader_theme:g}}=(0,e.useContext)(h),{savingDeveloperToolsOption:y}=(0,e.useContext)(Bl),{downloadingTheme:b}=(0,e.useContext)(k),{isBusy:E}=(0,e.useContext)(gl);let w,C;return u&&v===p?(w=(0,l.__)("Customize","amp"),C=y||f?void 0:(0,s.addQueryArgs)(n.CUSTOMIZER_LINK,"legacy"===g?{"autofocus[panel]":"amp_panel",url:m}:{url:m,[n.AMP_QUERY_VAR]:"1"})):u?(w=(0,l.__)("Finish","amp"),C=y||f?void 0:r):(w=(0,l.__)("Next","amp"),C=void 0),(0,e.createElement)("div",{className:"amp-settings-nav"},(0,e.createElement)("div",{className:"amp-settings-nav__inner"},(0,e.createElement)("div",{className:"amp-settings-nav__close"},!o&&(!u||v===p)&&(0,e.createElement)(Jc,{closeLink:t})),(0,e.createElement)("div",{className:"amp-settings-nav__prev-next"},1>a?(0,e.createElement)("span",{className:"amp-settings-nav__placeholder"}," "):(0,e.createElement)(cl,{disabled:E,className:"amp-settings-nav__prev",onClick:c},(0,e.createElement)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 64 64"},(0,e.createElement)("path",{d:"M43.16 10.18c-0.881-0.881-2.322-0.881-3.203 0s-0.881 2.322 0 3.203l16.335 16.335h-54.051c-1.281 0-2.242 1.041-2.242 2.242 0 1.281 0.961 2.322 2.242 2.322h54.051l-16.415 16.335c-0.881 0.881-0.881 2.322 0 3.203s2.322 0.881 3.203 0l20.259-20.259c0.881-0.881 0.881-2.322 0-3.203l-20.179-20.179z"})),(0,l.__)("Previous","amp")),(0,e.createElement)(cl,{disabled:!i||f||y||b,href:C,id:"next-button",isPrimary:!0,onClick:d},w,!u&&(0,e.createElement)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 64 64"},(0,e.createElement)("path",{d:"M43.16 10.18c-0.881-0.881-2.322-0.881-3.203 0s-0.881 2.322 0 3.203l16.335 16.335h-54.051c-1.281 0-2.242 1.041-2.242 2.242 0 1.281 0.961 2.322 2.242 2.322h54.051l-16.415 16.335c-0.881 0.881-0.881 2.322 0 3.203s2.322 0.881 3.203 0l20.259-20.259c0.881-0.881 0.881-2.322 0-3.203l-20.179-20.179z"}))))))}function td({children:t}){return(0,e.useEffect)((()=>{document.body.scrollTop=0,document.documentElement.scrollTop=0}),[]),t}function nd({closeLink:t,finishLink:n,appRoot:r}){const{isMobile:o}=Gc(),{activePageIndex:a,currentPage:{title:i,PageComponent:s,showTitle:u},moveBack:c,moveForward:d,pages:f}=(0,e.useContext)(Zl),{fetchScannableUrls:p}=(0,e.useContext)(gl);(0,e.useEffect)((()=>{p({forceStandardMode:!0})}),[p]);const m=(0,e.useMemo)((()=>()=>(0,e.createElement)(td,null,(0,e.createElement)(s,null))),[s]);return(0,e.createElement)("div",{className:"amp-onboarding-wizard-container"},(0,e.createElement)("div",{className:"amp-onboarding-wizard"},(0,e.createElement)("div",{className:"amp-stepper-container"},(0,e.createElement)("div",{className:"amp-stepper-container__header"},o&&(0,e.createElement)(Jc,{closeLink:t}),(0,e.createElement)("div",{className:"amp-onboarding-wizard__logo-container"},(0,e.createElement)(Uc,null),(0,e.createElement)("h1",null,(0,l.__)("AMP","amp"))),(0,e.createElement)("div",{className:"amp-onboarding-wizard-plugin-name"},(0,l.__)("Official AMP Plugin for WordPress","amp"))),(0,e.createElement)(Xc,{activePageIndex:a,pages:f})),(0,e.createElement)("div",{className:"amp-onboarding-wizard-panel-container"},(0,e.createElement)(_,{className:"amp-onboarding-wizard-panel"},!1!==u&&(0,e.createElement)("h1",null,i),(0,e.createElement)(m,null)),(0,e.createElement)(ed,{activePageIndex:a,closeLink:t,finishLink:n,moveBack:c,moveForward:d,pages:f}))),(0,e.createElement)(qc,{appRoot:r}))}Qc.propTypes={setUserState:Zc().func};const{ajaxurl:rd}=o.g;let od;function ad({children:t}){return o.g.removeEventListener("error",od),(0,e.createElement)(m,null,(0,e.createElement)(ml,{exitLinkLabel:(0,l.__)("Return to AMP settings.","amp"),exitLinkUrl:n.SETTINGS_LINK,title:(0,l.__)("The setup wizard has experienced an error.","amp")},(0,e.createElement)(g,{delaySave:!0,hasErrorBoundary:!0,optionsRestPath:n.OPTIONS_REST_PATH,populateDefaultValues:!1},(0,e.createElement)(Dl,{userOptionDeveloperTools:n.USER_FIELD_DEVELOPER_TOOLS_ENABLED,usersResourceRestPath:n.USERS_RESOURCE_REST_PATH},(0,e.createElement)($l,null,(0,e.createElement)(Vl,null,(0,e.createElement)(Hl,{fetchCachedValidationErrors:!1,resetOnOptionsChange:!0,scannableUrlsRestPath:n.SCANNABLE_URLS_REST_PATH,scanOnce:!0,validateNonce:n.VALIDATE_NONCE},(0,e.createElement)(ql,{pages:$c},(0,e.createElement)(w,{currentTheme:n.CURRENT_THEME,hasErrorBoundary:!0,wpAjaxUrl:rd,readerThemesRestPath:n.READER_THEMES_REST_PATH,updatesNonce:n.UPDATES_NONCE},(0,e.createElement)(Tu,null,t))))))))))}i()((()=>{const t=document.getElementById(n.APP_ROOT_ID);t&&(od=n=>{n.filename&&/amp-onboarding-wizard(\.min)?\.js/.test(n.filename)&&(0,r.s)(t).render((0,e.createElement)(pl,{error:n.error}))},o.g.addEventListener("error",od),(0,r.s)(t).render((0,e.createElement)(ad,null,(0,e.createElement)(nd,{closeLink:(0,s.addQueryArgs)(n.CLOSE_LINK,{[n.AMP_SCAN_IF_STALE]:1}),finishLink:(0,s.addQueryArgs)(n.SETTINGS_LINK,{[n.AMP_SCAN_IF_STALE]:1}),appRoot:t}))))}))})()})();PK.3YH��Q\\6bunyad-amp/assets/js/amp-paired-browsing-app.asset.php<?php return array('dependencies' => array('wp-url'), 'version' => '2443c1f2e9a4cb034e52');
PK.3Y��c&��/bunyad-amp/assets/js/amp-paired-browsing-app.js(()=>{"use strict";var e={};function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t(e)}function i(e,i,n){return(i=function(e){var i=function(e,i){if("object"!==t(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!==t(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===t(i)?i:String(i)}(i))in e?Object.defineProperty(e,i,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[i]=n,e}e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}();const n=window.wp.url,{ampPairedBrowsingAppData:r,history:s}=window,{noampQueryVar:o,noampMobile:a,ampPairedBrowsingQueryVar:m,documentTitlePrefix:c}=r;window.pairedBrowsingApp=new class{constructor(){i(this,"disconnectedClient",void 0),i(this,"ampIframe",void 0),i(this,"ampHeartbeatTimestamp",Date.now()),i(this,"nonAmpIframe",void 0),i(this,"nonAmpHeartbeatTimestamp",Date.now()),i(this,"currentAmpUrl",void 0),i(this,"initialAmpUrlObject",void 0),i(this,"navigateAmpUrl",void 0),i(this,"currentNonAmpUrl",void 0),i(this,"initialNonAmpUrlObject",void 0),i(this,"navigateNonAmpUrl",void 0),i(this,"nonAmpLink",void 0),i(this,"ampLink",void 0),i(this,"activeIframe",void 0),this.nonAmpIframe=document.querySelector("#non-amp iframe"),this.ampIframe=document.querySelector("#amp iframe"),this.currentNonAmpUrl=this.nonAmpIframe.src,this.initialNonAmpUrlObject=new URL(this.currentNonAmpUrl),this.currentAmpUrl=this.ampIframe.src,this.initialAmpUrlObject=new URL(this.currentNonAmpUrl),this.nonAmpLink=document.getElementById("non-amp-link"),this.ampLink=document.getElementById("amp-link"),this.disconnectOverlay=document.querySelector(".disconnect-overlay"),this.disconnectButtons={exit:document.querySelector(".disconnect-overlay .button.exit"),goBack:document.querySelector(".disconnect-overlay .button.go-back")},this.addDisconnectButtonListeners(),e.g.addEventListener("message",(e=>{this.receiveMessage(e)})),document.getElementById("non-amp").addEventListener("mouseenter",(()=>{this.activeIframe=this.nonAmpIframe})),document.getElementById("amp").addEventListener("mouseenter",(()=>{this.activeIframe=this.ampIframe})),Promise.all(this.getIframeLoadedPromises()).then((()=>{setInterval((()=>{this.checkConnectedClients()}),100)}))}isAmpWindow(e){return e===this.ampIframe.contentWindow}isNonAmpWindow(e){return e===this.nonAmpIframe.contentWindow}sendMessage(e,t,i={}){e.postMessage({type:t,...i,ampPairedBrowsing:!0},this.isAmpWindow(e)?this.currentAmpUrl:this.currentNonAmpUrl)}receiveMessage(e){if(e.data&&e.data.type&&e.data.ampPairedBrowsing&&e.source&&[this.initialNonAmpUrlObject.origin,this.initialAmpUrlObject.origin].includes(e.origin)&&(this.isAmpWindow(e.source)||this.isNonAmpWindow(e.source)))switch(e.data.type){case"loaded":this.receiveLoaded(e.data,e.source);break;case"scroll":this.receiveScroll(e.data,e.source);break;case"heartbeat":this.receiveHeartbeat(e.source);break;case"navigate":this.receiveNavigate(e.data,e.source)}}getIframeLoadedPromises(){return[new Promise((e=>{this.nonAmpIframe.addEventListener("load",e)})),new Promise((e=>{this.ampIframe.addEventListener("load",e)}))]}receiveHeartbeat(e){this.isAmpWindow(e)?this.ampHeartbeatTimestamp=Date.now():this.nonAmpHeartbeatTimestamp=Date.now()}receiveNavigate({href:e},t){this.isAmpWindow(t)?this.navigateAmpUrl=e:this.navigateNonAmpUrl=e}checkConnectedClients(){this.sendMessage(this.ampIframe.contentWindow,"init"),this.sendMessage(this.nonAmpIframe.contentWindow,"init"),this.isClientConnected(this.ampIframe)?this.isClientConnected(this.nonAmpIframe)?this.disconnectOverlay.classList.remove("disconnected"):this.showDisconnectOverlay(this.nonAmpIframe):this.showDisconnectOverlay(this.ampIframe)}addDisconnectButtonListeners(){this.disconnectButtons.goBack.addEventListener("click",(()=>{window.history.back()}))}showDisconnectOverlay(e){const t=this.ampIframe===e?this.navigateAmpUrl:this.navigateNonAmpUrl;t?(this.disconnectButtons.exit.hidden=!1,this.disconnectButtons.exit.href=t):this.disconnectButtons.exit.hidden=!0,this.disconnectButtons.goBack.hidden=0>=window.history.length,this.disconnectOverlay.classList.toggle("amp",this.ampIframe===e),this.disconnectOverlay.classList.add("disconnected")}isClientConnected(e){return e===this.ampIframe?Date.now()-this.ampHeartbeatTimestamp<2e3:Date.now()-this.nonAmpHeartbeatTimestamp<2e3}purgeRemovableQueryVars(e){return(0,n.removeQueryArgs)(e,o,m)}addPairedBrowsingQueryVar(e){return(0,n.addQueryArgs)(e,{[m]:"1"})}removeUrlHash(e){const t=new URL(e);return t.hash="",t.href}replaceLocation(e,t){this.sendMessage(e.contentWindow,"replaceLocation",{href:t})}receiveScroll({x:e,y:t},i){if(this.activeIframe||(this.activeIframe=this.isAmpWindow(i)?this.ampIframe:this.nonAmpIframe),!this.activeIframe||i!==this.activeIframe.contentWindow)return;const n=this.isAmpWindow(i)?this.nonAmpIframe.contentWindow:this.ampIframe.contentWindow;this.sendMessage(n,"scroll",{x:e,y:t})}receiveLoaded({isAmpDocument:e,ampUrl:t,nonAmpUrl:i,documentTitle:r},m){const h=this.isAmpWindow(m),d=h?this.ampIframe:this.nonAmpIframe;if(h){if(!e)return void this.replaceLocation(d,t);this.currentAmpUrl=t,this.ampLink.href=(0,n.removeQueryArgs)(t,o)}else{if(e)return void this.replaceLocation(d,i);this.currentNonAmpUrl=i,this.nonAmpLink.href=(0,n.addQueryArgs)(i,{[o]:a})}const p=h?i:t,l=h?this.currentNonAmpUrl:this.currentAmpUrl;if(this.purgeRemovableQueryVars(this.removeUrlHash(p))===this.purgeRemovableQueryVars(this.removeUrlHash(l)))document.title=c+" "+r,s.replaceState({},"",this.addPairedBrowsingQueryVar(this.purgeRemovableQueryVars(i)));else{const e=h?i:t;this.replaceLocation(h?this.nonAmpIframe:this.ampIframe,this.purgeRemovableQueryVars(e))}}}})();PK.3Y�X,bb9bunyad-amp/assets/js/amp-paired-browsing-client.asset.php<?php return array('dependencies' => array('wp-dom-ready'), 'version' => '2509b39a49b4c9410d96');
PK.3Y��Ǜ��2bunyad-amp/assets/js/amp-paired-browsing-client.js(()=>{"use strict";var e={n:t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return e.d(n,{a:n}),n},d:(t,n)=>{for(var o in n)e.o(n,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:n[o]})}};e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),e.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);const t=window.wp.domReady;var n=e.n(t);const{parent:o,ampPairedBrowsingClientData:a}=window,{ampUrl:r,nonAmpUrl:i,isAmpDocument:c}=a,s=new URL(i);function d(){if(document.documentElement.style.setProperty("scroll-behavior","auto","important"),c){const e=document.getElementById("wp-admin-bar-amp-paired-browsing");e&&e.remove();const t=document.getElementById("wp-admin-bar-amp-view");t&&t.remove()}else document.getElementById("wp-admin-bar-amp").remove()}function l(e,t,n={}){e.postMessage({type:t,...n,ampPairedBrowsing:!0},s.origin)}let m=!1;function p(){l(o,"scroll",{x:window.scrollX,y:window.scrollY})}function u(e){const t=e.target,n=t.matches("[href]")?t:t.closest("[href]");n&&l(o,"navigate",{href:n.href})}function w(){l(o,"heartbeat")}e.g.addEventListener("message",(function(t){if(t.data&&t.data.ampPairedBrowsing&&t.data.type&&t.source&&s.origin===t.origin)switch(t.data.type){case"init":m||(m=!0,w(),setInterval(w,500),e.g.document.addEventListener("click",u,{passive:!0}),e.g.addEventListener("scroll",p,{passive:!0}),n()(d),l(o,"loaded",{isAmpDocument:c,ampUrl:r,nonAmpUrl:i,documentTitle:document.title}));break;case"scroll":!function({x:e,y:t}){window.scrollTo(e,t)}(t.data);break;case"replaceLocation":!function({href:e}){window.location.replace(e)}(t.data)}}))})();PK.3Y-c��ww1bunyad-amp/assets/js/amp-plugin-install.asset.php<?php return array('dependencies' => array('lodash', 'wp-dom-ready', 'wp-i18n'), 'version' => 'f6967cdb6ff8055f7af9');
PK.3YM�U		*bunyad-amp/assets/js/amp-plugin-install.js(()=>{"use strict";var e={n:t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return e.d(n,{a:n}),n},d:(t,n)=>{for(var a in n)e.o(n,a)&&!e.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:n[a]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const t=ampPlugins,n=window.lodash,a=window.wp.domReady;var s=e.n(a);const o=window.wp.i18n,i={init(){this.isAmpCompatibleTab()?this.removeAdditionalInfo():this.addAmpMessage(),this.addAmpMessageInSearchResult()},isAmpCompatibleTab:()=>new URLSearchParams(window.location.search.substr(1)).get("tab")===t.AMP_COMPATIBLE,addAmpMessageInSearchResult(){const e=document.getElementById("plugin-filter"),t=document.querySelector(".plugin-install-php .wp-filter-search");if(!e||!t)return;const a=(0,n.debounce)((()=>{t.removeEventListener("input",a,{once:!0});const n=document.querySelector(".plugin-install-tab-amp-compatible");n&&(n.classList.remove("plugin-install-tab-amp-compatible"),n.classList.add("plugin-install-tab-search-result")),new MutationObserver((()=>{this.addAmpMessage()})).observe(e,{childList:!0})}),1e3);t.addEventListener("input",a,{once:!0})},addAmpMessage(){for(const e of t.AMP_PLUGINS){const t=document.querySelector(`.plugin-card.plugin-card-${e}`);if(!t)continue;if(t.classList.contains("amp-extension-card-message"))continue;const n=document.createElement("div"),a=document.createElement("span"),s=document.createElement("span");n.classList.add("amp-extension-card-message"),a.classList.add("amp-logo-icon"),s.classList.add("tooltiptext"),s.append((0,o.__)("This is known to work well with the AMP plugin.","amp")),n.append(a),n.append(s),t.appendChild(n)}},removeAdditionalInfo(){const e=document.querySelectorAll(".plugin-install-tab-amp-compatible .plugin-card-bottom");for(const t of e)t.remove()}};s()((()=>{i.init()}))})();PK.3Y�5TT0bunyad-amp/assets/js/amp-post-meta-box.asset.php<?php return array('dependencies' => array(), 'version' => 'b540aa3dd4a1b8f5694d');
PK.3YW0_K)bunyad-amp/assets/js/amp-post-meta-box.jswindow.ampPostMetaBox=function(t){"use strict";const e={data:{canonical:!1,previewLink:"",enabled:!0,canSupport:!0,statusInputName:"",l10n:{ampPreviewBtnLabel:""}},toggleSpeed:200,previewBtnSelector:"#post-preview",ampPreviewBtnSelector:"#amp-post-preview",boot:function(a){e.data=a,t(document).ready((function(){e.statusRadioInputs=t('[name="'+e.data.statusInputName+'"]'),e.data.enabled&&!e.data.canonical&&e.addPreviewButton(),e.listen()}))},listen:function(){t(e.ampPreviewBtnSelector).on("click.amp-post-preview",(function(t){t.preventDefault(),e.onAmpPreviewButtonClick()})),e.statusRadioInputs.prop("disabled",!0),t('.edit-amp-status, [href="#amp_status"]').click((function(a){a.preventDefault(),e.statusRadioInputs.prop("disabled",!1),e.toggleAmpStatus(t(a.target))})),t('#submitpost input[type="submit"]').on("click",(function(){t(e.ampPreviewBtnSelector).addClass("disabled")}))},addPreviewButton:function(){const a=t(e.previewBtnSelector);a.clone().insertAfter(a).prop({href:e.data.previewLink,id:e.ampPreviewBtnSelector.replace("#","")}).text(e.data.l10n.ampPreviewBtnLabel).parent().addClass("has-amp-preview")},onAmpPreviewButtonClick:function(){const a=t("<input>").prop({type:"hidden",name:"amp-preview",value:"do-preview"}).insertAfter(e.ampPreviewBtnSelector);t(e.previewBtnSelector).click(),a.remove()},toggleAmpStatus:function(a){const n=t("#amp-status-select"),i=t(".edit-amp-status");let p=n.data("amp-status");a.hasClass("button-cancel")||(p=e.statusRadioInputs.filter(":checked").val());const s=t("#amp-status-"+p);i.fadeToggle(e.toggleSpeed,(function(){i.is(":visible")?i.focus():n.find('input[type="radio"]').first().focus()})),n.slideToggle(e.toggleSpeed),e.data.canSupport&&(n.data("amp-status",p),s.prop("checked",!0),t(".amp-status-text").text(s.next().text()))}};return e}(jQuery);PK.3Y�y/��=bunyad-amp/assets/js/amp-service-worker-runtime-precaching.js/* global URLS */
// See AMP_Service_Workers::add_amp_runtime_caching() and <https://github.com/ampproject/amp-by-example/blob/a4d798cac6a534e0c46e78944a2718a8dab3c057/boilerplate-generator/templates/files/serviceworkerJs.js#L9-L22>.
{
	self.addEventListener('install', (event) => {
		event.waitUntil(
			caches
				.open(wp.serviceWorker.core.cacheNames.runtime)
				.then((cache) => cache.addAll(URLS))
		);
	});
}
PK.3Y�ZZ�ww+bunyad-amp/assets/js/amp-settings.asset.php<?php return array('dependencies' => array('lodash', 'wp-api-fetch', 'wp-i18n'), 'version' => '40b70dc2106450267e20');
PK.3Y5����1�1$bunyad-amp/assets/js/amp-settings.js(()=>{var e,M,t={4184:(e,M)=>{var t;!function(){"use strict";var o={}.hasOwnProperty;function n(){for(var e=[],M=0;M<arguments.length;M++){var t=arguments[M];if(t){var b=typeof t;if("string"===b||"number"===b)e.push(t);else if(Array.isArray(t)){if(t.length){var p=n.apply(null,t);p&&e.push(p)}}else if("object"===b){if(t.toString!==Object.prototype.toString&&!t.toString.toString().includes("[native code]")){e.push(t.toString());continue}for(var z in t)o.call(t,z)&&t[z]&&e.push(z)}}}return e.join(" ")}e.exports?(n.default=n,e.exports=n):void 0===(t=function(){return n}.apply(M,[]))||(e.exports=t)}()},2152:function(e){var M;M=function(){return function(){var e={686:function(e,M,t){"use strict";t.d(M,{default:function(){return m}});var o=t(279),n=t.n(o),b=t(370),p=t.n(b),z=t(817),c=t.n(z);function a(e){try{return document.execCommand(e)}catch(e){return!1}}var r=function(e){var M=c()(e);return a("cut"),M},O=function(e,M){var t=function(e){var M="rtl"===document.documentElement.getAttribute("dir"),t=document.createElement("textarea");t.style.fontSize="12pt",t.style.border="0",t.style.padding="0",t.style.margin="0",t.style.position="absolute",t.style[M?"right":"left"]="-9999px";var o=window.pageYOffset||document.documentElement.scrollTop;return t.style.top="".concat(o,"px"),t.setAttribute("readonly",""),t.value=e,t}(e);M.container.appendChild(t);var o=c()(t);return a("copy"),t.remove(),o},i=function(e){var M=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{container:document.body},t="";return"string"==typeof e?t=O(e,M):e instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(null==e?void 0:e.type)?t=O(e.value,M):(t=c()(e),a("copy")),t};function s(e){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s(e)}function d(e){return d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},d(e)}function l(e,M){for(var t=0;t<M.length;t++){var o=M[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function u(e,M){return u=Object.setPrototypeOf||function(e,M){return e.__proto__=M,e},u(e,M)}function A(e){return A=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},A(e)}function q(e,M){var t="data-clipboard-".concat(e);if(M.hasAttribute(t))return M.getAttribute(t)}var f=function(e){!function(e,M){if("function"!=typeof M&&null!==M)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(M&&M.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),M&&u(e,M)}(c,e);var M,t,o,n,b,z=(n=c,b=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,M,t=A(n);if(b){var o=A(this).constructor;e=Reflect.construct(t,arguments,o)}else e=t.apply(this,arguments);return!(M=e)||"object"!==d(M)&&"function"!=typeof M?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(this):M});function c(e,M){var t;return function(e,M){if(!(e instanceof M))throw new TypeError("Cannot call a class as a function")}(this,c),(t=z.call(this)).resolveOptions(M),t.listenClick(e),t}return M=c,t=[{key:"resolveOptions",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof e.action?e.action:this.defaultAction,this.target="function"==typeof e.target?e.target:this.defaultTarget,this.text="function"==typeof e.text?e.text:this.defaultText,this.container="object"===d(e.container)?e.container:document.body}},{key:"listenClick",value:function(e){var M=this;this.listener=p()(e,"click",(function(e){return M.onClick(e)}))}},{key:"onClick",value:function(e){var M=e.delegateTarget||e.currentTarget,t=this.action(M)||"copy",o=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},M=e.action,t=void 0===M?"copy":M,o=e.container,n=e.target,b=e.text;if("copy"!==t&&"cut"!==t)throw new Error('Invalid "action" value, use either "copy" or "cut"');if(void 0!==n){if(!n||"object"!==s(n)||1!==n.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===t&&n.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===t&&(n.hasAttribute("readonly")||n.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes')}return b?i(b,{container:o}):n?"cut"===t?r(n):i(n,{container:o}):void 0}({action:t,container:this.container,target:this.target(M),text:this.text(M)});this.emit(o?"success":"error",{action:t,text:o,trigger:M,clearSelection:function(){M&&M.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(e){return q("action",e)}},{key:"defaultTarget",value:function(e){var M=q("target",e);if(M)return document.querySelector(M)}},{key:"defaultText",value:function(e){return q("text",e)}},{key:"destroy",value:function(){this.listener.destroy()}}],o=[{key:"copy",value:function(e){var M=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{container:document.body};return i(e,M)}},{key:"cut",value:function(e){return r(e)}},{key:"isSupported",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],M="string"==typeof e?[e]:e,t=!!document.queryCommandSupported;return M.forEach((function(e){t=t&&!!document.queryCommandSupported(e)})),t}}],t&&l(M.prototype,t),o&&l(M,o),c}(n()),m=f},828:function(e){if("undefined"!=typeof Element&&!Element.prototype.matches){var M=Element.prototype;M.matches=M.matchesSelector||M.mozMatchesSelector||M.msMatchesSelector||M.oMatchesSelector||M.webkitMatchesSelector}e.exports=function(e,M){for(;e&&9!==e.nodeType;){if("function"==typeof e.matches&&e.matches(M))return e;e=e.parentNode}}},438:function(e,M,t){var o=t(828);function n(e,M,t,o,n){var p=b.apply(this,arguments);return e.addEventListener(t,p,n),{destroy:function(){e.removeEventListener(t,p,n)}}}function b(e,M,t,n){return function(t){t.delegateTarget=o(t.target,M),t.delegateTarget&&n.call(e,t)}}e.exports=function(e,M,t,o,b){return"function"==typeof e.addEventListener?n.apply(null,arguments):"function"==typeof t?n.bind(null,document).apply(null,arguments):("string"==typeof e&&(e=document.querySelectorAll(e)),Array.prototype.map.call(e,(function(e){return n(e,M,t,o,b)})))}},879:function(e,M){M.node=function(e){return void 0!==e&&e instanceof HTMLElement&&1===e.nodeType},M.nodeList=function(e){var t=Object.prototype.toString.call(e);return void 0!==e&&("[object NodeList]"===t||"[object HTMLCollection]"===t)&&"length"in e&&(0===e.length||M.node(e[0]))},M.string=function(e){return"string"==typeof e||e instanceof String},M.fn=function(e){return"[object Function]"===Object.prototype.toString.call(e)}},370:function(e,M,t){var o=t(879),n=t(438);e.exports=function(e,M,t){if(!e&&!M&&!t)throw new Error("Missing required arguments");if(!o.string(M))throw new TypeError("Second argument must be a String");if(!o.fn(t))throw new TypeError("Third argument must be a Function");if(o.node(e))return function(e,M,t){return e.addEventListener(M,t),{destroy:function(){e.removeEventListener(M,t)}}}(e,M,t);if(o.nodeList(e))return function(e,M,t){return Array.prototype.forEach.call(e,(function(e){e.addEventListener(M,t)})),{destroy:function(){Array.prototype.forEach.call(e,(function(e){e.removeEventListener(M,t)}))}}}(e,M,t);if(o.string(e))return function(e,M,t){return n(document.body,e,M,t)}(e,M,t);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}},817:function(e){e.exports=function(e){var M;if("SELECT"===e.nodeName)e.focus(),M=e.value;else if("INPUT"===e.nodeName||"TEXTAREA"===e.nodeName){var t=e.hasAttribute("readonly");t||e.setAttribute("readonly",""),e.select(),e.setSelectionRange(0,e.value.length),t||e.removeAttribute("readonly"),M=e.value}else{e.hasAttribute("contenteditable")&&e.focus();var o=window.getSelection(),n=document.createRange();n.selectNodeContents(e),o.removeAllRanges(),o.addRange(n),M=o.toString()}return M}},279:function(e){function M(){}M.prototype={on:function(e,M,t){var o=this.e||(this.e={});return(o[e]||(o[e]=[])).push({fn:M,ctx:t}),this},once:function(e,M,t){var o=this;function n(){o.off(e,n),M.apply(t,arguments)}return n._=M,this.on(e,n,t)},emit:function(e){for(var M=[].slice.call(arguments,1),t=((this.e||(this.e={}))[e]||[]).slice(),o=0,n=t.length;o<n;o++)t[o].fn.apply(t[o].ctx,M);return this},off:function(e,M){var t=this.e||(this.e={}),o=t[e],n=[];if(o&&M)for(var b=0,p=o.length;b<p;b++)o[b].fn!==M&&o[b].fn._!==M&&n.push(o[b]);return n.length?t[e]=n:delete t[e],this}},e.exports=M,e.exports.TinyEmitter=M}},M={};function t(o){if(M[o])return M[o].exports;var n=M[o]={exports:{}};return e[o](n,n.exports,t),n.exports}return t.n=function(e){var M=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(M,{a:M}),M},t.d=function(e,M){for(var o in M)t.o(M,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:M[o]})},t.o=function(e,M){return Object.prototype.hasOwnProperty.call(e,M)},t(686)}().default},e.exports=M()},9996:e=>{"use strict";var M=function(e){return function(e){return!!e&&"object"==typeof e}(e)&&!function(e){var M=Object.prototype.toString.call(e);return"[object RegExp]"===M||"[object Date]"===M||function(e){return e.$$typeof===t}(e)}(e)},t="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103;function o(e,M){return!1!==M.clone&&M.isMergeableObject(e)?z((t=e,Array.isArray(t)?[]:{}),e,M):e;var t}function n(e,M,t){return e.concat(M).map((function(e){return o(e,t)}))}function b(e){return Object.keys(e).concat(function(e){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e).filter((function(M){return Object.propertyIsEnumerable.call(e,M)})):[]}(e))}function p(e,M){try{return M in e}catch(e){return!1}}function z(e,t,c){(c=c||{}).arrayMerge=c.arrayMerge||n,c.isMergeableObject=c.isMergeableObject||M,c.cloneUnlessOtherwiseSpecified=o;var a=Array.isArray(t);return a===Array.isArray(e)?a?c.arrayMerge(e,t,c):function(e,M,t){var n={};return t.isMergeableObject(e)&&b(e).forEach((function(M){n[M]=o(e[M],t)})),b(M).forEach((function(b){(function(e,M){return p(e,M)&&!(Object.hasOwnProperty.call(e,M)&&Object.propertyIsEnumerable.call(e,M))})(e,b)||(p(e,b)&&t.isMergeableObject(M[b])?n[b]=function(e,M){if(!M.customMerge)return z;var t=M.customMerge(e);return"function"==typeof t?t:z}(b,t)(e[b],M[b],t):n[b]=o(M[b],t))})),n}(e,t,c):o(t,c)}z.all=function(e,M){if(!Array.isArray(e))throw new Error("first argument should be an array");return e.reduce((function(e,t){return z(e,t,M)}),{})};var c=z;e.exports=c},2991:e=>{"use strict";e.exports=function e(M,t){if(M===t)return!0;if(M&&t&&"object"==typeof M&&"object"==typeof t){if(M.constructor!==t.constructor)return!1;var o,n,b;if(Array.isArray(M)){if((o=M.length)!=t.length)return!1;for(n=o;0!=n--;)if(!e(M[n],t[n]))return!1;return!0}if(M instanceof Map&&t instanceof Map){if(M.size!==t.size)return!1;for(n of M.entries())if(!t.has(n[0]))return!1;for(n of M.entries())if(!e(n[1],t.get(n[0])))return!1;return!0}if(M instanceof Set&&t instanceof Set){if(M.size!==t.size)return!1;for(n of M.entries())if(!t.has(n[0]))return!1;return!0}if(ArrayBuffer.isView(M)&&ArrayBuffer.isView(t)){if((o=M.length)!=t.length)return!1;for(n=o;0!=n--;)if(M[n]!==t[n])return!1;return!0}if(M.constructor===RegExp)return M.source===t.source&&M.flags===t.flags;if(M.valueOf!==Object.prototype.valueOf)return M.valueOf()===t.valueOf();if(M.toString!==Object.prototype.toString)return M.toString()===t.toString();if((o=(b=Object.keys(M)).length)!==Object.keys(t).length)return!1;for(n=o;0!=n--;)if(!Object.prototype.hasOwnProperty.call(t,b[n]))return!1;for(n=o;0!=n--;){var p=b[n];if(!e(M[p],t[p]))return!1}return!0}return M!=M&&t!=t}},6928:e=>{e.exports=function(e){var M={};function t(o){if(M[o])return M[o].exports;var n=M[o]={exports:{},id:o,loaded:!1};return e[o].call(n.exports,n,n.exports,t),n.loaded=!0,n.exports}return t.m=e,t.c=M,t.p="",t(0)}([function(e,M,t){e.exports=t(1)},function(e,M,t){"use strict";Object.defineProperty(M,"__esModule",{value:!0});var o=t(2);Object.defineProperty(M,"combineChunks",{enumerable:!0,get:function(){return o.combineChunks}}),Object.defineProperty(M,"fillInChunks",{enumerable:!0,get:function(){return o.fillInChunks}}),Object.defineProperty(M,"findAll",{enumerable:!0,get:function(){return o.findAll}}),Object.defineProperty(M,"findChunks",{enumerable:!0,get:function(){return o.findChunks}})},function(e,M){"use strict";Object.defineProperty(M,"__esModule",{value:!0}),M.findAll=function(e){var M=e.autoEscape,b=e.caseSensitive,p=void 0!==b&&b,z=e.findChunks,c=void 0===z?o:z,a=e.sanitize,r=e.searchWords,O=e.textToHighlight;return n({chunksToHighlight:t({chunks:c({autoEscape:M,caseSensitive:p,sanitize:a,searchWords:r,textToHighlight:O})}),totalLength:O?O.length:0})};var t=M.combineChunks=function(e){var M=e.chunks;return M.sort((function(e,M){return e.start-M.start})).reduce((function(e,M){if(0===e.length)return[M];var t=e.pop();if(M.start<=t.end){var o=Math.max(t.end,M.end);e.push({highlight:!1,start:t.start,end:o})}else e.push(t,M);return e}),[])},o=function(e){var M=e.autoEscape,t=e.caseSensitive,o=e.sanitize,n=void 0===o?b:o,p=e.searchWords,z=e.textToHighlight;return z=n(z),p.filter((function(e){return e})).reduce((function(e,o){o=n(o),M&&(o=o.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"));for(var b=new RegExp(o,t?"g":"gi"),p=void 0;p=b.exec(z);){var c=p.index,a=b.lastIndex;a>c&&e.push({highlight:!1,start:c,end:a}),p.index===b.lastIndex&&b.lastIndex++}return e}),[])};M.findChunks=o;var n=M.fillInChunks=function(e){var M=e.chunksToHighlight,t=e.totalLength,o=[],n=function(e,M,t){M-e>0&&o.push({start:e,end:M,highlight:t})};if(0===M.length)n(0,t,!1);else{var b=0;M.forEach((function(e){n(b,e.start,!1),n(e.start,e.end,!0),b=e.end})),n(b,t,!1)}return o};function b(e){return e}}])},8679:(e,M,t)=>{"use strict";var o=t(1296),n={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},b={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},p={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},z={};function c(e){return o.isMemo(e)?p:z[e.$$typeof]||n}z[o.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},z[o.Memo]=p;var a=Object.defineProperty,r=Object.getOwnPropertyNames,O=Object.getOwnPropertySymbols,i=Object.getOwnPropertyDescriptor,s=Object.getPrototypeOf,d=Object.prototype;e.exports=function e(M,t,o){if("string"!=typeof t){if(d){var n=s(t);n&&n!==d&&e(M,n,o)}var p=r(t);O&&(p=p.concat(O(t)));for(var z=c(M),l=c(t),u=0;u<p.length;++u){var A=p[u];if(!(b[A]||o&&o[A]||l&&l[A]||z&&z[A])){var q=i(t,A);try{a(M,A,q)}catch(e){}}}}return M}},6103:(e,M)=>{"use strict";var t="function"==typeof Symbol&&Symbol.for,o=t?Symbol.for("react.element"):60103,n=t?Symbol.for("react.portal"):60106,b=t?Symbol.for("react.fragment"):60107,p=t?Symbol.for("react.strict_mode"):60108,z=t?Symbol.for("react.profiler"):60114,c=t?Symbol.for("react.provider"):60109,a=t?Symbol.for("react.context"):60110,r=t?Symbol.for("react.async_mode"):60111,O=t?Symbol.for("react.concurrent_mode"):60111,i=t?Symbol.for("react.forward_ref"):60112,s=t?Symbol.for("react.suspense"):60113,d=t?Symbol.for("react.suspense_list"):60120,l=t?Symbol.for("react.memo"):60115,u=t?Symbol.for("react.lazy"):60116,A=t?Symbol.for("react.block"):60121,q=t?Symbol.for("react.fundamental"):60117,f=t?Symbol.for("react.responder"):60118,m=t?Symbol.for("react.scope"):60119;function W(e){if("object"==typeof e&&null!==e){var M=e.$$typeof;switch(M){case o:switch(e=e.type){case r:case O:case b:case z:case p:case s:return e;default:switch(e=e&&e.$$typeof){case a:case i:case u:case l:case c:return e;default:return M}}case n:return M}}}function _(e){return W(e)===O}M.AsyncMode=r,M.ConcurrentMode=O,M.ContextConsumer=a,M.ContextProvider=c,M.Element=o,M.ForwardRef=i,M.Fragment=b,M.Lazy=u,M.Memo=l,M.Portal=n,M.Profiler=z,M.StrictMode=p,M.Suspense=s,M.isAsyncMode=function(e){return _(e)||W(e)===r},M.isConcurrentMode=_,M.isContextConsumer=function(e){return W(e)===a},M.isContextProvider=function(e){return W(e)===c},M.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===o},M.isForwardRef=function(e){return W(e)===i},M.isFragment=function(e){return W(e)===b},M.isLazy=function(e){return W(e)===u},M.isMemo=function(e){return W(e)===l},M.isPortal=function(e){return W(e)===n},M.isProfiler=function(e){return W(e)===z},M.isStrictMode=function(e){return W(e)===p},M.isSuspense=function(e){return W(e)===s},M.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===b||e===O||e===z||e===p||e===s||e===d||"object"==typeof e&&null!==e&&(e.$$typeof===u||e.$$typeof===l||e.$$typeof===c||e.$$typeof===a||e.$$typeof===i||e.$$typeof===q||e.$$typeof===f||e.$$typeof===m||e.$$typeof===A)},M.typeOf=W},1296:(e,M,t)=>{"use strict";e.exports=t(6103)},8:(e,M,t)=>{(e.exports=t(5177)).tz.load(t(1128))},5341:function(e,M,t){var o,n,b;!function(p,z){"use strict";e.exports?e.exports=z(t(8)):(n=[t(381)],void 0===(b="function"==typeof(o=z)?o.apply(M,n):o)||(e.exports=b))}(0,(function(e){"use strict";if(!e.tz)throw new Error("moment-timezone-utils.js must be loaded after moment-timezone.js");var M="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX",t=1e-6;function o(e,o){for(var n="",b=Math.abs(e),p=Math.floor(b),z=function(e,o){for(var n,b=".",p="";o>0;)o-=1,e*=60,n=Math.floor(e+t),b+=M[n],e-=n,n&&(p+=b,b="");return p}(b-p,Math.min(~~o,10));p>0;)n=M[p%60]+n,p=Math.floor(p/60);return e<0&&(n="-"+n),n&&z?n+z:(z||"-"!==n)&&(n||z)||"0"}function n(e){var M,t=[],n=0;for(M=0;M<e.length-1;M++)t[M]=o(Math.round((e[M]-n)/1e3)/60,1),n=e[M];return t.join(" ")}function b(e){var M,t,n=0,b=[],p=[],z=[],c={};for(M=0;M<e.abbrs.length;M++)void 0===c[t=e.abbrs[M]+"|"+e.offsets[M]]&&(c[t]=n,b[n]=e.abbrs[M],p[n]=o(Math.round(60*e.offsets[M])/60,1),n++),z[M]=o(c[t],0);return b.join(" ")+"|"+p.join(" ")+"|"+z.join("")}function p(e){if(!e)return"";if(e<1e3)return e;var M=String(0|e).length-2;return Math.round(e/Math.pow(10,M))+"e"+M}function z(e){return function(e){if(!e.name)throw new Error("Missing name");if(!e.abbrs)throw new Error("Missing abbrs");if(!e.untils)throw new Error("Missing untils");if(!e.offsets)throw new Error("Missing offsets");if(e.offsets.length!==e.untils.length||e.offsets.length!==e.abbrs.length)throw new Error("Mismatched array lengths")}(e),[e.name,b(e),n(e.untils),p(e.population)].join("|")}function c(e){return[e.name,e.zones.join(" ")].join("|")}function a(e,M){var t;if(e.length!==M.length)return!1;for(t=0;t<e.length;t++)if(e[t]!==M[t])return!1;return!0}function r(e,M){return a(e.offsets,M.offsets)&&a(e.abbrs,M.abbrs)&&a(e.untils,M.untils)}function O(e,M){var t=[],o=[];return e.links&&(o=e.links.slice()),function(e,M,t,o){var n,b,p,z,c,a,O=[];for(n=0;n<e.length;n++){for(a=!1,p=e[n],b=0;b<O.length;b++)r(p,z=(c=O[b])[0])&&(p.population>z.population||p.population===z.population&&o&&o[p.name]?c.unshift(p):c.push(p),a=!0);a||O.push([p])}for(n=0;n<O.length;n++)for(c=O[n],M.push(c[0]),b=1;b<c.length;b++)t.push(c[0].name+"|"+c[b].name)}(e.zones,t,o,M),{version:e.version,zones:t,links:o.sort()}}function i(e,M,t){var o=Array.prototype.slice,n=function(e,M,t){var o,n,b=0,p=e.length+1;for(t||(t=M),M>t&&(n=M,M=t,t=n),n=0;n<e.length;n++)null!=e[n]&&((o=new Date(e[n]).getUTCFullYear())<M&&(b=n+1),o>t&&(p=Math.min(p,n+1)));return[b,p]}(e.untils,M,t),b=o.apply(e.untils,n);return b[b.length-1]=null,{name:e.name,abbrs:o.apply(e.abbrs,n),untils:b,offsets:o.apply(e.offsets,n),population:e.population,countries:e.countries}}return e.tz.pack=z,e.tz.packBase60=o,e.tz.createLinks=O,e.tz.filterYears=i,e.tz.filterLinkPack=function(e,M,t,o){var n,b,p=e.zones,a=[];for(n=0;n<p.length;n++)a[n]=i(p[n],M,t);for(b=O({zones:a,links:e.links.slice(),version:e.version},o),n=0;n<b.zones.length;n++)b.zones[n]=z(b.zones[n]);return b.countries=e.countries?e.countries.map((function(e){return c(e)})):[],b},e.tz.packCountry=c,e}))},5177:function(e,M,t){var o,n,b;!function(p,z){"use strict";e.exports?e.exports=z(t(381)):(n=[t(381)],void 0===(b="function"==typeof(o=z)?o.apply(M,n):o)||(e.exports=b))}(0,(function(e){"use strict";void 0===e.version&&e.default&&(e=e.default);var M,t={},o={},n={},b={},p={};e&&"string"==typeof e.version||v("Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/");var z=e.version.split("."),c=+z[0],a=+z[1];function r(e){return e>96?e-87:e>64?e-29:e-48}function O(e){var M=0,t=e.split("."),o=t[0],n=t[1]||"",b=1,p=0,z=1;for(45===e.charCodeAt(0)&&(M=1,z=-1);M<o.length;M++)p=60*p+r(o.charCodeAt(M));for(M=0;M<n.length;M++)b/=60,p+=r(n.charCodeAt(M))*b;return p*z}function i(e){for(var M=0;M<e.length;M++)e[M]=O(e[M])}function s(e,M){var t,o=[];for(t=0;t<M.length;t++)o[t]=e[M[t]];return o}function d(e){var M=e.split("|"),t=M[2].split(" "),o=M[3].split(""),n=M[4].split(" ");return i(t),i(o),i(n),function(e,M){for(var t=0;t<M;t++)e[t]=Math.round((e[t-1]||0)+6e4*e[t]);e[M-1]=1/0}(n,o.length),{name:M[0],abbrs:s(M[1].split(" "),o),offsets:s(t,o),untils:n,population:0|M[5]}}function l(e){e&&this._set(d(e))}function u(e,M){this.name=e,this.zones=M}function A(e){var M=e.toTimeString(),t=M.match(/\([a-z ]+\)/i);"GMT"===(t=t&&t[0]?(t=t[0].match(/[A-Z]/g))?t.join(""):void 0:(t=M.match(/[A-Z]{3,5}/g))?t[0]:void 0)&&(t=void 0),this.at=+e,this.abbr=t,this.offset=e.getTimezoneOffset()}function q(e){this.zone=e,this.offsetScore=0,this.abbrScore=0}function f(e,M){for(var t,o;o=6e4*((M.at-e.at)/12e4|0);)(t=new A(new Date(e.at+o))).offset===e.offset?e=t:M=t;return e}function m(e,M){return e.offsetScore!==M.offsetScore?e.offsetScore-M.offsetScore:e.abbrScore!==M.abbrScore?e.abbrScore-M.abbrScore:e.zone.population!==M.zone.population?M.zone.population-e.zone.population:M.zone.name.localeCompare(e.zone.name)}function W(e,M){var t,o;for(i(M),t=0;t<M.length;t++)o=M[t],p[o]=p[o]||{},p[o][e]=!0}function _(e){var M,t,o,n=e.length,z={},c=[];for(M=0;M<n;M++)for(t in o=p[e[M].offset]||{})o.hasOwnProperty(t)&&(z[t]=!0);for(M in z)z.hasOwnProperty(M)&&c.push(b[M]);return c}function h(e){return(e||"").toLowerCase().replace(/\//g,"_")}function L(e){var M,o,n,p;for("string"==typeof e&&(e=[e]),M=0;M<e.length;M++)p=h(o=(n=e[M].split("|"))[0]),t[p]=e[M],b[p]=o,W(p,n[2].split(" "))}function R(e,M){e=h(e);var n,p=t[e];return p instanceof l?p:"string"==typeof p?(p=new l(p),t[e]=p,p):o[e]&&M!==R&&(n=R(o[e],R))?((p=t[e]=new l)._set(n),p.name=b[e],p):null}function g(e){var M,t,n,p;for("string"==typeof e&&(e=[e]),M=0;M<e.length;M++)n=h((t=e[M].split("|"))[0]),p=h(t[1]),o[n]=p,b[n]=t[0],o[p]=n,b[p]=t[1]}function y(e){var M="X"===e._f||"x"===e._f;return!(!e._a||void 0!==e._tzm||M)}function v(e){"undefined"!=typeof console&&"function"==typeof console.error&&console.error(e)}function N(M){var t=Array.prototype.slice.call(arguments,0,-1),o=arguments[arguments.length-1],n=R(o),b=e.utc.apply(null,t);return n&&!e.isMoment(M)&&y(b)&&b.add(n.parse(b),"minutes"),b.tz(o),b}(c<2||2===c&&a<6)&&v("Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js "+e.version+". See momentjs.com"),l.prototype={_set:function(e){this.name=e.name,this.abbrs=e.abbrs,this.untils=e.untils,this.offsets=e.offsets,this.population=e.population},_index:function(e){var M,t=+e,o=this.untils;for(M=0;M<o.length;M++)if(t<o[M])return M},countries:function(){var e=this.name;return Object.keys(n).filter((function(M){return-1!==n[M].zones.indexOf(e)}))},parse:function(e){var M,t,o,n,b=+e,p=this.offsets,z=this.untils,c=z.length-1;for(n=0;n<c;n++)if(M=p[n],t=p[n+1],o=p[n?n-1:n],M<t&&N.moveAmbiguousForward?M=t:M>o&&N.moveInvalidForward&&(M=o),b<z[n]-6e4*M)return p[n];return p[c]},abbr:function(e){return this.abbrs[this._index(e)]},offset:function(e){return v("zone.offset has been deprecated in favor of zone.utcOffset"),this.offsets[this._index(e)]},utcOffset:function(e){return this.offsets[this._index(e)]}},q.prototype.scoreOffsetAt=function(e){this.offsetScore+=Math.abs(this.zone.utcOffset(e.at)-e.offset),this.zone.abbr(e.at).replace(/[^A-Z]/g,"")!==e.abbr&&this.abbrScore++},N.version="0.5.43",N.dataVersion="",N._zones=t,N._links=o,N._names=b,N._countries=n,N.add=L,N.link=g,N.load=function(e){L(e.zones),g(e.links),function(e){var M,t,o,b;if(e&&e.length)for(M=0;M<e.length;M++)t=(b=e[M].split("|"))[0].toUpperCase(),o=b[1].split(" "),n[t]=new u(t,o)}(e.countries),N.dataVersion=e.version},N.zone=R,N.zoneExists=function e(M){return e.didShowError||(e.didShowError=!0,v("moment.tz.zoneExists('"+M+"') has been deprecated in favor of !moment.tz.zone('"+M+"')")),!!R(M)},N.guess=function(e){return M&&!e||(M=function(){try{var e=Intl.DateTimeFormat().resolvedOptions().timeZone;if(e&&e.length>3){var M=b[h(e)];if(M)return M;v("Moment Timezone found "+e+" from the Intl api, but did not have that data loaded.")}}catch(e){}var t,o,n,p=function(){var e,M,t,o=(new Date).getFullYear()-2,n=new A(new Date(o,0,1)),b=[n];for(t=1;t<48;t++)(M=new A(new Date(o,t,1))).offset!==n.offset&&(e=f(n,M),b.push(e),b.push(new A(new Date(e.at+6e4)))),n=M;for(t=0;t<4;t++)b.push(new A(new Date(o+t,0,1))),b.push(new A(new Date(o+t,6,1)));return b}(),z=p.length,c=_(p),a=[];for(o=0;o<c.length;o++){for(t=new q(R(c[o]),z),n=0;n<z;n++)t.scoreOffsetAt(p[n]);a.push(t)}return a.sort(m),a.length>0?a[0].zone.name:void 0}()),M},N.names=function(){var e,M=[];for(e in b)b.hasOwnProperty(e)&&(t[e]||t[o[e]])&&b[e]&&M.push(b[e]);return M.sort()},N.Zone=l,N.unpack=d,N.unpackBase60=O,N.needsOffset=y,N.moveInvalidForward=!0,N.moveAmbiguousForward=!1,N.countries=function(){return Object.keys(n)},N.zonesForCountry=function(e,M){var t;if(t=(t=e).toUpperCase(),!(e=n[t]||null))return null;var o=e.zones.sort();return M?o.map((function(e){return{name:e,offset:R(e).utcOffset(new Date)}})):o};var k,T=e.fn;function B(e){return function(){return this._z?this._z.abbr(this):e.call(this)}}function w(e){return function(){return this._z=null,e.apply(this,arguments)}}e.tz=N,e.defaultZone=null,e.updateOffset=function(M,t){var o,n=e.defaultZone;if(void 0===M._z&&(n&&y(M)&&!M._isUTC&&(M._d=e.utc(M._a)._d,M.utc().add(n.parse(M),"minutes")),M._z=n),M._z)if(o=M._z.utcOffset(M),Math.abs(o)<16&&(o/=60),void 0!==M.utcOffset){var b=M._z;M.utcOffset(-o,t),M._z=b}else M.zone(o,t)},T.tz=function(M,t){if(M){if("string"!=typeof M)throw new Error("Time zone name must be a string, got "+M+" ["+typeof M+"]");return this._z=R(M),this._z?e.updateOffset(this,t):v("Moment Timezone has no data for "+M+". See http://momentjs.com/timezone/docs/#/data-loading/."),this}if(this._z)return this._z.name},T.zoneName=B(T.zoneName),T.zoneAbbr=B(T.zoneAbbr),T.utc=w(T.utc),T.local=w(T.local),T.utcOffset=(k=T.utcOffset,function(){return arguments.length>0&&(this._z=null),k.apply(this,arguments)}),e.tz.setDefault=function(M){return(c<2||2===c&&a<9)&&v("Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js "+e.version+"."),e.defaultZone=M?R(M):null,e};var S=e.momentProperties;return"[object Array]"===Object.prototype.toString.call(S)?(S.push("_z"),S.push("_a")):S&&(S._z=null),e}))},2786:function(e,M,t){!function(e){"use strict";e.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(e){return/^nm$/i.test(e)},meridiem:function(e,M,t){return e<12?t?"vm":"VM":t?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[Môre om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",ss:"%d sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})}(t(381))},4130:function(e,M,t){!function(e){"use strict";var M=function(e){return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},t={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},o=function(e){return function(o,n,b,p){var z=M(o),c=t[e][M(o)];return 2===z&&(c=c[n?0:1]),c.replace(/%d/i,o)}},n=["جانفي","فيفري","مارس","أفريل","ماي","جوان","جويلية","أوت","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];e.defineLocale("ar-dz",{months:n,monthsShort:n,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,M,t){return e<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:o("s"),ss:o("s"),m:o("m"),mm:o("m"),h:o("h"),hh:o("h"),d:o("d"),dd:o("d"),M:o("M"),MM:o("M"),y:o("y"),yy:o("y")},postformat:function(e){return e.replace(/,/g,"،")},week:{dow:0,doy:4}})}(t(381))},6135:function(e,M,t){!function(e){"use strict";e.defineLocale("ar-kw",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:12}})}(t(381))},6440:function(e,M,t){!function(e){"use strict";var M={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"},t=function(e){return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},o={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},n=function(e){return function(M,n,b,p){var z=t(M),c=o[e][t(M)];return 2===z&&(c=c[n?0:1]),c.replace(/%d/i,M)}},b=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];e.defineLocale("ar-ly",{months:b,monthsShort:b,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,M,t){return e<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:n("s"),ss:n("s"),m:n("m"),mm:n("m"),h:n("h"),hh:n("h"),d:n("d"),dd:n("d"),M:n("M"),MM:n("M"),y:n("y"),yy:n("y")},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,(function(e){return M[e]})).replace(/,/g,"،")},week:{dow:6,doy:12}})}(t(381))},1675:function(e,M,t){!function(e){"use strict";e.defineLocale("ar-ma",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:1,doy:4}})}(t(381))},6040:function(e,M,t){!function(e){"use strict";var M={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},t={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"};e.defineLocale("ar-sa",{months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,M,t){return e<12?"ص":"م"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,(function(e){return t[e]})).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,(function(e){return M[e]})).replace(/,/g,"،")},week:{dow:0,doy:6}})}(t(381))},7100:function(e,M,t){!function(e){"use strict";e.defineLocale("ar-tn",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:1,doy:4}})}(t(381))},867:function(e,M,t){!function(e){"use strict";var M={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},t={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},o=function(e){return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},n={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},b=function(e){return function(M,t,b,p){var z=o(M),c=n[e][o(M)];return 2===z&&(c=c[t?0:1]),c.replace(/%d/i,M)}},p=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];e.defineLocale("ar",{months:p,monthsShort:p,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,M,t){return e<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:b("s"),ss:b("s"),m:b("m"),mm:b("m"),h:b("h"),hh:b("h"),d:b("d"),dd:b("d"),M:b("M"),MM:b("M"),y:b("y"),yy:b("y")},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,(function(e){return t[e]})).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,(function(e){return M[e]})).replace(/,/g,"،")},week:{dow:6,doy:12}})}(t(381))},1083:function(e,M,t){!function(e){"use strict";var M={1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-üncü",4:"-üncü",100:"-üncü",6:"-ncı",9:"-uncu",10:"-uncu",30:"-uncu",60:"-ıncı",90:"-ıncı"};e.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə".split("_"),weekdaysShort:"Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən".split("_"),weekdaysMin:"Bz_BE_ÇA_Çə_CA_Cü_Şə".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[gələn həftə] dddd [saat] LT",lastDay:"[dünən] LT",lastWeek:"[keçən həftə] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s əvvəl",s:"bir neçə saniyə",ss:"%d saniyə",m:"bir dəqiqə",mm:"%d dəqiqə",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gecə|səhər|gündüz|axşam/,isPM:function(e){return/^(gündüz|axşam)$/.test(e)},meridiem:function(e,M,t){return e<4?"gecə":e<12?"səhər":e<17?"gündüz":"axşam"},dayOfMonthOrdinalParse:/\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,ordinal:function(e){if(0===e)return e+"-ıncı";var t=e%10;return e+(M[t]||M[e%100-t]||M[e>=100?100:null])},week:{dow:1,doy:7}})}(t(381))},9808:function(e,M,t){!function(e){"use strict";function M(e,M,t){return"m"===t?M?"хвіліна":"хвіліну":"h"===t?M?"гадзіна":"гадзіну":e+" "+(o=+e,n={ss:M?"секунда_секунды_секунд":"секунду_секунды_секунд",mm:M?"хвіліна_хвіліны_хвілін":"хвіліну_хвіліны_хвілін",hh:M?"гадзіна_гадзіны_гадзін":"гадзіну_гадзіны_гадзін",dd:"дзень_дні_дзён",MM:"месяц_месяцы_месяцаў",yy:"год_гады_гадоў"}[t].split("_"),o%10==1&&o%100!=11?n[0]:o%10>=2&&o%10<=4&&(o%100<10||o%100>=20)?n[1]:n[2]);var o,n}e.defineLocale("be",{months:{format:"студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня".split("_"),standalone:"студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань".split("_")},monthsShort:"студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж".split("_"),weekdays:{format:"нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу".split("_"),standalone:"нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота".split("_"),isFormat:/\[ ?[Ууў] ?(?:мінулую|наступную)? ?\] ?dddd/},weekdaysShort:"нд_пн_ат_ср_чц_пт_сб".split("_"),weekdaysMin:"нд_пн_ат_ср_чц_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сёння ў] LT",nextDay:"[Заўтра ў] LT",lastDay:"[Учора ў] LT",nextWeek:function(){return"[У] dddd [ў] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[У мінулую] dddd [ў] LT";case 1:case 2:case 4:return"[У мінулы] dddd [ў] LT"}},sameElse:"L"},relativeTime:{future:"праз %s",past:"%s таму",s:"некалькі секунд",m:M,mm:M,h:M,hh:M,d:"дзень",dd:M,M:"месяц",MM:M,y:"год",yy:M},meridiemParse:/ночы|раніцы|дня|вечара/,isPM:function(e){return/^(дня|вечара)$/.test(e)},meridiem:function(e,M,t){return e<4?"ночы":e<12?"раніцы":e<17?"дня":"вечара"},dayOfMonthOrdinalParse:/\d{1,2}-(і|ы|га)/,ordinal:function(e,M){switch(M){case"M":case"d":case"DDD":case"w":case"W":return e%10!=2&&e%10!=3||e%100==12||e%100==13?e+"-ы":e+"-і";case"D":return e+"-га";default:return e}},week:{dow:1,doy:7}})}(t(381))},8338:function(e,M,t){!function(e){"use strict";e.defineLocale("bg",{months:"януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"),monthsShort:"яну_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"),weekdays:"неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"),weekdaysShort:"нед_пон_вто_сря_чет_пет_съб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Днес в] LT",nextDay:"[Утре в] LT",nextWeek:"dddd [в] LT",lastDay:"[Вчера в] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[Миналата] dddd [в] LT";case 1:case 2:case 4:case 5:return"[Миналия] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"след %s",past:"преди %s",s:"няколко секунди",ss:"%d секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дена",w:"седмица",ww:"%d седмици",M:"месец",MM:"%d месеца",y:"година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(e){var M=e%10,t=e%100;return 0===e?e+"-ев":0===t?e+"-ен":t>10&&t<20?e+"-ти":1===M?e+"-ви":2===M?e+"-ри":7===M||8===M?e+"-ми":e+"-ти"},week:{dow:1,doy:7}})}(t(381))},7438:function(e,M,t){!function(e){"use strict";e.defineLocale("bm",{months:"Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo".split("_"),monthsShort:"Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des".split("_"),weekdays:"Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri".split("_"),weekdaysShort:"Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib".split("_"),weekdaysMin:"Ka_Nt_Ta_Ar_Al_Ju_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"MMMM [tile] D [san] YYYY",LLL:"MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm",LLLL:"dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm"},calendar:{sameDay:"[Bi lɛrɛ] LT",nextDay:"[Sini lɛrɛ] LT",nextWeek:"dddd [don lɛrɛ] LT",lastDay:"[Kunu lɛrɛ] LT",lastWeek:"dddd [tɛmɛnen lɛrɛ] LT",sameElse:"L"},relativeTime:{future:"%s kɔnɔ",past:"a bɛ %s bɔ",s:"sanga dama dama",ss:"sekondi %d",m:"miniti kelen",mm:"miniti %d",h:"lɛrɛ kelen",hh:"lɛrɛ %d",d:"tile kelen",dd:"tile %d",M:"kalo kelen",MM:"kalo %d",y:"san kelen",yy:"san %d"},week:{dow:1,doy:4}})}(t(381))},6225:function(e,M,t){!function(e){"use strict";var M={1:"১",2:"২",3:"৩",4:"৪",5:"৫",6:"৬",7:"৭",8:"৮",9:"৯",0:"০"},t={"১":"1","২":"2","৩":"3","৪":"4","৫":"5","৬":"6","৭":"7","৮":"8","৯":"9","০":"0"};e.defineLocale("bn-bd",{months:"জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর".split("_"),monthsShort:"জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে".split("_"),weekdays:"রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার".split("_"),weekdaysShort:"রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি".split("_"),weekdaysMin:"রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি".split("_"),longDateFormat:{LT:"A h:mm সময়",LTS:"A h:mm:ss সময়",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm সময়",LLLL:"dddd, D MMMM YYYY, A h:mm সময়"},calendar:{sameDay:"[আজ] LT",nextDay:"[আগামীকাল] LT",nextWeek:"dddd, LT",lastDay:"[গতকাল] LT",lastWeek:"[গত] dddd, LT",sameElse:"L"},relativeTime:{future:"%s পরে",past:"%s আগে",s:"কয়েক সেকেন্ড",ss:"%d সেকেন্ড",m:"এক মিনিট",mm:"%d মিনিট",h:"এক ঘন্টা",hh:"%d ঘন্টা",d:"এক দিন",dd:"%d দিন",M:"এক মাস",MM:"%d মাস",y:"এক বছর",yy:"%d বছর"},preparse:function(e){return e.replace(/[১২৩৪৫৬৭৮৯০]/g,(function(e){return t[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return M[e]}))},meridiemParse:/রাত|ভোর|সকাল|দুপুর|বিকাল|সন্ধ্যা|রাত/,meridiemHour:function(e,M){return 12===e&&(e=0),"রাত"===M?e<4?e:e+12:"ভোর"===M||"সকাল"===M?e:"দুপুর"===M?e>=3?e:e+12:"বিকাল"===M||"সন্ধ্যা"===M?e+12:void 0},meridiem:function(e,M,t){return e<4?"রাত":e<6?"ভোর":e<12?"সকাল":e<15?"দুপুর":e<18?"বিকাল":e<20?"সন্ধ্যা":"রাত"},week:{dow:0,doy:6}})}(t(381))},8905:function(e,M,t){!function(e){"use strict";var M={1:"১",2:"২",3:"৩",4:"৪",5:"৫",6:"৬",7:"৭",8:"৮",9:"৯",0:"০"},t={"১":"1","২":"2","৩":"3","৪":"4","৫":"5","৬":"6","৭":"7","৮":"8","৯":"9","০":"0"};e.defineLocale("bn",{months:"জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর".split("_"),monthsShort:"জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে".split("_"),weekdays:"রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার".split("_"),weekdaysShort:"রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি".split("_"),weekdaysMin:"রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি".split("_"),longDateFormat:{LT:"A h:mm সময়",LTS:"A h:mm:ss সময়",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm সময়",LLLL:"dddd, D MMMM YYYY, A h:mm সময়"},calendar:{sameDay:"[আজ] LT",nextDay:"[আগামীকাল] LT",nextWeek:"dddd, LT",lastDay:"[গতকাল] LT",lastWeek:"[গত] dddd, LT",sameElse:"L"},relativeTime:{future:"%s পরে",past:"%s আগে",s:"কয়েক সেকেন্ড",ss:"%d সেকেন্ড",m:"এক মিনিট",mm:"%d মিনিট",h:"এক ঘন্টা",hh:"%d ঘন্টা",d:"এক দিন",dd:"%d দিন",M:"এক মাস",MM:"%d মাস",y:"এক বছর",yy:"%d বছর"},preparse:function(e){return e.replace(/[১২৩৪৫৬৭৮৯০]/g,(function(e){return t[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return M[e]}))},meridiemParse:/রাত|সকাল|দুপুর|বিকাল|রাত/,meridiemHour:function(e,M){return 12===e&&(e=0),"রাত"===M&&e>=4||"দুপুর"===M&&e<5||"বিকাল"===M?e+12:e},meridiem:function(e,M,t){return e<4?"রাত":e<10?"সকাল":e<17?"দুপুর":e<20?"বিকাল":"রাত"},week:{dow:0,doy:6}})}(t(381))},1560:function(e,M,t){!function(e){"use strict";var M={1:"༡",2:"༢",3:"༣",4:"༤",5:"༥",6:"༦",7:"༧",8:"༨",9:"༩",0:"༠"},t={"༡":"1","༢":"2","༣":"3","༤":"4","༥":"5","༦":"6","༧":"7","༨":"8","༩":"9","༠":"0"};e.defineLocale("bo",{months:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),monthsShort:"ཟླ་1_ཟླ་2_ཟླ་3_ཟླ་4_ཟླ་5_ཟླ་6_ཟླ་7_ཟླ་8_ཟླ་9_ཟླ་10_ཟླ་11_ཟླ་12".split("_"),monthsShortRegex:/^(ཟླ་\d{1,2})/,monthsParseExact:!0,weekdays:"གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་".split("_"),weekdaysShort:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),weekdaysMin:"ཉི_ཟླ_མིག_ལྷག_ཕུར_སངས_སྤེན".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[དི་རིང] LT",nextDay:"[སང་ཉིན] LT",nextWeek:"[བདུན་ཕྲག་རྗེས་མ], LT",lastDay:"[ཁ་སང] LT",lastWeek:"[བདུན་ཕྲག་མཐའ་མ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ལ་",past:"%s སྔན་ལ",s:"ལམ་སང",ss:"%d སྐར་ཆ།",m:"སྐར་མ་གཅིག",mm:"%d སྐར་མ",h:"ཆུ་ཚོད་གཅིག",hh:"%d ཆུ་ཚོད",d:"ཉིན་གཅིག",dd:"%d ཉིན་",M:"ཟླ་བ་གཅིག",MM:"%d ཟླ་བ",y:"ལོ་གཅིག",yy:"%d ལོ"},preparse:function(e){return e.replace(/[༡༢༣༤༥༦༧༨༩༠]/g,(function(e){return t[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return M[e]}))},meridiemParse:/མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,meridiemHour:function(e,M){return 12===e&&(e=0),"མཚན་མོ"===M&&e>=4||"ཉིན་གུང"===M&&e<5||"དགོང་དག"===M?e+12:e},meridiem:function(e,M,t){return e<4?"མཚན་མོ":e<10?"ཞོགས་ཀས":e<17?"ཉིན་གུང":e<20?"དགོང་དག":"མཚན་མོ"},week:{dow:0,doy:6}})}(t(381))},1278:function(e,M,t){!function(e){"use strict";function M(e,M,t){return e+" "+function(e,M){return 2===M?function(e){var M={m:"v",b:"v",d:"z"};return void 0===M[e.charAt(0)]?e:M[e.charAt(0)]+e.substring(1)}(e):e}({mm:"munutenn",MM:"miz",dd:"devezh"}[t],e)}function t(e){return e>9?t(e%10):e}var o=[/^gen/i,/^c[ʼ\']hwe/i,/^meu/i,/^ebr/i,/^mae/i,/^(mez|eve)/i,/^gou/i,/^eos/i,/^gwe/i,/^her/i,/^du/i,/^ker/i],n=/^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,b=[/^Su/i,/^Lu/i,/^Me([^r]|$)/i,/^Mer/i,/^Ya/i,/^Gw/i,/^Sa/i];e.defineLocale("br",{months:"Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),weekdaysParse:b,fullWeekdaysParse:[/^sul/i,/^lun/i,/^meurzh/i,/^merc[ʼ\']her/i,/^yaou/i,/^gwener/i,/^sadorn/i],shortWeekdaysParse:[/^Sul/i,/^Lun/i,/^Meu/i,/^Mer/i,/^Yao/i,/^Gwe/i,/^Sad/i],minWeekdaysParse:b,monthsRegex:n,monthsShortRegex:n,monthsStrictRegex:/^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,monthsShortStrictRegex:/^(gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,monthsParse:o,longMonthsParse:o,shortMonthsParse:o,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY HH:mm",LLLL:"dddd, D [a viz] MMMM YYYY HH:mm"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warcʼhoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Decʼh da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s ʼzo",s:"un nebeud segondennoù",ss:"%d eilenn",m:"ur vunutenn",mm:M,h:"un eur",hh:"%d eur",d:"un devezh",dd:M,M:"ur miz",MM:M,y:"ur bloaz",yy:function(e){switch(t(e)){case 1:case 3:case 4:case 5:case 9:return e+" bloaz";default:return e+" vloaz"}}},dayOfMonthOrdinalParse:/\d{1,2}(añ|vet)/,ordinal:function(e){return e+(1===e?"añ":"vet")},week:{dow:1,doy:4},meridiemParse:/a.m.|g.m./,isPM:function(e){return"g.m."===e},meridiem:function(e,M,t){return e<12?"a.m.":"g.m."}})}(t(381))},622:function(e,M,t){!function(e){"use strict";function M(e,M,t){var o=e+" ";switch(t){case"ss":return o+(1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi");case"m":return M?"jedna minuta":"jedne minute";case"mm":return o+(1===e?"minuta":2===e||3===e||4===e?"minute":"minuta");case"h":return M?"jedan sat":"jednog sata";case"hh":return o+(1===e?"sat":2===e||3===e||4===e?"sata":"sati");case"dd":return o+(1===e?"dan":"dana");case"MM":return o+(1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci");case"yy":return o+(1===e?"godina":2===e||3===e||4===e?"godine":"godina")}}e.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:M,m:M,mm:M,h:M,hh:M,d:"dan",dd:M,M:"mjesec",MM:M,y:"godinu",yy:M},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(t(381))},2468:function(e,M,t){!function(e){"use strict";e.defineLocale("ca",{months:{standalone:"gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),format:"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:!0,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dt_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[demà a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aquí %s",past:"fa %s",s:"uns segons",ss:"%d segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|è|a)/,ordinal:function(e,M){var t=1===e?"r":2===e?"n":3===e?"r":4===e?"t":"è";return"w"!==M&&"W"!==M||(t="a"),e+t},week:{dow:1,doy:4}})}(t(381))},5822:function(e,M,t){!function(e){"use strict";var M={format:"leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),standalone:"ledna_února_března_dubna_května_června_července_srpna_září_října_listopadu_prosince".split("_")},t="led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_"),o=[/^led/i,/^úno/i,/^bře/i,/^dub/i,/^kvě/i,/^(čvn|červen$|června)/i,/^(čvc|červenec|července)/i,/^srp/i,/^zář/i,/^říj/i,/^lis/i,/^pro/i],n=/^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;function b(e){return e>1&&e<5&&1!=~~(e/10)}function p(e,M,t,o){var n=e+" ";switch(t){case"s":return M||o?"pár sekund":"pár sekundami";case"ss":return M||o?n+(b(e)?"sekundy":"sekund"):n+"sekundami";case"m":return M?"minuta":o?"minutu":"minutou";case"mm":return M||o?n+(b(e)?"minuty":"minut"):n+"minutami";case"h":return M?"hodina":o?"hodinu":"hodinou";case"hh":return M||o?n+(b(e)?"hodiny":"hodin"):n+"hodinami";case"d":return M||o?"den":"dnem";case"dd":return M||o?n+(b(e)?"dny":"dní"):n+"dny";case"M":return M||o?"měsíc":"měsícem";case"MM":return M||o?n+(b(e)?"měsíce":"měsíců"):n+"měsíci";case"y":return M||o?"rok":"rokem";case"yy":return M||o?n+(b(e)?"roky":"let"):n+"lety"}}e.defineLocale("cs",{months:M,monthsShort:t,monthsRegex:n,monthsShortRegex:n,monthsStrictRegex:/^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,monthsShortStrictRegex:/^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,monthsParse:o,longMonthsParse:o,shortMonthsParse:o,weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[zítra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v neděli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve středu v] LT";case 4:return"[ve čtvrtek v] LT";case 5:return"[v pátek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[včera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou neděli v] LT";case 1:case 2:return"[minulé] dddd [v] LT";case 3:return"[minulou středu v] LT";case 4:case 5:return"[minulý] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"před %s",s:p,ss:p,m:p,mm:p,h:p,hh:p,d:p,dd:p,M:p,MM:p,y:p,yy:p},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(t(381))},877:function(e,M,t){!function(e){"use strict";e.defineLocale("cv",{months:"кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав".split("_"),monthsShort:"кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш".split("_"),weekdays:"вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун".split("_"),weekdaysShort:"выр_тун_ытл_юн_кӗҫ_эрн_шӑм".split("_"),weekdaysMin:"вр_тн_ыт_юн_кҫ_эр_шм".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]",LLL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm",LLLL:"dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm"},calendar:{sameDay:"[Паян] LT [сехетре]",nextDay:"[Ыран] LT [сехетре]",lastDay:"[Ӗнер] LT [сехетре]",nextWeek:"[Ҫитес] dddd LT [сехетре]",lastWeek:"[Иртнӗ] dddd LT [сехетре]",sameElse:"L"},relativeTime:{future:function(e){return e+(/сехет$/i.exec(e)?"рен":/ҫул$/i.exec(e)?"тан":"ран")},past:"%s каялла",s:"пӗр-ик ҫеккунт",ss:"%d ҫеккунт",m:"пӗр минут",mm:"%d минут",h:"пӗр сехет",hh:"%d сехет",d:"пӗр кун",dd:"%d кун",M:"пӗр уйӑх",MM:"%d уйӑх",y:"пӗр ҫул",yy:"%d ҫул"},dayOfMonthOrdinalParse:/\d{1,2}-мӗш/,ordinal:"%d-мӗш",week:{dow:1,doy:7}})}(t(381))},7373:function(e,M,t){!function(e){"use strict";e.defineLocale("cy",{months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Heddiw am] LT",nextDay:"[Yfory am] LT",nextWeek:"dddd [am] LT",lastDay:"[Ddoe am] LT",lastWeek:"dddd [diwethaf am] LT",sameElse:"L"},relativeTime:{future:"mewn %s",past:"%s yn ôl",s:"ychydig eiliadau",ss:"%d eiliad",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"},dayOfMonthOrdinalParse:/\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,ordinal:function(e){var M="";return e>20?M=40===e||50===e||60===e||80===e||100===e?"fed":"ain":e>0&&(M=["","af","il","ydd","ydd","ed","ed","ed","fed","fed","fed","eg","fed","eg","eg","fed","eg","eg","fed","eg","fed"][e]),e+M},week:{dow:1,doy:4}})}(t(381))},4780:function(e,M,t){!function(e){"use strict";e.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn_man_tir_ons_tor_fre_lør".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"på dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[i] dddd[s kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",ss:"%d sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(t(381))},217:function(e,M,t){!function(e){"use strict";function M(e,M,t,o){var n={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return M?n[t][0]:n[t][1]}e.defineLocale("de-at",{months:"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:M,mm:"%d Minuten",h:M,hh:"%d Stunden",d:M,dd:M,w:M,ww:"%d Wochen",M,MM:M,y:M,yy:M},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(t(381))},894:function(e,M,t){!function(e){"use strict";function M(e,M,t,o){var n={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return M?n[t][0]:n[t][1]}e.defineLocale("de-ch",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:M,mm:"%d Minuten",h:M,hh:"%d Stunden",d:M,dd:M,w:M,ww:"%d Wochen",M,MM:M,y:M,yy:M},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(t(381))},9740:function(e,M,t){!function(e){"use strict";function M(e,M,t,o){var n={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return M?n[t][0]:n[t][1]}e.defineLocale("de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:M,mm:"%d Minuten",h:M,hh:"%d Stunden",d:M,dd:M,w:M,ww:"%d Wochen",M,MM:M,y:M,yy:M},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(t(381))},5300:function(e,M,t){!function(e){"use strict";var M=["ޖެނުއަރީ","ފެބްރުއަރީ","މާރިޗު","އޭޕްރީލު","މޭ","ޖޫން","ޖުލައި","އޯގަސްޓު","ސެޕްޓެމްބަރު","އޮކްޓޯބަރު","ނޮވެމްބަރު","ޑިސެމްބަރު"],t=["އާދިއްތަ","ހޯމަ","އަންގާރަ","ބުދަ","ބުރާސްފަތި","ހުކުރު","ހޮނިހިރު"];e.defineLocale("dv",{months:M,monthsShort:M,weekdays:t,weekdaysShort:t,weekdaysMin:"އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/މކ|މފ/,isPM:function(e){return"މފ"===e},meridiem:function(e,M,t){return e<12?"މކ":"މފ"},calendar:{sameDay:"[މިއަދު] LT",nextDay:"[މާދަމާ] LT",nextWeek:"dddd LT",lastDay:"[އިއްޔެ] LT",lastWeek:"[ފާއިތުވި] dddd LT",sameElse:"L"},relativeTime:{future:"ތެރޭގައި %s",past:"ކުރިން %s",s:"ސިކުންތުކޮޅެއް",ss:"d% ސިކުންތު",m:"މިނިޓެއް",mm:"މިނިޓު %d",h:"ގަޑިއިރެއް",hh:"ގަޑިއިރު %d",d:"ދުވަހެއް",dd:"ދުވަސް %d",M:"މަހެއް",MM:"މަސް %d",y:"އަހަރެއް",yy:"އަހަރު %d"},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/,/g,"،")},week:{dow:7,doy:12}})}(t(381))},837:function(e,M,t){!function(e){"use strict";e.defineLocale("el",{monthsNominativeEl:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsGenitiveEl:"Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"),months:function(e,M){return e?"string"==typeof M&&/D/.test(M.substring(0,M.indexOf("MMMM")))?this._monthsGenitiveEl[e.month()]:this._monthsNominativeEl[e.month()]:this._monthsNominativeEl},monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"),weekdays:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),weekdaysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),weekdaysMin:"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),meridiem:function(e,M,t){return e>11?t?"μμ":"ΜΜ":t?"πμ":"ΠΜ"},isPM:function(e){return"μ"===(e+"").toLowerCase()[0]},meridiemParse:/[ΠΜ]\.?Μ?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[Σήμερα {}] LT",nextDay:"[Αύριο {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[Χθες {}] LT",lastWeek:function(){return 6===this.day()?"[το προηγούμενο] dddd [{}] LT":"[την προηγούμενη] dddd [{}] LT"},sameElse:"L"},calendar:function(e,M){var t,o=this._calendarEl[e],n=M&&M.hours();return t=o,("undefined"!=typeof Function&&t instanceof Function||"[object Function]"===Object.prototype.toString.call(t))&&(o=o.apply(M)),o.replace("{}",n%12==1?"στη":"στις")},relativeTime:{future:"σε %s",past:"%s πριν",s:"λίγα δευτερόλεπτα",ss:"%d δευτερόλεπτα",m:"ένα λεπτό",mm:"%d λεπτά",h:"μία ώρα",hh:"%d ώρες",d:"μία μέρα",dd:"%d μέρες",M:"ένας μήνας",MM:"%d μήνες",y:"ένας χρόνος",yy:"%d χρόνια"},dayOfMonthOrdinalParse:/\d{1,2}η/,ordinal:"%dη",week:{dow:1,doy:4}})}(t(381))},8348:function(e,M,t){!function(e){"use strict";e.defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var M=e%10;return e+(1==~~(e%100/10)?"th":1===M?"st":2===M?"nd":3===M?"rd":"th")},week:{dow:0,doy:4}})}(t(381))},7925:function(e,M,t){!function(e){"use strict";e.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var M=e%10;return e+(1==~~(e%100/10)?"th":1===M?"st":2===M?"nd":3===M?"rd":"th")}})}(t(381))},2243:function(e,M,t){!function(e){"use strict";e.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var M=e%10;return e+(1==~~(e%100/10)?"th":1===M?"st":2===M?"nd":3===M?"rd":"th")},week:{dow:1,doy:4}})}(t(381))},6436:function(e,M,t){!function(e){"use strict";e.defineLocale("en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var M=e%10;return e+(1==~~(e%100/10)?"th":1===M?"st":2===M?"nd":3===M?"rd":"th")},week:{dow:1,doy:4}})}(t(381))},7207:function(e,M,t){!function(e){"use strict";e.defineLocale("en-il",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var M=e%10;return e+(1==~~(e%100/10)?"th":1===M?"st":2===M?"nd":3===M?"rd":"th")}})}(t(381))},4175:function(e,M,t){!function(e){"use strict";e.defineLocale("en-in",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var M=e%10;return e+(1==~~(e%100/10)?"th":1===M?"st":2===M?"nd":3===M?"rd":"th")},week:{dow:0,doy:6}})}(t(381))},6319:function(e,M,t){!function(e){"use strict";e.defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var M=e%10;return e+(1==~~(e%100/10)?"th":1===M?"st":2===M?"nd":3===M?"rd":"th")},week:{dow:1,doy:4}})}(t(381))},1662:function(e,M,t){!function(e){"use strict";e.defineLocale("en-sg",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var M=e%10;return e+(1==~~(e%100/10)?"th":1===M?"st":2===M?"nd":3===M?"rd":"th")},week:{dow:1,doy:4}})}(t(381))},2915:function(e,M,t){!function(e){"use strict";e.defineLocale("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mart_apr_maj_jun_jul_aŭg_sept_okt_nov_dec".split("_"),weekdays:"dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato".split("_"),weekdaysShort:"dim_lun_mard_merk_ĵaŭ_ven_sab".split("_"),weekdaysMin:"di_lu_ma_me_ĵa_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"[la] D[-an de] MMMM, YYYY",LLL:"[la] D[-an de] MMMM, YYYY HH:mm",LLLL:"dddd[n], [la] D[-an de] MMMM, YYYY HH:mm",llll:"ddd, [la] D[-an de] MMM, YYYY HH:mm"},meridiemParse:/[ap]\.t\.m/i,isPM:function(e){return"p"===e.charAt(0).toLowerCase()},meridiem:function(e,M,t){return e>11?t?"p.t.m.":"P.T.M.":t?"a.t.m.":"A.T.M."},calendar:{sameDay:"[Hodiaŭ je] LT",nextDay:"[Morgaŭ je] LT",nextWeek:"dddd[n je] LT",lastDay:"[Hieraŭ je] LT",lastWeek:"[pasintan] dddd[n je] LT",sameElse:"L"},relativeTime:{future:"post %s",past:"antaŭ %s",s:"kelkaj sekundoj",ss:"%d sekundoj",m:"unu minuto",mm:"%d minutoj",h:"unu horo",hh:"%d horoj",d:"unu tago",dd:"%d tagoj",M:"unu monato",MM:"%d monatoj",y:"unu jaro",yy:"%d jaroj"},dayOfMonthOrdinalParse:/\d{1,2}a/,ordinal:"%da",week:{dow:1,doy:7}})}(t(381))},2088:function(e,M,t){!function(e){"use strict";var M="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),t="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),o=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],n=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;e.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,o){return e?/-MMM-/.test(o)?t[e.month()]:M[e.month()]:M},monthsRegex:n,monthsShortRegex:n,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:o,longMonthsParse:o,shortMonthsParse:o,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(t(381))},6112:function(e,M,t){!function(e){"use strict";var M="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),t="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),o=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],n=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;e.defineLocale("es-mx",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,o){return e?/-MMM-/.test(o)?t[e.month()]:M[e.month()]:M},monthsRegex:n,monthsShortRegex:n,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:o,longMonthsParse:o,shortMonthsParse:o,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:0,doy:4},invalidDate:"Fecha inválida"})}(t(381))},1146:function(e,M,t){!function(e){"use strict";var M="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),t="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),o=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],n=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;e.defineLocale("es-us",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,o){return e?/-MMM-/.test(o)?t[e.month()]:M[e.month()]:M},monthsRegex:n,monthsShortRegex:n,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:o,longMonthsParse:o,shortMonthsParse:o,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"MM/DD/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:0,doy:6}})}(t(381))},5655:function(e,M,t){!function(e){"use strict";var M="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),t="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),o=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],n=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;e.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,o){return e?/-MMM-/.test(o)?t[e.month()]:M[e.month()]:M},monthsRegex:n,monthsShortRegex:n,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:o,longMonthsParse:o,shortMonthsParse:o,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4},invalidDate:"Fecha inválida"})}(t(381))},5603:function(e,M,t){!function(e){"use strict";function M(e,M,t,o){var n={s:["mõne sekundi","mõni sekund","paar sekundit"],ss:[e+"sekundi",e+"sekundit"],m:["ühe minuti","üks minut"],mm:[e+" minuti",e+" minutit"],h:["ühe tunni","tund aega","üks tund"],hh:[e+" tunni",e+" tundi"],d:["ühe päeva","üks päev"],M:["kuu aja","kuu aega","üks kuu"],MM:[e+" kuu",e+" kuud"],y:["ühe aasta","aasta","üks aasta"],yy:[e+" aasta",e+" aastat"]};return M?n[t][2]?n[t][2]:n[t][1]:o?n[t][0]:n[t][1]}e.defineLocale("et",{months:"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[Täna,] LT",nextDay:"[Homme,] LT",nextWeek:"[Järgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s pärast",past:"%s tagasi",s:M,ss:M,m:M,mm:M,h:M,hh:M,d:M,dd:"%d päeva",M,MM:M,y:M,yy:M},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(t(381))},7763:function(e,M,t){!function(e){"use strict";e.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:!0,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",ss:"%d segundo",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(t(381))},6959:function(e,M,t){!function(e){"use strict";var M={1:"۱",2:"۲",3:"۳",4:"۴",5:"۵",6:"۶",7:"۷",8:"۸",9:"۹",0:"۰"},t={"۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9","۰":"0"};e.defineLocale("fa",{months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),weekdays:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysShort:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_پ_ج_ش".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/قبل از ظهر|بعد از ظهر/,isPM:function(e){return/بعد از ظهر/.test(e)},meridiem:function(e,M,t){return e<12?"قبل از ظهر":"بعد از ظهر"},calendar:{sameDay:"[امروز ساعت] LT",nextDay:"[فردا ساعت] LT",nextWeek:"dddd [ساعت] LT",lastDay:"[دیروز ساعت] LT",lastWeek:"dddd [پیش] [ساعت] LT",sameElse:"L"},relativeTime:{future:"در %s",past:"%s پیش",s:"چند ثانیه",ss:"%d ثانیه",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"},preparse:function(e){return e.replace(/[۰-۹]/g,(function(e){return t[e]})).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,(function(e){return M[e]})).replace(/,/g,"،")},dayOfMonthOrdinalParse:/\d{1,2}م/,ordinal:"%dم",week:{dow:6,doy:12}})}(t(381))},1897:function(e,M,t){!function(e){"use strict";var M="nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän".split(" "),t=["nolla","yhden","kahden","kolmen","neljän","viiden","kuuden",M[7],M[8],M[9]];function o(e,o,n,b){var p="";switch(n){case"s":return b?"muutaman sekunnin":"muutama sekunti";case"ss":p=b?"sekunnin":"sekuntia";break;case"m":return b?"minuutin":"minuutti";case"mm":p=b?"minuutin":"minuuttia";break;case"h":return b?"tunnin":"tunti";case"hh":p=b?"tunnin":"tuntia";break;case"d":return b?"päivän":"päivä";case"dd":p=b?"päivän":"päivää";break;case"M":return b?"kuukauden":"kuukausi";case"MM":p=b?"kuukauden":"kuukautta";break;case"y":return b?"vuoden":"vuosi";case"yy":p=b?"vuoden":"vuotta"}return function(e,o){return e<10?o?t[e]:M[e]:e}(e,b)+" "+p}e.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[tänään] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s päästä",past:"%s sitten",s:o,ss:o,m:o,mm:o,h:o,hh:o,d:o,dd:o,M:o,MM:o,y:o,yy:o},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(t(381))},2549:function(e,M,t){!function(e){"use strict";e.defineLocale("fil",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}})}(t(381))},4694:function(e,M,t){!function(e){"use strict";e.defineLocale("fo",{months:"januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur".split("_"),weekdaysShort:"sun_mán_týs_mik_hós_frí_ley".split("_"),weekdaysMin:"su_má_tý_mi_hó_fr_le".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},calendar:{sameDay:"[Í dag kl.] LT",nextDay:"[Í morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[Í gjár kl.] LT",lastWeek:"[síðstu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s síðani",s:"fá sekund",ss:"%d sekundir",m:"ein minuttur",mm:"%d minuttir",h:"ein tími",hh:"%d tímar",d:"ein dagur",dd:"%d dagar",M:"ein mánaður",MM:"%d mánaðir",y:"eitt ár",yy:"%d ár"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(t(381))},3049:function(e,M,t){!function(e){"use strict";e.defineLocale("fr-ca",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,M){switch(M){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}}})}(t(381))},2330:function(e,M,t){!function(e){"use strict";e.defineLocale("fr-ch",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,M){switch(M){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}})}(t(381))},4470:function(e,M,t){!function(e){"use strict";var M=/(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?|janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,t=[/^janv/i,/^févr/i,/^mars/i,/^avr/i,/^mai/i,/^juin/i,/^juil/i,/^août/i,/^sept/i,/^oct/i,/^nov/i,/^déc/i];e.defineLocale("fr",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsRegex:M,monthsShortRegex:M,monthsStrictRegex:/^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,monthsShortStrictRegex:/(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?)/i,monthsParse:t,longMonthsParse:t,shortMonthsParse:t,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",w:"une semaine",ww:"%d semaines",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal:function(e,M){switch(M){case"D":return e+(1===e?"er":"");default:case"M":case"Q":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}})}(t(381))},5044:function(e,M,t){!function(e){"use strict";var M="jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_"),t="jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_");e.defineLocale("fy",{months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:function(e,o){return e?/-MMM-/.test(o)?t[e.month()]:M[e.month()]:M},monthsParseExact:!0,weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[hjoed om] LT",nextDay:"[moarn om] LT",nextWeek:"dddd [om] LT",lastDay:"[juster om] LT",lastWeek:"[ôfrûne] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",ss:"%d sekonden",m:"ien minút",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})}(t(381))},9295:function(e,M,t){!function(e){"use strict";e.defineLocale("ga",{months:["Eanáir","Feabhra","Márta","Aibreán","Bealtaine","Meitheamh","Iúil","Lúnasa","Meán Fómhair","Deireadh Fómhair","Samhain","Nollaig"],monthsShort:["Ean","Feabh","Márt","Aib","Beal","Meith","Iúil","Lún","M.F.","D.F.","Samh","Noll"],monthsParseExact:!0,weekdays:["Dé Domhnaigh","Dé Luain","Dé Máirt","Dé Céadaoin","Déardaoin","Dé hAoine","Dé Sathairn"],weekdaysShort:["Domh","Luan","Máirt","Céad","Déar","Aoine","Sath"],weekdaysMin:["Do","Lu","Má","Cé","Dé","A","Sa"],longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Inniu ag] LT",nextDay:"[Amárach ag] LT",nextWeek:"dddd [ag] LT",lastDay:"[Inné ag] LT",lastWeek:"dddd [seo caite] [ag] LT",sameElse:"L"},relativeTime:{future:"i %s",past:"%s ó shin",s:"cúpla soicind",ss:"%d soicind",m:"nóiméad",mm:"%d nóiméad",h:"uair an chloig",hh:"%d uair an chloig",d:"lá",dd:"%d lá",M:"mí",MM:"%d míonna",y:"bliain",yy:"%d bliain"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(e){return e+(1===e?"d":e%10==2?"na":"mh")},week:{dow:1,doy:4}})}(t(381))},2101:function(e,M,t){!function(e){"use strict";e.defineLocale("gd",{months:["Am Faoilleach","An Gearran","Am Màrt","An Giblean","An Cèitean","An t-Ògmhios","An t-Iuchar","An Lùnastal","An t-Sultain","An Dàmhair","An t-Samhain","An Dùbhlachd"],monthsShort:["Faoi","Gear","Màrt","Gibl","Cèit","Ògmh","Iuch","Lùn","Sult","Dàmh","Samh","Dùbh"],monthsParseExact:!0,weekdays:["Didòmhnaich","Diluain","Dimàirt","Diciadain","Diardaoin","Dihaoine","Disathairne"],weekdaysShort:["Did","Dil","Dim","Dic","Dia","Dih","Dis"],weekdaysMin:["Dò","Lu","Mà","Ci","Ar","Ha","Sa"],longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[An-diugh aig] LT",nextDay:"[A-màireach aig] LT",nextWeek:"dddd [aig] LT",lastDay:"[An-dè aig] LT",lastWeek:"dddd [seo chaidh] [aig] LT",sameElse:"L"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",ss:"%d diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"mìos",MM:"%d mìosan",y:"bliadhna",yy:"%d bliadhna"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(e){return e+(1===e?"d":e%10==2?"na":"mh")},week:{dow:1,doy:4}})}(t(381))},8794:function(e,M,t){!function(e){"use strict";e.defineLocale("gl",{months:"xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),monthsShort:"xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"domingo_luns_martes_mércores_xoves_venres_sábado".split("_"),weekdaysShort:"dom._lun._mar._mér._xov._ven._sáb.".split("_"),weekdaysMin:"do_lu_ma_mé_xo_ve_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"ás":"á")+"] LT"},nextDay:function(){return"[mañá "+(1!==this.hours()?"ás":"á")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"ás":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"á":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"ás":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(e){return 0===e.indexOf("un")?"n"+e:"en "+e},past:"hai %s",s:"uns segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(t(381))},7884:function(e,M,t){!function(e){"use strict";function M(e,M,t,o){var n={s:["थोडया सॅकंडांनी","थोडे सॅकंड"],ss:[e+" सॅकंडांनी",e+" सॅकंड"],m:["एका मिणटान","एक मिनूट"],mm:[e+" मिणटांनी",e+" मिणटां"],h:["एका वरान","एक वर"],hh:[e+" वरांनी",e+" वरां"],d:["एका दिसान","एक दीस"],dd:[e+" दिसांनी",e+" दीस"],M:["एका म्हयन्यान","एक म्हयनो"],MM:[e+" म्हयन्यानी",e+" म्हयने"],y:["एका वर्सान","एक वर्स"],yy:[e+" वर्सांनी",e+" वर्सां"]};return o?n[t][0]:n[t][1]}e.defineLocale("gom-deva",{months:{standalone:"जानेवारी_फेब्रुवारी_मार्च_एप्रील_मे_जून_जुलय_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर".split("_"),format:"जानेवारीच्या_फेब्रुवारीच्या_मार्चाच्या_एप्रीलाच्या_मेयाच्या_जूनाच्या_जुलयाच्या_ऑगस्टाच्या_सप्टेंबराच्या_ऑक्टोबराच्या_नोव्हेंबराच्या_डिसेंबराच्या".split("_"),isFormat:/MMMM(\s)+D[oD]?/},monthsShort:"जाने._फेब्रु._मार्च_एप्री._मे_जून_जुल._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.".split("_"),monthsParseExact:!0,weekdays:"आयतार_सोमार_मंगळार_बुधवार_बिरेस्तार_सुक्रार_शेनवार".split("_"),weekdaysShort:"आयत._सोम._मंगळ._बुध._ब्रेस्त._सुक्र._शेन.".split("_"),weekdaysMin:"आ_सो_मं_बु_ब्रे_सु_शे".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [वाजतां]",LTS:"A h:mm:ss [वाजतां]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [वाजतां]",LLLL:"dddd, MMMM Do, YYYY, A h:mm [वाजतां]",llll:"ddd, D MMM YYYY, A h:mm [वाजतां]"},calendar:{sameDay:"[आयज] LT",nextDay:"[फाल्यां] LT",nextWeek:"[फुडलो] dddd[,] LT",lastDay:"[काल] LT",lastWeek:"[फाटलो] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s आदीं",s:M,ss:M,m:M,mm:M,h:M,hh:M,d:M,dd:M,M,MM:M,y:M,yy:M},dayOfMonthOrdinalParse:/\d{1,2}(वेर)/,ordinal:function(e,M){return"D"===M?e+"वेर":e},week:{dow:0,doy:3},meridiemParse:/राती|सकाळीं|दनपारां|सांजे/,meridiemHour:function(e,M){return 12===e&&(e=0),"राती"===M?e<4?e:e+12:"सकाळीं"===M?e:"दनपारां"===M?e>12?e:e+12:"सांजे"===M?e+12:void 0},meridiem:function(e,M,t){return e<4?"राती":e<12?"सकाळीं":e<16?"दनपारां":e<20?"सांजे":"राती"}})}(t(381))},3168:function(e,M,t){!function(e){"use strict";function M(e,M,t,o){var n={s:["thoddea sekondamni","thodde sekond"],ss:[e+" sekondamni",e+" sekond"],m:["eka mintan","ek minut"],mm:[e+" mintamni",e+" mintam"],h:["eka voran","ek vor"],hh:[e+" voramni",e+" voram"],d:["eka disan","ek dis"],dd:[e+" disamni",e+" dis"],M:["eka mhoinean","ek mhoino"],MM:[e+" mhoineamni",e+" mhoine"],y:["eka vorsan","ek voros"],yy:[e+" vorsamni",e+" vorsam"]};return o?n[t][0]:n[t][1]}e.defineLocale("gom-latn",{months:{standalone:"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr".split("_"),format:"Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea".split("_"),isFormat:/MMMM(\s)+D[oD]?/},monthsShort:"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var".split("_"),weekdaysShort:"Ait._Som._Mon._Bud._Bre._Suk._Son.".split("_"),weekdaysMin:"Ai_Sm_Mo_Bu_Br_Su_Sn".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [vazta]",LTS:"A h:mm:ss [vazta]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [vazta]",LLLL:"dddd, MMMM Do, YYYY, A h:mm [vazta]",llll:"ddd, D MMM YYYY, A h:mm [vazta]"},calendar:{sameDay:"[Aiz] LT",nextDay:"[Faleam] LT",nextWeek:"[Fuddlo] dddd[,] LT",lastDay:"[Kal] LT",lastWeek:"[Fattlo] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s adim",s:M,ss:M,m:M,mm:M,h:M,hh:M,d:M,dd:M,M,MM:M,y:M,yy:M},dayOfMonthOrdinalParse:/\d{1,2}(er)/,ordinal:function(e,M){return"D"===M?e+"er":e},week:{dow:0,doy:3},meridiemParse:/rati|sokallim|donparam|sanje/,meridiemHour:function(e,M){return 12===e&&(e=0),"rati"===M?e<4?e:e+12:"sokallim"===M?e:"donparam"===M?e>12?e:e+12:"sanje"===M?e+12:void 0},meridiem:function(e,M,t){return e<4?"rati":e<12?"sokallim":e<16?"donparam":e<20?"sanje":"rati"}})}(t(381))},5349:function(e,M,t){!function(e){"use strict";var M={1:"૧",2:"૨",3:"૩",4:"૪",5:"૫",6:"૬",7:"૭",8:"૮",9:"૯",0:"૦"},t={"૧":"1","૨":"2","૩":"3","૪":"4","૫":"5","૬":"6","૭":"7","૮":"8","૯":"9","૦":"0"};e.defineLocale("gu",{months:"જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર".split("_"),monthsShort:"જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.".split("_"),monthsParseExact:!0,weekdays:"રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર".split("_"),weekdaysShort:"રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ".split("_"),weekdaysMin:"ર_સો_મં_બુ_ગુ_શુ_શ".split("_"),longDateFormat:{LT:"A h:mm વાગ્યે",LTS:"A h:mm:ss વાગ્યે",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm વાગ્યે",LLLL:"dddd, D MMMM YYYY, A h:mm વાગ્યે"},calendar:{sameDay:"[આજ] LT",nextDay:"[કાલે] LT",nextWeek:"dddd, LT",lastDay:"[ગઇકાલે] LT",lastWeek:"[પાછલા] dddd, LT",sameElse:"L"},relativeTime:{future:"%s મા",past:"%s પહેલા",s:"અમુક પળો",ss:"%d સેકંડ",m:"એક મિનિટ",mm:"%d મિનિટ",h:"એક કલાક",hh:"%d કલાક",d:"એક દિવસ",dd:"%d દિવસ",M:"એક મહિનો",MM:"%d મહિનો",y:"એક વર્ષ",yy:"%d વર્ષ"},preparse:function(e){return e.replace(/[૧૨૩૪૫૬૭૮૯૦]/g,(function(e){return t[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return M[e]}))},meridiemParse:/રાત|બપોર|સવાર|સાંજ/,meridiemHour:function(e,M){return 12===e&&(e=0),"રાત"===M?e<4?e:e+12:"સવાર"===M?e:"બપોર"===M?e>=10?e:e+12:"સાંજ"===M?e+12:void 0},meridiem:function(e,M,t){return e<4?"રાત":e<10?"સવાર":e<17?"બપોર":e<20?"સાંજ":"રાત"},week:{dow:0,doy:6}})}(t(381))},4206:function(e,M,t){!function(e){"use strict";e.defineLocale("he",{months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"),weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א_ב_ג_ד_ה_ו_ש".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[היום ב־]LT",nextDay:"[מחר ב־]LT",nextWeek:"dddd [בשעה] LT",lastDay:"[אתמול ב־]LT",lastWeek:"[ביום] dddd [האחרון בשעה] LT",sameElse:"L"},relativeTime:{future:"בעוד %s",past:"לפני %s",s:"מספר שניות",ss:"%d שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:function(e){return 2===e?"שעתיים":e+" שעות"},d:"יום",dd:function(e){return 2===e?"יומיים":e+" ימים"},M:"חודש",MM:function(e){return 2===e?"חודשיים":e+" חודשים"},y:"שנה",yy:function(e){return 2===e?"שנתיים":e%10==0&&10!==e?e+" שנה":e+" שנים"}},meridiemParse:/אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,isPM:function(e){return/^(אחה"צ|אחרי הצהריים|בערב)$/.test(e)},meridiem:function(e,M,t){return e<5?"לפנות בוקר":e<10?"בבוקר":e<12?t?'לפנה"צ':"לפני הצהריים":e<18?t?'אחה"צ':"אחרי הצהריים":"בערב"}})}(t(381))},94:function(e,M,t){!function(e){"use strict";var M={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},t={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"},o=[/^जन/i,/^फ़र|फर/i,/^मार्च/i,/^अप्रै/i,/^मई/i,/^जून/i,/^जुल/i,/^अग/i,/^सितं|सित/i,/^अक्टू/i,/^नव|नवं/i,/^दिसं|दिस/i];e.defineLocale("hi",{months:{format:"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर".split("_"),standalone:"जनवरी_फरवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितंबर_अक्टूबर_नवंबर_दिसंबर".split("_")},monthsShort:"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.".split("_"),weekdays:"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm बजे",LTS:"A h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm बजे",LLLL:"dddd, D MMMM YYYY, A h:mm बजे"},monthsParse:o,longMonthsParse:o,shortMonthsParse:[/^जन/i,/^फ़र/i,/^मार्च/i,/^अप्रै/i,/^मई/i,/^जून/i,/^जुल/i,/^अग/i,/^सित/i,/^अक्टू/i,/^नव/i,/^दिस/i],monthsRegex:/^(जनवरी|जन\.?|फ़रवरी|फरवरी|फ़र\.?|मार्च?|अप्रैल|अप्रै\.?|मई?|जून?|जुलाई|जुल\.?|अगस्त|अग\.?|सितम्बर|सितंबर|सित\.?|अक्टूबर|अक्टू\.?|नवम्बर|नवंबर|नव\.?|दिसम्बर|दिसंबर|दिस\.?)/i,monthsShortRegex:/^(जनवरी|जन\.?|फ़रवरी|फरवरी|फ़र\.?|मार्च?|अप्रैल|अप्रै\.?|मई?|जून?|जुलाई|जुल\.?|अगस्त|अग\.?|सितम्बर|सितंबर|सित\.?|अक्टूबर|अक्टू\.?|नवम्बर|नवंबर|नव\.?|दिसम्बर|दिसंबर|दिस\.?)/i,monthsStrictRegex:/^(जनवरी?|फ़रवरी|फरवरी?|मार्च?|अप्रैल?|मई?|जून?|जुलाई?|अगस्त?|सितम्बर|सितंबर|सित?\.?|अक्टूबर|अक्टू\.?|नवम्बर|नवंबर?|दिसम्बर|दिसंबर?)/i,monthsShortStrictRegex:/^(जन\.?|फ़र\.?|मार्च?|अप्रै\.?|मई?|जून?|जुल\.?|अग\.?|सित\.?|अक्टू\.?|नव\.?|दिस\.?)/i,calendar:{sameDay:"[आज] LT",nextDay:"[कल] LT",nextWeek:"dddd, LT",lastDay:"[कल] LT",lastWeek:"[पिछले] dddd, LT",sameElse:"L"},relativeTime:{future:"%s में",past:"%s पहले",s:"कुछ ही क्षण",ss:"%d सेकंड",m:"एक मिनट",mm:"%d मिनट",h:"एक घंटा",hh:"%d घंटे",d:"एक दिन",dd:"%d दिन",M:"एक महीने",MM:"%d महीने",y:"एक वर्ष",yy:"%d वर्ष"},preparse:function(e){return e.replace(/[१२३४५६७८९०]/g,(function(e){return t[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return M[e]}))},meridiemParse:/रात|सुबह|दोपहर|शाम/,meridiemHour:function(e,M){return 12===e&&(e=0),"रात"===M?e<4?e:e+12:"सुबह"===M?e:"दोपहर"===M?e>=10?e:e+12:"शाम"===M?e+12:void 0},meridiem:function(e,M,t){return e<4?"रात":e<10?"सुबह":e<17?"दोपहर":e<20?"शाम":"रात"},week:{dow:0,doy:6}})}(t(381))},316:function(e,M,t){!function(e){"use strict";function M(e,M,t){var o=e+" ";switch(t){case"ss":return o+(1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi");case"m":return M?"jedna minuta":"jedne minute";case"mm":return o+(1===e?"minuta":2===e||3===e||4===e?"minute":"minuta");case"h":return M?"jedan sat":"jednog sata";case"hh":return o+(1===e?"sat":2===e||3===e||4===e?"sata":"sati");case"dd":return o+(1===e?"dan":"dana");case"MM":return o+(1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci");case"yy":return o+(1===e?"godina":2===e||3===e||4===e?"godine":"godina")}}e.defineLocale("hr",{months:{format:"siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"Do MMMM YYYY",LLL:"Do MMMM YYYY H:mm",LLLL:"dddd, Do MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:return"[prošlu] [nedjelju] [u] LT";case 3:return"[prošlu] [srijedu] [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:M,m:M,mm:M,h:M,hh:M,d:"dan",dd:M,M:"mjesec",MM:M,y:"godinu",yy:M},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(t(381))},2138:function(e,M,t){!function(e){"use strict";var M="vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton".split(" ");function t(e,M,t,o){var n=e;switch(t){case"s":return o||M?"néhány másodperc":"néhány másodperce";case"ss":return n+(o||M)?" másodperc":" másodperce";case"m":return"egy"+(o||M?" perc":" perce");case"mm":return n+(o||M?" perc":" perce");case"h":return"egy"+(o||M?" óra":" órája");case"hh":return n+(o||M?" óra":" órája");case"d":return"egy"+(o||M?" nap":" napja");case"dd":return n+(o||M?" nap":" napja");case"M":return"egy"+(o||M?" hónap":" hónapja");case"MM":return n+(o||M?" hónap":" hónapja");case"y":return"egy"+(o||M?" év":" éve");case"yy":return n+(o||M?" év":" éve")}return""}function o(e){return(e?"":"[múlt] ")+"["+M[this.day()]+"] LT[-kor]"}e.defineLocale("hu",{months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan._feb._márc._ápr._máj._jún._júl._aug._szept._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"vas_hét_kedd_sze_csüt_pén_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(e){return"u"===e.charAt(1).toLowerCase()},meridiem:function(e,M,t){return e<12?!0===t?"de":"DE":!0===t?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return o.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return o.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s múlva",past:"%s",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(t(381))},1423:function(e,M,t){!function(e){"use strict";e.defineLocale("hy-am",{months:{format:"հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի".split("_"),standalone:"հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր".split("_")},monthsShort:"հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ".split("_"),weekdays:"կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ".split("_"),weekdaysShort:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),weekdaysMin:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY թ.",LLL:"D MMMM YYYY թ., HH:mm",LLLL:"dddd, D MMMM YYYY թ., HH:mm"},calendar:{sameDay:"[այսօր] LT",nextDay:"[վաղը] LT",lastDay:"[երեկ] LT",nextWeek:function(){return"dddd [օրը ժամը] LT"},lastWeek:function(){return"[անցած] dddd [օրը ժամը] LT"},sameElse:"L"},relativeTime:{future:"%s հետո",past:"%s առաջ",s:"մի քանի վայրկյան",ss:"%d վայրկյան",m:"րոպե",mm:"%d րոպե",h:"ժամ",hh:"%d ժամ",d:"օր",dd:"%d օր",M:"ամիս",MM:"%d ամիս",y:"տարի",yy:"%d տարի"},meridiemParse:/գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,isPM:function(e){return/^(ցերեկվա|երեկոյան)$/.test(e)},meridiem:function(e){return e<4?"գիշերվա":e<12?"առավոտվա":e<17?"ցերեկվա":"երեկոյան"},dayOfMonthOrdinalParse:/\d{1,2}|\d{1,2}-(ին|րդ)/,ordinal:function(e,M){switch(M){case"DDD":case"w":case"W":case"DDDo":return 1===e?e+"-ին":e+"-րդ";default:return e}},week:{dow:1,doy:7}})}(t(381))},9218:function(e,M,t){!function(e){"use strict";e.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(e,M){return 12===e&&(e=0),"pagi"===M?e:"siang"===M?e>=11?e:e+12:"sore"===M||"malam"===M?e+12:void 0},meridiem:function(e,M,t){return e<11?"pagi":e<15?"siang":e<19?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",ss:"%d detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:0,doy:6}})}(t(381))},135:function(e,M,t){!function(e){"use strict";function M(e){return e%100==11||e%10!=1}function t(e,t,o,n){var b=e+" ";switch(o){case"s":return t||n?"nokkrar sekúndur":"nokkrum sekúndum";case"ss":return M(e)?b+(t||n?"sekúndur":"sekúndum"):b+"sekúnda";case"m":return t?"mínúta":"mínútu";case"mm":return M(e)?b+(t||n?"mínútur":"mínútum"):t?b+"mínúta":b+"mínútu";case"hh":return M(e)?b+(t||n?"klukkustundir":"klukkustundum"):b+"klukkustund";case"d":return t?"dagur":n?"dag":"degi";case"dd":return M(e)?t?b+"dagar":b+(n?"daga":"dögum"):t?b+"dagur":b+(n?"dag":"degi");case"M":return t?"mánuður":n?"mánuð":"mánuði";case"MM":return M(e)?t?b+"mánuðir":b+(n?"mánuði":"mánuðum"):t?b+"mánuður":b+(n?"mánuð":"mánuði");case"y":return t||n?"ár":"ári";case"yy":return M(e)?b+(t||n?"ár":"árum"):b+(t||n?"ár":"ári")}}e.defineLocale("is",{months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[í dag kl.] LT",nextDay:"[á morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[í gær kl.] LT",lastWeek:"[síðasta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:t,ss:t,m:t,mm:t,h:"klukkustund",hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(t(381))},150:function(e,M,t){!function(e){"use strict";e.defineLocale("it-ch",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){return 0===this.day()?"[la scorsa] dddd [alle] LT":"[lo scorso] dddd [alle] LT"},sameElse:"L"},relativeTime:{future:function(e){return(/^[0-9].+$/.test(e)?"tra":"in")+" "+e},past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(t(381))},626:function(e,M,t){!function(e){"use strict";e.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:function(){return"[Oggi a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"},nextDay:function(){return"[Domani a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"},nextWeek:function(){return"dddd [a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"},lastDay:function(){return"[Ieri a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"},lastWeek:function(){return 0===this.day()?"[La scorsa] dddd [a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT":"[Lo scorso] dddd [a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"},sameElse:"L"},relativeTime:{future:"tra %s",past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",w:"una settimana",ww:"%d settimane",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(t(381))},9183:function(e,M,t){!function(e){"use strict";e.defineLocale("ja",{eras:[{since:"2019-05-01",offset:1,name:"令和",narrow:"㋿",abbr:"R"},{since:"1989-01-08",until:"2019-04-30",offset:1,name:"平成",narrow:"㍻",abbr:"H"},{since:"1926-12-25",until:"1989-01-07",offset:1,name:"昭和",narrow:"㍼",abbr:"S"},{since:"1912-07-30",until:"1926-12-24",offset:1,name:"大正",narrow:"㍽",abbr:"T"},{since:"1873-01-01",until:"1912-07-29",offset:6,name:"明治",narrow:"㍾",abbr:"M"},{since:"0001-01-01",until:"1873-12-31",offset:1,name:"西暦",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"紀元前",narrow:"BC",abbr:"BC"}],eraYearOrdinalRegex:/(元|\d+)年/,eraYearOrdinalParse:function(e,M){return"元"===M[1]?1:parseInt(M[1]||e,10)},months:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日 dddd HH:mm",l:"YYYY/MM/DD",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日(ddd) HH:mm"},meridiemParse:/午前|午後/i,isPM:function(e){return"午後"===e},meridiem:function(e,M,t){return e<12?"午前":"午後"},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:function(e){return e.week()!==this.week()?"[来週]dddd LT":"dddd LT"},lastDay:"[昨日] LT",lastWeek:function(e){return this.week()!==e.week()?"[先週]dddd LT":"dddd LT"},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}日/,ordinal:function(e,M){switch(M){case"y":return 1===e?"元年":e+"年";case"d":case"D":case"DDD":return e+"日";default:return e}},relativeTime:{future:"%s後",past:"%s前",s:"数秒",ss:"%d秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}})}(t(381))},4286:function(e,M,t){!function(e){"use strict";e.defineLocale("jv",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des".split("_"),weekdays:"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu".split("_"),weekdaysShort:"Min_Sen_Sel_Reb_Kem_Jem_Sep".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sp".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/enjing|siyang|sonten|ndalu/,meridiemHour:function(e,M){return 12===e&&(e=0),"enjing"===M?e:"siyang"===M?e>=11?e:e+12:"sonten"===M||"ndalu"===M?e+12:void 0},meridiem:function(e,M,t){return e<11?"enjing":e<15?"siyang":e<19?"sonten":"ndalu"},calendar:{sameDay:"[Dinten puniko pukul] LT",nextDay:"[Mbenjang pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kala wingi pukul] LT",lastWeek:"dddd [kepengker pukul] LT",sameElse:"L"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",ss:"%d detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"},week:{dow:1,doy:7}})}(t(381))},2105:function(e,M,t){!function(e){"use strict";e.defineLocale("ka",{months:"იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი".split("_"),monthsShort:"იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"),weekdays:{standalone:"კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი".split("_"),format:"კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს".split("_"),isFormat:/(წინა|შემდეგ)/},weekdaysShort:"კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"),weekdaysMin:"კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[დღეს] LT[-ზე]",nextDay:"[ხვალ] LT[-ზე]",lastDay:"[გუშინ] LT[-ზე]",nextWeek:"[შემდეგ] dddd LT[-ზე]",lastWeek:"[წინა] dddd LT-ზე",sameElse:"L"},relativeTime:{future:function(e){return e.replace(/(წამ|წუთ|საათ|წელ|დღ|თვ)(ი|ე)/,(function(e,M,t){return"ი"===t?M+"ში":M+t+"ში"}))},past:function(e){return/(წამი|წუთი|საათი|დღე|თვე)/.test(e)?e.replace(/(ი|ე)$/,"ის წინ"):/წელი/.test(e)?e.replace(/წელი$/,"წლის წინ"):e},s:"რამდენიმე წამი",ss:"%d წამი",m:"წუთი",mm:"%d წუთი",h:"საათი",hh:"%d საათი",d:"დღე",dd:"%d დღე",M:"თვე",MM:"%d თვე",y:"წელი",yy:"%d წელი"},dayOfMonthOrdinalParse:/0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,ordinal:function(e){return 0===e?e:1===e?e+"-ლი":e<20||e<=100&&e%20==0||e%100==0?"მე-"+e:e+"-ე"},week:{dow:1,doy:7}})}(t(381))},7772:function(e,M,t){!function(e){"use strict";var M={0:"-ші",1:"-ші",2:"-ші",3:"-ші",4:"-ші",5:"-ші",6:"-шы",7:"-ші",8:"-ші",9:"-шы",10:"-шы",20:"-шы",30:"-шы",40:"-шы",50:"-ші",60:"-шы",70:"-ші",80:"-ші",90:"-шы",100:"-ші"};e.defineLocale("kk",{months:"қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан".split("_"),monthsShort:"қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел".split("_"),weekdays:"жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі".split("_"),weekdaysShort:"жек_дүй_сей_сәр_бей_жұм_сен".split("_"),weekdaysMin:"жк_дй_сй_ср_бй_жм_сн".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгін сағат] LT",nextDay:"[Ертең сағат] LT",nextWeek:"dddd [сағат] LT",lastDay:"[Кеше сағат] LT",lastWeek:"[Өткен аптаның] dddd [сағат] LT",sameElse:"L"},relativeTime:{future:"%s ішінде",past:"%s бұрын",s:"бірнеше секунд",ss:"%d секунд",m:"бір минут",mm:"%d минут",h:"бір сағат",hh:"%d сағат",d:"бір күн",dd:"%d күн",M:"бір ай",MM:"%d ай",y:"бір жыл",yy:"%d жыл"},dayOfMonthOrdinalParse:/\d{1,2}-(ші|шы)/,ordinal:function(e){return e+(M[e]||M[e%10]||M[e>=100?100:null])},week:{dow:1,doy:7}})}(t(381))},8758:function(e,M,t){!function(e){"use strict";var M={1:"១",2:"២",3:"៣",4:"៤",5:"៥",6:"៦",7:"៧",8:"៨",9:"៩",0:"០"},t={"១":"1","២":"2","៣":"3","៤":"4","៥":"5","៦":"6","៧":"7","៨":"8","៩":"9","០":"0"};e.defineLocale("km",{months:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),monthsShort:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),weekdays:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysShort:"អា_ច_អ_ព_ព្រ_សុ_ស".split("_"),weekdaysMin:"អា_ច_អ_ព_ព្រ_សុ_ស".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/ព្រឹក|ល្ងាច/,isPM:function(e){return"ល្ងាច"===e},meridiem:function(e,M,t){return e<12?"ព្រឹក":"ល្ងាច"},calendar:{sameDay:"[ថ្ងៃនេះ ម៉ោង] LT",nextDay:"[ស្អែក ម៉ោង] LT",nextWeek:"dddd [ម៉ោង] LT",lastDay:"[ម្សិលមិញ ម៉ោង] LT",lastWeek:"dddd [សប្តាហ៍មុន] [ម៉ោង] LT",sameElse:"L"},relativeTime:{future:"%sទៀត",past:"%sមុន",s:"ប៉ុន្មានវិនាទី",ss:"%d វិនាទី",m:"មួយនាទី",mm:"%d នាទី",h:"មួយម៉ោង",hh:"%d ម៉ោង",d:"មួយថ្ងៃ",dd:"%d ថ្ងៃ",M:"មួយខែ",MM:"%d ខែ",y:"មួយឆ្នាំ",yy:"%d ឆ្នាំ"},dayOfMonthOrdinalParse:/ទី\d{1,2}/,ordinal:"ទី%d",preparse:function(e){return e.replace(/[១២៣៤៥៦៧៨៩០]/g,(function(e){return t[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return M[e]}))},week:{dow:1,doy:4}})}(t(381))},9282:function(e,M,t){!function(e){"use strict";var M={1:"೧",2:"೨",3:"೩",4:"೪",5:"೫",6:"೬",7:"೭",8:"೮",9:"೯",0:"೦"},t={"೧":"1","೨":"2","೩":"3","೪":"4","೫":"5","೬":"6","೭":"7","೮":"8","೯":"9","೦":"0"};e.defineLocale("kn",{months:"ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್".split("_"),monthsShort:"ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ".split("_"),monthsParseExact:!0,weekdays:"ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ".split("_"),weekdaysShort:"ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ".split("_"),weekdaysMin:"ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[ಇಂದು] LT",nextDay:"[ನಾಳೆ] LT",nextWeek:"dddd, LT",lastDay:"[ನಿನ್ನೆ] LT",lastWeek:"[ಕೊನೆಯ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ನಂತರ",past:"%s ಹಿಂದೆ",s:"ಕೆಲವು ಕ್ಷಣಗಳು",ss:"%d ಸೆಕೆಂಡುಗಳು",m:"ಒಂದು ನಿಮಿಷ",mm:"%d ನಿಮಿಷ",h:"ಒಂದು ಗಂಟೆ",hh:"%d ಗಂಟೆ",d:"ಒಂದು ದಿನ",dd:"%d ದಿನ",M:"ಒಂದು ತಿಂಗಳು",MM:"%d ತಿಂಗಳು",y:"ಒಂದು ವರ್ಷ",yy:"%d ವರ್ಷ"},preparse:function(e){return e.replace(/[೧೨೩೪೫೬೭೮೯೦]/g,(function(e){return t[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return M[e]}))},meridiemParse:/ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,meridiemHour:function(e,M){return 12===e&&(e=0),"ರಾತ್ರಿ"===M?e<4?e:e+12:"ಬೆಳಿಗ್ಗೆ"===M?e:"ಮಧ್ಯಾಹ್ನ"===M?e>=10?e:e+12:"ಸಂಜೆ"===M?e+12:void 0},meridiem:function(e,M,t){return e<4?"ರಾತ್ರಿ":e<10?"ಬೆಳಿಗ್ಗೆ":e<17?"ಮಧ್ಯಾಹ್ನ":e<20?"ಸಂಜೆ":"ರಾತ್ರಿ"},dayOfMonthOrdinalParse:/\d{1,2}(ನೇ)/,ordinal:function(e){return e+"ನೇ"},week:{dow:0,doy:6}})}(t(381))},3730:function(e,M,t){!function(e){"use strict";e.defineLocale("ko",{months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h:mm",LLLL:"YYYY년 MMMM D일 dddd A h:mm",l:"YYYY.MM.DD.",ll:"YYYY년 MMMM D일",lll:"YYYY년 MMMM D일 A h:mm",llll:"YYYY년 MMMM D일 dddd A h:mm"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇 초",ss:"%d초",m:"1분",mm:"%d분",h:"한 시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한 달",MM:"%d달",y:"일 년",yy:"%d년"},dayOfMonthOrdinalParse:/\d{1,2}(일|월|주)/,ordinal:function(e,M){switch(M){case"d":case"D":case"DDD":return e+"일";case"M":return e+"월";case"w":case"W":return e+"주";default:return e}},meridiemParse:/오전|오후/,isPM:function(e){return"오후"===e},meridiem:function(e,M,t){return e<12?"오전":"오후"}})}(t(381))},1408:function(e,M,t){!function(e){"use strict";var M={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},t={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},o=["کانونی دووەم","شوبات","ئازار","نیسان","ئایار","حوزەیران","تەمموز","ئاب","ئەیلوول","تشرینی یەكەم","تشرینی دووەم","كانونی یەکەم"];e.defineLocale("ku",{months:o,monthsShort:o,weekdays:"یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌".split("_"),weekdaysShort:"یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌".split("_"),weekdaysMin:"ی_د_س_چ_پ_ه_ش".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/ئێواره‌|به‌یانی/,isPM:function(e){return/ئێواره‌/.test(e)},meridiem:function(e,M,t){return e<12?"به‌یانی":"ئێواره‌"},calendar:{sameDay:"[ئه‌مرۆ كاتژمێر] LT",nextDay:"[به‌یانی كاتژمێر] LT",nextWeek:"dddd [كاتژمێر] LT",lastDay:"[دوێنێ كاتژمێر] LT",lastWeek:"dddd [كاتژمێر] LT",sameElse:"L"},relativeTime:{future:"له‌ %s",past:"%s",s:"چه‌ند چركه‌یه‌ك",ss:"چركه‌ %d",m:"یه‌ك خوله‌ك",mm:"%d خوله‌ك",h:"یه‌ك كاتژمێر",hh:"%d كاتژمێر",d:"یه‌ك ڕۆژ",dd:"%d ڕۆژ",M:"یه‌ك مانگ",MM:"%d مانگ",y:"یه‌ك ساڵ",yy:"%d ساڵ"},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,(function(e){return t[e]})).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,(function(e){return M[e]})).replace(/,/g,"،")},week:{dow:6,doy:12}})}(t(381))},3291:function(e,M,t){!function(e){"use strict";var M={0:"-чү",1:"-чи",2:"-чи",3:"-чү",4:"-чү",5:"-чи",6:"-чы",7:"-чи",8:"-чи",9:"-чу",10:"-чу",20:"-чы",30:"-чу",40:"-чы",50:"-чү",60:"-чы",70:"-чи",80:"-чи",90:"-чу",100:"-чү"};e.defineLocale("ky",{months:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),monthsShort:"янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек".split("_"),weekdays:"Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби".split("_"),weekdaysShort:"Жек_Дүй_Шей_Шар_Бей_Жум_Ише".split("_"),weekdaysMin:"Жк_Дй_Шй_Шр_Бй_Жм_Иш".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгүн саат] LT",nextDay:"[Эртең саат] LT",nextWeek:"dddd [саат] LT",lastDay:"[Кечээ саат] LT",lastWeek:"[Өткөн аптанын] dddd [күнү] [саат] LT",sameElse:"L"},relativeTime:{future:"%s ичинде",past:"%s мурун",s:"бирнече секунд",ss:"%d секунд",m:"бир мүнөт",mm:"%d мүнөт",h:"бир саат",hh:"%d саат",d:"бир күн",dd:"%d күн",M:"бир ай",MM:"%d ай",y:"бир жыл",yy:"%d жыл"},dayOfMonthOrdinalParse:/\d{1,2}-(чи|чы|чү|чу)/,ordinal:function(e){return e+(M[e]||M[e%10]||M[e>=100?100:null])},week:{dow:1,doy:7}})}(t(381))},6841:function(e,M,t){!function(e){"use strict";function M(e,M,t,o){var n={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return M?n[t][0]:n[t][1]}function t(e){if(e=parseInt(e,10),isNaN(e))return!1;if(e<0)return!0;if(e<10)return 4<=e&&e<=7;if(e<100){var M=e%10;return t(0===M?e/10:M)}if(e<1e4){for(;e>=10;)e/=10;return t(e)}return t(e/=1e3)}e.defineLocale("lb",{months:"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mé_Dë_Më_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gëschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:function(e){return t(e.substr(0,e.indexOf(" ")))?"a "+e:"an "+e},past:function(e){return t(e.substr(0,e.indexOf(" ")))?"viru "+e:"virun "+e},s:"e puer Sekonnen",ss:"%d Sekonnen",m:M,mm:"%d Minutten",h:M,hh:"%d Stonnen",d:M,dd:"%d Deeg",M,MM:"%d Méint",y:M,yy:"%d Joer"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(t(381))},5466:function(e,M,t){!function(e){"use strict";e.defineLocale("lo",{months:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),monthsShort:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),weekdays:"ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysShort:"ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysMin:"ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"ວັນdddd D MMMM YYYY HH:mm"},meridiemParse:/ຕອນເຊົ້າ|ຕອນແລງ/,isPM:function(e){return"ຕອນແລງ"===e},meridiem:function(e,M,t){return e<12?"ຕອນເຊົ້າ":"ຕອນແລງ"},calendar:{sameDay:"[ມື້ນີ້ເວລາ] LT",nextDay:"[ມື້ອື່ນເວລາ] LT",nextWeek:"[ວັນ]dddd[ໜ້າເວລາ] LT",lastDay:"[ມື້ວານນີ້ເວລາ] LT",lastWeek:"[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT",sameElse:"L"},relativeTime:{future:"ອີກ %s",past:"%sຜ່ານມາ",s:"ບໍ່ເທົ່າໃດວິນາທີ",ss:"%d ວິນາທີ",m:"1 ນາທີ",mm:"%d ນາທີ",h:"1 ຊົ່ວໂມງ",hh:"%d ຊົ່ວໂມງ",d:"1 ມື້",dd:"%d ມື້",M:"1 ເດືອນ",MM:"%d ເດືອນ",y:"1 ປີ",yy:"%d ປີ"},dayOfMonthOrdinalParse:/(ທີ່)\d{1,2}/,ordinal:function(e){return"ທີ່"+e}})}(t(381))},7010:function(e,M,t){!function(e){"use strict";var M={ss:"sekundė_sekundžių_sekundes",m:"minutė_minutės_minutę",mm:"minutės_minučių_minutes",h:"valanda_valandos_valandą",hh:"valandos_valandų_valandas",d:"diena_dienos_dieną",dd:"dienos_dienų_dienas",M:"mėnuo_mėnesio_mėnesį",MM:"mėnesiai_mėnesių_mėnesius",y:"metai_metų_metus",yy:"metai_metų_metus"};function t(e,M,t,o){return M?n(t)[0]:o?n(t)[1]:n(t)[2]}function o(e){return e%10==0||e>10&&e<20}function n(e){return M[e].split("_")}function b(e,M,b,p){var z=e+" ";return 1===e?z+t(0,M,b[0],p):M?z+(o(e)?n(b)[1]:n(b)[0]):p?z+n(b)[1]:z+(o(e)?n(b)[1]:n(b)[2])}e.defineLocale("lt",{months:{format:"sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"),weekdaysMin:"S_P_A_T_K_Pn_Š".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[Šiandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Praėjusį] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prieš %s",s:function(e,M,t,o){return M?"kelios sekundės":o?"kelių sekundžių":"kelias sekundes"},ss:b,m:t,mm:b,h:t,hh:b,d:t,dd:b,M:t,MM:b,y:t,yy:b},dayOfMonthOrdinalParse:/\d{1,2}-oji/,ordinal:function(e){return e+"-oji"},week:{dow:1,doy:4}})}(t(381))},7595:function(e,M,t){!function(e){"use strict";var M={ss:"sekundes_sekundēm_sekunde_sekundes".split("_"),m:"minūtes_minūtēm_minūte_minūtes".split("_"),mm:"minūtes_minūtēm_minūte_minūtes".split("_"),h:"stundas_stundām_stunda_stundas".split("_"),hh:"stundas_stundām_stunda_stundas".split("_"),d:"dienas_dienām_diena_dienas".split("_"),dd:"dienas_dienām_diena_dienas".split("_"),M:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),MM:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")};function t(e,M,t){return t?M%10==1&&M%100!=11?e[2]:e[3]:M%10==1&&M%100!=11?e[0]:e[1]}function o(e,o,n){return e+" "+t(M[n],e,o)}function n(e,o,n){return t(M[n],e,o)}e.defineLocale("lv",{months:"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),weekdays:"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[Šodien pulksten] LT",nextDay:"[Rīt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pagājušā] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"pēc %s",past:"pirms %s",s:function(e,M){return M?"dažas sekundes":"dažām sekundēm"},ss:o,m:n,mm:o,h:n,hh:o,d:n,dd:o,M:n,MM:o,y:n,yy:o},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(t(381))},9861:function(e,M,t){!function(e){"use strict";var M={words:{ss:["sekund","sekunda","sekundi"],m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mjesec","mjeseca","mjeseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(e,M){return 1===e?M[0]:e>=2&&e<=4?M[1]:M[2]},translate:function(e,t,o){var n=M.words[o];return 1===o.length?t?n[0]:n[1]:e+" "+M.correctGrammaticalCase(e,n)}};e.defineLocale("me",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sjutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){return["[prošle] [nedjelje] [u] LT","[prošlog] [ponedjeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srijede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"nekoliko sekundi",ss:M.translate,m:M.translate,mm:M.translate,h:M.translate,hh:M.translate,d:"dan",dd:M.translate,M:"mjesec",MM:M.translate,y:"godinu",yy:M.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(t(381))},5493:function(e,M,t){!function(e){"use strict";e.defineLocale("mi",{months:"Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),monthsRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,weekdays:"Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei".split("_"),weekdaysShort:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),weekdaysMin:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},calendar:{sameDay:"[i teie mahana, i] LT",nextDay:"[apopo i] LT",nextWeek:"dddd [i] LT",lastDay:"[inanahi i] LT",lastWeek:"dddd [whakamutunga i] LT",sameElse:"L"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te hēkona ruarua",ss:"%d hēkona",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(t(381))},5966:function(e,M,t){!function(e){"use strict";e.defineLocale("mk",{months:"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"),monthsShort:"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"),weekdays:"недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"),weekdaysShort:"нед_пон_вто_сре_чет_пет_саб".split("_"),weekdaysMin:"нe_пo_вт_ср_че_пе_сa".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Денес во] LT",nextDay:"[Утре во] LT",nextWeek:"[Во] dddd [во] LT",lastDay:"[Вчера во] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[Изминатата] dddd [во] LT";case 1:case 2:case 4:case 5:return"[Изминатиот] dddd [во] LT"}},sameElse:"L"},relativeTime:{future:"за %s",past:"пред %s",s:"неколку секунди",ss:"%d секунди",m:"една минута",mm:"%d минути",h:"еден час",hh:"%d часа",d:"еден ден",dd:"%d дена",M:"еден месец",MM:"%d месеци",y:"една година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(e){var M=e%10,t=e%100;return 0===e?e+"-ев":0===t?e+"-ен":t>10&&t<20?e+"-ти":1===M?e+"-ви":2===M?e+"-ри":7===M||8===M?e+"-ми":e+"-ти"},week:{dow:1,doy:7}})}(t(381))},7341:function(e,M,t){!function(e){"use strict";e.defineLocale("ml",{months:"ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ".split("_"),monthsShort:"ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.".split("_"),monthsParseExact:!0,weekdays:"ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച".split("_"),weekdaysShort:"ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി".split("_"),weekdaysMin:"ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ".split("_"),longDateFormat:{LT:"A h:mm -നു",LTS:"A h:mm:ss -നു",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -നു",LLLL:"dddd, D MMMM YYYY, A h:mm -നു"},calendar:{sameDay:"[ഇന്ന്] LT",nextDay:"[നാളെ] LT",nextWeek:"dddd, LT",lastDay:"[ഇന്നലെ] LT",lastWeek:"[കഴിഞ്ഞ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s കഴിഞ്ഞ്",past:"%s മുൻപ്",s:"അൽപ നിമിഷങ്ങൾ",ss:"%d സെക്കൻഡ്",m:"ഒരു മിനിറ്റ്",mm:"%d മിനിറ്റ്",h:"ഒരു മണിക്കൂർ",hh:"%d മണിക്കൂർ",d:"ഒരു ദിവസം",dd:"%d ദിവസം",M:"ഒരു മാസം",MM:"%d മാസം",y:"ഒരു വർഷം",yy:"%d വർഷം"},meridiemParse:/രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,meridiemHour:function(e,M){return 12===e&&(e=0),"രാത്രി"===M&&e>=4||"ഉച്ച കഴിഞ്ഞ്"===M||"വൈകുന്നേരം"===M?e+12:e},meridiem:function(e,M,t){return e<4?"രാത്രി":e<12?"രാവിലെ":e<17?"ഉച്ച കഴിഞ്ഞ്":e<20?"വൈകുന്നേരം":"രാത്രി"}})}(t(381))},5115:function(e,M,t){!function(e){"use strict";function M(e,M,t,o){switch(t){case"s":return M?"хэдхэн секунд":"хэдхэн секундын";case"ss":return e+(M?" секунд":" секундын");case"m":case"mm":return e+(M?" минут":" минутын");case"h":case"hh":return e+(M?" цаг":" цагийн");case"d":case"dd":return e+(M?" өдөр":" өдрийн");case"M":case"MM":return e+(M?" сар":" сарын");case"y":case"yy":return e+(M?" жил":" жилийн");default:return e}}e.defineLocale("mn",{months:"Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар".split("_"),monthsShort:"1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар".split("_"),monthsParseExact:!0,weekdays:"Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба".split("_"),weekdaysShort:"Ням_Дав_Мяг_Лха_Пүр_Баа_Бям".split("_"),weekdaysMin:"Ня_Да_Мя_Лх_Пү_Ба_Бя".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY оны MMMMын D",LLL:"YYYY оны MMMMын D HH:mm",LLLL:"dddd, YYYY оны MMMMын D HH:mm"},meridiemParse:/ҮӨ|ҮХ/i,isPM:function(e){return"ҮХ"===e},meridiem:function(e,M,t){return e<12?"ҮӨ":"ҮХ"},calendar:{sameDay:"[Өнөөдөр] LT",nextDay:"[Маргааш] LT",nextWeek:"[Ирэх] dddd LT",lastDay:"[Өчигдөр] LT",lastWeek:"[Өнгөрсөн] dddd LT",sameElse:"L"},relativeTime:{future:"%s дараа",past:"%s өмнө",s:M,ss:M,m:M,mm:M,h:M,hh:M,d:M,dd:M,M,MM:M,y:M,yy:M},dayOfMonthOrdinalParse:/\d{1,2} өдөр/,ordinal:function(e,M){switch(M){case"d":case"D":case"DDD":return e+" өдөр";default:return e}}})}(t(381))},370:function(e,M,t){!function(e){"use strict";var M={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},t={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};function o(e,M,t,o){var n="";if(M)switch(t){case"s":n="काही सेकंद";break;case"ss":n="%d सेकंद";break;case"m":n="एक मिनिट";break;case"mm":n="%d मिनिटे";break;case"h":n="एक तास";break;case"hh":n="%d तास";break;case"d":n="एक दिवस";break;case"dd":n="%d दिवस";break;case"M":n="एक महिना";break;case"MM":n="%d महिने";break;case"y":n="एक वर्ष";break;case"yy":n="%d वर्षे"}else switch(t){case"s":n="काही सेकंदां";break;case"ss":n="%d सेकंदां";break;case"m":n="एका मिनिटा";break;case"mm":n="%d मिनिटां";break;case"h":n="एका तासा";break;case"hh":n="%d तासां";break;case"d":n="एका दिवसा";break;case"dd":n="%d दिवसां";break;case"M":n="एका महिन्या";break;case"MM":n="%d महिन्यां";break;case"y":n="एका वर्षा";break;case"yy":n="%d वर्षां"}return n.replace(/%d/i,e)}e.defineLocale("mr",{months:"जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर".split("_"),monthsShort:"जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm वाजता",LTS:"A h:mm:ss वाजता",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm वाजता",LLLL:"dddd, D MMMM YYYY, A h:mm वाजता"},calendar:{sameDay:"[आज] LT",nextDay:"[उद्या] LT",nextWeek:"dddd, LT",lastDay:"[काल] LT",lastWeek:"[मागील] dddd, LT",sameElse:"L"},relativeTime:{future:"%sमध्ये",past:"%sपूर्वी",s:o,ss:o,m:o,mm:o,h:o,hh:o,d:o,dd:o,M:o,MM:o,y:o,yy:o},preparse:function(e){return e.replace(/[१२३४५६७८९०]/g,(function(e){return t[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return M[e]}))},meridiemParse:/पहाटे|सकाळी|दुपारी|सायंकाळी|रात्री/,meridiemHour:function(e,M){return 12===e&&(e=0),"पहाटे"===M||"सकाळी"===M?e:"दुपारी"===M||"सायंकाळी"===M||"रात्री"===M?e>=12?e:e+12:void 0},meridiem:function(e,M,t){return e>=0&&e<6?"पहाटे":e<12?"सकाळी":e<17?"दुपारी":e<20?"सायंकाळी":"रात्री"},week:{dow:0,doy:6}})}(t(381))},1237:function(e,M,t){!function(e){"use strict";e.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,M){return 12===e&&(e=0),"pagi"===M?e:"tengahari"===M?e>=11?e:e+12:"petang"===M||"malam"===M?e+12:void 0},meridiem:function(e,M,t){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}(t(381))},9847:function(e,M,t){!function(e){"use strict";e.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,M){return 12===e&&(e=0),"pagi"===M?e:"tengahari"===M?e>=11?e:e+12:"petang"===M||"malam"===M?e+12:void 0},meridiem:function(e,M,t){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}(t(381))},2126:function(e,M,t){!function(e){"use strict";e.defineLocale("mt",{months:"Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru".split("_"),monthsShort:"Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ".split("_"),weekdays:"Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt".split("_"),weekdaysShort:"Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib".split("_"),weekdaysMin:"Ħa_Tn_Tl_Er_Ħa_Ġi_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Illum fil-]LT",nextDay:"[Għada fil-]LT",nextWeek:"dddd [fil-]LT",lastDay:"[Il-bieraħ fil-]LT",lastWeek:"dddd [li għadda] [fil-]LT",sameElse:"L"},relativeTime:{future:"f’ %s",past:"%s ilu",s:"ftit sekondi",ss:"%d sekondi",m:"minuta",mm:"%d minuti",h:"siegħa",hh:"%d siegħat",d:"ġurnata",dd:"%d ġranet",M:"xahar",MM:"%d xhur",y:"sena",yy:"%d sni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(t(381))},6165:function(e,M,t){!function(e){"use strict";var M={1:"၁",2:"၂",3:"၃",4:"၄",5:"၅",6:"၆",7:"၇",8:"၈",9:"၉",0:"၀"},t={"၁":"1","၂":"2","၃":"3","၄":"4","၅":"5","၆":"6","၇":"7","၈":"8","၉":"9","၀":"0"};e.defineLocale("my",{months:"ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ".split("_"),monthsShort:"ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ".split("_"),weekdays:"တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ".split("_"),weekdaysShort:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),weekdaysMin:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ယနေ.] LT [မှာ]",nextDay:"[မနက်ဖြန်] LT [မှာ]",nextWeek:"dddd LT [မှာ]",lastDay:"[မနေ.က] LT [မှာ]",lastWeek:"[ပြီးခဲ့သော] dddd LT [မှာ]",sameElse:"L"},relativeTime:{future:"လာမည့် %s မှာ",past:"လွန်ခဲ့သော %s က",s:"စက္ကန်.အနည်းငယ်",ss:"%d စက္ကန့်",m:"တစ်မိနစ်",mm:"%d မိနစ်",h:"တစ်နာရီ",hh:"%d နာရီ",d:"တစ်ရက်",dd:"%d ရက်",M:"တစ်လ",MM:"%d လ",y:"တစ်နှစ်",yy:"%d နှစ်"},preparse:function(e){return e.replace(/[၁၂၃၄၅၆၇၈၉၀]/g,(function(e){return t[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return M[e]}))},week:{dow:1,doy:4}})}(t(381))},4924:function(e,M,t){!function(e){"use strict";e.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"sø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",ss:"%d sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",w:"en uke",ww:"%d uker",M:"en måned",MM:"%d måneder",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(t(381))},6744:function(e,M,t){!function(e){"use strict";var M={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},t={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};e.defineLocale("ne",{months:"जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर".split("_"),monthsShort:"जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.".split("_"),monthsParseExact:!0,weekdays:"आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार".split("_"),weekdaysShort:"आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.".split("_"),weekdaysMin:"आ._सो._मं._बु._बि._शु._श.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"Aको h:mm बजे",LTS:"Aको h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, Aको h:mm बजे",LLLL:"dddd, D MMMM YYYY, Aको h:mm बजे"},preparse:function(e){return e.replace(/[१२३४५६७८९०]/g,(function(e){return t[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return M[e]}))},meridiemParse:/राति|बिहान|दिउँसो|साँझ/,meridiemHour:function(e,M){return 12===e&&(e=0),"राति"===M?e<4?e:e+12:"बिहान"===M?e:"दिउँसो"===M?e>=10?e:e+12:"साँझ"===M?e+12:void 0},meridiem:function(e,M,t){return e<3?"राति":e<12?"बिहान":e<16?"दिउँसो":e<20?"साँझ":"राति"},calendar:{sameDay:"[आज] LT",nextDay:"[भोलि] LT",nextWeek:"[आउँदो] dddd[,] LT",lastDay:"[हिजो] LT",lastWeek:"[गएको] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%sमा",past:"%s अगाडि",s:"केही क्षण",ss:"%d सेकेण्ड",m:"एक मिनेट",mm:"%d मिनेट",h:"एक घण्टा",hh:"%d घण्टा",d:"एक दिन",dd:"%d दिन",M:"एक महिना",MM:"%d महिना",y:"एक बर्ष",yy:"%d बर्ष"},week:{dow:0,doy:6}})}(t(381))},9814:function(e,M,t){!function(e){"use strict";var M="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),t="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),o=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],n=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;e.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,o){return e?/-MMM-/.test(o)?t[e.month()]:M[e.month()]:M},monthsRegex:n,monthsShortRegex:n,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:o,longMonthsParse:o,shortMonthsParse:o,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})}(t(381))},3901:function(e,M,t){!function(e){"use strict";var M="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),t="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),o=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],n=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;e.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,o){return e?/-MMM-/.test(o)?t[e.month()]:M[e.month()]:M},monthsRegex:n,monthsShortRegex:n,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:o,longMonthsParse:o,shortMonthsParse:o,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",w:"één week",ww:"%d weken",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})}(t(381))},3877:function(e,M,t){!function(e){"use strict";e.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"su._må._ty._on._to._fr._lau.".split("_"),weekdaysMin:"su_må_ty_on_to_fr_la".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I går klokka] LT",lastWeek:"[Føregåande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",ss:"%d sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",w:"ei veke",ww:"%d veker",M:"ein månad",MM:"%d månader",y:"eit år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(t(381))},2135:function(e,M,t){!function(e){"use strict";e.defineLocale("oc-lnc",{months:{standalone:"genièr_febrièr_març_abril_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre".split("_"),format:"de genièr_de febrièr_de març_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octòbre_de novembre_de decembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._març_abr._mai_junh_julh._ago._set._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dm._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dm_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:"[uèi a] LT",nextDay:"[deman a] LT",nextWeek:"dddd [a] LT",lastDay:"[ièr a] LT",lastWeek:"dddd [passat a] LT",sameElse:"L"},relativeTime:{future:"d'aquí %s",past:"fa %s",s:"unas segondas",ss:"%d segondas",m:"una minuta",mm:"%d minutas",h:"una ora",hh:"%d oras",d:"un jorn",dd:"%d jorns",M:"un mes",MM:"%d meses",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|è|a)/,ordinal:function(e,M){var t=1===e?"r":2===e?"n":3===e?"r":4===e?"t":"è";return"w"!==M&&"W"!==M||(t="a"),e+t},week:{dow:1,doy:4}})}(t(381))},5858:function(e,M,t){!function(e){"use strict";var M={1:"੧",2:"੨",3:"੩",4:"੪",5:"੫",6:"੬",7:"੭",8:"੮",9:"੯",0:"੦"},t={"੧":"1","੨":"2","੩":"3","੪":"4","੫":"5","੬":"6","੭":"7","੮":"8","੯":"9","੦":"0"};e.defineLocale("pa-in",{months:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),monthsShort:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),weekdays:"ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ".split("_"),weekdaysShort:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),weekdaysMin:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),longDateFormat:{LT:"A h:mm ਵਜੇ",LTS:"A h:mm:ss ਵਜੇ",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm ਵਜੇ",LLLL:"dddd, D MMMM YYYY, A h:mm ਵਜੇ"},calendar:{sameDay:"[ਅਜ] LT",nextDay:"[ਕਲ] LT",nextWeek:"[ਅਗਲਾ] dddd, LT",lastDay:"[ਕਲ] LT",lastWeek:"[ਪਿਛਲੇ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ਵਿੱਚ",past:"%s ਪਿਛਲੇ",s:"ਕੁਝ ਸਕਿੰਟ",ss:"%d ਸਕਿੰਟ",m:"ਇਕ ਮਿੰਟ",mm:"%d ਮਿੰਟ",h:"ਇੱਕ ਘੰਟਾ",hh:"%d ਘੰਟੇ",d:"ਇੱਕ ਦਿਨ",dd:"%d ਦਿਨ",M:"ਇੱਕ ਮਹੀਨਾ",MM:"%d ਮਹੀਨੇ",y:"ਇੱਕ ਸਾਲ",yy:"%d ਸਾਲ"},preparse:function(e){return e.replace(/[੧੨੩੪੫੬੭੮੯੦]/g,(function(e){return t[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return M[e]}))},meridiemParse:/ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,meridiemHour:function(e,M){return 12===e&&(e=0),"ਰਾਤ"===M?e<4?e:e+12:"ਸਵੇਰ"===M?e:"ਦੁਪਹਿਰ"===M?e>=10?e:e+12:"ਸ਼ਾਮ"===M?e+12:void 0},meridiem:function(e,M,t){return e<4?"ਰਾਤ":e<10?"ਸਵੇਰ":e<17?"ਦੁਪਹਿਰ":e<20?"ਸ਼ਾਮ":"ਰਾਤ"},week:{dow:0,doy:6}})}(t(381))},4495:function(e,M,t){!function(e){"use strict";var M="styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),t="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_"),o=[/^sty/i,/^lut/i,/^mar/i,/^kwi/i,/^maj/i,/^cze/i,/^lip/i,/^sie/i,/^wrz/i,/^paź/i,/^lis/i,/^gru/i];function n(e){return e%10<5&&e%10>1&&~~(e/10)%10!=1}function b(e,M,t){var o=e+" ";switch(t){case"ss":return o+(n(e)?"sekundy":"sekund");case"m":return M?"minuta":"minutę";case"mm":return o+(n(e)?"minuty":"minut");case"h":return M?"godzina":"godzinę";case"hh":return o+(n(e)?"godziny":"godzin");case"ww":return o+(n(e)?"tygodnie":"tygodni");case"MM":return o+(n(e)?"miesiące":"miesięcy");case"yy":return o+(n(e)?"lata":"lat")}}e.defineLocale("pl",{months:function(e,o){return e?/D MMMM/.test(o)?t[e.month()]:M[e.month()]:M},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),monthsParse:o,longMonthsParse:o,shortMonthsParse:o,weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_śr_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_Śr_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dziś o] LT",nextDay:"[Jutro o] LT",nextWeek:function(){switch(this.day()){case 0:return"[W niedzielę o] LT";case 2:return"[We wtorek o] LT";case 3:return"[W środę o] LT";case 6:return"[W sobotę o] LT";default:return"[W] dddd [o] LT"}},lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zeszłą niedzielę o] LT";case 3:return"[W zeszłą środę o] LT";case 6:return"[W zeszłą sobotę o] LT";default:return"[W zeszły] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",ss:b,m:b,mm:b,h:b,hh:b,d:"1 dzień",dd:"%d dni",w:"tydzień",ww:b,M:"miesiąc",MM:b,y:"rok",yy:b},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(t(381))},7971:function(e,M,t){!function(e){"use strict";e.defineLocale("pt-br",{months:"janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado".split("_"),weekdaysShort:"dom_seg_ter_qua_qui_sex_sáb".split("_"),weekdaysMin:"do_2ª_3ª_4ª_5ª_6ª_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"poucos segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",invalidDate:"Data inválida"})}(t(381))},9520:function(e,M,t){!function(e){"use strict";e.defineLocale("pt",{months:"janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",w:"uma semana",ww:"%d semanas",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(t(381))},6459:function(e,M,t){!function(e){"use strict";function M(e,M,t){var o=" ";return(e%100>=20||e>=100&&e%100==0)&&(o=" de "),e+o+{ss:"secunde",mm:"minute",hh:"ore",dd:"zile",ww:"săptămâni",MM:"luni",yy:"ani"}[t]}e.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"duminică_luni_marți_miercuri_joi_vineri_sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[mâine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s în urmă",s:"câteva secunde",ss:M,m:"un minut",mm:M,h:"o oră",hh:M,d:"o zi",dd:M,w:"o săptămână",ww:M,M:"o lună",MM:M,y:"un an",yy:M},week:{dow:1,doy:7}})}(t(381))},1793:function(e,M,t){!function(e){"use strict";function M(e,M,t){return"m"===t?M?"минута":"минуту":e+" "+(o=+e,n={ss:M?"секунда_секунды_секунд":"секунду_секунды_секунд",mm:M?"минута_минуты_минут":"минуту_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",ww:"неделя_недели_недель",MM:"месяц_месяца_месяцев",yy:"год_года_лет"}[t].split("_"),o%10==1&&o%100!=11?n[0]:o%10>=2&&o%10<=4&&(o%100<10||o%100>=20)?n[1]:n[2]);var o,n}var t=[/^янв/i,/^фев/i,/^мар/i,/^апр/i,/^ма[йя]/i,/^июн/i,/^июл/i,/^авг/i,/^сен/i,/^окт/i,/^ноя/i,/^дек/i];e.defineLocale("ru",{months:{format:"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря".split("_"),standalone:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_")},monthsShort:{format:"янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.".split("_"),standalone:"янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.".split("_")},weekdays:{standalone:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),format:"воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу".split("_"),isFormat:/\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?] ?dddd/},weekdaysShort:"вс_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),monthsParse:t,longMonthsParse:t,shortMonthsParse:t,monthsRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsShortRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsStrictRegex:/^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,monthsShortStrictRegex:/^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., H:mm",LLLL:"dddd, D MMMM YYYY г., H:mm"},calendar:{sameDay:"[Сегодня, в] LT",nextDay:"[Завтра, в] LT",lastDay:"[Вчера, в] LT",nextWeek:function(e){if(e.week()===this.week())return 2===this.day()?"[Во] dddd, [в] LT":"[В] dddd, [в] LT";switch(this.day()){case 0:return"[В следующее] dddd, [в] LT";case 1:case 2:case 4:return"[В следующий] dddd, [в] LT";case 3:case 5:case 6:return"[В следующую] dddd, [в] LT"}},lastWeek:function(e){if(e.week()===this.week())return 2===this.day()?"[Во] dddd, [в] LT":"[В] dddd, [в] LT";switch(this.day()){case 0:return"[В прошлое] dddd, [в] LT";case 1:case 2:case 4:return"[В прошлый] dddd, [в] LT";case 3:case 5:case 6:return"[В прошлую] dddd, [в] LT"}},sameElse:"L"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",ss:M,m:M,mm:M,h:"час",hh:M,d:"день",dd:M,w:"неделя",ww:M,M:"месяц",MM:M,y:"год",yy:M},meridiemParse:/ночи|утра|дня|вечера/i,isPM:function(e){return/^(дня|вечера)$/.test(e)},meridiem:function(e,M,t){return e<4?"ночи":e<12?"утра":e<17?"дня":"вечера"},dayOfMonthOrdinalParse:/\d{1,2}-(й|го|я)/,ordinal:function(e,M){switch(M){case"M":case"d":case"DDD":return e+"-й";case"D":return e+"-го";case"w":case"W":return e+"-я";default:return e}},week:{dow:1,doy:4}})}(t(381))},950:function(e,M,t){!function(e){"use strict";var M=["جنوري","فيبروري","مارچ","اپريل","مئي","جون","جولاءِ","آگسٽ","سيپٽمبر","آڪٽوبر","نومبر","ڊسمبر"],t=["آچر","سومر","اڱارو","اربع","خميس","جمع","ڇنڇر"];e.defineLocale("sd",{months:M,monthsShort:M,weekdays:t,weekdaysShort:t,weekdaysMin:t,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(e){return"شام"===e},meridiem:function(e,M,t){return e<12?"صبح":"شام"},calendar:{sameDay:"[اڄ] LT",nextDay:"[سڀاڻي] LT",nextWeek:"dddd [اڳين هفتي تي] LT",lastDay:"[ڪالهه] LT",lastWeek:"[گزريل هفتي] dddd [تي] LT",sameElse:"L"},relativeTime:{future:"%s پوء",past:"%s اڳ",s:"چند سيڪنڊ",ss:"%d سيڪنڊ",m:"هڪ منٽ",mm:"%d منٽ",h:"هڪ ڪلاڪ",hh:"%d ڪلاڪ",d:"هڪ ڏينهن",dd:"%d ڏينهن",M:"هڪ مهينو",MM:"%d مهينا",y:"هڪ سال",yy:"%d سال"},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/,/g,"،")},week:{dow:1,doy:4}})}(t(381))},490:function(e,M,t){!function(e){"use strict";e.defineLocale("se",{months:"ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu".split("_"),monthsShort:"ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov".split("_"),weekdays:"sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat".split("_"),weekdaysShort:"sotn_vuos_maŋ_gask_duor_bear_láv".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},calendar:{sameDay:"[otne ti] LT",nextDay:"[ihttin ti] LT",nextWeek:"dddd [ti] LT",lastDay:"[ikte ti] LT",lastWeek:"[ovddit] dddd [ti] LT",sameElse:"L"},relativeTime:{future:"%s geažes",past:"maŋit %s",s:"moadde sekunddat",ss:"%d sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta mánnu",MM:"%d mánut",y:"okta jahki",yy:"%d jagit"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(t(381))},124:function(e,M,t){!function(e){"use strict";e.defineLocale("si",{months:"ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්".split("_"),monthsShort:"ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ".split("_"),weekdays:"ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා".split("_"),weekdaysShort:"ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන".split("_"),weekdaysMin:"ඉ_ස_අ_බ_බ්‍ර_සි_සෙ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [වැනි] dddd, a h:mm:ss"},calendar:{sameDay:"[අද] LT[ට]",nextDay:"[හෙට] LT[ට]",nextWeek:"dddd LT[ට]",lastDay:"[ඊයේ] LT[ට]",lastWeek:"[පසුගිය] dddd LT[ට]",sameElse:"L"},relativeTime:{future:"%sකින්",past:"%sකට පෙර",s:"තත්පර කිහිපය",ss:"තත්පර %d",m:"මිනිත්තුව",mm:"මිනිත්තු %d",h:"පැය",hh:"පැය %d",d:"දිනය",dd:"දින %d",M:"මාසය",MM:"මාස %d",y:"වසර",yy:"වසර %d"},dayOfMonthOrdinalParse:/\d{1,2} වැනි/,ordinal:function(e){return e+" වැනි"},meridiemParse:/පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,isPM:function(e){return"ප.ව."===e||"පස් වරු"===e},meridiem:function(e,M,t){return e>11?t?"ප.ව.":"පස් වරු":t?"පෙ.ව.":"පෙර වරු"}})}(t(381))},4249:function(e,M,t){!function(e){"use strict";var M="január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),t="jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_");function o(e){return e>1&&e<5}function n(e,M,t,n){var b=e+" ";switch(t){case"s":return M||n?"pár sekúnd":"pár sekundami";case"ss":return M||n?b+(o(e)?"sekundy":"sekúnd"):b+"sekundami";case"m":return M?"minúta":n?"minútu":"minútou";case"mm":return M||n?b+(o(e)?"minúty":"minút"):b+"minútami";case"h":return M?"hodina":n?"hodinu":"hodinou";case"hh":return M||n?b+(o(e)?"hodiny":"hodín"):b+"hodinami";case"d":return M||n?"deň":"dňom";case"dd":return M||n?b+(o(e)?"dni":"dní"):b+"dňami";case"M":return M||n?"mesiac":"mesiacom";case"MM":return M||n?b+(o(e)?"mesiace":"mesiacov"):b+"mesiacmi";case"y":return M||n?"rok":"rokom";case"yy":return M||n?b+(o(e)?"roky":"rokov"):b+"rokmi"}}e.defineLocale("sk",{months:M,monthsShort:t,weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nedeľu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo štvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[včera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulú nedeľu o] LT";case 1:case 2:case 4:case 5:return"[minulý] dddd [o] LT";case 3:return"[minulú stredu o] LT";case 6:return"[minulú sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:n,ss:n,m:n,mm:n,h:n,hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(t(381))},4985:function(e,M,t){!function(e){"use strict";function M(e,M,t,o){var n=e+" ";switch(t){case"s":return M||o?"nekaj sekund":"nekaj sekundami";case"ss":return n+(1===e?M?"sekundo":"sekundi":2===e?M||o?"sekundi":"sekundah":e<5?M||o?"sekunde":"sekundah":"sekund");case"m":return M?"ena minuta":"eno minuto";case"mm":return n+(1===e?M?"minuta":"minuto":2===e?M||o?"minuti":"minutama":e<5?M||o?"minute":"minutami":M||o?"minut":"minutami");case"h":return M?"ena ura":"eno uro";case"hh":return n+(1===e?M?"ura":"uro":2===e?M||o?"uri":"urama":e<5?M||o?"ure":"urami":M||o?"ur":"urami");case"d":return M||o?"en dan":"enim dnem";case"dd":return n+(1===e?M||o?"dan":"dnem":2===e?M||o?"dni":"dnevoma":M||o?"dni":"dnevi");case"M":return M||o?"en mesec":"enim mesecem";case"MM":return n+(1===e?M||o?"mesec":"mesecem":2===e?M||o?"meseca":"mesecema":e<5?M||o?"mesece":"meseci":M||o?"mesecev":"meseci");case"y":return M||o?"eno leto":"enim letom";case"yy":return n+(1===e?M||o?"leto":"letom":2===e?M||o?"leti":"letoma":e<5?M||o?"leta":"leti":M||o?"let":"leti")}}e.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[včeraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prejšnjo] [nedeljo] [ob] LT";case 3:return"[prejšnjo] [sredo] [ob] LT";case 6:return"[prejšnjo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prejšnji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"čez %s",past:"pred %s",s:M,ss:M,m:M,mm:M,h:M,hh:M,d:M,dd:M,M,MM:M,y:M,yy:M},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(t(381))},1104:function(e,M,t){!function(e){"use strict";e.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),weekdays:"E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë".split("_"),weekdaysShort:"Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_Më_E_P_Sh".split("_"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(e){return"M"===e.charAt(0)},meridiem:function(e,M,t){return e<12?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot në] LT",nextDay:"[Nesër në] LT",nextWeek:"dddd [në] LT",lastDay:"[Dje në] LT",lastWeek:"dddd [e kaluar në] LT",sameElse:"L"},relativeTime:{future:"në %s",past:"%s më parë",s:"disa sekonda",ss:"%d sekonda",m:"një minutë",mm:"%d minuta",h:"një orë",hh:"%d orë",d:"një ditë",dd:"%d ditë",M:"një muaj",MM:"%d muaj",y:"një vit",yy:"%d vite"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(t(381))},9915:function(e,M,t){!function(e){"use strict";var M={words:{ss:["секунда","секунде","секунди"],m:["један минут","једног минута"],mm:["минут","минута","минута"],h:["један сат","једног сата"],hh:["сат","сата","сати"],d:["један дан","једног дана"],dd:["дан","дана","дана"],M:["један месец","једног месеца"],MM:["месец","месеца","месеци"],y:["једну годину","једне године"],yy:["годину","године","година"]},correctGrammaticalCase:function(e,M){return e%10>=1&&e%10<=4&&(e%100<10||e%100>=20)?e%10==1?M[0]:M[1]:M[2]},translate:function(e,t,o,n){var b,p=M.words[o];return 1===o.length?"y"===o&&t?"једна година":n||t?p[0]:p[1]:(b=M.correctGrammaticalCase(e,p),"yy"===o&&t&&"годину"===b?e+" година":e+" "+b)}};e.defineLocale("sr-cyrl",{months:"јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар".split("_"),monthsShort:"јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.".split("_"),monthsParseExact:!0,weekdays:"недеља_понедељак_уторак_среда_четвртак_петак_субота".split("_"),weekdaysShort:"нед._пон._уто._сре._чет._пет._суб.".split("_"),weekdaysMin:"не_по_ут_ср_че_пе_су".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D. M. YYYY.",LL:"D. MMMM YYYY.",LLL:"D. MMMM YYYY. H:mm",LLLL:"dddd, D. MMMM YYYY. H:mm"},calendar:{sameDay:"[данас у] LT",nextDay:"[сутра у] LT",nextWeek:function(){switch(this.day()){case 0:return"[у] [недељу] [у] LT";case 3:return"[у] [среду] [у] LT";case 6:return"[у] [суботу] [у] LT";case 1:case 2:case 4:case 5:return"[у] dddd [у] LT"}},lastDay:"[јуче у] LT",lastWeek:function(){return["[прошле] [недеље] [у] LT","[прошлог] [понедељка] [у] LT","[прошлог] [уторка] [у] LT","[прошле] [среде] [у] LT","[прошлог] [четвртка] [у] LT","[прошлог] [петка] [у] LT","[прошле] [суботе] [у] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"за %s",past:"пре %s",s:"неколико секунди",ss:M.translate,m:M.translate,mm:M.translate,h:M.translate,hh:M.translate,d:M.translate,dd:M.translate,M:M.translate,MM:M.translate,y:M.translate,yy:M.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(t(381))},9131:function(e,M,t){!function(e){"use strict";var M={words:{ss:["sekunda","sekunde","sekundi"],m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],d:["jedan dan","jednog dana"],dd:["dan","dana","dana"],M:["jedan mesec","jednog meseca"],MM:["mesec","meseca","meseci"],y:["jednu godinu","jedne godine"],yy:["godinu","godine","godina"]},correctGrammaticalCase:function(e,M){return e%10>=1&&e%10<=4&&(e%100<10||e%100>=20)?e%10==1?M[0]:M[1]:M[2]},translate:function(e,t,o,n){var b,p=M.words[o];return 1===o.length?"y"===o&&t?"jedna godina":n||t?p[0]:p[1]:(b=M.correctGrammaticalCase(e,p),"yy"===o&&t&&"godinu"===b?e+" godina":e+" "+b)}};e.defineLocale("sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D. M. YYYY.",LL:"D. MMMM YYYY.",LLL:"D. MMMM YYYY. H:mm",LLLL:"dddd, D. MMMM YYYY. H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){return["[prošle] [nedelje] [u] LT","[prošlog] [ponedeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",ss:M.translate,m:M.translate,mm:M.translate,h:M.translate,hh:M.translate,d:M.translate,dd:M.translate,M:M.translate,MM:M.translate,y:M.translate,yy:M.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(t(381))},5606:function(e,M,t){!function(e){"use strict";e.defineLocale("ss",{months:"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Namuhla nga] LT",nextDay:"[Kusasa nga] LT",nextWeek:"dddd [nga] LT",lastDay:"[Itolo nga] LT",lastWeek:"dddd [leliphelile] [nga] LT",sameElse:"L"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",ss:"%d mzuzwana",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(e,M,t){return e<11?"ekuseni":e<15?"emini":e<19?"entsambama":"ebusuku"},meridiemHour:function(e,M){return 12===e&&(e=0),"ekuseni"===M?e:"emini"===M?e>=11?e:e+12:"entsambama"===M||"ebusuku"===M?0===e?0:e+12:void 0},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:"%d",week:{dow:1,doy:4}})}(t(381))},8760:function(e,M,t){!function(e){"use strict";e.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Igår] LT",nextWeek:"[På] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",ss:"%d sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}(\:e|\:a)/,ordinal:function(e){var M=e%10;return e+(1==~~(e%100/10)?":e":1===M||2===M?":a":":e")},week:{dow:1,doy:4}})}(t(381))},1172:function(e,M,t){!function(e){"use strict";e.defineLocale("sw",{months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"hh:mm A",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[leo saa] LT",nextDay:"[kesho saa] LT",nextWeek:"[wiki ijayo] dddd [saat] LT",lastDay:"[jana] LT",lastWeek:"[wiki iliyopita] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",ss:"sekunde %d",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"siku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},week:{dow:1,doy:7}})}(t(381))},7333:function(e,M,t){!function(e){"use strict";var M={1:"௧",2:"௨",3:"௩",4:"௪",5:"௫",6:"௬",7:"௭",8:"௮",9:"௯",0:"௦"},t={"௧":"1","௨":"2","௩":"3","௪":"4","௫":"5","௬":"6","௭":"7","௮":"8","௯":"9","௦":"0"};e.defineLocale("ta",{months:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),monthsShort:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),weekdays:"ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை".split("_"),weekdaysShort:"ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி".split("_"),weekdaysMin:"ஞா_தி_செ_பு_வி_வெ_ச".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},calendar:{sameDay:"[இன்று] LT",nextDay:"[நாளை] LT",nextWeek:"dddd, LT",lastDay:"[நேற்று] LT",lastWeek:"[கடந்த வாரம்] dddd, LT",sameElse:"L"},relativeTime:{future:"%s இல்",past:"%s முன்",s:"ஒரு சில விநாடிகள்",ss:"%d விநாடிகள்",m:"ஒரு நிமிடம்",mm:"%d நிமிடங்கள்",h:"ஒரு மணி நேரம்",hh:"%d மணி நேரம்",d:"ஒரு நாள்",dd:"%d நாட்கள்",M:"ஒரு மாதம்",MM:"%d மாதங்கள்",y:"ஒரு வருடம்",yy:"%d ஆண்டுகள்"},dayOfMonthOrdinalParse:/\d{1,2}வது/,ordinal:function(e){return e+"வது"},preparse:function(e){return e.replace(/[௧௨௩௪௫௬௭௮௯௦]/g,(function(e){return t[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return M[e]}))},meridiemParse:/யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,meridiem:function(e,M,t){return e<2?" யாமம்":e<6?" வைகறை":e<10?" காலை":e<14?" நண்பகல்":e<18?" எற்பாடு":e<22?" மாலை":" யாமம்"},meridiemHour:function(e,M){return 12===e&&(e=0),"யாமம்"===M?e<2?e:e+12:"வைகறை"===M||"காலை"===M||"நண்பகல்"===M&&e>=10?e:e+12},week:{dow:0,doy:6}})}(t(381))},3110:function(e,M,t){!function(e){"use strict";e.defineLocale("te",{months:"జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్".split("_"),monthsShort:"జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.".split("_"),monthsParseExact:!0,weekdays:"ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం".split("_"),weekdaysShort:"ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని".split("_"),weekdaysMin:"ఆ_సో_మం_బు_గు_శు_శ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[నేడు] LT",nextDay:"[రేపు] LT",nextWeek:"dddd, LT",lastDay:"[నిన్న] LT",lastWeek:"[గత] dddd, LT",sameElse:"L"},relativeTime:{future:"%s లో",past:"%s క్రితం",s:"కొన్ని క్షణాలు",ss:"%d సెకన్లు",m:"ఒక నిమిషం",mm:"%d నిమిషాలు",h:"ఒక గంట",hh:"%d గంటలు",d:"ఒక రోజు",dd:"%d రోజులు",M:"ఒక నెల",MM:"%d నెలలు",y:"ఒక సంవత్సరం",yy:"%d సంవత్సరాలు"},dayOfMonthOrdinalParse:/\d{1,2}వ/,ordinal:"%dవ",meridiemParse:/రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,meridiemHour:function(e,M){return 12===e&&(e=0),"రాత్రి"===M?e<4?e:e+12:"ఉదయం"===M?e:"మధ్యాహ్నం"===M?e>=10?e:e+12:"సాయంత్రం"===M?e+12:void 0},meridiem:function(e,M,t){return e<4?"రాత్రి":e<10?"ఉదయం":e<17?"మధ్యాహ్నం":e<20?"సాయంత్రం":"రాత్రి"},week:{dow:0,doy:6}})}(t(381))},2095:function(e,M,t){!function(e){"use strict";e.defineLocale("tet",{months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu".split("_"),weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sest_Sab".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Ses_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Ohin iha] LT",nextDay:"[Aban iha] LT",nextWeek:"dddd [iha] LT",lastDay:"[Horiseik iha] LT",lastWeek:"dddd [semana kotuk] [iha] LT",sameElse:"L"},relativeTime:{future:"iha %s",past:"%s liuba",s:"segundu balun",ss:"segundu %d",m:"minutu ida",mm:"minutu %d",h:"oras ida",hh:"oras %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var M=e%10;return e+(1==~~(e%100/10)?"th":1===M?"st":2===M?"nd":3===M?"rd":"th")},week:{dow:1,doy:4}})}(t(381))},7321:function(e,M,t){!function(e){"use strict";var M={0:"-ум",1:"-ум",2:"-юм",3:"-юм",4:"-ум",5:"-ум",6:"-ум",7:"-ум",8:"-ум",9:"-ум",10:"-ум",12:"-ум",13:"-ум",20:"-ум",30:"-юм",40:"-ум",50:"-ум",60:"-ум",70:"-ум",80:"-ум",90:"-ум",100:"-ум"};e.defineLocale("tg",{months:{format:"январи_феврали_марти_апрели_майи_июни_июли_августи_сентябри_октябри_ноябри_декабри".split("_"),standalone:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_")},monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе".split("_"),weekdaysShort:"яшб_дшб_сшб_чшб_пшб_ҷум_шнб".split("_"),weekdaysMin:"яш_дш_сш_чш_пш_ҷм_шб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Имрӯз соати] LT",nextDay:"[Фардо соати] LT",lastDay:"[Дирӯз соати] LT",nextWeek:"dddd[и] [ҳафтаи оянда соати] LT",lastWeek:"dddd[и] [ҳафтаи гузашта соати] LT",sameElse:"L"},relativeTime:{future:"баъди %s",past:"%s пеш",s:"якчанд сония",m:"як дақиқа",mm:"%d дақиқа",h:"як соат",hh:"%d соат",d:"як рӯз",dd:"%d рӯз",M:"як моҳ",MM:"%d моҳ",y:"як сол",yy:"%d сол"},meridiemParse:/шаб|субҳ|рӯз|бегоҳ/,meridiemHour:function(e,M){return 12===e&&(e=0),"шаб"===M?e<4?e:e+12:"субҳ"===M?e:"рӯз"===M?e>=11?e:e+12:"бегоҳ"===M?e+12:void 0},meridiem:function(e,M,t){return e<4?"шаб":e<11?"субҳ":e<16?"рӯз":e<19?"бегоҳ":"шаб"},dayOfMonthOrdinalParse:/\d{1,2}-(ум|юм)/,ordinal:function(e){return e+(M[e]||M[e%10]||M[e>=100?100:null])},week:{dow:1,doy:7}})}(t(381))},9041:function(e,M,t){!function(e){"use strict";e.defineLocale("th",{months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.".split("_"),monthsParseExact:!0,weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา H:mm",LLLL:"วันddddที่ D MMMM YYYY เวลา H:mm"},meridiemParse:/ก่อนเที่ยง|หลังเที่ยง/,isPM:function(e){return"หลังเที่ยง"===e},meridiem:function(e,M,t){return e<12?"ก่อนเที่ยง":"หลังเที่ยง"},calendar:{sameDay:"[วันนี้ เวลา] LT",nextDay:"[พรุ่งนี้ เวลา] LT",nextWeek:"dddd[หน้า เวลา] LT",lastDay:"[เมื่อวานนี้ เวลา] LT",lastWeek:"[วัน]dddd[ที่แล้ว เวลา] LT",sameElse:"L"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",ss:"%d วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",w:"1 สัปดาห์",ww:"%d สัปดาห์",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"}})}(t(381))},9005:function(e,M,t){!function(e){"use strict";var M={1:"'inji",5:"'inji",8:"'inji",70:"'inji",80:"'inji",2:"'nji",7:"'nji",20:"'nji",50:"'nji",3:"'ünji",4:"'ünji",100:"'ünji",6:"'njy",9:"'unjy",10:"'unjy",30:"'unjy",60:"'ynjy",90:"'ynjy"};e.defineLocale("tk",{months:"Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr".split("_"),monthsShort:"Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek".split("_"),weekdays:"Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe".split("_"),weekdaysShort:"Ýek_Duş_Siş_Çar_Pen_Ann_Şen".split("_"),weekdaysMin:"Ýk_Dş_Sş_Çr_Pn_An_Şn".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün sagat] LT",nextDay:"[ertir sagat] LT",nextWeek:"[indiki] dddd [sagat] LT",lastDay:"[düýn] LT",lastWeek:"[geçen] dddd [sagat] LT",sameElse:"L"},relativeTime:{future:"%s soň",past:"%s öň",s:"birnäçe sekunt",m:"bir minut",mm:"%d minut",h:"bir sagat",hh:"%d sagat",d:"bir gün",dd:"%d gün",M:"bir aý",MM:"%d aý",y:"bir ýyl",yy:"%d ýyl"},ordinal:function(e,t){switch(t){case"d":case"D":case"Do":case"DD":return e;default:if(0===e)return e+"'unjy";var o=e%10;return e+(M[o]||M[e%100-o]||M[e>=100?100:null])}},week:{dow:1,doy:7}})}(t(381))},5768:function(e,M,t){!function(e){"use strict";e.defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}})}(t(381))},9444:function(e,M,t){!function(e){"use strict";var M="pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut".split("_");function t(e,t,o,n){var b=function(e){var t=Math.floor(e%1e3/100),o=Math.floor(e%100/10),n=e%10,b="";return t>0&&(b+=M[t]+"vatlh"),o>0&&(b+=(""!==b?" ":"")+M[o]+"maH"),n>0&&(b+=(""!==b?" ":"")+M[n]),""===b?"pagh":b}(e);switch(o){case"ss":return b+" lup";case"mm":return b+" tup";case"hh":return b+" rep";case"dd":return b+" jaj";case"MM":return b+" jar";case"yy":return b+" DIS"}}e.defineLocale("tlh",{months:"tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’".split("_"),monthsShort:"jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’".split("_"),monthsParseExact:!0,weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[DaHjaj] LT",nextDay:"[wa’leS] LT",nextWeek:"LLL",lastDay:"[wa’Hu’] LT",lastWeek:"LLL",sameElse:"L"},relativeTime:{future:function(e){var M=e;return-1!==e.indexOf("jaj")?M.slice(0,-3)+"leS":-1!==e.indexOf("jar")?M.slice(0,-3)+"waQ":-1!==e.indexOf("DIS")?M.slice(0,-3)+"nem":M+" pIq"},past:function(e){var M=e;return-1!==e.indexOf("jaj")?M.slice(0,-3)+"Hu’":-1!==e.indexOf("jar")?M.slice(0,-3)+"wen":-1!==e.indexOf("DIS")?M.slice(0,-3)+"ben":M+" ret"},s:"puS lup",ss:t,m:"wa’ tup",mm:t,h:"wa’ rep",hh:t,d:"wa’ jaj",dd:t,M:"wa’ jar",MM:t,y:"wa’ DIS",yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(t(381))},2397:function(e,M,t){!function(e){"use strict";var M={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'üncü",4:"'üncü",100:"'üncü",6:"'ncı",9:"'uncu",10:"'uncu",30:"'uncu",60:"'ıncı",90:"'ıncı"};e.defineLocale("tr",{months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pzt_Sal_Çar_Per_Cum_Cmt".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),meridiem:function(e,M,t){return e<12?t?"öö":"ÖÖ":t?"ös":"ÖS"},meridiemParse:/öö|ÖÖ|ös|ÖS/,isPM:function(e){return"ös"===e||"ÖS"===e},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[yarın saat] LT",nextWeek:"[gelecek] dddd [saat] LT",lastDay:"[dün] LT",lastWeek:"[geçen] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",ss:"%d saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",w:"bir hafta",ww:"%d hafta",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},ordinal:function(e,t){switch(t){case"d":case"D":case"Do":case"DD":return e;default:if(0===e)return e+"'ıncı";var o=e%10;return e+(M[o]||M[e%100-o]||M[e>=100?100:null])}},week:{dow:1,doy:7}})}(t(381))},8254:function(e,M,t){!function(e){"use strict";function M(e,M,t,o){var n={s:["viensas secunds","'iensas secunds"],ss:[e+" secunds",e+" secunds"],m:["'n míut","'iens míut"],mm:[e+" míuts",e+" míuts"],h:["'n þora","'iensa þora"],hh:[e+" þoras",e+" þoras"],d:["'n ziua","'iensa ziua"],dd:[e+" ziuas",e+" ziuas"],M:["'n mes","'iens mes"],MM:[e+" mesen",e+" mesen"],y:["'n ar","'iens ar"],yy:[e+" ars",e+" ars"]};return o||M?n[t][0]:n[t][1]}e.defineLocale("tzl",{months:"Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdays:"Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi".split("_"),weekdaysShort:"Súl_Lún_Mai_Már_Xhú_Vié_Sát".split("_"),weekdaysMin:"Sú_Lú_Ma_Má_Xh_Vi_Sá".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"},meridiemParse:/d\'o|d\'a/i,isPM:function(e){return"d'o"===e.toLowerCase()},meridiem:function(e,M,t){return e>11?t?"d'o":"D'O":t?"d'a":"D'A"},calendar:{sameDay:"[oxhi à] LT",nextDay:"[demà à] LT",nextWeek:"dddd [à] LT",lastDay:"[ieiri à] LT",lastWeek:"[sür el] dddd [lasteu à] LT",sameElse:"L"},relativeTime:{future:"osprei %s",past:"ja%s",s:M,ss:M,m:M,mm:M,h:M,hh:M,d:M,dd:M,M,MM:M,y:M,yy:M},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(t(381))},699:function(e,M,t){!function(e){"use strict";e.defineLocale("tzm-latn",{months:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",ss:"%d imik",m:"minuḍ",mm:"%d minuḍ",h:"saɛa",hh:"%d tassaɛin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,doy:12}})}(t(381))},1106:function(e,M,t){!function(e){"use strict";e.defineLocale("tzm",{months:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),monthsShort:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),weekdays:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysShort:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysMin:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ⴰⵙⴷⵅ ⴴ] LT",nextDay:"[ⴰⵙⴽⴰ ⴴ] LT",nextWeek:"dddd [ⴴ] LT",lastDay:"[ⴰⵚⴰⵏⵜ ⴴ] LT",lastWeek:"dddd [ⴴ] LT",sameElse:"L"},relativeTime:{future:"ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s",past:"ⵢⴰⵏ %s",s:"ⵉⵎⵉⴽ",ss:"%d ⵉⵎⵉⴽ",m:"ⵎⵉⵏⵓⴺ",mm:"%d ⵎⵉⵏⵓⴺ",h:"ⵙⴰⵄⴰ",hh:"%d ⵜⴰⵙⵙⴰⵄⵉⵏ",d:"ⴰⵙⵙ",dd:"%d oⵙⵙⴰⵏ",M:"ⴰⵢoⵓⵔ",MM:"%d ⵉⵢⵢⵉⵔⵏ",y:"ⴰⵙⴳⴰⵙ",yy:"%d ⵉⵙⴳⴰⵙⵏ"},week:{dow:6,doy:12}})}(t(381))},9288:function(e,M,t){!function(e){"use strict";e.defineLocale("ug-cn",{months:"يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر".split("_"),monthsShort:"يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر".split("_"),weekdays:"يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە".split("_"),weekdaysShort:"يە_دۈ_سە_چا_پە_جۈ_شە".split("_"),weekdaysMin:"يە_دۈ_سە_چا_پە_جۈ_شە".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY-يىلىM-ئاينىڭD-كۈنى",LLL:"YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm",LLLL:"dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm"},meridiemParse:/يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,meridiemHour:function(e,M){return 12===e&&(e=0),"يېرىم كېچە"===M||"سەھەر"===M||"چۈشتىن بۇرۇن"===M?e:"چۈشتىن كېيىن"===M||"كەچ"===M?e+12:e>=11?e:e+12},meridiem:function(e,M,t){var o=100*e+M;return o<600?"يېرىم كېچە":o<900?"سەھەر":o<1130?"چۈشتىن بۇرۇن":o<1230?"چۈش":o<1800?"چۈشتىن كېيىن":"كەچ"},calendar:{sameDay:"[بۈگۈن سائەت] LT",nextDay:"[ئەتە سائەت] LT",nextWeek:"[كېلەركى] dddd [سائەت] LT",lastDay:"[تۆنۈگۈن] LT",lastWeek:"[ئالدىنقى] dddd [سائەت] LT",sameElse:"L"},relativeTime:{future:"%s كېيىن",past:"%s بۇرۇن",s:"نەچچە سېكونت",ss:"%d سېكونت",m:"بىر مىنۇت",mm:"%d مىنۇت",h:"بىر سائەت",hh:"%d سائەت",d:"بىر كۈن",dd:"%d كۈن",M:"بىر ئاي",MM:"%d ئاي",y:"بىر يىل",yy:"%d يىل"},dayOfMonthOrdinalParse:/\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,ordinal:function(e,M){switch(M){case"d":case"D":case"DDD":return e+"-كۈنى";case"w":case"W":return e+"-ھەپتە";default:return e}},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/,/g,"،")},week:{dow:1,doy:7}})}(t(381))},7691:function(e,M,t){!function(e){"use strict";function M(e,M,t){return"m"===t?M?"хвилина":"хвилину":"h"===t?M?"година":"годину":e+" "+(o=+e,n={ss:M?"секунда_секунди_секунд":"секунду_секунди_секунд",mm:M?"хвилина_хвилини_хвилин":"хвилину_хвилини_хвилин",hh:M?"година_години_годин":"годину_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"}[t].split("_"),o%10==1&&o%100!=11?n[0]:o%10>=2&&o%10<=4&&(o%100<10||o%100>=20)?n[1]:n[2]);var o,n}function t(e){return function(){return e+"о"+(11===this.hours()?"б":"")+"] LT"}}e.defineLocale("uk",{months:{format:"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_"),standalone:"січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_")},monthsShort:"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekdays:function(e,M){var t={nominative:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),accusative:"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу".split("_"),genitive:"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи".split("_")};return!0===e?t.nominative.slice(1,7).concat(t.nominative.slice(0,1)):e?t[/(\[[ВвУу]\]) ?dddd/.test(M)?"accusative":/\[?(?:минулої|наступної)? ?\] ?dddd/.test(M)?"genitive":"nominative"][e.day()]:t.nominative},weekdaysShort:"нд_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., HH:mm",LLLL:"dddd, D MMMM YYYY р., HH:mm"},calendar:{sameDay:t("[Сьогодні "),nextDay:t("[Завтра "),lastDay:t("[Вчора "),nextWeek:t("[У] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return t("[Минулої] dddd [").call(this);case 1:case 2:case 4:return t("[Минулого] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",ss:M,m:M,mm:M,h:"годину",hh:M,d:"день",dd:M,M:"місяць",MM:M,y:"рік",yy:M},meridiemParse:/ночі|ранку|дня|вечора/,isPM:function(e){return/^(дня|вечора)$/.test(e)},meridiem:function(e,M,t){return e<4?"ночі":e<12?"ранку":e<17?"дня":"вечора"},dayOfMonthOrdinalParse:/\d{1,2}-(й|го)/,ordinal:function(e,M){switch(M){case"M":case"d":case"DDD":case"w":case"W":return e+"-й";case"D":return e+"-го";default:return e}},week:{dow:1,doy:7}})}(t(381))},3795:function(e,M,t){!function(e){"use strict";var M=["جنوری","فروری","مارچ","اپریل","مئی","جون","جولائی","اگست","ستمبر","اکتوبر","نومبر","دسمبر"],t=["اتوار","پیر","منگل","بدھ","جمعرات","جمعہ","ہفتہ"];e.defineLocale("ur",{months:M,monthsShort:M,weekdays:t,weekdaysShort:t,weekdaysMin:t,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(e){return"شام"===e},meridiem:function(e,M,t){return e<12?"صبح":"شام"},calendar:{sameDay:"[آج بوقت] LT",nextDay:"[کل بوقت] LT",nextWeek:"dddd [بوقت] LT",lastDay:"[گذشتہ روز بوقت] LT",lastWeek:"[گذشتہ] dddd [بوقت] LT",sameElse:"L"},relativeTime:{future:"%s بعد",past:"%s قبل",s:"چند سیکنڈ",ss:"%d سیکنڈ",m:"ایک منٹ",mm:"%d منٹ",h:"ایک گھنٹہ",hh:"%d گھنٹے",d:"ایک دن",dd:"%d دن",M:"ایک ماہ",MM:"%d ماہ",y:"ایک سال",yy:"%d سال"},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/,/g,"،")},week:{dow:1,doy:4}})}(t(381))},588:function(e,M,t){!function(e){"use strict";e.defineLocale("uz-latn",{months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),weekdays:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),weekdaysShort:"Yak_Dush_Sesh_Chor_Pay_Jum_Shan".split("_"),weekdaysMin:"Ya_Du_Se_Cho_Pa_Ju_Sha".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Bugun soat] LT [da]",nextDay:"[Ertaga] LT [da]",nextWeek:"dddd [kuni soat] LT [da]",lastDay:"[Kecha soat] LT [da]",lastWeek:"[O'tgan] dddd [kuni soat] LT [da]",sameElse:"L"},relativeTime:{future:"Yaqin %s ichida",past:"Bir necha %s oldin",s:"soniya",ss:"%d soniya",m:"bir daqiqa",mm:"%d daqiqa",h:"bir soat",hh:"%d soat",d:"bir kun",dd:"%d kun",M:"bir oy",MM:"%d oy",y:"bir yil",yy:"%d yil"},week:{dow:1,doy:7}})}(t(381))},6791:function(e,M,t){!function(e){"use strict";e.defineLocale("uz",{months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),weekdaysShort:"Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"),weekdaysMin:"Як_Ду_Се_Чо_Па_Жу_Ша".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Бугун соат] LT [да]",nextDay:"[Эртага] LT [да]",nextWeek:"dddd [куни соат] LT [да]",lastDay:"[Кеча соат] LT [да]",lastWeek:"[Утган] dddd [куни соат] LT [да]",sameElse:"L"},relativeTime:{future:"Якин %s ичида",past:"Бир неча %s олдин",s:"фурсат",ss:"%d фурсат",m:"бир дакика",mm:"%d дакика",h:"бир соат",hh:"%d соат",d:"бир кун",dd:"%d кун",M:"бир ой",MM:"%d ой",y:"бир йил",yy:"%d йил"},week:{dow:1,doy:7}})}(t(381))},5666:function(e,M,t){!function(e){"use strict";e.defineLocale("vi",{months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),monthsShort:"Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12".split("_"),monthsParseExact:!0,weekdays:"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(e){return/^ch$/i.test(e)},meridiem:function(e,M,t){return e<12?t?"sa":"SA":t?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY HH:mm",LLLL:"dddd, D MMMM [năm] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[Hôm nay lúc] LT",nextDay:"[Ngày mai lúc] LT",nextWeek:"dddd [tuần tới lúc] LT",lastDay:"[Hôm qua lúc] LT",lastWeek:"dddd [tuần trước lúc] LT",sameElse:"L"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",ss:"%d giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",w:"một tuần",ww:"%d tuần",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}})}(t(381))},4378:function(e,M,t){!function(e){"use strict";e.defineLocale("x-pseudo",{months:"J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér".split("_"),monthsShort:"J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc".split("_"),monthsParseExact:!0,weekdays:"S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý".split("_"),weekdaysShort:"S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát".split("_"),weekdaysMin:"S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[T~ódá~ý át] LT",nextDay:"[T~ómó~rró~w át] LT",nextWeek:"dddd [át] LT",lastDay:"[Ý~ést~érdá~ý át] LT",lastWeek:"[L~ást] dddd [át] LT",sameElse:"L"},relativeTime:{future:"í~ñ %s",past:"%s á~gó",s:"á ~féw ~sécó~ñds",ss:"%d s~écóñ~ds",m:"á ~míñ~úté",mm:"%d m~íñú~tés",h:"á~ñ hó~úr",hh:"%d h~óúrs",d:"á ~dáý",dd:"%d d~áýs",M:"á ~móñ~th",MM:"%d m~óñt~hs",y:"á ~ýéár",yy:"%d ý~éárs"},dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var M=e%10;return e+(1==~~(e%100/10)?"th":1===M?"st":2===M?"nd":3===M?"rd":"th")},week:{dow:1,doy:4}})}(t(381))},5805:function(e,M,t){!function(e){"use strict";e.defineLocale("yo",{months:"Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀".split("_"),monthsShort:"Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀".split("_"),weekdays:"Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta".split("_"),weekdaysShort:"Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá".split("_"),weekdaysMin:"Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Ònì ni] LT",nextDay:"[Ọ̀la ni] LT",nextWeek:"dddd [Ọsẹ̀ tón'bọ] [ni] LT",lastDay:"[Àna ni] LT",lastWeek:"dddd [Ọsẹ̀ tólọ́] [ni] LT",sameElse:"L"},relativeTime:{future:"ní %s",past:"%s kọjá",s:"ìsẹjú aayá die",ss:"aayá %d",m:"ìsẹjú kan",mm:"ìsẹjú %d",h:"wákati kan",hh:"wákati %d",d:"ọjọ́ kan",dd:"ọjọ́ %d",M:"osù kan",MM:"osù %d",y:"ọdún kan",yy:"ọdún %d"},dayOfMonthOrdinalParse:/ọjọ́\s\d{1,2}/,ordinal:"ọjọ́ %d",week:{dow:1,doy:4}})}(t(381))},3839:function(e,M,t){!function(e){"use strict";e.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah点mm分",LLLL:"YYYY年M月D日ddddAh点mm分",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,M){return 12===e&&(e=0),"凌晨"===M||"早上"===M||"上午"===M?e:"下午"===M||"晚上"===M?e+12:e>=11?e:e+12},meridiem:function(e,M,t){var o=100*e+M;return o<600?"凌晨":o<900?"早上":o<1130?"上午":o<1230?"中午":o<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:function(e){return e.week()!==this.week()?"[下]dddLT":"[本]dddLT"},lastDay:"[昨天]LT",lastWeek:function(e){return this.week()!==e.week()?"[上]dddLT":"[本]dddLT"},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|周)/,ordinal:function(e,M){switch(M){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"周";default:return e}},relativeTime:{future:"%s后",past:"%s前",s:"几秒",ss:"%d 秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",w:"1 周",ww:"%d 周",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},week:{dow:1,doy:4}})}(t(381))},5726:function(e,M,t){!function(e){"use strict";e.defineLocale("zh-hk",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,M){return 12===e&&(e=0),"凌晨"===M||"早上"===M||"上午"===M?e:"中午"===M?e>=11?e:e+12:"下午"===M||"晚上"===M?e+12:void 0},meridiem:function(e,M,t){var o=100*e+M;return o<600?"凌晨":o<900?"早上":o<1200?"上午":1200===o?"中午":o<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(e,M){switch(M){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"週";default:return e}},relativeTime:{future:"%s後",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})}(t(381))},9807:function(e,M,t){!function(e){"use strict";e.defineLocale("zh-mo",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"D/M/YYYY",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,M){return 12===e&&(e=0),"凌晨"===M||"早上"===M||"上午"===M?e:"中午"===M?e>=11?e:e+12:"下午"===M||"晚上"===M?e+12:void 0},meridiem:function(e,M,t){var o=100*e+M;return o<600?"凌晨":o<900?"早上":o<1130?"上午":o<1230?"中午":o<1800?"下午":"晚上"},calendar:{sameDay:"[今天] LT",nextDay:"[明天] LT",nextWeek:"[下]dddd LT",lastDay:"[昨天] LT",lastWeek:"[上]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(e,M){switch(M){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"週";default:return e}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})}(t(381))},4152:function(e,M,t){!function(e){"use strict";e.defineLocale("zh-tw",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,M){return 12===e&&(e=0),"凌晨"===M||"早上"===M||"上午"===M?e:"中午"===M?e>=11?e:e+12:"下午"===M||"晚上"===M?e+12:void 0},meridiem:function(e,M,t){var o=100*e+M;return o<600?"凌晨":o<900?"早上":o<1130?"上午":o<1230?"中午":o<1800?"下午":"晚上"},calendar:{sameDay:"[今天] LT",nextDay:"[明天] LT",nextWeek:"[下]dddd LT",lastDay:"[昨天] LT",lastWeek:"[上]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(e,M){switch(M){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"週";default:return e}},relativeTime:{future:"%s後",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})}(t(381))},6700:(e,M,t)=>{var o={"./af":2786,"./af.js":2786,"./ar":867,"./ar-dz":4130,"./ar-dz.js":4130,"./ar-kw":6135,"./ar-kw.js":6135,"./ar-ly":6440,"./ar-ly.js":6440,"./ar-ma":1675,"./ar-ma.js":1675,"./ar-sa":6040,"./ar-sa.js":6040,"./ar-tn":7100,"./ar-tn.js":7100,"./ar.js":867,"./az":1083,"./az.js":1083,"./be":9808,"./be.js":9808,"./bg":8338,"./bg.js":8338,"./bm":7438,"./bm.js":7438,"./bn":8905,"./bn-bd":6225,"./bn-bd.js":6225,"./bn.js":8905,"./bo":1560,"./bo.js":1560,"./br":1278,"./br.js":1278,"./bs":622,"./bs.js":622,"./ca":2468,"./ca.js":2468,"./cs":5822,"./cs.js":5822,"./cv":877,"./cv.js":877,"./cy":7373,"./cy.js":7373,"./da":4780,"./da.js":4780,"./de":9740,"./de-at":217,"./de-at.js":217,"./de-ch":894,"./de-ch.js":894,"./de.js":9740,"./dv":5300,"./dv.js":5300,"./el":837,"./el.js":837,"./en-au":8348,"./en-au.js":8348,"./en-ca":7925,"./en-ca.js":7925,"./en-gb":2243,"./en-gb.js":2243,"./en-ie":6436,"./en-ie.js":6436,"./en-il":7207,"./en-il.js":7207,"./en-in":4175,"./en-in.js":4175,"./en-nz":6319,"./en-nz.js":6319,"./en-sg":1662,"./en-sg.js":1662,"./eo":2915,"./eo.js":2915,"./es":5655,"./es-do":2088,"./es-do.js":2088,"./es-mx":6112,"./es-mx.js":6112,"./es-us":1146,"./es-us.js":1146,"./es.js":5655,"./et":5603,"./et.js":5603,"./eu":7763,"./eu.js":7763,"./fa":6959,"./fa.js":6959,"./fi":1897,"./fi.js":1897,"./fil":2549,"./fil.js":2549,"./fo":4694,"./fo.js":4694,"./fr":4470,"./fr-ca":3049,"./fr-ca.js":3049,"./fr-ch":2330,"./fr-ch.js":2330,"./fr.js":4470,"./fy":5044,"./fy.js":5044,"./ga":9295,"./ga.js":9295,"./gd":2101,"./gd.js":2101,"./gl":8794,"./gl.js":8794,"./gom-deva":7884,"./gom-deva.js":7884,"./gom-latn":3168,"./gom-latn.js":3168,"./gu":5349,"./gu.js":5349,"./he":4206,"./he.js":4206,"./hi":94,"./hi.js":94,"./hr":316,"./hr.js":316,"./hu":2138,"./hu.js":2138,"./hy-am":1423,"./hy-am.js":1423,"./id":9218,"./id.js":9218,"./is":135,"./is.js":135,"./it":626,"./it-ch":150,"./it-ch.js":150,"./it.js":626,"./ja":9183,"./ja.js":9183,"./jv":4286,"./jv.js":4286,"./ka":2105,"./ka.js":2105,"./kk":7772,"./kk.js":7772,"./km":8758,"./km.js":8758,"./kn":9282,"./kn.js":9282,"./ko":3730,"./ko.js":3730,"./ku":1408,"./ku.js":1408,"./ky":3291,"./ky.js":3291,"./lb":6841,"./lb.js":6841,"./lo":5466,"./lo.js":5466,"./lt":7010,"./lt.js":7010,"./lv":7595,"./lv.js":7595,"./me":9861,"./me.js":9861,"./mi":5493,"./mi.js":5493,"./mk":5966,"./mk.js":5966,"./ml":7341,"./ml.js":7341,"./mn":5115,"./mn.js":5115,"./mr":370,"./mr.js":370,"./ms":9847,"./ms-my":1237,"./ms-my.js":1237,"./ms.js":9847,"./mt":2126,"./mt.js":2126,"./my":6165,"./my.js":6165,"./nb":4924,"./nb.js":4924,"./ne":6744,"./ne.js":6744,"./nl":3901,"./nl-be":9814,"./nl-be.js":9814,"./nl.js":3901,"./nn":3877,"./nn.js":3877,"./oc-lnc":2135,"./oc-lnc.js":2135,"./pa-in":5858,"./pa-in.js":5858,"./pl":4495,"./pl.js":4495,"./pt":9520,"./pt-br":7971,"./pt-br.js":7971,"./pt.js":9520,"./ro":6459,"./ro.js":6459,"./ru":1793,"./ru.js":1793,"./sd":950,"./sd.js":950,"./se":490,"./se.js":490,"./si":124,"./si.js":124,"./sk":4249,"./sk.js":4249,"./sl":4985,"./sl.js":4985,"./sq":1104,"./sq.js":1104,"./sr":9131,"./sr-cyrl":9915,"./sr-cyrl.js":9915,"./sr.js":9131,"./ss":5606,"./ss.js":5606,"./sv":8760,"./sv.js":8760,"./sw":1172,"./sw.js":1172,"./ta":7333,"./ta.js":7333,"./te":3110,"./te.js":3110,"./tet":2095,"./tet.js":2095,"./tg":7321,"./tg.js":7321,"./th":9041,"./th.js":9041,"./tk":9005,"./tk.js":9005,"./tl-ph":5768,"./tl-ph.js":5768,"./tlh":9444,"./tlh.js":9444,"./tr":2397,"./tr.js":2397,"./tzl":8254,"./tzl.js":8254,"./tzm":1106,"./tzm-latn":699,"./tzm-latn.js":699,"./tzm.js":1106,"./ug-cn":9288,"./ug-cn.js":9288,"./uk":7691,"./uk.js":7691,"./ur":3795,"./ur.js":3795,"./uz":6791,"./uz-latn":588,"./uz-latn.js":588,"./uz.js":6791,"./vi":5666,"./vi.js":5666,"./x-pseudo":4378,"./x-pseudo.js":4378,"./yo":5805,"./yo.js":5805,"./zh-cn":3839,"./zh-cn.js":3839,"./zh-hk":5726,"./zh-hk.js":5726,"./zh-mo":9807,"./zh-mo.js":9807,"./zh-tw":4152,"./zh-tw.js":4152};function n(e){var M=b(e);return t(M)}function b(e){if(!t.o(o,e)){var M=new Error("Cannot find module '"+e+"'");throw M.code="MODULE_NOT_FOUND",M}return o[e]}n.keys=function(){return Object.keys(o)},n.resolve=b,e.exports=n,n.id=6700},381:function(e,M,t){(e=t.nmd(e)).exports=function(){"use strict";var M,o;function n(){return M.apply(null,arguments)}function b(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function p(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function z(e,M){return Object.prototype.hasOwnProperty.call(e,M)}function c(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;var M;for(M in e)if(z(e,M))return!1;return!0}function a(e){return void 0===e}function r(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function O(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function i(e,M){var t,o=[],n=e.length;for(t=0;t<n;++t)o.push(M(e[t],t));return o}function s(e,M){for(var t in M)z(M,t)&&(e[t]=M[t]);return z(M,"toString")&&(e.toString=M.toString),z(M,"valueOf")&&(e.valueOf=M.valueOf),e}function d(e,M,t,o){return SM(e,M,t,o,!0).utc()}function l(e){return null==e._pf&&(e._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}),e._pf}function u(e){if(null==e._isValid){var M=l(e),t=o.call(M.parsedDateParts,(function(e){return null!=e})),n=!isNaN(e._d.getTime())&&M.overflow<0&&!M.empty&&!M.invalidEra&&!M.invalidMonth&&!M.invalidWeekday&&!M.weekdayMismatch&&!M.nullInput&&!M.invalidFormat&&!M.userInvalidated&&(!M.meridiem||M.meridiem&&t);if(e._strict&&(n=n&&0===M.charsLeftOver&&0===M.unusedTokens.length&&void 0===M.bigHour),null!=Object.isFrozen&&Object.isFrozen(e))return n;e._isValid=n}return e._isValid}function A(e){var M=d(NaN);return null!=e?s(l(M),e):l(M).userInvalidated=!0,M}o=Array.prototype.some?Array.prototype.some:function(e){var M,t=Object(this),o=t.length>>>0;for(M=0;M<o;M++)if(M in t&&e.call(this,t[M],M,t))return!0;return!1};var q=n.momentProperties=[],f=!1;function m(e,M){var t,o,n,b=q.length;if(a(M._isAMomentObject)||(e._isAMomentObject=M._isAMomentObject),a(M._i)||(e._i=M._i),a(M._f)||(e._f=M._f),a(M._l)||(e._l=M._l),a(M._strict)||(e._strict=M._strict),a(M._tzm)||(e._tzm=M._tzm),a(M._isUTC)||(e._isUTC=M._isUTC),a(M._offset)||(e._offset=M._offset),a(M._pf)||(e._pf=l(M)),a(M._locale)||(e._locale=M._locale),b>0)for(t=0;t<b;t++)a(n=M[o=q[t]])||(e[o]=n);return e}function W(e){m(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===f&&(f=!0,n.updateOffset(this),f=!1)}function _(e){return e instanceof W||null!=e&&null!=e._isAMomentObject}function h(e){!1===n.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function L(e,M){var t=!0;return s((function(){if(null!=n.deprecationHandler&&n.deprecationHandler(null,e),t){var o,b,p,c=[],a=arguments.length;for(b=0;b<a;b++){if(o="","object"==typeof arguments[b]){for(p in o+="\n["+b+"] ",arguments[0])z(arguments[0],p)&&(o+=p+": "+arguments[0][p]+", ");o=o.slice(0,-2)}else o=arguments[b];c.push(o)}h(e+"\nArguments: "+Array.prototype.slice.call(c).join("")+"\n"+(new Error).stack),t=!1}return M.apply(this,arguments)}),M)}var R,g={};function y(e,M){null!=n.deprecationHandler&&n.deprecationHandler(e,M),g[e]||(h(M),g[e]=!0)}function v(e){return"undefined"!=typeof Function&&e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function N(e,M){var t,o=s({},e);for(t in M)z(M,t)&&(p(e[t])&&p(M[t])?(o[t]={},s(o[t],e[t]),s(o[t],M[t])):null!=M[t]?o[t]=M[t]:delete o[t]);for(t in e)z(e,t)&&!z(M,t)&&p(e[t])&&(o[t]=s({},o[t]));return o}function k(e){null!=e&&this.set(e)}n.suppressDeprecationWarnings=!1,n.deprecationHandler=null,R=Object.keys?Object.keys:function(e){var M,t=[];for(M in e)z(e,M)&&t.push(M);return t};function T(e,M,t){var o=""+Math.abs(e),n=M-o.length;return(e>=0?t?"+":"":"-")+Math.pow(10,Math.max(0,n)).toString().substr(1)+o}var B=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,w=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,S={},E={};function X(e,M,t,o){var n=o;"string"==typeof o&&(n=function(){return this[o]()}),e&&(E[e]=n),M&&(E[M[0]]=function(){return T(n.apply(this,arguments),M[1],M[2])}),t&&(E[t]=function(){return this.localeData().ordinal(n.apply(this,arguments),e)})}function Y(e,M){return e.isValid()?(M=D(M,e.localeData()),S[M]=S[M]||function(e){var M,t,o,n=e.match(B);for(M=0,t=n.length;M<t;M++)E[n[M]]?n[M]=E[n[M]]:n[M]=(o=n[M]).match(/\[[\s\S]/)?o.replace(/^\[|\]$/g,""):o.replace(/\\/g,"");return function(M){var o,b="";for(o=0;o<t;o++)b+=v(n[o])?n[o].call(M,e):n[o];return b}}(M),S[M](e)):e.localeData().invalidDate()}function D(e,M){var t=5;function o(e){return M.longDateFormat(e)||e}for(w.lastIndex=0;t>=0&&w.test(e);)e=e.replace(w,o),w.lastIndex=0,t-=1;return e}var x={};function C(e,M){var t=e.toLowerCase();x[t]=x[t+"s"]=x[M]=e}function P(e){return"string"==typeof e?x[e]||x[e.toLowerCase()]:void 0}function H(e){var M,t,o={};for(t in e)z(e,t)&&(M=P(t))&&(o[M]=e[t]);return o}var j={};function F(e,M){j[e]=M}function I(e){return e%4==0&&e%100!=0||e%400==0}function U(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function V(e){var M=+e,t=0;return 0!==M&&isFinite(M)&&(t=U(M)),t}function $(e,M){return function(t){return null!=t?(J(this,e,t),n.updateOffset(this,M),this):G(this,e)}}function G(e,M){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+M]():NaN}function J(e,M,t){e.isValid()&&!isNaN(t)&&("FullYear"===M&&I(e.year())&&1===e.month()&&29===e.date()?(t=V(t),e._d["set"+(e._isUTC?"UTC":"")+M](t,e.month(),Te(t,e.month()))):e._d["set"+(e._isUTC?"UTC":"")+M](t))}var K,Q=/\d/,Z=/\d\d/,ee=/\d{3}/,Me=/\d{4}/,te=/[+-]?\d{6}/,oe=/\d\d?/,ne=/\d\d\d\d?/,be=/\d\d\d\d\d\d?/,pe=/\d{1,3}/,ze=/\d{1,4}/,ce=/[+-]?\d{1,6}/,ae=/\d+/,re=/[+-]?\d+/,Oe=/Z|[+-]\d\d:?\d\d/gi,ie=/Z|[+-]\d\d(?::?\d\d)?/gi,se=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i;function de(e,M,t){K[e]=v(M)?M:function(e,o){return e&&t?t:M}}function le(e,M){return z(K,e)?K[e](M._strict,M._locale):new RegExp(ue(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(function(e,M,t,o,n){return M||t||o||n}))))}function ue(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}K={};var Ae={};function qe(e,M){var t,o,n=M;for("string"==typeof e&&(e=[e]),r(M)&&(n=function(e,t){t[M]=V(e)}),o=e.length,t=0;t<o;t++)Ae[e[t]]=n}function fe(e,M){qe(e,(function(e,t,o,n){o._w=o._w||{},M(e,o._w,o,n)}))}function me(e,M,t){null!=M&&z(Ae,e)&&Ae[e](M,t._a,t,e)}var We,_e=0,he=1,Le=2,Re=3,ge=4,ye=5,ve=6,Ne=7,ke=8;function Te(e,M){if(isNaN(e)||isNaN(M))return NaN;var t,o=(M%(t=12)+t)%t;return e+=(M-o)/12,1===o?I(e)?29:28:31-o%7%2}We=Array.prototype.indexOf?Array.prototype.indexOf:function(e){var M;for(M=0;M<this.length;++M)if(this[M]===e)return M;return-1},X("M",["MM",2],"Mo",(function(){return this.month()+1})),X("MMM",0,0,(function(e){return this.localeData().monthsShort(this,e)})),X("MMMM",0,0,(function(e){return this.localeData().months(this,e)})),C("month","M"),F("month",8),de("M",oe),de("MM",oe,Z),de("MMM",(function(e,M){return M.monthsShortRegex(e)})),de("MMMM",(function(e,M){return M.monthsRegex(e)})),qe(["M","MM"],(function(e,M){M[he]=V(e)-1})),qe(["MMM","MMMM"],(function(e,M,t,o){var n=t._locale.monthsParse(e,o,t._strict);null!=n?M[he]=n:l(t).invalidMonth=e}));var Be="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),we="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),Se=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,Ee=se,Xe=se;function Ye(e,M,t){var o,n,b,p=e.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],o=0;o<12;++o)b=d([2e3,o]),this._shortMonthsParse[o]=this.monthsShort(b,"").toLocaleLowerCase(),this._longMonthsParse[o]=this.months(b,"").toLocaleLowerCase();return t?"MMM"===M?-1!==(n=We.call(this._shortMonthsParse,p))?n:null:-1!==(n=We.call(this._longMonthsParse,p))?n:null:"MMM"===M?-1!==(n=We.call(this._shortMonthsParse,p))||-1!==(n=We.call(this._longMonthsParse,p))?n:null:-1!==(n=We.call(this._longMonthsParse,p))||-1!==(n=We.call(this._shortMonthsParse,p))?n:null}function De(e,M){var t;if(!e.isValid())return e;if("string"==typeof M)if(/^\d+$/.test(M))M=V(M);else if(!r(M=e.localeData().monthsParse(M)))return e;return t=Math.min(e.date(),Te(e.year(),M)),e._d["set"+(e._isUTC?"UTC":"")+"Month"](M,t),e}function xe(e){return null!=e?(De(this,e),n.updateOffset(this,!0),this):G(this,"Month")}function Ce(){function e(e,M){return M.length-e.length}var M,t,o=[],n=[],b=[];for(M=0;M<12;M++)t=d([2e3,M]),o.push(this.monthsShort(t,"")),n.push(this.months(t,"")),b.push(this.months(t,"")),b.push(this.monthsShort(t,""));for(o.sort(e),n.sort(e),b.sort(e),M=0;M<12;M++)o[M]=ue(o[M]),n[M]=ue(n[M]);for(M=0;M<24;M++)b[M]=ue(b[M]);this._monthsRegex=new RegExp("^("+b.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+n.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+o.join("|")+")","i")}function Pe(e){return I(e)?366:365}X("Y",0,0,(function(){var e=this.year();return e<=9999?T(e,4):"+"+e})),X(0,["YY",2],0,(function(){return this.year()%100})),X(0,["YYYY",4],0,"year"),X(0,["YYYYY",5],0,"year"),X(0,["YYYYYY",6,!0],0,"year"),C("year","y"),F("year",1),de("Y",re),de("YY",oe,Z),de("YYYY",ze,Me),de("YYYYY",ce,te),de("YYYYYY",ce,te),qe(["YYYYY","YYYYYY"],_e),qe("YYYY",(function(e,M){M[_e]=2===e.length?n.parseTwoDigitYear(e):V(e)})),qe("YY",(function(e,M){M[_e]=n.parseTwoDigitYear(e)})),qe("Y",(function(e,M){M[_e]=parseInt(e,10)})),n.parseTwoDigitYear=function(e){return V(e)+(V(e)>68?1900:2e3)};var He=$("FullYear",!0);function je(e,M,t,o,n,b,p){var z;return e<100&&e>=0?(z=new Date(e+400,M,t,o,n,b,p),isFinite(z.getFullYear())&&z.setFullYear(e)):z=new Date(e,M,t,o,n,b,p),z}function Fe(e){var M,t;return e<100&&e>=0?((t=Array.prototype.slice.call(arguments))[0]=e+400,M=new Date(Date.UTC.apply(null,t)),isFinite(M.getUTCFullYear())&&M.setUTCFullYear(e)):M=new Date(Date.UTC.apply(null,arguments)),M}function Ie(e,M,t){var o=7+M-t;return-(7+Fe(e,0,o).getUTCDay()-M)%7+o-1}function Ue(e,M,t,o,n){var b,p,z=1+7*(M-1)+(7+t-o)%7+Ie(e,o,n);return z<=0?p=Pe(b=e-1)+z:z>Pe(e)?(b=e+1,p=z-Pe(e)):(b=e,p=z),{year:b,dayOfYear:p}}function Ve(e,M,t){var o,n,b=Ie(e.year(),M,t),p=Math.floor((e.dayOfYear()-b-1)/7)+1;return p<1?o=p+$e(n=e.year()-1,M,t):p>$e(e.year(),M,t)?(o=p-$e(e.year(),M,t),n=e.year()+1):(n=e.year(),o=p),{week:o,year:n}}function $e(e,M,t){var o=Ie(e,M,t),n=Ie(e+1,M,t);return(Pe(e)-o+n)/7}X("w",["ww",2],"wo","week"),X("W",["WW",2],"Wo","isoWeek"),C("week","w"),C("isoWeek","W"),F("week",5),F("isoWeek",5),de("w",oe),de("ww",oe,Z),de("W",oe),de("WW",oe,Z),fe(["w","ww","W","WW"],(function(e,M,t,o){M[o.substr(0,1)]=V(e)}));function Ge(e,M){return e.slice(M,7).concat(e.slice(0,M))}X("d",0,"do","day"),X("dd",0,0,(function(e){return this.localeData().weekdaysMin(this,e)})),X("ddd",0,0,(function(e){return this.localeData().weekdaysShort(this,e)})),X("dddd",0,0,(function(e){return this.localeData().weekdays(this,e)})),X("e",0,0,"weekday"),X("E",0,0,"isoWeekday"),C("day","d"),C("weekday","e"),C("isoWeekday","E"),F("day",11),F("weekday",11),F("isoWeekday",11),de("d",oe),de("e",oe),de("E",oe),de("dd",(function(e,M){return M.weekdaysMinRegex(e)})),de("ddd",(function(e,M){return M.weekdaysShortRegex(e)})),de("dddd",(function(e,M){return M.weekdaysRegex(e)})),fe(["dd","ddd","dddd"],(function(e,M,t,o){var n=t._locale.weekdaysParse(e,o,t._strict);null!=n?M.d=n:l(t).invalidWeekday=e})),fe(["d","e","E"],(function(e,M,t,o){M[o]=V(e)}));var Je="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Ke="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Qe="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Ze=se,eM=se,MM=se;function tM(e,M,t){var o,n,b,p=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],o=0;o<7;++o)b=d([2e3,1]).day(o),this._minWeekdaysParse[o]=this.weekdaysMin(b,"").toLocaleLowerCase(),this._shortWeekdaysParse[o]=this.weekdaysShort(b,"").toLocaleLowerCase(),this._weekdaysParse[o]=this.weekdays(b,"").toLocaleLowerCase();return t?"dddd"===M?-1!==(n=We.call(this._weekdaysParse,p))?n:null:"ddd"===M?-1!==(n=We.call(this._shortWeekdaysParse,p))?n:null:-1!==(n=We.call(this._minWeekdaysParse,p))?n:null:"dddd"===M?-1!==(n=We.call(this._weekdaysParse,p))||-1!==(n=We.call(this._shortWeekdaysParse,p))||-1!==(n=We.call(this._minWeekdaysParse,p))?n:null:"ddd"===M?-1!==(n=We.call(this._shortWeekdaysParse,p))||-1!==(n=We.call(this._weekdaysParse,p))||-1!==(n=We.call(this._minWeekdaysParse,p))?n:null:-1!==(n=We.call(this._minWeekdaysParse,p))||-1!==(n=We.call(this._weekdaysParse,p))||-1!==(n=We.call(this._shortWeekdaysParse,p))?n:null}function oM(){function e(e,M){return M.length-e.length}var M,t,o,n,b,p=[],z=[],c=[],a=[];for(M=0;M<7;M++)t=d([2e3,1]).day(M),o=ue(this.weekdaysMin(t,"")),n=ue(this.weekdaysShort(t,"")),b=ue(this.weekdays(t,"")),p.push(o),z.push(n),c.push(b),a.push(o),a.push(n),a.push(b);p.sort(e),z.sort(e),c.sort(e),a.sort(e),this._weekdaysRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+c.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+z.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+p.join("|")+")","i")}function nM(){return this.hours()%12||12}function bM(e,M){X(e,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),M)}))}function pM(e,M){return M._meridiemParse}X("H",["HH",2],0,"hour"),X("h",["hh",2],0,nM),X("k",["kk",2],0,(function(){return this.hours()||24})),X("hmm",0,0,(function(){return""+nM.apply(this)+T(this.minutes(),2)})),X("hmmss",0,0,(function(){return""+nM.apply(this)+T(this.minutes(),2)+T(this.seconds(),2)})),X("Hmm",0,0,(function(){return""+this.hours()+T(this.minutes(),2)})),X("Hmmss",0,0,(function(){return""+this.hours()+T(this.minutes(),2)+T(this.seconds(),2)})),bM("a",!0),bM("A",!1),C("hour","h"),F("hour",13),de("a",pM),de("A",pM),de("H",oe),de("h",oe),de("k",oe),de("HH",oe,Z),de("hh",oe,Z),de("kk",oe,Z),de("hmm",ne),de("hmmss",be),de("Hmm",ne),de("Hmmss",be),qe(["H","HH"],Re),qe(["k","kk"],(function(e,M,t){var o=V(e);M[Re]=24===o?0:o})),qe(["a","A"],(function(e,M,t){t._isPm=t._locale.isPM(e),t._meridiem=e})),qe(["h","hh"],(function(e,M,t){M[Re]=V(e),l(t).bigHour=!0})),qe("hmm",(function(e,M,t){var o=e.length-2;M[Re]=V(e.substr(0,o)),M[ge]=V(e.substr(o)),l(t).bigHour=!0})),qe("hmmss",(function(e,M,t){var o=e.length-4,n=e.length-2;M[Re]=V(e.substr(0,o)),M[ge]=V(e.substr(o,2)),M[ye]=V(e.substr(n)),l(t).bigHour=!0})),qe("Hmm",(function(e,M,t){var o=e.length-2;M[Re]=V(e.substr(0,o)),M[ge]=V(e.substr(o))})),qe("Hmmss",(function(e,M,t){var o=e.length-4,n=e.length-2;M[Re]=V(e.substr(0,o)),M[ge]=V(e.substr(o,2)),M[ye]=V(e.substr(n))}));var zM=$("Hours",!0);var cM,aM={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Be,monthsShort:we,week:{dow:0,doy:6},weekdays:Je,weekdaysMin:Qe,weekdaysShort:Ke,meridiemParse:/[ap]\.?m?\.?/i},rM={},OM={};function iM(e,M){var t,o=Math.min(e.length,M.length);for(t=0;t<o;t+=1)if(e[t]!==M[t])return t;return o}function sM(e){return e?e.toLowerCase().replace("_","-"):e}function dM(M){var o=null;if(void 0===rM[M]&&e&&e.exports&&function(e){return null!=e.match("^[^/\\\\]*$")}(M))try{o=cM._abbr,t(6700)("./"+M),lM(o)}catch(e){rM[M]=null}return rM[M]}function lM(e,M){var t;return e&&((t=a(M)?AM(e):uM(e,M))?cM=t:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),cM._abbr}function uM(e,M){if(null!==M){var t,o=aM;if(M.abbr=e,null!=rM[e])y("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),o=rM[e]._config;else if(null!=M.parentLocale)if(null!=rM[M.parentLocale])o=rM[M.parentLocale]._config;else{if(null==(t=dM(M.parentLocale)))return OM[M.parentLocale]||(OM[M.parentLocale]=[]),OM[M.parentLocale].push({name:e,config:M}),null;o=t._config}return rM[e]=new k(N(o,M)),OM[e]&&OM[e].forEach((function(e){uM(e.name,e.config)})),lM(e),rM[e]}return delete rM[e],null}function AM(e){var M;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return cM;if(!b(e)){if(M=dM(e))return M;e=[e]}return function(e){for(var M,t,o,n,b=0;b<e.length;){for(M=(n=sM(e[b]).split("-")).length,t=(t=sM(e[b+1]))?t.split("-"):null;M>0;){if(o=dM(n.slice(0,M).join("-")))return o;if(t&&t.length>=M&&iM(n,t)>=M-1)break;M--}b++}return cM}(e)}function qM(e){var M,t=e._a;return t&&-2===l(e).overflow&&(M=t[he]<0||t[he]>11?he:t[Le]<1||t[Le]>Te(t[_e],t[he])?Le:t[Re]<0||t[Re]>24||24===t[Re]&&(0!==t[ge]||0!==t[ye]||0!==t[ve])?Re:t[ge]<0||t[ge]>59?ge:t[ye]<0||t[ye]>59?ye:t[ve]<0||t[ve]>999?ve:-1,l(e)._overflowDayOfYear&&(M<_e||M>Le)&&(M=Le),l(e)._overflowWeeks&&-1===M&&(M=Ne),l(e)._overflowWeekday&&-1===M&&(M=ke),l(e).overflow=M),e}var fM=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,mM=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,WM=/Z|[+-]\d\d(?::?\d\d)?/,_M=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],hM=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],LM=/^\/?Date\((-?\d+)/i,RM=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,gM={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function yM(e){var M,t,o,n,b,p,z=e._i,c=fM.exec(z)||mM.exec(z),a=_M.length,r=hM.length;if(c){for(l(e).iso=!0,M=0,t=a;M<t;M++)if(_M[M][1].exec(c[1])){n=_M[M][0],o=!1!==_M[M][2];break}if(null==n)return void(e._isValid=!1);if(c[3]){for(M=0,t=r;M<t;M++)if(hM[M][1].exec(c[3])){b=(c[2]||" ")+hM[M][0];break}if(null==b)return void(e._isValid=!1)}if(!o&&null!=b)return void(e._isValid=!1);if(c[4]){if(!WM.exec(c[4]))return void(e._isValid=!1);p="Z"}e._f=n+(b||"")+(p||""),BM(e)}else e._isValid=!1}function vM(e){var M=parseInt(e,10);return M<=49?2e3+M:M<=999?1900+M:M}function NM(e){var M,t,o,n,b,p,z,c,a=RM.exec(e._i.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,""));if(a){if(t=a[4],o=a[3],n=a[2],b=a[5],p=a[6],z=a[7],c=[vM(t),we.indexOf(o),parseInt(n,10),parseInt(b,10),parseInt(p,10)],z&&c.push(parseInt(z,10)),M=c,!function(e,M,t){return!e||Ke.indexOf(e)===new Date(M[0],M[1],M[2]).getDay()||(l(t).weekdayMismatch=!0,t._isValid=!1,!1)}(a[1],M,e))return;e._a=M,e._tzm=function(e,M,t){if(e)return gM[e];if(M)return 0;var o=parseInt(t,10),n=o%100;return(o-n)/100*60+n}(a[8],a[9],a[10]),e._d=Fe.apply(null,e._a),e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),l(e).rfc2822=!0}else e._isValid=!1}function kM(e,M,t){return null!=e?e:null!=M?M:t}function TM(e){var M,t,o,b,p,z=[];if(!e._d){for(o=function(e){var M=new Date(n.now());return e._useUTC?[M.getUTCFullYear(),M.getUTCMonth(),M.getUTCDate()]:[M.getFullYear(),M.getMonth(),M.getDate()]}(e),e._w&&null==e._a[Le]&&null==e._a[he]&&function(e){var M,t,o,n,b,p,z,c,a;null!=(M=e._w).GG||null!=M.W||null!=M.E?(b=1,p=4,t=kM(M.GG,e._a[_e],Ve(EM(),1,4).year),o=kM(M.W,1),((n=kM(M.E,1))<1||n>7)&&(c=!0)):(b=e._locale._week.dow,p=e._locale._week.doy,a=Ve(EM(),b,p),t=kM(M.gg,e._a[_e],a.year),o=kM(M.w,a.week),null!=M.d?((n=M.d)<0||n>6)&&(c=!0):null!=M.e?(n=M.e+b,(M.e<0||M.e>6)&&(c=!0)):n=b),o<1||o>$e(t,b,p)?l(e)._overflowWeeks=!0:null!=c?l(e)._overflowWeekday=!0:(z=Ue(t,o,n,b,p),e._a[_e]=z.year,e._dayOfYear=z.dayOfYear)}(e),null!=e._dayOfYear&&(p=kM(e._a[_e],o[_e]),(e._dayOfYear>Pe(p)||0===e._dayOfYear)&&(l(e)._overflowDayOfYear=!0),t=Fe(p,0,e._dayOfYear),e._a[he]=t.getUTCMonth(),e._a[Le]=t.getUTCDate()),M=0;M<3&&null==e._a[M];++M)e._a[M]=z[M]=o[M];for(;M<7;M++)e._a[M]=z[M]=null==e._a[M]?2===M?1:0:e._a[M];24===e._a[Re]&&0===e._a[ge]&&0===e._a[ye]&&0===e._a[ve]&&(e._nextDay=!0,e._a[Re]=0),e._d=(e._useUTC?Fe:je).apply(null,z),b=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[Re]=24),e._w&&void 0!==e._w.d&&e._w.d!==b&&(l(e).weekdayMismatch=!0)}}function BM(e){if(e._f!==n.ISO_8601)if(e._f!==n.RFC_2822){e._a=[],l(e).empty=!0;var M,t,o,b,p,z,c,a=""+e._i,r=a.length,O=0;for(c=(o=D(e._f,e._locale).match(B)||[]).length,M=0;M<c;M++)b=o[M],(t=(a.match(le(b,e))||[])[0])&&((p=a.substr(0,a.indexOf(t))).length>0&&l(e).unusedInput.push(p),a=a.slice(a.indexOf(t)+t.length),O+=t.length),E[b]?(t?l(e).empty=!1:l(e).unusedTokens.push(b),me(b,t,e)):e._strict&&!t&&l(e).unusedTokens.push(b);l(e).charsLeftOver=r-O,a.length>0&&l(e).unusedInput.push(a),e._a[Re]<=12&&!0===l(e).bigHour&&e._a[Re]>0&&(l(e).bigHour=void 0),l(e).parsedDateParts=e._a.slice(0),l(e).meridiem=e._meridiem,e._a[Re]=function(e,M,t){var o;return null==t?M:null!=e.meridiemHour?e.meridiemHour(M,t):null!=e.isPM?((o=e.isPM(t))&&M<12&&(M+=12),o||12!==M||(M=0),M):M}(e._locale,e._a[Re],e._meridiem),null!==(z=l(e).era)&&(e._a[_e]=e._locale.erasConvertYear(z,e._a[_e])),TM(e),qM(e)}else NM(e);else yM(e)}function wM(e){var M=e._i,t=e._f;return e._locale=e._locale||AM(e._l),null===M||void 0===t&&""===M?A({nullInput:!0}):("string"==typeof M&&(e._i=M=e._locale.preparse(M)),_(M)?new W(qM(M)):(O(M)?e._d=M:b(t)?function(e){var M,t,o,n,b,p,z=!1,c=e._f.length;if(0===c)return l(e).invalidFormat=!0,void(e._d=new Date(NaN));for(n=0;n<c;n++)b=0,p=!1,M=m({},e),null!=e._useUTC&&(M._useUTC=e._useUTC),M._f=e._f[n],BM(M),u(M)&&(p=!0),b+=l(M).charsLeftOver,b+=10*l(M).unusedTokens.length,l(M).score=b,z?b<o&&(o=b,t=M):(null==o||b<o||p)&&(o=b,t=M,p&&(z=!0));s(e,t||M)}(e):t?BM(e):function(e){var M=e._i;a(M)?e._d=new Date(n.now()):O(M)?e._d=new Date(M.valueOf()):"string"==typeof M?function(e){var M=LM.exec(e._i);null===M?(yM(e),!1===e._isValid&&(delete e._isValid,NM(e),!1===e._isValid&&(delete e._isValid,e._strict?e._isValid=!1:n.createFromInputFallback(e)))):e._d=new Date(+M[1])}(e):b(M)?(e._a=i(M.slice(0),(function(e){return parseInt(e,10)})),TM(e)):p(M)?function(e){if(!e._d){var M=H(e._i),t=void 0===M.day?M.date:M.day;e._a=i([M.year,M.month,t,M.hour,M.minute,M.second,M.millisecond],(function(e){return e&&parseInt(e,10)})),TM(e)}}(e):r(M)?e._d=new Date(M):n.createFromInputFallback(e)}(e),u(e)||(e._d=null),e))}function SM(e,M,t,o,n){var z,a={};return!0!==M&&!1!==M||(o=M,M=void 0),!0!==t&&!1!==t||(o=t,t=void 0),(p(e)&&c(e)||b(e)&&0===e.length)&&(e=void 0),a._isAMomentObject=!0,a._useUTC=a._isUTC=n,a._l=t,a._i=e,a._f=M,a._strict=o,(z=new W(qM(wM(a))))._nextDay&&(z.add(1,"d"),z._nextDay=void 0),z}function EM(e,M,t,o){return SM(e,M,t,o,!1)}n.createFromInputFallback=L("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",(function(e){e._d=new Date(e._i+(e._useUTC?" UTC":""))})),n.ISO_8601=function(){},n.RFC_2822=function(){};var XM=L("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var e=EM.apply(null,arguments);return this.isValid()&&e.isValid()?e<this?this:e:A()})),YM=L("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var e=EM.apply(null,arguments);return this.isValid()&&e.isValid()?e>this?this:e:A()}));function DM(e,M){var t,o;if(1===M.length&&b(M[0])&&(M=M[0]),!M.length)return EM();for(t=M[0],o=1;o<M.length;++o)M[o].isValid()&&!M[o][e](t)||(t=M[o]);return t}var xM=["year","quarter","month","week","day","hour","minute","second","millisecond"];function CM(e){var M=H(e),t=M.year||0,o=M.quarter||0,n=M.month||0,b=M.week||M.isoWeek||0,p=M.day||0,c=M.hour||0,a=M.minute||0,r=M.second||0,O=M.millisecond||0;this._isValid=function(e){var M,t,o=!1,n=xM.length;for(M in e)if(z(e,M)&&(-1===We.call(xM,M)||null!=e[M]&&isNaN(e[M])))return!1;for(t=0;t<n;++t)if(e[xM[t]]){if(o)return!1;parseFloat(e[xM[t]])!==V(e[xM[t]])&&(o=!0)}return!0}(M),this._milliseconds=+O+1e3*r+6e4*a+1e3*c*60*60,this._days=+p+7*b,this._months=+n+3*o+12*t,this._data={},this._locale=AM(),this._bubble()}function PM(e){return e instanceof CM}function HM(e){return e<0?-1*Math.round(-1*e):Math.round(e)}function jM(e,M){X(e,0,0,(function(){var e=this.utcOffset(),t="+";return e<0&&(e=-e,t="-"),t+T(~~(e/60),2)+M+T(~~e%60,2)}))}jM("Z",":"),jM("ZZ",""),de("Z",ie),de("ZZ",ie),qe(["Z","ZZ"],(function(e,M,t){t._useUTC=!0,t._tzm=IM(ie,e)}));var FM=/([\+\-]|\d\d)/gi;function IM(e,M){var t,o,n=(M||"").match(e);return null===n?null:0===(o=60*(t=((n[n.length-1]||[])+"").match(FM)||["-",0,0])[1]+V(t[2]))?0:"+"===t[0]?o:-o}function UM(e,M){var t,o;return M._isUTC?(t=M.clone(),o=(_(e)||O(e)?e.valueOf():EM(e).valueOf())-t.valueOf(),t._d.setTime(t._d.valueOf()+o),n.updateOffset(t,!1),t):EM(e).local()}function VM(e){return-Math.round(e._d.getTimezoneOffset())}function $M(){return!!this.isValid()&&this._isUTC&&0===this._offset}n.updateOffset=function(){};var GM=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,JM=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function KM(e,M){var t,o,n,b,p,c,a=e,O=null;return PM(e)?a={ms:e._milliseconds,d:e._days,M:e._months}:r(e)||!isNaN(+e)?(a={},M?a[M]=+e:a.milliseconds=+e):(O=GM.exec(e))?(t="-"===O[1]?-1:1,a={y:0,d:V(O[Le])*t,h:V(O[Re])*t,m:V(O[ge])*t,s:V(O[ye])*t,ms:V(HM(1e3*O[ve]))*t}):(O=JM.exec(e))?(t="-"===O[1]?-1:1,a={y:QM(O[2],t),M:QM(O[3],t),w:QM(O[4],t),d:QM(O[5],t),h:QM(O[6],t),m:QM(O[7],t),s:QM(O[8],t)}):null==a?a={}:"object"==typeof a&&("from"in a||"to"in a)&&(b=EM(a.from),p=EM(a.to),n=b.isValid()&&p.isValid()?(p=UM(p,b),b.isBefore(p)?c=ZM(b,p):((c=ZM(p,b)).milliseconds=-c.milliseconds,c.months=-c.months),c):{milliseconds:0,months:0},(a={}).ms=n.milliseconds,a.M=n.months),o=new CM(a),PM(e)&&z(e,"_locale")&&(o._locale=e._locale),PM(e)&&z(e,"_isValid")&&(o._isValid=e._isValid),o}function QM(e,M){var t=e&&parseFloat(e.replace(",","."));return(isNaN(t)?0:t)*M}function ZM(e,M){var t={};return t.months=M.month()-e.month()+12*(M.year()-e.year()),e.clone().add(t.months,"M").isAfter(M)&&--t.months,t.milliseconds=+M-+e.clone().add(t.months,"M"),t}function et(e,M){return function(t,o){var n;return null===o||isNaN(+o)||(y(M,"moment()."+M+"(period, number) is deprecated. Please use moment()."+M+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),n=t,t=o,o=n),Mt(this,KM(t,o),e),this}}function Mt(e,M,t,o){var b=M._milliseconds,p=HM(M._days),z=HM(M._months);e.isValid()&&(o=null==o||o,z&&De(e,G(e,"Month")+z*t),p&&J(e,"Date",G(e,"Date")+p*t),b&&e._d.setTime(e._d.valueOf()+b*t),o&&n.updateOffset(e,p||z))}KM.fn=CM.prototype,KM.invalid=function(){return KM(NaN)};var tt=et(1,"add"),ot=et(-1,"subtract");function nt(e){return"string"==typeof e||e instanceof String}function bt(e){return _(e)||O(e)||nt(e)||r(e)||function(e){var M=b(e),t=!1;return M&&(t=0===e.filter((function(M){return!r(M)&&nt(e)})).length),M&&t}(e)||function(e){var M,t,o=p(e)&&!c(e),n=!1,b=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],a=b.length;for(M=0;M<a;M+=1)t=b[M],n=n||z(e,t);return o&&n}(e)||null==e}function pt(e,M){if(e.date()<M.date())return-pt(M,e);var t=12*(M.year()-e.year())+(M.month()-e.month()),o=e.clone().add(t,"months");return-(t+(M-o<0?(M-o)/(o-e.clone().add(t-1,"months")):(M-o)/(e.clone().add(t+1,"months")-o)))||0}function zt(e){var M;return void 0===e?this._locale._abbr:(null!=(M=AM(e))&&(this._locale=M),this)}n.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",n.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var ct=L("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",(function(e){return void 0===e?this.localeData():this.locale(e)}));function at(){return this._locale}var rt=1e3,Ot=6e4,it=36e5,st=126227808e5;function dt(e,M){return(e%M+M)%M}function lt(e,M,t){return e<100&&e>=0?new Date(e+400,M,t)-st:new Date(e,M,t).valueOf()}function ut(e,M,t){return e<100&&e>=0?Date.UTC(e+400,M,t)-st:Date.UTC(e,M,t)}function At(e,M){return M.erasAbbrRegex(e)}function qt(){var e,M,t=[],o=[],n=[],b=[],p=this.eras();for(e=0,M=p.length;e<M;++e)o.push(ue(p[e].name)),t.push(ue(p[e].abbr)),n.push(ue(p[e].narrow)),b.push(ue(p[e].name)),b.push(ue(p[e].abbr)),b.push(ue(p[e].narrow));this._erasRegex=new RegExp("^("+b.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+o.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+t.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+n.join("|")+")","i")}function ft(e,M){X(0,[e,e.length],0,M)}function mt(e,M,t,o,n){var b;return null==e?Ve(this,o,n).year:(M>(b=$e(e,o,n))&&(M=b),Wt.call(this,e,M,t,o,n))}function Wt(e,M,t,o,n){var b=Ue(e,M,t,o,n),p=Fe(b.year,0,b.dayOfYear);return this.year(p.getUTCFullYear()),this.month(p.getUTCMonth()),this.date(p.getUTCDate()),this}X("N",0,0,"eraAbbr"),X("NN",0,0,"eraAbbr"),X("NNN",0,0,"eraAbbr"),X("NNNN",0,0,"eraName"),X("NNNNN",0,0,"eraNarrow"),X("y",["y",1],"yo","eraYear"),X("y",["yy",2],0,"eraYear"),X("y",["yyy",3],0,"eraYear"),X("y",["yyyy",4],0,"eraYear"),de("N",At),de("NN",At),de("NNN",At),de("NNNN",(function(e,M){return M.erasNameRegex(e)})),de("NNNNN",(function(e,M){return M.erasNarrowRegex(e)})),qe(["N","NN","NNN","NNNN","NNNNN"],(function(e,M,t,o){var n=t._locale.erasParse(e,o,t._strict);n?l(t).era=n:l(t).invalidEra=e})),de("y",ae),de("yy",ae),de("yyy",ae),de("yyyy",ae),de("yo",(function(e,M){return M._eraYearOrdinalRegex||ae})),qe(["y","yy","yyy","yyyy"],_e),qe(["yo"],(function(e,M,t,o){var n;t._locale._eraYearOrdinalRegex&&(n=e.match(t._locale._eraYearOrdinalRegex)),t._locale.eraYearOrdinalParse?M[_e]=t._locale.eraYearOrdinalParse(e,n):M[_e]=parseInt(e,10)})),X(0,["gg",2],0,(function(){return this.weekYear()%100})),X(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),ft("gggg","weekYear"),ft("ggggg","weekYear"),ft("GGGG","isoWeekYear"),ft("GGGGG","isoWeekYear"),C("weekYear","gg"),C("isoWeekYear","GG"),F("weekYear",1),F("isoWeekYear",1),de("G",re),de("g",re),de("GG",oe,Z),de("gg",oe,Z),de("GGGG",ze,Me),de("gggg",ze,Me),de("GGGGG",ce,te),de("ggggg",ce,te),fe(["gggg","ggggg","GGGG","GGGGG"],(function(e,M,t,o){M[o.substr(0,2)]=V(e)})),fe(["gg","GG"],(function(e,M,t,o){M[o]=n.parseTwoDigitYear(e)})),X("Q",0,"Qo","quarter"),C("quarter","Q"),F("quarter",7),de("Q",Q),qe("Q",(function(e,M){M[he]=3*(V(e)-1)})),X("D",["DD",2],"Do","date"),C("date","D"),F("date",9),de("D",oe),de("DD",oe,Z),de("Do",(function(e,M){return e?M._dayOfMonthOrdinalParse||M._ordinalParse:M._dayOfMonthOrdinalParseLenient})),qe(["D","DD"],Le),qe("Do",(function(e,M){M[Le]=V(e.match(oe)[0])}));var _t=$("Date",!0);X("DDD",["DDDD",3],"DDDo","dayOfYear"),C("dayOfYear","DDD"),F("dayOfYear",4),de("DDD",pe),de("DDDD",ee),qe(["DDD","DDDD"],(function(e,M,t){t._dayOfYear=V(e)})),X("m",["mm",2],0,"minute"),C("minute","m"),F("minute",14),de("m",oe),de("mm",oe,Z),qe(["m","mm"],ge);var ht=$("Minutes",!1);X("s",["ss",2],0,"second"),C("second","s"),F("second",15),de("s",oe),de("ss",oe,Z),qe(["s","ss"],ye);var Lt,Rt,gt=$("Seconds",!1);for(X("S",0,0,(function(){return~~(this.millisecond()/100)})),X(0,["SS",2],0,(function(){return~~(this.millisecond()/10)})),X(0,["SSS",3],0,"millisecond"),X(0,["SSSS",4],0,(function(){return 10*this.millisecond()})),X(0,["SSSSS",5],0,(function(){return 100*this.millisecond()})),X(0,["SSSSSS",6],0,(function(){return 1e3*this.millisecond()})),X(0,["SSSSSSS",7],0,(function(){return 1e4*this.millisecond()})),X(0,["SSSSSSSS",8],0,(function(){return 1e5*this.millisecond()})),X(0,["SSSSSSSSS",9],0,(function(){return 1e6*this.millisecond()})),C("millisecond","ms"),F("millisecond",16),de("S",pe,Q),de("SS",pe,Z),de("SSS",pe,ee),Lt="SSSS";Lt.length<=9;Lt+="S")de(Lt,ae);function yt(e,M){M[ve]=V(1e3*("0."+e))}for(Lt="S";Lt.length<=9;Lt+="S")qe(Lt,yt);Rt=$("Milliseconds",!1),X("z",0,0,"zoneAbbr"),X("zz",0,0,"zoneName");var vt=W.prototype;function Nt(e){return e}vt.add=tt,vt.calendar=function(e,M){1===arguments.length&&(arguments[0]?bt(arguments[0])?(e=arguments[0],M=void 0):function(e){var M,t=p(e)&&!c(e),o=!1,n=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"];for(M=0;M<n.length;M+=1)o=o||z(e,n[M]);return t&&o}(arguments[0])&&(M=arguments[0],e=void 0):(e=void 0,M=void 0));var t=e||EM(),o=UM(t,this).startOf("day"),b=n.calendarFormat(this,o)||"sameElse",a=M&&(v(M[b])?M[b].call(this,t):M[b]);return this.format(a||this.localeData().calendar(b,this,EM(t)))},vt.clone=function(){return new W(this)},vt.diff=function(e,M,t){var o,n,b;if(!this.isValid())return NaN;if(!(o=UM(e,this)).isValid())return NaN;switch(n=6e4*(o.utcOffset()-this.utcOffset()),M=P(M)){case"year":b=pt(this,o)/12;break;case"month":b=pt(this,o);break;case"quarter":b=pt(this,o)/3;break;case"second":b=(this-o)/1e3;break;case"minute":b=(this-o)/6e4;break;case"hour":b=(this-o)/36e5;break;case"day":b=(this-o-n)/864e5;break;case"week":b=(this-o-n)/6048e5;break;default:b=this-o}return t?b:U(b)},vt.endOf=function(e){var M,t;if(void 0===(e=P(e))||"millisecond"===e||!this.isValid())return this;switch(t=this._isUTC?ut:lt,e){case"year":M=t(this.year()+1,0,1)-1;break;case"quarter":M=t(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":M=t(this.year(),this.month()+1,1)-1;break;case"week":M=t(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":M=t(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":M=t(this.year(),this.month(),this.date()+1)-1;break;case"hour":M=this._d.valueOf(),M+=it-dt(M+(this._isUTC?0:this.utcOffset()*Ot),it)-1;break;case"minute":M=this._d.valueOf(),M+=Ot-dt(M,Ot)-1;break;case"second":M=this._d.valueOf(),M+=rt-dt(M,rt)-1}return this._d.setTime(M),n.updateOffset(this,!0),this},vt.format=function(e){e||(e=this.isUtc()?n.defaultFormatUtc:n.defaultFormat);var M=Y(this,e);return this.localeData().postformat(M)},vt.from=function(e,M){return this.isValid()&&(_(e)&&e.isValid()||EM(e).isValid())?KM({to:this,from:e}).locale(this.locale()).humanize(!M):this.localeData().invalidDate()},vt.fromNow=function(e){return this.from(EM(),e)},vt.to=function(e,M){return this.isValid()&&(_(e)&&e.isValid()||EM(e).isValid())?KM({from:this,to:e}).locale(this.locale()).humanize(!M):this.localeData().invalidDate()},vt.toNow=function(e){return this.to(EM(),e)},vt.get=function(e){return v(this[e=P(e)])?this[e]():this},vt.invalidAt=function(){return l(this).overflow},vt.isAfter=function(e,M){var t=_(e)?e:EM(e);return!(!this.isValid()||!t.isValid())&&("millisecond"===(M=P(M)||"millisecond")?this.valueOf()>t.valueOf():t.valueOf()<this.clone().startOf(M).valueOf())},vt.isBefore=function(e,M){var t=_(e)?e:EM(e);return!(!this.isValid()||!t.isValid())&&("millisecond"===(M=P(M)||"millisecond")?this.valueOf()<t.valueOf():this.clone().endOf(M).valueOf()<t.valueOf())},vt.isBetween=function(e,M,t,o){var n=_(e)?e:EM(e),b=_(M)?M:EM(M);return!!(this.isValid()&&n.isValid()&&b.isValid())&&("("===(o=o||"()")[0]?this.isAfter(n,t):!this.isBefore(n,t))&&(")"===o[1]?this.isBefore(b,t):!this.isAfter(b,t))},vt.isSame=function(e,M){var t,o=_(e)?e:EM(e);return!(!this.isValid()||!o.isValid())&&("millisecond"===(M=P(M)||"millisecond")?this.valueOf()===o.valueOf():(t=o.valueOf(),this.clone().startOf(M).valueOf()<=t&&t<=this.clone().endOf(M).valueOf()))},vt.isSameOrAfter=function(e,M){return this.isSame(e,M)||this.isAfter(e,M)},vt.isSameOrBefore=function(e,M){return this.isSame(e,M)||this.isBefore(e,M)},vt.isValid=function(){return u(this)},vt.lang=ct,vt.locale=zt,vt.localeData=at,vt.max=YM,vt.min=XM,vt.parsingFlags=function(){return s({},l(this))},vt.set=function(e,M){if("object"==typeof e){var t,o=function(e){var M,t=[];for(M in e)z(e,M)&&t.push({unit:M,priority:j[M]});return t.sort((function(e,M){return e.priority-M.priority})),t}(e=H(e)),n=o.length;for(t=0;t<n;t++)this[o[t].unit](e[o[t].unit])}else if(v(this[e=P(e)]))return this[e](M);return this},vt.startOf=function(e){var M,t;if(void 0===(e=P(e))||"millisecond"===e||!this.isValid())return this;switch(t=this._isUTC?ut:lt,e){case"year":M=t(this.year(),0,1);break;case"quarter":M=t(this.year(),this.month()-this.month()%3,1);break;case"month":M=t(this.year(),this.month(),1);break;case"week":M=t(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":M=t(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":M=t(this.year(),this.month(),this.date());break;case"hour":M=this._d.valueOf(),M-=dt(M+(this._isUTC?0:this.utcOffset()*Ot),it);break;case"minute":M=this._d.valueOf(),M-=dt(M,Ot);break;case"second":M=this._d.valueOf(),M-=dt(M,rt)}return this._d.setTime(M),n.updateOffset(this,!0),this},vt.subtract=ot,vt.toArray=function(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]},vt.toObject=function(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}},vt.toDate=function(){return new Date(this.valueOf())},vt.toISOString=function(e){if(!this.isValid())return null;var M=!0!==e,t=M?this.clone().utc():this;return t.year()<0||t.year()>9999?Y(t,M?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):v(Date.prototype.toISOString)?M?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",Y(t,"Z")):Y(t,M?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},vt.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e,M,t,o="moment",n="";return this.isLocal()||(o=0===this.utcOffset()?"moment.utc":"moment.parseZone",n="Z"),e="["+o+'("]',M=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY","-MM-DD[T]HH:mm:ss.SSS",t=n+'[")]',this.format(e+M+"-MM-DD[T]HH:mm:ss.SSS"+t)},"undefined"!=typeof Symbol&&null!=Symbol.for&&(vt[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),vt.toJSON=function(){return this.isValid()?this.toISOString():null},vt.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},vt.unix=function(){return Math.floor(this.valueOf()/1e3)},vt.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},vt.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},vt.eraName=function(){var e,M,t,o=this.localeData().eras();for(e=0,M=o.length;e<M;++e){if(t=this.clone().startOf("day").valueOf(),o[e].since<=t&&t<=o[e].until)return o[e].name;if(o[e].until<=t&&t<=o[e].since)return o[e].name}return""},vt.eraNarrow=function(){var e,M,t,o=this.localeData().eras();for(e=0,M=o.length;e<M;++e){if(t=this.clone().startOf("day").valueOf(),o[e].since<=t&&t<=o[e].until)return o[e].narrow;if(o[e].until<=t&&t<=o[e].since)return o[e].narrow}return""},vt.eraAbbr=function(){var e,M,t,o=this.localeData().eras();for(e=0,M=o.length;e<M;++e){if(t=this.clone().startOf("day").valueOf(),o[e].since<=t&&t<=o[e].until)return o[e].abbr;if(o[e].until<=t&&t<=o[e].since)return o[e].abbr}return""},vt.eraYear=function(){var e,M,t,o,b=this.localeData().eras();for(e=0,M=b.length;e<M;++e)if(t=b[e].since<=b[e].until?1:-1,o=this.clone().startOf("day").valueOf(),b[e].since<=o&&o<=b[e].until||b[e].until<=o&&o<=b[e].since)return(this.year()-n(b[e].since).year())*t+b[e].offset;return this.year()},vt.year=He,vt.isLeapYear=function(){return I(this.year())},vt.weekYear=function(e){return mt.call(this,e,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},vt.isoWeekYear=function(e){return mt.call(this,e,this.isoWeek(),this.isoWeekday(),1,4)},vt.quarter=vt.quarters=function(e){return null==e?Math.ceil((this.month()+1)/3):this.month(3*(e-1)+this.month()%3)},vt.month=xe,vt.daysInMonth=function(){return Te(this.year(),this.month())},vt.week=vt.weeks=function(e){var M=this.localeData().week(this);return null==e?M:this.add(7*(e-M),"d")},vt.isoWeek=vt.isoWeeks=function(e){var M=Ve(this,1,4).week;return null==e?M:this.add(7*(e-M),"d")},vt.weeksInYear=function(){var e=this.localeData()._week;return $e(this.year(),e.dow,e.doy)},vt.weeksInWeekYear=function(){var e=this.localeData()._week;return $e(this.weekYear(),e.dow,e.doy)},vt.isoWeeksInYear=function(){return $e(this.year(),1,4)},vt.isoWeeksInISOWeekYear=function(){return $e(this.isoWeekYear(),1,4)},vt.date=_t,vt.day=vt.days=function(e){if(!this.isValid())return null!=e?this:NaN;var M=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=e?(e=function(e,M){return"string"!=typeof e?e:isNaN(e)?"number"==typeof(e=M.weekdaysParse(e))?e:null:parseInt(e,10)}(e,this.localeData()),this.add(e-M,"d")):M},vt.weekday=function(e){if(!this.isValid())return null!=e?this:NaN;var M=(this.day()+7-this.localeData()._week.dow)%7;return null==e?M:this.add(e-M,"d")},vt.isoWeekday=function(e){if(!this.isValid())return null!=e?this:NaN;if(null!=e){var M=function(e,M){return"string"==typeof e?M.weekdaysParse(e)%7||7:isNaN(e)?null:e}(e,this.localeData());return this.day(this.day()%7?M:M-7)}return this.day()||7},vt.dayOfYear=function(e){var M=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==e?M:this.add(e-M,"d")},vt.hour=vt.hours=zM,vt.minute=vt.minutes=ht,vt.second=vt.seconds=gt,vt.millisecond=vt.milliseconds=Rt,vt.utcOffset=function(e,M,t){var o,b=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null!=e){if("string"==typeof e){if(null===(e=IM(ie,e)))return this}else Math.abs(e)<16&&!t&&(e*=60);return!this._isUTC&&M&&(o=VM(this)),this._offset=e,this._isUTC=!0,null!=o&&this.add(o,"m"),b!==e&&(!M||this._changeInProgress?Mt(this,KM(e-b,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,n.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?b:VM(this)},vt.utc=function(e){return this.utcOffset(0,e)},vt.local=function(e){return this._isUTC&&(this.utcOffset(0,e),this._isUTC=!1,e&&this.subtract(VM(this),"m")),this},vt.parseZone=function(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var e=IM(Oe,this._i);null!=e?this.utcOffset(e):this.utcOffset(0,!0)}return this},vt.hasAlignedHourOffset=function(e){return!!this.isValid()&&(e=e?EM(e).utcOffset():0,(this.utcOffset()-e)%60==0)},vt.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},vt.isLocal=function(){return!!this.isValid()&&!this._isUTC},vt.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},vt.isUtc=$M,vt.isUTC=$M,vt.zoneAbbr=function(){return this._isUTC?"UTC":""},vt.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},vt.dates=L("dates accessor is deprecated. Use date instead.",_t),vt.months=L("months accessor is deprecated. Use month instead",xe),vt.years=L("years accessor is deprecated. Use year instead",He),vt.zone=L("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",(function(e,M){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,M),this):-this.utcOffset()})),vt.isDSTShifted=L("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",(function(){if(!a(this._isDSTShifted))return this._isDSTShifted;var e,M={};return m(M,this),(M=wM(M))._a?(e=M._isUTC?d(M._a):EM(M._a),this._isDSTShifted=this.isValid()&&function(e,M,t){var o,n=Math.min(e.length,M.length),b=Math.abs(e.length-M.length),p=0;for(o=0;o<n;o++)(t&&e[o]!==M[o]||!t&&V(e[o])!==V(M[o]))&&p++;return p+b}(M._a,e.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}));var kt=k.prototype;function Tt(e,M,t,o){var n=AM(),b=d().set(o,M);return n[t](b,e)}function Bt(e,M,t){if(r(e)&&(M=e,e=void 0),e=e||"",null!=M)return Tt(e,M,t,"month");var o,n=[];for(o=0;o<12;o++)n[o]=Tt(e,o,t,"month");return n}function wt(e,M,t,o){"boolean"==typeof e?(r(M)&&(t=M,M=void 0),M=M||""):(t=M=e,e=!1,r(M)&&(t=M,M=void 0),M=M||"");var n,b=AM(),p=e?b._week.dow:0,z=[];if(null!=t)return Tt(M,(t+p)%7,o,"day");for(n=0;n<7;n++)z[n]=Tt(M,(n+p)%7,o,"day");return z}kt.calendar=function(e,M,t){var o=this._calendar[e]||this._calendar.sameElse;return v(o)?o.call(M,t):o},kt.longDateFormat=function(e){var M=this._longDateFormat[e],t=this._longDateFormat[e.toUpperCase()];return M||!t?M:(this._longDateFormat[e]=t.match(B).map((function(e){return"MMMM"===e||"MM"===e||"DD"===e||"dddd"===e?e.slice(1):e})).join(""),this._longDateFormat[e])},kt.invalidDate=function(){return this._invalidDate},kt.ordinal=function(e){return this._ordinal.replace("%d",e)},kt.preparse=Nt,kt.postformat=Nt,kt.relativeTime=function(e,M,t,o){var n=this._relativeTime[t];return v(n)?n(e,M,t,o):n.replace(/%d/i,e)},kt.pastFuture=function(e,M){var t=this._relativeTime[e>0?"future":"past"];return v(t)?t(M):t.replace(/%s/i,M)},kt.set=function(e){var M,t;for(t in e)z(e,t)&&(v(M=e[t])?this[t]=M:this["_"+t]=M);this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},kt.eras=function(e,M){var t,o,b,p=this._eras||AM("en")._eras;for(t=0,o=p.length;t<o;++t)switch("string"==typeof p[t].since&&(b=n(p[t].since).startOf("day"),p[t].since=b.valueOf()),typeof p[t].until){case"undefined":p[t].until=1/0;break;case"string":b=n(p[t].until).startOf("day").valueOf(),p[t].until=b.valueOf()}return p},kt.erasParse=function(e,M,t){var o,n,b,p,z,c=this.eras();for(e=e.toUpperCase(),o=0,n=c.length;o<n;++o)if(b=c[o].name.toUpperCase(),p=c[o].abbr.toUpperCase(),z=c[o].narrow.toUpperCase(),t)switch(M){case"N":case"NN":case"NNN":if(p===e)return c[o];break;case"NNNN":if(b===e)return c[o];break;case"NNNNN":if(z===e)return c[o]}else if([b,p,z].indexOf(e)>=0)return c[o]},kt.erasConvertYear=function(e,M){var t=e.since<=e.until?1:-1;return void 0===M?n(e.since).year():n(e.since).year()+(M-e.offset)*t},kt.erasAbbrRegex=function(e){return z(this,"_erasAbbrRegex")||qt.call(this),e?this._erasAbbrRegex:this._erasRegex},kt.erasNameRegex=function(e){return z(this,"_erasNameRegex")||qt.call(this),e?this._erasNameRegex:this._erasRegex},kt.erasNarrowRegex=function(e){return z(this,"_erasNarrowRegex")||qt.call(this),e?this._erasNarrowRegex:this._erasRegex},kt.months=function(e,M){return e?b(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||Se).test(M)?"format":"standalone"][e.month()]:b(this._months)?this._months:this._months.standalone},kt.monthsShort=function(e,M){return e?b(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[Se.test(M)?"format":"standalone"][e.month()]:b(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},kt.monthsParse=function(e,M,t){var o,n,b;if(this._monthsParseExact)return Ye.call(this,e,M,t);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),o=0;o<12;o++){if(n=d([2e3,o]),t&&!this._longMonthsParse[o]&&(this._longMonthsParse[o]=new RegExp("^"+this.months(n,"").replace(".","")+"$","i"),this._shortMonthsParse[o]=new RegExp("^"+this.monthsShort(n,"").replace(".","")+"$","i")),t||this._monthsParse[o]||(b="^"+this.months(n,"")+"|^"+this.monthsShort(n,""),this._monthsParse[o]=new RegExp(b.replace(".",""),"i")),t&&"MMMM"===M&&this._longMonthsParse[o].test(e))return o;if(t&&"MMM"===M&&this._shortMonthsParse[o].test(e))return o;if(!t&&this._monthsParse[o].test(e))return o}},kt.monthsRegex=function(e){return this._monthsParseExact?(z(this,"_monthsRegex")||Ce.call(this),e?this._monthsStrictRegex:this._monthsRegex):(z(this,"_monthsRegex")||(this._monthsRegex=Xe),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)},kt.monthsShortRegex=function(e){return this._monthsParseExact?(z(this,"_monthsRegex")||Ce.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(z(this,"_monthsShortRegex")||(this._monthsShortRegex=Ee),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)},kt.week=function(e){return Ve(e,this._week.dow,this._week.doy).week},kt.firstDayOfYear=function(){return this._week.doy},kt.firstDayOfWeek=function(){return this._week.dow},kt.weekdays=function(e,M){var t=b(this._weekdays)?this._weekdays:this._weekdays[e&&!0!==e&&this._weekdays.isFormat.test(M)?"format":"standalone"];return!0===e?Ge(t,this._week.dow):e?t[e.day()]:t},kt.weekdaysMin=function(e){return!0===e?Ge(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin},kt.weekdaysShort=function(e){return!0===e?Ge(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort},kt.weekdaysParse=function(e,M,t){var o,n,b;if(this._weekdaysParseExact)return tM.call(this,e,M,t);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),o=0;o<7;o++){if(n=d([2e3,1]).day(o),t&&!this._fullWeekdaysParse[o]&&(this._fullWeekdaysParse[o]=new RegExp("^"+this.weekdays(n,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[o]=new RegExp("^"+this.weekdaysShort(n,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[o]=new RegExp("^"+this.weekdaysMin(n,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[o]||(b="^"+this.weekdays(n,"")+"|^"+this.weekdaysShort(n,"")+"|^"+this.weekdaysMin(n,""),this._weekdaysParse[o]=new RegExp(b.replace(".",""),"i")),t&&"dddd"===M&&this._fullWeekdaysParse[o].test(e))return o;if(t&&"ddd"===M&&this._shortWeekdaysParse[o].test(e))return o;if(t&&"dd"===M&&this._minWeekdaysParse[o].test(e))return o;if(!t&&this._weekdaysParse[o].test(e))return o}},kt.weekdaysRegex=function(e){return this._weekdaysParseExact?(z(this,"_weekdaysRegex")||oM.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(z(this,"_weekdaysRegex")||(this._weekdaysRegex=Ze),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)},kt.weekdaysShortRegex=function(e){return this._weekdaysParseExact?(z(this,"_weekdaysRegex")||oM.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(z(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=eM),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},kt.weekdaysMinRegex=function(e){return this._weekdaysParseExact?(z(this,"_weekdaysRegex")||oM.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(z(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=MM),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},kt.isPM=function(e){return"p"===(e+"").toLowerCase().charAt(0)},kt.meridiem=function(e,M,t){return e>11?t?"pm":"PM":t?"am":"AM"},lM("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var M=e%10;return e+(1===V(e%100/10)?"th":1===M?"st":2===M?"nd":3===M?"rd":"th")}}),n.lang=L("moment.lang is deprecated. Use moment.locale instead.",lM),n.langData=L("moment.langData is deprecated. Use moment.localeData instead.",AM);var St=Math.abs;function Et(e,M,t,o){var n=KM(M,t);return e._milliseconds+=o*n._milliseconds,e._days+=o*n._days,e._months+=o*n._months,e._bubble()}function Xt(e){return e<0?Math.floor(e):Math.ceil(e)}function Yt(e){return 4800*e/146097}function Dt(e){return 146097*e/4800}function xt(e){return function(){return this.as(e)}}var Ct=xt("ms"),Pt=xt("s"),Ht=xt("m"),jt=xt("h"),Ft=xt("d"),It=xt("w"),Ut=xt("M"),Vt=xt("Q"),$t=xt("y");function Gt(e){return function(){return this.isValid()?this._data[e]:NaN}}var Jt=Gt("milliseconds"),Kt=Gt("seconds"),Qt=Gt("minutes"),Zt=Gt("hours"),eo=Gt("days"),Mo=Gt("months"),to=Gt("years");var oo=Math.round,no={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function bo(e,M,t,o,n){return n.relativeTime(M||1,!!t,e,o)}var po=Math.abs;function zo(e){return(e>0)-(e<0)||+e}function co(){if(!this.isValid())return this.localeData().invalidDate();var e,M,t,o,n,b,p,z,c=po(this._milliseconds)/1e3,a=po(this._days),r=po(this._months),O=this.asSeconds();return O?(e=U(c/60),M=U(e/60),c%=60,e%=60,t=U(r/12),r%=12,o=c?c.toFixed(3).replace(/\.?0+$/,""):"",n=O<0?"-":"",b=zo(this._months)!==zo(O)?"-":"",p=zo(this._days)!==zo(O)?"-":"",z=zo(this._milliseconds)!==zo(O)?"-":"",n+"P"+(t?b+t+"Y":"")+(r?b+r+"M":"")+(a?p+a+"D":"")+(M||e||c?"T":"")+(M?z+M+"H":"")+(e?z+e+"M":"")+(c?z+o+"S":"")):"P0D"}var ao=CM.prototype;return ao.isValid=function(){return this._isValid},ao.abs=function(){var e=this._data;return this._milliseconds=St(this._milliseconds),this._days=St(this._days),this._months=St(this._months),e.milliseconds=St(e.milliseconds),e.seconds=St(e.seconds),e.minutes=St(e.minutes),e.hours=St(e.hours),e.months=St(e.months),e.years=St(e.years),this},ao.add=function(e,M){return Et(this,e,M,1)},ao.subtract=function(e,M){return Et(this,e,M,-1)},ao.as=function(e){if(!this.isValid())return NaN;var M,t,o=this._milliseconds;if("month"===(e=P(e))||"quarter"===e||"year"===e)switch(M=this._days+o/864e5,t=this._months+Yt(M),e){case"month":return t;case"quarter":return t/3;case"year":return t/12}else switch(M=this._days+Math.round(Dt(this._months)),e){case"week":return M/7+o/6048e5;case"day":return M+o/864e5;case"hour":return 24*M+o/36e5;case"minute":return 1440*M+o/6e4;case"second":return 86400*M+o/1e3;case"millisecond":return Math.floor(864e5*M)+o;default:throw new Error("Unknown unit "+e)}},ao.asMilliseconds=Ct,ao.asSeconds=Pt,ao.asMinutes=Ht,ao.asHours=jt,ao.asDays=Ft,ao.asWeeks=It,ao.asMonths=Ut,ao.asQuarters=Vt,ao.asYears=$t,ao.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*V(this._months/12):NaN},ao._bubble=function(){var e,M,t,o,n,b=this._milliseconds,p=this._days,z=this._months,c=this._data;return b>=0&&p>=0&&z>=0||b<=0&&p<=0&&z<=0||(b+=864e5*Xt(Dt(z)+p),p=0,z=0),c.milliseconds=b%1e3,e=U(b/1e3),c.seconds=e%60,M=U(e/60),c.minutes=M%60,t=U(M/60),c.hours=t%24,p+=U(t/24),z+=n=U(Yt(p)),p-=Xt(Dt(n)),o=U(z/12),z%=12,c.days=p,c.months=z,c.years=o,this},ao.clone=function(){return KM(this)},ao.get=function(e){return e=P(e),this.isValid()?this[e+"s"]():NaN},ao.milliseconds=Jt,ao.seconds=Kt,ao.minutes=Qt,ao.hours=Zt,ao.days=eo,ao.weeks=function(){return U(this.days()/7)},ao.months=Mo,ao.years=to,ao.humanize=function(e,M){if(!this.isValid())return this.localeData().invalidDate();var t,o,n=!1,b=no;return"object"==typeof e&&(M=e,e=!1),"boolean"==typeof e&&(n=e),"object"==typeof M&&(b=Object.assign({},no,M),null!=M.s&&null==M.ss&&(b.ss=M.s-1)),o=function(e,M,t,o){var n=KM(e).abs(),b=oo(n.as("s")),p=oo(n.as("m")),z=oo(n.as("h")),c=oo(n.as("d")),a=oo(n.as("M")),r=oo(n.as("w")),O=oo(n.as("y")),i=b<=t.ss&&["s",b]||b<t.s&&["ss",b]||p<=1&&["m"]||p<t.m&&["mm",p]||z<=1&&["h"]||z<t.h&&["hh",z]||c<=1&&["d"]||c<t.d&&["dd",c];return null!=t.w&&(i=i||r<=1&&["w"]||r<t.w&&["ww",r]),(i=i||a<=1&&["M"]||a<t.M&&["MM",a]||O<=1&&["y"]||["yy",O])[2]=M,i[3]=+e>0,i[4]=o,bo.apply(null,i)}(this,!n,b,t=this.localeData()),n&&(o=t.pastFuture(+this,o)),t.postformat(o)},ao.toISOString=co,ao.toString=co,ao.toJSON=co,ao.locale=zt,ao.localeData=at,ao.toIsoString=L("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",co),ao.lang=ct,X("X",0,0,"unix"),X("x",0,0,"valueOf"),de("x",re),de("X",/[+-]?\d+(\.\d{1,3})?/),qe("X",(function(e,M,t){t._d=new Date(1e3*parseFloat(e))})),qe("x",(function(e,M,t){t._d=new Date(V(e))})),n.version="2.29.4",M=EM,n.fn=vt,n.min=function(){return DM("isBefore",[].slice.call(arguments,0))},n.max=function(){return DM("isAfter",[].slice.call(arguments,0))},n.now=function(){return Date.now?Date.now():+new Date},n.utc=d,n.unix=function(e){return EM(1e3*e)},n.months=function(e,M){return Bt(e,M,"months")},n.isDate=O,n.locale=lM,n.invalid=A,n.duration=KM,n.isMoment=_,n.weekdays=function(e,M,t){return wt(e,M,t,"weekdays")},n.parseZone=function(){return EM.apply(null,arguments).parseZone()},n.localeData=AM,n.isDuration=PM,n.monthsShort=function(e,M){return Bt(e,M,"monthsShort")},n.weekdaysMin=function(e,M,t){return wt(e,M,t,"weekdaysMin")},n.defineLocale=uM,n.updateLocale=function(e,M){if(null!=M){var t,o,n=aM;null!=rM[e]&&null!=rM[e].parentLocale?rM[e].set(N(rM[e]._config,M)):(null!=(o=dM(e))&&(n=o._config),M=N(n,M),null==o&&(M.abbr=e),(t=new k(M)).parentLocale=rM[e],rM[e]=t),lM(e)}else null!=rM[e]&&(null!=rM[e].parentLocale?(rM[e]=rM[e].parentLocale,e===lM()&&lM(e)):null!=rM[e]&&delete rM[e]);return rM[e]},n.locales=function(){return R(rM)},n.weekdaysShort=function(e,M,t){return wt(e,M,t,"weekdaysShort")},n.normalizeUnits=P,n.relativeTimeRounding=function(e){return void 0===e?oo:"function"==typeof e&&(oo=e,!0)},n.relativeTimeThreshold=function(e,M){return void 0!==no[e]&&(void 0===M?no[e]:(no[e]=M,"s"===e&&(no.ss=M-1),!0))},n.calendarFormat=function(e,M){var t=e.diff(M,"days",!0);return t<-6?"sameElse":t<-1?"lastWeek":t<0?"lastDay":t<1?"sameDay":t<2?"nextDay":t<7?"nextWeek":"sameElse"},n.prototype=vt,n.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},n}()},2703:(e,M,t)=>{"use strict";var o=t(414);function n(){}function b(){}b.resetWarningCache=n,e.exports=function(){function e(e,M,t,n,b,p){if(p!==o){var z=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw z.name="Invariant Violation",z}}function M(){return e}e.isRequired=e;var t={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:M,element:e,elementType:e,instanceOf:M,node:e,objectOf:M,oneOf:M,oneOfType:M,shape:M,exact:M,checkPropTypes:b,resetWarningCache:n};return t.PropTypes=t,t}},5697:(e,M,t)=>{e.exports=t(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,M,t)=>{"use strict";var o=t(7294),n=t(3840);function b(e){for(var M="https://reactjs.org/docs/error-decoder.html?invariant="+e,t=1;t<arguments.length;t++)M+="&args[]="+encodeURIComponent(arguments[t]);return"Minified React error #"+e+"; visit "+M+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var p=new Set,z={};function c(e,M){a(e,M),a(e+"Capture",M)}function a(e,M){for(z[e]=M,e=0;e<M.length;e++)p.add(M[e])}var r=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),O=Object.prototype.hasOwnProperty,i=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,s={},d={};function l(e,M,t,o,n,b,p){this.acceptsBooleans=2===M||3===M||4===M,this.attributeName=o,this.attributeNamespace=n,this.mustUseProperty=t,this.propertyName=e,this.type=M,this.sanitizeURL=b,this.removeEmptyString=p}var u={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){u[e]=new l(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var M=e[0];u[M]=new l(M,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){u[e]=new l(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){u[e]=new l(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){u[e]=new l(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){u[e]=new l(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){u[e]=new l(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){u[e]=new l(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){u[e]=new l(e,5,!1,e.toLowerCase(),null,!1,!1)}));var A=/[\-:]([a-z])/g;function q(e){return e[1].toUpperCase()}function f(e,M,t,o){var n=u.hasOwnProperty(M)?u[M]:null;(null!==n?0!==n.type:o||!(2<M.length)||"o"!==M[0]&&"O"!==M[0]||"n"!==M[1]&&"N"!==M[1])&&(function(e,M,t,o){if(null==M||function(e,M,t,o){if(null!==t&&0===t.type)return!1;switch(typeof M){case"function":case"symbol":return!0;case"boolean":return!o&&(null!==t?!t.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,M,t,o))return!0;if(o)return!1;if(null!==t)switch(t.type){case 3:return!M;case 4:return!1===M;case 5:return isNaN(M);case 6:return isNaN(M)||1>M}return!1}(M,t,n,o)&&(t=null),o||null===n?function(e){return!!O.call(d,e)||!O.call(s,e)&&(i.test(e)?d[e]=!0:(s[e]=!0,!1))}(M)&&(null===t?e.removeAttribute(M):e.setAttribute(M,""+t)):n.mustUseProperty?e[n.propertyName]=null===t?3!==n.type&&"":t:(M=n.attributeName,o=n.attributeNamespace,null===t?e.removeAttribute(M):(t=3===(n=n.type)||4===n&&!0===t?"":""+t,o?e.setAttributeNS(o,M,t):e.setAttribute(M,t))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var M=e.replace(A,q);u[M]=new l(M,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var M=e.replace(A,q);u[M]=new l(M,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var M=e.replace(A,q);u[M]=new l(M,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){u[e]=new l(e,1,!1,e.toLowerCase(),null,!1,!1)})),u.xlinkHref=new l("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){u[e]=new l(e,1,!1,e.toLowerCase(),null,!0,!0)}));var m=o.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,W=Symbol.for("react.element"),_=Symbol.for("react.portal"),h=Symbol.for("react.fragment"),L=Symbol.for("react.strict_mode"),R=Symbol.for("react.profiler"),g=Symbol.for("react.provider"),y=Symbol.for("react.context"),v=Symbol.for("react.forward_ref"),N=Symbol.for("react.suspense"),k=Symbol.for("react.suspense_list"),T=Symbol.for("react.memo"),B=Symbol.for("react.lazy");Symbol.for("react.scope"),Symbol.for("react.debug_trace_mode");var w=Symbol.for("react.offscreen");Symbol.for("react.legacy_hidden"),Symbol.for("react.cache"),Symbol.for("react.tracing_marker");var S=Symbol.iterator;function E(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=S&&e[S]||e["@@iterator"])?e:null}var X,Y=Object.assign;function D(e){if(void 0===X)try{throw Error()}catch(e){var M=e.stack.trim().match(/\n( *(at )?)/);X=M&&M[1]||""}return"\n"+X+e}var x=!1;function C(e,M){if(!e||x)return"";x=!0;var t=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(M)if(M=function(){throw Error()},Object.defineProperty(M.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(M,[])}catch(e){var o=e}Reflect.construct(e,[],M)}else{try{M.call()}catch(e){o=e}e.call(M.prototype)}else{try{throw Error()}catch(e){o=e}e()}}catch(M){if(M&&o&&"string"==typeof M.stack){for(var n=M.stack.split("\n"),b=o.stack.split("\n"),p=n.length-1,z=b.length-1;1<=p&&0<=z&&n[p]!==b[z];)z--;for(;1<=p&&0<=z;p--,z--)if(n[p]!==b[z]){if(1!==p||1!==z)do{if(p--,0>--z||n[p]!==b[z]){var c="\n"+n[p].replace(" at new "," at ");return e.displayName&&c.includes("<anonymous>")&&(c=c.replace("<anonymous>",e.displayName)),c}}while(1<=p&&0<=z);break}}}finally{x=!1,Error.prepareStackTrace=t}return(e=e?e.displayName||e.name:"")?D(e):""}function P(e){switch(e.tag){case 5:return D(e.type);case 16:return D("Lazy");case 13:return D("Suspense");case 19:return D("SuspenseList");case 0:case 2:case 15:return C(e.type,!1);case 11:return C(e.type.render,!1);case 1:return C(e.type,!0);default:return""}}function H(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case h:return"Fragment";case _:return"Portal";case R:return"Profiler";case L:return"StrictMode";case N:return"Suspense";case k:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case y:return(e.displayName||"Context")+".Consumer";case g:return(e._context.displayName||"Context")+".Provider";case v:var M=e.render;return(e=e.displayName)||(e=""!==(e=M.displayName||M.name||"")?"ForwardRef("+e+")":"ForwardRef"),e;case T:return null!==(M=e.displayName||null)?M:H(e.type)||"Memo";case B:M=e._payload,e=e._init;try{return H(e(M))}catch(e){}}return null}function j(e){var M=e.type;switch(e.tag){case 24:return"Cache";case 9:return(M.displayName||"Context")+".Consumer";case 10:return(M._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=(e=M.render).displayName||e.name||"",M.displayName||(""!==e?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return M;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return H(M);case 8:return M===L?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if("function"==typeof M)return M.displayName||M.name||null;if("string"==typeof M)return M}return null}function F(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":case"object":return e;default:return""}}function I(e){var M=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===M||"radio"===M)}function U(e){e._valueTracker||(e._valueTracker=function(e){var M=I(e)?"checked":"value",t=Object.getOwnPropertyDescriptor(e.constructor.prototype,M),o=""+e[M];if(!e.hasOwnProperty(M)&&void 0!==t&&"function"==typeof t.get&&"function"==typeof t.set){var n=t.get,b=t.set;return Object.defineProperty(e,M,{configurable:!0,get:function(){return n.call(this)},set:function(e){o=""+e,b.call(this,e)}}),Object.defineProperty(e,M,{enumerable:t.enumerable}),{getValue:function(){return o},setValue:function(e){o=""+e},stopTracking:function(){e._valueTracker=null,delete e[M]}}}}(e))}function V(e){if(!e)return!1;var M=e._valueTracker;if(!M)return!0;var t=M.getValue(),o="";return e&&(o=I(e)?e.checked?"true":"false":e.value),(e=o)!==t&&(M.setValue(e),!0)}function $(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(M){return e.body}}function G(e,M){var t=M.checked;return Y({},M,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=t?t:e._wrapperState.initialChecked})}function J(e,M){var t=null==M.defaultValue?"":M.defaultValue,o=null!=M.checked?M.checked:M.defaultChecked;t=F(null!=M.value?M.value:t),e._wrapperState={initialChecked:o,initialValue:t,controlled:"checkbox"===M.type||"radio"===M.type?null!=M.checked:null!=M.value}}function K(e,M){null!=(M=M.checked)&&f(e,"checked",M,!1)}function Q(e,M){K(e,M);var t=F(M.value),o=M.type;if(null!=t)"number"===o?(0===t&&""===e.value||e.value!=t)&&(e.value=""+t):e.value!==""+t&&(e.value=""+t);else if("submit"===o||"reset"===o)return void e.removeAttribute("value");M.hasOwnProperty("value")?ee(e,M.type,t):M.hasOwnProperty("defaultValue")&&ee(e,M.type,F(M.defaultValue)),null==M.checked&&null!=M.defaultChecked&&(e.defaultChecked=!!M.defaultChecked)}function Z(e,M,t){if(M.hasOwnProperty("value")||M.hasOwnProperty("defaultValue")){var o=M.type;if(!("submit"!==o&&"reset"!==o||void 0!==M.value&&null!==M.value))return;M=""+e._wrapperState.initialValue,t||M===e.value||(e.value=M),e.defaultValue=M}""!==(t=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==t&&(e.name=t)}function ee(e,M,t){"number"===M&&$(e.ownerDocument)===e||(null==t?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+t&&(e.defaultValue=""+t))}var Me=Array.isArray;function te(e,M,t,o){if(e=e.options,M){M={};for(var n=0;n<t.length;n++)M["$"+t[n]]=!0;for(t=0;t<e.length;t++)n=M.hasOwnProperty("$"+e[t].value),e[t].selected!==n&&(e[t].selected=n),n&&o&&(e[t].defaultSelected=!0)}else{for(t=""+F(t),M=null,n=0;n<e.length;n++){if(e[n].value===t)return e[n].selected=!0,void(o&&(e[n].defaultSelected=!0));null!==M||e[n].disabled||(M=e[n])}null!==M&&(M.selected=!0)}}function oe(e,M){if(null!=M.dangerouslySetInnerHTML)throw Error(b(91));return Y({},M,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function ne(e,M){var t=M.value;if(null==t){if(t=M.children,M=M.defaultValue,null!=t){if(null!=M)throw Error(b(92));if(Me(t)){if(1<t.length)throw Error(b(93));t=t[0]}M=t}null==M&&(M=""),t=M}e._wrapperState={initialValue:F(t)}}function be(e,M){var t=F(M.value),o=F(M.defaultValue);null!=t&&((t=""+t)!==e.value&&(e.value=t),null==M.defaultValue&&e.defaultValue!==t&&(e.defaultValue=t)),null!=o&&(e.defaultValue=""+o)}function pe(e){var M=e.textContent;M===e._wrapperState.initialValue&&""!==M&&null!==M&&(e.value=M)}function ze(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function ce(e,M){return null==e||"http://www.w3.org/1999/xhtml"===e?ze(M):"http://www.w3.org/2000/svg"===e&&"foreignObject"===M?"http://www.w3.org/1999/xhtml":e}var ae,re,Oe=(re=function(e,M){if("http://www.w3.org/2000/svg"!==e.namespaceURI||"innerHTML"in e)e.innerHTML=M;else{for((ae=ae||document.createElement("div")).innerHTML="<svg>"+M.valueOf().toString()+"</svg>",M=ae.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;M.firstChild;)e.appendChild(M.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,M,t,o){MSApp.execUnsafeLocalFunction((function(){return re(e,M)}))}:re);function ie(e,M){if(M){var t=e.firstChild;if(t&&t===e.lastChild&&3===t.nodeType)return void(t.nodeValue=M)}e.textContent=M}var se={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},de=["Webkit","ms","Moz","O"];function le(e,M,t){return null==M||"boolean"==typeof M||""===M?"":t||"number"!=typeof M||0===M||se.hasOwnProperty(e)&&se[e]?(""+M).trim():M+"px"}function ue(e,M){for(var t in e=e.style,M)if(M.hasOwnProperty(t)){var o=0===t.indexOf("--"),n=le(t,M[t],o);"float"===t&&(t="cssFloat"),o?e.setProperty(t,n):e[t]=n}}Object.keys(se).forEach((function(e){de.forEach((function(M){M=M+e.charAt(0).toUpperCase()+e.substring(1),se[M]=se[e]}))}));var Ae=Y({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function qe(e,M){if(M){if(Ae[e]&&(null!=M.children||null!=M.dangerouslySetInnerHTML))throw Error(b(137,e));if(null!=M.dangerouslySetInnerHTML){if(null!=M.children)throw Error(b(60));if("object"!=typeof M.dangerouslySetInnerHTML||!("__html"in M.dangerouslySetInnerHTML))throw Error(b(61))}if(null!=M.style&&"object"!=typeof M.style)throw Error(b(62))}}function fe(e,M){if(-1===e.indexOf("-"))return"string"==typeof M.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var me=null;function We(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var _e=null,he=null,Le=null;function Re(e){if(e=mn(e)){if("function"!=typeof _e)throw Error(b(280));var M=e.stateNode;M&&(M=hn(M),_e(e.stateNode,e.type,M))}}function ge(e){he?Le?Le.push(e):Le=[e]:he=e}function ye(){if(he){var e=he,M=Le;if(Le=he=null,Re(e),M)for(e=0;e<M.length;e++)Re(M[e])}}function ve(e,M){return e(M)}function Ne(){}var ke=!1;function Te(e,M,t){if(ke)return e(M,t);ke=!0;try{return ve(e,M,t)}finally{ke=!1,(null!==he||null!==Le)&&(Ne(),ye())}}function Be(e,M){var t=e.stateNode;if(null===t)return null;var o=hn(t);if(null===o)return null;t=o[M];e:switch(M){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(o=!o.disabled)||(o=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!o;break e;default:e=!1}if(e)return null;if(t&&"function"!=typeof t)throw Error(b(231,M,typeof t));return t}var we=!1;if(r)try{var Se={};Object.defineProperty(Se,"passive",{get:function(){we=!0}}),window.addEventListener("test",Se,Se),window.removeEventListener("test",Se,Se)}catch(re){we=!1}function Ee(e,M,t,o,n,b,p,z,c){var a=Array.prototype.slice.call(arguments,3);try{M.apply(t,a)}catch(e){this.onError(e)}}var Xe=!1,Ye=null,De=!1,xe=null,Ce={onError:function(e){Xe=!0,Ye=e}};function Pe(e,M,t,o,n,b,p,z,c){Xe=!1,Ye=null,Ee.apply(Ce,arguments)}function He(e){var M=e,t=e;if(e.alternate)for(;M.return;)M=M.return;else{e=M;do{0!=(4098&(M=e).flags)&&(t=M.return),e=M.return}while(e)}return 3===M.tag?t:null}function je(e){if(13===e.tag){var M=e.memoizedState;if(null===M&&null!==(e=e.alternate)&&(M=e.memoizedState),null!==M)return M.dehydrated}return null}function Fe(e){if(He(e)!==e)throw Error(b(188))}function Ie(e){return null!==(e=function(e){var M=e.alternate;if(!M){if(null===(M=He(e)))throw Error(b(188));return M!==e?null:e}for(var t=e,o=M;;){var n=t.return;if(null===n)break;var p=n.alternate;if(null===p){if(null!==(o=n.return)){t=o;continue}break}if(n.child===p.child){for(p=n.child;p;){if(p===t)return Fe(n),e;if(p===o)return Fe(n),M;p=p.sibling}throw Error(b(188))}if(t.return!==o.return)t=n,o=p;else{for(var z=!1,c=n.child;c;){if(c===t){z=!0,t=n,o=p;break}if(c===o){z=!0,o=n,t=p;break}c=c.sibling}if(!z){for(c=p.child;c;){if(c===t){z=!0,t=p,o=n;break}if(c===o){z=!0,o=p,t=n;break}c=c.sibling}if(!z)throw Error(b(189))}}if(t.alternate!==o)throw Error(b(190))}if(3!==t.tag)throw Error(b(188));return t.stateNode.current===t?e:M}(e))?Ue(e):null}function Ue(e){if(5===e.tag||6===e.tag)return e;for(e=e.child;null!==e;){var M=Ue(e);if(null!==M)return M;e=e.sibling}return null}var Ve=n.unstable_scheduleCallback,$e=n.unstable_cancelCallback,Ge=n.unstable_shouldYield,Je=n.unstable_requestPaint,Ke=n.unstable_now,Qe=n.unstable_getCurrentPriorityLevel,Ze=n.unstable_ImmediatePriority,eM=n.unstable_UserBlockingPriority,MM=n.unstable_NormalPriority,tM=n.unstable_LowPriority,oM=n.unstable_IdlePriority,nM=null,bM=null,pM=Math.clz32?Math.clz32:function(e){return 0===(e>>>=0)?32:31-(zM(e)/cM|0)|0},zM=Math.log,cM=Math.LN2,aM=64,rM=4194304;function OM(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194240&e;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return 130023424&e;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function iM(e,M){var t=e.pendingLanes;if(0===t)return 0;var o=0,n=e.suspendedLanes,b=e.pingedLanes,p=268435455&t;if(0!==p){var z=p&~n;0!==z?o=OM(z):0!=(b&=p)&&(o=OM(b))}else 0!=(p=t&~n)?o=OM(p):0!==b&&(o=OM(b));if(0===o)return 0;if(0!==M&&M!==o&&0==(M&n)&&((n=o&-o)>=(b=M&-M)||16===n&&0!=(4194240&b)))return M;if(0!=(4&o)&&(o|=16&t),0!==(M=e.entangledLanes))for(e=e.entanglements,M&=o;0<M;)n=1<<(t=31-pM(M)),o|=e[t],M&=~n;return o}function sM(e,M){switch(e){case 1:case 2:case 4:return M+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return M+5e3;default:return-1}}function dM(e){return 0!=(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function lM(){var e=aM;return 0==(4194240&(aM<<=1))&&(aM=64),e}function uM(e){for(var M=[],t=0;31>t;t++)M.push(e);return M}function AM(e,M,t){e.pendingLanes|=M,536870912!==M&&(e.suspendedLanes=0,e.pingedLanes=0),(e=e.eventTimes)[M=31-pM(M)]=t}function qM(e,M){var t=e.entangledLanes|=M;for(e=e.entanglements;t;){var o=31-pM(t),n=1<<o;n&M|e[o]&M&&(e[o]|=M),t&=~n}}var fM=0;function mM(e){return 1<(e&=-e)?4<e?0!=(268435455&e)?16:536870912:4:1}var WM,_M,hM,LM,RM,gM=!1,yM=[],vM=null,NM=null,kM=null,TM=new Map,BM=new Map,wM=[],SM="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function EM(e,M){switch(e){case"focusin":case"focusout":vM=null;break;case"dragenter":case"dragleave":NM=null;break;case"mouseover":case"mouseout":kM=null;break;case"pointerover":case"pointerout":TM.delete(M.pointerId);break;case"gotpointercapture":case"lostpointercapture":BM.delete(M.pointerId)}}function XM(e,M,t,o,n,b){return null===e||e.nativeEvent!==b?(e={blockedOn:M,domEventName:t,eventSystemFlags:o,nativeEvent:b,targetContainers:[n]},null!==M&&null!==(M=mn(M))&&_M(M),e):(e.eventSystemFlags|=o,M=e.targetContainers,null!==n&&-1===M.indexOf(n)&&M.push(n),e)}function YM(e){var M=fn(e.target);if(null!==M){var t=He(M);if(null!==t)if(13===(M=t.tag)){if(null!==(M=je(t)))return e.blockedOn=M,void RM(e.priority,(function(){hM(t)}))}else if(3===M&&t.stateNode.current.memoizedState.isDehydrated)return void(e.blockedOn=3===t.tag?t.stateNode.containerInfo:null)}e.blockedOn=null}function DM(e){if(null!==e.blockedOn)return!1;for(var M=e.targetContainers;0<M.length;){var t=GM(e.domEventName,e.eventSystemFlags,M[0],e.nativeEvent);if(null!==t)return null!==(M=mn(t))&&_M(M),e.blockedOn=t,!1;var o=new(t=e.nativeEvent).constructor(t.type,t);me=o,t.target.dispatchEvent(o),me=null,M.shift()}return!0}function xM(e,M,t){DM(e)&&t.delete(M)}function CM(){gM=!1,null!==vM&&DM(vM)&&(vM=null),null!==NM&&DM(NM)&&(NM=null),null!==kM&&DM(kM)&&(kM=null),TM.forEach(xM),BM.forEach(xM)}function PM(e,M){e.blockedOn===M&&(e.blockedOn=null,gM||(gM=!0,n.unstable_scheduleCallback(n.unstable_NormalPriority,CM)))}function HM(e){function M(M){return PM(M,e)}if(0<yM.length){PM(yM[0],e);for(var t=1;t<yM.length;t++){var o=yM[t];o.blockedOn===e&&(o.blockedOn=null)}}for(null!==vM&&PM(vM,e),null!==NM&&PM(NM,e),null!==kM&&PM(kM,e),TM.forEach(M),BM.forEach(M),t=0;t<wM.length;t++)(o=wM[t]).blockedOn===e&&(o.blockedOn=null);for(;0<wM.length&&null===(t=wM[0]).blockedOn;)YM(t),null===t.blockedOn&&wM.shift()}var jM=m.ReactCurrentBatchConfig,FM=!0;function IM(e,M,t,o){var n=fM,b=jM.transition;jM.transition=null;try{fM=1,VM(e,M,t,o)}finally{fM=n,jM.transition=b}}function UM(e,M,t,o){var n=fM,b=jM.transition;jM.transition=null;try{fM=4,VM(e,M,t,o)}finally{fM=n,jM.transition=b}}function VM(e,M,t,o){if(FM){var n=GM(e,M,t,o);if(null===n)Fo(e,M,o,$M,t),EM(e,o);else if(function(e,M,t,o,n){switch(M){case"focusin":return vM=XM(vM,e,M,t,o,n),!0;case"dragenter":return NM=XM(NM,e,M,t,o,n),!0;case"mouseover":return kM=XM(kM,e,M,t,o,n),!0;case"pointerover":var b=n.pointerId;return TM.set(b,XM(TM.get(b)||null,e,M,t,o,n)),!0;case"gotpointercapture":return b=n.pointerId,BM.set(b,XM(BM.get(b)||null,e,M,t,o,n)),!0}return!1}(n,e,M,t,o))o.stopPropagation();else if(EM(e,o),4&M&&-1<SM.indexOf(e)){for(;null!==n;){var b=mn(n);if(null!==b&&WM(b),null===(b=GM(e,M,t,o))&&Fo(e,M,o,$M,t),b===n)break;n=b}null!==n&&o.stopPropagation()}else Fo(e,M,o,null,t)}}var $M=null;function GM(e,M,t,o){if($M=null,null!==(e=fn(e=We(o))))if(null===(M=He(e)))e=null;else if(13===(t=M.tag)){if(null!==(e=je(M)))return e;e=null}else if(3===t){if(M.stateNode.current.memoizedState.isDehydrated)return 3===M.tag?M.stateNode.containerInfo:null;e=null}else M!==e&&(e=null);return $M=e,null}function JM(e){switch(e){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(Qe()){case Ze:return 1;case eM:return 4;case MM:case tM:return 16;case oM:return 536870912;default:return 16}default:return 16}}var KM=null,QM=null,ZM=null;function et(){if(ZM)return ZM;var e,M,t=QM,o=t.length,n="value"in KM?KM.value:KM.textContent,b=n.length;for(e=0;e<o&&t[e]===n[e];e++);var p=o-e;for(M=1;M<=p&&t[o-M]===n[b-M];M++);return ZM=n.slice(e,1<M?1-M:void 0)}function Mt(e){var M=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===M&&(e=13):e=M,10===e&&(e=13),32<=e||13===e?e:0}function tt(){return!0}function ot(){return!1}function nt(e){function M(M,t,o,n,b){for(var p in this._reactName=M,this._targetInst=o,this.type=t,this.nativeEvent=n,this.target=b,this.currentTarget=null,e)e.hasOwnProperty(p)&&(M=e[p],this[p]=M?M(n):n[p]);return this.isDefaultPrevented=(null!=n.defaultPrevented?n.defaultPrevented:!1===n.returnValue)?tt:ot,this.isPropagationStopped=ot,this}return Y(M.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=tt)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=tt)},persist:function(){},isPersistent:tt}),M}var bt,pt,zt,ct={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},at=nt(ct),rt=Y({},ct,{view:0,detail:0}),Ot=nt(rt),it=Y({},rt,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Lt,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==zt&&(zt&&"mousemove"===e.type?(bt=e.screenX-zt.screenX,pt=e.screenY-zt.screenY):pt=bt=0,zt=e),bt)},movementY:function(e){return"movementY"in e?e.movementY:pt}}),st=nt(it),dt=nt(Y({},it,{dataTransfer:0})),lt=nt(Y({},rt,{relatedTarget:0})),ut=nt(Y({},ct,{animationName:0,elapsedTime:0,pseudoElement:0})),At=Y({},ct,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),qt=nt(At),ft=nt(Y({},ct,{data:0})),mt={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},Wt={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},_t={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function ht(e){var M=this.nativeEvent;return M.getModifierState?M.getModifierState(e):!!(e=_t[e])&&!!M[e]}function Lt(){return ht}var Rt=Y({},rt,{key:function(e){if(e.key){var M=mt[e.key]||e.key;if("Unidentified"!==M)return M}return"keypress"===e.type?13===(e=Mt(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?Wt[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Lt,charCode:function(e){return"keypress"===e.type?Mt(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?Mt(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),gt=nt(Rt),yt=nt(Y({},it,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),vt=nt(Y({},rt,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Lt})),Nt=nt(Y({},ct,{propertyName:0,elapsedTime:0,pseudoElement:0})),kt=Y({},it,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),Tt=nt(kt),Bt=[9,13,27,32],wt=r&&"CompositionEvent"in window,St=null;r&&"documentMode"in document&&(St=document.documentMode);var Et=r&&"TextEvent"in window&&!St,Xt=r&&(!wt||St&&8<St&&11>=St),Yt=String.fromCharCode(32),Dt=!1;function xt(e,M){switch(e){case"keyup":return-1!==Bt.indexOf(M.keyCode);case"keydown":return 229!==M.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Ct(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Pt=!1,Ht={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function jt(e){var M=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===M?!!Ht[e.type]:"textarea"===M}function Ft(e,M,t,o){ge(o),0<(M=Uo(M,"onChange")).length&&(t=new at("onChange","change",null,t,o),e.push({event:t,listeners:M}))}var It=null,Ut=null;function Vt(e){Do(e,0)}function $t(e){if(V(Wn(e)))return e}function Gt(e,M){if("change"===e)return M}var Jt=!1;if(r){var Kt;if(r){var Qt="oninput"in document;if(!Qt){var Zt=document.createElement("div");Zt.setAttribute("oninput","return;"),Qt="function"==typeof Zt.oninput}Kt=Qt}else Kt=!1;Jt=Kt&&(!document.documentMode||9<document.documentMode)}function eo(){It&&(It.detachEvent("onpropertychange",Mo),Ut=It=null)}function Mo(e){if("value"===e.propertyName&&$t(Ut)){var M=[];Ft(M,Ut,e,We(e)),Te(Vt,M)}}function to(e,M,t){"focusin"===e?(eo(),Ut=t,(It=M).attachEvent("onpropertychange",Mo)):"focusout"===e&&eo()}function oo(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return $t(Ut)}function no(e,M){if("click"===e)return $t(M)}function bo(e,M){if("input"===e||"change"===e)return $t(M)}var po="function"==typeof Object.is?Object.is:function(e,M){return e===M&&(0!==e||1/e==1/M)||e!=e&&M!=M};function zo(e,M){if(po(e,M))return!0;if("object"!=typeof e||null===e||"object"!=typeof M||null===M)return!1;var t=Object.keys(e),o=Object.keys(M);if(t.length!==o.length)return!1;for(o=0;o<t.length;o++){var n=t[o];if(!O.call(M,n)||!po(e[n],M[n]))return!1}return!0}function co(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function ao(e,M){var t,o=co(e);for(e=0;o;){if(3===o.nodeType){if(t=e+o.textContent.length,e<=M&&t>=M)return{node:o,offset:M-e};e=t}e:{for(;o;){if(o.nextSibling){o=o.nextSibling;break e}o=o.parentNode}o=void 0}o=co(o)}}function ro(e,M){return!(!e||!M)&&(e===M||(!e||3!==e.nodeType)&&(M&&3===M.nodeType?ro(e,M.parentNode):"contains"in e?e.contains(M):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(M))))}function Oo(){for(var e=window,M=$();M instanceof e.HTMLIFrameElement;){try{var t="string"==typeof M.contentWindow.location.href}catch(e){t=!1}if(!t)break;M=$((e=M.contentWindow).document)}return M}function io(e){var M=e&&e.nodeName&&e.nodeName.toLowerCase();return M&&("input"===M&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===M||"true"===e.contentEditable)}function so(e){var M=Oo(),t=e.focusedElem,o=e.selectionRange;if(M!==t&&t&&t.ownerDocument&&ro(t.ownerDocument.documentElement,t)){if(null!==o&&io(t))if(M=o.start,void 0===(e=o.end)&&(e=M),"selectionStart"in t)t.selectionStart=M,t.selectionEnd=Math.min(e,t.value.length);else if((e=(M=t.ownerDocument||document)&&M.defaultView||window).getSelection){e=e.getSelection();var n=t.textContent.length,b=Math.min(o.start,n);o=void 0===o.end?b:Math.min(o.end,n),!e.extend&&b>o&&(n=o,o=b,b=n),n=ao(t,b);var p=ao(t,o);n&&p&&(1!==e.rangeCount||e.anchorNode!==n.node||e.anchorOffset!==n.offset||e.focusNode!==p.node||e.focusOffset!==p.offset)&&((M=M.createRange()).setStart(n.node,n.offset),e.removeAllRanges(),b>o?(e.addRange(M),e.extend(p.node,p.offset)):(M.setEnd(p.node,p.offset),e.addRange(M)))}for(M=[],e=t;e=e.parentNode;)1===e.nodeType&&M.push({element:e,left:e.scrollLeft,top:e.scrollTop});for("function"==typeof t.focus&&t.focus(),t=0;t<M.length;t++)(e=M[t]).element.scrollLeft=e.left,e.element.scrollTop=e.top}}var lo=r&&"documentMode"in document&&11>=document.documentMode,uo=null,Ao=null,qo=null,fo=!1;function mo(e,M,t){var o=t.window===t?t.document:9===t.nodeType?t:t.ownerDocument;fo||null==uo||uo!==$(o)||(o="selectionStart"in(o=uo)&&io(o)?{start:o.selectionStart,end:o.selectionEnd}:{anchorNode:(o=(o.ownerDocument&&o.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:o.anchorOffset,focusNode:o.focusNode,focusOffset:o.focusOffset},qo&&zo(qo,o)||(qo=o,0<(o=Uo(Ao,"onSelect")).length&&(M=new at("onSelect","select",null,M,t),e.push({event:M,listeners:o}),M.target=uo)))}function Wo(e,M){var t={};return t[e.toLowerCase()]=M.toLowerCase(),t["Webkit"+e]="webkit"+M,t["Moz"+e]="moz"+M,t}var _o={animationend:Wo("Animation","AnimationEnd"),animationiteration:Wo("Animation","AnimationIteration"),animationstart:Wo("Animation","AnimationStart"),transitionend:Wo("Transition","TransitionEnd")},ho={},Lo={};function Ro(e){if(ho[e])return ho[e];if(!_o[e])return e;var M,t=_o[e];for(M in t)if(t.hasOwnProperty(M)&&M in Lo)return ho[e]=t[M];return e}r&&(Lo=document.createElement("div").style,"AnimationEvent"in window||(delete _o.animationend.animation,delete _o.animationiteration.animation,delete _o.animationstart.animation),"TransitionEvent"in window||delete _o.transitionend.transition);var go=Ro("animationend"),yo=Ro("animationiteration"),vo=Ro("animationstart"),No=Ro("transitionend"),ko=new Map,To="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function Bo(e,M){ko.set(e,M),c(M,[e])}for(var wo=0;wo<To.length;wo++){var So=To[wo];Bo(So.toLowerCase(),"on"+(So[0].toUpperCase()+So.slice(1)))}Bo(go,"onAnimationEnd"),Bo(yo,"onAnimationIteration"),Bo(vo,"onAnimationStart"),Bo("dblclick","onDoubleClick"),Bo("focusin","onFocus"),Bo("focusout","onBlur"),Bo(No,"onTransitionEnd"),a("onMouseEnter",["mouseout","mouseover"]),a("onMouseLeave",["mouseout","mouseover"]),a("onPointerEnter",["pointerout","pointerover"]),a("onPointerLeave",["pointerout","pointerover"]),c("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),c("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),c("onBeforeInput",["compositionend","keypress","textInput","paste"]),c("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),c("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),c("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Eo="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Xo=new Set("cancel close invalid load scroll toggle".split(" ").concat(Eo));function Yo(e,M,t){var o=e.type||"unknown-event";e.currentTarget=t,function(e,M,t,o,n,p,z,c,a){if(Pe.apply(this,arguments),Xe){if(!Xe)throw Error(b(198));var r=Ye;Xe=!1,Ye=null,De||(De=!0,xe=r)}}(o,M,void 0,e),e.currentTarget=null}function Do(e,M){M=0!=(4&M);for(var t=0;t<e.length;t++){var o=e[t],n=o.event;o=o.listeners;e:{var b=void 0;if(M)for(var p=o.length-1;0<=p;p--){var z=o[p],c=z.instance,a=z.currentTarget;if(z=z.listener,c!==b&&n.isPropagationStopped())break e;Yo(n,z,a),b=c}else for(p=0;p<o.length;p++){if(c=(z=o[p]).instance,a=z.currentTarget,z=z.listener,c!==b&&n.isPropagationStopped())break e;Yo(n,z,a),b=c}}}if(De)throw e=xe,De=!1,xe=null,e}function xo(e,M){var t=M[un];void 0===t&&(t=M[un]=new Set);var o=e+"__bubble";t.has(o)||(jo(M,e,2,!1),t.add(o))}function Co(e,M,t){var o=0;M&&(o|=4),jo(t,e,o,M)}var Po="_reactListening"+Math.random().toString(36).slice(2);function Ho(e){if(!e[Po]){e[Po]=!0,p.forEach((function(M){"selectionchange"!==M&&(Xo.has(M)||Co(M,!1,e),Co(M,!0,e))}));var M=9===e.nodeType?e:e.ownerDocument;null===M||M[Po]||(M[Po]=!0,Co("selectionchange",!1,M))}}function jo(e,M,t,o){switch(JM(M)){case 1:var n=IM;break;case 4:n=UM;break;default:n=VM}t=n.bind(null,M,t,e),n=void 0,!we||"touchstart"!==M&&"touchmove"!==M&&"wheel"!==M||(n=!0),o?void 0!==n?e.addEventListener(M,t,{capture:!0,passive:n}):e.addEventListener(M,t,!0):void 0!==n?e.addEventListener(M,t,{passive:n}):e.addEventListener(M,t,!1)}function Fo(e,M,t,o,n){var b=o;if(0==(1&M)&&0==(2&M)&&null!==o)e:for(;;){if(null===o)return;var p=o.tag;if(3===p||4===p){var z=o.stateNode.containerInfo;if(z===n||8===z.nodeType&&z.parentNode===n)break;if(4===p)for(p=o.return;null!==p;){var c=p.tag;if((3===c||4===c)&&((c=p.stateNode.containerInfo)===n||8===c.nodeType&&c.parentNode===n))return;p=p.return}for(;null!==z;){if(null===(p=fn(z)))return;if(5===(c=p.tag)||6===c){o=b=p;continue e}z=z.parentNode}}o=o.return}Te((function(){var o=b,n=We(t),p=[];e:{var z=ko.get(e);if(void 0!==z){var c=at,a=e;switch(e){case"keypress":if(0===Mt(t))break e;case"keydown":case"keyup":c=gt;break;case"focusin":a="focus",c=lt;break;case"focusout":a="blur",c=lt;break;case"beforeblur":case"afterblur":c=lt;break;case"click":if(2===t.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":c=st;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":c=dt;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":c=vt;break;case go:case yo:case vo:c=ut;break;case No:c=Nt;break;case"scroll":c=Ot;break;case"wheel":c=Tt;break;case"copy":case"cut":case"paste":c=qt;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":c=yt}var r=0!=(4&M),O=!r&&"scroll"===e,i=r?null!==z?z+"Capture":null:z;r=[];for(var s,d=o;null!==d;){var l=(s=d).stateNode;if(5===s.tag&&null!==l&&(s=l,null!==i&&null!=(l=Be(d,i))&&r.push(Io(d,l,s))),O)break;d=d.return}0<r.length&&(z=new c(z,a,null,t,n),p.push({event:z,listeners:r}))}}if(0==(7&M)){if(c="mouseout"===e||"pointerout"===e,(!(z="mouseover"===e||"pointerover"===e)||t===me||!(a=t.relatedTarget||t.fromElement)||!fn(a)&&!a[ln])&&(c||z)&&(z=n.window===n?n:(z=n.ownerDocument)?z.defaultView||z.parentWindow:window,c?(c=o,null!==(a=(a=t.relatedTarget||t.toElement)?fn(a):null)&&(a!==(O=He(a))||5!==a.tag&&6!==a.tag)&&(a=null)):(c=null,a=o),c!==a)){if(r=st,l="onMouseLeave",i="onMouseEnter",d="mouse","pointerout"!==e&&"pointerover"!==e||(r=yt,l="onPointerLeave",i="onPointerEnter",d="pointer"),O=null==c?z:Wn(c),s=null==a?z:Wn(a),(z=new r(l,d+"leave",c,t,n)).target=O,z.relatedTarget=s,l=null,fn(n)===o&&((r=new r(i,d+"enter",a,t,n)).target=s,r.relatedTarget=O,l=r),O=l,c&&a)e:{for(i=a,d=0,s=r=c;s;s=Vo(s))d++;for(s=0,l=i;l;l=Vo(l))s++;for(;0<d-s;)r=Vo(r),d--;for(;0<s-d;)i=Vo(i),s--;for(;d--;){if(r===i||null!==i&&r===i.alternate)break e;r=Vo(r),i=Vo(i)}r=null}else r=null;null!==c&&$o(p,z,c,r,!1),null!==a&&null!==O&&$o(p,O,a,r,!0)}if("select"===(c=(z=o?Wn(o):window).nodeName&&z.nodeName.toLowerCase())||"input"===c&&"file"===z.type)var u=Gt;else if(jt(z))if(Jt)u=bo;else{u=oo;var A=to}else(c=z.nodeName)&&"input"===c.toLowerCase()&&("checkbox"===z.type||"radio"===z.type)&&(u=no);switch(u&&(u=u(e,o))?Ft(p,u,t,n):(A&&A(e,z,o),"focusout"===e&&(A=z._wrapperState)&&A.controlled&&"number"===z.type&&ee(z,"number",z.value)),A=o?Wn(o):window,e){case"focusin":(jt(A)||"true"===A.contentEditable)&&(uo=A,Ao=o,qo=null);break;case"focusout":qo=Ao=uo=null;break;case"mousedown":fo=!0;break;case"contextmenu":case"mouseup":case"dragend":fo=!1,mo(p,t,n);break;case"selectionchange":if(lo)break;case"keydown":case"keyup":mo(p,t,n)}var q;if(wt)e:{switch(e){case"compositionstart":var f="onCompositionStart";break e;case"compositionend":f="onCompositionEnd";break e;case"compositionupdate":f="onCompositionUpdate";break e}f=void 0}else Pt?xt(e,t)&&(f="onCompositionEnd"):"keydown"===e&&229===t.keyCode&&(f="onCompositionStart");f&&(Xt&&"ko"!==t.locale&&(Pt||"onCompositionStart"!==f?"onCompositionEnd"===f&&Pt&&(q=et()):(QM="value"in(KM=n)?KM.value:KM.textContent,Pt=!0)),0<(A=Uo(o,f)).length&&(f=new ft(f,e,null,t,n),p.push({event:f,listeners:A}),(q||null!==(q=Ct(t)))&&(f.data=q))),(q=Et?function(e,M){switch(e){case"compositionend":return Ct(M);case"keypress":return 32!==M.which?null:(Dt=!0,Yt);case"textInput":return(e=M.data)===Yt&&Dt?null:e;default:return null}}(e,t):function(e,M){if(Pt)return"compositionend"===e||!wt&&xt(e,M)?(e=et(),ZM=QM=KM=null,Pt=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(M.ctrlKey||M.altKey||M.metaKey)||M.ctrlKey&&M.altKey){if(M.char&&1<M.char.length)return M.char;if(M.which)return String.fromCharCode(M.which)}return null;case"compositionend":return Xt&&"ko"!==M.locale?null:M.data}}(e,t))&&0<(o=Uo(o,"onBeforeInput")).length&&(n=new ft("onBeforeInput","beforeinput",null,t,n),p.push({event:n,listeners:o}),n.data=q)}Do(p,M)}))}function Io(e,M,t){return{instance:e,listener:M,currentTarget:t}}function Uo(e,M){for(var t=M+"Capture",o=[];null!==e;){var n=e,b=n.stateNode;5===n.tag&&null!==b&&(n=b,null!=(b=Be(e,t))&&o.unshift(Io(e,b,n)),null!=(b=Be(e,M))&&o.push(Io(e,b,n))),e=e.return}return o}function Vo(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function $o(e,M,t,o,n){for(var b=M._reactName,p=[];null!==t&&t!==o;){var z=t,c=z.alternate,a=z.stateNode;if(null!==c&&c===o)break;5===z.tag&&null!==a&&(z=a,n?null!=(c=Be(t,b))&&p.unshift(Io(t,c,z)):n||null!=(c=Be(t,b))&&p.push(Io(t,c,z))),t=t.return}0!==p.length&&e.push({event:M,listeners:p})}var Go=/\r\n?/g,Jo=/\u0000|\uFFFD/g;function Ko(e){return("string"==typeof e?e:""+e).replace(Go,"\n").replace(Jo,"")}function Qo(e,M,t){if(M=Ko(M),Ko(e)!==M&&t)throw Error(b(425))}function Zo(){}var en=null,Mn=null;function tn(e,M){return"textarea"===e||"noscript"===e||"string"==typeof M.children||"number"==typeof M.children||"object"==typeof M.dangerouslySetInnerHTML&&null!==M.dangerouslySetInnerHTML&&null!=M.dangerouslySetInnerHTML.__html}var on="function"==typeof setTimeout?setTimeout:void 0,nn="function"==typeof clearTimeout?clearTimeout:void 0,bn="function"==typeof Promise?Promise:void 0,pn="function"==typeof queueMicrotask?queueMicrotask:void 0!==bn?function(e){return bn.resolve(null).then(e).catch(zn)}:on;function zn(e){setTimeout((function(){throw e}))}function cn(e,M){var t=M,o=0;do{var n=t.nextSibling;if(e.removeChild(t),n&&8===n.nodeType)if("/$"===(t=n.data)){if(0===o)return e.removeChild(n),void HM(M);o--}else"$"!==t&&"$?"!==t&&"$!"!==t||o++;t=n}while(t);HM(M)}function an(e){for(;null!=e;e=e.nextSibling){var M=e.nodeType;if(1===M||3===M)break;if(8===M){if("$"===(M=e.data)||"$!"===M||"$?"===M)break;if("/$"===M)return null}}return e}function rn(e){e=e.previousSibling;for(var M=0;e;){if(8===e.nodeType){var t=e.data;if("$"===t||"$!"===t||"$?"===t){if(0===M)return e;M--}else"/$"===t&&M++}e=e.previousSibling}return null}var On=Math.random().toString(36).slice(2),sn="__reactFiber$"+On,dn="__reactProps$"+On,ln="__reactContainer$"+On,un="__reactEvents$"+On,An="__reactListeners$"+On,qn="__reactHandles$"+On;function fn(e){var M=e[sn];if(M)return M;for(var t=e.parentNode;t;){if(M=t[ln]||t[sn]){if(t=M.alternate,null!==M.child||null!==t&&null!==t.child)for(e=rn(e);null!==e;){if(t=e[sn])return t;e=rn(e)}return M}t=(e=t).parentNode}return null}function mn(e){return!(e=e[sn]||e[ln])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function Wn(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(b(33))}function hn(e){return e[dn]||null}var Ln=[],Rn=-1;function gn(e){return{current:e}}function yn(e){0>Rn||(e.current=Ln[Rn],Ln[Rn]=null,Rn--)}function vn(e,M){Rn++,Ln[Rn]=e.current,e.current=M}var Nn={},kn=gn(Nn),Tn=gn(!1),Bn=Nn;function wn(e,M){var t=e.type.contextTypes;if(!t)return Nn;var o=e.stateNode;if(o&&o.__reactInternalMemoizedUnmaskedChildContext===M)return o.__reactInternalMemoizedMaskedChildContext;var n,b={};for(n in t)b[n]=M[n];return o&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=M,e.__reactInternalMemoizedMaskedChildContext=b),b}function Sn(e){return null!=e.childContextTypes}function En(){yn(Tn),yn(kn)}function Xn(e,M,t){if(kn.current!==Nn)throw Error(b(168));vn(kn,M),vn(Tn,t)}function Yn(e,M,t){var o=e.stateNode;if(M=M.childContextTypes,"function"!=typeof o.getChildContext)return t;for(var n in o=o.getChildContext())if(!(n in M))throw Error(b(108,j(e)||"Unknown",n));return Y({},t,o)}function Dn(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Nn,Bn=kn.current,vn(kn,e),vn(Tn,Tn.current),!0}function xn(e,M,t){var o=e.stateNode;if(!o)throw Error(b(169));t?(e=Yn(e,M,Bn),o.__reactInternalMemoizedMergedChildContext=e,yn(Tn),yn(kn),vn(kn,e)):yn(Tn),vn(Tn,t)}var Cn=null,Pn=!1,Hn=!1;function jn(e){null===Cn?Cn=[e]:Cn.push(e)}function Fn(){if(!Hn&&null!==Cn){Hn=!0;var e=0,M=fM;try{var t=Cn;for(fM=1;e<t.length;e++){var o=t[e];do{o=o(!0)}while(null!==o)}Cn=null,Pn=!1}catch(M){throw null!==Cn&&(Cn=Cn.slice(e+1)),Ve(Ze,Fn),M}finally{fM=M,Hn=!1}}return null}var In=[],Un=0,Vn=null,$n=0,Gn=[],Jn=0,Kn=null,Qn=1,Zn="";function eb(e,M){In[Un++]=$n,In[Un++]=Vn,Vn=e,$n=M}function Mb(e,M,t){Gn[Jn++]=Qn,Gn[Jn++]=Zn,Gn[Jn++]=Kn,Kn=e;var o=Qn;e=Zn;var n=32-pM(o)-1;o&=~(1<<n),t+=1;var b=32-pM(M)+n;if(30<b){var p=n-n%5;b=(o&(1<<p)-1).toString(32),o>>=p,n-=p,Qn=1<<32-pM(M)+n|t<<n|o,Zn=b+e}else Qn=1<<b|t<<n|o,Zn=e}function tb(e){null!==e.return&&(eb(e,1),Mb(e,1,0))}function ob(e){for(;e===Vn;)Vn=In[--Un],In[Un]=null,$n=In[--Un],In[Un]=null;for(;e===Kn;)Kn=Gn[--Jn],Gn[Jn]=null,Zn=Gn[--Jn],Gn[Jn]=null,Qn=Gn[--Jn],Gn[Jn]=null}var nb=null,bb=null,pb=!1,zb=null;function cb(e,M){var t=wa(5,null,null,0);t.elementType="DELETED",t.stateNode=M,t.return=e,null===(M=e.deletions)?(e.deletions=[t],e.flags|=16):M.push(t)}function ab(e,M){switch(e.tag){case 5:var t=e.type;return null!==(M=1!==M.nodeType||t.toLowerCase()!==M.nodeName.toLowerCase()?null:M)&&(e.stateNode=M,nb=e,bb=an(M.firstChild),!0);case 6:return null!==(M=""===e.pendingProps||3!==M.nodeType?null:M)&&(e.stateNode=M,nb=e,bb=null,!0);case 13:return null!==(M=8!==M.nodeType?null:M)&&(t=null!==Kn?{id:Qn,overflow:Zn}:null,e.memoizedState={dehydrated:M,treeContext:t,retryLane:1073741824},(t=wa(18,null,null,0)).stateNode=M,t.return=e,e.child=t,nb=e,bb=null,!0);default:return!1}}function rb(e){return 0!=(1&e.mode)&&0==(128&e.flags)}function Ob(e){if(pb){var M=bb;if(M){var t=M;if(!ab(e,M)){if(rb(e))throw Error(b(418));M=an(t.nextSibling);var o=nb;M&&ab(e,M)?cb(o,t):(e.flags=-4097&e.flags|2,pb=!1,nb=e)}}else{if(rb(e))throw Error(b(418));e.flags=-4097&e.flags|2,pb=!1,nb=e}}}function ib(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;nb=e}function sb(e){if(e!==nb)return!1;if(!pb)return ib(e),pb=!0,!1;var M;if((M=3!==e.tag)&&!(M=5!==e.tag)&&(M="head"!==(M=e.type)&&"body"!==M&&!tn(e.type,e.memoizedProps)),M&&(M=bb)){if(rb(e))throw db(),Error(b(418));for(;M;)cb(e,M),M=an(M.nextSibling)}if(ib(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(b(317));e:{for(e=e.nextSibling,M=0;e;){if(8===e.nodeType){var t=e.data;if("/$"===t){if(0===M){bb=an(e.nextSibling);break e}M--}else"$"!==t&&"$!"!==t&&"$?"!==t||M++}e=e.nextSibling}bb=null}}else bb=nb?an(e.stateNode.nextSibling):null;return!0}function db(){for(var e=bb;e;)e=an(e.nextSibling)}function lb(){bb=nb=null,pb=!1}function ub(e){null===zb?zb=[e]:zb.push(e)}var Ab=m.ReactCurrentBatchConfig;function qb(e,M){if(e&&e.defaultProps){for(var t in M=Y({},M),e=e.defaultProps)void 0===M[t]&&(M[t]=e[t]);return M}return M}var fb=gn(null),mb=null,Wb=null,_b=null;function hb(){_b=Wb=mb=null}function Lb(e){var M=fb.current;yn(fb),e._currentValue=M}function Rb(e,M,t){for(;null!==e;){var o=e.alternate;if((e.childLanes&M)!==M?(e.childLanes|=M,null!==o&&(o.childLanes|=M)):null!==o&&(o.childLanes&M)!==M&&(o.childLanes|=M),e===t)break;e=e.return}}function gb(e,M){mb=e,_b=Wb=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&M)&&(Wz=!0),e.firstContext=null)}function yb(e){var M=e._currentValue;if(_b!==e)if(e={context:e,memoizedValue:M,next:null},null===Wb){if(null===mb)throw Error(b(308));Wb=e,mb.dependencies={lanes:0,firstContext:e}}else Wb=Wb.next=e;return M}var vb=null;function Nb(e){null===vb?vb=[e]:vb.push(e)}function kb(e,M,t,o){var n=M.interleaved;return null===n?(t.next=t,Nb(M)):(t.next=n.next,n.next=t),M.interleaved=t,Tb(e,o)}function Tb(e,M){e.lanes|=M;var t=e.alternate;for(null!==t&&(t.lanes|=M),t=e,e=e.return;null!==e;)e.childLanes|=M,null!==(t=e.alternate)&&(t.childLanes|=M),t=e,e=e.return;return 3===t.tag?t.stateNode:null}var Bb=!1;function wb(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Sb(e,M){e=e.updateQueue,M.updateQueue===e&&(M.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Eb(e,M){return{eventTime:e,lane:M,tag:0,payload:null,callback:null,next:null}}function Xb(e,M,t){var o=e.updateQueue;if(null===o)return null;if(o=o.shared,0!=(2&kc)){var n=o.pending;return null===n?M.next=M:(M.next=n.next,n.next=M),o.pending=M,Tb(e,t)}return null===(n=o.interleaved)?(M.next=M,Nb(o)):(M.next=n.next,n.next=M),o.interleaved=M,Tb(e,t)}function Yb(e,M,t){if(null!==(M=M.updateQueue)&&(M=M.shared,0!=(4194240&t))){var o=M.lanes;t|=o&=e.pendingLanes,M.lanes=t,qM(e,t)}}function Db(e,M){var t=e.updateQueue,o=e.alternate;if(null!==o&&t===(o=o.updateQueue)){var n=null,b=null;if(null!==(t=t.firstBaseUpdate)){do{var p={eventTime:t.eventTime,lane:t.lane,tag:t.tag,payload:t.payload,callback:t.callback,next:null};null===b?n=b=p:b=b.next=p,t=t.next}while(null!==t);null===b?n=b=M:b=b.next=M}else n=b=M;return t={baseState:o.baseState,firstBaseUpdate:n,lastBaseUpdate:b,shared:o.shared,effects:o.effects},void(e.updateQueue=t)}null===(e=t.lastBaseUpdate)?t.firstBaseUpdate=M:e.next=M,t.lastBaseUpdate=M}function xb(e,M,t,o){var n=e.updateQueue;Bb=!1;var b=n.firstBaseUpdate,p=n.lastBaseUpdate,z=n.shared.pending;if(null!==z){n.shared.pending=null;var c=z,a=c.next;c.next=null,null===p?b=a:p.next=a,p=c;var r=e.alternate;null!==r&&(z=(r=r.updateQueue).lastBaseUpdate)!==p&&(null===z?r.firstBaseUpdate=a:z.next=a,r.lastBaseUpdate=c)}if(null!==b){var O=n.baseState;for(p=0,r=a=c=null,z=b;;){var i=z.lane,s=z.eventTime;if((o&i)===i){null!==r&&(r=r.next={eventTime:s,lane:0,tag:z.tag,payload:z.payload,callback:z.callback,next:null});e:{var d=e,l=z;switch(i=M,s=t,l.tag){case 1:if("function"==typeof(d=l.payload)){O=d.call(s,O,i);break e}O=d;break e;case 3:d.flags=-65537&d.flags|128;case 0:if(null==(i="function"==typeof(d=l.payload)?d.call(s,O,i):d))break e;O=Y({},O,i);break e;case 2:Bb=!0}}null!==z.callback&&0!==z.lane&&(e.flags|=64,null===(i=n.effects)?n.effects=[z]:i.push(z))}else s={eventTime:s,lane:i,tag:z.tag,payload:z.payload,callback:z.callback,next:null},null===r?(a=r=s,c=O):r=r.next=s,p|=i;if(null===(z=z.next)){if(null===(z=n.shared.pending))break;z=(i=z).next,i.next=null,n.lastBaseUpdate=i,n.shared.pending=null}}if(null===r&&(c=O),n.baseState=c,n.firstBaseUpdate=a,n.lastBaseUpdate=r,null!==(M=n.shared.interleaved)){n=M;do{p|=n.lane,n=n.next}while(n!==M)}else null===b&&(n.shared.lanes=0);Dc|=p,e.lanes=p,e.memoizedState=O}}function Cb(e,M,t){if(e=M.effects,M.effects=null,null!==e)for(M=0;M<e.length;M++){var o=e[M],n=o.callback;if(null!==n){if(o.callback=null,o=t,"function"!=typeof n)throw Error(b(191,n));n.call(o)}}}var Pb=(new o.Component).refs;function Hb(e,M,t,o){t=null==(t=t(o,M=e.memoizedState))?M:Y({},M,t),e.memoizedState=t,0===e.lanes&&(e.updateQueue.baseState=t)}var jb={isMounted:function(e){return!!(e=e._reactInternals)&&He(e)===e},enqueueSetState:function(e,M,t){e=e._reactInternals;var o=ta(),n=oa(e),b=Eb(o,n);b.payload=M,null!=t&&(b.callback=t),null!==(M=Xb(e,b,n))&&(na(M,e,n,o),Yb(M,e,n))},enqueueReplaceState:function(e,M,t){e=e._reactInternals;var o=ta(),n=oa(e),b=Eb(o,n);b.tag=1,b.payload=M,null!=t&&(b.callback=t),null!==(M=Xb(e,b,n))&&(na(M,e,n,o),Yb(M,e,n))},enqueueForceUpdate:function(e,M){e=e._reactInternals;var t=ta(),o=oa(e),n=Eb(t,o);n.tag=2,null!=M&&(n.callback=M),null!==(M=Xb(e,n,o))&&(na(M,e,o,t),Yb(M,e,o))}};function Fb(e,M,t,o,n,b,p){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(o,b,p):!(M.prototype&&M.prototype.isPureReactComponent&&zo(t,o)&&zo(n,b))}function Ib(e,M,t){var o=!1,n=Nn,b=M.contextType;return"object"==typeof b&&null!==b?b=yb(b):(n=Sn(M)?Bn:kn.current,b=(o=null!=(o=M.contextTypes))?wn(e,n):Nn),M=new M(t,b),e.memoizedState=null!==M.state&&void 0!==M.state?M.state:null,M.updater=jb,e.stateNode=M,M._reactInternals=e,o&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=n,e.__reactInternalMemoizedMaskedChildContext=b),M}function Ub(e,M,t,o){e=M.state,"function"==typeof M.componentWillReceiveProps&&M.componentWillReceiveProps(t,o),"function"==typeof M.UNSAFE_componentWillReceiveProps&&M.UNSAFE_componentWillReceiveProps(t,o),M.state!==e&&jb.enqueueReplaceState(M,M.state,null)}function Vb(e,M,t,o){var n=e.stateNode;n.props=t,n.state=e.memoizedState,n.refs=Pb,wb(e);var b=M.contextType;"object"==typeof b&&null!==b?n.context=yb(b):(b=Sn(M)?Bn:kn.current,n.context=wn(e,b)),n.state=e.memoizedState,"function"==typeof(b=M.getDerivedStateFromProps)&&(Hb(e,M,b,t),n.state=e.memoizedState),"function"==typeof M.getDerivedStateFromProps||"function"==typeof n.getSnapshotBeforeUpdate||"function"!=typeof n.UNSAFE_componentWillMount&&"function"!=typeof n.componentWillMount||(M=n.state,"function"==typeof n.componentWillMount&&n.componentWillMount(),"function"==typeof n.UNSAFE_componentWillMount&&n.UNSAFE_componentWillMount(),M!==n.state&&jb.enqueueReplaceState(n,n.state,null),xb(e,t,n,o),n.state=e.memoizedState),"function"==typeof n.componentDidMount&&(e.flags|=4194308)}function $b(e,M,t){if(null!==(e=t.ref)&&"function"!=typeof e&&"object"!=typeof e){if(t._owner){if(t=t._owner){if(1!==t.tag)throw Error(b(309));var o=t.stateNode}if(!o)throw Error(b(147,e));var n=o,p=""+e;return null!==M&&null!==M.ref&&"function"==typeof M.ref&&M.ref._stringRef===p?M.ref:(M=function(e){var M=n.refs;M===Pb&&(M=n.refs={}),null===e?delete M[p]:M[p]=e},M._stringRef=p,M)}if("string"!=typeof e)throw Error(b(284));if(!t._owner)throw Error(b(290,e))}return e}function Gb(e,M){throw e=Object.prototype.toString.call(M),Error(b(31,"[object Object]"===e?"object with keys {"+Object.keys(M).join(", ")+"}":e))}function Jb(e){return(0,e._init)(e._payload)}function Kb(e){function M(M,t){if(e){var o=M.deletions;null===o?(M.deletions=[t],M.flags|=16):o.push(t)}}function t(t,o){if(!e)return null;for(;null!==o;)M(t,o),o=o.sibling;return null}function o(e,M){for(e=new Map;null!==M;)null!==M.key?e.set(M.key,M):e.set(M.index,M),M=M.sibling;return e}function n(e,M){return(e=Ea(e,M)).index=0,e.sibling=null,e}function p(M,t,o){return M.index=o,e?null!==(o=M.alternate)?(o=o.index)<t?(M.flags|=2,t):o:(M.flags|=2,t):(M.flags|=1048576,t)}function z(M){return e&&null===M.alternate&&(M.flags|=2),M}function c(e,M,t,o){return null===M||6!==M.tag?((M=xa(t,e.mode,o)).return=e,M):((M=n(M,t)).return=e,M)}function a(e,M,t,o){var b=t.type;return b===h?O(e,M,t.props.children,o,t.key):null!==M&&(M.elementType===b||"object"==typeof b&&null!==b&&b.$$typeof===B&&Jb(b)===M.type)?((o=n(M,t.props)).ref=$b(e,M,t),o.return=e,o):((o=Xa(t.type,t.key,t.props,null,e.mode,o)).ref=$b(e,M,t),o.return=e,o)}function r(e,M,t,o){return null===M||4!==M.tag||M.stateNode.containerInfo!==t.containerInfo||M.stateNode.implementation!==t.implementation?((M=Ca(t,e.mode,o)).return=e,M):((M=n(M,t.children||[])).return=e,M)}function O(e,M,t,o,b){return null===M||7!==M.tag?((M=Ya(t,e.mode,o,b)).return=e,M):((M=n(M,t)).return=e,M)}function i(e,M,t){if("string"==typeof M&&""!==M||"number"==typeof M)return(M=xa(""+M,e.mode,t)).return=e,M;if("object"==typeof M&&null!==M){switch(M.$$typeof){case W:return(t=Xa(M.type,M.key,M.props,null,e.mode,t)).ref=$b(e,null,M),t.return=e,t;case _:return(M=Ca(M,e.mode,t)).return=e,M;case B:return i(e,(0,M._init)(M._payload),t)}if(Me(M)||E(M))return(M=Ya(M,e.mode,t,null)).return=e,M;Gb(e,M)}return null}function s(e,M,t,o){var n=null!==M?M.key:null;if("string"==typeof t&&""!==t||"number"==typeof t)return null!==n?null:c(e,M,""+t,o);if("object"==typeof t&&null!==t){switch(t.$$typeof){case W:return t.key===n?a(e,M,t,o):null;case _:return t.key===n?r(e,M,t,o):null;case B:return s(e,M,(n=t._init)(t._payload),o)}if(Me(t)||E(t))return null!==n?null:O(e,M,t,o,null);Gb(e,t)}return null}function d(e,M,t,o,n){if("string"==typeof o&&""!==o||"number"==typeof o)return c(M,e=e.get(t)||null,""+o,n);if("object"==typeof o&&null!==o){switch(o.$$typeof){case W:return a(M,e=e.get(null===o.key?t:o.key)||null,o,n);case _:return r(M,e=e.get(null===o.key?t:o.key)||null,o,n);case B:return d(e,M,t,(0,o._init)(o._payload),n)}if(Me(o)||E(o))return O(M,e=e.get(t)||null,o,n,null);Gb(M,o)}return null}function l(n,b,z,c){for(var a=null,r=null,O=b,l=b=0,u=null;null!==O&&l<z.length;l++){O.index>l?(u=O,O=null):u=O.sibling;var A=s(n,O,z[l],c);if(null===A){null===O&&(O=u);break}e&&O&&null===A.alternate&&M(n,O),b=p(A,b,l),null===r?a=A:r.sibling=A,r=A,O=u}if(l===z.length)return t(n,O),pb&&eb(n,l),a;if(null===O){for(;l<z.length;l++)null!==(O=i(n,z[l],c))&&(b=p(O,b,l),null===r?a=O:r.sibling=O,r=O);return pb&&eb(n,l),a}for(O=o(n,O);l<z.length;l++)null!==(u=d(O,n,l,z[l],c))&&(e&&null!==u.alternate&&O.delete(null===u.key?l:u.key),b=p(u,b,l),null===r?a=u:r.sibling=u,r=u);return e&&O.forEach((function(e){return M(n,e)})),pb&&eb(n,l),a}function u(n,z,c,a){var r=E(c);if("function"!=typeof r)throw Error(b(150));if(null==(c=r.call(c)))throw Error(b(151));for(var O=r=null,l=z,u=z=0,A=null,q=c.next();null!==l&&!q.done;u++,q=c.next()){l.index>u?(A=l,l=null):A=l.sibling;var f=s(n,l,q.value,a);if(null===f){null===l&&(l=A);break}e&&l&&null===f.alternate&&M(n,l),z=p(f,z,u),null===O?r=f:O.sibling=f,O=f,l=A}if(q.done)return t(n,l),pb&&eb(n,u),r;if(null===l){for(;!q.done;u++,q=c.next())null!==(q=i(n,q.value,a))&&(z=p(q,z,u),null===O?r=q:O.sibling=q,O=q);return pb&&eb(n,u),r}for(l=o(n,l);!q.done;u++,q=c.next())null!==(q=d(l,n,u,q.value,a))&&(e&&null!==q.alternate&&l.delete(null===q.key?u:q.key),z=p(q,z,u),null===O?r=q:O.sibling=q,O=q);return e&&l.forEach((function(e){return M(n,e)})),pb&&eb(n,u),r}return function e(o,b,p,c){if("object"==typeof p&&null!==p&&p.type===h&&null===p.key&&(p=p.props.children),"object"==typeof p&&null!==p){switch(p.$$typeof){case W:e:{for(var a=p.key,r=b;null!==r;){if(r.key===a){if((a=p.type)===h){if(7===r.tag){t(o,r.sibling),(b=n(r,p.props.children)).return=o,o=b;break e}}else if(r.elementType===a||"object"==typeof a&&null!==a&&a.$$typeof===B&&Jb(a)===r.type){t(o,r.sibling),(b=n(r,p.props)).ref=$b(o,r,p),b.return=o,o=b;break e}t(o,r);break}M(o,r),r=r.sibling}p.type===h?((b=Ya(p.props.children,o.mode,c,p.key)).return=o,o=b):((c=Xa(p.type,p.key,p.props,null,o.mode,c)).ref=$b(o,b,p),c.return=o,o=c)}return z(o);case _:e:{for(r=p.key;null!==b;){if(b.key===r){if(4===b.tag&&b.stateNode.containerInfo===p.containerInfo&&b.stateNode.implementation===p.implementation){t(o,b.sibling),(b=n(b,p.children||[])).return=o,o=b;break e}t(o,b);break}M(o,b),b=b.sibling}(b=Ca(p,o.mode,c)).return=o,o=b}return z(o);case B:return e(o,b,(r=p._init)(p._payload),c)}if(Me(p))return l(o,b,p,c);if(E(p))return u(o,b,p,c);Gb(o,p)}return"string"==typeof p&&""!==p||"number"==typeof p?(p=""+p,null!==b&&6===b.tag?(t(o,b.sibling),(b=n(b,p)).return=o,o=b):(t(o,b),(b=xa(p,o.mode,c)).return=o,o=b),z(o)):t(o,b)}}var Qb=Kb(!0),Zb=Kb(!1),ep={},Mp=gn(ep),tp=gn(ep),op=gn(ep);function np(e){if(e===ep)throw Error(b(174));return e}function bp(e,M){switch(vn(op,M),vn(tp,e),vn(Mp,ep),e=M.nodeType){case 9:case 11:M=(M=M.documentElement)?M.namespaceURI:ce(null,"");break;default:M=ce(M=(e=8===e?M.parentNode:M).namespaceURI||null,e=e.tagName)}yn(Mp),vn(Mp,M)}function pp(){yn(Mp),yn(tp),yn(op)}function zp(e){np(op.current);var M=np(Mp.current),t=ce(M,e.type);M!==t&&(vn(tp,e),vn(Mp,t))}function cp(e){tp.current===e&&(yn(Mp),yn(tp))}var ap=gn(0);function rp(e){for(var M=e;null!==M;){if(13===M.tag){var t=M.memoizedState;if(null!==t&&(null===(t=t.dehydrated)||"$?"===t.data||"$!"===t.data))return M}else if(19===M.tag&&void 0!==M.memoizedProps.revealOrder){if(0!=(128&M.flags))return M}else if(null!==M.child){M.child.return=M,M=M.child;continue}if(M===e)break;for(;null===M.sibling;){if(null===M.return||M.return===e)return null;M=M.return}M.sibling.return=M.return,M=M.sibling}return null}var Op=[];function ip(){for(var e=0;e<Op.length;e++)Op[e]._workInProgressVersionPrimary=null;Op.length=0}var sp=m.ReactCurrentDispatcher,dp=m.ReactCurrentBatchConfig,lp=0,up=null,Ap=null,qp=null,fp=!1,mp=!1,Wp=0,_p=0;function hp(){throw Error(b(321))}function Lp(e,M){if(null===M)return!1;for(var t=0;t<M.length&&t<e.length;t++)if(!po(e[t],M[t]))return!1;return!0}function Rp(e,M,t,o,n,p){if(lp=p,up=M,M.memoizedState=null,M.updateQueue=null,M.lanes=0,sp.current=null===e||null===e.memoizedState?cz:az,e=t(o,n),mp){p=0;do{if(mp=!1,Wp=0,25<=p)throw Error(b(301));p+=1,qp=Ap=null,M.updateQueue=null,sp.current=rz,e=t(o,n)}while(mp)}if(sp.current=zz,M=null!==Ap&&null!==Ap.next,lp=0,qp=Ap=up=null,fp=!1,M)throw Error(b(300));return e}function gp(){var e=0!==Wp;return Wp=0,e}function yp(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===qp?up.memoizedState=qp=e:qp=qp.next=e,qp}function vp(){if(null===Ap){var e=up.alternate;e=null!==e?e.memoizedState:null}else e=Ap.next;var M=null===qp?up.memoizedState:qp.next;if(null!==M)qp=M,Ap=e;else{if(null===e)throw Error(b(310));e={memoizedState:(Ap=e).memoizedState,baseState:Ap.baseState,baseQueue:Ap.baseQueue,queue:Ap.queue,next:null},null===qp?up.memoizedState=qp=e:qp=qp.next=e}return qp}function Np(e,M){return"function"==typeof M?M(e):M}function kp(e){var M=vp(),t=M.queue;if(null===t)throw Error(b(311));t.lastRenderedReducer=e;var o=Ap,n=o.baseQueue,p=t.pending;if(null!==p){if(null!==n){var z=n.next;n.next=p.next,p.next=z}o.baseQueue=n=p,t.pending=null}if(null!==n){p=n.next,o=o.baseState;var c=z=null,a=null,r=p;do{var O=r.lane;if((lp&O)===O)null!==a&&(a=a.next={lane:0,action:r.action,hasEagerState:r.hasEagerState,eagerState:r.eagerState,next:null}),o=r.hasEagerState?r.eagerState:e(o,r.action);else{var i={lane:O,action:r.action,hasEagerState:r.hasEagerState,eagerState:r.eagerState,next:null};null===a?(c=a=i,z=o):a=a.next=i,up.lanes|=O,Dc|=O}r=r.next}while(null!==r&&r!==p);null===a?z=o:a.next=c,po(o,M.memoizedState)||(Wz=!0),M.memoizedState=o,M.baseState=z,M.baseQueue=a,t.lastRenderedState=o}if(null!==(e=t.interleaved)){n=e;do{p=n.lane,up.lanes|=p,Dc|=p,n=n.next}while(n!==e)}else null===n&&(t.lanes=0);return[M.memoizedState,t.dispatch]}function Tp(e){var M=vp(),t=M.queue;if(null===t)throw Error(b(311));t.lastRenderedReducer=e;var o=t.dispatch,n=t.pending,p=M.memoizedState;if(null!==n){t.pending=null;var z=n=n.next;do{p=e(p,z.action),z=z.next}while(z!==n);po(p,M.memoizedState)||(Wz=!0),M.memoizedState=p,null===M.baseQueue&&(M.baseState=p),t.lastRenderedState=p}return[p,o]}function Bp(){}function wp(e,M){var t=up,o=vp(),n=M(),p=!po(o.memoizedState,n);if(p&&(o.memoizedState=n,Wz=!0),o=o.queue,Ip(Xp.bind(null,t,o,e),[e]),o.getSnapshot!==M||p||null!==qp&&1&qp.memoizedState.tag){if(t.flags|=2048,Cp(9,Ep.bind(null,t,o,n,M),void 0,null),null===Tc)throw Error(b(349));0!=(30&lp)||Sp(t,M,n)}return n}function Sp(e,M,t){e.flags|=16384,e={getSnapshot:M,value:t},null===(M=up.updateQueue)?(M={lastEffect:null,stores:null},up.updateQueue=M,M.stores=[e]):null===(t=M.stores)?M.stores=[e]:t.push(e)}function Ep(e,M,t,o){M.value=t,M.getSnapshot=o,Yp(M)&&Dp(e)}function Xp(e,M,t){return t((function(){Yp(M)&&Dp(e)}))}function Yp(e){var M=e.getSnapshot;e=e.value;try{var t=M();return!po(e,t)}catch(e){return!0}}function Dp(e){var M=Tb(e,1);null!==M&&na(M,e,1,-1)}function xp(e){var M=yp();return"function"==typeof e&&(e=e()),M.memoizedState=M.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Np,lastRenderedState:e},M.queue=e,e=e.dispatch=oz.bind(null,up,e),[M.memoizedState,e]}function Cp(e,M,t,o){return e={tag:e,create:M,destroy:t,deps:o,next:null},null===(M=up.updateQueue)?(M={lastEffect:null,stores:null},up.updateQueue=M,M.lastEffect=e.next=e):null===(t=M.lastEffect)?M.lastEffect=e.next=e:(o=t.next,t.next=e,e.next=o,M.lastEffect=e),e}function Pp(){return vp().memoizedState}function Hp(e,M,t,o){var n=yp();up.flags|=e,n.memoizedState=Cp(1|M,t,void 0,void 0===o?null:o)}function jp(e,M,t,o){var n=vp();o=void 0===o?null:o;var b=void 0;if(null!==Ap){var p=Ap.memoizedState;if(b=p.destroy,null!==o&&Lp(o,p.deps))return void(n.memoizedState=Cp(M,t,b,o))}up.flags|=e,n.memoizedState=Cp(1|M,t,b,o)}function Fp(e,M){return Hp(8390656,8,e,M)}function Ip(e,M){return jp(2048,8,e,M)}function Up(e,M){return jp(4,2,e,M)}function Vp(e,M){return jp(4,4,e,M)}function $p(e,M){return"function"==typeof M?(e=e(),M(e),function(){M(null)}):null!=M?(e=e(),M.current=e,function(){M.current=null}):void 0}function Gp(e,M,t){return t=null!=t?t.concat([e]):null,jp(4,4,$p.bind(null,M,e),t)}function Jp(){}function Kp(e,M){var t=vp();M=void 0===M?null:M;var o=t.memoizedState;return null!==o&&null!==M&&Lp(M,o[1])?o[0]:(t.memoizedState=[e,M],e)}function Qp(e,M){var t=vp();M=void 0===M?null:M;var o=t.memoizedState;return null!==o&&null!==M&&Lp(M,o[1])?o[0]:(e=e(),t.memoizedState=[e,M],e)}function Zp(e,M,t){return 0==(21&lp)?(e.baseState&&(e.baseState=!1,Wz=!0),e.memoizedState=t):(po(t,M)||(t=lM(),up.lanes|=t,Dc|=t,e.baseState=!0),M)}function ez(e,M){var t=fM;fM=0!==t&&4>t?t:4,e(!0);var o=dp.transition;dp.transition={};try{e(!1),M()}finally{fM=t,dp.transition=o}}function Mz(){return vp().memoizedState}function tz(e,M,t){var o=oa(e);t={lane:o,action:t,hasEagerState:!1,eagerState:null,next:null},nz(e)?bz(M,t):null!==(t=kb(e,M,t,o))&&(na(t,e,o,ta()),pz(t,M,o))}function oz(e,M,t){var o=oa(e),n={lane:o,action:t,hasEagerState:!1,eagerState:null,next:null};if(nz(e))bz(M,n);else{var b=e.alternate;if(0===e.lanes&&(null===b||0===b.lanes)&&null!==(b=M.lastRenderedReducer))try{var p=M.lastRenderedState,z=b(p,t);if(n.hasEagerState=!0,n.eagerState=z,po(z,p)){var c=M.interleaved;return null===c?(n.next=n,Nb(M)):(n.next=c.next,c.next=n),void(M.interleaved=n)}}catch(e){}null!==(t=kb(e,M,n,o))&&(na(t,e,o,n=ta()),pz(t,M,o))}}function nz(e){var M=e.alternate;return e===up||null!==M&&M===up}function bz(e,M){mp=fp=!0;var t=e.pending;null===t?M.next=M:(M.next=t.next,t.next=M),e.pending=M}function pz(e,M,t){if(0!=(4194240&t)){var o=M.lanes;t|=o&=e.pendingLanes,M.lanes=t,qM(e,t)}}var zz={readContext:yb,useCallback:hp,useContext:hp,useEffect:hp,useImperativeHandle:hp,useInsertionEffect:hp,useLayoutEffect:hp,useMemo:hp,useReducer:hp,useRef:hp,useState:hp,useDebugValue:hp,useDeferredValue:hp,useTransition:hp,useMutableSource:hp,useSyncExternalStore:hp,useId:hp,unstable_isNewReconciler:!1},cz={readContext:yb,useCallback:function(e,M){return yp().memoizedState=[e,void 0===M?null:M],e},useContext:yb,useEffect:Fp,useImperativeHandle:function(e,M,t){return t=null!=t?t.concat([e]):null,Hp(4194308,4,$p.bind(null,M,e),t)},useLayoutEffect:function(e,M){return Hp(4194308,4,e,M)},useInsertionEffect:function(e,M){return Hp(4,2,e,M)},useMemo:function(e,M){var t=yp();return M=void 0===M?null:M,e=e(),t.memoizedState=[e,M],e},useReducer:function(e,M,t){var o=yp();return M=void 0!==t?t(M):M,o.memoizedState=o.baseState=M,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:M},o.queue=e,e=e.dispatch=tz.bind(null,up,e),[o.memoizedState,e]},useRef:function(e){return e={current:e},yp().memoizedState=e},useState:xp,useDebugValue:Jp,useDeferredValue:function(e){return yp().memoizedState=e},useTransition:function(){var e=xp(!1),M=e[0];return e=ez.bind(null,e[1]),yp().memoizedState=e,[M,e]},useMutableSource:function(){},useSyncExternalStore:function(e,M,t){var o=up,n=yp();if(pb){if(void 0===t)throw Error(b(407));t=t()}else{if(t=M(),null===Tc)throw Error(b(349));0!=(30&lp)||Sp(o,M,t)}n.memoizedState=t;var p={value:t,getSnapshot:M};return n.queue=p,Fp(Xp.bind(null,o,p,e),[e]),o.flags|=2048,Cp(9,Ep.bind(null,o,p,t,M),void 0,null),t},useId:function(){var e=yp(),M=Tc.identifierPrefix;if(pb){var t=Zn;M=":"+M+"R"+(t=(Qn&~(1<<32-pM(Qn)-1)).toString(32)+t),0<(t=Wp++)&&(M+="H"+t.toString(32)),M+=":"}else M=":"+M+"r"+(t=_p++).toString(32)+":";return e.memoizedState=M},unstable_isNewReconciler:!1},az={readContext:yb,useCallback:Kp,useContext:yb,useEffect:Ip,useImperativeHandle:Gp,useInsertionEffect:Up,useLayoutEffect:Vp,useMemo:Qp,useReducer:kp,useRef:Pp,useState:function(){return kp(Np)},useDebugValue:Jp,useDeferredValue:function(e){return Zp(vp(),Ap.memoizedState,e)},useTransition:function(){return[kp(Np)[0],vp().memoizedState]},useMutableSource:Bp,useSyncExternalStore:wp,useId:Mz,unstable_isNewReconciler:!1},rz={readContext:yb,useCallback:Kp,useContext:yb,useEffect:Ip,useImperativeHandle:Gp,useInsertionEffect:Up,useLayoutEffect:Vp,useMemo:Qp,useReducer:Tp,useRef:Pp,useState:function(){return Tp(Np)},useDebugValue:Jp,useDeferredValue:function(e){var M=vp();return null===Ap?M.memoizedState=e:Zp(M,Ap.memoizedState,e)},useTransition:function(){return[Tp(Np)[0],vp().memoizedState]},useMutableSource:Bp,useSyncExternalStore:wp,useId:Mz,unstable_isNewReconciler:!1};function Oz(e,M){try{var t="",o=M;do{t+=P(o),o=o.return}while(o);var n=t}catch(e){n="\nError generating stack: "+e.message+"\n"+e.stack}return{value:e,source:M,stack:n,digest:null}}function iz(e,M,t){return{value:e,source:null,stack:null!=t?t:null,digest:null!=M?M:null}}function sz(e,M){try{console.error(M.value)}catch(e){setTimeout((function(){throw e}))}}var dz="function"==typeof WeakMap?WeakMap:Map;function lz(e,M,t){(t=Eb(-1,t)).tag=3,t.payload={element:null};var o=M.value;return t.callback=function(){Uc||(Uc=!0,Vc=o),sz(0,M)},t}function uz(e,M,t){(t=Eb(-1,t)).tag=3;var o=e.type.getDerivedStateFromError;if("function"==typeof o){var n=M.value;t.payload=function(){return o(n)},t.callback=function(){sz(0,M)}}var b=e.stateNode;return null!==b&&"function"==typeof b.componentDidCatch&&(t.callback=function(){sz(0,M),"function"!=typeof o&&(null===$c?$c=new Set([this]):$c.add(this));var e=M.stack;this.componentDidCatch(M.value,{componentStack:null!==e?e:""})}),t}function Az(e,M,t){var o=e.pingCache;if(null===o){o=e.pingCache=new dz;var n=new Set;o.set(M,n)}else void 0===(n=o.get(M))&&(n=new Set,o.set(M,n));n.has(t)||(n.add(t),e=ya.bind(null,e,M,t),M.then(e,e))}function qz(e){do{var M;if((M=13===e.tag)&&(M=null===(M=e.memoizedState)||null!==M.dehydrated),M)return e;e=e.return}while(null!==e);return null}function fz(e,M,t,o,n){return 0==(1&e.mode)?(e===M?e.flags|=65536:(e.flags|=128,t.flags|=131072,t.flags&=-52805,1===t.tag&&(null===t.alternate?t.tag=17:((M=Eb(-1,1)).tag=2,Xb(t,M,1))),t.lanes|=1),e):(e.flags|=65536,e.lanes=n,e)}var mz=m.ReactCurrentOwner,Wz=!1;function _z(e,M,t,o){M.child=null===e?Zb(M,null,t,o):Qb(M,e.child,t,o)}function hz(e,M,t,o,n){t=t.render;var b=M.ref;return gb(M,n),o=Rp(e,M,t,o,b,n),t=gp(),null===e||Wz?(pb&&t&&tb(M),M.flags|=1,_z(e,M,o,n),M.child):(M.updateQueue=e.updateQueue,M.flags&=-2053,e.lanes&=~n,Uz(e,M,n))}function Lz(e,M,t,o,n){if(null===e){var b=t.type;return"function"!=typeof b||Sa(b)||void 0!==b.defaultProps||null!==t.compare||void 0!==t.defaultProps?((e=Xa(t.type,null,o,M,M.mode,n)).ref=M.ref,e.return=M,M.child=e):(M.tag=15,M.type=b,Rz(e,M,b,o,n))}if(b=e.child,0==(e.lanes&n)){var p=b.memoizedProps;if((t=null!==(t=t.compare)?t:zo)(p,o)&&e.ref===M.ref)return Uz(e,M,n)}return M.flags|=1,(e=Ea(b,o)).ref=M.ref,e.return=M,M.child=e}function Rz(e,M,t,o,n){if(null!==e){var b=e.memoizedProps;if(zo(b,o)&&e.ref===M.ref){if(Wz=!1,M.pendingProps=o=b,0==(e.lanes&n))return M.lanes=e.lanes,Uz(e,M,n);0!=(131072&e.flags)&&(Wz=!0)}}return vz(e,M,t,o,n)}function gz(e,M,t){var o=M.pendingProps,n=o.children,b=null!==e?e.memoizedState:null;if("hidden"===o.mode)if(0==(1&M.mode))M.memoizedState={baseLanes:0,cachePool:null,transitions:null},vn(Ec,Sc),Sc|=t;else{if(0==(1073741824&t))return e=null!==b?b.baseLanes|t:t,M.lanes=M.childLanes=1073741824,M.memoizedState={baseLanes:e,cachePool:null,transitions:null},M.updateQueue=null,vn(Ec,Sc),Sc|=e,null;M.memoizedState={baseLanes:0,cachePool:null,transitions:null},o=null!==b?b.baseLanes:t,vn(Ec,Sc),Sc|=o}else null!==b?(o=b.baseLanes|t,M.memoizedState=null):o=t,vn(Ec,Sc),Sc|=o;return _z(e,M,n,t),M.child}function yz(e,M){var t=M.ref;(null===e&&null!==t||null!==e&&e.ref!==t)&&(M.flags|=512,M.flags|=2097152)}function vz(e,M,t,o,n){var b=Sn(t)?Bn:kn.current;return b=wn(M,b),gb(M,n),t=Rp(e,M,t,o,b,n),o=gp(),null===e||Wz?(pb&&o&&tb(M),M.flags|=1,_z(e,M,t,n),M.child):(M.updateQueue=e.updateQueue,M.flags&=-2053,e.lanes&=~n,Uz(e,M,n))}function Nz(e,M,t,o,n){if(Sn(t)){var b=!0;Dn(M)}else b=!1;if(gb(M,n),null===M.stateNode)Iz(e,M),Ib(M,t,o),Vb(M,t,o,n),o=!0;else if(null===e){var p=M.stateNode,z=M.memoizedProps;p.props=z;var c=p.context,a=t.contextType;a="object"==typeof a&&null!==a?yb(a):wn(M,a=Sn(t)?Bn:kn.current);var r=t.getDerivedStateFromProps,O="function"==typeof r||"function"==typeof p.getSnapshotBeforeUpdate;O||"function"!=typeof p.UNSAFE_componentWillReceiveProps&&"function"!=typeof p.componentWillReceiveProps||(z!==o||c!==a)&&Ub(M,p,o,a),Bb=!1;var i=M.memoizedState;p.state=i,xb(M,o,p,n),c=M.memoizedState,z!==o||i!==c||Tn.current||Bb?("function"==typeof r&&(Hb(M,t,r,o),c=M.memoizedState),(z=Bb||Fb(M,t,z,o,i,c,a))?(O||"function"!=typeof p.UNSAFE_componentWillMount&&"function"!=typeof p.componentWillMount||("function"==typeof p.componentWillMount&&p.componentWillMount(),"function"==typeof p.UNSAFE_componentWillMount&&p.UNSAFE_componentWillMount()),"function"==typeof p.componentDidMount&&(M.flags|=4194308)):("function"==typeof p.componentDidMount&&(M.flags|=4194308),M.memoizedProps=o,M.memoizedState=c),p.props=o,p.state=c,p.context=a,o=z):("function"==typeof p.componentDidMount&&(M.flags|=4194308),o=!1)}else{p=M.stateNode,Sb(e,M),z=M.memoizedProps,a=M.type===M.elementType?z:qb(M.type,z),p.props=a,O=M.pendingProps,i=p.context,c="object"==typeof(c=t.contextType)&&null!==c?yb(c):wn(M,c=Sn(t)?Bn:kn.current);var s=t.getDerivedStateFromProps;(r="function"==typeof s||"function"==typeof p.getSnapshotBeforeUpdate)||"function"!=typeof p.UNSAFE_componentWillReceiveProps&&"function"!=typeof p.componentWillReceiveProps||(z!==O||i!==c)&&Ub(M,p,o,c),Bb=!1,i=M.memoizedState,p.state=i,xb(M,o,p,n);var d=M.memoizedState;z!==O||i!==d||Tn.current||Bb?("function"==typeof s&&(Hb(M,t,s,o),d=M.memoizedState),(a=Bb||Fb(M,t,a,o,i,d,c)||!1)?(r||"function"!=typeof p.UNSAFE_componentWillUpdate&&"function"!=typeof p.componentWillUpdate||("function"==typeof p.componentWillUpdate&&p.componentWillUpdate(o,d,c),"function"==typeof p.UNSAFE_componentWillUpdate&&p.UNSAFE_componentWillUpdate(o,d,c)),"function"==typeof p.componentDidUpdate&&(M.flags|=4),"function"==typeof p.getSnapshotBeforeUpdate&&(M.flags|=1024)):("function"!=typeof p.componentDidUpdate||z===e.memoizedProps&&i===e.memoizedState||(M.flags|=4),"function"!=typeof p.getSnapshotBeforeUpdate||z===e.memoizedProps&&i===e.memoizedState||(M.flags|=1024),M.memoizedProps=o,M.memoizedState=d),p.props=o,p.state=d,p.context=c,o=a):("function"!=typeof p.componentDidUpdate||z===e.memoizedProps&&i===e.memoizedState||(M.flags|=4),"function"!=typeof p.getSnapshotBeforeUpdate||z===e.memoizedProps&&i===e.memoizedState||(M.flags|=1024),o=!1)}return kz(e,M,t,o,b,n)}function kz(e,M,t,o,n,b){yz(e,M);var p=0!=(128&M.flags);if(!o&&!p)return n&&xn(M,t,!1),Uz(e,M,b);o=M.stateNode,mz.current=M;var z=p&&"function"!=typeof t.getDerivedStateFromError?null:o.render();return M.flags|=1,null!==e&&p?(M.child=Qb(M,e.child,null,b),M.child=Qb(M,null,z,b)):_z(e,M,z,b),M.memoizedState=o.state,n&&xn(M,t,!0),M.child}function Tz(e){var M=e.stateNode;M.pendingContext?Xn(0,M.pendingContext,M.pendingContext!==M.context):M.context&&Xn(0,M.context,!1),bp(e,M.containerInfo)}function Bz(e,M,t,o,n){return lb(),ub(n),M.flags|=256,_z(e,M,t,o),M.child}var wz,Sz,Ez,Xz,Yz={dehydrated:null,treeContext:null,retryLane:0};function Dz(e){return{baseLanes:e,cachePool:null,transitions:null}}function xz(e,M,t){var o,n=M.pendingProps,p=ap.current,z=!1,c=0!=(128&M.flags);if((o=c)||(o=(null===e||null!==e.memoizedState)&&0!=(2&p)),o?(z=!0,M.flags&=-129):null!==e&&null===e.memoizedState||(p|=1),vn(ap,1&p),null===e)return Ob(M),null!==(e=M.memoizedState)&&null!==(e=e.dehydrated)?(0==(1&M.mode)?M.lanes=1:"$!"===e.data?M.lanes=8:M.lanes=1073741824,null):(c=n.children,e=n.fallback,z?(n=M.mode,z=M.child,c={mode:"hidden",children:c},0==(1&n)&&null!==z?(z.childLanes=0,z.pendingProps=c):z=Da(c,n,0,null),e=Ya(e,n,t,null),z.return=M,e.return=M,z.sibling=e,M.child=z,M.child.memoizedState=Dz(t),M.memoizedState=Yz,e):Cz(M,c));if(null!==(p=e.memoizedState)&&null!==(o=p.dehydrated))return function(e,M,t,o,n,p,z){if(t)return 256&M.flags?(M.flags&=-257,Pz(e,M,z,o=iz(Error(b(422))))):null!==M.memoizedState?(M.child=e.child,M.flags|=128,null):(p=o.fallback,n=M.mode,o=Da({mode:"visible",children:o.children},n,0,null),(p=Ya(p,n,z,null)).flags|=2,o.return=M,p.return=M,o.sibling=p,M.child=o,0!=(1&M.mode)&&Qb(M,e.child,null,z),M.child.memoizedState=Dz(z),M.memoizedState=Yz,p);if(0==(1&M.mode))return Pz(e,M,z,null);if("$!"===n.data){if(o=n.nextSibling&&n.nextSibling.dataset)var c=o.dgst;return o=c,Pz(e,M,z,o=iz(p=Error(b(419)),o,void 0))}if(c=0!=(z&e.childLanes),Wz||c){if(null!==(o=Tc)){switch(z&-z){case 4:n=2;break;case 16:n=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:n=32;break;case 536870912:n=268435456;break;default:n=0}0!==(n=0!=(n&(o.suspendedLanes|z))?0:n)&&n!==p.retryLane&&(p.retryLane=n,Tb(e,n),na(o,e,n,-1))}return Aa(),Pz(e,M,z,o=iz(Error(b(421))))}return"$?"===n.data?(M.flags|=128,M.child=e.child,M=Na.bind(null,e),n._reactRetry=M,null):(e=p.treeContext,bb=an(n.nextSibling),nb=M,pb=!0,zb=null,null!==e&&(Gn[Jn++]=Qn,Gn[Jn++]=Zn,Gn[Jn++]=Kn,Qn=e.id,Zn=e.overflow,Kn=M),(M=Cz(M,o.children)).flags|=4096,M)}(e,M,c,n,o,p,t);if(z){z=n.fallback,c=M.mode,o=(p=e.child).sibling;var a={mode:"hidden",children:n.children};return 0==(1&c)&&M.child!==p?((n=M.child).childLanes=0,n.pendingProps=a,M.deletions=null):(n=Ea(p,a)).subtreeFlags=14680064&p.subtreeFlags,null!==o?z=Ea(o,z):(z=Ya(z,c,t,null)).flags|=2,z.return=M,n.return=M,n.sibling=z,M.child=n,n=z,z=M.child,c=null===(c=e.child.memoizedState)?Dz(t):{baseLanes:c.baseLanes|t,cachePool:null,transitions:c.transitions},z.memoizedState=c,z.childLanes=e.childLanes&~t,M.memoizedState=Yz,n}return e=(z=e.child).sibling,n=Ea(z,{mode:"visible",children:n.children}),0==(1&M.mode)&&(n.lanes=t),n.return=M,n.sibling=null,null!==e&&(null===(t=M.deletions)?(M.deletions=[e],M.flags|=16):t.push(e)),M.child=n,M.memoizedState=null,n}function Cz(e,M){return(M=Da({mode:"visible",children:M},e.mode,0,null)).return=e,e.child=M}function Pz(e,M,t,o){return null!==o&&ub(o),Qb(M,e.child,null,t),(e=Cz(M,M.pendingProps.children)).flags|=2,M.memoizedState=null,e}function Hz(e,M,t){e.lanes|=M;var o=e.alternate;null!==o&&(o.lanes|=M),Rb(e.return,M,t)}function jz(e,M,t,o,n){var b=e.memoizedState;null===b?e.memoizedState={isBackwards:M,rendering:null,renderingStartTime:0,last:o,tail:t,tailMode:n}:(b.isBackwards=M,b.rendering=null,b.renderingStartTime=0,b.last=o,b.tail=t,b.tailMode=n)}function Fz(e,M,t){var o=M.pendingProps,n=o.revealOrder,b=o.tail;if(_z(e,M,o.children,t),0!=(2&(o=ap.current)))o=1&o|2,M.flags|=128;else{if(null!==e&&0!=(128&e.flags))e:for(e=M.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Hz(e,t,M);else if(19===e.tag)Hz(e,t,M);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===M)break e;for(;null===e.sibling;){if(null===e.return||e.return===M)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}o&=1}if(vn(ap,o),0==(1&M.mode))M.memoizedState=null;else switch(n){case"forwards":for(t=M.child,n=null;null!==t;)null!==(e=t.alternate)&&null===rp(e)&&(n=t),t=t.sibling;null===(t=n)?(n=M.child,M.child=null):(n=t.sibling,t.sibling=null),jz(M,!1,n,t,b);break;case"backwards":for(t=null,n=M.child,M.child=null;null!==n;){if(null!==(e=n.alternate)&&null===rp(e)){M.child=n;break}e=n.sibling,n.sibling=t,t=n,n=e}jz(M,!0,t,null,b);break;case"together":jz(M,!1,null,null,void 0);break;default:M.memoizedState=null}return M.child}function Iz(e,M){0==(1&M.mode)&&null!==e&&(e.alternate=null,M.alternate=null,M.flags|=2)}function Uz(e,M,t){if(null!==e&&(M.dependencies=e.dependencies),Dc|=M.lanes,0==(t&M.childLanes))return null;if(null!==e&&M.child!==e.child)throw Error(b(153));if(null!==M.child){for(t=Ea(e=M.child,e.pendingProps),M.child=t,t.return=M;null!==e.sibling;)e=e.sibling,(t=t.sibling=Ea(e,e.pendingProps)).return=M;t.sibling=null}return M.child}function Vz(e,M){if(!pb)switch(e.tailMode){case"hidden":M=e.tail;for(var t=null;null!==M;)null!==M.alternate&&(t=M),M=M.sibling;null===t?e.tail=null:t.sibling=null;break;case"collapsed":t=e.tail;for(var o=null;null!==t;)null!==t.alternate&&(o=t),t=t.sibling;null===o?M||null===e.tail?e.tail=null:e.tail.sibling=null:o.sibling=null}}function $z(e){var M=null!==e.alternate&&e.alternate.child===e.child,t=0,o=0;if(M)for(var n=e.child;null!==n;)t|=n.lanes|n.childLanes,o|=14680064&n.subtreeFlags,o|=14680064&n.flags,n.return=e,n=n.sibling;else for(n=e.child;null!==n;)t|=n.lanes|n.childLanes,o|=n.subtreeFlags,o|=n.flags,n.return=e,n=n.sibling;return e.subtreeFlags|=o,e.childLanes=t,M}function Gz(e,M,t){var o=M.pendingProps;switch(ob(M),M.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return $z(M),null;case 1:case 17:return Sn(M.type)&&En(),$z(M),null;case 3:return o=M.stateNode,pp(),yn(Tn),yn(kn),ip(),o.pendingContext&&(o.context=o.pendingContext,o.pendingContext=null),null!==e&&null!==e.child||(sb(M)?M.flags|=4:null===e||e.memoizedState.isDehydrated&&0==(256&M.flags)||(M.flags|=1024,null!==zb&&(ca(zb),zb=null))),Sz(e,M),$z(M),null;case 5:cp(M);var n=np(op.current);if(t=M.type,null!==e&&null!=M.stateNode)Ez(e,M,t,o,n),e.ref!==M.ref&&(M.flags|=512,M.flags|=2097152);else{if(!o){if(null===M.stateNode)throw Error(b(166));return $z(M),null}if(e=np(Mp.current),sb(M)){o=M.stateNode,t=M.type;var p=M.memoizedProps;switch(o[sn]=M,o[dn]=p,e=0!=(1&M.mode),t){case"dialog":xo("cancel",o),xo("close",o);break;case"iframe":case"object":case"embed":xo("load",o);break;case"video":case"audio":for(n=0;n<Eo.length;n++)xo(Eo[n],o);break;case"source":xo("error",o);break;case"img":case"image":case"link":xo("error",o),xo("load",o);break;case"details":xo("toggle",o);break;case"input":J(o,p),xo("invalid",o);break;case"select":o._wrapperState={wasMultiple:!!p.multiple},xo("invalid",o);break;case"textarea":ne(o,p),xo("invalid",o)}for(var c in qe(t,p),n=null,p)if(p.hasOwnProperty(c)){var a=p[c];"children"===c?"string"==typeof a?o.textContent!==a&&(!0!==p.suppressHydrationWarning&&Qo(o.textContent,a,e),n=["children",a]):"number"==typeof a&&o.textContent!==""+a&&(!0!==p.suppressHydrationWarning&&Qo(o.textContent,a,e),n=["children",""+a]):z.hasOwnProperty(c)&&null!=a&&"onScroll"===c&&xo("scroll",o)}switch(t){case"input":U(o),Z(o,p,!0);break;case"textarea":U(o),pe(o);break;case"select":case"option":break;default:"function"==typeof p.onClick&&(o.onclick=Zo)}o=n,M.updateQueue=o,null!==o&&(M.flags|=4)}else{c=9===n.nodeType?n:n.ownerDocument,"http://www.w3.org/1999/xhtml"===e&&(e=ze(t)),"http://www.w3.org/1999/xhtml"===e?"script"===t?((e=c.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof o.is?e=c.createElement(t,{is:o.is}):(e=c.createElement(t),"select"===t&&(c=e,o.multiple?c.multiple=!0:o.size&&(c.size=o.size))):e=c.createElementNS(e,t),e[sn]=M,e[dn]=o,wz(e,M,!1,!1),M.stateNode=e;e:{switch(c=fe(t,o),t){case"dialog":xo("cancel",e),xo("close",e),n=o;break;case"iframe":case"object":case"embed":xo("load",e),n=o;break;case"video":case"audio":for(n=0;n<Eo.length;n++)xo(Eo[n],e);n=o;break;case"source":xo("error",e),n=o;break;case"img":case"image":case"link":xo("error",e),xo("load",e),n=o;break;case"details":xo("toggle",e),n=o;break;case"input":J(e,o),n=G(e,o),xo("invalid",e);break;case"option":default:n=o;break;case"select":e._wrapperState={wasMultiple:!!o.multiple},n=Y({},o,{value:void 0}),xo("invalid",e);break;case"textarea":ne(e,o),n=oe(e,o),xo("invalid",e)}for(p in qe(t,n),a=n)if(a.hasOwnProperty(p)){var r=a[p];"style"===p?ue(e,r):"dangerouslySetInnerHTML"===p?null!=(r=r?r.__html:void 0)&&Oe(e,r):"children"===p?"string"==typeof r?("textarea"!==t||""!==r)&&ie(e,r):"number"==typeof r&&ie(e,""+r):"suppressContentEditableWarning"!==p&&"suppressHydrationWarning"!==p&&"autoFocus"!==p&&(z.hasOwnProperty(p)?null!=r&&"onScroll"===p&&xo("scroll",e):null!=r&&f(e,p,r,c))}switch(t){case"input":U(e),Z(e,o,!1);break;case"textarea":U(e),pe(e);break;case"option":null!=o.value&&e.setAttribute("value",""+F(o.value));break;case"select":e.multiple=!!o.multiple,null!=(p=o.value)?te(e,!!o.multiple,p,!1):null!=o.defaultValue&&te(e,!!o.multiple,o.defaultValue,!0);break;default:"function"==typeof n.onClick&&(e.onclick=Zo)}switch(t){case"button":case"input":case"select":case"textarea":o=!!o.autoFocus;break e;case"img":o=!0;break e;default:o=!1}}o&&(M.flags|=4)}null!==M.ref&&(M.flags|=512,M.flags|=2097152)}return $z(M),null;case 6:if(e&&null!=M.stateNode)Xz(e,M,e.memoizedProps,o);else{if("string"!=typeof o&&null===M.stateNode)throw Error(b(166));if(t=np(op.current),np(Mp.current),sb(M)){if(o=M.stateNode,t=M.memoizedProps,o[sn]=M,(p=o.nodeValue!==t)&&null!==(e=nb))switch(e.tag){case 3:Qo(o.nodeValue,t,0!=(1&e.mode));break;case 5:!0!==e.memoizedProps.suppressHydrationWarning&&Qo(o.nodeValue,t,0!=(1&e.mode))}p&&(M.flags|=4)}else(o=(9===t.nodeType?t:t.ownerDocument).createTextNode(o))[sn]=M,M.stateNode=o}return $z(M),null;case 13:if(yn(ap),o=M.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(pb&&null!==bb&&0!=(1&M.mode)&&0==(128&M.flags))db(),lb(),M.flags|=98560,p=!1;else if(p=sb(M),null!==o&&null!==o.dehydrated){if(null===e){if(!p)throw Error(b(318));if(!(p=null!==(p=M.memoizedState)?p.dehydrated:null))throw Error(b(317));p[sn]=M}else lb(),0==(128&M.flags)&&(M.memoizedState=null),M.flags|=4;$z(M),p=!1}else null!==zb&&(ca(zb),zb=null),p=!0;if(!p)return 65536&M.flags?M:null}return 0!=(128&M.flags)?(M.lanes=t,M):((o=null!==o)!=(null!==e&&null!==e.memoizedState)&&o&&(M.child.flags|=8192,0!=(1&M.mode)&&(null===e||0!=(1&ap.current)?0===Xc&&(Xc=3):Aa())),null!==M.updateQueue&&(M.flags|=4),$z(M),null);case 4:return pp(),Sz(e,M),null===e&&Ho(M.stateNode.containerInfo),$z(M),null;case 10:return Lb(M.type._context),$z(M),null;case 19:if(yn(ap),null===(p=M.memoizedState))return $z(M),null;if(o=0!=(128&M.flags),null===(c=p.rendering))if(o)Vz(p,!1);else{if(0!==Xc||null!==e&&0!=(128&e.flags))for(e=M.child;null!==e;){if(null!==(c=rp(e))){for(M.flags|=128,Vz(p,!1),null!==(o=c.updateQueue)&&(M.updateQueue=o,M.flags|=4),M.subtreeFlags=0,o=t,t=M.child;null!==t;)e=o,(p=t).flags&=14680066,null===(c=p.alternate)?(p.childLanes=0,p.lanes=e,p.child=null,p.subtreeFlags=0,p.memoizedProps=null,p.memoizedState=null,p.updateQueue=null,p.dependencies=null,p.stateNode=null):(p.childLanes=c.childLanes,p.lanes=c.lanes,p.child=c.child,p.subtreeFlags=0,p.deletions=null,p.memoizedProps=c.memoizedProps,p.memoizedState=c.memoizedState,p.updateQueue=c.updateQueue,p.type=c.type,e=c.dependencies,p.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),t=t.sibling;return vn(ap,1&ap.current|2),M.child}e=e.sibling}null!==p.tail&&Ke()>Fc&&(M.flags|=128,o=!0,Vz(p,!1),M.lanes=4194304)}else{if(!o)if(null!==(e=rp(c))){if(M.flags|=128,o=!0,null!==(t=e.updateQueue)&&(M.updateQueue=t,M.flags|=4),Vz(p,!0),null===p.tail&&"hidden"===p.tailMode&&!c.alternate&&!pb)return $z(M),null}else 2*Ke()-p.renderingStartTime>Fc&&1073741824!==t&&(M.flags|=128,o=!0,Vz(p,!1),M.lanes=4194304);p.isBackwards?(c.sibling=M.child,M.child=c):(null!==(t=p.last)?t.sibling=c:M.child=c,p.last=c)}return null!==p.tail?(M=p.tail,p.rendering=M,p.tail=M.sibling,p.renderingStartTime=Ke(),M.sibling=null,t=ap.current,vn(ap,o?1&t|2:1&t),M):($z(M),null);case 22:case 23:return sa(),o=null!==M.memoizedState,null!==e&&null!==e.memoizedState!==o&&(M.flags|=8192),o&&0!=(1&M.mode)?0!=(1073741824&Sc)&&($z(M),6&M.subtreeFlags&&(M.flags|=8192)):$z(M),null;case 24:case 25:return null}throw Error(b(156,M.tag))}function Jz(e,M){switch(ob(M),M.tag){case 1:return Sn(M.type)&&En(),65536&(e=M.flags)?(M.flags=-65537&e|128,M):null;case 3:return pp(),yn(Tn),yn(kn),ip(),0!=(65536&(e=M.flags))&&0==(128&e)?(M.flags=-65537&e|128,M):null;case 5:return cp(M),null;case 13:if(yn(ap),null!==(e=M.memoizedState)&&null!==e.dehydrated){if(null===M.alternate)throw Error(b(340));lb()}return 65536&(e=M.flags)?(M.flags=-65537&e|128,M):null;case 19:return yn(ap),null;case 4:return pp(),null;case 10:return Lb(M.type._context),null;case 22:case 23:return sa(),null;default:return null}}wz=function(e,M){for(var t=M.child;null!==t;){if(5===t.tag||6===t.tag)e.appendChild(t.stateNode);else if(4!==t.tag&&null!==t.child){t.child.return=t,t=t.child;continue}if(t===M)break;for(;null===t.sibling;){if(null===t.return||t.return===M)return;t=t.return}t.sibling.return=t.return,t=t.sibling}},Sz=function(){},Ez=function(e,M,t,o){var n=e.memoizedProps;if(n!==o){e=M.stateNode,np(Mp.current);var b,p=null;switch(t){case"input":n=G(e,n),o=G(e,o),p=[];break;case"select":n=Y({},n,{value:void 0}),o=Y({},o,{value:void 0}),p=[];break;case"textarea":n=oe(e,n),o=oe(e,o),p=[];break;default:"function"!=typeof n.onClick&&"function"==typeof o.onClick&&(e.onclick=Zo)}for(r in qe(t,o),t=null,n)if(!o.hasOwnProperty(r)&&n.hasOwnProperty(r)&&null!=n[r])if("style"===r){var c=n[r];for(b in c)c.hasOwnProperty(b)&&(t||(t={}),t[b]="")}else"dangerouslySetInnerHTML"!==r&&"children"!==r&&"suppressContentEditableWarning"!==r&&"suppressHydrationWarning"!==r&&"autoFocus"!==r&&(z.hasOwnProperty(r)?p||(p=[]):(p=p||[]).push(r,null));for(r in o){var a=o[r];if(c=null!=n?n[r]:void 0,o.hasOwnProperty(r)&&a!==c&&(null!=a||null!=c))if("style"===r)if(c){for(b in c)!c.hasOwnProperty(b)||a&&a.hasOwnProperty(b)||(t||(t={}),t[b]="");for(b in a)a.hasOwnProperty(b)&&c[b]!==a[b]&&(t||(t={}),t[b]=a[b])}else t||(p||(p=[]),p.push(r,t)),t=a;else"dangerouslySetInnerHTML"===r?(a=a?a.__html:void 0,c=c?c.__html:void 0,null!=a&&c!==a&&(p=p||[]).push(r,a)):"children"===r?"string"!=typeof a&&"number"!=typeof a||(p=p||[]).push(r,""+a):"suppressContentEditableWarning"!==r&&"suppressHydrationWarning"!==r&&(z.hasOwnProperty(r)?(null!=a&&"onScroll"===r&&xo("scroll",e),p||c===a||(p=[])):(p=p||[]).push(r,a))}t&&(p=p||[]).push("style",t);var r=p;(M.updateQueue=r)&&(M.flags|=4)}},Xz=function(e,M,t,o){t!==o&&(M.flags|=4)};var Kz=!1,Qz=!1,Zz="function"==typeof WeakSet?WeakSet:Set,ec=null;function Mc(e,M){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(t){ga(e,M,t)}else t.current=null}function tc(e,M,t){try{t()}catch(t){ga(e,M,t)}}var oc=!1;function nc(e,M,t){var o=M.updateQueue;if(null!==(o=null!==o?o.lastEffect:null)){var n=o=o.next;do{if((n.tag&e)===e){var b=n.destroy;n.destroy=void 0,void 0!==b&&tc(M,t,b)}n=n.next}while(n!==o)}}function bc(e,M){if(null!==(M=null!==(M=M.updateQueue)?M.lastEffect:null)){var t=M=M.next;do{if((t.tag&e)===e){var o=t.create;t.destroy=o()}t=t.next}while(t!==M)}}function pc(e){var M=e.ref;if(null!==M){var t=e.stateNode;e.tag,e=t,"function"==typeof M?M(e):M.current=e}}function zc(e){var M=e.alternate;null!==M&&(e.alternate=null,zc(M)),e.child=null,e.deletions=null,e.sibling=null,5===e.tag&&null!==(M=e.stateNode)&&(delete M[sn],delete M[dn],delete M[un],delete M[An],delete M[qn]),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function cc(e){return 5===e.tag||3===e.tag||4===e.tag}function ac(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||cc(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(2&e.flags)continue e;if(null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function rc(e,M,t){var o=e.tag;if(5===o||6===o)e=e.stateNode,M?8===t.nodeType?t.parentNode.insertBefore(e,M):t.insertBefore(e,M):(8===t.nodeType?(M=t.parentNode).insertBefore(e,t):(M=t).appendChild(e),null!=(t=t._reactRootContainer)||null!==M.onclick||(M.onclick=Zo));else if(4!==o&&null!==(e=e.child))for(rc(e,M,t),e=e.sibling;null!==e;)rc(e,M,t),e=e.sibling}function Oc(e,M,t){var o=e.tag;if(5===o||6===o)e=e.stateNode,M?t.insertBefore(e,M):t.appendChild(e);else if(4!==o&&null!==(e=e.child))for(Oc(e,M,t),e=e.sibling;null!==e;)Oc(e,M,t),e=e.sibling}var ic=null,sc=!1;function dc(e,M,t){for(t=t.child;null!==t;)lc(e,M,t),t=t.sibling}function lc(e,M,t){if(bM&&"function"==typeof bM.onCommitFiberUnmount)try{bM.onCommitFiberUnmount(nM,t)}catch(e){}switch(t.tag){case 5:Qz||Mc(t,M);case 6:var o=ic,n=sc;ic=null,dc(e,M,t),sc=n,null!==(ic=o)&&(sc?(e=ic,t=t.stateNode,8===e.nodeType?e.parentNode.removeChild(t):e.removeChild(t)):ic.removeChild(t.stateNode));break;case 18:null!==ic&&(sc?(e=ic,t=t.stateNode,8===e.nodeType?cn(e.parentNode,t):1===e.nodeType&&cn(e,t),HM(e)):cn(ic,t.stateNode));break;case 4:o=ic,n=sc,ic=t.stateNode.containerInfo,sc=!0,dc(e,M,t),ic=o,sc=n;break;case 0:case 11:case 14:case 15:if(!Qz&&null!==(o=t.updateQueue)&&null!==(o=o.lastEffect)){n=o=o.next;do{var b=n,p=b.destroy;b=b.tag,void 0!==p&&(0!=(2&b)||0!=(4&b))&&tc(t,M,p),n=n.next}while(n!==o)}dc(e,M,t);break;case 1:if(!Qz&&(Mc(t,M),"function"==typeof(o=t.stateNode).componentWillUnmount))try{o.props=t.memoizedProps,o.state=t.memoizedState,o.componentWillUnmount()}catch(e){ga(t,M,e)}dc(e,M,t);break;case 21:dc(e,M,t);break;case 22:1&t.mode?(Qz=(o=Qz)||null!==t.memoizedState,dc(e,M,t),Qz=o):dc(e,M,t);break;default:dc(e,M,t)}}function uc(e){var M=e.updateQueue;if(null!==M){e.updateQueue=null;var t=e.stateNode;null===t&&(t=e.stateNode=new Zz),M.forEach((function(M){var o=ka.bind(null,e,M);t.has(M)||(t.add(M),M.then(o,o))}))}}function Ac(e,M){var t=M.deletions;if(null!==t)for(var o=0;o<t.length;o++){var n=t[o];try{var p=e,z=M,c=z;e:for(;null!==c;){switch(c.tag){case 5:ic=c.stateNode,sc=!1;break e;case 3:case 4:ic=c.stateNode.containerInfo,sc=!0;break e}c=c.return}if(null===ic)throw Error(b(160));lc(p,z,n),ic=null,sc=!1;var a=n.alternate;null!==a&&(a.return=null),n.return=null}catch(e){ga(n,M,e)}}if(12854&M.subtreeFlags)for(M=M.child;null!==M;)qc(M,e),M=M.sibling}function qc(e,M){var t=e.alternate,o=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(Ac(M,e),fc(e),4&o){try{nc(3,e,e.return),bc(3,e)}catch(M){ga(e,e.return,M)}try{nc(5,e,e.return)}catch(M){ga(e,e.return,M)}}break;case 1:Ac(M,e),fc(e),512&o&&null!==t&&Mc(t,t.return);break;case 5:if(Ac(M,e),fc(e),512&o&&null!==t&&Mc(t,t.return),32&e.flags){var n=e.stateNode;try{ie(n,"")}catch(M){ga(e,e.return,M)}}if(4&o&&null!=(n=e.stateNode)){var p=e.memoizedProps,z=null!==t?t.memoizedProps:p,c=e.type,a=e.updateQueue;if(e.updateQueue=null,null!==a)try{"input"===c&&"radio"===p.type&&null!=p.name&&K(n,p),fe(c,z);var r=fe(c,p);for(z=0;z<a.length;z+=2){var O=a[z],i=a[z+1];"style"===O?ue(n,i):"dangerouslySetInnerHTML"===O?Oe(n,i):"children"===O?ie(n,i):f(n,O,i,r)}switch(c){case"input":Q(n,p);break;case"textarea":be(n,p);break;case"select":var s=n._wrapperState.wasMultiple;n._wrapperState.wasMultiple=!!p.multiple;var d=p.value;null!=d?te(n,!!p.multiple,d,!1):s!==!!p.multiple&&(null!=p.defaultValue?te(n,!!p.multiple,p.defaultValue,!0):te(n,!!p.multiple,p.multiple?[]:"",!1))}n[dn]=p}catch(M){ga(e,e.return,M)}}break;case 6:if(Ac(M,e),fc(e),4&o){if(null===e.stateNode)throw Error(b(162));n=e.stateNode,p=e.memoizedProps;try{n.nodeValue=p}catch(M){ga(e,e.return,M)}}break;case 3:if(Ac(M,e),fc(e),4&o&&null!==t&&t.memoizedState.isDehydrated)try{HM(M.containerInfo)}catch(M){ga(e,e.return,M)}break;case 4:default:Ac(M,e),fc(e);break;case 13:Ac(M,e),fc(e),8192&(n=e.child).flags&&(p=null!==n.memoizedState,n.stateNode.isHidden=p,!p||null!==n.alternate&&null!==n.alternate.memoizedState||(jc=Ke())),4&o&&uc(e);break;case 22:if(O=null!==t&&null!==t.memoizedState,1&e.mode?(Qz=(r=Qz)||O,Ac(M,e),Qz=r):Ac(M,e),fc(e),8192&o){if(r=null!==e.memoizedState,(e.stateNode.isHidden=r)&&!O&&0!=(1&e.mode))for(ec=e,O=e.child;null!==O;){for(i=ec=O;null!==ec;){switch(d=(s=ec).child,s.tag){case 0:case 11:case 14:case 15:nc(4,s,s.return);break;case 1:Mc(s,s.return);var l=s.stateNode;if("function"==typeof l.componentWillUnmount){o=s,t=s.return;try{M=o,l.props=M.memoizedProps,l.state=M.memoizedState,l.componentWillUnmount()}catch(e){ga(o,t,e)}}break;case 5:Mc(s,s.return);break;case 22:if(null!==s.memoizedState){hc(i);continue}}null!==d?(d.return=s,ec=d):hc(i)}O=O.sibling}e:for(O=null,i=e;;){if(5===i.tag){if(null===O){O=i;try{n=i.stateNode,r?"function"==typeof(p=n.style).setProperty?p.setProperty("display","none","important"):p.display="none":(c=i.stateNode,z=null!=(a=i.memoizedProps.style)&&a.hasOwnProperty("display")?a.display:null,c.style.display=le("display",z))}catch(M){ga(e,e.return,M)}}}else if(6===i.tag){if(null===O)try{i.stateNode.nodeValue=r?"":i.memoizedProps}catch(M){ga(e,e.return,M)}}else if((22!==i.tag&&23!==i.tag||null===i.memoizedState||i===e)&&null!==i.child){i.child.return=i,i=i.child;continue}if(i===e)break e;for(;null===i.sibling;){if(null===i.return||i.return===e)break e;O===i&&(O=null),i=i.return}O===i&&(O=null),i.sibling.return=i.return,i=i.sibling}}break;case 19:Ac(M,e),fc(e),4&o&&uc(e);case 21:}}function fc(e){var M=e.flags;if(2&M){try{e:{for(var t=e.return;null!==t;){if(cc(t)){var o=t;break e}t=t.return}throw Error(b(160))}switch(o.tag){case 5:var n=o.stateNode;32&o.flags&&(ie(n,""),o.flags&=-33),Oc(e,ac(e),n);break;case 3:case 4:var p=o.stateNode.containerInfo;rc(e,ac(e),p);break;default:throw Error(b(161))}}catch(M){ga(e,e.return,M)}e.flags&=-3}4096&M&&(e.flags&=-4097)}function mc(e,M,t){ec=e,Wc(e,M,t)}function Wc(e,M,t){for(var o=0!=(1&e.mode);null!==ec;){var n=ec,b=n.child;if(22===n.tag&&o){var p=null!==n.memoizedState||Kz;if(!p){var z=n.alternate,c=null!==z&&null!==z.memoizedState||Qz;z=Kz;var a=Qz;if(Kz=p,(Qz=c)&&!a)for(ec=n;null!==ec;)c=(p=ec).child,22===p.tag&&null!==p.memoizedState?Lc(n):null!==c?(c.return=p,ec=c):Lc(n);for(;null!==b;)ec=b,Wc(b,M,t),b=b.sibling;ec=n,Kz=z,Qz=a}_c(e)}else 0!=(8772&n.subtreeFlags)&&null!==b?(b.return=n,ec=b):_c(e)}}function _c(e){for(;null!==ec;){var M=ec;if(0!=(8772&M.flags)){var t=M.alternate;try{if(0!=(8772&M.flags))switch(M.tag){case 0:case 11:case 15:Qz||bc(5,M);break;case 1:var o=M.stateNode;if(4&M.flags&&!Qz)if(null===t)o.componentDidMount();else{var n=M.elementType===M.type?t.memoizedProps:qb(M.type,t.memoizedProps);o.componentDidUpdate(n,t.memoizedState,o.__reactInternalSnapshotBeforeUpdate)}var p=M.updateQueue;null!==p&&Cb(M,p,o);break;case 3:var z=M.updateQueue;if(null!==z){if(t=null,null!==M.child)switch(M.child.tag){case 5:case 1:t=M.child.stateNode}Cb(M,z,t)}break;case 5:var c=M.stateNode;if(null===t&&4&M.flags){t=c;var a=M.memoizedProps;switch(M.type){case"button":case"input":case"select":case"textarea":a.autoFocus&&t.focus();break;case"img":a.src&&(t.src=a.src)}}break;case 6:case 4:case 12:case 19:case 17:case 21:case 22:case 23:case 25:break;case 13:if(null===M.memoizedState){var r=M.alternate;if(null!==r){var O=r.memoizedState;if(null!==O){var i=O.dehydrated;null!==i&&HM(i)}}}break;default:throw Error(b(163))}Qz||512&M.flags&&pc(M)}catch(e){ga(M,M.return,e)}}if(M===e){ec=null;break}if(null!==(t=M.sibling)){t.return=M.return,ec=t;break}ec=M.return}}function hc(e){for(;null!==ec;){var M=ec;if(M===e){ec=null;break}var t=M.sibling;if(null!==t){t.return=M.return,ec=t;break}ec=M.return}}function Lc(e){for(;null!==ec;){var M=ec;try{switch(M.tag){case 0:case 11:case 15:var t=M.return;try{bc(4,M)}catch(e){ga(M,t,e)}break;case 1:var o=M.stateNode;if("function"==typeof o.componentDidMount){var n=M.return;try{o.componentDidMount()}catch(e){ga(M,n,e)}}var b=M.return;try{pc(M)}catch(e){ga(M,b,e)}break;case 5:var p=M.return;try{pc(M)}catch(e){ga(M,p,e)}}}catch(e){ga(M,M.return,e)}if(M===e){ec=null;break}var z=M.sibling;if(null!==z){z.return=M.return,ec=z;break}ec=M.return}}var Rc,gc=Math.ceil,yc=m.ReactCurrentDispatcher,vc=m.ReactCurrentOwner,Nc=m.ReactCurrentBatchConfig,kc=0,Tc=null,Bc=null,wc=0,Sc=0,Ec=gn(0),Xc=0,Yc=null,Dc=0,xc=0,Cc=0,Pc=null,Hc=null,jc=0,Fc=1/0,Ic=null,Uc=!1,Vc=null,$c=null,Gc=!1,Jc=null,Kc=0,Qc=0,Zc=null,ea=-1,Ma=0;function ta(){return 0!=(6&kc)?Ke():-1!==ea?ea:ea=Ke()}function oa(e){return 0==(1&e.mode)?1:0!=(2&kc)&&0!==wc?wc&-wc:null!==Ab.transition?(0===Ma&&(Ma=lM()),Ma):0!==(e=fM)?e:e=void 0===(e=window.event)?16:JM(e.type)}function na(e,M,t,o){if(50<Qc)throw Qc=0,Zc=null,Error(b(185));AM(e,t,o),0!=(2&kc)&&e===Tc||(e===Tc&&(0==(2&kc)&&(xc|=t),4===Xc&&aa(e,wc)),ba(e,o),1===t&&0===kc&&0==(1&M.mode)&&(Fc=Ke()+500,Pn&&Fn()))}function ba(e,M){var t=e.callbackNode;!function(e,M){for(var t=e.suspendedLanes,o=e.pingedLanes,n=e.expirationTimes,b=e.pendingLanes;0<b;){var p=31-pM(b),z=1<<p,c=n[p];-1===c?0!=(z&t)&&0==(z&o)||(n[p]=sM(z,M)):c<=M&&(e.expiredLanes|=z),b&=~z}}(e,M);var o=iM(e,e===Tc?wc:0);if(0===o)null!==t&&$e(t),e.callbackNode=null,e.callbackPriority=0;else if(M=o&-o,e.callbackPriority!==M){if(null!=t&&$e(t),1===M)0===e.tag?function(e){Pn=!0,jn(e)}(ra.bind(null,e)):jn(ra.bind(null,e)),pn((function(){0==(6&kc)&&Fn()})),t=null;else{switch(mM(o)){case 1:t=Ze;break;case 4:t=eM;break;case 16:default:t=MM;break;case 536870912:t=oM}t=Ta(t,pa.bind(null,e))}e.callbackPriority=M,e.callbackNode=t}}function pa(e,M){if(ea=-1,Ma=0,0!=(6&kc))throw Error(b(327));var t=e.callbackNode;if(La()&&e.callbackNode!==t)return null;var o=iM(e,e===Tc?wc:0);if(0===o)return null;if(0!=(30&o)||0!=(o&e.expiredLanes)||M)M=qa(e,o);else{M=o;var n=kc;kc|=2;var p=ua();for(Tc===e&&wc===M||(Ic=null,Fc=Ke()+500,da(e,M));;)try{ma();break}catch(M){la(e,M)}hb(),yc.current=p,kc=n,null!==Bc?M=0:(Tc=null,wc=0,M=Xc)}if(0!==M){if(2===M&&0!==(n=dM(e))&&(o=n,M=za(e,n)),1===M)throw t=Yc,da(e,0),aa(e,o),ba(e,Ke()),t;if(6===M)aa(e,o);else{if(n=e.current.alternate,0==(30&o)&&!function(e){for(var M=e;;){if(16384&M.flags){var t=M.updateQueue;if(null!==t&&null!==(t=t.stores))for(var o=0;o<t.length;o++){var n=t[o],b=n.getSnapshot;n=n.value;try{if(!po(b(),n))return!1}catch(e){return!1}}}if(t=M.child,16384&M.subtreeFlags&&null!==t)t.return=M,M=t;else{if(M===e)break;for(;null===M.sibling;){if(null===M.return||M.return===e)return!0;M=M.return}M.sibling.return=M.return,M=M.sibling}}return!0}(n)&&(2===(M=qa(e,o))&&0!==(p=dM(e))&&(o=p,M=za(e,p)),1===M))throw t=Yc,da(e,0),aa(e,o),ba(e,Ke()),t;switch(e.finishedWork=n,e.finishedLanes=o,M){case 0:case 1:throw Error(b(345));case 2:case 5:ha(e,Hc,Ic);break;case 3:if(aa(e,o),(130023424&o)===o&&10<(M=jc+500-Ke())){if(0!==iM(e,0))break;if(((n=e.suspendedLanes)&o)!==o){ta(),e.pingedLanes|=e.suspendedLanes&n;break}e.timeoutHandle=on(ha.bind(null,e,Hc,Ic),M);break}ha(e,Hc,Ic);break;case 4:if(aa(e,o),(4194240&o)===o)break;for(M=e.eventTimes,n=-1;0<o;){var z=31-pM(o);p=1<<z,(z=M[z])>n&&(n=z),o&=~p}if(o=n,10<(o=(120>(o=Ke()-o)?120:480>o?480:1080>o?1080:1920>o?1920:3e3>o?3e3:4320>o?4320:1960*gc(o/1960))-o)){e.timeoutHandle=on(ha.bind(null,e,Hc,Ic),o);break}ha(e,Hc,Ic);break;default:throw Error(b(329))}}}return ba(e,Ke()),e.callbackNode===t?pa.bind(null,e):null}function za(e,M){var t=Pc;return e.current.memoizedState.isDehydrated&&(da(e,M).flags|=256),2!==(e=qa(e,M))&&(M=Hc,Hc=t,null!==M&&ca(M)),e}function ca(e){null===Hc?Hc=e:Hc.push.apply(Hc,e)}function aa(e,M){for(M&=~Cc,M&=~xc,e.suspendedLanes|=M,e.pingedLanes&=~M,e=e.expirationTimes;0<M;){var t=31-pM(M),o=1<<t;e[t]=-1,M&=~o}}function ra(e){if(0!=(6&kc))throw Error(b(327));La();var M=iM(e,0);if(0==(1&M))return ba(e,Ke()),null;var t=qa(e,M);if(0!==e.tag&&2===t){var o=dM(e);0!==o&&(M=o,t=za(e,o))}if(1===t)throw t=Yc,da(e,0),aa(e,M),ba(e,Ke()),t;if(6===t)throw Error(b(345));return e.finishedWork=e.current.alternate,e.finishedLanes=M,ha(e,Hc,Ic),ba(e,Ke()),null}function Oa(e,M){var t=kc;kc|=1;try{return e(M)}finally{0===(kc=t)&&(Fc=Ke()+500,Pn&&Fn())}}function ia(e){null!==Jc&&0===Jc.tag&&0==(6&kc)&&La();var M=kc;kc|=1;var t=Nc.transition,o=fM;try{if(Nc.transition=null,fM=1,e)return e()}finally{fM=o,Nc.transition=t,0==(6&(kc=M))&&Fn()}}function sa(){Sc=Ec.current,yn(Ec)}function da(e,M){e.finishedWork=null,e.finishedLanes=0;var t=e.timeoutHandle;if(-1!==t&&(e.timeoutHandle=-1,nn(t)),null!==Bc)for(t=Bc.return;null!==t;){var o=t;switch(ob(o),o.tag){case 1:null!=(o=o.type.childContextTypes)&&En();break;case 3:pp(),yn(Tn),yn(kn),ip();break;case 5:cp(o);break;case 4:pp();break;case 13:case 19:yn(ap);break;case 10:Lb(o.type._context);break;case 22:case 23:sa()}t=t.return}if(Tc=e,Bc=e=Ea(e.current,null),wc=Sc=M,Xc=0,Yc=null,Cc=xc=Dc=0,Hc=Pc=null,null!==vb){for(M=0;M<vb.length;M++)if(null!==(o=(t=vb[M]).interleaved)){t.interleaved=null;var n=o.next,b=t.pending;if(null!==b){var p=b.next;b.next=n,o.next=p}t.pending=o}vb=null}return e}function la(e,M){for(;;){var t=Bc;try{if(hb(),sp.current=zz,fp){for(var o=up.memoizedState;null!==o;){var n=o.queue;null!==n&&(n.pending=null),o=o.next}fp=!1}if(lp=0,qp=Ap=up=null,mp=!1,Wp=0,vc.current=null,null===t||null===t.return){Xc=1,Yc=M,Bc=null;break}e:{var p=e,z=t.return,c=t,a=M;if(M=wc,c.flags|=32768,null!==a&&"object"==typeof a&&"function"==typeof a.then){var r=a,O=c,i=O.tag;if(0==(1&O.mode)&&(0===i||11===i||15===i)){var s=O.alternate;s?(O.updateQueue=s.updateQueue,O.memoizedState=s.memoizedState,O.lanes=s.lanes):(O.updateQueue=null,O.memoizedState=null)}var d=qz(z);if(null!==d){d.flags&=-257,fz(d,z,c,0,M),1&d.mode&&Az(p,r,M),a=r;var l=(M=d).updateQueue;if(null===l){var u=new Set;u.add(a),M.updateQueue=u}else l.add(a);break e}if(0==(1&M)){Az(p,r,M),Aa();break e}a=Error(b(426))}else if(pb&&1&c.mode){var A=qz(z);if(null!==A){0==(65536&A.flags)&&(A.flags|=256),fz(A,z,c,0,M),ub(Oz(a,c));break e}}p=a=Oz(a,c),4!==Xc&&(Xc=2),null===Pc?Pc=[p]:Pc.push(p),p=z;do{switch(p.tag){case 3:p.flags|=65536,M&=-M,p.lanes|=M,Db(p,lz(0,a,M));break e;case 1:c=a;var q=p.type,f=p.stateNode;if(0==(128&p.flags)&&("function"==typeof q.getDerivedStateFromError||null!==f&&"function"==typeof f.componentDidCatch&&(null===$c||!$c.has(f)))){p.flags|=65536,M&=-M,p.lanes|=M,Db(p,uz(p,c,M));break e}}p=p.return}while(null!==p)}_a(t)}catch(e){M=e,Bc===t&&null!==t&&(Bc=t=t.return);continue}break}}function ua(){var e=yc.current;return yc.current=zz,null===e?zz:e}function Aa(){0!==Xc&&3!==Xc&&2!==Xc||(Xc=4),null===Tc||0==(268435455&Dc)&&0==(268435455&xc)||aa(Tc,wc)}function qa(e,M){var t=kc;kc|=2;var o=ua();for(Tc===e&&wc===M||(Ic=null,da(e,M));;)try{fa();break}catch(M){la(e,M)}if(hb(),kc=t,yc.current=o,null!==Bc)throw Error(b(261));return Tc=null,wc=0,Xc}function fa(){for(;null!==Bc;)Wa(Bc)}function ma(){for(;null!==Bc&&!Ge();)Wa(Bc)}function Wa(e){var M=Rc(e.alternate,e,Sc);e.memoizedProps=e.pendingProps,null===M?_a(e):Bc=M,vc.current=null}function _a(e){var M=e;do{var t=M.alternate;if(e=M.return,0==(32768&M.flags)){if(null!==(t=Gz(t,M,Sc)))return void(Bc=t)}else{if(null!==(t=Jz(t,M)))return t.flags&=32767,void(Bc=t);if(null===e)return Xc=6,void(Bc=null);e.flags|=32768,e.subtreeFlags=0,e.deletions=null}if(null!==(M=M.sibling))return void(Bc=M);Bc=M=e}while(null!==M);0===Xc&&(Xc=5)}function ha(e,M,t){var o=fM,n=Nc.transition;try{Nc.transition=null,fM=1,function(e,M,t,o){do{La()}while(null!==Jc);if(0!=(6&kc))throw Error(b(327));t=e.finishedWork;var n=e.finishedLanes;if(null===t)return null;if(e.finishedWork=null,e.finishedLanes=0,t===e.current)throw Error(b(177));e.callbackNode=null,e.callbackPriority=0;var p=t.lanes|t.childLanes;if(function(e,M){var t=e.pendingLanes&~M;e.pendingLanes=M,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=M,e.mutableReadLanes&=M,e.entangledLanes&=M,M=e.entanglements;var o=e.eventTimes;for(e=e.expirationTimes;0<t;){var n=31-pM(t),b=1<<n;M[n]=0,o[n]=-1,e[n]=-1,t&=~b}}(e,p),e===Tc&&(Bc=Tc=null,wc=0),0==(2064&t.subtreeFlags)&&0==(2064&t.flags)||Gc||(Gc=!0,Ta(MM,(function(){return La(),null}))),p=0!=(15990&t.flags),0!=(15990&t.subtreeFlags)||p){p=Nc.transition,Nc.transition=null;var z=fM;fM=1;var c=kc;kc|=4,vc.current=null,function(e,M){if(en=FM,io(e=Oo())){if("selectionStart"in e)var t={start:e.selectionStart,end:e.selectionEnd};else e:{var o=(t=(t=e.ownerDocument)&&t.defaultView||window).getSelection&&t.getSelection();if(o&&0!==o.rangeCount){t=o.anchorNode;var n=o.anchorOffset,p=o.focusNode;o=o.focusOffset;try{t.nodeType,p.nodeType}catch(e){t=null;break e}var z=0,c=-1,a=-1,r=0,O=0,i=e,s=null;M:for(;;){for(var d;i!==t||0!==n&&3!==i.nodeType||(c=z+n),i!==p||0!==o&&3!==i.nodeType||(a=z+o),3===i.nodeType&&(z+=i.nodeValue.length),null!==(d=i.firstChild);)s=i,i=d;for(;;){if(i===e)break M;if(s===t&&++r===n&&(c=z),s===p&&++O===o&&(a=z),null!==(d=i.nextSibling))break;s=(i=s).parentNode}i=d}t=-1===c||-1===a?null:{start:c,end:a}}else t=null}t=t||{start:0,end:0}}else t=null;for(Mn={focusedElem:e,selectionRange:t},FM=!1,ec=M;null!==ec;)if(e=(M=ec).child,0!=(1028&M.subtreeFlags)&&null!==e)e.return=M,ec=e;else for(;null!==ec;){M=ec;try{var l=M.alternate;if(0!=(1024&M.flags))switch(M.tag){case 0:case 11:case 15:case 5:case 6:case 4:case 17:break;case 1:if(null!==l){var u=l.memoizedProps,A=l.memoizedState,q=M.stateNode,f=q.getSnapshotBeforeUpdate(M.elementType===M.type?u:qb(M.type,u),A);q.__reactInternalSnapshotBeforeUpdate=f}break;case 3:var m=M.stateNode.containerInfo;1===m.nodeType?m.textContent="":9===m.nodeType&&m.documentElement&&m.removeChild(m.documentElement);break;default:throw Error(b(163))}}catch(e){ga(M,M.return,e)}if(null!==(e=M.sibling)){e.return=M.return,ec=e;break}ec=M.return}l=oc,oc=!1}(e,t),qc(t,e),so(Mn),FM=!!en,Mn=en=null,e.current=t,mc(t,e,n),Je(),kc=c,fM=z,Nc.transition=p}else e.current=t;if(Gc&&(Gc=!1,Jc=e,Kc=n),0===(p=e.pendingLanes)&&($c=null),function(e){if(bM&&"function"==typeof bM.onCommitFiberRoot)try{bM.onCommitFiberRoot(nM,e,void 0,128==(128&e.current.flags))}catch(e){}}(t.stateNode),ba(e,Ke()),null!==M)for(o=e.onRecoverableError,t=0;t<M.length;t++)o((n=M[t]).value,{componentStack:n.stack,digest:n.digest});if(Uc)throw Uc=!1,e=Vc,Vc=null,e;0!=(1&Kc)&&0!==e.tag&&La(),0!=(1&(p=e.pendingLanes))?e===Zc?Qc++:(Qc=0,Zc=e):Qc=0,Fn()}(e,M,t,o)}finally{Nc.transition=n,fM=o}return null}function La(){if(null!==Jc){var e=mM(Kc),M=Nc.transition,t=fM;try{if(Nc.transition=null,fM=16>e?16:e,null===Jc)var o=!1;else{if(e=Jc,Jc=null,Kc=0,0!=(6&kc))throw Error(b(331));var n=kc;for(kc|=4,ec=e.current;null!==ec;){var p=ec,z=p.child;if(0!=(16&ec.flags)){var c=p.deletions;if(null!==c){for(var a=0;a<c.length;a++){var r=c[a];for(ec=r;null!==ec;){var O=ec;switch(O.tag){case 0:case 11:case 15:nc(8,O,p)}var i=O.child;if(null!==i)i.return=O,ec=i;else for(;null!==ec;){var s=(O=ec).sibling,d=O.return;if(zc(O),O===r){ec=null;break}if(null!==s){s.return=d,ec=s;break}ec=d}}}var l=p.alternate;if(null!==l){var u=l.child;if(null!==u){l.child=null;do{var A=u.sibling;u.sibling=null,u=A}while(null!==u)}}ec=p}}if(0!=(2064&p.subtreeFlags)&&null!==z)z.return=p,ec=z;else e:for(;null!==ec;){if(0!=(2048&(p=ec).flags))switch(p.tag){case 0:case 11:case 15:nc(9,p,p.return)}var q=p.sibling;if(null!==q){q.return=p.return,ec=q;break e}ec=p.return}}var f=e.current;for(ec=f;null!==ec;){var m=(z=ec).child;if(0!=(2064&z.subtreeFlags)&&null!==m)m.return=z,ec=m;else e:for(z=f;null!==ec;){if(0!=(2048&(c=ec).flags))try{switch(c.tag){case 0:case 11:case 15:bc(9,c)}}catch(e){ga(c,c.return,e)}if(c===z){ec=null;break e}var W=c.sibling;if(null!==W){W.return=c.return,ec=W;break e}ec=c.return}}if(kc=n,Fn(),bM&&"function"==typeof bM.onPostCommitFiberRoot)try{bM.onPostCommitFiberRoot(nM,e)}catch(e){}o=!0}return o}finally{fM=t,Nc.transition=M}}return!1}function Ra(e,M,t){e=Xb(e,M=lz(0,M=Oz(t,M),1),1),M=ta(),null!==e&&(AM(e,1,M),ba(e,M))}function ga(e,M,t){if(3===e.tag)Ra(e,e,t);else for(;null!==M;){if(3===M.tag){Ra(M,e,t);break}if(1===M.tag){var o=M.stateNode;if("function"==typeof M.type.getDerivedStateFromError||"function"==typeof o.componentDidCatch&&(null===$c||!$c.has(o))){M=Xb(M,e=uz(M,e=Oz(t,e),1),1),e=ta(),null!==M&&(AM(M,1,e),ba(M,e));break}}M=M.return}}function ya(e,M,t){var o=e.pingCache;null!==o&&o.delete(M),M=ta(),e.pingedLanes|=e.suspendedLanes&t,Tc===e&&(wc&t)===t&&(4===Xc||3===Xc&&(130023424&wc)===wc&&500>Ke()-jc?da(e,0):Cc|=t),ba(e,M)}function va(e,M){0===M&&(0==(1&e.mode)?M=1:(M=rM,0==(130023424&(rM<<=1))&&(rM=4194304)));var t=ta();null!==(e=Tb(e,M))&&(AM(e,M,t),ba(e,t))}function Na(e){var M=e.memoizedState,t=0;null!==M&&(t=M.retryLane),va(e,t)}function ka(e,M){var t=0;switch(e.tag){case 13:var o=e.stateNode,n=e.memoizedState;null!==n&&(t=n.retryLane);break;case 19:o=e.stateNode;break;default:throw Error(b(314))}null!==o&&o.delete(M),va(e,t)}function Ta(e,M){return Ve(e,M)}function Ba(e,M,t,o){this.tag=e,this.key=t,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=M,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=o,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function wa(e,M,t,o){return new Ba(e,M,t,o)}function Sa(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Ea(e,M){var t=e.alternate;return null===t?((t=wa(e.tag,M,e.key,e.mode)).elementType=e.elementType,t.type=e.type,t.stateNode=e.stateNode,t.alternate=e,e.alternate=t):(t.pendingProps=M,t.type=e.type,t.flags=0,t.subtreeFlags=0,t.deletions=null),t.flags=14680064&e.flags,t.childLanes=e.childLanes,t.lanes=e.lanes,t.child=e.child,t.memoizedProps=e.memoizedProps,t.memoizedState=e.memoizedState,t.updateQueue=e.updateQueue,M=e.dependencies,t.dependencies=null===M?null:{lanes:M.lanes,firstContext:M.firstContext},t.sibling=e.sibling,t.index=e.index,t.ref=e.ref,t}function Xa(e,M,t,o,n,p){var z=2;if(o=e,"function"==typeof e)Sa(e)&&(z=1);else if("string"==typeof e)z=5;else e:switch(e){case h:return Ya(t.children,n,p,M);case L:z=8,n|=8;break;case R:return(e=wa(12,t,M,2|n)).elementType=R,e.lanes=p,e;case N:return(e=wa(13,t,M,n)).elementType=N,e.lanes=p,e;case k:return(e=wa(19,t,M,n)).elementType=k,e.lanes=p,e;case w:return Da(t,n,p,M);default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case g:z=10;break e;case y:z=9;break e;case v:z=11;break e;case T:z=14;break e;case B:z=16,o=null;break e}throw Error(b(130,null==e?e:typeof e,""))}return(M=wa(z,t,M,n)).elementType=e,M.type=o,M.lanes=p,M}function Ya(e,M,t,o){return(e=wa(7,e,o,M)).lanes=t,e}function Da(e,M,t,o){return(e=wa(22,e,o,M)).elementType=w,e.lanes=t,e.stateNode={isHidden:!1},e}function xa(e,M,t){return(e=wa(6,e,null,M)).lanes=t,e}function Ca(e,M,t){return(M=wa(4,null!==e.children?e.children:[],e.key,M)).lanes=t,M.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},M}function Pa(e,M,t,o,n){this.tag=M,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=uM(0),this.expirationTimes=uM(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=uM(0),this.identifierPrefix=o,this.onRecoverableError=n,this.mutableSourceEagerHydrationData=null}function Ha(e,M,t,o,n,b,p,z,c){return e=new Pa(e,M,t,z,c),1===M?(M=1,!0===b&&(M|=8)):M=0,b=wa(3,null,null,M),e.current=b,b.stateNode=e,b.memoizedState={element:o,isDehydrated:t,cache:null,transitions:null,pendingSuspenseBoundaries:null},wb(b),e}function ja(e){if(!e)return Nn;e:{if(He(e=e._reactInternals)!==e||1!==e.tag)throw Error(b(170));var M=e;do{switch(M.tag){case 3:M=M.stateNode.context;break e;case 1:if(Sn(M.type)){M=M.stateNode.__reactInternalMemoizedMergedChildContext;break e}}M=M.return}while(null!==M);throw Error(b(171))}if(1===e.tag){var t=e.type;if(Sn(t))return Yn(e,t,M)}return M}function Fa(e,M,t,o,n,b,p,z,c){return(e=Ha(t,o,!0,e,0,b,0,z,c)).context=ja(null),t=e.current,(b=Eb(o=ta(),n=oa(t))).callback=null!=M?M:null,Xb(t,b,n),e.current.lanes=n,AM(e,n,o),ba(e,o),e}function Ia(e,M,t,o){var n=M.current,b=ta(),p=oa(n);return t=ja(t),null===M.context?M.context=t:M.pendingContext=t,(M=Eb(b,p)).payload={element:e},null!==(o=void 0===o?null:o)&&(M.callback=o),null!==(e=Xb(n,M,p))&&(na(e,n,p,b),Yb(e,n,p)),p}function Ua(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function Va(e,M){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var t=e.retryLane;e.retryLane=0!==t&&t<M?t:M}}function $a(e,M){Va(e,M),(e=e.alternate)&&Va(e,M)}Rc=function(e,M,t){if(null!==e)if(e.memoizedProps!==M.pendingProps||Tn.current)Wz=!0;else{if(0==(e.lanes&t)&&0==(128&M.flags))return Wz=!1,function(e,M,t){switch(M.tag){case 3:Tz(M),lb();break;case 5:zp(M);break;case 1:Sn(M.type)&&Dn(M);break;case 4:bp(M,M.stateNode.containerInfo);break;case 10:var o=M.type._context,n=M.memoizedProps.value;vn(fb,o._currentValue),o._currentValue=n;break;case 13:if(null!==(o=M.memoizedState))return null!==o.dehydrated?(vn(ap,1&ap.current),M.flags|=128,null):0!=(t&M.child.childLanes)?xz(e,M,t):(vn(ap,1&ap.current),null!==(e=Uz(e,M,t))?e.sibling:null);vn(ap,1&ap.current);break;case 19:if(o=0!=(t&M.childLanes),0!=(128&e.flags)){if(o)return Fz(e,M,t);M.flags|=128}if(null!==(n=M.memoizedState)&&(n.rendering=null,n.tail=null,n.lastEffect=null),vn(ap,ap.current),o)break;return null;case 22:case 23:return M.lanes=0,gz(e,M,t)}return Uz(e,M,t)}(e,M,t);Wz=0!=(131072&e.flags)}else Wz=!1,pb&&0!=(1048576&M.flags)&&Mb(M,$n,M.index);switch(M.lanes=0,M.tag){case 2:var o=M.type;Iz(e,M),e=M.pendingProps;var n=wn(M,kn.current);gb(M,t),n=Rp(null,M,o,e,n,t);var p=gp();return M.flags|=1,"object"==typeof n&&null!==n&&"function"==typeof n.render&&void 0===n.$$typeof?(M.tag=1,M.memoizedState=null,M.updateQueue=null,Sn(o)?(p=!0,Dn(M)):p=!1,M.memoizedState=null!==n.state&&void 0!==n.state?n.state:null,wb(M),n.updater=jb,M.stateNode=n,n._reactInternals=M,Vb(M,o,e,t),M=kz(null,M,o,!0,p,t)):(M.tag=0,pb&&p&&tb(M),_z(null,M,n,t),M=M.child),M;case 16:o=M.elementType;e:{switch(Iz(e,M),e=M.pendingProps,o=(n=o._init)(o._payload),M.type=o,n=M.tag=function(e){if("function"==typeof e)return Sa(e)?1:0;if(null!=e){if((e=e.$$typeof)===v)return 11;if(e===T)return 14}return 2}(o),e=qb(o,e),n){case 0:M=vz(null,M,o,e,t);break e;case 1:M=Nz(null,M,o,e,t);break e;case 11:M=hz(null,M,o,e,t);break e;case 14:M=Lz(null,M,o,qb(o.type,e),t);break e}throw Error(b(306,o,""))}return M;case 0:return o=M.type,n=M.pendingProps,vz(e,M,o,n=M.elementType===o?n:qb(o,n),t);case 1:return o=M.type,n=M.pendingProps,Nz(e,M,o,n=M.elementType===o?n:qb(o,n),t);case 3:e:{if(Tz(M),null===e)throw Error(b(387));o=M.pendingProps,n=(p=M.memoizedState).element,Sb(e,M),xb(M,o,null,t);var z=M.memoizedState;if(o=z.element,p.isDehydrated){if(p={element:o,isDehydrated:!1,cache:z.cache,pendingSuspenseBoundaries:z.pendingSuspenseBoundaries,transitions:z.transitions},M.updateQueue.baseState=p,M.memoizedState=p,256&M.flags){M=Bz(e,M,o,t,n=Oz(Error(b(423)),M));break e}if(o!==n){M=Bz(e,M,o,t,n=Oz(Error(b(424)),M));break e}for(bb=an(M.stateNode.containerInfo.firstChild),nb=M,pb=!0,zb=null,t=Zb(M,null,o,t),M.child=t;t;)t.flags=-3&t.flags|4096,t=t.sibling}else{if(lb(),o===n){M=Uz(e,M,t);break e}_z(e,M,o,t)}M=M.child}return M;case 5:return zp(M),null===e&&Ob(M),o=M.type,n=M.pendingProps,p=null!==e?e.memoizedProps:null,z=n.children,tn(o,n)?z=null:null!==p&&tn(o,p)&&(M.flags|=32),yz(e,M),_z(e,M,z,t),M.child;case 6:return null===e&&Ob(M),null;case 13:return xz(e,M,t);case 4:return bp(M,M.stateNode.containerInfo),o=M.pendingProps,null===e?M.child=Qb(M,null,o,t):_z(e,M,o,t),M.child;case 11:return o=M.type,n=M.pendingProps,hz(e,M,o,n=M.elementType===o?n:qb(o,n),t);case 7:return _z(e,M,M.pendingProps,t),M.child;case 8:case 12:return _z(e,M,M.pendingProps.children,t),M.child;case 10:e:{if(o=M.type._context,n=M.pendingProps,p=M.memoizedProps,z=n.value,vn(fb,o._currentValue),o._currentValue=z,null!==p)if(po(p.value,z)){if(p.children===n.children&&!Tn.current){M=Uz(e,M,t);break e}}else for(null!==(p=M.child)&&(p.return=M);null!==p;){var c=p.dependencies;if(null!==c){z=p.child;for(var a=c.firstContext;null!==a;){if(a.context===o){if(1===p.tag){(a=Eb(-1,t&-t)).tag=2;var r=p.updateQueue;if(null!==r){var O=(r=r.shared).pending;null===O?a.next=a:(a.next=O.next,O.next=a),r.pending=a}}p.lanes|=t,null!==(a=p.alternate)&&(a.lanes|=t),Rb(p.return,t,M),c.lanes|=t;break}a=a.next}}else if(10===p.tag)z=p.type===M.type?null:p.child;else if(18===p.tag){if(null===(z=p.return))throw Error(b(341));z.lanes|=t,null!==(c=z.alternate)&&(c.lanes|=t),Rb(z,t,M),z=p.sibling}else z=p.child;if(null!==z)z.return=p;else for(z=p;null!==z;){if(z===M){z=null;break}if(null!==(p=z.sibling)){p.return=z.return,z=p;break}z=z.return}p=z}_z(e,M,n.children,t),M=M.child}return M;case 9:return n=M.type,o=M.pendingProps.children,gb(M,t),o=o(n=yb(n)),M.flags|=1,_z(e,M,o,t),M.child;case 14:return n=qb(o=M.type,M.pendingProps),Lz(e,M,o,n=qb(o.type,n),t);case 15:return Rz(e,M,M.type,M.pendingProps,t);case 17:return o=M.type,n=M.pendingProps,n=M.elementType===o?n:qb(o,n),Iz(e,M),M.tag=1,Sn(o)?(e=!0,Dn(M)):e=!1,gb(M,t),Ib(M,o,n),Vb(M,o,n,t),kz(null,M,o,!0,e,t);case 19:return Fz(e,M,t);case 22:return gz(e,M,t)}throw Error(b(156,M.tag))};var Ga="function"==typeof reportError?reportError:function(e){console.error(e)};function Ja(e){this._internalRoot=e}function Ka(e){this._internalRoot=e}function Qa(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType)}function Za(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function er(){}function Mr(e,M,t,o,n){var b=t._reactRootContainer;if(b){var p=b;if("function"==typeof n){var z=n;n=function(){var e=Ua(p);z.call(e)}}Ia(M,p,e,n)}else p=function(e,M,t,o,n){if(n){if("function"==typeof o){var b=o;o=function(){var e=Ua(p);b.call(e)}}var p=Fa(M,o,e,0,null,!1,0,"",er);return e._reactRootContainer=p,e[ln]=p.current,Ho(8===e.nodeType?e.parentNode:e),ia(),p}for(;n=e.lastChild;)e.removeChild(n);if("function"==typeof o){var z=o;o=function(){var e=Ua(c);z.call(e)}}var c=Ha(e,0,!1,null,0,!1,0,"",er);return e._reactRootContainer=c,e[ln]=c.current,Ho(8===e.nodeType?e.parentNode:e),ia((function(){Ia(M,c,t,o)})),c}(t,M,e,n,o);return Ua(p)}Ka.prototype.render=Ja.prototype.render=function(e){var M=this._internalRoot;if(null===M)throw Error(b(409));Ia(e,M,null,null)},Ka.prototype.unmount=Ja.prototype.unmount=function(){var e=this._internalRoot;if(null!==e){this._internalRoot=null;var M=e.containerInfo;ia((function(){Ia(null,e,null,null)})),M[ln]=null}},Ka.prototype.unstable_scheduleHydration=function(e){if(e){var M=LM();e={blockedOn:null,target:e,priority:M};for(var t=0;t<wM.length&&0!==M&&M<wM[t].priority;t++);wM.splice(t,0,e),0===t&&YM(e)}},WM=function(e){switch(e.tag){case 3:var M=e.stateNode;if(M.current.memoizedState.isDehydrated){var t=OM(M.pendingLanes);0!==t&&(qM(M,1|t),ba(M,Ke()),0==(6&kc)&&(Fc=Ke()+500,Fn()))}break;case 13:ia((function(){var M=Tb(e,1);if(null!==M){var t=ta();na(M,e,1,t)}})),$a(e,1)}},_M=function(e){if(13===e.tag){var M=Tb(e,134217728);null!==M&&na(M,e,134217728,ta()),$a(e,134217728)}},hM=function(e){if(13===e.tag){var M=oa(e),t=Tb(e,M);null!==t&&na(t,e,M,ta()),$a(e,M)}},LM=function(){return fM},RM=function(e,M){var t=fM;try{return fM=e,M()}finally{fM=t}},_e=function(e,M,t){switch(M){case"input":if(Q(e,t),M=t.name,"radio"===t.type&&null!=M){for(t=e;t.parentNode;)t=t.parentNode;for(t=t.querySelectorAll("input[name="+JSON.stringify(""+M)+'][type="radio"]'),M=0;M<t.length;M++){var o=t[M];if(o!==e&&o.form===e.form){var n=hn(o);if(!n)throw Error(b(90));V(o),Q(o,n)}}}break;case"textarea":be(e,t);break;case"select":null!=(M=t.value)&&te(e,!!t.multiple,M,!1)}},ve=Oa,Ne=ia;var tr={usingClientEntryPoint:!1,Events:[mn,Wn,hn,ge,ye,Oa]},or={findFiberByHostInstance:fn,bundleType:0,version:"18.2.0",rendererPackageName:"react-dom"},nr={bundleType:or.bundleType,version:or.version,rendererPackageName:or.rendererPackageName,rendererConfig:or.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:m.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Ie(e))?null:e.stateNode},findFiberByHostInstance:or.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.2.0-next-9e3b772b8-20220608"};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var br=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!br.isDisabled&&br.supportsFiber)try{nM=br.inject(nr),bM=br}catch(re){}}M.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=tr,M.createPortal=function(e,M){var t=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!Qa(M))throw Error(b(200));return function(e,M,t){var o=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:_,key:null==o?null:""+o,children:e,containerInfo:M,implementation:t}}(e,M,null,t)},M.createRoot=function(e,M){if(!Qa(e))throw Error(b(299));var t=!1,o="",n=Ga;return null!=M&&(!0===M.unstable_strictMode&&(t=!0),void 0!==M.identifierPrefix&&(o=M.identifierPrefix),void 0!==M.onRecoverableError&&(n=M.onRecoverableError)),M=Ha(e,1,!1,null,0,t,0,o,n),e[ln]=M.current,Ho(8===e.nodeType?e.parentNode:e),new Ja(M)},M.findDOMNode=function(e){if(null==e)return null;if(1===e.nodeType)return e;var M=e._reactInternals;if(void 0===M){if("function"==typeof e.render)throw Error(b(188));throw e=Object.keys(e).join(","),Error(b(268,e))}return null===(e=Ie(M))?null:e.stateNode},M.flushSync=function(e){return ia(e)},M.hydrate=function(e,M,t){if(!Za(M))throw Error(b(200));return Mr(null,e,M,!0,t)},M.hydrateRoot=function(e,M,t){if(!Qa(e))throw Error(b(405));var o=null!=t&&t.hydratedSources||null,n=!1,p="",z=Ga;if(null!=t&&(!0===t.unstable_strictMode&&(n=!0),void 0!==t.identifierPrefix&&(p=t.identifierPrefix),void 0!==t.onRecoverableError&&(z=t.onRecoverableError)),M=Fa(M,null,e,1,null!=t?t:null,n,0,p,z),e[ln]=M.current,Ho(e),o)for(e=0;e<o.length;e++)n=(n=(t=o[e])._getVersion)(t._source),null==M.mutableSourceEagerHydrationData?M.mutableSourceEagerHydrationData=[t,n]:M.mutableSourceEagerHydrationData.push(t,n);return new Ka(M)},M.render=function(e,M,t){if(!Za(M))throw Error(b(200));return Mr(null,e,M,!1,t)},M.unmountComponentAtNode=function(e){if(!Za(e))throw Error(b(40));return!!e._reactRootContainer&&(ia((function(){Mr(null,null,e,!1,(function(){e._reactRootContainer=null,e[ln]=null}))})),!0)},M.unstable_batchedUpdates=Oa,M.unstable_renderSubtreeIntoContainer=function(e,M,t,o){if(!Za(t))throw Error(b(200));if(null==e||void 0===e._reactInternals)throw Error(b(38));return Mr(e,M,t,!1,o)},M.version="18.2.0-next-9e3b772b8-20220608"},745:(e,M,t)=>{"use strict";var o=t(3935);M.s=o.createRoot,o.hydrateRoot},3935:(e,M,t)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(e){console.error(e)}}(),e.exports=t(4448)},5251:(e,M,t)=>{"use strict";var o=t(7294),n=Symbol.for("react.element"),b=Symbol.for("react.fragment"),p=Object.prototype.hasOwnProperty,z=o.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,c={key:!0,ref:!0,__self:!0,__source:!0};function a(e,M,t){var o,b={},a=null,r=null;for(o in void 0!==t&&(a=""+t),void 0!==M.key&&(a=""+M.key),void 0!==M.ref&&(r=M.ref),M)p.call(M,o)&&!c.hasOwnProperty(o)&&(b[o]=M[o]);if(e&&e.defaultProps)for(o in M=e.defaultProps)void 0===b[o]&&(b[o]=M[o]);return{$$typeof:n,type:e,key:a,ref:r,props:b,_owner:z.current}}M.Fragment=b,M.jsx=a,M.jsxs=a},2408:(e,M)=>{"use strict";var t=Symbol.for("react.element"),o=Symbol.for("react.portal"),n=Symbol.for("react.fragment"),b=Symbol.for("react.strict_mode"),p=Symbol.for("react.profiler"),z=Symbol.for("react.provider"),c=Symbol.for("react.context"),a=Symbol.for("react.forward_ref"),r=Symbol.for("react.suspense"),O=Symbol.for("react.memo"),i=Symbol.for("react.lazy"),s=Symbol.iterator,d={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},l=Object.assign,u={};function A(e,M,t){this.props=e,this.context=M,this.refs=u,this.updater=t||d}function q(){}function f(e,M,t){this.props=e,this.context=M,this.refs=u,this.updater=t||d}A.prototype.isReactComponent={},A.prototype.setState=function(e,M){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,M,"setState")},A.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},q.prototype=A.prototype;var m=f.prototype=new q;m.constructor=f,l(m,A.prototype),m.isPureReactComponent=!0;var W=Array.isArray,_=Object.prototype.hasOwnProperty,h={current:null},L={key:!0,ref:!0,__self:!0,__source:!0};function R(e,M,o){var n,b={},p=null,z=null;if(null!=M)for(n in void 0!==M.ref&&(z=M.ref),void 0!==M.key&&(p=""+M.key),M)_.call(M,n)&&!L.hasOwnProperty(n)&&(b[n]=M[n]);var c=arguments.length-2;if(1===c)b.children=o;else if(1<c){for(var a=Array(c),r=0;r<c;r++)a[r]=arguments[r+2];b.children=a}if(e&&e.defaultProps)for(n in c=e.defaultProps)void 0===b[n]&&(b[n]=c[n]);return{$$typeof:t,type:e,key:p,ref:z,props:b,_owner:h.current}}function g(e){return"object"==typeof e&&null!==e&&e.$$typeof===t}var y=/\/+/g;function v(e,M){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var M={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return M[e]}))}(""+e.key):M.toString(36)}function N(e,M,n,b,p){var z=typeof e;"undefined"!==z&&"boolean"!==z||(e=null);var c=!1;if(null===e)c=!0;else switch(z){case"string":case"number":c=!0;break;case"object":switch(e.$$typeof){case t:case o:c=!0}}if(c)return p=p(c=e),e=""===b?"."+v(c,0):b,W(p)?(n="",null!=e&&(n=e.replace(y,"$&/")+"/"),N(p,M,n,"",(function(e){return e}))):null!=p&&(g(p)&&(p=function(e,M){return{$$typeof:t,type:e.type,key:M,ref:e.ref,props:e.props,_owner:e._owner}}(p,n+(!p.key||c&&c.key===p.key?"":(""+p.key).replace(y,"$&/")+"/")+e)),M.push(p)),1;if(c=0,b=""===b?".":b+":",W(e))for(var a=0;a<e.length;a++){var r=b+v(z=e[a],a);c+=N(z,M,n,r,p)}else if(r=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=s&&e[s]||e["@@iterator"])?e:null}(e),"function"==typeof r)for(e=r.call(e),a=0;!(z=e.next()).done;)c+=N(z=z.value,M,n,r=b+v(z,a++),p);else if("object"===z)throw M=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===M?"object with keys {"+Object.keys(e).join(", ")+"}":M)+"). If you meant to render a collection of children, use an array instead.");return c}function k(e,M,t){if(null==e)return e;var o=[],n=0;return N(e,o,"","",(function(e){return M.call(t,e,n++)})),o}function T(e){if(-1===e._status){var M=e._result;(M=M()).then((function(M){0!==e._status&&-1!==e._status||(e._status=1,e._result=M)}),(function(M){0!==e._status&&-1!==e._status||(e._status=2,e._result=M)})),-1===e._status&&(e._status=0,e._result=M)}if(1===e._status)return e._result.default;throw e._result}var B={current:null},w={transition:null},S={ReactCurrentDispatcher:B,ReactCurrentBatchConfig:w,ReactCurrentOwner:h};M.Children={map:k,forEach:function(e,M,t){k(e,(function(){M.apply(this,arguments)}),t)},count:function(e){var M=0;return k(e,(function(){M++})),M},toArray:function(e){return k(e,(function(e){return e}))||[]},only:function(e){if(!g(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},M.Component=A,M.Fragment=n,M.Profiler=p,M.PureComponent=f,M.StrictMode=b,M.Suspense=r,M.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=S,M.cloneElement=function(e,M,o){if(null==e)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var n=l({},e.props),b=e.key,p=e.ref,z=e._owner;if(null!=M){if(void 0!==M.ref&&(p=M.ref,z=h.current),void 0!==M.key&&(b=""+M.key),e.type&&e.type.defaultProps)var c=e.type.defaultProps;for(a in M)_.call(M,a)&&!L.hasOwnProperty(a)&&(n[a]=void 0===M[a]&&void 0!==c?c[a]:M[a])}var a=arguments.length-2;if(1===a)n.children=o;else if(1<a){c=Array(a);for(var r=0;r<a;r++)c[r]=arguments[r+2];n.children=c}return{$$typeof:t,type:e.type,key:b,ref:p,props:n,_owner:z}},M.createContext=function(e){return(e={$$typeof:c,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null}).Provider={$$typeof:z,_context:e},e.Consumer=e},M.createElement=R,M.createFactory=function(e){var M=R.bind(null,e);return M.type=e,M},M.createRef=function(){return{current:null}},M.forwardRef=function(e){return{$$typeof:a,render:e}},M.isValidElement=g,M.lazy=function(e){return{$$typeof:i,_payload:{_status:-1,_result:e},_init:T}},M.memo=function(e,M){return{$$typeof:O,type:e,compare:void 0===M?null:M}},M.startTransition=function(e){var M=w.transition;w.transition={};try{e()}finally{w.transition=M}},M.unstable_act=function(){throw Error("act(...) is not supported in production builds of React.")},M.useCallback=function(e,M){return B.current.useCallback(e,M)},M.useContext=function(e){return B.current.useContext(e)},M.useDebugValue=function(){},M.useDeferredValue=function(e){return B.current.useDeferredValue(e)},M.useEffect=function(e,M){return B.current.useEffect(e,M)},M.useId=function(){return B.current.useId()},M.useImperativeHandle=function(e,M,t){return B.current.useImperativeHandle(e,M,t)},M.useInsertionEffect=function(e,M){return B.current.useInsertionEffect(e,M)},M.useLayoutEffect=function(e,M){return B.current.useLayoutEffect(e,M)},M.useMemo=function(e,M){return B.current.useMemo(e,M)},M.useReducer=function(e,M,t){return B.current.useReducer(e,M,t)},M.useRef=function(e){return B.current.useRef(e)},M.useState=function(e){return B.current.useState(e)},M.useSyncExternalStore=function(e,M,t){return B.current.useSyncExternalStore(e,M,t)},M.useTransition=function(){return B.current.useTransition()},M.version="18.2.0"},7294:(e,M,t)=>{"use strict";e.exports=t(2408)},5893:(e,M,t)=>{"use strict";e.exports=t(5251)},53:(e,M)=>{"use strict";function t(e,M){var t=e.length;e.push(M);e:for(;0<t;){var o=t-1>>>1,n=e[o];if(!(0<b(n,M)))break e;e[o]=M,e[t]=n,t=o}}function o(e){return 0===e.length?null:e[0]}function n(e){if(0===e.length)return null;var M=e[0],t=e.pop();if(t!==M){e[0]=t;e:for(var o=0,n=e.length,p=n>>>1;o<p;){var z=2*(o+1)-1,c=e[z],a=z+1,r=e[a];if(0>b(c,t))a<n&&0>b(r,c)?(e[o]=r,e[a]=t,o=a):(e[o]=c,e[z]=t,o=z);else{if(!(a<n&&0>b(r,t)))break e;e[o]=r,e[a]=t,o=a}}}return M}function b(e,M){var t=e.sortIndex-M.sortIndex;return 0!==t?t:e.id-M.id}if("object"==typeof performance&&"function"==typeof performance.now){var p=performance;M.unstable_now=function(){return p.now()}}else{var z=Date,c=z.now();M.unstable_now=function(){return z.now()-c}}var a=[],r=[],O=1,i=null,s=3,d=!1,l=!1,u=!1,A="function"==typeof setTimeout?setTimeout:null,q="function"==typeof clearTimeout?clearTimeout:null,f="undefined"!=typeof setImmediate?setImmediate:null;function m(e){for(var M=o(r);null!==M;){if(null===M.callback)n(r);else{if(!(M.startTime<=e))break;n(r),M.sortIndex=M.expirationTime,t(a,M)}M=o(r)}}function W(e){if(u=!1,m(e),!l)if(null!==o(a))l=!0,w(_);else{var M=o(r);null!==M&&S(W,M.startTime-e)}}function _(e,t){l=!1,u&&(u=!1,q(g),g=-1),d=!0;var b=s;try{for(m(t),i=o(a);null!==i&&(!(i.expirationTime>t)||e&&!N());){var p=i.callback;if("function"==typeof p){i.callback=null,s=i.priorityLevel;var z=p(i.expirationTime<=t);t=M.unstable_now(),"function"==typeof z?i.callback=z:i===o(a)&&n(a),m(t)}else n(a);i=o(a)}if(null!==i)var c=!0;else{var O=o(r);null!==O&&S(W,O.startTime-t),c=!1}return c}finally{i=null,s=b,d=!1}}"undefined"!=typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var h,L=!1,R=null,g=-1,y=5,v=-1;function N(){return!(M.unstable_now()-v<y)}function k(){if(null!==R){var e=M.unstable_now();v=e;var t=!0;try{t=R(!0,e)}finally{t?h():(L=!1,R=null)}}else L=!1}if("function"==typeof f)h=function(){f(k)};else if("undefined"!=typeof MessageChannel){var T=new MessageChannel,B=T.port2;T.port1.onmessage=k,h=function(){B.postMessage(null)}}else h=function(){A(k,0)};function w(e){R=e,L||(L=!0,h())}function S(e,t){g=A((function(){e(M.unstable_now())}),t)}M.unstable_IdlePriority=5,M.unstable_ImmediatePriority=1,M.unstable_LowPriority=4,M.unstable_NormalPriority=3,M.unstable_Profiling=null,M.unstable_UserBlockingPriority=2,M.unstable_cancelCallback=function(e){e.callback=null},M.unstable_continueExecution=function(){l||d||(l=!0,w(_))},M.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):y=0<e?Math.floor(1e3/e):5},M.unstable_getCurrentPriorityLevel=function(){return s},M.unstable_getFirstCallbackNode=function(){return o(a)},M.unstable_next=function(e){switch(s){case 1:case 2:case 3:var M=3;break;default:M=s}var t=s;s=M;try{return e()}finally{s=t}},M.unstable_pauseExecution=function(){},M.unstable_requestPaint=function(){},M.unstable_runWithPriority=function(e,M){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var t=s;s=e;try{return M()}finally{s=t}},M.unstable_scheduleCallback=function(e,n,b){var p=M.unstable_now();switch(b="object"==typeof b&&null!==b&&"number"==typeof(b=b.delay)&&0<b?p+b:p,e){case 1:var z=-1;break;case 2:z=250;break;case 5:z=1073741823;break;case 4:z=1e4;break;default:z=5e3}return e={id:O++,callback:n,priorityLevel:e,startTime:b,expirationTime:z=b+z,sortIndex:-1},b>p?(e.sortIndex=b,t(r,e),null===o(a)&&e===o(r)&&(u?(q(g),g=-1):u=!0,S(W,b-p))):(e.sortIndex=z,t(a,e),l||d||(l=!0,w(_))),e},M.unstable_shouldYield=N,M.unstable_wrapCallback=function(e){var M=s;return function(){var t=s;s=M;try{return e.apply(this,arguments)}finally{s=t}}}},3840:(e,M,t)=>{"use strict";e.exports=t(53)},3250:(e,M,t)=>{"use strict";var o=t(7294),n="function"==typeof Object.is?Object.is:function(e,M){return e===M&&(0!==e||1/e==1/M)||e!=e&&M!=M},b=o.useState,p=o.useEffect,z=o.useLayoutEffect,c=o.useDebugValue;function a(e){var M=e.getSnapshot;e=e.value;try{var t=M();return!n(e,t)}catch(e){return!0}}var r="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,M){return M()}:function(e,M){var t=M(),o=b({inst:{value:t,getSnapshot:M}}),n=o[0].inst,r=o[1];return z((function(){n.value=t,n.getSnapshot=M,a(n)&&r({inst:n})}),[e,t,M]),p((function(){return a(n)&&r({inst:n}),e((function(){a(n)&&r({inst:n})}))}),[e]),c(t),t};M.useSyncExternalStore=void 0!==o.useSyncExternalStore?o.useSyncExternalStore:r},1688:(e,M,t)=>{"use strict";e.exports=t(3250)},1128:e=>{"use strict";e.exports=JSON.parse('{"version":"2023c","zones":["Africa/Abidjan|LMT GMT|g.8 0|01|-2ldXH.Q|48e5","Africa/Nairobi|LMT +0230 EAT +0245|-2r.g -2u -30 -2J|012132|-2ua2r.g N6nV.g 3Fbu h1cu dzbJ|47e5","Africa/Algiers|LMT PMT WET WEST CET CEST|-c.c -9.l 0 -10 -10 -20|01232323232323232454542423234542324|-3bQ0c.c MDA2.P cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 DA0 Imo0 rd0 De0 9Xz0 1fb0 1ap0 16K0 2yo0 mEp0 hwL0 jxA0 11A0 dDd0 17b0 11B0 1cN0 2Dy0 1cN0 1fB0 1cL0|26e5","Africa/Lagos|LMT GMT +0030 WAT|-d.z 0 -u -10|01023|-2B40d.z 7iod.z dnXK.p dLzH.z|17e6","Africa/Bissau|LMT -01 GMT|12.k 10 0|012|-2ldX0 2xoo0|39e4","Africa/Maputo|LMT CAT|-2a.k -20|01|-2GJea.k|26e5","Africa/Cairo|LMT EET EEST|-25.9 -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBC5.9 1AQM5.9 vb0 1ip0 11z0 1iN0 1nz0 12p0 1pz0 10N0 1pz0 16p0 1jz0 s3d0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1WL0 rd0 1Rz0 wp0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1qL0 Xd0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1ny0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 WL0 1qN0 Rb0 1wp0 On0 1zd0 Lz0 1EN0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0 kSp0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0|15e6","Africa/Casablanca|LMT +00 +01|u.k 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2gMnt.E 130Lt.E rb0 Dd0 dVb0 b6p0 TX0 EoB0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4mn0 SyN0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0|32e5","Africa/Ceuta|LMT WET WEST CET CEST|l.g 0 -10 -10 -20|0121212121212121212121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-2M0M0 GdX0 11z0 drd0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1y7o0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4VB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|85e3","Africa/El_Aaiun|LMT -01 +00 +01|Q.M 10 0 -10|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1rDz7.c 1GVA7.c 6L0 AL0 1Nd0 XX0 1Cp0 pz0 1cBB0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0|20e4","Africa/Johannesburg|LMT SAST SAST SAST|-1Q -1u -20 -30|0123232|-39EpQ qTcm 1Ajdu 1cL0 1cN0 1cL0|84e5","Africa/Juba|LMT CAT CAST EAT|-26.s -20 -30 -30|012121212121212121212121212121212131|-1yW26.s 1zK06.s 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 PeX0|","Africa/Khartoum|LMT CAT CAST EAT|-2a.8 -20 -30 -30|012121212121212121212121212121212131|-1yW2a.8 1zK0a.8 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 HjL0|51e5","Africa/Monrovia|LMT MMT MMT GMT|H.8 H.8 I.u 0|0123|-3ygng.Q 1usM0 28G01.m|11e5","Africa/Ndjamena|LMT WAT WAST|-10.c -10 -20|0121|-2le10.c 2J3c0.c Wn0|13e5","Africa/Sao_Tome|LMT LMT GMT WAT|-q.U A.J 0 -10|01232|-3tooq.U 18aoq.U 4i6N0 2q00|","Africa/Tripoli|LMT CET CEST EET|-Q.I -10 -20 -20|012121213121212121212121213123123|-21JcQ.I 1hnBQ.I vx0 4iP0 xx0 4eN0 Bb0 7ip0 U0n0 A10 1db0 1cN0 1db0 1dd0 1db0 1eN0 1bb0 1e10 1cL0 1c10 1db0 1dd0 1db0 1cN0 1db0 1q10 fAn0 1ep0 1db0 AKq0 TA0 1o00|11e5","Africa/Tunis|LMT PMT CET CEST|-E.I -9.l -10 -20|01232323232323232323232323232323232|-3zO0E.I 1cBAv.n 18pa9.l 1qM0 DA0 3Tc0 11B0 1ze0 WM0 7z0 3d0 14L0 1cN0 1f90 1ar0 16J0 1gXB0 WM0 1rA0 11c0 nwo0 Ko0 1cM0 1cM0 1rA0 10M0 zuM0 10N0 1aN0 1qM0 WM0 1qM0 11A0 1o00|20e5","Africa/Windhoek|LMT +0130 SAST SAST CAT WAT|-18.o -1u -20 -30 -20 -10|012324545454545454545454545454545454545454545454545454|-39Ep8.o qTbC.o 1Ajdu 1cL0 1SqL0 9Io0 16P0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4","America/Adak|LMT LMT NST NWT NPT BST BDT AHST HST HDT|-cd.m bK.C b0 a0 a0 b0 a0 a0 a0 90|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVzf.p 1EX1d.m 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326","America/Anchorage|LMT LMT AST AWT APT AHST AHDT YST AKST AKDT|-e0.o 9X.A a0 90 90 a0 90 90 90 80|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVxs.n 1EX20.o 8wX0 iA0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4","America/Puerto_Rico|LMT AST AWT APT|4o.p 40 30 30|01231|-2Qi7z.z 1IUbz.z 7XT0 iu0|24e5","America/Araguaina|LMT -03 -02|3c.M 30 20|0121212121212121212121212121212121212121212121212121|-2glwL.c HdKL.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 ny10 Lz0|14e4","America/Argentina/Buenos_Aires|LMT CMT -04 -03 -02|3R.M 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343434343|-331U6.c 125cn pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 A4p0 uL0 1qN0 WL0|","America/Argentina/Catamarca|LMT CMT -04 -03 -02|4n.8 4g.M 40 30 20|012323232323232323232323232323232323232323234343434243432343|-331TA.Q 125bR.E pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 7B0 8zb0 uL0|","America/Argentina/Cordoba|LMT CMT -04 -03 -02|4g.M 4g.M 40 30 20|012323232323232323232323232323232323232323234343434243434343|-331TH.c 125c0 pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0 1qN0 WL0|","America/Argentina/Jujuy|LMT CMT -04 -03 -02|4l.c 4g.M 40 30 20|0123232323232323232323232323232323232323232343434232434343|-331TC.M 125bT.A pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1ze0 TX0 1ld0 WK0 1wp0 TX0 A4p0 uL0|","America/Argentina/La_Rioja|LMT CMT -04 -03 -02|4r.o 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342343432343|-331Tw.A 125bN.o pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0|","America/Argentina/Mendoza|LMT CMT -04 -03 -02|4z.g 4g.M 40 30 20|012323232323232323232323232323232323232323234343423232432343|-331To.I 125bF.w pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1u20 SL0 1vd0 Tb0 1wp0 TW0 ri10 Op0 7TX0 uL0|","America/Argentina/Rio_Gallegos|LMT CMT -04 -03 -02|4A.Q 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343432343|-331Tn.8 125bD.U pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0|","America/Argentina/Salta|LMT CMT -04 -03 -02|4l.E 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342434343|-331TC.k 125bT.8 pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0|","America/Argentina/San_Juan|LMT CMT -04 -03 -02|4y.4 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342343432343|-331Tp.U 125bG.I pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rld0 m10 8lb0 uL0|","America/Argentina/San_Luis|LMT CMT -04 -03 -02|4p.o 4g.M 40 30 20|0123232323232323232323232323232323232323232343434232323432323|-331Ty.A 125bP.o pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 XX0 1q20 SL0 AN0 vDb0 m10 8lb0 8L0 jd0 1qN0 WL0 1qN0|","America/Argentina/Tucuman|LMT CMT -04 -03 -02|4k.Q 4g.M 40 30 20|01232323232323232323232323232323232323232323434343424343234343|-331TD.8 125bT.U pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 4N0 8BX0 uL0 1qN0 WL0|","America/Argentina/Ushuaia|LMT CMT -04 -03 -02|4x.c 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343432343|-331Tq.M 125bH.A pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rkN0 8p0 8zb0 uL0|","America/Asuncion|LMT AMT -04 -03|3O.E 3O.E 40 30|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-3eLw9.k 1FGo0 1DKM9.k 3CL0 3Dd0 10L0 1pB0 10n0 1pB0 10n0 1pB0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1lB0 14n0 1dd0 1cL0 1fd0 WL0 1rd0 1aL0 1dB0 Xz0 1qp0 Xb0 1qN0 10L0 1rB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 WN0 1qL0 11B0 1nX0 1ip0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 TX0 1tB0 19X0 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0|28e5","America/Panama|LMT CMT EST|5i.8 5j.A 50|012|-3eLuF.Q Iy01.s|15e5","America/Bahia_Banderas|LMT MST CST MDT PST CDT|71 70 60 60 80 50|0121312141313131313131313131313131313152525252525252525252525252|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|84e3","America/Bahia|LMT -03 -02|2y.4 30 20|01212121212121212121212121212121212121212121212121212121212121|-2glxp.U HdLp.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 l5B0 Rb0|27e5","America/Barbados|LMT AST ADT -0330|3W.t 40 30 3u|0121213121212121|-2m4k1.v 1eAN1.v RB0 1Bz0 Op0 1rb0 11d0 1jJc0 IL0 1ip0 17b0 1ip0 17b0 1ld0 13b0|28e4","America/Belem|LMT -03 -02|3d.U 30 20|012121212121212121212121212121|-2glwK.4 HdKK.4 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|20e5","America/Belize|LMT CST -0530 CWT CPT CDT|5Q.M 60 5u 50 50 50|012121212121212121212121212121212121212121212121213412121212121212121212121212121212121212121215151|-2kBu7.c fPA7.c Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu Rcu 7Bt0 Ni0 4nd0 Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu e9Au qn0 lxB0 mn0|57e3","America/Boa_Vista|LMT -04 -03|42.E 40 30|0121212121212121212121212121212121|-2glvV.k HdKV.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 smp0 WL0 1tB0 2L0|62e2","America/Bogota|LMT BMT -05 -04|4U.g 4U.g 50 40|01232|-3sTv3.I 1eIo0 38yo3.I 1PX0|90e5","America/Boise|LMT PST PDT MST MWT MPT MDT|7I.N 80 70 70 60 60 60|01212134536363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363|-3tFE0 1nEe0 1nX0 11B0 1nX0 8C10 JCL0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 Dd0 1Kn0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e4","America/Cambridge_Bay|-00 MST MWT MPT MDT CST CDT EST|0 70 60 60 60 60 50 50|012314141414141414141414141414141414141414141414141414141414567541414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-21Jc0 RO90 8x20 ix0 14HB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11A0 1nX0 2K0 WQ0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e2","America/Campo_Grande|LMT -04 -03|3C.s 40 30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwl.w HdLl.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|77e4","America/Cancun|LMT CST EST EDT CDT|5L.4 60 50 40 50|0123232341414141414141414141414141414141412|-1UQG0 2q2o0 yLB0 1lb0 14p0 1lb0 14p0 Lz0 xB0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4","America/Caracas|LMT CMT -0430 -04|4r.I 4r.E 4u 40|012323|-3eLvw.g ROnX.U 28KM2.k 1IwOu kqo0|29e5","America/Cayenne|LMT -04 -03|3t.k 40 30|012|-2mrwu.E 2gWou.E|58e3","America/Chicago|LMT CST CDT EST CWT CPT|5O.A 60 50 50 50 50|012121212121212121212121212121212121213121212121214512121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 1wp0 TX0 WN0 1qL0 1cN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 11B0 1Hz0 14p0 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5","America/Chihuahua|LMT MST CST MDT CDT|74.k 70 60 60 50|0121312424231313131313131313131313131313131313131313131313132|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|81e4","America/Ciudad_Juarez|LMT MST CST MDT CDT|75.U 70 60 60 50|0121312424231313131313131313131313131313131313131313131313132131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1wn0 cm0 EP0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0|","America/Costa_Rica|LMT SJMT CST CDT|5A.d 5A.d 60 50|01232323232|-3eLun.L 1fyo0 2lu0n.L Db0 1Kp0 Db0 pRB0 15b0 1kp0 mL0|12e5","America/Phoenix|LMT MST MDT MWT|7s.i 70 60 60|012121313121|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 4Al1 Ap0 1db0 SWqX 1cL0|42e5","America/Cuiaba|LMT -04 -03|3I.k 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwf.E HdLf.E 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 4a10 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|54e4","America/Danmarkshavn|LMT -03 -02 GMT|1e.E 30 20 0|01212121212121212121212121212121213|-2a5WJ.k 2z5fJ.k 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 DC0|8","America/Dawson_Creek|LMT PST PDT PWT PPT MST|80.U 80 70 70 70 70|01213412121212121212121212121212121212121212121212121212125|-3tofX.4 1nspX.4 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 ML0|12e3","America/Dawson|LMT YST YDT YWT YPT YDDT PST PDT MST|9h.E 90 80 80 80 70 80 70 70|0121213415167676767676767676767676767676767676767676767676767676767676767676767676767676767678|-2MSeG.k GWpG.k 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 jrA0 fNd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|13e2","America/Denver|LMT MST MDT MWT MPT|6X.U 70 60 60 60|012121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFF0 1nEe0 1nX0 11B0 1nX0 11B0 1qL0 WN0 mn0 Ord0 8x20 ix0 LCN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5","America/Detroit|LMT CST EST EWT EPT EDT|5w.b 60 50 40 40 40|0123425252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2Cgir.N peqr.N 156L0 8x40 iv0 6fd0 11z0 JxX1 SMX 1cN0 1cL0 aW10 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e5","America/Edmonton|LMT MST MDT MWT MPT|7x.Q 70 60 60 60|0121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2yd4q.8 shdq.8 1in0 17d0 hz0 2dB0 1fz0 1a10 11z0 1qN0 WL0 1qN0 11z0 IGN0 8x20 ix0 3NB0 11z0 XQp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|10e5","America/Eirunepe|LMT -05 -04|4D.s 50 40|0121212121212121212121212121212121|-2glvk.w HdLk.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0 yTd0 d5X0|31e3","America/El_Salvador|LMT CST CDT|5U.M 60 50|012121|-1XiG3.c 2Fvc3.c WL0 1qN0 WL0|11e5","America/Tijuana|LMT MST PST PDT PWT PPT|7M.4 70 80 70 70 70|012123245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQF0 4Q00 8mM0 8lc0 SN0 1cL0 pHB0 83r0 zI0 5O10 1Rz0 cOO0 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 BUp0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|20e5","America/Fort_Nelson|LMT PST PDT PWT PPT MST|8a.L 80 70 70 70 70|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121215|-3tofN.d 1nspN.d 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2","America/Fort_Wayne|LMT CST CDT CWT CPT EST EDT|5I.C 60 50 50 50 50 40|0121212134121212121212121212151565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 QI10 Db0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 5Tz0 1o10 qLb0 1cL0 1cN0 1cL0 1qhd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Fortaleza|LMT -03 -02|2y 30 20|0121212121212121212121212121212121212121|-2glxq HdLq 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 5z0 2mN0 On0|34e5","America/Glace_Bay|LMT AST ADT AWT APT|3X.M 40 30 30 30|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsI0.c CwO0.c 1in0 UGp0 8x50 iu0 iq10 11z0 Jg10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3","America/Godthab|LMT -03 -02 -01|3q.U 30 20 10|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2a5Ux.4 2z5dx.4 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 2so0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e3","America/Goose_Bay|LMT NST NDT NST NDT NWT NPT AST ADT ADDT|41.E 3u.Q 2u.Q 3u 2u 2u 2u 40 30 20|0121343434343434356343434343434343434343434343434343434343437878787878787878787878787878787878787878787879787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787|-3tojW.k 1nspt.c 1in0 DXb0 2HbX.8 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 S10 g0u 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|76e2","America/Grand_Turk|LMT KMT EST EDT AST|4I.w 57.a 50 40 40|01232323232323232323232323232323232323232323232323232323232323232323232323243232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLvf.s RK0m.C 2HHBQ.O 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 7jA0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2","America/Guatemala|LMT CST CDT|62.4 60 50|0121212121|-24KhV.U 2efXV.U An0 mtd0 Nz0 ifB0 17b0 zDB0 11z0|13e5","America/Guayaquil|LMT QMT -05 -04|5j.k 5e 50 40|01232|-3eLuE.E 1DNzS.E 2uILK rz0|27e5","America/Guyana|LMT -04 -0345 -03|3Q.D 40 3J 30|01231|-2mf87.l 8Hc7.l 2r7bJ Ey0f|80e4","America/Halifax|LMT AST ADT AWT APT|4e.o 40 30 30 30|0121212121212121212121212121212121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsHJ.A xzzJ.A 1db0 3I30 1in0 3HX0 IL0 1E10 ML0 1yN0 Pb0 1Bd0 Mn0 1Bd0 Rz0 1w10 Xb0 1w10 LX0 1w10 Xb0 1w10 Lz0 1C10 Jz0 1E10 OL0 1yN0 Un0 1qp0 Xb0 1qp0 11X0 1w10 Lz0 1HB0 LX0 1C10 FX0 1w10 Xb0 1qp0 Xb0 1BB0 LX0 1td0 Xb0 1qp0 Xb0 Rf0 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 6i10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4","America/Havana|LMT HMT CST CDT|5t.s 5t.A 50 40|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLuu.w 1qx00.8 72zu.o ML0 sld0 An0 1Nd0 Db0 1Nd0 An0 6Ep0 An0 1Nd0 An0 JDd0 Mn0 1Ap0 On0 1fd0 11X0 1qN0 WL0 1wp0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 14n0 1ld0 14L0 1kN0 15b0 1kp0 1cL0 1cN0 1fz0 1a10 1fz0 1fB0 11z0 14p0 1nX0 11B0 1nX0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 1a10 1in0 1a10 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 17c0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 11A0 6i00 Rc0 1wo0 U00 1tA0 Rc0 1wo0 U00 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5","America/Hermosillo|LMT MST CST MDT PST|7n.Q 70 60 60 80|0121312141313131|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0|64e4","America/Indiana/Knox|LMT CST CDT CWT CPT EST|5K.u 60 50 50 50 50|01212134121212121212121212121212121212151212121212121212121212121212121212121212121212121252121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 3Cn0 8wp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 z8o0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Marengo|LMT CST CDT CWT CPT EST EDT|5J.n 60 50 50 50 50 40|01212134121212121212121215656565656525656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 dyN0 11z0 6fd0 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1e6p0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Petersburg|LMT CST CDT CWT CPT EST EDT|5N.7 60 50 50 50 50 40|01212134121212121212121212121512121212121212121212125212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 3Fb0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 19co0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Tell_City|LMT CST CDT CWT CPT EST EDT|5L.3 60 50 50 50 50 40|012121341212121212121212121512165652121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 8wn0 1cN0 1cL0 1cN0 1cK0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Vevay|LMT CST CDT CWT CPT EST EDT|5E.g 60 50 50 50 50 40|0121213415656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 kPB0 Awn0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1lnd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Vincennes|LMT CST CDT CWT CPT EST EDT|5O.7 60 50 50 50 50 40|01212134121212121212121212121212156565212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Winamac|LMT CST CDT CWT CPT EST EDT|5K.p 60 50 50 50 50 40|012121341212121212121212121212121212121565652165656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1za0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Inuvik|-00 PST PDT MDT MST|0 80 70 60 70|01212121212121213434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-FnA0 L3K0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cK0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|35e2","America/Iqaluit|-00 EWT EPT EST EDT CST CDT|0 40 40 50 40 60 50|0123434343434343434343434343434343434343434343434343434343456343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-16K00 7nX0 iv0 14HB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|67e2","America/Jamaica|LMT KMT EST EDT|57.a 57.a 50 40|01232323232323232323232|-3eLuQ.O RK00 2uM1Q.O 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0|94e4","America/Juneau|LMT LMT PST PWT PPT PDT YDT YST AKST AKDT|-f2.j 8V.F 80 70 70 70 80 90 90 80|0123425252525252525252525252625252578989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVwq.s 1EX12.j 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cM0 1cM0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|33e3","America/Kentucky/Louisville|LMT CST CDT CWT CPT EST EDT|5H.2 60 50 50 50 50 40|01212121213412121212121212121212121212565656565656525656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 3Fd0 Nb0 LPd0 11z0 RB0 8x30 iw0 1nX1 e0X 9vd0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 xz0 gso0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Kentucky/Monticello|LMT CST CDT CWT CPT EST EDT|5D.o 60 50 50 50 50 40|01212134121212121212121212121212121212121212121212121212121212121212121212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 SWp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/La_Paz|LMT CMT BST -04|4w.A 4w.A 3w.A 40|0123|-3eLvr.o 1FIo0 13b0|19e5","America/Lima|LMT LMT -05 -04|58.c 58.A 50 40|01232323232323232|-3eLuP.M JcM0.o 1bDzP.o zX0 1aN0 1cL0 1cN0 1cL0 1PrB0 zX0 1O10 zX0 6Gp0 zX0 98p0 zX0|11e6","America/Los_Angeles|LMT PST PDT PWT PPT|7Q.W 80 70 70 70|0121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFE0 1nEe0 1nX0 11B0 1nX0 SgN0 8x10 iy0 5Wp1 1VaX 3dA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6","America/Maceio|LMT -03 -02|2m.Q 30 20|012121212121212121212121212121212121212121|-2glxB.8 HdLB.8 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 8Q10 WL0 1tB0 5z0 2mN0 On0|93e4","America/Managua|LMT MMT CST EST CDT|5J.8 5J.c 60 50 50|01232424232324242|-3eLue.Q 1Mhc0.4 1yAMe.M 4mn0 9Up0 Dz0 1K10 Dz0 s3F0 1KH0 DB0 9In0 k8p0 19X0 1o30 11y0|22e5","America/Manaus|LMT -04 -03|40.4 40 30|01212121212121212121212121212121|-2glvX.U HdKX.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0|19e5","America/Martinique|LMT FFMT AST ADT|44.k 44.k 40 30|01232|-3eLvT.E PTA0 2LPbT.E 19X0|39e4","America/Matamoros|LMT CST CDT|6u 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|45e4","America/Mazatlan|LMT MST CST MDT PST|75.E 70 60 60 80|0121312141313131313131313131313131313131313131313131313131313131|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|44e4","America/Menominee|LMT CST CDT CWT CPT EST|5O.r 60 50 50 50 50|012121341212152121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3pdG9.x 1jce9.x 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 LCN0 1fz0 6410 9Jb0 1cM0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|85e2","America/Merida|LMT CST EST CDT|5W.s 60 50 50|0121313131313131313131313131313131313131313131313131313131|-1UQG0 2q2o0 2hz0 wu30 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|11e5","America/Metlakatla|LMT LMT PST PWT PPT PDT AKST AKDT|-fd.G 8K.i 80 70 70 70 90 80|0123425252525252525252525252525252526767672676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-48Pzs.L 1jVwf.5 1EX1d.G 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1hU10 Rd0 1zb0 Op0 1zb0 Op0 1zb0 uM0 jB0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2","America/Mexico_City|LMT MST CST MDT CDT CWT|6A.A 70 60 60 50 50|012131242425242424242424242424242424242424242424242424242424242424242|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 gEn0 TX0 3xd0 Jb0 6zB0 SL0 e5d0 17b0 1Pff0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|20e6","America/Miquelon|LMT AST -03 -02|3I.E 40 30 20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2mKkf.k 2LTAf.k gQ10 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2","America/Moncton|LMT EST AST ADT AWT APT|4j.8 50 40 30 30 30|0123232323232323232323245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3txvE.Q J4ME.Q CwN0 1in0 zAo0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1K10 Lz0 1zB0 NX0 1u10 Wn0 S20 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14n1 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 ReX 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|64e3","America/Monterrey|LMT CST CDT|6F.g 60 50|0121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|41e5","America/Montevideo|LMT MMT -04 -03 -0330 -0230 -02 -0130|3I.P 3I.P 40 30 3u 2u 20 1u|012343434343434343434343435353636353636375363636363636363636363636363636363636363636363|-2tRUf.9 sVc0 8jcf.9 1db0 1dcu 1cLu 1dcu 1cLu ircu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu WLu 1fAu 1cLu 1o0u 11zu NAu 3jXu zXu Dq0u 19Xu pcu jz0 cm10 19X0 6tB0 1fbu 3o0u jX0 4vB0 xz0 3Cp0 mmu 1a10 IMu Db0 4c10 uL0 1Nd0 An0 1SN0 uL0 mp0 28L0 iPB0 un0 1SN0 xz0 1zd0 Lz0 1zd0 Rb0 1zd0 On0 1wp0 Rb0 s8p0 1fB0 1ip0 11z0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0|17e5","America/Toronto|LMT EST EDT EWT EPT|5h.w 50 40 40 40|012121212121212121212121212121212121212121212123412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-32B6G.s UFdG.s 1in0 11Wu 1nzu 1fD0 WJ0 1wr0 Nb0 1Ap0 On0 1zd0 On0 1wp0 TX0 1tB0 TX0 1tB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 4kM0 8x40 iv0 1o10 11z0 1nX0 11z0 1o10 11z0 1o10 1qL0 11D0 1nX0 11B0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e5","America/New_York|LMT EST EDT EWT EPT|4U.2 50 40 40 40|012121212121212121212121212121212121212121212121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFH0 1nEe0 1nX0 11B0 1nX0 11B0 1qL0 1a10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6","America/Nome|LMT LMT NST NWT NPT BST BDT YST AKST AKDT|-cW.m b1.C b0 a0 a0 b0 a0 90 90 80|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVyu.p 1EX1W.m 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cl0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|38e2","America/Noronha|LMT -02 -01|29.E 20 10|0121212121212121212121212121212121212121|-2glxO.k HdKO.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|30e2","America/North_Dakota/Beulah|LMT MST MDT MWT MPT CST CDT|6L.7 70 60 60 60 60 50|012121341212121212121212121212121212121212121212121212121212121212121212121212121212121212121212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0|","America/North_Dakota/Center|LMT MST MDT MWT MPT CST CDT|6J.c 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/North_Dakota/New_Salem|LMT MST MDT MWT MPT CST CDT|6J.D 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212121212121212121212121212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Ojinaga|LMT MST CST MDT CDT|6V.E 70 60 60 50|0121312424231313131313131313131313131313131313131313131313132424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1wn0 Rc0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3","America/Paramaribo|LMT PMT PMT -0330 -03|3E.E 3E.Q 3E.A 3u 30|01234|-2nDUj.k Wqo0.c qanX.I 1yVXN.o|24e4","America/Port-au-Prince|LMT PPMT EST EDT|4N.k 4N 50 40|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLva.E 15RLX.E 2FnMb 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14q0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 i6n0 1nX0 11B0 1nX0 d430 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5","America/Rio_Branco|LMT -05 -04|4v.c 50 40|01212121212121212121212121212121|-2glvs.M HdLs.M 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0 d5X0|31e4","America/Porto_Velho|LMT -04 -03|4f.A 40 30|012121212121212121212121212121|-2glvI.o HdKI.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|37e4","America/Punta_Arenas|LMT SMT -05 -04 -03|4H.E 4G.J 50 40 30|01213132323232323232343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLvg.k MJbX.5 fJAh.f 5knG.J 1Vzh.f jRAG.J 1pbh.f 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 blz0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|","America/Winnipeg|LMT CST CDT CWT CPT|6s.A 60 50 50 50|0121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3kLtv.o 1a3bv.o WL0 3ND0 1in0 Jap0 Rb0 aCN0 8x30 iw0 1tB0 11z0 1ip0 11z0 1o10 11z0 1o10 11z0 1rd0 10L0 1op0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 1cL0 1cN0 11z0 6i10 WL0 6i10 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|66e4","America/Rankin_Inlet|-00 CST CDT EST|0 60 50 50|01212121212121212121212121212121212121212121212121212121212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-vDc0 Bjk0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e2","America/Recife|LMT -03 -02|2j.A 30 20|0121212121212121212121212121212121212121|-2glxE.o HdLE.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|33e5","America/Regina|LMT MST MDT MWT MPT CST|6W.A 70 60 60 60 60|012121212121212121212121341212121212121212121212121215|-2AD51.o uHe1.o 1in0 s2L0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 66N0 1cL0 1cN0 19X0 1fB0 1cL0 1fB0 1cL0 1cN0 1cL0 M30 8x20 ix0 1ip0 1cL0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 3NB0 1cL0 1cN0|19e4","America/Resolute|-00 CST CDT EST|0 60 50 50|01212121212121212121212121212121212121212121212121212121212321212121212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-SnA0 103I0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|229","America/Santarem|LMT -04 -03|3C.M 40 30|0121212121212121212121212121212|-2glwl.c HdLl.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0|21e4","America/Santiago|LMT SMT -05 -04 -03|4G.J 4G.J 50 40 30|0121313232323232323432343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLvh.f MJc0 fJAh.f 5knG.J 1Vzh.f jRAG.J 1pbh.f 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 9Bz0 hX0 1q10 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0|62e5","America/Santo_Domingo|LMT SDMT EST EDT -0430 AST|4D.A 4E 50 40 4u 40|012324242424242525|-3eLvk.o 1Jic0.o 1lJMk Mn0 6sp0 Lbu 1Cou yLu 1RAu wLu 1QMu xzu 1Q0u xXu 1PAu 13jB0 e00|29e5","America/Sao_Paulo|LMT -03 -02|36.s 30 20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwR.w HdKR.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 pTd0 PX0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|20e6","America/Scoresbysund|LMT -02 -01 +00|1r.Q 20 10 0|0121323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2a5Ww.8 2z5ew.8 1a00 1cK0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|452","America/Sitka|LMT LMT PST PWT PPT PDT YST AKST AKDT|-eW.L 91.d 80 70 70 70 90 90 80|0123425252525252525252525252525252567878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787|-48Pzs.L 1jVwu 1EX0W.L 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|90e2","America/St_Johns|LMT NST NDT NST NDT NWT NPT NDDT|3u.Q 3u.Q 2u.Q 3u 2u 2u 2u 1u|012121212121212121212121212121212121213434343434343435634343434343434343434343434343434343434343434343434343434343434343434343434343434343437343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3tokt.8 1l020 14L0 1nB0 1in0 1gm0 Dz0 1JB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1fB0 19X0 1fB0 19X0 10O0 eKX.8 19X0 1iq0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4","America/Swift_Current|LMT MST MDT MWT MPT CST|7b.k 70 60 60 60 60|012134121212121212121215|-2AD4M.E uHdM.E 1in0 UGp0 8x20 ix0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 isN0 1cL0 3Cp0 1cL0 1cN0 11z0 1qN0 WL0 pMp0|16e3","America/Tegucigalpa|LMT CST CDT|5M.Q 60 50|01212121|-1WGGb.8 2ETcb.8 WL0 1qN0 WL0 GRd0 AL0|11e5","America/Thule|LMT AST ADT|4z.8 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5To.Q 31NBo.Q 1cL0 1cN0 1cL0 1fB0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|656","America/Vancouver|LMT PST PDT PWT PPT|8c.s 80 70 70 70|01213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tofL.w 1nspL.w 1in0 UGp0 8x10 iy0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5","America/Whitehorse|LMT YST YDT YWT YPT YDDT PST PDT MST|90.c 90 80 80 80 70 80 70 70|0121213415167676767676767676767676767676767676767676767676767676767676767676767676767676767678|-2MSeX.M GWpX.M 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 LA0 ytd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|23e3","America/Yakutat|LMT LMT YST YWT YPT YDT AKST AKDT|-eF.5 9i.T 90 80 80 80 90 80|0123425252525252525252525252525252526767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-48Pzs.L 1jVwL.G 1EX1F.5 8x00 iz0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cn0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|642","Antarctica/Casey|-00 +08 +11|0 -80 -b0|0121212121212|-2q00 1DjS0 T90 40P0 KL0 blz0 3m10 1o30 14k0 1kr0 12l0 1o01|10","Antarctica/Davis|-00 +07 +05|0 -70 -50|01012121|-vyo0 iXt0 alj0 1D7v0 VB0 3Wn0 KN0|70","Pacific/Port_Moresby|LMT PMMT +10|-9M.E -9M.w -a0|012|-3D8VM.E AvA0.8|25e4","Antarctica/Macquarie|-00 AEST AEDT|0 -a0 -b0|0121012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2OPc0 Fb40 1a00 4SK0 1ayy0 Lvs0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 3Co0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|1","Antarctica/Mawson|-00 +06 +05|0 -60 -50|012|-CEo0 2fyk0|60","Pacific/Auckland|LMT NZMT NZST NZST NZDT|-bD.4 -bu -cu -c0 -d0|012131313131313131313131313134343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-46jLD.4 2nEO9.4 Lz0 1tB0 11zu 1o0u 11zu 1o0u 11zu 1o0u 14nu 1lcu 14nu 1lcu 1lbu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1qLu WMu 1qLu 11Au 1n1bu IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00|14e5","Antarctica/Palmer|-00 -03 -04 -02|0 30 40 20|0121212121213121212121212121212121212121212121212121212121212121212121212121212121|-cao0 nD0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 jsN0 14N0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40","Antarctica/Rothera|-00 -03|0 30|01|gOo0|130","Asia/Riyadh|LMT +03|-36.Q -30|01|-TvD6.Q|57e5","Antarctica/Troll|-00 +00 +02|0 0 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|1puo0 hd0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|40","Asia/Urumqi|LMT +06|-5O.k -60|01|-1GgtO.k|32e5","Europe/Berlin|LMT CET CEST CEMT|-R.s -10 -20 -30|012121212121212321212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-36RcR.s UbWR.s 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 kL0 Nc0 m10 WM0 1ao0 1cp0 dX0 jz0 Dd0 1io0 17c0 1fA0 1a00 1ehA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|41e5","Asia/Almaty|LMT +05 +06 +07|-57.M -50 -60 -70|012323232323232323232321232323232323232323232323232|-1Pc57.M eUo7.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|15e5","Asia/Amman|LMT EET EEST +03|-2n.I -20 -30 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212123|-1yW2n.I 1HiMn.I KL0 1oN0 11b0 1oN0 11b0 1pd0 1dz0 1cp0 11b0 1op0 11b0 fO10 1db0 1e10 1cL0 1cN0 1cL0 1cN0 1fz0 1pd0 10n0 1ld0 14n0 1hB0 15b0 1ip0 19X0 1cN0 1cL0 1cN0 17b0 1ld0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1So0 y00 1fc0 1dc0 1co0 1dc0 1cM0 1cM0 1cM0 1o00 11A0 1lc0 17c0 1cM0 1cM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 LA0 1C00|25e5","Asia/Anadyr|LMT +12 +13 +14 +11|-bN.U -c0 -d0 -e0 -b0|01232121212121212121214121212121212121212121212121212121212141|-1PcbN.U eUnN.U 23CL0 1db0 2q10 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|13e3","Asia/Aqtau|LMT +04 +05 +06|-3l.4 -40 -50 -60|012323232323232323232123232312121212121212121212|-1Pc3l.4 eUnl.4 24PX0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|15e4","Asia/Aqtobe|LMT +04 +05 +06|-3M.E -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc3M.E eUnM.E 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|27e4","Asia/Ashgabat|LMT +04 +05 +06|-3R.w -40 -50 -60|0123232323232323232323212|-1Pc3R.w eUnR.w 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0|41e4","Asia/Atyrau|LMT +03 +05 +06 +04|-3r.I -30 -50 -60 -40|01232323232323232323242323232323232324242424242|-1Pc3r.I eUor.I 24PW0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 2sp0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|","Asia/Baghdad|LMT BMT +03 +04|-2V.E -2V.A -30 -40|0123232323232323232323232323232323232323232323232323232|-3eLCV.E 18ao0.4 2ACnV.A 11b0 1cp0 1dz0 1dd0 1db0 1cN0 1cp0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1de0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0|66e5","Asia/Qatar|LMT +04 +03|-3q.8 -40 -30|012|-21Jfq.8 27BXq.8|96e4","Asia/Baku|LMT +03 +04 +05|-3j.o -30 -40 -50|01232323232323232323232123232323232323232323232323232323232323232|-1Pc3j.o 1jUoj.o WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 9Je0 1o00 11z0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5","Asia/Bangkok|LMT BMT +07|-6G.4 -6G.4 -70|012|-3D8SG.4 1C000|15e6","Asia/Barnaul|LMT +06 +07 +08|-5z -60 -70 -80|0123232323232323232323212323232321212121212121212121212121212121212|-21S5z pCnz 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 p90 LE0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|","Asia/Beirut|LMT EET EEST|-2m -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3D8Om 1BWom 1on0 1410 1db0 19B0 1in0 1ip0 WL0 1lQp0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 q6N0 En0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1op0 11b0 dA10 17b0 1iN0 17b0 1iN0 17b0 1iN0 17b0 1vB0 SL0 1mp0 13z0 1iN0 17b0 1iN0 17b0 1jd0 12n0 1a10 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|22e5","Asia/Bishkek|LMT +05 +06 +07|-4W.o -50 -60 -70|012323232323232323232321212121212121212121212121212|-1Pc4W.o eUnW.o 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2e00 1tX0 17b0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1cPu 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0|87e4","Asia/Brunei|LMT +0730 +08 +0820 +09|-7l.k -7u -80 -8k -90|0123232323232323242|-1KITl.k gDbP.k 6ynu AnE 1O0k AnE 1NAk AnE 1NAk AnE 1NAk AnE 1O0k AnE 1NAk AnE pAk 8Fz0|42e4","Asia/Kolkata|LMT HMT MMT IST +0630|-5R.s -5R.k -5l.a -5u -6u|01234343|-4Fg5R.s BKo0.8 1rDcw.a 1r2LP.a 1un0 HB0 7zX0|15e6","Asia/Chita|LMT +08 +09 +10|-7x.Q -80 -90 -a0|012323232323232323232321232323232323232323232323232323232323232312|-21Q7x.Q pAnx.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3re0|33e4","Asia/Choibalsan|LMT +07 +08 +10 +09|-7C -70 -80 -a0 -90|0123434343434343434343434343434343434343434343424242|-2APHC 2UkoC cKn0 1da0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 3Db0 h1f0 1cJ0 1cP0 1cJ0|38e3","Asia/Shanghai|LMT CST CDT|-85.H -80 -90|012121212121212121212121212121|-2M0U5.H Iuo5.H 18n0 OjB0 Rz0 11d0 1wL0 A10 8HX0 1G10 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 aL0 1tU30 Rb0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0|23e6","Asia/Colombo|LMT MMT +0530 +06 +0630|-5j.o -5j.w -5u -60 -6u|012342432|-3D8Rj.o 13inX.Q 1rFbN.w 1zzu 7Apu 23dz0 11zu n3cu|22e5","Asia/Dhaka|LMT HMT +0630 +0530 +06 +07|-61.E -5R.k -6u -5u -60 -70|01232454|-3eLG1.E 26008.k 1unn.k HB0 m6n0 2kxbu 1i00|16e6","Asia/Damascus|LMT EET EEST +03|-2p.c -20 -30 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212123|-21Jep.c Hep.c 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1xRB0 11X0 1oN0 10L0 1pB0 11b0 1oN0 10L0 1mp0 13X0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 Nb0 1AN0 Nb0 bcp0 19X0 1gp0 19X0 3ld0 1xX0 Vd0 1Bz0 Sp0 1vX0 10p0 1dz0 1cN0 1cL0 1db0 1db0 1g10 1an0 1ap0 1db0 1fd0 1db0 1cN0 1db0 1dd0 1db0 1cp0 1dz0 1c10 1dX0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 19z0 1fB0 1qL0 11B0 1on0 Wp0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0|26e5","Asia/Dili|LMT +08 +09|-8m.k -80 -90|01212|-2le8m.k 1dnXm.k 1nfA0 Xld0|19e4","Asia/Dubai|LMT +04|-3F.c -40|01|-21JfF.c|39e5","Asia/Dushanbe|LMT +05 +06 +07|-4z.c -50 -60 -70|012323232323232323232321|-1Pc4z.c eUnz.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2hB0|76e4","Asia/Famagusta|LMT EET EEST +03|-2f.M -20 -30 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212312121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2f.M 2a3cf.M 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|","Asia/Gaza|LMT EET EEST IST IDT|-2h.Q -20 -30 -20 -30|01212121212121212121212121212121212343434343434343434343434343434312121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBCh.Q 1Azeh.Q MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 pBa0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 11z0 1o10 14o0 1lA1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qo0 XA0 1qp0 1cN0 1cL0 17d0 1in0 14p0 1lb0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1lb0 14p0 1in0 17d0 1cL0 1cN0 19X0 e10 2L0 WN0 14n0 gN0 5z0 11B0 WL0 e10 bb0 11B0 TX0 e10 dX0 11B0 On0 gN0 gL0 11B0 Lz0 e10 pb0 WN0 IL0 e10 rX0 WN0 Db0 gN0 uL0 11B0 xz0 e10 An0 11B0 rX0 gN0 Db0 11B0 pb0 e10 Lz0 WN0 mn0 e10 On0 WN0 gL0 gN0 Rb0 11B0 bb0 e10 WL0 11B0 5z0 gN0 11z0 11B0 2L0 gN0 14n0 1fB0 1cL0 1a10 1fz0 14p0 1lb0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1nX0 14p0 1in0 17d0 1fz0 1a10 19X0 1fB0 17b0 e10 28L0 e10 25X0 gN0 25X0 e10 gL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|18e5","Asia/Hebron|LMT EET EEST IST IDT|-2k.n -20 -30 -20 -30|0121212121212121212121212121212121234343434343434343434343434343431212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBCk.n 1Azek.n MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 pBa0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 12L0 1mN0 14o0 1lc0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qo0 XA0 1qp0 1cN0 1cL0 17d0 1in0 14p0 1lb0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1lb0 14p0 1in0 17d0 1cL0 1cN0 19X0 e10 2L0 WN0 14n0 gN0 5z0 11B0 WL0 e10 bb0 11B0 TX0 e10 dX0 11B0 On0 gN0 gL0 11B0 Lz0 e10 pb0 WN0 IL0 e10 rX0 WN0 Db0 gN0 uL0 11B0 xz0 e10 An0 11B0 rX0 gN0 Db0 11B0 pb0 e10 Lz0 WN0 mn0 e10 On0 WN0 gL0 gN0 Rb0 11B0 bb0 e10 WL0 11B0 5z0 gN0 11z0 11B0 2L0 gN0 14n0 1fB0 1cL0 1a10 1fz0 14p0 1lb0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1nX0 14p0 1in0 17d0 1fz0 1a10 19X0 1fB0 17b0 e10 28L0 e10 25X0 gN0 25X0 e10 gL0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|25e4","Asia/Ho_Chi_Minh|LMT PLMT +07 +08 +09|-76.u -76.u -70 -80 -90|0123423232|-2yC76.u bK00 1h7b6.u 5lz0 18o0 3Oq0 k5b0 aW00 BAM0|90e5","Asia/Hong_Kong|LMT HKT HKST HKWT JST|-7A.G -80 -90 -8u -90|0123412121212121212121212121212121212121212121212121212121212121212121|-2CFH0 1taO0 Hc0 xUu 9tBu 11z0 1tDu Rc0 1wo0 11A0 1cM0 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1nX0 U10 1tz0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|73e5","Asia/Hovd|LMT +06 +07 +08|-66.A -60 -70 -80|012323232323232323232323232323232323232323232323232|-2APG6.A 2Uko6.A cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|81e3","Asia/Irkutsk|LMT IMT +07 +08 +09|-6V.5 -6V.5 -70 -80 -90|012343434343434343434343234343434343434343434343434343434343434343|-3D8SV.5 1Bxc0 pjXV.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4","Europe/Istanbul|LMT IMT EET EEST +03 +04|-1T.Q -1U.U -20 -30 -30 -40|01232323232323232323232323232323232323232323232345423232323232323232323232323232323232323232323232323232323232323234|-3D8NT.Q 1ePXW.U dzzU.U 11b0 8tB0 1on0 1410 1db0 19B0 1in0 3Rd0 Un0 1oN0 11b0 zSN0 CL0 mp0 1Vz0 1gN0 8yn0 1yp0 ML0 1kp0 17b0 1ip0 17b0 1fB0 19X0 1ip0 19X0 1ip0 17b0 qdB0 38L0 1jd0 Tz0 l6O0 11A0 WN0 1qL0 TB0 1tX0 U10 1tz0 11B0 1in0 17d0 z90 cne0 pb0 2Cp0 1800 14o0 1dc0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1a00 1fA0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WO0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6","Asia/Jakarta|LMT BMT +0720 +0730 +09 +08 WIB|-77.c -77.c -7k -7u -90 -80 -70|012343536|-49jH7.c 2hiLL.c luM0 mPzO 8vWu 6kpu 4PXu xhcu|31e6","Asia/Jayapura|LMT +09 +0930 WIT|-9m.M -90 -9u -90|0123|-1uu9m.M sMMm.M L4nu|26e4","Asia/Jerusalem|LMT JMT IST IDT IDDT|-2k.S -2k.E -20 -30 -40|012323232323232432323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3D8Ok.S 1wvA0.e SyOk.E MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 3LA0 Eo0 oo0 1co0 1dA0 16o0 10M0 1jc0 1tA0 14o0 1cM0 1a00 11A0 1Nc0 Ao0 1Nc0 Ao0 1Ko0 LA0 1o00 WM0 EQK0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 1hB0 1dX0 1ep0 1aL0 1eN0 17X0 1nf0 11z0 1tB0 19W0 1e10 17b0 1ep0 1gL0 18N0 1fz0 1eN0 17b0 1gq0 1gn0 19d0 1dz0 1c10 17X0 1hB0 1gn0 19d0 1dz0 1c10 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0|81e4","Asia/Kabul|LMT +04 +0430|-4A.M -40 -4u|012|-3eLEA.M 2dTcA.M|46e5","Asia/Kamchatka|LMT +11 +12 +13|-ay.A -b0 -c0 -d0|012323232323232323232321232323232323232323232323232323232323212|-1SLKy.A ivXy.A 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|18e4","Asia/Karachi|LMT +0530 +0630 +05 PKT PKST|-4s.c -5u -6u -50 -50 -60|012134545454|-2xoss.c 1qOKW.c 7zX0 eup0 LqMu 1fy00 1cL0 dK10 11b0 1610 1jX0|24e6","Asia/Kathmandu|LMT +0530 +0545|-5F.g -5u -5J|012|-21JhF.g 2EGMb.g|12e5","Asia/Khandyga|LMT +08 +09 +10 +11|-92.d -80 -90 -a0 -b0|0123232323232323232323212323232323232323232323232343434343434343432|-21Q92.d pAp2.d 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 qK0 yN0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|66e2","Asia/Krasnoyarsk|LMT +06 +07 +08|-6b.q -60 -70 -80|01232323232323232323232123232323232323232323232323232323232323232|-21Hib.q prAb.q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5","Asia/Kuala_Lumpur|LMT SMT +07 +0720 +0730 +09 +08|-6T.p -6T.p -70 -7k -7u -90 -80|01234546|-2M0ST.p aIM0 17anT.p l5XE 17bO 8Fyu 1so10|71e5","Asia/Macau|LMT CST +09 +10 CDT|-7y.a -80 -90 -a0 -90|012323214141414141414141414141414141414141414141414141414141414141414141|-2CFHy.a 1uqKy.a PX0 1kn0 15B0 11b0 4Qq0 1oM0 11c0 1ko0 1u00 11A0 1cM0 11c0 1o00 11A0 1o00 11A0 1oo0 1400 1o00 11A0 1o00 U00 1tA0 U00 1wo0 Rc0 1wru U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cK0 1cO0 1cK0 1cO0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|57e4","Asia/Magadan|LMT +10 +11 +12|-a3.c -a0 -b0 -c0|012323232323232323232321232323232323232323232323232323232323232312|-1Pca3.c eUo3.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Cq0|95e3","Asia/Makassar|LMT MMT +08 +09 WITA|-7V.A -7V.A -80 -90 -80|01234|-21JjV.A vfc0 myLV.A 8ML0|15e5","Asia/Manila|LMT LMT PST PDT JST|fU -84 -80 -90 -90|01232423232|-54m84 2clc0 1vfc4 AL0 cK10 65X0 mXB0 vX0 VK10 1db0|24e6","Asia/Nicosia|LMT EET EEST|-2d.s -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2d.s 2a3cd.s 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|32e4","Asia/Novokuznetsk|LMT +06 +07 +08|-5M.M -60 -70 -80|012323232323232323232321232323232323232323232323232323232323212|-1PctM.M eULM.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|55e4","Asia/Novosibirsk|LMT +06 +07 +08|-5v.E -60 -70 -80|0123232323232323232323212323212121212121212121212121212121212121212|-21Qnv.E pAFv.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 ml0 Os0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 4eN0|15e5","Asia/Omsk|LMT +05 +06 +07|-4R.u -50 -60 -70|01232323232323232323232123232323232323232323232323232323232323232|-224sR.u pMLR.u 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|12e5","Asia/Oral|LMT +03 +05 +06 +04|-3p.o -30 -50 -60 -40|01232323232323232424242424242424242424242424242|-1Pc3p.o eUop.o 23CK0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 1cM0 IM0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|27e4","Asia/Pontianak|LMT PMT +0730 +09 +08 WITA WIB|-7h.k -7h.k -7u -90 -80 -80 -70|012324256|-2ua7h.k XE00 munL.k 8Rau 6kpu 4PXu xhcu Wqnu|23e4","Asia/Pyongyang|LMT KST JST KST|-8n -8u -90 -90|012313|-2um8n 97XR 1lTzu 2Onc0 6BA0|29e5","Asia/Qostanay|LMT +04 +05 +06|-4e.s -40 -50 -60|012323232323232323232123232323232323232323232323|-1Pc4e.s eUoe.s 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|","Asia/Qyzylorda|LMT +04 +05 +06|-4l.Q -40 -50 -60|01232323232323232323232323232323232323232323232|-1Pc4l.Q eUol.Q 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 3ao0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 zQl0|73e4","Asia/Rangoon|LMT RMT +0630 +09|-6o.L -6o.L -6u -90|01232|-3D8So.L 1BnA0 SmnS.L 7j9u|48e5","Asia/Sakhalin|LMT +09 +11 +12 +10|-9u.M -90 -b0 -c0 -a0|01232323232323232323232423232323232424242424242424242424242424242|-2AGVu.M 1BoMu.M 1qFa0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 2pB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|58e4","Asia/Samarkand|LMT +04 +05 +06|-4r.R -40 -50 -60|01232323232323232323232|-1Pc4r.R eUor.R 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|36e4","Asia/Seoul|LMT KST JST KST KDT KDT|-8r.Q -8u -90 -90 -a0 -9u|012343434343151515151515134343|-2um8r.Q 97XV.Q 1m1zu 6CM0 Fz0 1kN0 14n0 1kN0 14L0 1zd0 On0 69B0 2I0u OL0 1FB0 Rb0 1qN0 TX0 1tB0 TX0 1tB0 TX0 1tB0 TX0 2ap0 12FBu 11A0 1o00 11A0|23e6","Asia/Srednekolymsk|LMT +10 +11 +12|-ae.Q -a0 -b0 -c0|01232323232323232323232123232323232323232323232323232323232323232|-1Pcae.Q eUoe.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|35e2","Asia/Taipei|LMT CST JST CDT|-86 -80 -90 -90|012131313131313131313131313131313131313131|-30bk6 1FDc6 joM0 1yo0 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 10N0 1BX0 10p0 1pz0 10p0 1pz0 10p0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1BB0 ML0 1Bd0 ML0 uq10 1db0 1cN0 1db0 97B0 AL0|74e5","Asia/Tashkent|LMT +05 +06 +07|-4B.b -50 -60 -70|012323232323232323232321|-1Pc4B.b eUnB.b 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0|23e5","Asia/Tbilisi|LMT TBMT +03 +04 +05|-2X.b -2X.b -30 -40 -50|01234343434343434343434323232343434343434343434323|-3D8OX.b 1LUM0 1jUnX.b WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cK0 1cL0 1cN0 1cL0 1cN0 2pz0 1cL0 1fB0 3Nz0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 An0 Os0 WM0|11e5","Asia/Tehran|LMT TMT +0330 +0430 +04 +05|-3p.I -3p.I -3u -4u -40 -50|012345423232323232323232323232323232323232323232323232323232323232323232|-2btDp.I Llc0 1FHaT.I 1pc0 120u Rc0 XA0 Wou JX0 1dB0 1en0 pNB0 UL0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 64p0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0|14e6","Asia/Thimphu|LMT +0530 +06|-5W.A -5u -60|012|-Su5W.A 1BGMs.A|79e3","Asia/Tokyo|LMT JST JDT|-9i.X -90 -a0|0121212121|-3jE90 2qSo0 Rc0 1lc0 14o0 1zc0 Oo0 1zc0 Oo0|38e6","Asia/Tomsk|LMT +06 +07 +08|-5D.P -60 -70 -80|0123232323232323232323212323232323232323232323212121212121212121212|-21NhD.P pxzD.P 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 co0 1bB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Qp0|10e5","Asia/Ulaanbaatar|LMT +07 +08 +09|-77.w -70 -80 -90|012323232323232323232323232323232323232323232323232|-2APH7.w 2Uko7.w cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|12e5","Asia/Ust-Nera|LMT +08 +09 +12 +11 +10|-9w.S -80 -90 -c0 -b0 -a0|012343434343434343434345434343434343434343434343434343434343434345|-21Q9w.S pApw.S 23CL0 1d90 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|65e2","Asia/Vladivostok|LMT +09 +10 +11|-8L.v -90 -a0 -b0|01232323232323232323232123232323232323232323232323232323232323232|-1SJIL.v itXL.v 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4","Asia/Yakutsk|LMT +08 +09 +10|-8C.W -80 -90 -a0|01232323232323232323232123232323232323232323232323232323232323232|-21Q8C.W pAoC.W 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|28e4","Asia/Yekaterinburg|LMT PMT +04 +05 +06|-42.x -3J.5 -40 -50 -60|012343434343434343434343234343434343434343434343434343434343434343|-2ag42.x 7mQh.s qBvJ.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|14e5","Asia/Yerevan|LMT +03 +04 +05|-2W -30 -40 -50|0123232323232323232323212121212323232323232323232323232323232|-1Pc2W 1jUnW WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 4RX0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|13e5","Atlantic/Azores|LMT HMT -02 -01 +00 WET|1G.E 1S.w 20 10 0 0|01232323232323232323232323232323232323232323234323432343234323232323232323232323232323232323232323232343434343434343434343434343434345434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3tomh.k 18aoh.k aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|25e4","Atlantic/Bermuda|LMT BMT BST AST ADT|4j.i 4j.i 3j.i 40 30|0121213434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3eLvE.G 16mo0 1bb0 1i10 11X0 ru30 thbE.G 1PX0 11B0 1tz0 Rd0 1zb0 Op0 1zb0 3I10 Lz0 1EN0 FX0 1HB0 FX0 1Kp0 Db0 1Kp0 Db0 1Kp0 FX0 93d0 11z0 GAp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e3","Atlantic/Canary|LMT -01 WET WEST|11.A 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UtaW.o XPAW.o 1lAK0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|54e4","Atlantic/Cape_Verde|LMT -02 -01|1y.4 20 10|01212|-2ldW0 1eEo0 7zX0 1djf0|50e4","Atlantic/Faroe|LMT WET WEST|r.4 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2uSnw.U 2Wgow.U 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|49e3","Atlantic/Madeira|LMT FMT -01 +00 +01 WET WEST|17.A 17.A 10 0 -10 0 -10|01232323232323232323232323232323232323232323234323432343234323232323232323232323232323232323232323232565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tomQ.o 18anQ.o aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e4","Atlantic/South_Georgia|LMT -02|2q.8 20|01|-3eLxx.Q|30","Atlantic/Stanley|LMT SMT -04 -03 -02|3P.o 3P.o 40 30 20|0123232323232323434323232323232323232323232323232323232323232323232323|-3eLw8.A S200 12bA8.A 19X0 1fB0 19X0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 Cn0 1Cc10 WL0 1qL0 U10 1tz0 2mN0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 U10 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qN0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 U10 1tz0 U10 1tz0 U10|21e2","Australia/Sydney|LMT AEST AEDT|-a4.Q -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-32oW4.Q RlC4.Q xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5","Australia/Adelaide|LMT ACST ACST ACDT|-9e.k -90 -9u -au|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-32oVe.k ak0e.k H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 WM0 1qM0 Rc0 1zc0 U00 1tA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|11e5","Australia/Brisbane|LMT AEST AEDT|-ac.8 -a0 -b0|012121212121212121|-32Bmc.8 Ry2c.8 xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0|20e5","Australia/Broken_Hill|LMT AEST ACST ACST ACDT|-9p.M -a0 -90 -9u -au|0123434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-32oVp.M 3Lzp.M 6wp0 H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|18e3","Australia/Hobart|LMT AEST AEDT|-9N.g -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-3109N.g Pk1N.g 1a00 1qM0 Oo0 1zc0 Oo0 TAo0 yM0 1cM0 1cM0 1fA0 1a00 VfA0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|21e4","Australia/Darwin|LMT ACST ACST ACDT|-8H.k -90 -9u -au|01232323232|-32oUH.k ajXH.k H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00|12e4","Australia/Eucla|LMT +0845 +0945|-8z.s -8J -9J|01212121212121212121|-30nIz.s PkpO.s xc0 10jc0 yM0 1cM0 1cM0 1gSo0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|368","Australia/Lord_Howe|LMT AEST +1030 +1130 +11|-aA.k -a0 -au -bu -b0|01232323232424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424|-32oWA.k 3tzAA.k 1zdu Rb0 1zd0 On0 1zd0 On0 1zd0 On0 1zd0 TXu 1qMu WLu 1tAu WLu 1tAu TXu 1tAu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 11Au 1nXu 1qMu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu 11zu 1o0u WLu 1qMu 14nu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu|347","Australia/Lindeman|LMT AEST AEDT|-9T.U -a0 -b0|0121212121212121212121|-32BlT.U Ry1T.U xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0|10","Australia/Melbourne|LMT AEST AEDT|-9D.Q -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-32oVD.Q RlBD.Q xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1qM0 11A0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|39e5","Australia/Perth|LMT AWST AWDT|-7H.o -80 -90|01212121212121212121|-30nHH.o PkpH.o xc0 10jc0 yM0 1cM0 1cM0 1gSo0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|18e5","CET|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|","Pacific/Easter|LMT EMT -07 -06 -05|7h.s 7h.s 70 60 50|0123232323232323232323232323234343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLsG.w 1HRc0 1s4IG.w WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 2pA0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0|30e2","CST6CDT|CST CDT CWT CPT|60 50 50 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","EET|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|","Europe/Dublin|LMT DMT IST GMT BST IST|p.l p.l -y.D 0 -10 -10|012343434343435353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353|-3BHby.D 1ra20 Rc0 1fzy.D 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 g600 14o0 1wo0 17c0 1io0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5","EST|EST|50|0||","EST5EDT|EST EDT EWT EPT|50 40 40 40|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 SgN0 8x40 iv0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","Etc/GMT-0|GMT|0|0||","Etc/GMT-1|+01|-10|0||","Etc/GMT-10|+10|-a0|0||","Etc/GMT-11|+11|-b0|0||","Etc/GMT-12|+12|-c0|0||","Etc/GMT-13|+13|-d0|0||","Etc/GMT-14|+14|-e0|0||","Etc/GMT-2|+02|-20|0||","Etc/GMT-3|+03|-30|0||","Etc/GMT-4|+04|-40|0||","Etc/GMT-5|+05|-50|0||","Etc/GMT-6|+06|-60|0||","Etc/GMT-7|+07|-70|0||","Etc/GMT-8|+08|-80|0||","Etc/GMT-9|+09|-90|0||","Etc/GMT+1|-01|10|0||","Etc/GMT+10|-10|a0|0||","Etc/GMT+11|-11|b0|0||","Etc/GMT+12|-12|c0|0||","Etc/GMT+2|-02|20|0||","Etc/GMT+3|-03|30|0||","Etc/GMT+4|-04|40|0||","Etc/GMT+5|-05|50|0||","Etc/GMT+6|-06|60|0||","Etc/GMT+7|-07|70|0||","Etc/GMT+8|-08|80|0||","Etc/GMT+9|-09|90|0||","Etc/UTC|UTC|0|0||","Europe/Brussels|LMT BMT WET CET CEST WEST|-h.u -h.u 0 -10 -20 -10|012343434325252525252525252525252525252525252525252525434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3D8Mh.u u1Ah.u SO00 3zX0 11c0 1iO0 11A0 1o00 11A0 my0 Ic0 1qM0 Rc0 1EM0 UM0 1u00 10o0 1io0 1io0 17c0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a30 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 y00 5Wn0 WM0 1fA0 1cM0 16M0 1iM0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|21e5","Europe/Andorra|LMT WET CET CEST|-6.4 0 -10 -20|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2M0M6.4 1Pnc6.4 1xIN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|79e3","Europe/Astrakhan|LMT +03 +04 +05|-3c.c -30 -40 -50|012323232323232323212121212121212121212121212121212121212121212|-1Pcrc.c eUMc.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|10e5","Europe/Athens|LMT AMT EET EEST CEST CET|-1y.Q -1y.Q -20 -30 -20 -10|0123234545232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-30SNy.Q OMM1 CNbx.Q mn0 kU10 9b0 3Es0 Xa0 1fb0 1dd0 k3X0 Nz0 SCp0 1vc0 SO0 1cM0 1a00 1ao0 1fc0 1a10 1fG0 1cg0 1dX0 1bX0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|35e5","Europe/London|LMT GMT BST BDST|1.f 0 -10 -20|01212121212121212121212121212121212121212121212121232323232321212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-4VgnW.J 2KHdW.J Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|10e6","Europe/Belgrade|LMT CET CEST|-1m -10 -20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3topm 2juLm 3IP0 WM0 1fA0 1cM0 1cM0 1rc0 Qo0 1vmo0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5","Europe/Prague|LMT PMT CET CEST GMT|-V.I -V.I -10 -20 0|0123232323232323232423232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4QbAV.I 1FDc0 XPaV.I 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 1qM0 11c0 mp0 xA0 mn0 17c0 1io0 17c0 1fc0 1ao0 1bNc0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|13e5","Europe/Bucharest|LMT BMT EET EEST|-1I.o -1I.o -20 -30|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3awpI.o 1AU00 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Axc0 On0 1fA0 1a10 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|19e5","Europe/Budapest|LMT CET CEST|-1g.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3cK1g.k 124Lg.k 11d0 1iO0 11A0 1o00 11A0 1oo0 11c0 1lc0 17c0 O1V0 3Nf0 WM0 1fA0 1cM0 1cM0 1oJ0 1dd0 1020 1fX0 1cp0 1cM0 1cM0 1cM0 1fA0 1a00 bhy0 Rb0 1wr0 Rc0 1C00 LA0 1C00 LA0 SNW0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cO0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e5","Europe/Zurich|LMT BMT CET CEST|-y.8 -t.K -10 -20|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4HyMy.8 1Dw04.m 1SfAt.K 11A0 1o00 11A0 1xG10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|38e4","Europe/Chisinau|LMT CMT BMT EET EEST CEST CET MSK MSD|-1T.k -1T -1I.o -20 -30 -20 -10 -30 -40|0123434343434343434345656578787878787878787878434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3D8NT.k 1wNA0.k wGMa.A 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 27A0 2en0 39g0 WM0 1fA0 1cM0 V90 1t7z0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 gL0 WO0 1cM0 1cM0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11D0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|67e4","Europe/Gibraltar|LMT GMT BST BDST CET CEST|l.o 0 -10 -20 -10 -20|0121212121212121212121212121212121212121212121212123232323232121232121212121212121212145454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-3BHbC.A 1ra1C.A Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 10Jz0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|30e3","Europe/Helsinki|LMT HMT EET EEST|-1D.N -1D.N -20 -30|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3H0ND.N 1Iu00 OULD.N 1dA0 1xGq0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5","Europe/Kaliningrad|LMT CET CEST EET EEST MSK MSD +03|-1m -10 -20 -20 -30 -30 -40 -30|012121212121212343565656565656565654343434343434343434343434343434343434343434373|-36Rdm UbXm 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 390 7A0 1en0 12N0 1pbb0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|44e4","Europe/Kiev|LMT KMT EET MSK CEST CET MSD EEST|-22.4 -22.4 -20 -30 -20 -10 -40 -30|01234545363636363636363636367272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272|-3D8O2.4 1LUM0 eUo2.4 rnz0 2Hg0 WM0 1fA0 da0 1v4m0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 Db0 3220 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o10 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|34e5","Europe/Kirov|LMT +03 +04 +05 MSD MSK MSK|-3i.M -30 -40 -50 -40 -30 -40|0123232323232323232454524545454545454545454545454545454545454565|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 2pz0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|48e4","Europe/Lisbon|LMT WET WEST WEMT CET CEST|A.J 0 -10 -20 -10 -20|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121214121212121212121212121212121212124545454212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2le00 aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 pvy0 1cM0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5","Europe/Madrid|LMT WET WEST WEMT CET CEST|e.I 0 -10 -20 -10 -20|0121212121212121212321454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2M0M0 G5z0 19B0 1cL0 1dd0 b1z0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1in0 17d0 iIn0 Hd0 1cL0 bb0 1200 2s20 14n0 5aL0 Mp0 1vz0 17d0 1in0 17d0 1in0 17d0 1in0 17d0 6hX0 11B0 XHX0 1a10 1fz0 1a10 19X0 1cN0 1fz0 1a10 1fC0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|62e5","Europe/Malta|LMT CET CEST|-W.4 -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-35rcW.4 SXzW.4 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1co0 17c0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1co0 1cM0 1lA0 Xc0 1qq0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1iN0 19z0 1fB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|42e4","Europe/Minsk|LMT MMT EET MSK CEST CET MSD EEST +03|-1O.g -1O -20 -30 -20 -10 -40 -30 -30|012345454363636363636363636372727272727272727272727272727272727272728|-3D8NO.g 1LUM0.g eUnO qNX0 3gQ0 WM0 1fA0 1cM0 Al0 1tsn0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 3Fc0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0|19e5","Europe/Paris|LMT PMT WET WEST CEST CET WEMT|-9.l -9.l 0 -10 -20 -10 -20|01232323232323232323232323232323232323232323232323234545463654545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-3bQ09.l MDA0 cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 Ik0 5M30 WM0 1fA0 1cM0 Vx0 hB0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|11e6","Europe/Moscow|LMT MMT MMT MST MDST MSD MSK +05 EET EEST MSK|-2u.h -2u.h -2v.j -3v.j -4v.j -40 -30 -50 -20 -30 -40|01232434565756865656565656565656565698656565656565656565656565656565656565656a6|-3D8Ou.h 1sQM0 2pyW.W 1bA0 11X0 GN0 1Hb0 c4v.j ik0 3DA0 dz0 15A0 c10 2q10 iM10 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|16e6","Europe/Riga|LMT RMT LST EET MSK CEST CET MSD EEST|-1A.y -1A.y -2A.y -20 -30 -20 -10 -40 -30|0121213456565647474747474747474838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383|-3D8NA.y 1xde0 11A0 1iM0 ko0 gWm0 yDXA.y 2bX0 3fE0 WM0 1fA0 1cM0 1cM0 4m0 1sLy0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 1o00 11A0 1o00 11A0 1qM0 3oo0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|64e4","Europe/Rome|LMT RMT CET CEST|-N.U -N.U -10 -20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4aU0N.U 15snN.U T000 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1cM0 16M0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1C00 LA0 1zc0 Oo0 1C00 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1zc0 Oo0 1fC0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|39e5","Europe/Samara|LMT +03 +04 +05|-3k.k -30 -40 -50|0123232323232323232121232323232323232323232323232323232323212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2y10 14m0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|12e5","Europe/Saratov|LMT +03 +04 +05|-34.i -30 -40 -50|012323232323232321212121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 5810|","Europe/Simferopol|LMT SMT EET MSK CEST CET MSD EEST MSK|-2g.o -2g -20 -30 -20 -10 -40 -30 -40|0123454543636363636363636363272727636363727272727272727272727272727272727283|-3D8Og.o 1LUM0.o eUog rEn0 2qs0 WM0 1fA0 1cM0 3V0 1u0L0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 4eN0 1cM0 1cM0 1cM0 1cM0 dV0 WO0 1cM0 1cM0 1fy0 1o30 11B0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0|33e4","Europe/Sofia|LMT IMT EET CET CEST EEST|-1x.g -1U.U -20 -10 -20 -30|0123434325252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-3D8Nx.g AiLA.k 1UFeU.U WM0 1fA0 1cM0 1cM0 1cN0 1mKH0 1dd0 1fb0 1ap0 1fb0 1a20 1fy0 1a30 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5","Europe/Tallinn|LMT TMT CET CEST EET MSK MSD EEST|-1D -1D -10 -20 -20 -30 -40 -30|0123214532323565656565656565657474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474|-3D8ND 1wI00 teD 11A0 1Ta0 4rXl KSLD 2FX0 2Jg0 WM0 1fA0 1cM0 18J0 1sTX0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o10 11A0 1qM0 5QM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|41e4","Europe/Tirane|LMT CET CEST|-1j.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glBj.k 14pcj.k 5LC0 WM0 4M0 1fCK0 10n0 1op0 11z0 1pd0 11z0 1qN0 WL0 1qp0 Xb0 1qp0 Xb0 1qp0 11z0 1lB0 11z0 1qN0 11z0 1iN0 16n0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|42e4","Europe/Ulyanovsk|LMT +03 +04 +05 +02|-3d.A -30 -40 -50 -20|01232323232323232321214121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|13e5","Europe/Vienna|LMT CET CEST|-15.l -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-36Rd5.l UbX5.l 11d0 1iO0 11A0 1o00 11A0 3KM0 14o0 LA00 6i00 WM0 1fA0 1cM0 1cM0 1cM0 400 2qM0 1ao0 1co0 1cM0 1io0 17c0 1gHa0 19X0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|18e5","Europe/Vilnius|LMT WMT KMT CET EET MSK CEST MSD EEST|-1F.g -1o -1z.A -10 -20 -30 -20 -40 -30|0123435636365757575757575757584848484848484848463648484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484|-3D8NF.g 1u5Ah.g 6ILM.o 1Ooz.A zz0 Mfd0 29W0 3is0 WM0 1fA0 1cM0 LV0 1tgL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11B0 1o00 11A0 1qM0 8io0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|54e4","Europe/Volgograd|LMT +03 +04 +05 MSD MSK MSK|-2V.E -30 -40 -50 -40 -30 -40|012323232323232324545452454545454545454545454545454545454545456525|-21IqV.E psLV.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1fA0 1cM0 2pz0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 9Jd0 5gn0|10e5","Europe/Warsaw|LMT WMT CET CEST EET EEST|-1o -1o -10 -20 -20 -30|0123232345423232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3D8No 1qDA0 1LXo 11d0 1iO0 11A0 1o00 11A0 1on0 11A0 6zy0 HWP0 5IM0 WM0 1fA0 1cM0 1dz0 1mL0 1en0 15B0 1aq0 1nA0 11A0 1io0 17c0 1fA0 1a00 iDX0 LA0 1cM0 1cM0 1C00 Oo0 1cM0 1cM0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1C00 LA0 uso0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e5","HST|HST|a0|0||","Indian/Chagos|LMT +05 +06|-4N.E -50 -60|012|-2xosN.E 3AGLN.E|30e2","Indian/Maldives|LMT MMT +05|-4S -4S -50|012|-3D8QS 3eLA0|35e4","Indian/Mauritius|LMT +04 +05|-3O -40 -50|012121|-2xorO 34unO 14L0 12kr0 11z0|15e4","Pacific/Kwajalein|LMT +11 +10 +09 -12 +12|-b9.k -b0 -a0 -90 c0 -c0|0123145|-2M0X9.k 1rDA9.k akp0 6Up0 12ry0 Wan0|14e3","MET|MET MEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|","MST|MST|70|0||","MST7MDT|MST MDT MWT MPT|70 60 60 60|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","Pacific/Chatham|LMT +1215 +1245 +1345|-cd.M -cf -cJ -dJ|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-46jMd.M 37RbW.M 1adef IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00|600","Pacific/Apia|LMT LMT -1130 -11 -10 +14 +13|-cx.4 bq.U bu b0 a0 -e0 -d0|012343456565656565656565656|-38Fox.4 J1A0 1yW03.4 2rRbu 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0|37e3","Pacific/Bougainville|LMT PMMT +10 +09 +11|-am.g -9M.w -a0 -90 -b0|012324|-3D8Wm.g AvAx.I 1TCLM.w 7CN0 2MQp0|18e4","Pacific/Efate|LMT +11 +12|-bd.g -b0 -c0|012121212121212121212121|-2l9nd.g 2uNXd.g Dc0 n610 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 Lz0 1Nd0 An0|66e3","Pacific/Enderbury|-00 -12 -11 +13|0 c0 b0 -d0|0123|-1iIo0 1GsA0 B7X0|1","Pacific/Fakaofo|LMT -11 +13|bo.U b0 -d0|012|-2M0Az.4 4ufXz.4|483","Pacific/Fiji|LMT +12 +13|-bT.I -c0 -d0|012121212121212121212121212121|-2bUzT.I 3m8NT.I LA0 1EM0 IM0 nJc0 LA0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 20o0 pc0 2hc0 bc0|88e4","Pacific/Tarawa|LMT +12|-bw.4 -c0|01|-2M0Xw.4|29e3","Pacific/Galapagos|LMT -05 -06|5W.o 50 60|01212|-1yVS1.A 2dTz1.A gNd0 rz0|25e3","Pacific/Gambier|LMT -09|8X.M 90|01|-2jof0.c|125","Pacific/Guadalcanal|LMT +11|-aD.M -b0|01|-2joyD.M|11e4","Pacific/Guam|LMT LMT GST +09 GDT ChST|el -9D -a0 -90 -b0 -a0|0123242424242424242425|-54m9D 2glc0 1DFbD 6pB0 AhB0 3QL0 g2p0 3p91 WOX rX0 1zd0 Rb0 1wp0 Rb0 5xd0 rX0 5sN0 zb1 1C0X On0 ULb0|17e4","Pacific/Honolulu|LMT HST HDT HWT HPT HST|av.q au 9u 9u 9u a0|01213415|-3061s.y 1uMdW.y 8x0 lef0 8wWu iAu 46p0|37e4","Pacific/Kiritimati|LMT -1040 -10 +14|at.k aE a0 -e0|0123|-2M0Bu.E 3bIMa.E B7Xk|51e2","Pacific/Kosrae|LMT LMT +11 +09 +10 +12|d8.4 -aP.U -b0 -90 -a0 -c0|0123243252|-54maP.U 2glc0 xsnP.U axC0 HBy0 akp0 axd0 WOK0 1bdz0|66e2","Pacific/Marquesas|LMT -0930|9i 9u|01|-2joeG|86e2","Pacific/Pago_Pago|LMT LMT SST|-cB.c bm.M b0|012|-38FoB.c J1A0|37e2","Pacific/Nauru|LMT +1130 +09 +12|-b7.E -bu -90 -c0|01213|-1Xdn7.E QCnB.E 7mqu 1lnbu|10e3","Pacific/Niue|LMT -1120 -11|bj.E bk b0|012|-FScE.k suo0.k|12e2","Pacific/Norfolk|LMT +1112 +1130 +1230 +11 +12|-bb.Q -bc -bu -cu -b0 -c0|0123245454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-2M0Xb.Q 21ILX.Q W01G Oo0 1COo0 9Jcu 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|25e4","Pacific/Noumea|LMT +11 +12|-b5.M -b0 -c0|01212121|-2l9n5.M 2EqM5.M xX0 1PB0 yn0 HeP0 Ao0|98e3","Pacific/Palau|LMT LMT +09|f2.4 -8V.U -90|012|-54m8V.U 2glc0|21e3","Pacific/Pitcairn|LMT -0830 -08|8E.k 8u 80|012|-2M0Dj.E 3UVXN.E|56","Pacific/Rarotonga|LMT LMT -1030 -0930 -10|-dk.U aD.4 au 9u a0|01234343434343434343434343434|-2Otpk.U 28zc0 13tbO.U IL0 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu|13e3","Pacific/Tahiti|LMT -10|9W.g a0|01|-2joe1.I|18e4","Pacific/Tongatapu|LMT +1220 +13 +14|-cj.c -ck -d0 -e0|01232323232|-XbMj.c BgLX.c 1yndk 15A0 1wo0 xz0 1Q10 xz0 zWN0 s00|75e3","PST8PDT|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","WET|WET WEST|0 -10|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|"],"links":["Africa/Abidjan|Africa/Accra","Africa/Abidjan|Africa/Bamako","Africa/Abidjan|Africa/Banjul","Africa/Abidjan|Africa/Conakry","Africa/Abidjan|Africa/Dakar","Africa/Abidjan|Africa/Freetown","Africa/Abidjan|Africa/Lome","Africa/Abidjan|Africa/Nouakchott","Africa/Abidjan|Africa/Ouagadougou","Africa/Abidjan|Africa/Timbuktu","Africa/Abidjan|Atlantic/Reykjavik","Africa/Abidjan|Atlantic/St_Helena","Africa/Abidjan|Iceland","Africa/Cairo|Egypt","Africa/Johannesburg|Africa/Maseru","Africa/Johannesburg|Africa/Mbabane","Africa/Lagos|Africa/Bangui","Africa/Lagos|Africa/Brazzaville","Africa/Lagos|Africa/Douala","Africa/Lagos|Africa/Kinshasa","Africa/Lagos|Africa/Libreville","Africa/Lagos|Africa/Luanda","Africa/Lagos|Africa/Malabo","Africa/Lagos|Africa/Niamey","Africa/Lagos|Africa/Porto-Novo","Africa/Maputo|Africa/Blantyre","Africa/Maputo|Africa/Bujumbura","Africa/Maputo|Africa/Gaborone","Africa/Maputo|Africa/Harare","Africa/Maputo|Africa/Kigali","Africa/Maputo|Africa/Lubumbashi","Africa/Maputo|Africa/Lusaka","Africa/Nairobi|Africa/Addis_Ababa","Africa/Nairobi|Africa/Asmara","Africa/Nairobi|Africa/Asmera","Africa/Nairobi|Africa/Dar_es_Salaam","Africa/Nairobi|Africa/Djibouti","Africa/Nairobi|Africa/Kampala","Africa/Nairobi|Africa/Mogadishu","Africa/Nairobi|Indian/Antananarivo","Africa/Nairobi|Indian/Comoro","Africa/Nairobi|Indian/Mayotte","Africa/Tripoli|Libya","America/Adak|America/Atka","America/Adak|US/Aleutian","America/Anchorage|US/Alaska","America/Argentina/Buenos_Aires|America/Buenos_Aires","America/Argentina/Catamarca|America/Argentina/ComodRivadavia","America/Argentina/Catamarca|America/Catamarca","America/Argentina/Cordoba|America/Cordoba","America/Argentina/Cordoba|America/Rosario","America/Argentina/Jujuy|America/Jujuy","America/Argentina/Mendoza|America/Mendoza","America/Chicago|US/Central","America/Denver|America/Shiprock","America/Denver|Navajo","America/Denver|US/Mountain","America/Detroit|US/Michigan","America/Edmonton|America/Yellowknife","America/Edmonton|Canada/Mountain","America/Fort_Wayne|America/Indiana/Indianapolis","America/Fort_Wayne|America/Indianapolis","America/Fort_Wayne|US/East-Indiana","America/Godthab|America/Nuuk","America/Halifax|Canada/Atlantic","America/Havana|Cuba","America/Indiana/Knox|America/Knox_IN","America/Indiana/Knox|US/Indiana-Starke","America/Iqaluit|America/Pangnirtung","America/Jamaica|Jamaica","America/Kentucky/Louisville|America/Louisville","America/Los_Angeles|US/Pacific","America/Manaus|Brazil/West","America/Mazatlan|Mexico/BajaSur","America/Mexico_City|Mexico/General","America/New_York|US/Eastern","America/Noronha|Brazil/DeNoronha","America/Panama|America/Atikokan","America/Panama|America/Cayman","America/Panama|America/Coral_Harbour","America/Phoenix|America/Creston","America/Phoenix|US/Arizona","America/Puerto_Rico|America/Anguilla","America/Puerto_Rico|America/Antigua","America/Puerto_Rico|America/Aruba","America/Puerto_Rico|America/Blanc-Sablon","America/Puerto_Rico|America/Curacao","America/Puerto_Rico|America/Dominica","America/Puerto_Rico|America/Grenada","America/Puerto_Rico|America/Guadeloupe","America/Puerto_Rico|America/Kralendijk","America/Puerto_Rico|America/Lower_Princes","America/Puerto_Rico|America/Marigot","America/Puerto_Rico|America/Montserrat","America/Puerto_Rico|America/Port_of_Spain","America/Puerto_Rico|America/St_Barthelemy","America/Puerto_Rico|America/St_Kitts","America/Puerto_Rico|America/St_Lucia","America/Puerto_Rico|America/St_Thomas","America/Puerto_Rico|America/St_Vincent","America/Puerto_Rico|America/Tortola","America/Puerto_Rico|America/Virgin","America/Regina|Canada/Saskatchewan","America/Rio_Branco|America/Porto_Acre","America/Rio_Branco|Brazil/Acre","America/Santiago|Chile/Continental","America/Sao_Paulo|Brazil/East","America/St_Johns|Canada/Newfoundland","America/Tijuana|America/Ensenada","America/Tijuana|America/Santa_Isabel","America/Tijuana|Mexico/BajaNorte","America/Toronto|America/Montreal","America/Toronto|America/Nassau","America/Toronto|America/Nipigon","America/Toronto|America/Thunder_Bay","America/Toronto|Canada/Eastern","America/Vancouver|Canada/Pacific","America/Whitehorse|Canada/Yukon","America/Winnipeg|America/Rainy_River","America/Winnipeg|Canada/Central","Asia/Ashgabat|Asia/Ashkhabad","Asia/Bangkok|Asia/Phnom_Penh","Asia/Bangkok|Asia/Vientiane","Asia/Bangkok|Indian/Christmas","Asia/Brunei|Asia/Kuching","Asia/Dhaka|Asia/Dacca","Asia/Dubai|Asia/Muscat","Asia/Dubai|Indian/Mahe","Asia/Dubai|Indian/Reunion","Asia/Ho_Chi_Minh|Asia/Saigon","Asia/Hong_Kong|Hongkong","Asia/Jerusalem|Asia/Tel_Aviv","Asia/Jerusalem|Israel","Asia/Kathmandu|Asia/Katmandu","Asia/Kolkata|Asia/Calcutta","Asia/Kuala_Lumpur|Asia/Singapore","Asia/Kuala_Lumpur|Singapore","Asia/Macau|Asia/Macao","Asia/Makassar|Asia/Ujung_Pandang","Asia/Nicosia|Europe/Nicosia","Asia/Qatar|Asia/Bahrain","Asia/Rangoon|Asia/Yangon","Asia/Rangoon|Indian/Cocos","Asia/Riyadh|Antarctica/Syowa","Asia/Riyadh|Asia/Aden","Asia/Riyadh|Asia/Kuwait","Asia/Seoul|ROK","Asia/Shanghai|Asia/Chongqing","Asia/Shanghai|Asia/Chungking","Asia/Shanghai|Asia/Harbin","Asia/Shanghai|PRC","Asia/Taipei|ROC","Asia/Tehran|Iran","Asia/Thimphu|Asia/Thimbu","Asia/Tokyo|Japan","Asia/Ulaanbaatar|Asia/Ulan_Bator","Asia/Urumqi|Antarctica/Vostok","Asia/Urumqi|Asia/Kashgar","Atlantic/Faroe|Atlantic/Faeroe","Australia/Adelaide|Australia/South","Australia/Brisbane|Australia/Queensland","Australia/Broken_Hill|Australia/Yancowinna","Australia/Darwin|Australia/North","Australia/Hobart|Australia/Currie","Australia/Hobart|Australia/Tasmania","Australia/Lord_Howe|Australia/LHI","Australia/Melbourne|Australia/Victoria","Australia/Perth|Australia/West","Australia/Sydney|Australia/ACT","Australia/Sydney|Australia/Canberra","Australia/Sydney|Australia/NSW","Etc/GMT-0|Etc/GMT","Etc/GMT-0|Etc/GMT+0","Etc/GMT-0|Etc/GMT0","Etc/GMT-0|Etc/Greenwich","Etc/GMT-0|GMT","Etc/GMT-0|GMT+0","Etc/GMT-0|GMT-0","Etc/GMT-0|GMT0","Etc/GMT-0|Greenwich","Etc/UTC|Etc/UCT","Etc/UTC|Etc/Universal","Etc/UTC|Etc/Zulu","Etc/UTC|UCT","Etc/UTC|UTC","Etc/UTC|Universal","Etc/UTC|Zulu","Europe/Belgrade|Europe/Ljubljana","Europe/Belgrade|Europe/Podgorica","Europe/Belgrade|Europe/Sarajevo","Europe/Belgrade|Europe/Skopje","Europe/Belgrade|Europe/Zagreb","Europe/Berlin|Arctic/Longyearbyen","Europe/Berlin|Atlantic/Jan_Mayen","Europe/Berlin|Europe/Copenhagen","Europe/Berlin|Europe/Oslo","Europe/Berlin|Europe/Stockholm","Europe/Brussels|Europe/Amsterdam","Europe/Brussels|Europe/Luxembourg","Europe/Chisinau|Europe/Tiraspol","Europe/Dublin|Eire","Europe/Helsinki|Europe/Mariehamn","Europe/Istanbul|Asia/Istanbul","Europe/Istanbul|Turkey","Europe/Kiev|Europe/Kyiv","Europe/Kiev|Europe/Uzhgorod","Europe/Kiev|Europe/Zaporozhye","Europe/Lisbon|Portugal","Europe/London|Europe/Belfast","Europe/London|Europe/Guernsey","Europe/London|Europe/Isle_of_Man","Europe/London|Europe/Jersey","Europe/London|GB","Europe/London|GB-Eire","Europe/Moscow|W-SU","Europe/Paris|Europe/Monaco","Europe/Prague|Europe/Bratislava","Europe/Rome|Europe/San_Marino","Europe/Rome|Europe/Vatican","Europe/Warsaw|Poland","Europe/Zurich|Europe/Busingen","Europe/Zurich|Europe/Vaduz","Indian/Maldives|Indian/Kerguelen","Pacific/Auckland|Antarctica/McMurdo","Pacific/Auckland|Antarctica/South_Pole","Pacific/Auckland|NZ","Pacific/Chatham|NZ-CHAT","Pacific/Easter|Chile/EasterIsland","Pacific/Enderbury|Pacific/Kanton","Pacific/Guadalcanal|Pacific/Pohnpei","Pacific/Guadalcanal|Pacific/Ponape","Pacific/Guam|Pacific/Saipan","Pacific/Honolulu|Pacific/Johnston","Pacific/Honolulu|US/Hawaii","Pacific/Kwajalein|Kwajalein","Pacific/Pago_Pago|Pacific/Midway","Pacific/Pago_Pago|Pacific/Samoa","Pacific/Pago_Pago|US/Samoa","Pacific/Port_Moresby|Antarctica/DumontDUrville","Pacific/Port_Moresby|Pacific/Chuuk","Pacific/Port_Moresby|Pacific/Truk","Pacific/Port_Moresby|Pacific/Yap","Pacific/Tarawa|Pacific/Funafuti","Pacific/Tarawa|Pacific/Majuro","Pacific/Tarawa|Pacific/Wake","Pacific/Tarawa|Pacific/Wallis"],"countries":["AD|Europe/Andorra","AE|Asia/Dubai","AF|Asia/Kabul","AG|America/Puerto_Rico America/Antigua","AI|America/Puerto_Rico America/Anguilla","AL|Europe/Tirane","AM|Asia/Yerevan","AO|Africa/Lagos Africa/Luanda","AQ|Antarctica/Casey Antarctica/Davis Antarctica/Mawson Antarctica/Palmer Antarctica/Rothera Antarctica/Troll Asia/Urumqi Pacific/Auckland Pacific/Port_Moresby Asia/Riyadh Antarctica/McMurdo Antarctica/DumontDUrville Antarctica/Syowa Antarctica/Vostok","AR|America/Argentina/Buenos_Aires America/Argentina/Cordoba America/Argentina/Salta America/Argentina/Jujuy America/Argentina/Tucuman America/Argentina/Catamarca America/Argentina/La_Rioja America/Argentina/San_Juan America/Argentina/Mendoza America/Argentina/San_Luis America/Argentina/Rio_Gallegos America/Argentina/Ushuaia","AS|Pacific/Pago_Pago","AT|Europe/Vienna","AU|Australia/Lord_Howe Antarctica/Macquarie Australia/Hobart Australia/Melbourne Australia/Sydney Australia/Broken_Hill Australia/Brisbane Australia/Lindeman Australia/Adelaide Australia/Darwin Australia/Perth Australia/Eucla","AW|America/Puerto_Rico America/Aruba","AX|Europe/Helsinki Europe/Mariehamn","AZ|Asia/Baku","BA|Europe/Belgrade Europe/Sarajevo","BB|America/Barbados","BD|Asia/Dhaka","BE|Europe/Brussels","BF|Africa/Abidjan Africa/Ouagadougou","BG|Europe/Sofia","BH|Asia/Qatar Asia/Bahrain","BI|Africa/Maputo Africa/Bujumbura","BJ|Africa/Lagos Africa/Porto-Novo","BL|America/Puerto_Rico America/St_Barthelemy","BM|Atlantic/Bermuda","BN|Asia/Kuching Asia/Brunei","BO|America/La_Paz","BQ|America/Puerto_Rico America/Kralendijk","BR|America/Noronha America/Belem America/Fortaleza America/Recife America/Araguaina America/Maceio America/Bahia America/Sao_Paulo America/Campo_Grande America/Cuiaba America/Santarem America/Porto_Velho America/Boa_Vista America/Manaus America/Eirunepe America/Rio_Branco","BS|America/Toronto America/Nassau","BT|Asia/Thimphu","BW|Africa/Maputo Africa/Gaborone","BY|Europe/Minsk","BZ|America/Belize","CA|America/St_Johns America/Halifax America/Glace_Bay America/Moncton America/Goose_Bay America/Toronto America/Iqaluit America/Winnipeg America/Resolute America/Rankin_Inlet America/Regina America/Swift_Current America/Edmonton America/Cambridge_Bay America/Inuvik America/Dawson_Creek America/Fort_Nelson America/Whitehorse America/Dawson America/Vancouver America/Panama America/Puerto_Rico America/Phoenix America/Blanc-Sablon America/Atikokan America/Creston","CC|Asia/Yangon Indian/Cocos","CD|Africa/Maputo Africa/Lagos Africa/Kinshasa Africa/Lubumbashi","CF|Africa/Lagos Africa/Bangui","CG|Africa/Lagos Africa/Brazzaville","CH|Europe/Zurich","CI|Africa/Abidjan","CK|Pacific/Rarotonga","CL|America/Santiago America/Punta_Arenas Pacific/Easter","CM|Africa/Lagos Africa/Douala","CN|Asia/Shanghai Asia/Urumqi","CO|America/Bogota","CR|America/Costa_Rica","CU|America/Havana","CV|Atlantic/Cape_Verde","CW|America/Puerto_Rico America/Curacao","CX|Asia/Bangkok Indian/Christmas","CY|Asia/Nicosia Asia/Famagusta","CZ|Europe/Prague","DE|Europe/Zurich Europe/Berlin Europe/Busingen","DJ|Africa/Nairobi Africa/Djibouti","DK|Europe/Berlin Europe/Copenhagen","DM|America/Puerto_Rico America/Dominica","DO|America/Santo_Domingo","DZ|Africa/Algiers","EC|America/Guayaquil Pacific/Galapagos","EE|Europe/Tallinn","EG|Africa/Cairo","EH|Africa/El_Aaiun","ER|Africa/Nairobi Africa/Asmara","ES|Europe/Madrid Africa/Ceuta Atlantic/Canary","ET|Africa/Nairobi Africa/Addis_Ababa","FI|Europe/Helsinki","FJ|Pacific/Fiji","FK|Atlantic/Stanley","FM|Pacific/Kosrae Pacific/Port_Moresby Pacific/Guadalcanal Pacific/Chuuk Pacific/Pohnpei","FO|Atlantic/Faroe","FR|Europe/Paris","GA|Africa/Lagos Africa/Libreville","GB|Europe/London","GD|America/Puerto_Rico America/Grenada","GE|Asia/Tbilisi","GF|America/Cayenne","GG|Europe/London Europe/Guernsey","GH|Africa/Abidjan Africa/Accra","GI|Europe/Gibraltar","GL|America/Nuuk America/Danmarkshavn America/Scoresbysund America/Thule","GM|Africa/Abidjan Africa/Banjul","GN|Africa/Abidjan Africa/Conakry","GP|America/Puerto_Rico America/Guadeloupe","GQ|Africa/Lagos Africa/Malabo","GR|Europe/Athens","GS|Atlantic/South_Georgia","GT|America/Guatemala","GU|Pacific/Guam","GW|Africa/Bissau","GY|America/Guyana","HK|Asia/Hong_Kong","HN|America/Tegucigalpa","HR|Europe/Belgrade Europe/Zagreb","HT|America/Port-au-Prince","HU|Europe/Budapest","ID|Asia/Jakarta Asia/Pontianak Asia/Makassar Asia/Jayapura","IE|Europe/Dublin","IL|Asia/Jerusalem","IM|Europe/London Europe/Isle_of_Man","IN|Asia/Kolkata","IO|Indian/Chagos","IQ|Asia/Baghdad","IR|Asia/Tehran","IS|Africa/Abidjan Atlantic/Reykjavik","IT|Europe/Rome","JE|Europe/London Europe/Jersey","JM|America/Jamaica","JO|Asia/Amman","JP|Asia/Tokyo","KE|Africa/Nairobi","KG|Asia/Bishkek","KH|Asia/Bangkok Asia/Phnom_Penh","KI|Pacific/Tarawa Pacific/Kanton Pacific/Kiritimati","KM|Africa/Nairobi Indian/Comoro","KN|America/Puerto_Rico America/St_Kitts","KP|Asia/Pyongyang","KR|Asia/Seoul","KW|Asia/Riyadh Asia/Kuwait","KY|America/Panama America/Cayman","KZ|Asia/Almaty Asia/Qyzylorda Asia/Qostanay Asia/Aqtobe Asia/Aqtau Asia/Atyrau Asia/Oral","LA|Asia/Bangkok Asia/Vientiane","LB|Asia/Beirut","LC|America/Puerto_Rico America/St_Lucia","LI|Europe/Zurich Europe/Vaduz","LK|Asia/Colombo","LR|Africa/Monrovia","LS|Africa/Johannesburg Africa/Maseru","LT|Europe/Vilnius","LU|Europe/Brussels Europe/Luxembourg","LV|Europe/Riga","LY|Africa/Tripoli","MA|Africa/Casablanca","MC|Europe/Paris Europe/Monaco","MD|Europe/Chisinau","ME|Europe/Belgrade Europe/Podgorica","MF|America/Puerto_Rico America/Marigot","MG|Africa/Nairobi Indian/Antananarivo","MH|Pacific/Tarawa Pacific/Kwajalein Pacific/Majuro","MK|Europe/Belgrade Europe/Skopje","ML|Africa/Abidjan Africa/Bamako","MM|Asia/Yangon","MN|Asia/Ulaanbaatar Asia/Hovd Asia/Choibalsan","MO|Asia/Macau","MP|Pacific/Guam Pacific/Saipan","MQ|America/Martinique","MR|Africa/Abidjan Africa/Nouakchott","MS|America/Puerto_Rico America/Montserrat","MT|Europe/Malta","MU|Indian/Mauritius","MV|Indian/Maldives","MW|Africa/Maputo Africa/Blantyre","MX|America/Mexico_City America/Cancun America/Merida America/Monterrey America/Matamoros America/Chihuahua America/Ciudad_Juarez America/Ojinaga America/Mazatlan America/Bahia_Banderas America/Hermosillo America/Tijuana","MY|Asia/Kuching Asia/Singapore Asia/Kuala_Lumpur","MZ|Africa/Maputo","NA|Africa/Windhoek","NC|Pacific/Noumea","NE|Africa/Lagos Africa/Niamey","NF|Pacific/Norfolk","NG|Africa/Lagos","NI|America/Managua","NL|Europe/Brussels Europe/Amsterdam","NO|Europe/Berlin Europe/Oslo","NP|Asia/Kathmandu","NR|Pacific/Nauru","NU|Pacific/Niue","NZ|Pacific/Auckland Pacific/Chatham","OM|Asia/Dubai Asia/Muscat","PA|America/Panama","PE|America/Lima","PF|Pacific/Tahiti Pacific/Marquesas Pacific/Gambier","PG|Pacific/Port_Moresby Pacific/Bougainville","PH|Asia/Manila","PK|Asia/Karachi","PL|Europe/Warsaw","PM|America/Miquelon","PN|Pacific/Pitcairn","PR|America/Puerto_Rico","PS|Asia/Gaza Asia/Hebron","PT|Europe/Lisbon Atlantic/Madeira Atlantic/Azores","PW|Pacific/Palau","PY|America/Asuncion","QA|Asia/Qatar","RE|Asia/Dubai Indian/Reunion","RO|Europe/Bucharest","RS|Europe/Belgrade","RU|Europe/Kaliningrad Europe/Moscow Europe/Simferopol Europe/Kirov Europe/Volgograd Europe/Astrakhan Europe/Saratov Europe/Ulyanovsk Europe/Samara Asia/Yekaterinburg Asia/Omsk Asia/Novosibirsk Asia/Barnaul Asia/Tomsk Asia/Novokuznetsk Asia/Krasnoyarsk Asia/Irkutsk Asia/Chita Asia/Yakutsk Asia/Khandyga Asia/Vladivostok Asia/Ust-Nera Asia/Magadan Asia/Sakhalin Asia/Srednekolymsk Asia/Kamchatka Asia/Anadyr","RW|Africa/Maputo Africa/Kigali","SA|Asia/Riyadh","SB|Pacific/Guadalcanal","SC|Asia/Dubai Indian/Mahe","SD|Africa/Khartoum","SE|Europe/Berlin Europe/Stockholm","SG|Asia/Singapore","SH|Africa/Abidjan Atlantic/St_Helena","SI|Europe/Belgrade Europe/Ljubljana","SJ|Europe/Berlin Arctic/Longyearbyen","SK|Europe/Prague Europe/Bratislava","SL|Africa/Abidjan Africa/Freetown","SM|Europe/Rome Europe/San_Marino","SN|Africa/Abidjan Africa/Dakar","SO|Africa/Nairobi Africa/Mogadishu","SR|America/Paramaribo","SS|Africa/Juba","ST|Africa/Sao_Tome","SV|America/El_Salvador","SX|America/Puerto_Rico America/Lower_Princes","SY|Asia/Damascus","SZ|Africa/Johannesburg Africa/Mbabane","TC|America/Grand_Turk","TD|Africa/Ndjamena","TF|Asia/Dubai Indian/Maldives Indian/Kerguelen","TG|Africa/Abidjan Africa/Lome","TH|Asia/Bangkok","TJ|Asia/Dushanbe","TK|Pacific/Fakaofo","TL|Asia/Dili","TM|Asia/Ashgabat","TN|Africa/Tunis","TO|Pacific/Tongatapu","TR|Europe/Istanbul","TT|America/Puerto_Rico America/Port_of_Spain","TV|Pacific/Tarawa Pacific/Funafuti","TW|Asia/Taipei","TZ|Africa/Nairobi Africa/Dar_es_Salaam","UA|Europe/Simferopol Europe/Kyiv","UG|Africa/Nairobi Africa/Kampala","UM|Pacific/Pago_Pago Pacific/Tarawa Pacific/Midway Pacific/Wake","US|America/New_York America/Detroit America/Kentucky/Louisville America/Kentucky/Monticello America/Indiana/Indianapolis America/Indiana/Vincennes America/Indiana/Winamac America/Indiana/Marengo America/Indiana/Petersburg America/Indiana/Vevay America/Chicago America/Indiana/Tell_City America/Indiana/Knox America/Menominee America/North_Dakota/Center America/North_Dakota/New_Salem America/North_Dakota/Beulah America/Denver America/Boise America/Phoenix America/Los_Angeles America/Anchorage America/Juneau America/Sitka America/Metlakatla America/Yakutat America/Nome America/Adak Pacific/Honolulu","UY|America/Montevideo","UZ|Asia/Samarkand Asia/Tashkent","VA|Europe/Rome Europe/Vatican","VC|America/Puerto_Rico America/St_Vincent","VE|America/Caracas","VG|America/Puerto_Rico America/Tortola","VI|America/Puerto_Rico America/St_Thomas","VN|Asia/Bangkok Asia/Ho_Chi_Minh","VU|Pacific/Efate","WF|Pacific/Tarawa Pacific/Wallis","WS|Pacific/Apia","YE|Asia/Riyadh Asia/Aden","YT|Africa/Nairobi Indian/Mayotte","ZA|Africa/Johannesburg","ZM|Africa/Maputo Africa/Lusaka","ZW|Africa/Maputo Africa/Harare"]}')}},o={};function n(e){var M=o[e];if(void 0!==M)return M.exports;var b=o[e]={id:e,loaded:!1,exports:{}};return t[e].call(b.exports,b,b.exports,n),b.loaded=!0,b.exports}n.n=e=>{var M=e&&e.__esModule?()=>e.default:()=>e;return n.d(M,{a:M}),M},M=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,n.t=function(t,o){if(1&o&&(t=this(t)),8&o)return t;if("object"==typeof t&&t){if(4&o&&t.__esModule)return t;if(16&o&&"function"==typeof t.then)return t}var b=Object.create(null);n.r(b);var p={};e=e||[null,M({}),M([]),M(M)];for(var z=2&o&&t;"object"==typeof z&&!~e.indexOf(z);z=M(z))Object.getOwnPropertyNames(z).forEach((e=>p[e]=()=>t[e]));return p.default=()=>t,n.d(b,p),b},n.d=(e,M)=>{for(var t in M)n.o(M,t)&&!n.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:M[t]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,M)=>Object.prototype.hasOwnProperty.call(e,M),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{"use strict";var e={};n.r(e),n.d(e,{Text:()=>sO,block:()=>dO,destructive:()=>uO,highlighterText:()=>qO,muted:()=>AO,positive:()=>lO,upperCase:()=>fO});var M=n(7294),t=n.t(M,2);const o=ampSettings;var b=n(745);const p=window.wp.i18n;var z=n(3935);const c=window.wp.apiFetch;var a=n.n(c);function r(e){try{return decodeURIComponent(e)}catch(M){return e}}function O(e){let M;try{M=new URL(e,"http://example.com").search.substring(1)}catch(e){}if(M)return M}function i(e){return(O(e)||"").replace(/\+/g,"%20").split("&").reduce(((e,M)=>{const[t,o=""]=M.split("=").filter(Boolean).map(r);return t&&function(e,M,t){const o=M.length,n=o-1;for(let b=0;b<o;b++){let o=M[b];!o&&Array.isArray(e)&&(o=e.length.toString()),o=["__proto__","constructor","prototype"].includes(o)?o.toUpperCase():o;const p=!isNaN(Number(M[b+1]));e[o]=b===n?t:e[o]||(p?[]:{}),Array.isArray(e[o])&&!p&&(e[o]={...e[o]}),e=e[o]}}(e,t.replace(/\]/g,"").split("["),o),e}),Object.create(null))}function s(e){let M="";const t=Object.entries(e);let o;for(;o=t.shift();){let[e,n]=o;if(Array.isArray(n)||n&&n.constructor===Object){const M=Object.entries(n).reverse();for(const[o,n]of M)t.unshift([`${e}[${o}]`,n])}else void 0!==n&&(null===n&&(n=""),M+="&"+[e,n].map(encodeURIComponent).join("="))}return M.substr(1)}function d(e="",M){if(!M||!Object.keys(M).length)return e;let t=e;const o=e.indexOf("?");return-1!==o&&(M=Object.assign(i(e),M),t=t.substr(0,o)),t+"?"+s(M)}function l(){const[e,t]=(0,M.useState)(),o=(0,M.useCallback)((e=>{t((()=>{throw e}))}),[]);return{error:e,setAsyncError:o}}const u=(0,M.createContext)();function A({children:e}){const[t,o]=(0,M.useState)(null);return(0,M.createElement)(u.Provider,{value:{error:t,setError:o}},e)}const q=(0,M.createContext)();function f({children:e,optionsRestPath:t,populateDefaultValues:o,hasErrorBoundary:n=!1,delaySave:b=!1}){const[p,c]=(0,M.useState)({}),[r,O]=(0,M.useState)(!1),[i,s]=(0,M.useState)(null),[A,f]=(0,M.useState)({}),[m,W]=(0,M.useState)(!1),[_,h]=(0,M.useState)(!1),[L,R]=(0,M.useState)({}),[g,y]=(0,M.useState)({}),{error:v,setError:N}=(0,M.useContext)(u),{setAsyncError:k}=l(),[T,B]=(0,M.useState)(!1),w=(0,M.useRef)(!1);(0,M.useEffect)((()=>()=>{w.current=!0}),[]);const S=(0,M.useCallback)((()=>{v||r||(async()=>{O(!0);try{const e=await a()({path:d(t,{_fields:["suppressed_plugins","suppressible_plugins"]})});if(!0===w.current)return;R({...L,...e})}catch(e){if(!0===w.current)return;return N(e),void(n&&k(e))}O(!1)})()}),[v,r,n,t,L,k,N]);(0,M.useEffect)((()=>{v||Object.keys(L).length||i||(async()=>{s(!0);try{const e=await a()({path:t});if(!0===w.current)return;o||!1!==e.plugin_configured||(e.mobile_redirect=!0,e.reader_theme=null,e.theme_support=null),R(e)}catch(e){if(!0===w.current)return;return N(e),void(n&&k(e))}s(!1)})()}),[v,i,n,L,t,o,k,N]);const E=(0,M.useCallback)((async()=>{W(!0);try{const e={...p};null===e.reader_theme&&delete e.reader_theme,L.plugin_configured||"mobile_redirect"in e||(e.mobile_redirect=L.mobile_redirect),L.plugin_configured||(e.plugin_configured=!0);const[M]=await Promise.all([a()({method:"post",path:t,data:e}),b?new Promise((e=>{setTimeout(e,1e3)})):()=>{}]);if(!0===w.current)return;R(M),N(null)}catch(e){if(!0===w.current)return;return W(!1),N(e),void(n&&k(e))}y({...g,...p}),(0,z.flushSync)((()=>{f(p),c({}),h(!0)})),W(!1)}),[b,n,t,k,L,N,p,g]),X=(0,M.useCallback)((e=>{c({...p,...e}),h(!1)}),[p]),Y=(0,M.useCallback)((e=>{const M={...p};delete M[e],c(M)}),[p]);return(0,M.createElement)(q.Provider,{value:{editedOptions:{...L,...p},fetchingOptions:i,hasOptionsChanges:Boolean(Object.keys(p).length),didSaveOptions:_,updates:p,originalOptions:L,saveOptions:E,savedOptions:A,savingOptions:m,unsetOption:Y,updateOptions:X,readerModeWasOverridden:T,refetchPluginSuppression:S,setReaderModeWasOverridden:B,modifiedOptions:g}},e)}const m="reader",W="standard",_="transitional",h=783,L=(0,M.createContext)();function R({wpAjaxUrl:e,children:t,currentTheme:b,hideCurrentlyActiveTheme:z=!1,readerThemesRestPath:c,updatesNonce:r,hasErrorBoundary:O=!1}){const{setAsyncError:i}=l(),{error:s,setError:d}=(0,M.useContext)(u),[A,f]=(0,M.useState)(null),[W,h]=(0,M.useState)(!1),[R,g]=(0,M.useState)(null),[y,v]=(0,M.useState)(null),[N,k]=(0,M.useState)(!1),[T,B]=(0,M.useState)(!1),[w,S]=(0,M.useState)(null),{didSaveOptions:E,editedOptions:X,originalOptions:Y,updateOptions:D,savingOptions:x}=(0,M.useContext)(q),{reader_theme:C,theme_support:P}=Y,{reader_theme:H,theme_support:j}=X,F=(0,M.useRef)(!1);(0,M.useEffect)((()=>()=>{F.current=!0}),[]);const{originalSelectedTheme:I,selectedTheme:U}=(0,M.useMemo)((()=>{const e={name:null,availability:null};return R?{originalSelectedTheme:R.find((({slug:e})=>e===C))||e,selectedTheme:R.find((({slug:e})=>e===H))||e}:{originalSelectedTheme:e,selectedTheme:e}}),[C,H,R]),[V,$]=(0,M.useState)(null);(0,M.useEffect)((()=>{if(null===A){if(P&&P!==m)return void f(!1);I.availability&&f(!1)}A?E&&f(!1):P===m&&"active"===I.availability&&(D({theme_support:_,reader_theme:o.LEGACY_THEME_SLUG}),f(!0))}),[E,P,I.availability,A,D]),(0,M.useEffect)((()=>{W||("non-installable"===U.availability||o.USING_FALLBACK_READER_THEME)&&(D({reader_theme:o.LEGACY_THEME_SLUG}),h(!0))}),[I.availability,U.availability,W,D]),(0,M.useEffect)((()=>{U&&x&&!N&&"installable"===U.availability&&(async()=>{if(!N&&!V){k(!0);try{const M=new n.g.FormData;M.append("action","install-theme"),M.append("slug",U.slug),M.append("_wpnonce",r);const t=await n.g.fetch(e,{body:M,method:"POST"});if(!0===F.current)return;if(!t.ok)throw new Error((0,p.__)("Reader theme failed to download.","amp"));B(U.slug)}catch(e){if(!0===F.current)return;$(e)}k(!1)}})()}),[e,N,V,x,U,j,r]),(0,M.useEffect)((()=>{y||(s||!c||R||m!==j?v(!1):(async()=>{v(!0);try{const e=await a()({path:c,parse:!1});S(e.headers.get("X-AMP-Theme-API-Error"));const M=await e.json();if(!0===F.current)return;g(M)}catch(e){if(!0===F.current)return;return d(e),void(O&&i(e))}v(!1)})())}),[s,O,y,c,i,d,R,j]);const{filteredThemes:G}=(0,M.useMemo)((()=>{let e;return e=z?(R||[]).filter((e=>"active"!==e.availability)):R,{filteredThemes:e}}),[z,R]),{availableThemes:J,unavailableThemes:K}=(0,M.useMemo)((()=>(G||[]).reduce(((e,M)=>("non-installable"===M.availability?e.unavailableThemes.push(M):e.availableThemes.push(M),e)),{availableThemes:[],unavailableThemes:[]})),[G]);return(0,M.createElement)(L.Provider,{value:{availableThemes:J,currentTheme:b,downloadedTheme:T,downloadingTheme:N,downloadingThemeError:V,fetchingThemes:y,selectedTheme:U||{},templateModeWasOverridden:A,themes:G,themesAPIError:w,unavailableThemes:K}},t)}const g=(0,M.createContext)();function y({children:e,hasErrorBoundary:t=!1}){const[o,n]=(0,M.useState)({}),[b,p]=(0,M.useState)(!1),{error:z,setError:c}=(0,M.useContext)(u),{setAsyncError:r}=l();return(0,M.useEffect)((()=>{if(z||Object.keys(o).length||b)return()=>{};let e=!1;return(async()=>{try{const M=await a()({path:"/wp/v2/settings"});if(e)return;n(M)}catch(M){if(e)return;return c(M),void(t&&r(M))}p(!1)})(),()=>{e=!0}}),[z,o,b,c,t,r]),(0,M.createElement)(g.Provider,{value:{settings:o,fetchingSiteSettings:b}},e)}var v=n(4184),N=n.n(v);function k(){return k=Object.assign?Object.assign.bind():function(e){for(var M=1;M<arguments.length;M++){var t=arguments[M];for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o])}return e},k.apply(this,arguments)}function T(e){var M=Object.create(null);return function(t){return void 0===M[t]&&(M[t]=e(t)),M[t]}}var B=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/,w=T((function(e){return B.test(e)||111===e.charCodeAt(0)&&110===e.charCodeAt(1)&&e.charCodeAt(2)<91})),S=function(){function e(e){var M=this;this._insertTag=function(e){var t;t=0===M.tags.length?M.insertionPoint?M.insertionPoint.nextSibling:M.prepend?M.container.firstChild:M.before:M.tags[M.tags.length-1].nextSibling,M.container.insertBefore(e,t),M.tags.push(e)},this.isSpeedy=void 0===e.speedy||e.speedy,this.tags=[],this.ctr=0,this.nonce=e.nonce,this.key=e.key,this.container=e.container,this.prepend=e.prepend,this.insertionPoint=e.insertionPoint,this.before=null}var M=e.prototype;return M.hydrate=function(e){e.forEach(this._insertTag)},M.insert=function(e){this.ctr%(this.isSpeedy?65e3:1)==0&&this._insertTag(function(e){var M=document.createElement("style");return M.setAttribute("data-emotion",e.key),void 0!==e.nonce&&M.setAttribute("nonce",e.nonce),M.appendChild(document.createTextNode("")),M.setAttribute("data-s",""),M}(this));var M=this.tags[this.tags.length-1];if(this.isSpeedy){var t=function(e){if(e.sheet)return e.sheet;for(var M=0;M<document.styleSheets.length;M++)if(document.styleSheets[M].ownerNode===e)return document.styleSheets[M]}(M);try{t.insertRule(e,t.cssRules.length)}catch(e){}}else M.appendChild(document.createTextNode(e));this.ctr++},M.flush=function(){this.tags.forEach((function(e){return e.parentNode&&e.parentNode.removeChild(e)})),this.tags=[],this.ctr=0},e}(),E=Math.abs,X=String.fromCharCode,Y=Object.assign;function D(e){return e.trim()}function x(e,M,t){return e.replace(M,t)}function C(e,M){return e.indexOf(M)}function P(e,M){return 0|e.charCodeAt(M)}function H(e,M,t){return e.slice(M,t)}function j(e){return e.length}function F(e){return e.length}function I(e,M){return M.push(e),e}var U=1,V=1,$=0,G=0,J=0,K="";function Q(e,M,t,o,n,b,p){return{value:e,root:M,parent:t,type:o,props:n,children:b,line:U,column:V,length:p,return:""}}function Z(e,M){return Y(Q("",null,null,"",null,null,0),e,{length:-e.length},M)}function ee(){return J=G>0?P(K,--G):0,V--,10===J&&(V=1,U--),J}function Me(){return J=G<$?P(K,G++):0,V++,10===J&&(V=1,U++),J}function te(){return P(K,G)}function oe(){return G}function ne(e,M){return H(K,e,M)}function be(e){switch(e){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function pe(e){return U=V=1,$=j(K=e),G=0,[]}function ze(e){return K="",e}function ce(e){return D(ne(G-1,Oe(91===e?e+2:40===e?e+1:e)))}function ae(e){for(;(J=te())&&J<33;)Me();return be(e)>2||be(J)>3?"":" "}function re(e,M){for(;--M&&Me()&&!(J<48||J>102||J>57&&J<65||J>70&&J<97););return ne(e,oe()+(M<6&&32==te()&&32==Me()))}function Oe(e){for(;Me();)switch(J){case e:return G;case 34:case 39:34!==e&&39!==e&&Oe(J);break;case 40:41===e&&Oe(e);break;case 92:Me()}return G}function ie(e,M){for(;Me()&&e+J!==57&&(e+J!==84||47!==te()););return"/*"+ne(M,G-1)+"*"+X(47===e?e:Me())}function se(e){for(;!be(te());)Me();return ne(e,G)}var de="-ms-",le="-moz-",ue="-webkit-",Ae="comm",qe="rule",fe="decl",me="@keyframes";function We(e,M){for(var t="",o=F(e),n=0;n<o;n++)t+=M(e[n],n,e,M)||"";return t}function _e(e,M,t,o){switch(e.type){case"@layer":if(e.children.length)break;case"@import":case fe:return e.return=e.return||e.value;case Ae:return"";case me:return e.return=e.value+"{"+We(e.children,o)+"}";case qe:e.value=e.props.join(",")}return j(t=We(e.children,o))?e.return=e.value+"{"+t+"}":""}function he(e){return ze(Le("",null,null,null,[""],e=pe(e),0,[0],e))}function Le(e,M,t,o,n,b,p,z,c){for(var a=0,r=0,O=p,i=0,s=0,d=0,l=1,u=1,A=1,q=0,f="",m=n,W=b,_=o,h=f;u;)switch(d=q,q=Me()){case 40:if(108!=d&&58==P(h,O-1)){-1!=C(h+=x(ce(q),"&","&\f"),"&\f")&&(A=-1);break}case 34:case 39:case 91:h+=ce(q);break;case 9:case 10:case 13:case 32:h+=ae(d);break;case 92:h+=re(oe()-1,7);continue;case 47:switch(te()){case 42:case 47:I(ge(ie(Me(),oe()),M,t),c);break;default:h+="/"}break;case 123*l:z[a++]=j(h)*A;case 125*l:case 59:case 0:switch(q){case 0:case 125:u=0;case 59+r:-1==A&&(h=x(h,/\f/g,"")),s>0&&j(h)-O&&I(s>32?ye(h+";",o,t,O-1):ye(x(h," ","")+";",o,t,O-2),c);break;case 59:h+=";";default:if(I(_=Re(h,M,t,a,r,n,z,f,m=[],W=[],O),b),123===q)if(0===r)Le(h,M,_,_,m,b,O,z,W);else switch(99===i&&110===P(h,3)?100:i){case 100:case 108:case 109:case 115:Le(e,_,_,o&&I(Re(e,_,_,0,0,n,z,f,n,m=[],O),W),n,W,O,z,o?m:W);break;default:Le(h,_,_,_,[""],W,0,z,W)}}a=r=s=0,l=A=1,f=h="",O=p;break;case 58:O=1+j(h),s=d;default:if(l<1)if(123==q)--l;else if(125==q&&0==l++&&125==ee())continue;switch(h+=X(q),q*l){case 38:A=r>0?1:(h+="\f",-1);break;case 44:z[a++]=(j(h)-1)*A,A=1;break;case 64:45===te()&&(h+=ce(Me())),i=te(),r=O=j(f=h+=se(oe())),q++;break;case 45:45===d&&2==j(h)&&(l=0)}}return b}function Re(e,M,t,o,n,b,p,z,c,a,r){for(var O=n-1,i=0===n?b:[""],s=F(i),d=0,l=0,u=0;d<o;++d)for(var A=0,q=H(e,O+1,O=E(l=p[d])),f=e;A<s;++A)(f=D(l>0?i[A]+" "+q:x(q,/&\f/g,i[A])))&&(c[u++]=f);return Q(e,M,t,0===n?qe:z,c,a,r)}function ge(e,M,t){return Q(e,M,t,Ae,X(J),H(e,2,-2),0)}function ye(e,M,t,o){return Q(e,M,t,fe,H(e,0,o),H(e,o+1,-1),o)}var ve=function(e,M,t){for(var o=0,n=0;o=n,n=te(),38===o&&12===n&&(M[t]=1),!be(n);)Me();return ne(e,G)},Ne=new WeakMap,ke=function(e){if("rule"===e.type&&e.parent&&!(e.length<1)){for(var M=e.value,t=e.parent,o=e.column===t.column&&e.line===t.line;"rule"!==t.type;)if(!(t=t.parent))return;if((1!==e.props.length||58===M.charCodeAt(0)||Ne.get(t))&&!o){Ne.set(e,!0);for(var n=[],b=function(e,M){return ze(function(e,M){var t=-1,o=44;do{switch(be(o)){case 0:38===o&&12===te()&&(M[t]=1),e[t]+=ve(G-1,M,t);break;case 2:e[t]+=ce(o);break;case 4:if(44===o){e[++t]=58===te()?"&\f":"",M[t]=e[t].length;break}default:e[t]+=X(o)}}while(o=Me());return e}(pe(e),M))}(M,n),p=t.props,z=0,c=0;z<b.length;z++)for(var a=0;a<p.length;a++,c++)e.props[c]=n[z]?b[z].replace(/&\f/g,p[a]):p[a]+" "+b[z]}}},Te=function(e){if("decl"===e.type){var M=e.value;108===M.charCodeAt(0)&&98===M.charCodeAt(2)&&(e.return="",e.value="")}};function Be(e,M){switch(function(e,M){return 45^P(e,0)?(((M<<2^P(e,0))<<2^P(e,1))<<2^P(e,2))<<2^P(e,3):0}(e,M)){case 5103:return ue+"print-"+e+e;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return ue+e+e;case 5349:case 4246:case 4810:case 6968:case 2756:return ue+e+le+e+de+e+e;case 6828:case 4268:return ue+e+de+e+e;case 6165:return ue+e+de+"flex-"+e+e;case 5187:return ue+e+x(e,/(\w+).+(:[^]+)/,ue+"box-$1$2"+de+"flex-$1$2")+e;case 5443:return ue+e+de+"flex-item-"+x(e,/flex-|-self/,"")+e;case 4675:return ue+e+de+"flex-line-pack"+x(e,/align-content|flex-|-self/,"")+e;case 5548:return ue+e+de+x(e,"shrink","negative")+e;case 5292:return ue+e+de+x(e,"basis","preferred-size")+e;case 6060:return ue+"box-"+x(e,"-grow","")+ue+e+de+x(e,"grow","positive")+e;case 4554:return ue+x(e,/([^-])(transform)/g,"$1"+ue+"$2")+e;case 6187:return x(x(x(e,/(zoom-|grab)/,ue+"$1"),/(image-set)/,ue+"$1"),e,"")+e;case 5495:case 3959:return x(e,/(image-set\([^]*)/,ue+"$1$`$1");case 4968:return x(x(e,/(.+:)(flex-)?(.*)/,ue+"box-pack:$3"+de+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+ue+e+e;case 4095:case 3583:case 4068:case 2532:return x(e,/(.+)-inline(.+)/,ue+"$1$2")+e;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(j(e)-1-M>6)switch(P(e,M+1)){case 109:if(45!==P(e,M+4))break;case 102:return x(e,/(.+:)(.+)-([^]+)/,"$1"+ue+"$2-$3$1"+le+(108==P(e,M+3)?"$3":"$2-$3"))+e;case 115:return~C(e,"stretch")?Be(x(e,"stretch","fill-available"),M)+e:e}break;case 4949:if(115!==P(e,M+1))break;case 6444:switch(P(e,j(e)-3-(~C(e,"!important")&&10))){case 107:return x(e,":",":"+ue)+e;case 101:return x(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+ue+(45===P(e,14)?"inline-":"")+"box$3$1"+ue+"$2$3$1"+de+"$2box$3")+e}break;case 5936:switch(P(e,M+11)){case 114:return ue+e+de+x(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return ue+e+de+x(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return ue+e+de+x(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return ue+e+de+e+e}return e}var we=[function(e,M,t,o){if(e.length>-1&&!e.return)switch(e.type){case fe:e.return=Be(e.value,e.length);break;case me:return We([Z(e,{value:x(e.value,"@","@"+ue)})],o);case qe:if(e.length)return function(e,M){return e.map(M).join("")}(e.props,(function(M){switch(function(e,M){return(e=/(::plac\w+|:read-\w+)/.exec(e))?e[0]:e}(M)){case":read-only":case":read-write":return We([Z(e,{props:[x(M,/:(read-\w+)/,":-moz-$1")]})],o);case"::placeholder":return We([Z(e,{props:[x(M,/:(plac\w+)/,":"+ue+"input-$1")]}),Z(e,{props:[x(M,/:(plac\w+)/,":-moz-$1")]}),Z(e,{props:[x(M,/:(plac\w+)/,de+"input-$1")]})],o)}return""}))}}],Se=function(e){var M=e.key;if("css"===M){var t=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(t,(function(e){-1!==e.getAttribute("data-emotion").indexOf(" ")&&(document.head.appendChild(e),e.setAttribute("data-s",""))}))}var o,n,b=e.stylisPlugins||we,p={},z=[];o=e.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+M+' "]'),(function(e){for(var M=e.getAttribute("data-emotion").split(" "),t=1;t<M.length;t++)p[M[t]]=!0;z.push(e)}));var c,a,r,O,i=[_e,(O=function(e){c.insert(e)},function(e){e.root||(e=e.return)&&O(e)})],s=(a=[ke,Te].concat(b,i),r=F(a),function(e,M,t,o){for(var n="",b=0;b<r;b++)n+=a[b](e,M,t,o)||"";return n});n=function(e,M,t,o){c=t,We(he(e?e+"{"+M.styles+"}":M.styles),s),o&&(d.inserted[M.name]=!0)};var d={key:M,sheet:new S({key:M,container:o,nonce:e.nonce,speedy:e.speedy,prepend:e.prepend,insertionPoint:e.insertionPoint}),nonce:e.nonce,inserted:p,registered:{},insert:n};return d.sheet.hydrate(z),d},Ee={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},Xe=/[A-Z]|^ms/g,Ye=/_EMO_([^_]+?)_([^]*?)_EMO_/g,De=function(e){return 45===e.charCodeAt(1)},xe=function(e){return null!=e&&"boolean"!=typeof e},Ce=T((function(e){return De(e)?e:e.replace(Xe,"-$&").toLowerCase()})),Pe=function(e,M){switch(e){case"animation":case"animationName":if("string"==typeof M)return M.replace(Ye,(function(e,M,t){return je={name:M,styles:t,next:je},M}))}return 1===Ee[e]||De(e)||"number"!=typeof M||0===M?M:M+"px"};function He(e,M,t){if(null==t)return"";if(void 0!==t.__emotion_styles)return t;switch(typeof t){case"boolean":return"";case"object":if(1===t.anim)return je={name:t.name,styles:t.styles,next:je},t.name;if(void 0!==t.styles){var o=t.next;if(void 0!==o)for(;void 0!==o;)je={name:o.name,styles:o.styles,next:je},o=o.next;return t.styles+";"}return function(e,M,t){var o="";if(Array.isArray(t))for(var n=0;n<t.length;n++)o+=He(e,M,t[n])+";";else for(var b in t){var p=t[b];if("object"!=typeof p)null!=M&&void 0!==M[p]?o+=b+"{"+M[p]+"}":xe(p)&&(o+=Ce(b)+":"+Pe(b,p)+";");else if(!Array.isArray(p)||"string"!=typeof p[0]||null!=M&&void 0!==M[p[0]]){var z=He(e,M,p);switch(b){case"animation":case"animationName":o+=Ce(b)+":"+z+";";break;default:o+=b+"{"+z+"}"}}else for(var c=0;c<p.length;c++)xe(p[c])&&(o+=Ce(b)+":"+Pe(b,p[c])+";")}return o}(e,M,t);case"function":if(void 0!==e){var n=je,b=t(e);return je=n,He(e,M,b)}}if(null==M)return t;var p=M[t];return void 0!==p?p:t}var je,Fe=/label:\s*([^\s;\n{]+)\s*(;|$)/g,Ie=function(e,M,t){if(1===e.length&&"object"==typeof e[0]&&null!==e[0]&&void 0!==e[0].styles)return e[0];var o=!0,n="";je=void 0;var b=e[0];null==b||void 0===b.raw?(o=!1,n+=He(t,M,b)):n+=b[0];for(var p=1;p<e.length;p++)n+=He(t,M,e[p]),o&&(n+=b[p]);Fe.lastIndex=0;for(var z,c="";null!==(z=Fe.exec(n));)c+="-"+z[1];var a=function(e){for(var M,t=0,o=0,n=e.length;n>=4;++o,n-=4)M=1540483477*(65535&(M=255&e.charCodeAt(o)|(255&e.charCodeAt(++o))<<8|(255&e.charCodeAt(++o))<<16|(255&e.charCodeAt(++o))<<24))+(59797*(M>>>16)<<16),t=1540483477*(65535&(M^=M>>>24))+(59797*(M>>>16)<<16)^1540483477*(65535&t)+(59797*(t>>>16)<<16);switch(n){case 3:t^=(255&e.charCodeAt(o+2))<<16;case 2:t^=(255&e.charCodeAt(o+1))<<8;case 1:t=1540483477*(65535&(t^=255&e.charCodeAt(o)))+(59797*(t>>>16)<<16)}return(((t=1540483477*(65535&(t^=t>>>13))+(59797*(t>>>16)<<16))^t>>>15)>>>0).toString(36)}(n)+c;return{name:a,styles:n,next:je}},Ue=!!t.useInsertionEffect&&t.useInsertionEffect,Ve=Ue||function(e){return e()},$e=(Ue||M.useLayoutEffect,M.createContext("undefined"!=typeof HTMLElement?Se({key:"css"}):null));$e.Provider;var Ge=M.createContext({});function Je(e,M,t){var o="";return t.split(" ").forEach((function(t){void 0!==e[t]?M.push(e[t]+";"):o+=t+" "})),o}var Ke=function(e,M,t){var o=e.key+"-"+M.name;!1===t&&void 0===e.registered[o]&&(e.registered[o]=M.styles)},Qe=function(e,M,t){Ke(e,M,t);var o=e.key+"-"+M.name;if(void 0===e.inserted[M.name]){var n=M;do{e.insert(M===n?"."+o:"",n,e.sheet,!0),n=n.next}while(void 0!==n)}},Ze=w,eM=function(e){return"theme"!==e},MM=function(e){return"string"==typeof e&&e.charCodeAt(0)>96?Ze:eM},tM=function(e,M,t){var o;if(M){var n=M.shouldForwardProp;o=e.__emotion_forwardProp&&n?function(M){return e.__emotion_forwardProp(M)&&n(M)}:n}return"function"!=typeof o&&t&&(o=e.__emotion_forwardProp),o},oM=function(e){var M=e.cache,t=e.serialized,o=e.isStringTag;return Ke(M,t,o),Ve((function(){return Qe(M,t,o)})),null},nM=function e(t,o){var n,b,p=t.__emotion_real===t,z=p&&t.__emotion_base||t;void 0!==o&&(n=o.label,b=o.target);var c=tM(t,o,p),a=c||MM(z),r=!a("as");return function(){var O=arguments,i=p&&void 0!==t.__emotion_styles?t.__emotion_styles.slice(0):[];if(void 0!==n&&i.push("label:"+n+";"),null==O[0]||void 0===O[0].raw)i.push.apply(i,O);else{i.push(O[0][0]);for(var s=O.length,d=1;d<s;d++)i.push(O[d],O[0][d])}var l,u=(l=function(e,t,o){var n=r&&e.as||z,p="",O=[],s=e;if(null==e.theme){for(var d in s={},e)s[d]=e[d];s.theme=M.useContext(Ge)}"string"==typeof e.className?p=Je(t.registered,O,e.className):null!=e.className&&(p=e.className+" ");var l=Ie(i.concat(O),t.registered,s);p+=t.key+"-"+l.name,void 0!==b&&(p+=" "+b);var u=r&&void 0===c?MM(n):a,A={};for(var q in e)r&&"as"===q||u(q)&&(A[q]=e[q]);return A.className=p,A.ref=o,M.createElement(M.Fragment,null,M.createElement(oM,{cache:t,serialized:l,isStringTag:"string"==typeof n}),M.createElement(n,A))},(0,M.forwardRef)((function(e,t){var o=(0,M.useContext)($e);return l(e,o,t)})));return u.displayName=void 0!==n?n:"Styled("+("string"==typeof z?z:z.displayName||z.name||"Component")+")",u.defaultProps=t.defaultProps,u.__emotion_real=u,u.__emotion_base=z,u.__emotion_styles=i,u.__emotion_forwardProp=c,Object.defineProperty(u,"toString",{value:function(){return"."+b}}),u.withComponent=function(M,t){return e(M,k({},o,t,{shouldForwardProp:tM(u,t,!0)})).apply(void 0,i)},u}};function bM(){for(var e=arguments.length,M=new Array(e),t=0;t<e;t++)M[t]=arguments[t];return Ie(M)}n(8679);const pM="4px";function zM(e){if(void 0===e)return;if(!e)return"0";const M="number"==typeof e?e:Number(e);return"undefined"!=typeof window&&window.CSS?.supports?.("margin",e.toString())||Number.isNaN(M)?e.toString():`calc(${pM} * ${e})`}function cM(e,M){var t,o,n=0;function b(){var b,p,z=t,c=arguments.length;e:for(;z;){if(z.args.length===arguments.length){for(p=0;p<c;p++)if(z.args[p]!==arguments[p]){z=z.next;continue e}return z!==t&&(z===o&&(o=z.prev),z.prev.next=z.next,z.next&&(z.next.prev=z.prev),z.next=t,z.prev=null,t.prev=z,t=z),z.val}z=z.next}for(b=new Array(c),p=0;p<c;p++)b[p]=arguments[p];return z={args:b,val:e.apply(null,b)},t?(t.prev=z,z.next=t):o=z,n===M.maxSize?(o=o.prev).next=null:n++,t=z,z.val}return M=M||{},b.clear=function(){t=null,o=null,n=0},b}var aM={grad:.9,turn:360,rad:360/(2*Math.PI)},rM=function(e){return"string"==typeof e?e.length>0:"number"==typeof e},OM=function(e,M,t){return void 0===M&&(M=0),void 0===t&&(t=Math.pow(10,M)),Math.round(t*e)/t+0},iM=function(e,M,t){return void 0===M&&(M=0),void 0===t&&(t=1),e>t?t:e>M?e:M},sM=function(e){return(e=isFinite(e)?e%360:0)>0?e:e+360},dM=function(e){return{r:iM(e.r,0,255),g:iM(e.g,0,255),b:iM(e.b,0,255),a:iM(e.a)}},lM=function(e){return{r:OM(e.r),g:OM(e.g),b:OM(e.b),a:OM(e.a,3)}},uM=/^#([0-9a-f]{3,8})$/i,AM=function(e){var M=e.toString(16);return M.length<2?"0"+M:M},qM=function(e){var M=e.r,t=e.g,o=e.b,n=e.a,b=Math.max(M,t,o),p=b-Math.min(M,t,o),z=p?b===M?(t-o)/p:b===t?2+(o-M)/p:4+(M-t)/p:0;return{h:60*(z<0?z+6:z),s:b?p/b*100:0,v:b/255*100,a:n}},fM=function(e){var M=e.h,t=e.s,o=e.v,n=e.a;M=M/360*6,t/=100,o/=100;var b=Math.floor(M),p=o*(1-t),z=o*(1-(M-b)*t),c=o*(1-(1-M+b)*t),a=b%6;return{r:255*[o,z,p,p,c,o][a],g:255*[c,o,o,z,p,p][a],b:255*[p,p,c,o,o,z][a],a:n}},mM=function(e){return{h:sM(e.h),s:iM(e.s,0,100),l:iM(e.l,0,100),a:iM(e.a)}},WM=function(e){return{h:OM(e.h),s:OM(e.s),l:OM(e.l),a:OM(e.a,3)}},_M=function(e){return fM((t=(M=e).s,{h:M.h,s:(t*=((o=M.l)<50?o:100-o)/100)>0?2*t/(o+t)*100:0,v:o+t,a:M.a}));var M,t,o},hM=function(e){return{h:(M=qM(e)).h,s:(n=(200-(t=M.s))*(o=M.v)/100)>0&&n<200?t*o/100/(n<=100?n:200-n)*100:0,l:n/2,a:M.a};var M,t,o,n},LM=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,RM=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,gM=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,yM=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,vM={string:[[function(e){var M=uM.exec(e);return M?(e=M[1]).length<=4?{r:parseInt(e[0]+e[0],16),g:parseInt(e[1]+e[1],16),b:parseInt(e[2]+e[2],16),a:4===e.length?OM(parseInt(e[3]+e[3],16)/255,2):1}:6===e.length||8===e.length?{r:parseInt(e.substr(0,2),16),g:parseInt(e.substr(2,2),16),b:parseInt(e.substr(4,2),16),a:8===e.length?OM(parseInt(e.substr(6,2),16)/255,2):1}:null:null},"hex"],[function(e){var M=gM.exec(e)||yM.exec(e);return M?M[2]!==M[4]||M[4]!==M[6]?null:dM({r:Number(M[1])/(M[2]?100/255:1),g:Number(M[3])/(M[4]?100/255:1),b:Number(M[5])/(M[6]?100/255:1),a:void 0===M[7]?1:Number(M[7])/(M[8]?100:1)}):null},"rgb"],[function(e){var M=LM.exec(e)||RM.exec(e);if(!M)return null;var t,o,n=mM({h:(t=M[1],o=M[2],void 0===o&&(o="deg"),Number(t)*(aM[o]||1)),s:Number(M[3]),l:Number(M[4]),a:void 0===M[5]?1:Number(M[5])/(M[6]?100:1)});return _M(n)},"hsl"]],object:[[function(e){var M=e.r,t=e.g,o=e.b,n=e.a,b=void 0===n?1:n;return rM(M)&&rM(t)&&rM(o)?dM({r:Number(M),g:Number(t),b:Number(o),a:Number(b)}):null},"rgb"],[function(e){var M=e.h,t=e.s,o=e.l,n=e.a,b=void 0===n?1:n;if(!rM(M)||!rM(t)||!rM(o))return null;var p=mM({h:Number(M),s:Number(t),l:Number(o),a:Number(b)});return _M(p)},"hsl"],[function(e){var M=e.h,t=e.s,o=e.v,n=e.a,b=void 0===n?1:n;if(!rM(M)||!rM(t)||!rM(o))return null;var p=function(e){return{h:sM(e.h),s:iM(e.s,0,100),v:iM(e.v,0,100),a:iM(e.a)}}({h:Number(M),s:Number(t),v:Number(o),a:Number(b)});return fM(p)},"hsv"]]},NM=function(e,M){for(var t=0;t<M.length;t++){var o=M[t][0](e);if(o)return[o,M[t][1]]}return[null,void 0]},kM=function(e,M){var t=hM(e);return{h:t.h,s:iM(t.s+100*M,0,100),l:t.l,a:t.a}},TM=function(e){return(299*e.r+587*e.g+114*e.b)/1e3/255},BM=function(e,M){var t=hM(e);return{h:t.h,s:t.s,l:iM(t.l+100*M,0,100),a:t.a}},wM=function(){function e(e){this.parsed=function(e){return"string"==typeof e?NM(e.trim(),vM.string):"object"==typeof e&&null!==e?NM(e,vM.object):[null,void 0]}(e)[0],this.rgba=this.parsed||{r:0,g:0,b:0,a:1}}return e.prototype.isValid=function(){return null!==this.parsed},e.prototype.brightness=function(){return OM(TM(this.rgba),2)},e.prototype.isDark=function(){return TM(this.rgba)<.5},e.prototype.isLight=function(){return TM(this.rgba)>=.5},e.prototype.toHex=function(){return M=(e=lM(this.rgba)).r,t=e.g,o=e.b,b=(n=e.a)<1?AM(OM(255*n)):"","#"+AM(M)+AM(t)+AM(o)+b;var e,M,t,o,n,b},e.prototype.toRgb=function(){return lM(this.rgba)},e.prototype.toRgbString=function(){return M=(e=lM(this.rgba)).r,t=e.g,o=e.b,(n=e.a)<1?"rgba("+M+", "+t+", "+o+", "+n+")":"rgb("+M+", "+t+", "+o+")";var e,M,t,o,n},e.prototype.toHsl=function(){return WM(hM(this.rgba))},e.prototype.toHslString=function(){return M=(e=WM(hM(this.rgba))).h,t=e.s,o=e.l,(n=e.a)<1?"hsla("+M+", "+t+"%, "+o+"%, "+n+")":"hsl("+M+", "+t+"%, "+o+"%)";var e,M,t,o,n},e.prototype.toHsv=function(){return e=qM(this.rgba),{h:OM(e.h),s:OM(e.s),v:OM(e.v),a:OM(e.a,3)};var e},e.prototype.invert=function(){return SM({r:255-(e=this.rgba).r,g:255-e.g,b:255-e.b,a:e.a});var e},e.prototype.saturate=function(e){return void 0===e&&(e=.1),SM(kM(this.rgba,e))},e.prototype.desaturate=function(e){return void 0===e&&(e=.1),SM(kM(this.rgba,-e))},e.prototype.grayscale=function(){return SM(kM(this.rgba,-1))},e.prototype.lighten=function(e){return void 0===e&&(e=.1),SM(BM(this.rgba,e))},e.prototype.darken=function(e){return void 0===e&&(e=.1),SM(BM(this.rgba,-e))},e.prototype.rotate=function(e){return void 0===e&&(e=15),this.hue(this.hue()+e)},e.prototype.alpha=function(e){return"number"==typeof e?SM({r:(M=this.rgba).r,g:M.g,b:M.b,a:e}):OM(this.rgba.a,3);var M},e.prototype.hue=function(e){var M=hM(this.rgba);return"number"==typeof e?SM({h:e,s:M.s,l:M.l,a:M.a}):OM(M.h)},e.prototype.isEqual=function(e){return this.toHex()===SM(e).toHex()},e}(),SM=function(e){return e instanceof wM?e:new wM(e)},EM=[];let XM;function YM(e="",M=1){return SM(e).alpha(M).toRgbString()}!function(e){e.forEach((function(e){EM.indexOf(e)<0&&(e(wM,vM),EM.push(e))}))}([function(e,M){var t={white:"#ffffff",bisque:"#ffe4c4",blue:"#0000ff",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",antiquewhite:"#faebd7",aqua:"#00ffff",azure:"#f0ffff",whitesmoke:"#f5f5f5",papayawhip:"#ffefd5",plum:"#dda0dd",blanchedalmond:"#ffebcd",black:"#000000",gold:"#ffd700",goldenrod:"#daa520",gainsboro:"#dcdcdc",cornsilk:"#fff8dc",cornflowerblue:"#6495ed",burlywood:"#deb887",aquamarine:"#7fffd4",beige:"#f5f5dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkkhaki:"#bdb76b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",peachpuff:"#ffdab9",darkmagenta:"#8b008b",darkred:"#8b0000",darkorchid:"#9932cc",darkorange:"#ff8c00",darkslateblue:"#483d8b",gray:"#808080",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",deeppink:"#ff1493",deepskyblue:"#00bfff",wheat:"#f5deb3",firebrick:"#b22222",floralwhite:"#fffaf0",ghostwhite:"#f8f8ff",darkviolet:"#9400d3",magenta:"#ff00ff",green:"#008000",dodgerblue:"#1e90ff",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",blueviolet:"#8a2be2",forestgreen:"#228b22",lawngreen:"#7cfc00",indianred:"#cd5c5c",indigo:"#4b0082",fuchsia:"#ff00ff",brown:"#a52a2a",maroon:"#800000",mediumblue:"#0000cd",lightcoral:"#f08080",darkturquoise:"#00ced1",lightcyan:"#e0ffff",ivory:"#fffff0",lightyellow:"#ffffe0",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",linen:"#faf0e6",mediumaquamarine:"#66cdaa",lemonchiffon:"#fffacd",lime:"#00ff00",khaki:"#f0e68c",mediumseagreen:"#3cb371",limegreen:"#32cd32",mediumspringgreen:"#00fa9a",lightskyblue:"#87cefa",lightblue:"#add8e6",midnightblue:"#191970",lightpink:"#ffb6c1",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",mintcream:"#f5fffa",lightslategray:"#778899",lightslategrey:"#778899",navajowhite:"#ffdead",navy:"#000080",mediumvioletred:"#c71585",powderblue:"#b0e0e6",palegoldenrod:"#eee8aa",oldlace:"#fdf5e6",paleturquoise:"#afeeee",mediumturquoise:"#48d1cc",mediumorchid:"#ba55d3",rebeccapurple:"#663399",lightsteelblue:"#b0c4de",mediumslateblue:"#7b68ee",thistle:"#d8bfd8",tan:"#d2b48c",orchid:"#da70d6",mediumpurple:"#9370db",purple:"#800080",pink:"#ffc0cb",skyblue:"#87ceeb",springgreen:"#00ff7f",palegreen:"#98fb98",red:"#ff0000",yellow:"#ffff00",slateblue:"#6a5acd",lavenderblush:"#fff0f5",peru:"#cd853f",palevioletred:"#db7093",violet:"#ee82ee",teal:"#008080",slategray:"#708090",slategrey:"#708090",aliceblue:"#f0f8ff",darkseagreen:"#8fbc8f",darkolivegreen:"#556b2f",greenyellow:"#adff2f",seagreen:"#2e8b57",seashell:"#fff5ee",tomato:"#ff6347",silver:"#c0c0c0",sienna:"#a0522d",lavender:"#e6e6fa",lightgreen:"#90ee90",orange:"#ffa500",orangered:"#ff4500",steelblue:"#4682b4",royalblue:"#4169e1",turquoise:"#40e0d0",yellowgreen:"#9acd32",salmon:"#fa8072",saddlebrown:"#8b4513",sandybrown:"#f4a460",rosybrown:"#bc8f8f",darksalmon:"#e9967a",lightgoldenrodyellow:"#fafad2",snow:"#fffafa",lightgrey:"#d3d3d3",lightgray:"#d3d3d3",dimgray:"#696969",dimgrey:"#696969",olivedrab:"#6b8e23",olive:"#808000"},o={};for(var n in t)o[t[n]]=n;var b={};e.prototype.toName=function(M){if(!(this.rgba.a||this.rgba.r||this.rgba.g||this.rgba.b))return"transparent";var n,p,z=o[this.toHex()];if(z)return z;if(null==M?void 0:M.closest){var c=this.toRgb(),a=1/0,r="black";if(!b.length)for(var O in t)b[O]=new e(t[O]).toRgb();for(var i in t){var s=(n=c,p=b[i],Math.pow(n.r-p.r,2)+Math.pow(n.g-p.g,2)+Math.pow(n.b-p.b,2));s<a&&(a=s,r=i)}return r}},M.string.push([function(M){var o=M.toLowerCase(),n="transparent"===o?"#0000":t[o];return n?new e(n).toRgb():null},"name"])}]);const DM=cM((function(e){if("string"!=typeof e)return"";if("string"==typeof(M=e)&&SM(M).isValid())return e;var M;if(!e.includes("var("))return"";if("undefined"==typeof document)return"";const t=function(){if("undefined"!=typeof document){if(!XM){const e=document.createElement("div");e.setAttribute("data-g2-color-computation-node",""),document.body.appendChild(e),XM=e}return XM}}();if(!t)return"";t.style.background=e;const o=window?.getComputedStyle(t).background;return t.style.background="",o||""}));const xM="#fff",CM={900:"#1e1e1e",800:"#2f2f2f",700:"#757575",600:"#949494",400:"#ccc",300:"#ddd",200:"#e0e0e0",100:"#f0f0f0"},PM="var(--wp-components-color-accent, var(--wp-admin-theme-color, #3858e9))",HM={background:xM,backgroundDisabled:CM[100],border:CM[600],borderHover:CM[700],borderFocus:PM,borderDisabled:CM[400],textDisabled:CM[600],textDark:xM,darkGrayPlaceholder:YM(CM[900],.62),lightGrayPlaceholder:YM(xM,.65)},jM={accent:PM,accentDarker10:"var(--wp-components-color-accent-darker-10, var(--wp-admin-theme-color-darker-10, #2145e6))"},FM=Object.freeze({gray:CM,white:xM,alert:{yellow:"#f0b849",red:"#d94f4f",green:"#4ab866"},theme:jM,ui:HM}),IM="36px",UM="12px",VM={controlSurfaceColor:FM.white,controlTextActiveColor:FM.theme.accent,controlPaddingX:UM,controlPaddingXLarge:`calc(${UM} * 1.3334)`,controlPaddingXSmall:`calc(${UM} / 1.3334)`,controlBackgroundColor:FM.white,controlBorderRadius:"2px",controlBoxShadow:"transparent",controlBoxShadowFocus:`0 0 0 0.5px ${FM.theme.accent}`,controlDestructiveBorderColor:FM.alert.red,controlHeight:IM,controlHeightXSmall:`calc( ${IM} * 0.6 )`,controlHeightSmall:`calc( ${IM} * 0.8 )`,controlHeightLarge:`calc( ${IM} * 1.2 )`,controlHeightXLarge:`calc( ${IM} * 1.4 )`},$M={toggleGroupControlBackgroundColor:VM.controlBackgroundColor,toggleGroupControlBorderColor:FM.ui.border,toggleGroupControlBackdropBackgroundColor:VM.controlSurfaceColor,toggleGroupControlBackdropBorderColor:FM.ui.border,toggleGroupControlButtonColorActive:VM.controlBackgroundColor},GM=Object.assign({},VM,$M,{colorDivider:"rgba(0, 0, 0, 0.1)",colorScrollbarThumb:"rgba(0, 0, 0, 0.2)",colorScrollbarThumbHover:"rgba(0, 0, 0, 0.5)",colorScrollbarTrack:"rgba(0, 0, 0, 0.04)",elevationIntensity:1,radiusBlockUi:"2px",borderWidth:"1px",borderWidthFocus:"1.5px",borderWidthTab:"4px",spinnerSize:16,fontSize:"13px",fontSizeH1:"calc(2.44 * 13px)",fontSizeH2:"calc(1.95 * 13px)",fontSizeH3:"calc(1.56 * 13px)",fontSizeH4:"calc(1.25 * 13px)",fontSizeH5:"13px",fontSizeH6:"calc(0.8 * 13px)",fontSizeInputMobile:"16px",fontSizeMobile:"15px",fontSizeSmall:"calc(0.92 * 13px)",fontSizeXSmall:"calc(0.75 * 13px)",fontLineHeightBase:"1.2",fontWeight:"normal",fontWeightHeading:"600",gridBase:"4px",cardBorderRadius:"2px",cardPaddingXSmall:`${zM(2)}`,cardPaddingSmall:`${zM(4)}`,cardPaddingMedium:`${zM(4)} ${zM(6)}`,cardPaddingLarge:`${zM(6)} ${zM(8)}`,popoverShadow:"0 0.7px 1px rgba(0, 0, 0, 0.1), 0 1.2px 1.7px -0.2px rgba(0, 0, 0, 0.1), 0 2.3px 3.3px -0.5px rgba(0, 0, 0, 0.1)",surfaceBackgroundColor:FM.white,surfaceBackgroundSubtleColor:"#F3F3F3",surfaceBackgroundTintColor:"#F5F5F5",surfaceBorderColor:"rgba(0, 0, 0, 0.1)",surfaceBorderBoldColor:"rgba(0, 0, 0, 0.15)",surfaceBorderSubtleColor:"rgba(0, 0, 0, 0.05)",surfaceBackgroundTertiaryColor:FM.white,surfaceColor:FM.white,transitionDuration:"200ms",transitionDurationFast:"160ms",transitionDurationFaster:"120ms",transitionDurationFastest:"100ms",transitionTimingFunction:"cubic-bezier(0.08, 0.52, 0.52, 1)",transitionTimingFunctionControl:"cubic-bezier(0.12, 0.8, 0.32, 1)"}),JM=(function(){var e=bM.apply(void 0,arguments),M="animation-"+e.name;return{name:M,styles:"@keyframes "+M+"{"+e.styles+"}",anim:1,toString:function(){return"_EMO_"+this.name+"_"+this.styles+"_EMO_"}}})`
	from {
		transform: rotate(0deg);
	}
	to {
		transform: rotate(360deg);
	}
 `,KM=nM("svg",{target:"ea4tfvq2"})("width:",GM.spinnerSize,"px;height:",GM.spinnerSize,"px;display:inline-block;margin:5px 11px 0;position:relative;color:",FM.theme.accent,";overflow:visible;opacity:1;background-color:transparent;"),QM={name:"9s4963",styles:"fill:transparent;stroke-width:1.5px"},ZM=nM("circle",{target:"ea4tfvq1"})(QM,";stroke:",FM.gray[300],";"),et=nM("path",{target:"ea4tfvq0"})(QM,";stroke:currentColor;stroke-linecap:round;transform-origin:50% 50%;animation:1.4s linear infinite both ",JM,";"),Mt=(0,M.forwardRef)((function({className:e,...t},o){return(0,M.createElement)(KM,{className:N()("components-spinner",e),viewBox:"0 0 100 100",width:"16",height:"16",xmlns:"http://www.w3.org/2000/svg",role:"presentation",focusable:"false",...t,ref:o},(0,M.createElement)(ZM,{cx:"50",cy:"50",r:"50",vectorEffect:"non-scaling-stroke"}),(0,M.createElement)(et,{d:"m 50 0 a 50 50 0 0 1 50 50",vectorEffect:"non-scaling-stroke"}))}));function tt({inline:e=!1}){const t=e?"span":"div";return(0,M.createElement)(t,{className:N()("amp-spinner-container",{"amp-spinner-container--inline":e})},(0,M.createElement)(Mt,null))}var ot=n(5697),nt=n.n(ot);const bt=(0,M.createContext)();function pt({children:e,onlyFetchIfPluginIsConfigured:t=!0,userFieldReviewPanelDismissedForTemplateMode:o,userOptionDeveloperTools:n,usersResourceRestPath:b}){const{originalOptions:p,fetchingOptions:z}=(0,M.useContext)(q),{plugin_configured:c}=p,[r,O]=(0,M.useState)(!1),[i,s]=(0,M.useState)(null),[d,u]=(0,M.useState)(null),[A,f]=(0,M.useState)(null),[m,W]=(0,M.useState)(!1),[_,h]=(0,M.useState)(!1),[L,R]=(0,M.useState)(!1),{setAsyncError:g}=l(),y=(0,M.useRef)(!1);(0,M.useEffect)((()=>()=>{y.current=!0}),[]);const v=(0,M.useMemo)((()=>null!==i&&i!==A),[i,A]);(0,M.useEffect)((()=>{if(!z)return!c&&t?(f(null),void s(null)):void(b&&!r&&null===A&&(async()=>{O(!0);try{const e=await a()({path:`${b}/me`});if(!0===y.current)return;f(e[n]),s(e[n]),o&&u(e[o])}catch(e){return void g(e)}O(!1)})())}),[t,z,r,A,c,g,o,n,b]);const N=(0,M.useCallback)((async()=>{if(v){W(!0);try{const e=await a()({method:"post",path:`${b}/me`,data:{[n]:i}});if(!0===y.current)return;f(e[n]),s(e[n])}catch(e){return void g(e)}R(!0),W(!1)}}),[v,i,g,n,b]),k=(0,M.useCallback)((async e=>{if(!_&&o){u(e),h(!0);try{if(await a()({method:"post",path:`${b}/me`,data:{[o]:e}}),!0===y.current)return}catch(e){return void g(e)}h(!1)}}),[_,g,o,b]);return(0,M.createElement)(bt.Provider,{value:{developerToolsOption:i,fetchingUser:r,didSaveDeveloperToolsOption:L,hasDeveloperToolsOptionChange:v,reviewPanelDismissedForTemplateMode:d,originalDeveloperToolsOption:A,saveDeveloperToolsOption:N,savingDeveloperToolsOption:m,setDeveloperToolsOption:s,saveReviewPanelDismissedForTemplateMode:k,savingReviewPanelDismissedForTemplateMode:_}},e)}function zt({excludeUserContext:e=!1,appRoot:t}){const{hasOptionsChanges:o,didSaveOptions:n}=(0,M.useContext)(q),[b,z]=(0,M.useState)({hasDeveloperToolsOptionChange:!1,didSaveDeveloperToolsOption:!0}),{hasDeveloperToolsOptionChange:c,didSaveDeveloperToolsOption:a}=b;return(0,M.useEffect)((()=>{if(o&&!n||c&&!a){const e=e=>(e.returnValue=(0,p.__)("This page has unsaved changes. Are you sure you want to leave?","amp"),null);return t.ownerDocument.addEventListener("beforeunload",e),()=>{t.ownerDocument.removeEventListener("beforeunload",e)}}return()=>{}}),[t,o,n,c,a]),e?null:(0,M.createElement)(ct,{setUserState:z})}function ct({setUserState:e}){const{hasDeveloperToolsOptionChange:t,didSaveDeveloperToolsOption:o}=(0,M.useContext)(bt);return(0,M.useEffect)((()=>{e({hasDeveloperToolsOptionChange:t,didSaveDeveloperToolsOption:o})}),[t,o,e]),null}ct.propTypes={setUserState:nt().func};const at=function({label:e,children:t}){return(0,M.createElement)("div",{className:"components-panel__header"},e&&(0,M.createElement)("h2",null,e),t)},rt=(0,M.forwardRef)((function({header:e,className:t,children:o},n){const b=N()(t,"components-panel");return(0,M.createElement)("div",{className:b,ref:n},e&&(0,M.createElement)(at,{label:e}),o)}));let Ot,it,st,dt;const lt=/<(\/)?(\w+)\s*(\/)?>/g;function ut(e,M,t,o,n){return{element:e,tokenStart:M,tokenLength:t,prevOffset:o,leadingTextStart:n,children:[]}}function At(e){const t=function(){const e=lt.exec(Ot);if(null===e)return["no-more-tokens"];const M=e.index,[t,o,n,b]=e,p=t.length;return b?["self-closed",n,M,p]:o?["closer",n,M,p]:["opener",n,M,p]}(),[o,n,b,p]=t,z=dt.length,c=b>it?it:null;if(!e[n])return qt(),!1;switch(o){case"no-more-tokens":if(0!==z){const{leadingTextStart:e,tokenStart:M}=dt.pop();st.push(Ot.substr(e,M))}return qt(),!1;case"self-closed":return 0===z?(null!==c&&st.push(Ot.substr(c,b-c)),st.push(e[n]),it=b+p,!0):(ft(ut(e[n],b,p)),it=b+p,!0);case"opener":return dt.push(ut(e[n],b,p,b+p,c)),it=b+p,!0;case"closer":if(1===z)return function(e){const{element:t,leadingTextStart:o,prevOffset:n,tokenStart:b,children:p}=dt.pop(),z=e?Ot.substr(n,e-n):Ot.substr(n);z&&p.push(z),null!==o&&st.push(Ot.substr(o,b-o)),st.push((0,M.cloneElement)(t,null,...p))}(b),it=b+p,!0;const t=dt.pop(),o=Ot.substr(t.prevOffset,b-t.prevOffset);t.children.push(o),t.prevOffset=b+p;const a=ut(t.element,t.tokenStart,t.tokenLength,b+p);return a.children=t.children,ft(a),it=b+p,!0;default:return qt(),!1}}function qt(){const e=Ot.length-it;0!==e&&st.push(Ot.substr(it,e))}function ft(e){const{element:t,tokenStart:o,tokenLength:n,prevOffset:b,children:p}=e,z=dt[dt.length-1],c=Ot.substr(z.prevOffset,o-z.prevOffset);c&&z.children.push(c),z.children.push((0,M.cloneElement)(t,null,...p)),z.prevOffset=b||o+n}const mt=(e,t)=>{if(Ot=e,it=0,st=[],dt=[],lt.lastIndex=0,!(e=>{const t="object"==typeof e,o=t&&Object.values(e);return t&&o.length&&o.every((e=>(0,M.isValidElement)(e)))})(t))throw new TypeError("The conversionMap provided is not valid. It must be an object with values that are React Elements");do{}while(At(t));return(0,M.createElement)(M.Fragment,null,...st)};var Wt=n(2152),_t=n.n(Wt);function ht(e,t){const o=(0,M.useRef)();return(0,M.useCallback)((M=>{M?o.current=e(M):o.current&&o.current()}),t)}function Lt(e){const t=(0,M.useRef)(e);return t.current=e,t}const Rt=function(e){return"string"!=typeof e||""===e?(console.error("The namespace must be a non-empty string."),!1):!!/^[a-zA-Z][a-zA-Z0-9_.\-\/]*$/.test(e)||(console.error("The namespace can only contain numbers, letters, dashes, periods, underscores and slashes."),!1)},gt=function(e){return"string"!=typeof e||""===e?(console.error("The hook name must be a non-empty string."),!1):/^__/.test(e)?(console.error("The hook name cannot begin with `__`."),!1):!!/^[a-zA-Z][a-zA-Z0-9_.-]*$/.test(e)||(console.error("The hook name can only contain numbers, letters, dashes, periods and underscores."),!1)},yt=function(e,M){return function(t,o,n,b=10){const p=e[M];if(!gt(t))return;if(!Rt(o))return;if("function"!=typeof n)return void console.error("The hook callback must be a function.");if("number"!=typeof b)return void console.error("If specified, the hook priority must be a number.");const z={callback:n,priority:b,namespace:o};if(p[t]){const e=p[t].handlers;let M;for(M=e.length;M>0&&!(b>=e[M-1].priority);M--);M===e.length?e[M]=z:e.splice(M,0,z),p.__current.forEach((e=>{e.name===t&&e.currentIndex>=M&&e.currentIndex++}))}else p[t]={handlers:[z],runs:0};"hookAdded"!==t&&e.doAction("hookAdded",t,o,n,b)}},vt=function(e,M,t=!1){return function(o,n){const b=e[M];if(!gt(o))return;if(!t&&!Rt(n))return;if(!b[o])return 0;let p=0;if(t)p=b[o].handlers.length,b[o]={runs:b[o].runs,handlers:[]};else{const e=b[o].handlers;for(let M=e.length-1;M>=0;M--)e[M].namespace===n&&(e.splice(M,1),p++,b.__current.forEach((e=>{e.name===o&&e.currentIndex>=M&&e.currentIndex--})))}return"hookRemoved"!==o&&e.doAction("hookRemoved",o,n),p}},Nt=function(e,M){return function(t,o){const n=e[M];return void 0!==o?t in n&&n[t].handlers.some((e=>e.namespace===o)):t in n}},kt=function(e,M,t=!1){return function(o,...n){const b=e[M];b[o]||(b[o]={handlers:[],runs:0}),b[o].runs++;const p=b[o].handlers;if(!p||!p.length)return t?n[0]:void 0;const z={name:o,currentIndex:0};for(b.__current.push(z);z.currentIndex<p.length;){const e=p[z.currentIndex].callback.apply(null,n);t&&(n[0]=e),z.currentIndex++}return b.__current.pop(),t?n[0]:void 0}},Tt=function(e,M){return function(){var t;const o=e[M];return null!==(t=o.__current[o.__current.length-1]?.name)&&void 0!==t?t:null}},Bt=function(e,M){return function(t){const o=e[M];return void 0===t?void 0!==o.__current[0]:!!o.__current[0]&&t===o.__current[0].name}},wt=function(e,M){return function(t){const o=e[M];if(gt(t))return o[t]&&o[t].runs?o[t].runs:0}};class St{constructor(){this.actions=Object.create(null),this.actions.__current=[],this.filters=Object.create(null),this.filters.__current=[],this.addAction=yt(this,"actions"),this.addFilter=yt(this,"filters"),this.removeAction=vt(this,"actions"),this.removeFilter=vt(this,"filters"),this.hasAction=Nt(this,"actions"),this.hasFilter=Nt(this,"filters"),this.removeAllActions=vt(this,"actions",!0),this.removeAllFilters=vt(this,"filters",!0),this.doAction=kt(this,"actions"),this.applyFilters=kt(this,"filters",!0),this.currentAction=Tt(this,"actions"),this.currentFilter=Tt(this,"filters"),this.doingAction=Bt(this,"actions"),this.doingFilter=Bt(this,"filters"),this.didAction=wt(this,"actions"),this.didFilter=wt(this,"filters")}}const Et=new St,{addAction:Xt,addFilter:Yt,removeAction:Dt,removeFilter:xt,hasAction:Ct,hasFilter:Pt,removeAllActions:Ht,removeAllFilters:jt,doAction:Ft,applyFilters:It,currentAction:Ut,currentFilter:Vt,doingAction:$t,doingFilter:Gt,didAction:Jt,didFilter:Kt,actions:Qt,filters:Zt}=Et,eo=Object.create(null);function Mo(e,M={}){const{since:t,version:o,alternative:n,plugin:b,link:p,hint:z}=M,c=`${e} is deprecated${t?` since version ${t}`:""}${o?` and will be removed${b?` from ${b}`:""} in version ${o}`:""}.${n?` Please use ${n} instead.`:""}${p?` See: ${p}`:""}${z?` Note: ${z}`:""}`;c in eo||(Ft("deprecated",e,M,c),console.warn(c),eo[c]=!0)}const to=new WeakMap,oo=function(e,t,o){return(0,M.useMemo)((()=>{if(o)return o;const M=function(e){const M=to.get(e)||0;return to.set(e,M+1),M}(e);return t?`${t}-${M}`:M}),[e,o,t])};var no=Object.defineProperty,bo=Object.defineProperties,po=Object.getOwnPropertyDescriptors,zo=Object.getOwnPropertySymbols,co=Object.prototype.hasOwnProperty,ao=Object.prototype.propertyIsEnumerable,ro=(e,M,t)=>M in e?no(e,M,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[M]=t,Oo=(e,M)=>{for(var t in M||(M={}))co.call(M,t)&&ro(e,t,M[t]);if(zo)for(var t of zo(M))ao.call(M,t)&&ro(e,t,M[t]);return e},io=(e,M)=>bo(e,po(M)),so=(e,M)=>{var t={};for(var o in e)co.call(e,o)&&M.indexOf(o)<0&&(t[o]=e[o]);if(null!=e&&zo)for(var o of zo(e))M.indexOf(o)<0&&ao.call(e,o)&&(t[o]=e[o]);return t},lo=Object.defineProperty,uo=Object.defineProperties,Ao=Object.getOwnPropertyDescriptors,qo=Object.getOwnPropertySymbols,fo=Object.prototype.hasOwnProperty,mo=Object.prototype.propertyIsEnumerable,Wo=(e,M,t)=>M in e?lo(e,M,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[M]=t,_o=(e,M)=>{for(var t in M||(M={}))fo.call(M,t)&&Wo(e,t,M[t]);if(qo)for(var t of qo(M))mo.call(M,t)&&Wo(e,t,M[t]);return e},ho=(e,M)=>uo(e,Ao(M)),Lo=(e,M)=>{var t={};for(var o in e)fo.call(e,o)&&M.indexOf(o)<0&&(t[o]=e[o]);if(null!=e&&qo)for(var o of qo(e))M.indexOf(o)<0&&mo.call(e,o)&&(t[o]=e[o]);return t};function Ro(...e){}function go(e,M){return Object.prototype.hasOwnProperty.call(e,M)}function yo(...e){return(...M)=>{for(const t of e)"function"==typeof t&&t(...M)}}function vo(e){return e}function No(e,M){if(!e){if("string"!=typeof M)throw new Error("Invariant failed");throw new Error(M)}}function ko(e,...M){const t="function"==typeof e?e(...M):e;return null!=t&&!t}function To(e){return e.disabled||!0===e["aria-disabled"]||"true"===e["aria-disabled"]}function Bo(...e){for(const M of e)if(void 0!==M)return M}function wo(e,M){"function"==typeof e?e(M):e&&(e.current=M)}var So,Eo="undefined"!=typeof window&&!!(null==(So=window.document)?void 0:So.createElement);function Xo(e){return e?e.ownerDocument||e:document}function Yo(e,M=!1){const{activeElement:t}=Xo(e);if(!(null==t?void 0:t.nodeName))return null;if(xo(t)&&t.contentDocument)return Yo(t.contentDocument.body,M);if(M){const e=t.getAttribute("aria-activedescendant");if(e){const M=Xo(t).getElementById(e);if(M)return M}}return t}function Do(e,M){return e===M||e.contains(M)}function xo(e){return"IFRAME"===e.tagName}function Co(e){const M=e.tagName.toLowerCase();return"button"===M||!("input"!==M||!e.type)&&-1!==Po.indexOf(e.type)}var Po=["button","color","file","image","reset","submit"];function Ho(e,M){return"matches"in e?e.matches(M):"msMatchesSelector"in e?e.msMatchesSelector(M):e.webkitMatchesSelector(M)}function jo(e){const M=e;return M.offsetWidth>0||M.offsetHeight>0||e.getClientRects().length>0}function Fo(e,M){if("closest"in e)return e.closest(M);do{if(Ho(e,M))return e;e=e.parentElement||e.parentNode}while(null!==e&&1===e.nodeType);return null}function Io(e){return e.target===e.currentTarget}function Uo(e,M){const t=M||e.currentTarget,o=e.relatedTarget;return!o||!Do(t,o)}function Vo(e,M,t){const o=requestAnimationFrame((()=>{e.removeEventListener(M,n,!0),t()})),n=()=>{cancelAnimationFrame(o),t()};return e.addEventListener(M,n,{once:!0,capture:!0}),o}function $o(e,M,t,o=window){const n=[];try{o.document.addEventListener(e,M,t);for(const b of Array.from(o.frames))n.push($o(e,M,t,b))}catch(e){}return()=>{try{o.document.removeEventListener(e,M,t)}catch(e){}n.forEach((e=>e()))}}var Go=Oo({},t),Jo=Go.useId,Ko=(Go.useDeferredValue,Go.useInsertionEffect),Qo=Eo?M.useLayoutEffect:M.useEffect;function Zo(e){const t=(0,M.useRef)(e);return Qo((()=>{t.current=e})),t}function en(e){const t=(0,M.useRef)((()=>{throw new Error("Cannot call an event handler while rendering.")}));return Ko?Ko((()=>{t.current=e})):t.current=e,(0,M.useCallback)(((...e)=>{var M;return null==(M=t.current)?void 0:M.call(t,...e)}),[])}function Mn(...e){return(0,M.useMemo)((()=>{if(e.some(Boolean))return M=>{e.forEach((e=>wo(e,M)))}}),e)}function tn(e){if(Jo){const M=Jo();return e||M}const[t,o]=(0,M.useState)(e);return Qo((()=>{if(e||t)return;const M=Math.random().toString(36).substr(2,6);o(`id-${M}`)}),[e,t]),e||t}function on(e,t){const o=(0,M.useRef)(!1);(0,M.useEffect)((()=>{if(o.current)return e();o.current=!0}),t),(0,M.useEffect)((()=>()=>{o.current=!1}),[])}function nn(e){return en("function"==typeof e?e:()=>e)}function bn(e,t,o=[]){const n=(0,M.useCallback)((M=>(e.wrapElement&&(M=e.wrapElement(M)),t(M))),[...o,e.wrapElement]);return io(Oo({},e),{wrapElement:n})}function pn(e=!1,t){const[o,n]=(0,M.useState)(null);return{portalRef:Mn(n,t),portalNode:o,domReady:!e||o}}Symbol("setNextState");var zn=!1,cn=0,an=0;function rn(e){(function(e){const M=e.movementX||e.screenX-cn,t=e.movementY||e.screenY-an;return cn=e.screenX,an=e.screenY,M||t||!1})(e)&&(zn=!0)}function On(){zn=!1}function sn(e,M){const t=e.__unstableInternals;return No(t,"Invalid store"),t[M]}function dn(e,...M){let t=e,o=t,n=Symbol(),b=!1;const p=new Set,z=new Set,c=new Set,a=new Set,r=new WeakMap,O=new WeakMap,i=(e,M,t=c)=>(t.add(M),O.set(M,e),()=>{var e;null==(e=r.get(M))||e(),r.delete(M),O.delete(M),t.delete(M)}),s=(e,b,z=!1)=>{if(!go(t,e))return;const i=(s=b,d=t[e],function(e){return"function"==typeof e}(s)?s(function(e){return"function"==typeof e}(d)?d():d):s);var s,d;if(i===t[e])return;z||M.forEach((M=>{var t;null==(t=null==M?void 0:M.setState)||t.call(M,e,i)}));const l=t;t=ho(_o({},t),{[e]:i});const u=Symbol();n=u,p.add(e);const A=(M,o,n)=>{var b;const p=O.get(M);p&&!p.some((M=>n?n.has(M):M===e))||(null==(b=r.get(M))||b(),r.set(M,M(t,o)))};c.forEach((e=>{A(e,l)})),queueMicrotask((()=>{if(n!==u)return;const e=t;a.forEach((e=>{A(e,o,p)})),o=e,p.clear()}))},d={getState:()=>t,setState:s,__unstableInternals:{setup:e=>(z.add(e),()=>z.delete(e)),init:()=>{if(b)return Ro;if(!M.length)return Ro;b=!0;const e=(o=t,Object.keys(o)).map((e=>yo(...M.map((M=>{var t;const o=null==(t=null==M?void 0:M.getState)?void 0:t.call(M);if(o&&go(o,e))return qn(M,[e],(M=>s(e,M[e],!0)))})))));var o;const n=[];z.forEach((e=>n.push(e())));const p=M.map(un);return yo(...e,...n,...p,(()=>{b=!1}))},subscribe:(e,M)=>i(e,M),sync:(e,M)=>(r.set(M,M(t,t)),i(e,M)),batch:(e,M)=>(r.set(M,M(t,o)),i(e,M,a)),pick:e=>dn(function(e,M){const t={};for(const o of M)go(e,o)&&(t[o]=e[o]);return t}(t,e),d),omit:e=>dn(function(e,M){const t=_o({},e);for(const e of M)go(t,e)&&delete t[e];return t}(t,e),d)}};return d}function ln(e,...M){if(e)return sn(e,"setup")(...M)}function un(e,...M){if(e)return sn(e,"init")(...M)}function An(e,...M){if(e)return sn(e,"subscribe")(...M)}function qn(e,...M){if(e)return sn(e,"sync")(...M)}function fn(e,...M){if(e)return sn(e,"omit")(...M)}function mn(...e){const M=e.reduce(((e,M)=>{var t;const o=null==(t=null==M?void 0:M.getState)?void 0:t.call(M);return o?_o(_o({},e),o):e}),{});return dn(M,...e)}var Wn=n(1688),{useSyncExternalStore:hn}=Wn,Ln=()=>()=>{};function Rn(e,t=vo){const o=M.useCallback((M=>e?An(e,null,M):Ln()),[e]),n=()=>{const M="string"==typeof t?t:null,o="function"==typeof t?t:null,n=null==e?void 0:e.getState();return o?o(n):n&&M&&go(n,M)?n[M]:void 0};return hn(o,n,n)}function gn(e,t,o,n){const b=go(t,o)?t[o]:void 0,p=n?t[n]:void 0,z=Zo({value:b,setValue:p}),c=M.useRef(!0);Qo((()=>qn(e,[o],((e,M)=>{const{value:t,setValue:n}=z.current;n&&e[o]!==M[o]&&e[o]!==t&&(c.current=!1,n(e[o]))}))),[e,o]),Qo((()=>{if(void 0!==b)return c.current=!0,qn(e,[o],(()=>{void 0!==b&&c.current&&e.setState(o,b)}))}))}function yn(e,t){const[o,n]=M.useState((()=>e(t)));Qo((()=>un(o)),[o]);const b=M.useCallback((e=>Rn(o,e)),[o]);return[M.useMemo((()=>io(Oo({},o),{useState:b})),[o,b]),en((()=>{n((M=>e(Oo(Oo({},t),M.getState()))))}))]}function vn(e={}){const M=mn(e.store,fn(e.disclosure,["contentElement","disclosureElement"])),t=null==M?void 0:M.getState(),o=Bo(e.open,null==t?void 0:t.open,e.defaultOpen,!1),n=Bo(e.animated,null==t?void 0:t.animated,!1),b=dn({open:o,animated:n,animating:!!n&&o,mounted:o,contentElement:Bo(null==t?void 0:t.contentElement,null),disclosureElement:Bo(null==t?void 0:t.disclosureElement,null)},M);return ln(b,(()=>qn(b,["animated","animating"],(e=>{e.animated||b.setState("animating",!1)})))),ln(b,(()=>An(b,["open"],(()=>{b.getState().animated&&b.setState("animating",!0)})))),ln(b,(()=>qn(b,["open","animating"],(e=>{b.setState("mounted",e.open||e.animating)})))),ho(_o({},b),{setOpen:e=>b.setState("open",e),show:()=>b.setState("open",!0),hide:()=>b.setState("open",!1),toggle:()=>b.setState("open",(e=>!e)),stopAnimation:()=>b.setState("animating",!1),setContentElement:e=>b.setState("contentElement",e),setDisclosureElement:e=>b.setState("disclosureElement",e)})}function Nn(e,M,t){return on(M,[t.store,t.disclosure]),gn(e,t,"open","setOpen"),gn(e,t,"mounted","setMounted"),gn(e,t,"animated"),e}function kn(e={}){return vn(e)}function Tn(e,M,t){return Nn(e,M,t)}function Bn(e,M,t){return gn(e=function(e,M,t){return on(M,[t.popover]),gn(e=Tn(e,M,t),t,"placement"),e}(e,M,t),t,"timeout"),gn(e,t,"showTimeout"),gn(e,t,"hideTimeout"),e}function wn(e={}){var M;const t=null==(M=e.store)?void 0:M.getState(),o=function(e={}){var M;const t=null==(M=e.store)?void 0:M.getState(),o=function(e={}){var M=e,{popover:t}=M,o=Lo(M,["popover"]);const n=mn(o.store,fn(t,["arrowElement","anchorElement","contentElement","popoverElement","disclosureElement"])),b=null==n?void 0:n.getState(),p=kn(ho(_o({},o),{store:n})),z=Bo(o.placement,null==b?void 0:b.placement,"bottom"),c=dn(ho(_o({},p.getState()),{placement:z,currentPlacement:z,anchorElement:Bo(null==b?void 0:b.anchorElement,null),popoverElement:Bo(null==b?void 0:b.popoverElement,null),arrowElement:Bo(null==b?void 0:b.arrowElement,null),rendered:Symbol("rendered")}),p,n);return ho(_o(_o({},p),c),{setAnchorElement:e=>c.setState("anchorElement",e),setPopoverElement:e=>c.setState("popoverElement",e),setArrowElement:e=>c.setState("arrowElement",e),render:()=>c.setState("rendered",Symbol("rendered"))})}(ho(_o({},e),{placement:Bo(e.placement,null==t?void 0:t.placement,"bottom")})),n=Bo(e.timeout,null==t?void 0:t.timeout,500),b=dn(ho(_o({},o.getState()),{timeout:n,showTimeout:Bo(e.showTimeout,null==t?void 0:t.showTimeout),hideTimeout:Bo(e.hideTimeout,null==t?void 0:t.hideTimeout),autoFocusOnShow:Bo(null==t?void 0:t.autoFocusOnShow,!1)}),o,e.store);return ho(_o(_o({},o),b),{setAutoFocusOnShow:e=>b.setState("autoFocusOnShow",e)})}(ho(_o({},e),{placement:Bo(e.placement,null==t?void 0:t.placement,"top"),hideTimeout:Bo(e.hideTimeout,null==t?void 0:t.hideTimeout,0)})),n=dn(ho(_o({},o.getState()),{type:Bo(e.type,null==t?void 0:t.type,"description"),skipTimeout:Bo(e.skipTimeout,null==t?void 0:t.skipTimeout,300)}),o,e.store);return _o(_o({},o),n)}var Sn=n(5893);function En(e){return M.forwardRef(((M,t)=>e(Oo({ref:t},M))))}function Xn(e,t){const o=t,{as:n,wrapElement:b,render:p}=o,z=so(o,["as","wrapElement","render"]);let c;const a=Mn(t.ref,function(e){return function(e){return!!e&&!!(0,M.isValidElement)(e)&&"ref"in e}(e)?e.ref:null}(p));if(n&&"string"!=typeof n)c=(0,Sn.jsx)(n,io(Oo({},z),{render:p}));else if(M.isValidElement(p)){const e=io(Oo({},p.props),{ref:a});c=M.cloneElement(p,function(e,M){const t=Oo({},e);for(const o in M){if(!go(M,o))continue;if("className"===o){const o="className";t[o]=e[o]?`${e[o]} ${M[o]}`:M[o];continue}if("style"===o){const o="style";t[o]=e[o]?Oo(Oo({},e[o]),M[o]):M[o];continue}const n=M[o];if("function"==typeof n&&o.startsWith("on")){const M=e[o];if("function"==typeof M){t[o]=(...e)=>{n(...e),M(...e)};continue}}t[o]=n}return t}(z,e))}else if(p)c=p(z);else if("function"==typeof t.children){const e=z,{children:M}=e,o=so(e,["children"]);c=t.children(o)}else c=n?(0,Sn.jsx)(n,Oo({},z)):(0,Sn.jsx)(e,Oo({},z));return b?b(c):c}function Yn(e){return(M={})=>{const t=e(M),o={};for(const e in t)go(t,e)&&void 0!==t[e]&&(o[e]=t[e]);return o}}function Dn(e=[],t=[]){const o=M.createContext(void 0),n=M.createContext(void 0),b=()=>M.useContext(o),p=M=>e.reduceRight(((e,t)=>(0,Sn.jsx)(t,io(Oo({},M),{children:e}))),(0,Sn.jsx)(o.Provider,Oo({},M)));return{context:o,scopedContext:n,useContext:b,useScopedContext:(e=!1)=>{const t=M.useContext(n),o=b();return e?t:t||o},useProviderContext:()=>{const e=M.useContext(n),t=b();if(!e||e!==t)return t},ContextProvider:p,ScopedContextProvider:e=>(0,Sn.jsx)(p,io(Oo({},e),{children:t.reduceRight(((M,t)=>(0,Sn.jsx)(t,io(Oo({},e),{children:M}))),(0,Sn.jsx)(n.Provider,Oo({},e)))}))}}var xn=Dn(),Cn=(xn.useContext,xn.useScopedContext,xn.useProviderContext),Pn=Dn([xn.ContextProvider],[xn.ScopedContextProvider]),Hn=(Pn.useContext,Pn.useScopedContext,Pn.useProviderContext),jn=Pn.ContextProvider,Fn=Pn.ScopedContextProvider,In=(0,M.createContext)(void 0),Un=(0,M.createContext)(void 0),Vn=Dn([jn],[Fn]),$n=(Vn.useContext,Vn.useScopedContext,Vn.useProviderContext),Gn=Vn.ContextProvider,Jn=Vn.ScopedContextProvider,Kn=Dn([Gn],[Jn]),Qn=(Kn.useContext,Kn.useScopedContext,Kn.useProviderContext),Zn=Kn.ContextProvider,eb=Kn.ScopedContextProvider,Mb=(0,M.createContext)(!0),tb="input:not([type='hidden']):not([disabled]), select:not([disabled]), textarea:not([disabled]), a[href], button:not([disabled]), [tabindex], iframe, object, embed, area[href], audio[controls], video[controls], [contenteditable]:not([contenteditable='false'])";function ob(e){return!!Ho(e,tb)&&!!jo(e)&&!Fo(e,"[inert]")}function nb(e){if(!ob(e))return!1;if(function(e){return parseInt(e.getAttribute("tabindex")||"0",10)<0}(e))return!1;if(!("form"in e))return!0;if(!e.form)return!0;if(e.checked)return!0;if("radio"!==e.type)return!0;const M=e.form.elements.namedItem(e.name);if(!M)return!0;if(!("length"in M))return!0;const t=Yo(e);return!t||t===e||!("form"in t)||t.form!==e.form||t.name!==e.name}function bb(e,M){const t=Array.from(e.querySelectorAll(tb));M&&t.unshift(e);const o=t.filter(ob);return o.forEach(((e,M)=>{if(xo(e)&&e.contentDocument){const t=e.contentDocument.body;o.splice(M,1,...bb(t))}})),o}function pb(e,M,t){const o=Array.from(e.querySelectorAll(tb)),n=o.filter(nb);return M&&nb(e)&&n.unshift(e),n.forEach(((e,M)=>{if(xo(e)&&e.contentDocument){const o=pb(e.contentDocument.body,!1,t);n.splice(M,1,...o)}})),!n.length&&t?o:n}function zb(e,M){return function(e,M,t,o){const n=Yo(e),b=bb(e,!1),p=b.indexOf(n),z=b.slice(p+1);return z.find(nb)||(t?b.find(nb):null)||(o?z[0]:null)||null}(document.body,0,e,M)}function cb(e,M){return function(e,M,t,o){const n=Yo(e),b=bb(e,!1).reverse(),p=b.indexOf(n),z=b.slice(p+1);return z.find(nb)||(t?b.find(nb):null)||(o?z[0]:null)||null}(document.body,0,e,M)}function ab(e){const M=Yo(e);if(!M)return!1;if(M===e)return!0;const t=M.getAttribute("aria-activedescendant");return!!t&&t===e.id}function rb(e){const M=Yo(e);if(!M)return!1;if(Do(e,M))return!0;const t=M.getAttribute("aria-activedescendant");return!!t&&"id"in e&&(t===e.id||!!e.querySelector(`#${CSS.escape(t)}`))}function Ob(e){!rb(e)&&ob(e)&&e.focus()}function ib(e){var M;const t=null!=(M=e.getAttribute("tabindex"))?M:"";e.setAttribute("data-tabindex",t),e.setAttribute("tabindex","-1")}function sb(){return!!Eo&&/mac|iphone|ipad|ipod/i.test(navigator.platform)}function db(){return Eo&&sb()&&/apple/i.test(navigator.vendor)}var lb=db(),ub=["text","search","url","tel","email","password","number","date","month","week","time","datetime","datetime-local"];function Ab(e){return!("input"!==e.tagName.toLowerCase()||!e.type||"radio"!==e.type&&"checkbox"!==e.type)}function qb(e,M,t,o,n){return e?M?t&&!o?-1:void 0:t?n:n||0:n}function fb(e,M){return en((t=>{null==e||e(t),t.defaultPrevented||M&&(t.stopPropagation(),t.preventDefault())}))}var mb=!0;function Wb(e){const M=e.target;M&&"hasAttribute"in M&&(M.hasAttribute("data-focus-visible")||(mb=!1))}function _b(e){e.metaKey||e.ctrlKey||e.altKey||(mb=!0)}var hb=Yn((e=>{var t=e,{focusable:o=!0,accessibleWhenDisabled:n,autoFocus:b,onFocusVisible:p}=t,z=so(t,["focusable","accessibleWhenDisabled","autoFocus","onFocusVisible"]);const c=(0,M.useRef)(null);(0,M.useEffect)((()=>{o&&($o("mousedown",Wb,!0),$o("keydown",_b,!0))}),[o]),lb&&(0,M.useEffect)((()=>{if(!o)return;const e=c.current;if(!e)return;if(!Ab(e))return;const M=function(e){return"labels"in e?e.labels:null}(e);if(!M)return;const t=()=>queueMicrotask((()=>e.focus()));return M.forEach((e=>e.addEventListener("mouseup",t))),()=>{M.forEach((e=>e.removeEventListener("mouseup",t)))}}),[o]);const a=o&&To(z),r=!!a&&!n,[O,i]=(0,M.useState)(!1);(0,M.useEffect)((()=>{o&&r&&O&&i(!1)}),[o,r,O]),(0,M.useEffect)((()=>{if(!o)return;if(!O)return;const e=c.current;if(!e)return;if("undefined"==typeof IntersectionObserver)return;const M=new IntersectionObserver((()=>{ob(e)||i(!1)}));return M.observe(e),()=>M.disconnect()}),[o,O]);const s=fb(z.onKeyPressCapture,a),d=fb(z.onMouseDownCapture,a),l=fb(z.onClickCapture,a),u=z.onMouseDown,A=en((e=>{if(null==u||u(e),e.defaultPrevented)return;if(!o)return;const M=e.currentTarget;if(!lb)return;if(function(e){return Boolean(e.currentTarget&&!Do(e.currentTarget,e.target))}(e))return;if(!Co(M)&&!Ab(M))return;let t=!1;const n=()=>{t=!0};M.addEventListener("focusin",n,{capture:!0,once:!0}),Vo(M,"mouseup",(()=>{M.removeEventListener("focusin",n,!0),t||Ob(M)}))})),q=(e,M)=>{if(M&&(e.currentTarget=M),!o)return;const t=e.currentTarget;t&&ab(t)&&(null==p||p(e),e.defaultPrevented||i(!0))},f=z.onKeyDownCapture,m=en((e=>{if(null==f||f(e),e.defaultPrevented)return;if(!o)return;if(O)return;if(e.metaKey)return;if(e.altKey)return;if(e.ctrlKey)return;if(!Io(e))return;const M=e.currentTarget;queueMicrotask((()=>q(e,M)))})),W=z.onFocusCapture,_=en((e=>{if(null==W||W(e),e.defaultPrevented)return;if(!o)return;if(!Io(e))return void i(!1);const M=e.currentTarget,t=()=>q(e,M);mb||function(e){const{tagName:M,readOnly:t,type:o}=e;return"TEXTAREA"===M&&!t||"SELECT"===M&&!t||("INPUT"!==M||t?!!e.isContentEditable:ub.includes(o))}(e.target)?queueMicrotask(t):function(e){return"combobox"===e.getAttribute("role")&&!!e.dataset.name}(e.target)?Vo(e.target,"focusout",t):i(!1)})),h=z.onBlur,L=en((e=>{null==h||h(e),o&&Uo(e)&&i(!1)})),R=(0,M.useContext)(Mb),g=en((e=>{o&&b&&e&&R&&queueMicrotask((()=>{ab(e)||ob(e)&&e.focus()}))})),y=function(e,t){const o=e=>{if("string"==typeof e)return e},[n,b]=(0,M.useState)((()=>o(t)));return Qo((()=>{const M=e&&"current"in e?e.current:e;b((null==M?void 0:M.tagName.toLowerCase())||o(t))}),[e,t]),n}(c,z.as),v=o&&function(e){return!e||"button"===e||"input"===e||"select"===e||"textarea"===e||"a"===e}(y),N=o&&function(e){return!e||"button"===e||"input"===e||"select"===e||"textarea"===e}(y),k=r?Oo({pointerEvents:"none"},z.style):z.style;return io(Oo({"data-focus-visible":o&&O?"":void 0,"data-autofocus":!!b||void 0,"aria-disabled":!!a||void 0},z),{ref:Mn(c,g,z.ref),style:k,tabIndex:qb(o,r,v,N,z.tabIndex),disabled:!(!N||!r)||void 0,contentEditable:a?void 0:z.contentEditable,onKeyPressCapture:s,onClickCapture:l,onMouseDownCapture:d,onMouseDown:A,onKeyDownCapture:m,onFocusCapture:_,onBlur:L})}));En((e=>Xn("div",e=hb(e))));var Lb=Yn((e=>{var t=e,{store:o,showOnHover:n=!0}=t,b=so(t,["store","showOnHover"]);const p=Qn();No(o=o||p,!1);const z=o.useState("mounted"),c=To(b),a=(0,M.useRef)(0);(0,M.useEffect)((()=>()=>window.clearTimeout(a.current)),[]),(0,M.useEffect)((()=>$o("mouseleave",(e=>{if(!o)return;const{anchorElement:M}=o.getState();M&&e.target===M&&(window.clearTimeout(a.current),a.current=0)}),!0)),[o]);const r=b.onMouseMove,O=nn(n),i=((0,M.useEffect)((()=>{$o("mousemove",rn,!0),$o("mousedown",On,!0),$o("mouseup",On,!0),$o("keydown",On,!0),$o("scroll",On,!0)}),[]),en((()=>zn))),s=en((e=>{if(null==o||o.setAnchorElement(e.currentTarget),null==r||r(e),c)return;if(e.defaultPrevented)return;if(a.current)return;if(!i())return;if(!o)return;if(!O(e))return;const{showTimeout:M,timeout:t}=o.getState();a.current=window.setTimeout((()=>{a.current=0,i()&&(null==o||o.show())}),null!=M?M:t)}));return b=io(Oo({},b),{ref:Mn(o.setAnchorElement,z?o.setDisclosureElement:void 0,b.ref),onMouseMove:s}),hb(b)}));En((e=>Xn("a",Lb(e))));var Rb=Dn([Zn],[eb]),gb=(Rb.useContext,Rb.useScopedContext,Rb.useProviderContext),yb=(Rb.ContextProvider,Rb.ScopedContextProvider),vb=dn({activeStore:null}),Nb=Yn((e=>{var t=e,{store:o,showOnHover:n=!0}=t,b=so(t,["store","showOnHover"]);const p=gb();No(o=o||p,!1);const z=(0,M.useRef)(!1);(0,M.useEffect)((()=>qn(o,["mounted"],(e=>{e.mounted||(z.current=!1)}))),[o]),(0,M.useEffect)((()=>qn(o,["mounted","skipTimeout"],(e=>{if(!o)return;if(e.mounted){const{activeStore:e}=vb.getState();return e!==o&&(null==e||e.hide()),vb.setState("activeStore",o)}const M=setTimeout((()=>{const{activeStore:e}=vb.getState();e===o&&vb.setState("activeStore",null)}),e.skipTimeout);return()=>clearTimeout(M)}))),[o]);const c=b.onMouseEnter,a=en((e=>{null==c||c(e),z.current=!0})),r=b.onFocusVisible,O=en((e=>{null==r||r(e),e.defaultPrevented||(null==o||o.setAnchorElement(e.currentTarget),null==o||o.show())})),i=b.onBlur,s=en((e=>{if(null==i||i(e),e.defaultPrevented)return;const{activeStore:M}=vb.getState();M===o&&vb.setState("activeStore",null)})),d=o.useState("type"),l=o.useState((e=>{var M;return null==(M=e.contentElement)?void 0:M.id}));return b=io(Oo({"aria-labelledby":"label"===d?l:void 0,"aria-describedby":"description"===d?l:void 0},b),{onMouseEnter:a,onFocusVisible:O,onBlur:s}),Lb(Oo({store:o,showOnHover:e=>{if(!z.current)return!1;if(ko(n,e))return!1;const{activeStore:M}=vb.getState();return!M||(null==o||o.show(),!1)}},b))})),kb=En((e=>Xn("div",Nb(e))));function Tb(e){return[e.clientX,e.clientY]}function Bb(e,M){const[t,o]=e;let n=!1;for(let e=M.length,b=0,p=e-1;b<e;p=b++){const[z,c]=M[b],[a,r]=M[p],[,O]=M[0===p?e-1:p-1]||[0,0],i=(c-r)*(t-z)-(z-a)*(o-c);if(r<c){if(o>=r&&o<c){if(0===i)return!0;i>0&&(o===r?o>O&&(n=!n):n=!n)}}else if(c<r){if(o>c&&o<=r){if(0===i)return!0;i<0&&(o===r?o<O&&(n=!n):n=!n)}}else if(o==c&&(t>=a&&t<=z||t>=z&&t<=a))return!0}return n}function wb(e,M){const t=e.getBoundingClientRect(),{top:o,right:n,bottom:b,left:p}=t,[z,c]=function(e,M){const{top:t,right:o,bottom:n,left:b}=M,[p,z]=e;return[p<b?"left":p>o?"right":null,z<t?"top":z>n?"bottom":null]}(M,t),a=[M];return z?("top"!==c&&a.push(["left"===z?p:n,o]),a.push(["left"===z?n:p,o]),a.push(["left"===z?n:p,b]),"bottom"!==c&&a.push(["left"===z?p:n,b])):"top"===c?(a.push([p,o]),a.push([p,b]),a.push([n,b]),a.push([n,o])):(a.push([p,b]),a.push([p,o]),a.push([n,o]),a.push([n,b])),a}function Sb(e,...M){if(!e)return!1;const t=e.getAttribute("data-backdrop");return null!=t&&(""===t||"true"===t||!M.length||M.some((e=>t===e)))}var Eb=new WeakMap;function Xb(e,M,t){Eb.has(e)||Eb.set(e,new Map);const o=Eb.get(e),n=o.get(M);if(!n)return o.set(M,t()),()=>{var e;null==(e=o.get(M))||e(),o.delete(M)};const b=t(),p=()=>{b(),n(),o.delete(M)};return o.set(M,p),()=>{o.get(M)===p&&(b(),o.set(M,n))}}function Yb(e,M,t){return Xb(e,M,(()=>{const o=e.getAttribute(M);return e.setAttribute(M,t),()=>{null==o?e.removeAttribute(M):e.setAttribute(M,o)}}))}function Db(e,M,t){return Xb(e,M,(()=>{const o=M in e,n=e[M];return e[M]=t,()=>{o?e[M]=n:delete e[M]}}))}function xb(e,M){return e?Xb(e,"style",(()=>{const t=e.style.cssText;return Object.assign(e.style,M),()=>{e.style.cssText=t}})):()=>{}}var Cb=["SCRIPT","STYLE"];function Pb(e){return`__ariakit-dialog-snapshot-${e}`}function Hb(e,M,t){return!Cb.includes(M.tagName)&&!!function(e,M){const t=Xo(M),o=Pb(e);if(!t.body[o])return!0;for(;;){if(M===t.body)return!1;if(M[o])return!0;if(!M.parentElement)return!1;M=M.parentElement}}(e,M)&&!t.some((e=>e&&Do(M,e)))}function jb(e,M,t,o){for(let n of M){if(!(null==n?void 0:n.isConnected))continue;const b=M.some((e=>!!e&&e!==n&&e.contains(n))),p=Xo(n),z=n;for(;n.parentElement&&n!==p.body;){if(null==o||o(n.parentElement,z),!b)for(const o of n.parentElement.children)Hb(e,o,M)&&t(o,z);n=n.parentElement}}}function Fb(e="",M=!1){return`__ariakit-dialog-${M?"ancestor":"outside"}${e?`-${e}`:""}`}function Ib(e,M=""){return yo(Db(e,Fb("",!0),!0),Db(e,Fb(M,!0),!0))}function Ub(e,M){if(e[Fb(M,!0)])return!0;const t=Fb(M);for(;;){if(e[t])return!0;if(!e.parentElement)return!1;e=e.parentElement}}function Vb(e,M){const t=[],o=M.map((e=>null==e?void 0:e.id));return jb(e,M,(M=>{Sb(M,...o)||t.unshift(function(e,M=""){return yo(Db(e,Fb(),!0),Db(e,Fb(M),!0))}(M,e))}),((M,o)=>{o.hasAttribute("data-dialog")&&o.id!==e||t.unshift(Ib(M,e))})),()=>{t.forEach((e=>e()))}}Yn((e=>e));var $b=En((e=>Xn("div",e)));function Gb(e,M){const t=setTimeout(M,e);return()=>clearTimeout(t)}function Jb(...e){return e.join(", ").split(", ").reduce(((e,M)=>{const t=1e3*parseFloat(M||"0s");return t>e?t:e}),0)}function Kb(e,M,t){return!(t||!1===M||e&&!M)}Object.assign($b,["a","button","details","dialog","div","form","h1","h2","h3","h4","h5","h6","header","img","input","label","li","nav","ol","p","section","select","span","textarea","ul","svg"].reduce(((e,M)=>(e[M]=En((e=>Xn(M,e))),e)),{}));var Qb=Yn((e=>{var t=e,{store:o,alwaysVisible:n}=t,b=so(t,["store","alwaysVisible"]);const p=Cn();No(o=o||p,!1);const z=tn(b.id),[c,a]=(0,M.useState)(null),r=o.useState("open"),O=o.useState("mounted"),i=o.useState("animated"),s=o.useState("contentElement");Qo((()=>{if(i){if(null==s?void 0:s.isConnected)return function(e){let M=requestAnimationFrame((()=>{M=requestAnimationFrame(e)}));return()=>cancelAnimationFrame(M)}((()=>{a(r?"enter":"leave")}));a(null)}}),[i,s,r]),Qo((()=>{if(!o)return;if(!i)return;if(!s)return;if(!c)return;if("enter"===c&&!r)return;if("leave"===c&&r)return;if("number"==typeof i)return Gb(i,o.stopAnimation);const{transitionDuration:e,animationDuration:M,transitionDelay:t,animationDelay:n}=getComputedStyle(s),b=Jb(t,n)+Jb(e,M);return b?Gb(b,o.stopAnimation):void 0}),[o,i,s,r,c]);const d=Kb(O,(b=bn(b,(e=>(0,Sn.jsx)(Fn,{value:o,children:e})),[o])).hidden,n),l=d?io(Oo({},b.style),{display:"none"}):b.style;return io(Oo({id:z,"data-enter":"enter"===c?"":void 0,"data-leave":"leave"===c?"":void 0,hidden:d},b),{ref:Mn(z?o.setContentElement:null,b.ref),style:l})})),Zb=En((e=>Xn("div",Qb(e))));function ep({store:e,backdrop:t,backdropProps:o,alwaysVisible:n,hidden:b}){const p=(0,M.useRef)(null),z=function(e={}){const[M,t]=yn(vn,e);return Nn(M,t,e)}({disclosure:e}),c=e.useState("contentElement");Qo((()=>{const e=p.current,M=c;e&&M&&(e.style.zIndex=getComputedStyle(M).zIndex)}),[c]),Qo((()=>{const e=null==c?void 0:c.id;if(!e)return;const M=p.current;return M?Ib(M,e):void 0}),[c]),null!=b&&(o=io(Oo({},o),{hidden:b}));const a=Qb(io(Oo({store:z,role:"presentation","data-backdrop":(null==c?void 0:c.id)||"",alwaysVisible:n},o),{ref:Mn(null==o?void 0:o.ref,p),style:Oo({position:"fixed",top:0,right:0,bottom:0,left:0},null==o?void 0:o.style)}));if(!t)return null;if((0,M.isValidElement)(t))return(0,Sn.jsx)($b,io(Oo({},a),{render:t}));const r="boolean"!=typeof t?t:"div";return(0,Sn.jsx)($b,io(Oo({},a),{render:(0,Sn.jsx)(r,{})}))}En((e=>{var M=e,{unmountOnHide:t}=M,o=so(M,["unmountOnHide"]);const n=Cn();return!1===Rn(o.store||n,(e=>!t||(null==e?void 0:e.mounted)))?null:(0,Sn.jsx)(Zb,Oo({},o))}));var Mp=(0,M.createContext)({});function tp({store:e,type:t,listener:o,capture:n,domReady:b}){const p=en(o),z=e.useState("open"),c=(0,M.useRef)(!1);Qo((()=>{if(!z)return;if(!b)return;const{contentElement:M}=e.getState();if(!M)return;const t=()=>{c.current=!0};return M.addEventListener("focusin",t,!0),()=>M.removeEventListener("focusin",t,!0)}),[e,z,b]),(0,M.useEffect)((()=>{if(z)return $o(t,(M=>{const{contentElement:t,disclosureElement:o}=e.getState(),n=M.target;t&&n&&function(e){return"HTML"===e.tagName||Do(Xo(e).body,e)}(n)&&(Do(t,n)||function(e,M){if(!e)return!1;if(Do(e,M))return!0;const t=M.getAttribute("aria-activedescendant");if(t){const M=Xo(e).getElementById(t);if(M)return Do(e,M)}return!1}(o,n)||n.hasAttribute("data-focus-trap")||function(e,M){if(!("clientY"in e))return!1;const t=M.getBoundingClientRect();return 0!==t.width&&0!==t.height&&t.top<=e.clientY&&e.clientY<=t.top+t.height&&t.left<=e.clientX&&e.clientX<=t.left+t.width}(M,t)||c.current&&!Ub(n,t.id)||p(M))}),n)}),[z,n])}function op(e,M){return"function"==typeof e?e(M):!!e}function np(e){return Yb(e,"aria-hidden","true")}function bp(e,M){return"style"in e?"inert"in HTMLElement.prototype?Db(e,"inert",!0):yo(...pb(e,!0).map((e=>(null==M?void 0:M.some((M=>M&&Do(M,e))))?Ro:Yb(e,"tabindex","-1"))),np(e),xb(e,{pointerEvents:"none",userSelect:"none",cursor:"default"})):Ro}function pp(e,t,o){const n=function({attribute:e,contentId:t,contentElement:o,enabled:n}){const[b,p]=(0,M.useReducer)((()=>[]),[]),c=(0,M.useCallback)((()=>{if(!n)return!1;if(!o)return!1;const{body:M}=Xo(o),b=M.getAttribute(e);return!b||b===t}),[b,n,o,e,t]);return(0,M.useEffect)((()=>{if(!n)return;if(!t)return;if(!o)return;const{body:M}=Xo(o);if(c())return M.setAttribute(e,t),()=>M.removeAttribute(e);const b=new MutationObserver((()=>(0,z.flushSync)(p)));return b.observe(M,{attributeFilter:[e]}),()=>b.disconnect()}),[b,n,t,o,c,e]),c}({attribute:"data-dialog-prevent-body-scroll",contentElement:e,contentId:t,enabled:o});(0,M.useEffect)((()=>{if(!n())return;if(!e)return;const M=Xo(e),t=function(e){return Xo(e).defaultView||window}(e),{documentElement:o,body:b}=M,p=o.style.getPropertyValue("--scrollbar-width"),z=p?parseInt(p):t.innerWidth-o.clientWidth,c=function(e){const M=e.getBoundingClientRect().left;return Math.round(M)+e.scrollLeft?"paddingLeft":"paddingRight"}(o),a=sb()&&!(Eo&&navigator.platform.startsWith("Mac")&&(!Eo||!navigator.maxTouchPoints));return yo((O="--scrollbar-width",i=`${z}px`,(r=o)?Xb(r,O,(()=>{const e=r.style.getPropertyValue(O);return r.style.setProperty(O,i),()=>{e?r.style.setProperty(O,e):r.style.removeProperty(O)}})):()=>{}),a?(()=>{var e,M;const{scrollX:o,scrollY:n,visualViewport:p}=t,a=null!=(e=null==p?void 0:p.offsetLeft)?e:0,r=null!=(M=null==p?void 0:p.offsetTop)?M:0,O=xb(b,{position:"fixed",overflow:"hidden",top:-(n-Math.floor(r))+"px",left:-(o-Math.floor(a))+"px",right:"0",[c]:`${z}px`});return()=>{O(),t.scrollTo(o,n)}})():xb(b,{overflow:"hidden",[c]:`${z}px`}));var r,O,i}),[n,e])}var zp=Yn((e=>{var M=e,{autoFocusOnShow:t=!0}=M,o=so(M,["autoFocusOnShow"]);return bn(o,(e=>(0,Sn.jsx)(Mb.Provider,{value:t,children:e})),[t])}));En((e=>Xn("div",zp(e))));var cp=(0,M.createContext)(0);function ap({level:e,children:t}){const o=(0,M.useContext)(cp),n=Math.max(Math.min(e||o+1,6),1);return(0,Sn.jsx)(cp.Provider,{value:n,children:t})}var rp=Yn((e=>io(Oo({},e),{style:Oo({border:0,clip:"rect(0 0 0 0)",height:"1px",margin:"-1px",overflow:"hidden",padding:0,position:"absolute",whiteSpace:"nowrap",width:"1px"},e.style)})));En((e=>Xn("span",rp(e))));var Op=Yn((e=>(e=io(Oo({"data-focus-trap":"",tabIndex:0,"aria-hidden":!0},e),{style:Oo({position:"fixed",top:0,left:0},e.style)}),rp(e)))),ip=En((e=>Xn("span",Op(e)))),sp=(0,M.createContext)(null);function dp(e){queueMicrotask((()=>{null==e||e.focus()}))}var lp=Yn((e=>{var t=e,{preserveTabOrder:o,portalElement:n,portalRef:b,portal:p=!0}=t,c=so(t,["preserveTabOrder","portalElement","portalRef","portal"]);const a=(0,M.useRef)(null),r=Mn(a,c.ref),O=(0,M.useContext)(sp),[i,s]=(0,M.useState)(null),d=(0,M.useRef)(null),l=(0,M.useRef)(null),u=(0,M.useRef)(null),A=(0,M.useRef)(null);return Qo((()=>{const e=a.current;if(!e||!p)return void s(null);const M=function(e,M){return M?"function"==typeof M?M(e):M:Xo(e).createElement("div")}(e,n);if(!M)return void s(null);const t=M.isConnected;if(!t){const t=O||function(e){return Xo(e).body}(e);t.appendChild(M)}return M.id||(M.id=e.id?`portal/${e.id}`:function(e="id"){return`${e?`${e}-`:""}${Math.random().toString(36).substr(2,6)}`}()),s(M),wo(b,M),t?void 0:()=>{M.remove(),wo(b,null)}}),[p,n,O,b]),(0,M.useEffect)((()=>{if(!i)return;if(!o)return;let e=0;const M=M=>{if(Uo(M))return"focusin"===M.type?function(e){const M=e.querySelectorAll("[data-tabindex]"),t=e=>{const M=e.getAttribute("data-tabindex");e.removeAttribute("data-tabindex"),M?e.setAttribute("tabindex",M):e.removeAttribute("tabindex")};e.hasAttribute("data-tabindex")&&t(e),M.forEach(t)}(i):(cancelAnimationFrame(e),void(e=requestAnimationFrame((()=>{pb(i,!0).forEach(ib)}))))};return i.addEventListener("focusin",M,!0),i.addEventListener("focusout",M,!0),()=>{i.removeEventListener("focusin",M,!0),i.removeEventListener("focusout",M,!0)}}),[i,o]),c=bn(c,(e=>(e=(0,Sn.jsx)(sp.Provider,{value:i||O,children:e}),p?i?(e=(0,Sn.jsxs)(Sn.Fragment,{children:[o&&i&&(0,Sn.jsx)(ip,{ref:l,className:"__focus-trap-inner-before",onFocus:e=>{Uo(e,i)?dp(zb()):dp(d.current)}}),e,o&&i&&(0,Sn.jsx)(ip,{ref:u,className:"__focus-trap-inner-after",onFocus:e=>{Uo(e,i)?dp(cb()):dp(A.current)}})]}),i&&(e=(0,z.createPortal)(e,i)),e=(0,Sn.jsxs)(Sn.Fragment,{children:[o&&i&&(0,Sn.jsx)(ip,{ref:d,className:"__focus-trap-outer-before",onFocus:e=>{e.relatedTarget!==A.current&&Uo(e,i)?dp(l.current):dp(cb())}}),o&&(0,Sn.jsx)("span",{"aria-owns":null==i?void 0:i.id,style:{position:"fixed"}}),e,o&&i&&(0,Sn.jsx)(ip,{ref:A,className:"__focus-trap-outer-after",onFocus:e=>{if(Uo(e,i))dp(u.current);else{const e=zb();if(e===l.current)return void requestAnimationFrame((()=>{var e;return null==(e=zb())?void 0:e.focus()}));dp(e)}}})]})):(0,Sn.jsx)("span",{ref:r,id:c.id,style:{position:"fixed"},hidden:!0}):e)),[i,O,p,c.id,o]),c=io(Oo({},c),{ref:r})}));En((e=>Xn("div",lp(e))));var up=db();function Ap(e,M=!1){if(!e)return null;const t="current"in e?e.current:e;return t?M?ob(t)?t:null:t:null}var qp=Yn((e=>{var t=e,{store:o,open:n,onClose:b,focusable:p=!0,modal:z=!0,portal:c=!!z,backdrop:a=!!z,backdropProps:r,hideOnEscape:O=!0,hideOnInteractOutside:i=!0,getPersistentElements:s,preventBodyScroll:d=!!z,autoFocusOnShow:l=!0,autoFocusOnHide:u=!0,initialFocus:A,finalFocus:q,unmountOnHide:f}=t,m=so(t,["store","open","onClose","focusable","modal","portal","backdrop","backdropProps","hideOnEscape","hideOnInteractOutside","getPersistentElements","preventBodyScroll","autoFocusOnShow","autoFocusOnHide","initialFocus","finalFocus","unmountOnHide"]);const W=Hn(),_=(0,M.useRef)(null),h=function(e={}){const[M,t]=yn(kn,e);return Tn(M,t,e)}({store:o||W,open:n,setOpen(e){if(e)return;const M=_.current;if(!M)return;const t=new Event("close",{bubbles:!1,cancelable:!0});b&&M.addEventListener("close",b,{once:!0}),M.dispatchEvent(t),t.defaultPrevented&&h.setOpen(!0)}}),{portalRef:L,domReady:R}=pn(c,m.portalRef),g=m.preserveTabOrder,y=h.useState((e=>g&&!z&&e.mounted)),v=tn(m.id),N=h.useState("open"),k=h.useState("mounted"),T=h.useState("contentElement"),B=Kb(k,m.hidden,m.alwaysVisible);pp(T,v,d&&!B),function(e,t,o){const n=function(e){const t=(0,M.useRef)();return(0,M.useEffect)((()=>{if(e)return $o("mousedown",(e=>{t.current=e.target}),!0);t.current=null}),[e]),t}(e.useState("open")),b={store:e,domReady:o,capture:!0};tp(io(Oo({},b),{type:"click",listener:M=>{const{contentElement:o}=e.getState(),b=n.current;b&&jo(b)&&Ub(b,null==o?void 0:o.id)&&op(t,M)&&e.hide()}})),tp(io(Oo({},b),{type:"focusin",listener:M=>{const{contentElement:o}=e.getState();o&&M.target!==Xo(o)&&op(t,M)&&e.hide()}})),tp(io(Oo({},b),{type:"contextmenu",listener:M=>{op(t,M)&&e.hide()}}))}(h,i,R);const{wrapElement:w,nestedDialogs:S}=function(e){const t=(0,M.useContext)(Mp),[o,n]=(0,M.useState)([]),b=(0,M.useCallback)((e=>{var M;return n((M=>[...M,e])),yo(null==(M=t.add)?void 0:M.call(t,e),(()=>{n((M=>M.filter((M=>M!==e))))}))}),[t]);Qo((()=>qn(e,["open","contentElement"],(M=>{var o;if(M.open&&M.contentElement)return null==(o=t.add)?void 0:o.call(t,e)}))),[e,t]);const p=(0,M.useMemo)((()=>({store:e,add:b})),[e,b]);return{wrapElement:(0,M.useCallback)((e=>(0,Sn.jsx)(Mp.Provider,{value:p,children:e})),[p]),nestedDialogs:o}}(h);m=bn(m,w,[w]),Qo((()=>{if(!N)return;const e=_.current,M=Yo(e,!0);M&&"BODY"!==M.tagName&&(e&&Do(e,M)||h.setDisclosureElement(M))}),[h,N]),up&&(0,M.useEffect)((()=>{if(!k)return;const{disclosureElement:e}=h.getState();if(!e)return;if(!Co(e))return;const M=()=>{let M=!1;const t=()=>{M=!0};e.addEventListener("focusin",t,{capture:!0,once:!0}),Vo(e,"mouseup",(()=>{e.removeEventListener("focusin",t,!0),M||Ob(e)}))};return e.addEventListener("mousedown",M),()=>{e.removeEventListener("mousedown",M)}}),[h,k]);const E=z||c&&y&&db();(0,M.useEffect)((()=>{if(!k)return;if(!R)return;const e=_.current;return e&&E?e.querySelector("[data-dialog-dismiss]")?void 0:function(e,M){const t=Xo(e).createElement("button");return t.type="button",t.tabIndex=-1,t.textContent="Dismiss popup",Object.assign(t.style,{border:"0px",clip:"rect(0 0 0 0)",height:"1px",margin:"-1px",overflow:"hidden",padding:"0px",position:"absolute",whiteSpace:"nowrap",width:"1px"}),t.addEventListener("click",M),e.prepend(t),()=>{t.removeEventListener("click",M),t.remove()}}(e,h.hide):void 0}),[h,k,R,E]),Qo((()=>{if(N)return;if(!k)return;if(!R)return;const e=_.current;return e?bp(e):void 0}),[N,k,R]);const X=N&&R;Qo((()=>{if(!v)return;if(!X)return;const e=_.current;return function(e,M){const{body:t}=Xo(M[0]),o=[];return jb(e,M,(M=>{o.push(Db(M,Pb(e),!0))})),yo(Db(t,Pb(e),!0),(()=>o.forEach((e=>e()))))}(v,[e])}),[v,X]);const Y=en(s);Qo((()=>{if(!v)return;if(!X)return;const{disclosureElement:e}=h.getState(),M=[_.current,...Y()||[],...S.map((e=>e.getState().contentElement))];return E?z?yo(Vb(v,M),function(e,M){const t=[],o=M.map((e=>null==e?void 0:e.id));return jb(e,M,(e=>{Sb(e,...o)||t.unshift(bp(e,M))})),()=>{t.forEach((e=>e()))}}(v,M)):yo(Vb(v,[e,...M]),function(e,M){const t=[],o=M.map((e=>null==e?void 0:e.id));return jb(e,M,(e=>{Sb(e,...o)||t.unshift(np(e))})),()=>{t.forEach((e=>e()))}}(v,M)):Vb(v,[e,...M])}),[v,h,X,Y,S,E,z]);const D=!!l,x=nn(l),[C,P]=(0,M.useState)(!1);(0,M.useEffect)((()=>{if(!N)return;if(!D)return;if(!R)return;if(!(null==T?void 0:T.isConnected))return;const e=Ap(A,!0)||T.querySelector("[data-autofocus=true],[autofocus]")||function(e,M,t){const[o]=pb(e,M,t);return o||null}(T,!0,c&&y)||T,M=ob(e);x(M?e:null)&&(P(!0),queueMicrotask((()=>{e.focus(),up&&e.scrollIntoView({block:"nearest",inline:"nearest"})})))}),[N,D,R,T,A,c,y,x]);const H=!!u,j=nn(u),[F,I]=(0,M.useState)(!1);(0,M.useEffect)((()=>{if(N)return I(!0),()=>I(!1)}),[N]);const U=(0,M.useCallback)(((e,M=!0)=>{const{disclosureElement:t}=h.getState();if(function(e){const M=Yo();return!(!M||e&&Do(e,M)||!ob(M))}(e))return;let o=Ap(q)||t;if(null==o?void 0:o.id){const e=Xo(o),M=`[aria-activedescendant="${o.id}"]`,t=e.querySelector(M);t&&(o=t)}if(o&&!ob(o)){const e=Fo(o,"[data-dialog]");if(e&&e.id){const M=Xo(e),t=`[aria-controls~="${e.id}"]`,n=M.querySelector(t);n&&(o=n)}}const n=o&&ob(o);n||!M?j(n?o:null)&&n&&(null==o||o.focus()):requestAnimationFrame((()=>U(e,!1)))}),[h,q,j]);Qo((()=>{if(N)return;if(!F)return;if(!H)return;const e=_.current;U(e)}),[N,F,R,H,U]),(0,M.useEffect)((()=>{if(!F)return;if(!H)return;const e=_.current;return()=>U(e)}),[F,H,U]);const V=nn(O);(0,M.useEffect)((()=>{if(R&&k)return $o("keydown",(e=>{if("Escape"!==e.key)return;if(e.defaultPrevented)return;const M=_.current;if(!M)return;if(Ub(M))return;const t=e.target;if(!t)return;const{disclosureElement:o}=h.getState();("BODY"===t.tagName||Do(M,t)||!o||Do(o,t))&&V(e)&&h.hide()}),!0)}),[h,R,k,V]);const $=(m=bn(m,(e=>(0,Sn.jsx)(ap,{level:z?1:void 0,children:e})),[z])).hidden,G=m.alwaysVisible;m=bn(m,(e=>a?(0,Sn.jsxs)(Sn.Fragment,{children:[(0,Sn.jsx)(ep,{store:h,backdrop:a,backdropProps:r,hidden:$,alwaysVisible:G}),e]}):e),[h,a,r,$,G]);const[J,K]=(0,M.useState)(),[Q,Z]=(0,M.useState)();return m=bn(m,(e=>(0,Sn.jsx)(Fn,{value:h,children:(0,Sn.jsx)(In.Provider,{value:K,children:(0,Sn.jsx)(Un.Provider,{value:Z,children:e})})})),[h]),m=io(Oo({id:v,"data-dialog":"",role:"dialog",tabIndex:p?-1:void 0,"aria-labelledby":J,"aria-describedby":Q},m),{ref:Mn(_,m.ref)}),m=zp(io(Oo({},m),{autoFocusOnShow:C})),m=Qb(Oo({store:h},m)),m=hb(io(Oo({},m),{focusable:p})),lp(io(Oo({portal:c},m),{portalRef:L,preserveTabOrder:y}))}));function fp(e,M=Hn){return En((t=>{const o=M();return Rn(t.store||o,(e=>!t.unmountOnHide||(null==e?void 0:e.mounted)||!!t.open))?(0,Sn.jsx)(e,Oo({},t)):null}))}fp(En((e=>Xn("div",qp(e)))),Hn);const mp=Math.min,Wp=Math.max,_p=Math.round,hp=Math.floor,Lp=e=>({x:e,y:e}),Rp={left:"right",right:"left",bottom:"top",top:"bottom"},gp={start:"end",end:"start"};function yp(e,M,t){return Wp(e,mp(M,t))}function vp(e,M){return"function"==typeof e?e(M):e}function Np(e){return e.split("-")[0]}function kp(e){return e.split("-")[1]}function Tp(e){return"x"===e?"y":"x"}function Bp(e){return"y"===e?"height":"width"}function wp(e){return["top","bottom"].includes(Np(e))?"y":"x"}function Sp(e){return Tp(wp(e))}function Ep(e){return e.replace(/start|end/g,(e=>gp[e]))}function Xp(e){return e.replace(/left|right|bottom|top/g,(e=>Rp[e]))}function Yp(e){return"number"!=typeof e?function(e){return{top:0,right:0,bottom:0,left:0,...e}}(e):{top:e,right:e,bottom:e,left:e}}function Dp(e){return{...e,top:e.y,left:e.x,right:e.x+e.width,bottom:e.y+e.height}}function xp(e,M,t){let{reference:o,floating:n}=e;const b=wp(M),p=Sp(M),z=Bp(p),c=Np(M),a="y"===b,r=o.x+o.width/2-n.width/2,O=o.y+o.height/2-n.height/2,i=o[z]/2-n[z]/2;let s;switch(c){case"top":s={x:r,y:o.y-n.height};break;case"bottom":s={x:r,y:o.y+o.height};break;case"right":s={x:o.x+o.width,y:O};break;case"left":s={x:o.x-n.width,y:O};break;default:s={x:o.x,y:o.y}}switch(kp(M)){case"start":s[p]-=i*(t&&a?-1:1);break;case"end":s[p]+=i*(t&&a?-1:1)}return s}async function Cp(e,M){var t;void 0===M&&(M={});const{x:o,y:n,platform:b,rects:p,elements:z,strategy:c}=e,{boundary:a="clippingAncestors",rootBoundary:r="viewport",elementContext:O="floating",altBoundary:i=!1,padding:s=0}=vp(M,e),d=Yp(s),l=z[i?"floating"===O?"reference":"floating":O],u=Dp(await b.getClippingRect({element:null==(t=await(null==b.isElement?void 0:b.isElement(l)))||t?l:l.contextElement||await(null==b.getDocumentElement?void 0:b.getDocumentElement(z.floating)),boundary:a,rootBoundary:r,strategy:c})),A="floating"===O?{...p.floating,x:o,y:n}:p.reference,q=await(null==b.getOffsetParent?void 0:b.getOffsetParent(z.floating)),f=await(null==b.isElement?void 0:b.isElement(q))&&await(null==b.getScale?void 0:b.getScale(q))||{x:1,y:1},m=Dp(b.convertOffsetParentRelativeRectToViewportRelativeRect?await b.convertOffsetParentRelativeRectToViewportRelativeRect({rect:A,offsetParent:q,strategy:c}):A);return{top:(u.top-m.top+d.top)/f.y,bottom:(m.bottom-u.bottom+d.bottom)/f.y,left:(u.left-m.left+d.left)/f.x,right:(m.right-u.right+d.right)/f.x}}function Pp(e){return Fp(e)?(e.nodeName||"").toLowerCase():"#document"}function Hp(e){var M;return(null==e||null==(M=e.ownerDocument)?void 0:M.defaultView)||window}function jp(e){var M;return null==(M=(Fp(e)?e.ownerDocument:e.document)||window.document)?void 0:M.documentElement}function Fp(e){return e instanceof Node||e instanceof Hp(e).Node}function Ip(e){return e instanceof Element||e instanceof Hp(e).Element}function Up(e){return e instanceof HTMLElement||e instanceof Hp(e).HTMLElement}function Vp(e){return"undefined"!=typeof ShadowRoot&&(e instanceof ShadowRoot||e instanceof Hp(e).ShadowRoot)}function $p(e){const{overflow:M,overflowX:t,overflowY:o,display:n}=Zp(e);return/auto|scroll|overlay|hidden|clip/.test(M+o+t)&&!["inline","contents"].includes(n)}function Gp(e){return["table","td","th"].includes(Pp(e))}function Jp(e){const M=Kp(),t=Zp(e);return"none"!==t.transform||"none"!==t.perspective||!!t.containerType&&"normal"!==t.containerType||!M&&!!t.backdropFilter&&"none"!==t.backdropFilter||!M&&!!t.filter&&"none"!==t.filter||["transform","perspective","filter"].some((e=>(t.willChange||"").includes(e)))||["paint","layout","strict","content"].some((e=>(t.contain||"").includes(e)))}function Kp(){return!("undefined"==typeof CSS||!CSS.supports)&&CSS.supports("-webkit-backdrop-filter","none")}function Qp(e){return["html","body","#document"].includes(Pp(e))}function Zp(e){return Hp(e).getComputedStyle(e)}function ez(e){return Ip(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function Mz(e){if("html"===Pp(e))return e;const M=e.assignedSlot||e.parentNode||Vp(e)&&e.host||jp(e);return Vp(M)?M.host:M}function tz(e){const M=Mz(e);return Qp(M)?e.ownerDocument?e.ownerDocument.body:e.body:Up(M)&&$p(M)?M:tz(M)}function oz(e,M){var t;void 0===M&&(M=[]);const o=tz(e),n=o===(null==(t=e.ownerDocument)?void 0:t.body),b=Hp(o);return n?M.concat(b,b.visualViewport||[],$p(o)?o:[]):M.concat(o,oz(o))}function nz(e){const M=Zp(e);let t=parseFloat(M.width)||0,o=parseFloat(M.height)||0;const n=Up(e),b=n?e.offsetWidth:t,p=n?e.offsetHeight:o,z=_p(t)!==b||_p(o)!==p;return z&&(t=b,o=p),{width:t,height:o,$:z}}function bz(e){return Ip(e)?e:e.contextElement}function pz(e){const M=bz(e);if(!Up(M))return Lp(1);const t=M.getBoundingClientRect(),{width:o,height:n,$:b}=nz(M);let p=(b?_p(t.width):t.width)/o,z=(b?_p(t.height):t.height)/n;return p&&Number.isFinite(p)||(p=1),z&&Number.isFinite(z)||(z=1),{x:p,y:z}}const zz=Lp(0);function cz(e){const M=Hp(e);return Kp()&&M.visualViewport?{x:M.visualViewport.offsetLeft,y:M.visualViewport.offsetTop}:zz}function az(e,M,t,o){void 0===M&&(M=!1),void 0===t&&(t=!1);const n=e.getBoundingClientRect(),b=bz(e);let p=Lp(1);M&&(o?Ip(o)&&(p=pz(o)):p=pz(e));const z=function(e,M,t){return void 0===M&&(M=!1),!(!t||M&&t!==Hp(e))&&M}(b,t,o)?cz(b):Lp(0);let c=(n.left+z.x)/p.x,a=(n.top+z.y)/p.y,r=n.width/p.x,O=n.height/p.y;if(b){const e=Hp(b),M=o&&Ip(o)?Hp(o):o;let t=e.frameElement;for(;t&&o&&M!==e;){const e=pz(t),M=t.getBoundingClientRect(),o=Zp(t),n=M.left+(t.clientLeft+parseFloat(o.paddingLeft))*e.x,b=M.top+(t.clientTop+parseFloat(o.paddingTop))*e.y;c*=e.x,a*=e.y,r*=e.x,O*=e.y,c+=n,a+=b,t=Hp(t).frameElement}}return Dp({width:r,height:O,x:c,y:a})}function rz(e){return az(jp(e)).left+ez(e).scrollLeft}function Oz(e,M,t){let o;if("viewport"===M)o=function(e,M){const t=Hp(e),o=jp(e),n=t.visualViewport;let b=o.clientWidth,p=o.clientHeight,z=0,c=0;if(n){b=n.width,p=n.height;const e=Kp();(!e||e&&"fixed"===M)&&(z=n.offsetLeft,c=n.offsetTop)}return{width:b,height:p,x:z,y:c}}(e,t);else if("document"===M)o=function(e){const M=jp(e),t=ez(e),o=e.ownerDocument.body,n=Wp(M.scrollWidth,M.clientWidth,o.scrollWidth,o.clientWidth),b=Wp(M.scrollHeight,M.clientHeight,o.scrollHeight,o.clientHeight);let p=-t.scrollLeft+rz(e);const z=-t.scrollTop;return"rtl"===Zp(o).direction&&(p+=Wp(M.clientWidth,o.clientWidth)-n),{width:n,height:b,x:p,y:z}}(jp(e));else if(Ip(M))o=function(e,M){const t=az(e,!0,"fixed"===M),o=t.top+e.clientTop,n=t.left+e.clientLeft,b=Up(e)?pz(e):Lp(1);return{width:e.clientWidth*b.x,height:e.clientHeight*b.y,x:n*b.x,y:o*b.y}}(M,t);else{const t=cz(e);o={...M,x:M.x-t.x,y:M.y-t.y}}return Dp(o)}function iz(e,M){const t=Mz(e);return!(t===M||!Ip(t)||Qp(t))&&("fixed"===Zp(t).position||iz(t,M))}function sz(e,M,t){const o=Up(M),n=jp(M),b="fixed"===t,p=az(e,!0,b,M);let z={scrollLeft:0,scrollTop:0};const c=Lp(0);if(o||!o&&!b)if(("body"!==Pp(M)||$p(n))&&(z=ez(M)),o){const e=az(M,!0,b,M);c.x=e.x+M.clientLeft,c.y=e.y+M.clientTop}else n&&(c.x=rz(n));return{x:p.left+z.scrollLeft-c.x,y:p.top+z.scrollTop-c.y,width:p.width,height:p.height}}function dz(e,M){return Up(e)&&"fixed"!==Zp(e).position?M?M(e):e.offsetParent:null}function lz(e,M){const t=Hp(e);if(!Up(e))return t;let o=dz(e,M);for(;o&&Gp(o)&&"static"===Zp(o).position;)o=dz(o,M);return o&&("html"===Pp(o)||"body"===Pp(o)&&"static"===Zp(o).position&&!Jp(o))?t:o||function(e){let M=Mz(e);for(;Up(M)&&!Qp(M);){if(Jp(M))return M;M=Mz(M)}return null}(e)||t}const uz={convertOffsetParentRelativeRectToViewportRelativeRect:function(e){let{rect:M,offsetParent:t,strategy:o}=e;const n=Up(t),b=jp(t);if(t===b)return M;let p={scrollLeft:0,scrollTop:0},z=Lp(1);const c=Lp(0);if((n||!n&&"fixed"!==o)&&(("body"!==Pp(t)||$p(b))&&(p=ez(t)),Up(t))){const e=az(t);z=pz(t),c.x=e.x+t.clientLeft,c.y=e.y+t.clientTop}return{width:M.width*z.x,height:M.height*z.y,x:M.x*z.x-p.scrollLeft*z.x+c.x,y:M.y*z.y-p.scrollTop*z.y+c.y}},getDocumentElement:jp,getClippingRect:function(e){let{element:M,boundary:t,rootBoundary:o,strategy:n}=e;const b="clippingAncestors"===t?function(e,M){const t=M.get(e);if(t)return t;let o=oz(e).filter((e=>Ip(e)&&"body"!==Pp(e))),n=null;const b="fixed"===Zp(e).position;let p=b?Mz(e):e;for(;Ip(p)&&!Qp(p);){const M=Zp(p),t=Jp(p);t||"fixed"!==M.position||(n=null),(b?!t&&!n:!t&&"static"===M.position&&n&&["absolute","fixed"].includes(n.position)||$p(p)&&!t&&iz(e,p))?o=o.filter((e=>e!==p)):n=M,p=Mz(p)}return M.set(e,o),o}(M,this._c):[].concat(t),p=[...b,o],z=p[0],c=p.reduce(((e,t)=>{const o=Oz(M,t,n);return e.top=Wp(o.top,e.top),e.right=mp(o.right,e.right),e.bottom=mp(o.bottom,e.bottom),e.left=Wp(o.left,e.left),e}),Oz(M,z,n));return{width:c.right-c.left,height:c.bottom-c.top,x:c.left,y:c.top}},getOffsetParent:lz,getElementRects:async function(e){let{reference:M,floating:t,strategy:o}=e;const n=this.getOffsetParent||lz,b=this.getDimensions;return{reference:sz(M,await n(t),o),floating:{x:0,y:0,...await b(t)}}},getClientRects:function(e){return Array.from(e.getClientRects())},getDimensions:function(e){return nz(e)},getScale:pz,isElement:Ip,isRTL:function(e){return"rtl"===Zp(e).direction}};function Az(e=0,M=0,t=0,o=0){if("function"==typeof DOMRect)return new DOMRect(e,M,t,o);const n={x:e,y:M,width:t,height:o,top:M,right:e+t,bottom:M+o,left:e};return io(Oo({},n),{toJSON:()=>n})}function qz(e){return/^(?:top|bottom|left|right)(?:-(?:start|end))?$/.test(e)}function fz(e){const M=window.devicePixelRatio||1;return Math.round(e*M)/M}function mz(e,M){return t=({placement:t})=>{var o;const n=((null==e?void 0:e.clientHeight)||0)/2,b="number"==typeof M.gutter?M.gutter+n:null!=(o=M.gutter)?o:n;return{crossAxis:t.split("-")[1]?void 0:M.shift,mainAxis:b,alignmentAxis:M.shift}},void 0===t&&(t=0),{name:"offset",options:t,async fn(e){const{x:M,y:o}=e,n=await async function(e,M){const{placement:t,platform:o,elements:n}=e,b=await(null==o.isRTL?void 0:o.isRTL(n.floating)),p=Np(t),z=kp(t),c="y"===wp(t),a=["left","top"].includes(p)?-1:1,r=b&&c?-1:1,O=vp(M,e);let{mainAxis:i,crossAxis:s,alignmentAxis:d}="number"==typeof O?{mainAxis:O,crossAxis:0,alignmentAxis:null}:{mainAxis:0,crossAxis:0,alignmentAxis:null,...O};return z&&"number"==typeof d&&(s="end"===z?-1*d:d),c?{x:s*r,y:i*a}:{x:i*a,y:s*r}}(e,t);return{x:M+n.x,y:o+n.y,data:n}}};var t}function Wz(e){if(!1===e.flip)return;const M="string"==typeof e.flip?e.flip.split(" "):void 0;return No(!M||M.every(qz),!1),void 0===(t={padding:e.overflowPadding,fallbackPlacements:M})&&(t={}),{name:"flip",options:t,async fn(e){var M;const{placement:o,middlewareData:n,rects:b,initialPlacement:p,platform:z,elements:c}=e,{mainAxis:a=!0,crossAxis:r=!0,fallbackPlacements:O,fallbackStrategy:i="bestFit",fallbackAxisSideDirection:s="none",flipAlignment:d=!0,...l}=vp(t,e),u=Np(o),A=Np(p)===p,q=await(null==z.isRTL?void 0:z.isRTL(c.floating)),f=O||(A||!d?[Xp(p)]:function(e){const M=Xp(e);return[Ep(e),M,Ep(M)]}(p));O||"none"===s||f.push(...function(e,M,t,o){const n=kp(e);let b=function(e,M,t){const o=["left","right"],n=["right","left"],b=["top","bottom"],p=["bottom","top"];switch(e){case"top":case"bottom":return t?M?n:o:M?o:n;case"left":case"right":return M?b:p;default:return[]}}(Np(e),"start"===t,o);return n&&(b=b.map((e=>e+"-"+n)),M&&(b=b.concat(b.map(Ep)))),b}(p,d,s,q));const m=[p,...f],W=await Cp(e,l),_=[];let h=(null==(M=n.flip)?void 0:M.overflows)||[];if(a&&_.push(W[u]),r){const e=function(e,M,t){void 0===t&&(t=!1);const o=kp(e),n=Sp(e),b=Bp(n);let p="x"===n?o===(t?"end":"start")?"right":"left":"start"===o?"bottom":"top";return M.reference[b]>M.floating[b]&&(p=Xp(p)),[p,Xp(p)]}(o,b,q);_.push(W[e[0]],W[e[1]])}if(h=[...h,{placement:o,overflows:_}],!_.every((e=>e<=0))){var L,R;const e=((null==(L=n.flip)?void 0:L.index)||0)+1,M=m[e];if(M)return{data:{index:e,overflows:h},reset:{placement:M}};let t=null==(R=h.filter((e=>e.overflows[0]<=0)).sort(((e,M)=>e.overflows[1]-M.overflows[1]))[0])?void 0:R.placement;if(!t)switch(i){case"bestFit":{var g;const e=null==(g=h.map((e=>[e.placement,e.overflows.filter((e=>e>0)).reduce(((e,M)=>e+M),0)])).sort(((e,M)=>e[1]-M[1]))[0])?void 0:g[0];e&&(t=e);break}case"initialPlacement":t=p}if(o!==t)return{reset:{placement:t}}}return{}}};var t}function _z(e){var M;if(e.slide||e.overlap)return void 0===(M={mainAxis:e.slide,crossAxis:e.overlap,padding:e.overflowPadding})&&(M={}),{name:"shift",options:M,async fn(e){const{x:t,y:o,placement:n}=e,{mainAxis:b=!0,crossAxis:p=!1,limiter:z={fn:e=>{let{x:M,y:t}=e;return{x:M,y:t}}},...c}=vp(M,e),a={x:t,y:o},r=await Cp(e,c),O=wp(Np(n)),i=Tp(O);let s=a[i],d=a[O];if(b){const e="y"===i?"bottom":"right";s=yp(s+r["y"===i?"top":"left"],s,s-r[e])}if(p){const e="y"===O?"bottom":"right";d=yp(d+r["y"===O?"top":"left"],d,d-r[e])}const l=z.fn({...e,[i]:s,[O]:d});return{...l,data:{x:l.x-t,y:l.y-o}}}}}function hz(e){return void 0===(M={padding:e.overflowPadding,apply({elements:M,availableWidth:t,availableHeight:o,rects:n}){const b=M.floating,p=Math.round(n.reference.width);t=Math.floor(t),o=Math.floor(o),b.style.setProperty("--popover-anchor-width",`${p}px`),b.style.setProperty("--popover-available-width",`${t}px`),b.style.setProperty("--popover-available-height",`${o}px`),e.sameWidth&&(b.style.width=`${p}px`),e.fitViewport&&(b.style.maxWidth=`${t}px`,b.style.maxHeight=`${o}px`)}})&&(M={}),{name:"size",options:M,async fn(e){const{placement:t,rects:o,platform:n,elements:b}=e,{apply:p=(()=>{}),...z}=vp(M,e),c=await Cp(e,z),a=Np(t),r=kp(t),O="y"===wp(t),{width:i,height:s}=o.floating;let d,l;"top"===a||"bottom"===a?(d=a,l=r===(await(null==n.isRTL?void 0:n.isRTL(b.floating))?"start":"end")?"left":"right"):(l=a,d="end"===r?"top":"bottom");const u=s-c[d],A=i-c[l],q=!e.middlewareData.shift;let f=u,m=A;if(O){const e=i-c.left-c.right;m=r||q?mp(A,e):e}else{const e=s-c.top-c.bottom;f=r||q?mp(u,e):e}if(q&&!r){const e=Wp(c.left,0),M=Wp(c.right,0),t=Wp(c.top,0),o=Wp(c.bottom,0);O?m=i-2*(0!==e||0!==M?e+M:Wp(c.left,c.right)):f=s-2*(0!==t||0!==o?t+o:Wp(c.top,c.bottom))}await p({...e,availableWidth:m,availableHeight:f});const W=await n.getDimensions(b.floating);return i!==W.width||s!==W.height?{reset:{rects:!0}}:{}}};var M}function Lz(e,M){var t;if(e)return{name:"arrow",options:t={element:e,padding:M.arrowPadding},async fn(e){const{x:M,y:o,placement:n,rects:b,platform:p,elements:z}=e,{element:c,padding:a=0}=vp(t,e)||{};if(null==c)return{};const r=Yp(a),O={x:M,y:o},i=Sp(n),s=Bp(i),d=await p.getDimensions(c),l="y"===i,u=l?"top":"left",A=l?"bottom":"right",q=l?"clientHeight":"clientWidth",f=b.reference[s]+b.reference[i]-O[i]-b.floating[s],m=O[i]-b.reference[i],W=await(null==p.getOffsetParent?void 0:p.getOffsetParent(c));let _=W?W[q]:0;_&&await(null==p.isElement?void 0:p.isElement(W))||(_=z.floating[q]||b.floating[s]);const h=f/2-m/2,L=_/2-d[s]/2-1,R=mp(r[u],L),g=mp(r[A],L),y=R,v=_-d[s]-g,N=_/2-d[s]/2+h,k=yp(y,N,v),T=null!=kp(n)&&N!=k&&b.reference[s]/2-(N<y?R:g)-d[s]/2<0?N<y?y-N:v-N:0;return{[i]:O[i]-T,data:{[i]:k,centerOffset:N-k+T}}}}}var Rz=Yn((e=>{var t=e,{store:o,modal:n=!1,portal:b=!!n,preserveTabOrder:p=!0,autoFocusOnShow:z=!0,wrapperProps:c,fixed:a=!1,flip:r=!0,shift:O=0,slide:i=!0,overlap:s=!1,sameWidth:d=!1,fitViewport:l=!1,gutter:u,arrowPadding:A=4,overflowPadding:q=8,getAnchorRect:f,updatePosition:m}=t,W=so(t,["store","modal","portal","preserveTabOrder","autoFocusOnShow","wrapperProps","fixed","flip","shift","slide","overlap","sameWidth","fitViewport","gutter","arrowPadding","overflowPadding","getAnchorRect","updatePosition"]);const _=$n();No(o=o||_,!1);const h=o.useState("arrowElement"),L=o.useState("anchorElement"),R=o.useState("popoverElement"),g=o.useState("contentElement"),y=o.useState("placement"),v=o.useState("mounted"),N=o.useState("rendered"),[k,T]=(0,M.useState)(!1),{portalRef:B,domReady:w}=pn(b,W.portalRef),S=en(f),E=en(m),X=!!m;Qo((()=>{if(!(null==R?void 0:R.isConnected))return;R.style.setProperty("--popover-overflow-padding",`${q}px`);const e=function(e,M){return{contextElement:e||void 0,getBoundingClientRect:()=>{const t=e,o=null==M?void 0:M(t);return o||!t?function(e){if(!e)return Az();const{x:M,y:t,width:o,height:n}=e;return Az(M,t,o,n)}(o):t.getBoundingClientRect()}}}(L,S),M=async()=>{if(!v)return;const M=[mz(h,{gutter:u,shift:O}),Wz({flip:r,overflowPadding:q}),_z({slide:i,overlap:s,overflowPadding:q}),Lz(h,{arrowPadding:A}),hz({sameWidth:d,fitViewport:l,overflowPadding:q})],t=await((e,M,t)=>{const o=new Map,n={platform:uz,...t},b={...n.platform,_c:o};return(async(e,M,t)=>{const{placement:o="bottom",strategy:n="absolute",middleware:b=[],platform:p}=t,z=b.filter(Boolean),c=await(null==p.isRTL?void 0:p.isRTL(M));let a=await p.getElementRects({reference:e,floating:M,strategy:n}),{x:r,y:O}=xp(a,o,c),i=o,s={},d=0;for(let t=0;t<z.length;t++){const{name:b,fn:l}=z[t],{x:u,y:A,data:q,reset:f}=await l({x:r,y:O,initialPlacement:o,placement:i,strategy:n,middlewareData:s,rects:a,platform:p,elements:{reference:e,floating:M}});r=null!=u?u:r,O=null!=A?A:O,s={...s,[b]:{...s[b],...q}},f&&d<=50&&(d++,"object"==typeof f&&(f.placement&&(i=f.placement),f.rects&&(a=!0===f.rects?await p.getElementRects({reference:e,floating:M,strategy:n}):f.rects),({x:r,y:O}=xp(a,i,c))),t=-1)}return{x:r,y:O,placement:i,strategy:n,middlewareData:s}})(e,M,{...n,platform:b})})(e,R,{placement:y,strategy:a?"fixed":"absolute",middleware:M});null==o||o.setState("currentPlacement",t.placement),T(!0);const n=fz(t.x),b=fz(t.y);if(Object.assign(R.style,{top:"0",left:"0",transform:`translate3d(${n}px,${b}px,0)`}),h&&t.middlewareData.arrow){const{x:e,y:M}=t.middlewareData.arrow,o=t.placement.split("-")[0];Object.assign(h.style,{left:null!=e?`${e}px`:"",top:null!=M?`${M}px`:"",[o]:"100%"})}},t=function(e,M,t,o){void 0===o&&(o={});const{ancestorScroll:n=!0,ancestorResize:b=!0,elementResize:p="function"==typeof ResizeObserver,layoutShift:z="function"==typeof IntersectionObserver,animationFrame:c=!1}=o,a=bz(e),r=n||b?[...a?oz(a):[],...oz(M)]:[];r.forEach((e=>{n&&e.addEventListener("scroll",t,{passive:!0}),b&&e.addEventListener("resize",t)}));const O=a&&z?function(e,M){let t,o=null;const n=jp(e);function b(){clearTimeout(t),o&&o.disconnect(),o=null}return function p(z,c){void 0===z&&(z=!1),void 0===c&&(c=1),b();const{left:a,top:r,width:O,height:i}=e.getBoundingClientRect();if(z||M(),!O||!i)return;const s={rootMargin:-hp(r)+"px "+-hp(n.clientWidth-(a+O))+"px "+-hp(n.clientHeight-(r+i))+"px "+-hp(a)+"px",threshold:Wp(0,mp(1,c))||1};let d=!0;function l(e){const M=e[0].intersectionRatio;if(M!==c){if(!d)return p();M?p(!1,M):t=setTimeout((()=>{p(!1,1e-7)}),100)}d=!1}try{o=new IntersectionObserver(l,{...s,root:n.ownerDocument})}catch(e){o=new IntersectionObserver(l,s)}o.observe(e)}(!0),b}(a,t):null;let i,s=-1,d=null;p&&(d=new ResizeObserver((e=>{let[o]=e;o&&o.target===a&&d&&(d.unobserve(M),cancelAnimationFrame(s),s=requestAnimationFrame((()=>{d&&d.observe(M)}))),t()})),a&&!c&&d.observe(a),d.observe(M));let l=c?az(e):null;return c&&function M(){const o=az(e);!l||o.x===l.x&&o.y===l.y&&o.width===l.width&&o.height===l.height||t(),l=o,i=requestAnimationFrame(M)}(),t(),()=>{r.forEach((e=>{n&&e.removeEventListener("scroll",t),b&&e.removeEventListener("resize",t)})),O&&O(),d&&d.disconnect(),d=null,c&&cancelAnimationFrame(i)}}(e,R,(async()=>{X?(await E({updatePosition:M}),T(!0)):await M()}),{elementResize:"function"==typeof ResizeObserver});return()=>{T(!1),t()}}),[o,N,R,h,L,R,y,v,w,a,r,O,i,s,d,l,u,A,q,S,X,E]),Qo((()=>{if(!v)return;if(!w)return;if(!(null==R?void 0:R.isConnected))return;if(!(null==g?void 0:g.isConnected))return;const e=()=>{R.style.zIndex=getComputedStyle(g).zIndex};e();let M=requestAnimationFrame((()=>{M=requestAnimationFrame(e)}));return()=>cancelAnimationFrame(M)}),[v,w,R,g]);const Y=a?"fixed":"absolute";return W=bn(W,(e=>(0,Sn.jsx)("div",io(Oo({role:"presentation"},c),{style:Oo({position:Y,top:0,left:0,width:"max-content"},null==c?void 0:c.style),ref:null==o?void 0:o.setPopoverElement,children:e}))),[o,Y,c]),W=bn(W,(e=>(0,Sn.jsx)(Jn,{value:o,children:e})),[o]),W=io(Oo({"data-placing":k?void 0:""},W),{style:Oo({position:"relative"},W.style)}),qp(io(Oo({store:o,modal:n,preserveTabOrder:p,portal:b,autoFocusOnShow:k&&z},W),{portalRef:B}))}));function gz(e,M,t,o){return!!(rb(M)||e&&(Do(M,e)||t&&Do(t,e)||(null==o?void 0:o.some((M=>gz(e,M,t))))))}fp(En((e=>Xn("div",Rz(e)))),$n);var yz=(0,M.createContext)(null),vz=Yn((e=>{var t=e,{store:o,modal:n=!1,portal:b=!!n,hideOnEscape:p=!0,hideOnHoverOutside:z=!0,disablePointerEventsOnApproach:c=!!z}=t,a=so(t,["store","modal","portal","hideOnEscape","hideOnHoverOutside","disablePointerEventsOnApproach"]);const r=Qn();No(o=o||r,!1);const O=(0,M.useRef)(null),[i,s]=(0,M.useState)([]),d=(0,M.useRef)(0),l=(0,M.useRef)(null),{portalRef:u,domReady:A}=pn(b,a.portalRef),q=!!z,f=nn(z),m=!!c,W=nn(c),_=o.useState("open"),h=o.useState("mounted");(0,M.useEffect)((()=>{if(!A)return;if(!h)return;if(!q&&!m)return;const e=O.current;return e?yo($o("mousemove",(M=>{if(!o)return;const{anchorElement:t,hideTimeout:n,timeout:b}=o.getState(),p=l.current,z=M.target,c=t;if(gz(z,e,c,i))return l.current=z&&c&&Do(c,z)?Tb(M):null,window.clearTimeout(d.current),void(d.current=0);if(!d.current){if(p){const t=Tb(M);if(Bb(t,wb(e,p))){if(l.current=t,!W(M))return;return M.preventDefault(),void M.stopPropagation()}}f(M)&&(d.current=window.setTimeout((()=>{d.current=0,null==o||o.hide()}),null!=n?n:b))}}),!0),(()=>clearTimeout(d.current))):void 0}),[o,A,h,q,m,i,W,f]),(0,M.useEffect)((()=>{if(!A)return;if(!h)return;if(!m)return;const e=e=>{const M=O.current;if(!M)return;const t=l.current;if(!t)return;const o=wb(M,t);if(Bb(Tb(e),o)){if(!W(e))return;e.preventDefault(),e.stopPropagation()}};return yo($o("mouseenter",e,!0),$o("mouseover",e,!0),$o("mouseout",e,!0),$o("mouseleave",e,!0))}),[A,h,m,W]),(0,M.useEffect)((()=>{A&&(_||null==o||o.setAutoFocusOnShow(!1))}),[o,A,_]);const L=Zo(_);(0,M.useEffect)((()=>{if(A)return()=>{L.current||null==o||o.setAutoFocusOnShow(!1)}}),[o,A]);const R=(0,M.useContext)(yz);Qo((()=>{if(n)return;if(!b)return;if(!h)return;if(!A)return;const e=O.current;return e?null==R?void 0:R(e):void 0}),[n,b,h,A]);const g=(0,M.useCallback)((e=>{s((M=>[...M,e]));const M=null==R?void 0:R(e);return()=>{s((M=>M.filter((M=>M!==e)))),null==M||M()}}),[R]);a=bn(a,(e=>(0,Sn.jsx)(eb,{value:o,children:(0,Sn.jsx)(yz.Provider,{value:g,children:e})})),[o,g]),a=io(Oo({},a),{ref:Mn(O,a.ref)}),a=function(e){var t=e,{store:o}=t,n=so(t,["store"]);const[b,p]=(0,M.useState)(!1),z=o.useState("mounted");(0,M.useEffect)((()=>{z||p(!1)}),[z]);const c=n.onFocus,a=en((e=>{null==c||c(e),e.defaultPrevented||p(!0)})),r=(0,M.useRef)(null);return(0,M.useEffect)((()=>qn(o,["anchorElement"],(e=>{r.current=e.anchorElement}))),[]),io(Oo({autoFocusOnHide:b,finalFocus:r},n),{onFocus:a})}(Oo({store:o},a));const y=o.useState((e=>n||e.autoFocusOnShow));return Rz(io(Oo({store:o,modal:n,portal:b,autoFocusOnShow:y},a),{portalRef:u,hideOnEscape:e=>!ko(p,e)&&(requestAnimationFrame((()=>{requestAnimationFrame((()=>{null==o||o.hide()}))})),!0)}))}));fp(En((e=>Xn("div",vz(e)))),Qn);var Nz=Yn((e=>{var M=e,{store:t,portal:o=!0,gutter:n=8,preserveTabOrder:b=!1,hideOnHoverOutside:p=!0,hideOnInteractOutside:z=!0}=M,c=so(M,["store","portal","gutter","preserveTabOrder","hideOnHoverOutside","hideOnInteractOutside"]);const a=gb();No(t=t||a,!1),c=bn(c,(e=>(0,Sn.jsx)(yb,{value:t,children:e})),[t]);const r=t.useState((e=>"description"===e.type?"tooltip":"none"));return c=Oo({role:r},c),vz(io(Oo({},c),{store:t,portal:o,gutter:n,preserveTabOrder:b,hideOnHoverOutside:e=>{if(ko(p,e))return!1;const M=null==t?void 0:t.getState().anchorElement;return!M||!("focusVisible"in M.dataset)},hideOnInteractOutside:e=>{if(ko(z,e))return!1;const M=null==t?void 0:t.getState().anchorElement;return!M||!Do(M,e.target)}}))})),kz=fp(En((e=>Xn("div",Nz(e)))),gb);const Tz=function(e){const{shortcut:t,className:o}=e;if(!t)return null;let n,b;return"string"==typeof t&&(n=t),null!==t&&"object"==typeof t&&(n=t.display,b=t.ariaLabel),(0,M.createElement)("span",{className:o,"aria-label":b},n)},Bz={bottom:"bottom",top:"top","middle left":"left","middle right":"right","bottom left":"bottom-end","bottom center":"bottom","bottom right":"bottom-start","top left":"top-end","top center":"top","top right":"top-start","middle left left":"left","middle left right":"left","middle left bottom":"left-end","middle left top":"left-start","middle right left":"right","middle right right":"right","middle right bottom":"right-end","middle right top":"right-start","bottom left left":"bottom-end","bottom left right":"bottom-end","bottom left bottom":"bottom-end","bottom left top":"bottom-end","bottom center left":"bottom","bottom center right":"bottom","bottom center bottom":"bottom","bottom center top":"bottom","bottom right left":"bottom-start","bottom right right":"bottom-start","bottom right bottom":"bottom-start","bottom right top":"bottom-start","top left left":"top-end","top left right":"top-end","top left bottom":"top-end","top left top":"top-end","top center left":"top","top center right":"top","top center bottom":"top","top center top":"top","top right left":"top-start","top right right":"top-start","top right bottom":"top-start","top right top":"top-start",middle:"bottom","middle center":"bottom","middle center bottom":"bottom","middle center left":"bottom","middle center right":"bottom","middle center top":"bottom"},wz=e=>{var M;return null!==(M=Bz[e])&&void 0!==M?M:"bottom"},Sz=700,Ez=function e(t){const{children:o,delay:n=Sz,hideOnClick:b=!0,placement:p,position:z,shortcut:c,text:a}=t,r=oo(e,"tooltip"),O=a||c?r:void 0,i=1===M.Children.count(o);let s;void 0!==p?s=p:void 0!==z&&(s=wz(z),Mo("`position` prop in wp.components.tooltip",{since:"6.4",alternative:"`placement` prop"})),s=s||"bottom";const d=function(e={}){const[M,t]=yn(wn,e);return function(e,M,t){return gn(e=Bn(e,M,t),t,"type"),gn(e,t,"skipTimeout"),e}(M,t,e)}({placement:s,timeout:n});return(0,M.createElement)(M.Fragment,null,(0,M.createElement)(kb,{onClick:b?d.hide:void 0,store:d,render:i?o:void 0},i?void 0:o),i&&(a||c)&&(0,M.createElement)(kz,{unmountOnHide:!0,className:"components-tooltip",gutter:4,id:O,overflowPadding:.5,store:d},a,c&&(0,M.createElement)(Tz,{className:a?"components-tooltip__shortcut":"",shortcut:c})))},Xz=e=>(0,M.createElement)("path",e),Yz=(0,M.forwardRef)((({className:e,isPressed:t,...o},n)=>{const b={...o,className:N()(e,{"is-pressed":t})||void 0,"aria-hidden":!0,focusable:!1};return(0,M.createElement)("svg",{...b,ref:n})}));Yz.displayName="SVG";const Dz=function({icon:e,className:t,size:o=20,style:n={},...b}){const p=["dashicon","dashicons","dashicons-"+e,t].filter(Boolean).join(" "),z={...20!=o?{fontSize:`${o}px`,width:`${o}px`,height:`${o}px`}:{},...n};return(0,M.createElement)("span",{className:p,style:z,...b})},xz=function({icon:e=null,size:t=("string"==typeof e?20:24),...o}){if("string"==typeof e)return(0,M.createElement)(Dz,{icon:e,size:t,...o});if((0,M.isValidElement)(e)&&Dz===e.type)return(0,M.cloneElement)(e,{...o});if("function"==typeof e)return(0,M.createElement)(e,{size:t,...o});if(e&&("svg"===e.type||e.type===Yz)){const n={...e.props,width:t,height:t,...o};return(0,M.createElement)(Yz,{...n})}return(0,M.isValidElement)(e)?(0,M.cloneElement)(e,{size:t,...o}):e};var Cz=n(9996),Pz=n.n(Cz),Hz=n(2991),jz=n.n(Hz);function Fz(e){return"[object Object]"===Object.prototype.toString.call(e)}function Iz(e){var M,t;return!1!==Fz(e)&&(void 0===(M=e.constructor)||!1!==Fz(t=M.prototype)&&!1!==t.hasOwnProperty("isPrototypeOf"))}const Uz=function(e,t){const o=(0,M.useRef)(!1);(0,M.useEffect)((()=>{if(o.current)return e();o.current=!0}),t)},Vz=(0,M.createContext)({}),$z=()=>(0,M.useContext)(Vz),Gz=(0,M.memo)((({children:e,value:t})=>{const o=function({value:e}){const t=$z(),o=(0,M.useRef)(e);return Uz((()=>{jz()(o.current,e)&&o.current}),[e]),(0,M.useMemo)((()=>Pz()(null!=t?t:{},null!=e?e:{},{isMergeableObject:Iz})),[t,e])}({value:t});return(0,M.createElement)(Vz.Provider,{value:o},e)})),Jz="data-wp-component",Kz="data-wp-c16t",Qz="__contextSystemKey__";var Zz=function(){return Zz=Object.assign||function(e){for(var M,t=1,o=arguments.length;t<o;t++)for(var n in M=arguments[t])Object.prototype.hasOwnProperty.call(M,n)&&(e[n]=M[n]);return e},Zz.apply(this,arguments)};function ec(e){return e.toLowerCase()}Object.create,Object.create,"function"==typeof SuppressedError&&SuppressedError;var Mc=[/([a-z0-9])([A-Z])/g,/([A-Z])([A-Z][a-z])/g],tc=/[^A-Z0-9]+/gi;function oc(e,M,t){return M instanceof RegExp?e.replace(M,t):M.reduce((function(e,M){return e.replace(M,t)}),e)}const nc=cM((function(e){var M;return`components-${void 0===M&&(M={}),function(e,M){return void 0===M&&(M={}),function(e,M){void 0===M&&(M={});for(var t=M.splitRegexp,o=void 0===t?Mc:t,n=M.stripRegexp,b=void 0===n?tc:n,p=M.transform,z=void 0===p?ec:p,c=M.delimiter,a=void 0===c?" ":c,r=oc(oc(e,o,"$1\0$2"),b,"\0"),O=0,i=r.length;"\0"===r.charAt(O);)O++;for(;"\0"===r.charAt(i-1);)i--;return r.slice(O,i).split("\0").map(z).join(a)}(e,Zz({delimiter:"."},M))}(e,Zz({delimiter:"-"},M))}`}));function bc(e,M){if(void 0===e.inserted[M.name])return e.insert("",M,e.sheet,!0)}function pc(e,M,t){var o=[],n=Je(e,o,t);return o.length<2?t:n+M(o)}var zc=function e(M){for(var t="",o=0;o<M.length;o++){var n=M[o];if(null!=n){var b=void 0;switch(typeof n){case"boolean":break;case"object":if(Array.isArray(n))b=e(n);else for(var p in b="",n)n[p]&&p&&(b&&(b+=" "),b+=p);break;default:b=n}b&&(t&&(t+=" "),t+=b)}}return t},cc=function(e){var M=Se({key:"css"});M.sheet.speedy=function(e){this.isSpeedy=e},M.compat=!0;var t=function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];var n=Ie(t,M.registered,void 0);return Qe(M,n,!1),M.key+"-"+n.name};return{css:t,cx:function(){for(var e=arguments.length,o=new Array(e),n=0;n<e;n++)o[n]=arguments[n];return pc(M.registered,t,zc(o))},injectGlobal:function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];var n=Ie(t,M.registered);bc(M,n)},keyframes:function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];var n=Ie(t,M.registered),b="animation-"+n.name;return bc(M,{name:n.name,styles:"@keyframes "+b+"{"+n.styles+"}"}),b},hydrate:function(e){e.forEach((function(e){M.inserted[e]=!0}))},flush:function(){M.registered={},M.inserted={},M.sheet.flush()},sheet:M.sheet,cache:M,getRegisteredStyles:Je.bind(null,M.registered),merge:pc.bind(null,M.registered,t)}}(),ac=(cc.flush,cc.hydrate,cc.cx);cc.merge,cc.getRegisteredStyles,cc.injectGlobal,cc.keyframes,cc.css,cc.sheet,cc.cache;const rc=()=>{const e=(0,M.useContext)($e),t=(0,M.useCallback)(((...M)=>{if(null===e)throw new Error("The `useCx` hook should be only used within a valid Emotion Cache Context");return ac(...M.map((M=>(e=>null!=e&&["name","styles"].every((M=>void 0!==e[M])))(M)?(Qe(e,M,!1),`${e.key}-${M.name}`):M)))}),[e]);return t};function Oc(e,M){const t=$z(),o=t?.[M]||{},n={[Kz]:!0,...(b=M,{[Jz]:b})};var b;const{_overrides:p,...z}=o,c=Object.entries(z).length?Object.assign({},z,e):e,a=rc()(nc(M),e.className),r="function"==typeof c.renderChildren?c.renderChildren(c):c.children;for(const e in c)n[e]=c[e];for(const e in p)n[e]=p[e];return void 0!==r&&(n.children=r),n.className=a,n}function ic(e,t){return function(e,t,o){const n=o?.forwardsRef?(0,M.forwardRef)(e):e;let b=n[Qz]||[t];return Array.isArray(t)&&(b=[...b,...t]),"string"==typeof t&&(b=[...b,t]),Object.assign(n,{[Qz]:[...new Set(b)],displayName:t,selector:`.${nc(t)}`})}(e,t,{forwardsRef:!0})}function sc(e){if(!e)return[];let M=[];return e[Qz]&&(M=e[Qz]),e.type&&e.type[Qz]&&(M=e.type[Qz]),M}function dc(e,M){return!!e&&("string"==typeof M?sc(e).includes(M):!!Array.isArray(M)&&M.some((M=>sc(e).includes(M))))}const lc={border:0,clip:"rect(1px, 1px, 1px, 1px)",WebkitClipPath:"inset( 50% )",clipPath:"inset( 50% )",height:"1px",margin:"-1px",overflow:"hidden",padding:0,position:"absolute",width:"1px",wordWrap:"normal"},uc=nM("div",{target:"e19lxcc00"})("");uc.selector=".components-view",uc.displayName="View";const Ac=uc,qc=ic((function(e,t){const{style:o,...n}=Oc(e,"VisuallyHidden");return(0,M.createElement)(Ac,{ref:t,...n,style:{...lc,...o||{}}})}),"VisuallyHidden"),fc=["onMouseDown","onClick"],mc=(0,M.forwardRef)((function(e,t){const{__next40pxDefaultSize:o,isBusy:n,isDestructive:b,className:p,disabled:z,icon:c,iconPosition:a="left",iconSize:r,showTooltip:O,tooltipPosition:i,shortcut:s,label:d,children:l,size:u="default",text:A,variant:q,__experimentalIsFocusable:f,describedBy:m,...W}=function({isDefault:e,isPrimary:M,isSecondary:t,isTertiary:o,isLink:n,isPressed:b,isSmall:p,size:z,variant:c,...a}){let r=z,O=c;const i={"aria-pressed":b};var s,d,l,u,A,q;return p&&(null!==(s=r)&&void 0!==s||(r="small")),M&&(null!==(d=O)&&void 0!==d||(O="primary")),o&&(null!==(l=O)&&void 0!==l||(O="tertiary")),t&&(null!==(u=O)&&void 0!==u||(O="secondary")),e&&(Mo("Button isDefault prop",{since:"5.4",alternative:'variant="secondary"',version:"6.2"}),null!==(A=O)&&void 0!==A||(O="secondary")),n&&(null!==(q=O)&&void 0!==q||(O="link")),{...i,...a,size:r,variant:O}}(e),{href:_,target:h,"aria-checked":L,"aria-pressed":R,"aria-selected":g,...y}="href"in W?W:{href:void 0,target:void 0,...W},v=oo(mc,"components-button__description"),k="string"==typeof l&&!!l||Array.isArray(l)&&l?.[0]&&null!==l[0]&&"components-tooltip"!==l?.[0]?.props?.className,T=N()("components-button",p,{"is-next-40px-default-size":o,"is-secondary":"secondary"===q,"is-primary":"primary"===q,"is-small":"small"===u,"is-compact":"compact"===u,"is-tertiary":"tertiary"===q,"is-pressed":[!0,"true","mixed"].includes(R),"is-pressed-mixed":"mixed"===R,"is-busy":n,"is-link":"link"===q,"is-destructive":b,"has-text":!!c&&k,"has-icon":!!c}),B=z&&!f,w=void 0===_||B?"button":"a",S="button"===w?{type:"button",disabled:B,"aria-checked":L,"aria-pressed":R,"aria-selected":g}:{},E="a"===w?{href:_,target:h}:{};if(z&&f){S["aria-disabled"]=!0,E["aria-disabled"]=!0;for(const e of fc)y[e]=e=>{e&&(e.stopPropagation(),e.preventDefault())}}const X=!B&&(O&&d||s||!!d&&!l?.length&&!1!==O),Y=m?v:void 0,D=y["aria-describedby"]||Y,x={className:T,"aria-label":y["aria-label"]||d,"aria-describedby":D,ref:t},C=(0,M.createElement)(M.Fragment,null,c&&"left"===a&&(0,M.createElement)(xz,{icon:c,size:r}),A&&(0,M.createElement)(M.Fragment,null,A),c&&"right"===a&&(0,M.createElement)(xz,{icon:c,size:r}),l),P="a"===w?(0,M.createElement)("a",{...E,...y,...x},C):(0,M.createElement)("button",{...S,...y,...x},C);let H;return void 0!==i&&(H=wz(i)),X?(0,M.createElement)(M.Fragment,null,(0,M.createElement)(Ez,{text:l?.length&&m?m:d,shortcut:s,placement:H},P),m&&(0,M.createElement)(qc,null,(0,M.createElement)("span",{id:Y},m))):(0,M.createElement)(M.Fragment,null,P,m&&(0,M.createElement)(qc,null,(0,M.createElement)("span",{id:Y},m)))})),Wc=mc,_c=4e3;function hc({children:e,onCopy:t,onFinishCopy:o,text:n,...b}){const p=(0,M.useRef)(),z=function(e,M){const n=Lt(e),b=Lt((()=>{t&&t(),clearTimeout(p.current),o&&(p.current=setTimeout((()=>o()),_c))}));return ht((e=>{const M=new(_t())(e,{text:()=>"function"==typeof n.current?n.current():n.current||""});return M.on("success",(({clearSelection:M})=>{M(),e.focus(),b.current&&b.current()})),()=>{M.destroy()}}),[])}(n);return(0,M.useEffect)((()=>{clearTimeout(p.current)}),[]),(0,M.createElement)(Wc,{...b,className:"components-clipboard-button",ref:z,onCopy:e=>{e.target.focus()}},e)}function Lc({error:e,finishLinkLabel:t,finishLinkUrl:o,title:n}){const[b,z]=(0,M.useState)(!1),{message:c,stack:a}=e;return(0,M.createElement)("div",{className:"error-screen-container"},(0,M.createElement)(rt,{className:"error-screen"},(0,M.createElement)("h1",null,n||(0,p.__)("Something went wrong.","amp")),(0,M.createElement)("p",{dangerouslySetInnerHTML:{__html:c||(0,p.__)("There was an error loading the page.","amp")}}),(0,M.createElement)("p",null,mt((0,p.__)("Please submit details to our <a>support forum</a>.","amp"),{a:(0,M.createElement)("a",{href:"https://wordpress.org/support/plugin/amp/",target:"_blank",rel:"noreferrer noopener"})})),a&&(0,M.createElement)("details",null,(0,M.createElement)("summary",null,(0,p.__)("Details","amp")),(0,M.createElement)("pre",null,a),(0,M.createElement)(hc,{isSmall:!0,isSecondary:!0,text:JSON.stringify({message:c,stack:a},null,2),onCopy:()=>z(!0),onFinishCopy:()=>z(!1)},b?(0,p.__)("Copied!","amp"):(0,p.__)("Copy Error","amp"))),o&&t&&(0,M.createElement)("p",null,(0,M.createElement)("a",{href:o},t))))}class Rc extends M.Component{constructor(e){super(e),this.timeout=null,this.state={error:null}}componentDidMount(){this.mounted=!0}componentWillUnmount(){this.mounted=!1}componentDidCatch(e){this.setState({error:e})}render(){const{error:e}=this.state,{children:t,exitLinkLabel:o,exitLinkUrl:n,title:b}=this.props;return e?(0,M.createElement)(Lc,{error:e,finishLinkLabel:o,finishLinkUrl:n,title:b}):t}}const gc=()=>function(e){const t=(0,M.useMemo)((()=>{const M=function(e){return e&&"undefined"!=typeof window&&"function"==typeof window.matchMedia?window.matchMedia(e):null}(e);return{subscribe:e=>M?(M.addEventListener?.("change",e),()=>{M.removeEventListener?.("change",e)}):()=>{},getValue(){var e;return null!==(e=M?.matches)&&void 0!==e&&e}}}),[e]);return(0,M.useSyncExternalStore)(t.subscribe,t.getValue,(()=>!1))}("(prefers-reduced-motion: reduce)");function yc(e,M){"function"==typeof e?e(M):e&&e.hasOwnProperty("current")&&(e.current=M)}function vc(e){const t=(0,M.useRef)(),o=(0,M.useRef)(!1),n=(0,M.useRef)(!1),b=(0,M.useRef)([]),p=(0,M.useRef)(e);return p.current=e,(0,M.useLayoutEffect)((()=>{!1===n.current&&!0===o.current&&e.forEach(((e,M)=>{const o=b.current[M];e!==o&&(yc(o,null),yc(e,t.current))})),b.current=e}),e),(0,M.useLayoutEffect)((()=>{n.current=!1})),(0,M.useCallback)((e=>{yc(t,e),n.current=!0,o.current=null!==e;const M=e?p.current:b.current;for(const t of M)yc(t,e)}),[])}const Nc=(0,M.createElement)(Yz,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},(0,M.createElement)(Xz,{d:"M6.5 12.4L12 8l5.5 4.4-.9 1.2L12 10l-4.5 3.6-1-1.2z"})),kc=(0,M.createElement)(Yz,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},(0,M.createElement)(Xz,{d:"M17.5 11.6L12 16l-5.5-4.4.9-1.2L12 14l4.5-3.6 1 1.2z"}));function Tc(e){return null!=e}const Bc={initial:void 0,fallback:""},wc=()=>{},Sc=(0,M.forwardRef)((({isOpened:e,icon:t,title:o,...n},b)=>o?(0,M.createElement)("h2",{className:"components-panel__body-title"},(0,M.createElement)(Wc,{className:"components-panel__body-toggle","aria-expanded":e,ref:b,...n},(0,M.createElement)("span",{"aria-hidden":"true"},(0,M.createElement)(xz,{className:"components-panel__arrow",icon:e?Nc:kc})),o,t&&(0,M.createElement)(xz,{icon:t,className:"components-panel__icon",size:20}))):null)),Ec=(0,M.forwardRef)((function(e,t){const{buttonProps:o={},children:n,className:b,icon:p,initialOpen:z,onToggle:c=wc,opened:a,title:r,scrollAfterOpen:O=!0}=e,[i,s]=function(e,t=Bc){const{initial:o,fallback:n}={...Bc,...t},[b,p]=(0,M.useState)(e),z=Tc(e);return(0,M.useEffect)((()=>{z&&b&&p(void 0)}),[z,b]),[function(e=[],M){var t;return null!==(t=e.find(Tc))&&void 0!==t?t:M}([e,b,o],n),(0,M.useCallback)((e=>{z||p(e)}),[z])]}(a,{initial:void 0===z||z,fallback:!1}),d=(0,M.useRef)(null),l=gc()?"auto":"smooth",u=(0,M.useRef)();u.current=O,Uz((()=>{i&&u.current&&d.current?.scrollIntoView&&d.current.scrollIntoView({inline:"nearest",block:"nearest",behavior:l})}),[i,l]);const A=N()("components-panel__body",b,{"is-opened":i});return(0,M.createElement)("div",{className:A,ref:vc([d,t])},(0,M.createElement)(Sc,{icon:p,isOpened:Boolean(i),onClick:e=>{e.preventDefault();const M=!i;s(M),c(M)},title:r,...o}),"function"==typeof n?n({opened:Boolean(i)}):i&&n)})),Xc=Ec;function Yc({children:e,className:t="",direction:o="left",ElementName:n="div",selected:b=!1,...p}){return(0,M.createElement)(n,{className:N()(t,"selectable",{"selectable--selected":b},`selectable--${o}`),...p},e)}const Dc="full-width",xc="right";function Cc({children:e=null,className:t,heading:o,handleType:b=Dc,id:p,initialOpen:z=!1,labelExtra:c=null,selected:a=!1,hiddenTitle:r}){const[O,i]=(0,M.useState)(z),[s,d]=(0,M.useState)(null);return(0,M.useEffect)((()=>{const e=new n.g.MutationObserver((([e])=>{e.target.classList.contains("is-opened")&&!O?i(!0):O&&i(!1)})),M=document.getElementById(p)?.querySelector(".components-panel__body");return M&&e.observe(M,{attributes:!0}),()=>{e.disconnect()}}),[p,O]),(0,M.useEffect)((()=>{d(null!==s?"resetting":"waiting")}),[z]),(0,M.useEffect)((()=>{"resetting"===s&&d("waiting")}),[s]),(0,M.createElement)(Yc,{id:p,className:N()("amp-drawer",`amp-drawer--handle-type-${b}`,t,O?"amp-drawer--opened":""),selected:a},b===xc&&(0,M.createElement)(M.Fragment,null,(0,M.createElement)("div",{className:"amp-drawer__heading"},o),c&&(0,M.createElement)("div",{className:"amp-drawer__label-extra"},c)),"resetting"!==s&&(0,M.createElement)(Xc,{title:b===xc?(0,M.createElement)(qc,{as:"span"},r):(0,M.createElement)(M.Fragment,null,(0,M.createElement)("div",{className:"amp-drawer__heading"},o),c&&(0,M.createElement)("div",{className:"amp-drawer__label-extra"},c)),className:"amp-drawer__panel-body",initialOpen:z},(0,M.createElement)("div",{className:"amp-drawer__panel-body-inner"},e)))}const Pc="error",Hc="warning",jc="info",Fc="plain",Ic="success",Uc="small",Vc="large";function $c({children:e,className:t,size:o=Vc,type:n=jc,...b}){const p=function(e){let t;switch(e){case Ic:t=()=>(0,M.createElement)("svg",{width:"35",height:"36",viewBox:"0 0 35 36",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,M.createElement)("rect",{x:"1.90112",y:"1.98828",width:"32.0691",height:"32.0691",rx:"16.0345",stroke:"#00A02F",strokeWidth:"2"}),(0,M.createElement)("mask",{id:"mask-notice-success",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:"10",y:"12",width:"16",height:"12"},(0,M.createElement)("path",{d:"M15.0921 21.461L11.3924 17.7613L10.1326 19.0122L15.0921 23.9718L25.7387 13.3252L24.4877 12.0742L15.0921 21.461Z",fill:"white"})),(0,M.createElement)("g",{mask:"url(#mask-notice-success)"},(0,M.createElement)("rect",{x:"7.28906",y:"7.375",width:"21.2932",height:"21.2932",fill:"#00A02F"})));break;case Pc:t=()=>(0,M.createElement)("svg",{width:"44",height:"44",viewBox:"0 0 44 44",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,M.createElement)("path",{d:"M8.18125 16.1001L16.4324 7.84902L28.1012 7.84902L36.3523 16.1001L36.3523 27.769L28.1012 36.0201L16.4324 36.0201L8.18125 27.769L8.18125 16.1001Z",stroke:"#EF0000",strokeWidth:"2"}),(0,M.createElement)("path",{d:"M24.2671 27.4609C24.2671 28.5654 23.3716 29.4609 22.2671 29.4609C21.1626 29.4609 20.2671 28.5654 20.2671 27.4609C20.2671 26.3564 21.1626 25.4609 22.2671 25.4609C23.3716 25.4609 24.2671 26.3564 24.2671 27.4609Z",fill:"#EF0000"}),(0,M.createElement)("line",{x1:"22.2891",y1:"14.0586",x2:"22.2891",y2:"23.5659",stroke:"#EF0000",strokeWidth:"2"}));break;default:t=()=>(0,M.createElement)("svg",{width:"35",height:"35",viewBox:"0 0 35 35",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,M.createElement)("rect",{x:"1.66626",y:"1.76172",width:"31.4597",height:"31.4597",rx:"15.7299",stroke:"currentColor",strokeWidth:"2"}),(0,M.createElement)("path",{d:"M15.3048 11.3424C15.3048 10.1875 16.2412 9.25113 17.3961 9.25113C18.5509 9.25113 19.4873 10.1875 19.4873 11.3424C19.4873 12.4972 18.5509 13.4336 17.3961 13.4336C16.2412 13.4336 15.3048 12.4972 15.3048 11.3424Z",fill:"currentColor"}),(0,M.createElement)("line",{x1:"17.4184",y1:"25.3594",x2:"17.4184",y2:"15.4184",stroke:"currentColor",strokeWidth:"2"}))}return(0,M.createElement)(t,null)}(n);return(0,M.createElement)("div",{className:N()(t,"amp-notice",`amp-notice--${n}`,`amp-notice--${o}`),...b},(0,M.createElement)("div",{className:"amp-notice__icon"},p),(0,M.createElement)("div",{className:"amp-notice__body"},e))}const Gc=(0,M.createContext)();function Jc({children:e}){const[t,o]=(0,M.useState)([]),[n,b]=(0,M.useState)(null),[p,z]=(0,M.useState)(),c=(0,M.useRef)(!1);return(0,M.useEffect)((()=>()=>{c.current=!0}),[]),(0,M.useEffect)((()=>{p||t.length>0||n||(async()=>{b(!0);try{const e=await a()({path:d("/wp/v2/plugins",{_fields:["author","name","plugin","status","version"]})});if(!0===c.current)return;o(e)}catch(e){if(!0===c.current)return;z(e)}b(!1)})()}),[p,n,t]),(0,M.createElement)(Gc.Provider,{value:{fetchingPlugins:n,plugins:t}},e)}const Kc=(0,M.createContext)();function Qc({children:e}){const[t,o]=(0,M.useState)([]),[n,b]=(0,M.useState)(null),[p,z]=(0,M.useState)(),c=(0,M.useRef)(!1);return(0,M.useEffect)((()=>()=>{c.current=!0}),[]),(0,M.useEffect)((()=>{p||t.length>0||n||(async()=>{b(!0);try{const e=await a()({path:d("/wp/v2/themes",{_fields:["author","name","status","stylesheet","template","version"]})});if(!0===c.current)return;o(e)}catch(e){if(!0===c.current)return;z(e)}b(!1)})()}),[p,n,t]),(0,M.createElement)(Kc.Provider,{value:{fetchingThemes:n,themes:t}},e)}function Zc(e=""){return e.replace(/\/.*$/,"").replace(/\.php$/,"")}const ea=(0,M.createContext)(),Ma="ACTION_SET_STATUS",ta="ACTION_SCANNABLE_URLS_REQUEST",oa="ACTION_SCANNABLE_URLS_RECEIVE",na="ACTION_SCAN_INITIALIZE",ba="ACTION_SCAN_URL",pa="ACTION_SCAN_RECEIVE_RESULTS",za="ACTION_SCAN_COMPLETE",ca="ACTION_SCAN_CANCEL",aa="STATUS_REQUEST_SCANNABLE_URLS",ra="STATUS_FETCHING_SCANNABLE_URLS",Oa="STATUS_REFETCHING_PLUGIN_SUPPRESSION",ia="STATUS_READY",sa="STATUS_IDLE",da="STATUS_IN_PROGRESS",la="STATUS_COMPLETED",ua="STATUS_FAILED",Aa="STATUS_CANCELLED",qa="STATUS_SKIPPED",fa={currentlyScannedUrlIndexes:[],forceStandardMode:!1,scannableUrls:[],scanOnce:!1,status:"",scansCount:0,urlIndexesPendingScan:[]},ma=3,Wa=500;function _a(e,M){if(e.status===qa)return e;switch(M.type){case Ma:return{...e,status:M.status};case ta:var t;return{...e,status:aa,forceStandardMode:null!==(t=M?.forceStandardMode)&&void 0!==t&&t,currentlyScannedUrlIndexes:[],urlIndexesPendingScan:[]};case oa:{const t=Array.isArray(M.scannableUrls)&&M.scannableUrls.length>0;return{...e,status:e.scanOnce&&e.scansCount>0||!t?la:ia,scannableUrls:t?M.scannableUrls:[]}}case na:return[ia,la,ua,Aa].includes(e.status)?e.scanOnce&&e.scansCount>0?{...e,status:la}:{...e,status:sa,currentlyScannedUrlIndexes:[],scansCount:e.scansCount+1,urlIndexesPendingScan:e.scannableUrls.map(((e,M)=>M))}:e;case ba:return[sa,da].includes(e.status)?{...e,status:da,currentlyScannedUrlIndexes:[...e.currentlyScannedUrlIndexes,M.currentlyScannedUrlIndex],urlIndexesPendingScan:e.urlIndexesPendingScan.filter((e=>e!==M.currentlyScannedUrlIndex))}:e;case pa:var o;return[sa,da].includes(e.status)?{...e,status:sa,currentlyScannedUrlIndexes:e.currentlyScannedUrlIndexes.filter((e=>e!==M.currentlyScannedUrlIndex)),scannableUrls:[...e.scannableUrls.slice(0,M.currentlyScannedUrlIndex),{...e.scannableUrls[M.currentlyScannedUrlIndex],stale:!1,error:null!==(o=M.error)&&void 0!==o&&o,validated_url_post:M.error?{}:M.validatedUrlPost,validation_errors:M.error?[]:M.validationErrors},...e.scannableUrls.slice(M.currentlyScannedUrlIndex+1)]}:e;case za:{const M=e.scannableUrls.every((e=>Boolean(e.error)));return{...e,status:M?ua:Oa}}case ca:return[sa,da].includes(e.status)?{...e,status:Aa,currentlyScannedUrlIndexes:[],urlIndexesPendingScan:[]}:e;default:throw new Error(`Unhandled action type: ${M.type}`)}}function ha({children:e,fetchCachedValidationErrors:t=!1,refetchPluginSuppressionOnScanComplete:o=!1,resetOnOptionsChange:n=!1,scannableUrlsRestPath:b,scanOnce:p=!1,validateNonce:z}){var c;const{originalOptions:{theme_support:r},savedOptions:O,refetchPluginSuppression:i}=(0,M.useContext)(q),{setAsyncError:s}=l(),[u,A]=(0,M.useReducer)(_a,{...fa,scanOnce:p}),{currentlyScannedUrlIndexes:f,forceStandardMode:m,scannableUrls:_,urlIndexesPendingScan:h,status:L}=u,R=m||r===W?"url":"amp_url",g=null!==(c=_?.[0]?.[R])&&void 0!==c?c:"",{hasSiteScanResults:y,pluginsWithAmpIncompatibility:v,stale:N,themesWithAmpIncompatibility:k}=(0,M.useMemo)((()=>{if(![ia,la,qa].includes(L))return{hasSiteScanResults:!1,pluginsWithAmpIncompatibility:[],stale:!1,themesWithAmpIncompatibility:[]};const e=function(e=[],{useAmpUrls:M=!1}={}){const t=new Map,o=new Map;for(const n of e){const{amp_url:e,url:b,validation_errors:p}=n;if(p?.length)for(const n of p)if(n?.sources?.length)for(const p of n.sources)if(p?.type)if("plugin"===p.type){const o=Zc(p.name);if("gutenberg"===o&&n.sources.length>1)continue;t.set(o,new Set([...t.get(o)||[],M?e:b]))}else"theme"===p.type&&o.set(p.name,new Set([...o.get(p.name)||[],M?e:b]))}return t.delete("amp"),{plugins:[...t].map((([e,M])=>({slug:e,urls:[...M]}))),themes:[...o].map((([e,M])=>({slug:e,urls:[...M]})))}}(_,{useAmpUrls:"amp_url"===R});return{hasSiteScanResults:_.some((e=>Boolean(e?.validation_errors))),pluginsWithAmpIncompatibility:e.plugins,stale:_.some((e=>!0===e?.stale)),themesWithAmpIncompatibility:e.themes}}),[_,L,R]);(0,M.useEffect)((()=>{z||L===qa||A({type:Ma,status:qa})}),[L,z]);const T=(0,M.useRef)(!1);(0,M.useEffect)((()=>()=>{T.current=!0}),[]);const B=(0,M.useCallback)(((e={})=>{A({type:ta,forceStandardMode:e?.forceStandardMode})}),[]),w=(0,M.useCallback)((()=>{A({type:na})}),[]),S=(0,M.useCallback)((()=>{A({type:ca})}),[]);(0,M.useEffect)((()=>{n&&Object.keys(O).length>0&&A({type:ta})}),[n,O]),(0,M.useEffect)((()=>{L===ia&&Object.keys(O.suppressed_plugins||{}).length>0&&A({type:na})}),[O?.suppressed_plugins,L]),(0,M.useEffect)((()=>{L===Oa&&(o&&i(),A({type:Ma,status:la}))}),[i,o,L]);const[E,X]=(0,M.useState)(!1);return(0,M.useEffect)((()=>{let e;return E&&(async()=>{await new Promise((M=>{e=setTimeout(M,Wa)})),!0!==T.current&&X(!1)})(),()=>{e&&clearTimeout(e)}}),[E]),(0,M.useEffect)((()=>{(async()=>{if(L===aa){A({type:Ma,status:ra});try{const e=["url","amp_url","type","label"],M=await a()({path:d(b,{_fields:t?[...e,"validation_errors","stale"]:e,force_standard_mode:m?1:void 0})});if(!0===T.current)return;A({type:oa,scannableUrls:M})}catch(e){if(!0===T.current)return;s(e)}}})()}),[t,m,b,s,L]),(0,M.useEffect)((()=>{if(![sa,da].includes(L))return;if(0===h.length)return void(0===f.length&&A({type:za}));if(E||f.length>=ma)return;X(!0);const e=h[0];A({type:ba,currentlyScannedUrlIndex:e}),(async()=>{const M={};try{const t=_[e][R],o={amp_validate:{cache:!0,cache_bust:Math.random(),force_standard_mode:m||void 0,nonce:z,omit_stylesheets:!0}},n=await fetch(d(t,o)),b=await n.json();if(!0===T.current)return;n.ok?(M.validatedUrlPost=b.validated_url_post,M.validationErrors=b.results.map((({error:e})=>e))):M.error=b?.code||!0}catch(e){if(!0===T.current)return;M.error=!0}A({type:pa,currentlyScannedUrlIndex:e,...M}),X(!1)})()}),[f.length,m,_,E,L,h,R,z]),(0,M.createElement)(ea.Provider,{value:{cancelSiteScan:S,fetchScannableUrls:B,forceStandardMode:m,hasSiteScanResults:y,isBusy:[sa,da].includes(L),isCancelled:L===Aa,isCompleted:[Oa,la].includes(L),isFailed:L===ua,isFetchingScannableUrls:[aa,ra].includes(L),isInitializing:!Boolean(L),isReady:L===ia,isSiteScannable:_.length>0,isSkipped:L===qa,pluginsWithAmpIncompatibility:v,previewPermalink:g,scannableUrls:_,scannedUrlsMaxIndex:([da,sa].includes(L)?Math.min(_.length,...h):0)-1,stale:N,startSiteScan:w,themesWithAmpIncompatibility:k}},e)}function La(){const{editedOptions:e}=(0,M.useContext)(q),{templateModeWasOverridden:t}=(0,M.useContext)(L),{customizer_link:o,onboarding_wizard_link:n,plugin_configured:b}=e;return(0,M.createElement)("div",{className:"settings-welcome"},(0,M.createElement)("div",{className:"selectable selectable--left"},(0,M.createElement)("div",{className:"settings-welcome__illustration"},(0,M.createElement)("svg",{width:"62",height:"51",viewBox:"0 0 62 51",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,M.createElement)("g",{clipPath:"url(#welcome-svg-clip)"},(0,M.createElement)("path",{d:"M19.0226 3.89844H39.5226C45.0226 3.89844 49.4226 8.29844 49.4226 13.7984V34.2984C49.4226 39.7984 45.0226 44.1984 39.5226 44.1984H19.0226C13.5226 44.1984 9.12256 39.7984 9.12256 34.2984V13.7984C9.12256 8.29844 13.5226 3.89844 19.0226 3.89844Z",fill:"white",stroke:"#2459E7",strokeWidth:"2"}),(0,M.createElement)("path",{d:"M17.8227 11.1992C18.7227 11.1992 19.4227 11.8992 19.4227 12.7992V35.6992C19.4227 36.5992 18.7227 37.2992 17.8227 37.2992C16.9227 37.2992 16.2227 36.5992 16.2227 35.6992V12.6992C16.2227 11.7992 16.9227 11.1992 17.8227 11.1992Z",fill:"white",stroke:"#2459E7",strokeWidth:"2"}),(0,M.createElement)("path",{d:"M17.8228 21.9C19.5901 21.9 21.0228 20.4673 21.0228 18.7C21.0228 16.9327 19.5901 15.5 17.8228 15.5C16.0555 15.5 14.6228 16.9327 14.6228 18.7C14.6228 20.4673 16.0555 21.9 17.8228 21.9Z",fill:"white",stroke:"#2459E7",strokeWidth:"2"}),(0,M.createElement)("path",{d:"M29.3227 37.0977C28.4227 37.0977 27.7227 36.3977 27.7227 35.4977V12.6977C27.7227 11.7977 28.4227 11.0977 29.3227 11.0977C30.2227 11.0977 30.9227 11.7977 30.9227 12.6977V35.5977C30.9227 36.3977 30.2227 37.0977 29.3227 37.0977Z",fill:"white",stroke:"#2459E7",strokeWidth:"2"}),(0,M.createElement)("path",{d:"M40.9225 37.0977C40.0225 37.0977 39.3225 36.3977 39.3225 35.4977V12.6977C39.3225 11.7977 40.0225 11.0977 40.9225 11.0977C41.8225 11.0977 42.5225 11.7977 42.5225 12.6977V35.5977C42.5225 36.3977 41.8225 37.0977 40.9225 37.0977Z",fill:"white",stroke:"#2459E7",strokeWidth:"2"}),(0,M.createElement)("path",{d:"M40.9227 24.0992C42.69 24.0992 44.1227 22.6665 44.1227 20.8992C44.1227 19.1319 42.69 17.6992 40.9227 17.6992C39.1553 17.6992 37.7227 19.1319 37.7227 20.8992C37.7227 22.6665 39.1553 24.0992 40.9227 24.0992Z",fill:"white",stroke:"#2459E7",strokeWidth:"2"}),(0,M.createElement)("path",{d:"M29.2227 30.9977C30.99 30.9977 32.4227 29.565 32.4227 27.7977C32.4227 26.0303 30.99 24.5977 29.2227 24.5977C27.4554 24.5977 26.0227 26.0303 26.0227 27.7977C26.0227 29.565 27.4554 30.9977 29.2227 30.9977Z",fill:"white",stroke:"#2459E7",strokeWidth:"2"}),(0,M.createElement)("path",{d:"M47.3225 5.19784C47.9225 3.69784 49.9225 0.797843 53.4225 1.49784",stroke:"#2459E7",strokeWidth:"2",strokeLinecap:"round"}),(0,M.createElement)("path",{d:"M50.5227 7.19675C51.7227 6.69675 54.5227 6.29675 56.2227 9.09675",stroke:"#2459E7",strokeWidth:"2",strokeLinecap:"round"}),(0,M.createElement)("path",{d:"M12.4225 44.7969C11.9225 45.7969 10.9225 48.1969 11.1225 49.3969",stroke:"#2459E7",strokeWidth:"2",strokeLinecap:"round"}),(0,M.createElement)("path",{d:"M8.92266 43.6992C8.42266 44.0992 7.52266 44.6992 6.72266 45.1992",stroke:"#2459E7",strokeWidth:"2",strokeLinecap:"round"}),(0,M.createElement)("path",{d:"M7.42261 39.8984C5.92261 40.4984 2.82261 41.5984 1.92261 41.7984",stroke:"#2459E7",strokeWidth:"2",strokeLinecap:"round"}),(0,M.createElement)("path",{d:"M3.92251 48.8992C4.80617 48.8992 5.52251 48.1829 5.52251 47.2992C5.52251 46.4156 4.80617 45.6992 3.92251 45.6992C3.03885 45.6992 2.32251 46.4156 2.32251 47.2992C2.32251 48.1829 3.03885 48.8992 3.92251 48.8992Z",fill:"#2459E7"}),(0,M.createElement)("path",{d:"M60.1227 12.7C61.0064 12.7 61.7227 11.9837 61.7227 11.1C61.7227 10.2163 61.0064 9.5 60.1227 9.5C59.2391 9.5 58.5227 10.2163 58.5227 11.1C58.5227 11.9837 59.2391 12.7 60.1227 12.7Z",fill:"#2459E7"})),(0,M.createElement)("defs",null,(0,M.createElement)("clipPath",{id:"welcome-svg-clip"},(0,M.createElement)("rect",{width:"60.8",height:"50",fill:"white",transform:"translate(0.922607 0.398438)"}))))),(0,M.createElement)("div",{className:"settings-welcome__body"},(0,M.createElement)("h2",null,b?(0,M.createElement)(M.Fragment,null,(0,p.__)("AMP Settings Configured","amp"),(0,M.createElement)("svg",{width:"25",height:"25",viewBox:"0 0 25 25",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,M.createElement)("mask",{id:"check-circle-mask",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:"2",y:"2",width:"21",height:"21"},(0,M.createElement)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12.7537 2.60938C7.23366 2.60938 2.75366 7.08938 2.75366 12.6094C2.75366 18.1294 7.23366 22.6094 12.7537 22.6094C18.2737 22.6094 22.7537 18.1294 22.7537 12.6094C22.7537 7.08938 18.2737 2.60938 12.7537 2.60938ZM12.7537 20.6094C8.34366 20.6094 4.75366 17.0194 4.75366 12.6094C4.75366 8.19938 8.34366 4.60938 12.7537 4.60938C17.1637 4.60938 20.7537 8.19938 20.7537 12.6094C20.7537 17.0194 17.1637 20.6094 12.7537 20.6094ZM10.7537 14.7794L17.3437 8.18937L18.7537 9.60938L10.7537 17.6094L6.75366 13.6094L8.16366 12.1994L10.7537 14.7794Z",fill:"white"})),(0,M.createElement)("g",{mask:"url(#check-circle-mask)"},(0,M.createElement)("rect",{x:"0.753662",y:"0.609375",width:"24",height:"24",fill:"#2459E7"})))):(0,p.__)("Configure AMP","amp")),(0,M.createElement)("p",null,(0,p.__)("The AMP configuration wizard helps you choose the best configuration settings for your site.","amp")," ",(0,M.createElement)("a",{href:n},b?(0,p.__)("Reopen Wizard","amp"):(0,p.__)("Open Wizard","amp")),o&&!1===t&&(0,M.createElement)(M.Fragment,null,` ${(0,p._x)("or","e.g. do this or that","amp")} `,(0,M.createElement)("a",{href:o},(0,p.__)("Customize Reader Theme","amp"))),(0,p._x)(".","End of sentence.","amp")))))}const Ra=(0,M.forwardRef)((function({icon:e,size:t=24,...o},n){return(0,M.cloneElement)(e,{width:t,height:t,...o,ref:n})})),ga=(0,M.createElement)(Yz,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,M.createElement)(Xz,{d:"M7 11.5h10V13H7z"})),ya=(0,M.createElement)(Yz,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,M.createElement)(Xz,{d:"M16.7 7.1l-6.3 8.5-3.3-2.5-.9 1.2 4.5 3.4L17.9 8z"})),va={"default.fontFamily":"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif","default.fontSize":"13px","helpText.fontSize":"12px",mobileTextMinFontSize:"16px"};function Na(e){var M;return null!==(M=va[e])&&void 0!==M?M:""}const ka={name:"9amh4a",styles:"font-size:11px;font-weight:500;line-height:1.4;text-transform:uppercase"},Ta=nM("div",{target:"ej5x27r4"})("font-family:",Na("default.fontFamily"),";font-size:",Na("default.fontSize"),";",{name:"kv6lnz",styles:"box-sizing:border-box;*,*::before,*::after{box-sizing:inherit;}"},";"),Ba=nM("div",{target:"ej5x27r3"})((({__nextHasNoMarginBottom:e=!1})=>!e&&bM("margin-bottom:",zM(2),";",""))," .components-panel__row &{margin-bottom:inherit;}"),wa=bM(ka,";display:inline-block;margin-bottom:",zM(2),";padding:0;",""),Sa=nM("label",{target:"ej5x27r2"})(wa,";");var Ea={name:"11yad0w",styles:"margin-bottom:revert"};const Xa=nM("p",{target:"ej5x27r1"})("margin-top:",zM(2),";margin-bottom:0;font-size:",Na("helpText.fontSize"),";font-style:normal;color:",FM.gray[700],";",(({__nextHasNoMarginBottom:e=!1})=>!e&&Ea),";"),Ya=nM("span",{target:"ej5x27r0"})(wa,";"),Da=({__nextHasNoMarginBottom:e=!1,id:t,label:o,hideLabelFromVision:n=!1,help:b,className:p,children:z})=>(0,M.createElement)(Ta,{className:N()("components-base-control",p)},(0,M.createElement)(Ba,{className:"components-base-control__field",__nextHasNoMarginBottom:e},o&&t&&(n?(0,M.createElement)(qc,{as:"label",htmlFor:t},o):(0,M.createElement)(Sa,{className:"components-base-control__label",htmlFor:t},o)),o&&!t&&(n?(0,M.createElement)(qc,{as:"label"},o):(0,M.createElement)(Da.VisualLabel,null,o)),z),!!b&&(0,M.createElement)(Xa,{id:t?t+"__help":void 0,className:"components-base-control__help",__nextHasNoMarginBottom:e},b));Da.VisualLabel=({className:e,children:t,...o})=>(0,M.createElement)(Ya,{...o,className:N()("components-base-control__label",e)},t);const xa=Da,Ca=function e(t){const{__nextHasNoMarginBottom:o,label:n,className:b,heading:p,checked:z,indeterminate:c,help:a,id:r,onChange:O,...i}=t;p&&Mo("`heading` prop in `CheckboxControl`",{alternative:"a separate element to implement a heading",since:"5.8"});const[s,d]=(0,M.useState)(!1),[l,u]=(0,M.useState)(!1),A=ht((e=>{e&&(e.indeterminate=!!c,d(e.matches(":checked")),u(e.matches(":indeterminate")))}),[z,c]),q=oo(e,"inspector-checkbox-control",r);return(0,M.createElement)(xa,{__nextHasNoMarginBottom:o,label:p,id:q,help:a,className:N()("components-checkbox-control",b)},(0,M.createElement)("span",{className:"components-checkbox-control__input-container"},(0,M.createElement)("input",{ref:A,id:q,className:"components-checkbox-control__input",type:"checkbox",value:"1",onChange:e=>O(e.target.checked),checked:z,"aria-describedby":a?q+"__help":void 0,...i}),l?(0,M.createElement)(Ra,{icon:ga,className:"components-checkbox-control__indeterminate",role:"presentation"}):null,s?(0,M.createElement)(Ra,{icon:ya,className:"components-checkbox-control__checked",role:"presentation"}):null),n&&(0,M.createElement)("label",{className:"components-checkbox-control__label",htmlFor:q},n))};function Pa(){const{updateOptions:e,editedOptions:{sandboxing_enabled:t,sandboxing_level:o}}=(0,M.useContext)(q);return(0,M.createElement)(M.Fragment,null,(0,M.createElement)("p",null,(0,p.__)("Try out a more flexible AMP by generating pages that use AMP components without requiring AMP validity! By selecting a sandboxing level, you are indicating the minimum degree of sanitization. For example, if you selected the loose level but have a page without any POST form and no custom scripts, it will still be served as valid AMP—the same as if you had selected the strict level.","amp")),(0,M.createElement)(Ca,{className:"sandboxing-enabled",checked:t,label:(0,p.__)("Enable sandboxing experiment","amp"),onChange:M=>{e({sandboxing_enabled:M})}}),t&&(0,M.createElement)("ol",null,(0,M.createElement)("li",null,(0,M.createElement)("input",{type:"radio",id:"sandboxing-level-1",checked:1===o,onChange:()=>{e({sandboxing_level:1})}}),(0,M.createElement)("label",{htmlFor:"sandboxing-level-1"},mt((0,p.__)("<b>Loose:</b> Do not remove any AMP-invalid markup by default, including custom scripts. CSS processing is disabled.","amp"),{b:(0,M.createElement)("strong",null)}))),(0,M.createElement)("li",null,(0,M.createElement)("input",{type:"radio",id:"sandboxing-level-2",checked:2===o,onChange:()=>{e({sandboxing_level:2})}}),(0,M.createElement)("label",{htmlFor:"sandboxing-level-2"},mt((0,p.__)("<b>Moderate:</b> Remove anything invalid AMP except for POST forms, excessive CSS, and other PX-verified markup.","amp"),{b:(0,M.createElement)("strong",null)}))),(0,M.createElement)("li",null,(0,M.createElement)("input",{type:"radio",id:"sandboxing-level-3",checked:3===o,onChange:()=>{e({sandboxing_level:3})}}),(0,M.createElement)("label",{htmlFor:"sandboxing-level-3"},mt((0,p.__)("<b>Strict:</b> Require valid AMP, removing all markup that causes validation errors (except for excessive CSS).","amp"),{b:(0,M.createElement)("strong",null)})))))}function Ha({children:e,className:t,icon:o}){return(0,M.createElement)("div",{className:N()("amp-info",t)},o&&(0,M.createElement)(o,{className:"amp-info__icon"}),e)}function ja(){return(0,M.createElement)("svg",{width:"66",height:"58",viewBox:"0 0 66 58",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,M.createElement)("path",{d:"M15.4008 9.85391C16.5008 9.85391 17.5008 8.95391 17.5008 7.75391C17.5008 6.55391 16.5008 5.75391 15.4008 5.75391C14.3008 5.75391 13.3008 6.65391 13.3008 7.85391C13.3008 9.05391 14.2008 9.85391 15.4008 9.85391Z",fill:"#285BE7"}),(0,M.createElement)("path",{d:"M22.1006 7.75391H25.1006",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M13.6006 37.3555H24.4006",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M29.8008 7.75391H32.8008",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M64.9004 1.75391H6.90039V45.9539H64.8004V1.75391H64.9004Z",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M60.4005 14.1523H13.0005V33.2523H60.4005V14.1523Z",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M19.8008 24.6523C21.2008 24.6523 22.3008 23.5523 22.3008 22.1523C22.3008 20.7523 21.2008 19.6523 19.8008 19.6523C18.4008 19.6523 17.3008 20.7523 17.3008 22.1523C17.3008 23.5523 18.4008 24.6523 19.8008 24.6523Z",fill:"#285BE7"}),(0,M.createElement)("path",{d:"M23.6006 28.0523L32.0006 22.0523L38.0006 25.4523L44.9006 20.1523V28.1523C44.9006 28.0523 25.1006 28.0523 23.6006 28.0523Z",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M8.3542 57.5023C12.6542 57.5023 16.1542 54.0023 16.1542 49.7023C16.1542 45.4023 12.6542 41.9023 8.3542 41.9023C4.0542 41.9023 0.554199 45.4023 0.554199 49.7023C0.554199 54.0023 4.0542 57.5023 8.3542 57.5023Z",fill:"#3363E8"}),(0,M.createElement)("path",{d:"M9.35446 45.2992L8.95446 48.6992H10.4545C10.4545 48.6992 11.0545 48.5992 10.4545 49.5992C7.75446 54.0992 7.75446 54.0992 7.75446 54.0992H7.25446L7.75446 50.6992H6.45446C6.45446 50.6992 5.45446 50.9992 6.15446 49.8992C8.95446 45.4992 9.05446 45.1992 9.05446 45.1992L9.35446 45.2992Z",fill:"white"}))}function Fa({props:e}){return(0,M.createElement)("svg",{width:"80",height:"64",viewBox:"0 0 80 64",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e},(0,M.createElement)("path",{d:"M15.0067 10.0961C16.1067 10.0961 17.0067 9.19609 17.0067 7.99609C17.0067 6.79609 16.1067 5.99609 15.0067 5.99609C13.9067 5.99609 12.9067 6.89609 12.9067 8.09609C12.9067 9.29609 13.8067 10.0961 15.0067 10.0961Z",fill:"#285BE7"}),(0,M.createElement)("path",{d:"M21.7068 7.99609H24.7068",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M13.2068 37.5977H24.0068",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M29.407 7.99609H32.407",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M64.5068 1.99609H6.50684V46.1961H64.4068V1.99609H64.5068Z",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M60.0069 14.3945H12.6069V33.4945H60.0069V14.3945Z",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M19.4067 24.8945C20.8067 24.8945 21.9067 23.7945 21.9067 22.3945C21.9067 20.9945 20.8067 19.8945 19.4067 19.8945C18.0067 19.8945 16.9067 20.9945 16.9067 22.3945C16.9067 23.7945 18.0067 24.8945 19.4067 24.8945Z",fill:"#285BE7"}),(0,M.createElement)("path",{d:"M23.2068 28.2945L31.6068 22.2945L37.6068 25.6945L44.5068 20.3945V28.3945C44.5068 28.2945 24.7068 28.2945 23.2068 28.2945Z",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M71.6678 17.6953H50.4678V54.3953H71.6678V17.6953Z",fill:"white",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M60.1677 23.5977H62.5677",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M65.3677 23.5977H68.1677",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M55.8676 25.3953C56.9676 25.3953 57.9676 24.4953 57.9676 23.2953C57.9676 22.1953 57.0676 21.1953 55.8676 21.1953C54.7676 21.1953 53.7676 22.0953 53.7676 23.2953C53.8676 24.4953 54.7676 25.3953 55.8676 25.3953Z",fill:"#285BE7"}),(0,M.createElement)("path",{d:"M68.1676 29.1953H53.7676V39.9953H68.1676V29.1953Z",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M60.3676 36.9953C62.7676 36.9953 64.6676 36.9953 64.6676 36.9953V32.1953L58.2676 36.9953H60.3676Z",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M60.5676 44.5977H68.9676",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M71.6677 63.8383C75.9677 63.8383 79.4677 60.3383 79.4677 56.0383C79.4677 51.7383 75.9677 48.2383 71.6677 48.2383C67.3677 48.2383 63.8677 51.7383 63.8677 56.0383C63.8677 60.3383 67.3677 63.8383 71.6677 63.8383Z",fill:"#3363E8"}),(0,M.createElement)("path",{d:"M72.6679 51.6352L72.2679 55.0352H73.7679C73.7679 55.0352 74.3679 54.9352 73.7679 55.9352C71.0679 60.4352 71.0679 60.4352 71.0679 60.4352H70.5679L71.0679 57.0352H69.7679C69.7679 57.0352 68.7679 57.3352 69.4679 56.2352C72.2679 51.8352 72.3679 51.5352 72.3679 51.5352L72.6679 51.6352Z",fill:"white"}),(0,M.createElement)("circle",{cx:"8.16113",cy:"49.9844",r:"8",fill:"white"}),(0,M.createElement)("circle",{cx:"8.16113",cy:"49.9844",r:"8",fill:"white"}),(0,M.createElement)("path",{d:"M8.16089 41.9844C3.76089 41.9844 0.160889 45.5844 0.160889 49.9844C0.160889 54.3844 3.76089 57.9844 8.16089 57.9844C12.5609 57.9844 16.1609 54.3844 16.1609 49.9844C16.1609 45.5844 12.5609 41.9844 8.16089 41.9844ZM13.6809 46.7844H11.3609C11.1209 45.8244 10.7209 44.8644 10.2409 43.9044C11.6809 44.4644 12.9609 45.4244 13.6809 46.7844ZM8.16089 43.5844C8.80089 44.5444 9.36089 45.5844 9.68089 46.7844H6.64089C6.96089 45.6644 7.52089 44.5444 8.16089 43.5844ZM2.00089 51.5844C1.84089 51.1044 1.76089 50.5444 1.76089 49.9844C1.76089 49.4244 1.84089 48.8644 2.00089 48.3844H4.72089C4.64089 48.9444 4.64089 49.4244 4.64089 49.9844C4.64089 50.5444 4.72089 51.0244 4.72089 51.5844H2.00089ZM2.64089 53.1844H5.04089C5.28089 54.1444 5.68089 55.1844 6.16089 56.0644C4.64089 55.5044 3.36089 54.5444 2.64089 53.1844ZM4.96089 46.7844H2.56089C3.36089 45.4244 4.56089 44.4644 6.00089 43.9044C5.60089 44.8644 5.28089 45.8244 4.96089 46.7844ZM8.16089 56.3844C7.52089 55.4244 6.96089 54.3844 6.64089 53.1844H9.68089C9.36089 54.3044 8.80089 55.4244 8.16089 56.3844ZM10.0009 51.5844H6.32089C6.24089 51.0244 6.16089 50.5444 6.16089 49.9844C6.16089 49.4244 6.24089 48.8644 6.32089 48.3844H10.0809C10.1609 48.8644 10.2409 49.4244 10.2409 49.9844C10.2409 50.5444 10.0809 51.0244 10.0009 51.5844ZM10.2409 56.0644C10.7209 55.1844 11.1209 54.2244 11.3609 53.1844H13.6809C12.9609 54.4644 11.6809 55.5044 10.2409 56.0644ZM11.6809 51.5844C11.7609 51.0244 11.7609 50.5444 11.7609 49.9844C11.7609 49.4244 11.6809 48.9444 11.6809 48.3844H14.4009C14.5609 48.8644 14.6409 49.4244 14.6409 49.9844C14.6409 50.5444 14.5609 51.1044 14.4009 51.5844H11.6809Z",fill:"#285BE7"}),(0,M.createElement)("path",{d:"M23.1069 58.5844C27.9592 58.5844 31.9069 54.6367 31.9069 49.7844C31.9069 44.9321 27.9592 40.9844 23.1069 40.9844C18.2546 40.9844 14.3069 44.9321 14.3069 49.7844C14.3069 54.6367 18.2546 58.5844 23.1069 58.5844Z",fill:"#285BE7",stroke:"white",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M24.1071 45.3812L23.7071 48.7812H25.2071C25.2071 48.7812 25.8071 48.6813 25.2071 49.6813C22.5071 54.1813 22.5071 54.1813 22.5071 54.1813H22.0071L22.5071 50.7812H21.2071C21.2071 50.7812 20.2071 51.0813 20.9071 49.9813C23.7071 45.5813 23.8071 45.2812 23.8071 45.2812L24.1071 45.3812Z",fill:"white"}))}function Ia(){return(0,M.createElement)("svg",{width:"78",height:"63",viewBox:"0 0 78 63",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,M.createElement)("path",{d:"M13.2068 37.5117H24.0068",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M14.9067 10.0102C16.0067 10.0102 17.0067 9.11016 17.0067 7.91016C17.0067 6.71016 16.1067 5.91016 14.9067 5.91016C13.8067 5.91016 12.9067 6.81016 12.9067 7.91016C12.9067 9.01016 13.8067 10.0102 14.9067 10.0102Z",fill:"#285BE7"}),(0,M.createElement)("path",{d:"M21.6069 7.91016H24.6069",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M29.4067 7.91016H32.4067",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M64.4068 1.91016H6.50684V46.1102H64.4068V1.91016Z",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M60.0069 14.3086H12.6069V33.4086H60.0069V14.3086Z",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M19.3069 24.8086C20.7069 24.8086 21.8069 23.7086 21.8069 22.3086C21.8069 20.9086 20.7069 19.8086 19.3069 19.8086C17.9069 19.8086 16.8069 20.9086 16.8069 22.3086C16.8069 23.7086 17.9069 24.8086 19.3069 24.8086Z",fill:"#285BE7"}),(0,M.createElement)("path",{d:"M23.2068 28.2086L31.6068 22.2086L37.6068 25.6086L44.5068 20.3086V28.3086C44.5068 28.2086 24.7068 28.2086 23.2068 28.2086Z",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M69.6069 17.6094H48.3069V54.3094H69.5069V17.6094H69.6069Z",fill:"white",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M69.7068 17.6094H48.5068V28.4094H69.7068V17.6094Z",fill:"#285BE7",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M59.6069 23.3086H62.6069",stroke:"white",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M53.8068 25.3094C54.9068 25.3094 55.9068 24.4094 55.9068 23.2094C55.9068 22.1094 55.0068 21.1094 53.8068 21.1094C52.7068 21.1094 51.7068 22.0094 51.7068 23.2094C51.7068 24.4094 52.7068 25.3094 53.8068 25.3094Z",fill:"white"}),(0,M.createElement)("path",{d:"M56.9067 33.9102H65.1067",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M53.1069 33.9102H53.4069",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M56.9067 37.3086H65.1067",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M53.1069 37.3086H53.4069",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M56.9067 41.0117H65.1067",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M53.1069 41.0117H53.4069",stroke:"#285BE7",strokeWidth:"2",strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M69.2192 62.1117C73.5192 62.1117 77.0192 58.6117 77.0192 54.3117C77.0192 50.0117 73.5192 46.5117 69.2192 46.5117C64.9192 46.5117 61.4192 50.0117 61.4192 54.3117C61.4192 58.6117 64.9192 62.1117 69.2192 62.1117Z",fill:"#3363E8"}),(0,M.createElement)("path",{d:"M70.2194 49.9086L69.8194 53.3086H71.3194C71.3194 53.3086 71.9194 53.2086 71.3194 54.2086C68.6194 58.7086 68.6194 58.7086 68.6194 58.7086H68.1194L68.6194 55.3086H67.3194C67.3194 55.3086 66.3194 55.6086 67.0194 54.5086C69.8194 50.1086 69.9194 49.8086 69.9194 49.8086L70.2194 49.9086Z",fill:"white"}),(0,M.createElement)("circle",{cx:"8.16113",cy:"49.8125",r:"8",fill:"white"}),(0,M.createElement)("circle",{cx:"8.16113",cy:"49.8125",r:"8",fill:"white"}),(0,M.createElement)("path",{d:"M8.16089 41.8125C3.76089 41.8125 0.160889 45.4125 0.160889 49.8125C0.160889 54.2125 3.76089 57.8125 8.16089 57.8125C12.5609 57.8125 16.1609 54.2125 16.1609 49.8125C16.1609 45.4125 12.5609 41.8125 8.16089 41.8125ZM13.6809 46.6125H11.3609C11.1209 45.6525 10.7209 44.6925 10.2409 43.7325C11.6809 44.2925 12.9609 45.2525 13.6809 46.6125ZM8.16089 43.4125C8.80089 44.3725 9.36089 45.4125 9.68089 46.6125H6.64089C6.96089 45.4925 7.52089 44.3725 8.16089 43.4125ZM2.00089 51.4125C1.84089 50.9325 1.76089 50.3725 1.76089 49.8125C1.76089 49.2525 1.84089 48.6925 2.00089 48.2125H4.72089C4.64089 48.7725 4.64089 49.2525 4.64089 49.8125C4.64089 50.3725 4.72089 50.8525 4.72089 51.4125H2.00089ZM2.64089 53.0125H5.04089C5.28089 53.9725 5.68089 55.0125 6.16089 55.8925C4.64089 55.3325 3.36089 54.3725 2.64089 53.0125ZM4.96089 46.6125H2.56089C3.36089 45.2525 4.56089 44.2925 6.00089 43.7325C5.60089 44.6925 5.28089 45.6525 4.96089 46.6125ZM8.16089 56.2125C7.52089 55.2525 6.96089 54.2125 6.64089 53.0125H9.68089C9.36089 54.1325 8.80089 55.2525 8.16089 56.2125ZM10.0009 51.4125H6.32089C6.24089 50.8525 6.16089 50.3725 6.16089 49.8125C6.16089 49.2525 6.24089 48.6925 6.32089 48.2125H10.0809C10.1609 48.6925 10.2409 49.2525 10.2409 49.8125C10.2409 50.3725 10.0809 50.8525 10.0009 51.4125ZM10.2409 55.8925C10.7209 55.0125 11.1209 54.0525 11.3609 53.0125H13.6809C12.9609 54.2925 11.6809 55.3325 10.2409 55.8925ZM11.6809 51.4125C11.7609 50.8525 11.7609 50.3725 11.7609 49.8125C11.7609 49.2525 11.6809 48.7725 11.6809 48.2125H14.4009C14.5609 48.6925 14.6409 49.2525 14.6409 49.8125C14.6409 50.3725 14.5609 50.9325 14.4009 51.4125H11.6809Z",fill:"#285BE7"}))}function Ua({mode:e}){switch(e){case W:return(0,M.createElement)(ja,null);case _:return(0,M.createElement)(Fa,null);case m:return(0,M.createElement)(Ia,null);default:return null}}function Va(e){switch(e){case W:return(0,p.__)("Standard","amp");case _:return(0,p.__)("Transitional","amp");case m:return(0,p.__)("Reader","amp");default:return null}}function $a({children:e,details:t,detailsUrl:o,initialOpen:n,labelExtra:b=null,mode:z,previouslySelected:c=!1}){const{editedOptions:a,updateOptions:r}=(0,M.useContext)(q),{theme_support:O}=a,i=function(e){return`template-mode-${e}`}(z);return(0,M.createElement)(Cc,{className:"template-mode-option",handleType:xc,heading:(0,M.createElement)("label",{className:"template-mode-option__label",htmlFor:i},(0,M.createElement)("div",{className:"template-mode-selection__input-container"},(0,M.createElement)("input",{type:"radio",id:i,checked:z===O,onChange:()=>{r({theme_support:z})}})),(0,M.createElement)("div",{className:"template-mode-selection__illustration"},(0,M.createElement)(Ua,{mode:z})),(0,M.createElement)("div",{className:"template-mode-selection__description"},(0,M.createElement)("h3",null,Va(z)),c&&(0,M.createElement)(Ha,null,(0,p.__)("Previously selected","amp")),b&&(0,M.createElement)("div",{className:"template-mode-selection__label-extra"},b))),hiddenTitle:Va(z),id:`${i}-container`,initialOpen:"boolean"==typeof n?n:z&&O&&z===O,selected:z===O},(0,M.createElement)("div",{className:"template-mode-selection__details"},e,Array.isArray(t)&&(0,M.createElement)("ul",{className:"template-mode-selection__details-list"},t.filter(Boolean).map(((e,t)=>(0,M.createElement)("li",{key:t,className:"template-mode-selection__details-list-item"},e)))),t&&!Array.isArray(t)&&(0,M.createElement)("p",null,(0,M.createElement)("span",null,t),o&&(0,M.createElement)(M.Fragment,null," ",(0,M.createElement)("a",{href:o,target:"_blank",rel:"noreferrer noopener"},(0,p.__)("Learn more.","amp"))))))}const Ga=(0,M.createContext)({flexItemDisplay:void 0}),Ja={name:"zjik7",styles:"display:flex"},Ka={name:"qgaee5",styles:"display:block;max-height:100%;max-width:100%;min-height:0;min-width:0"},Qa={name:"82a6rk",styles:"flex:1"},Za={name:"13nosa1",styles:">*{min-height:0;}"},er={name:"1pwxzk4",styles:">*{min-width:0;}"};function Mr(e){const{className:t,display:o,isBlock:n=!1,...b}=Oc(e,"FlexItem"),p={},z=(0,M.useContext)(Ga).flexItemDisplay;return p.Base=bM({display:o||z},"",""),{...b,className:rc()(Ka,p.Base,n&&Qa,t)}}const tr=ic((function(e,t){const o=function(e){return Mr({isBlock:!0,...Oc(e,"FlexBlock")})}(e);return(0,M.createElement)(Ac,{...o,ref:t})}),"FlexBlock"),or=()=>{},nr=function(e){const{className:t,checked:o,id:n,disabled:b,onChange:p=or,...z}=e,c=N()("components-form-toggle",t,{"is-checked":o,"is-disabled":b});return(0,M.createElement)("span",{className:c},(0,M.createElement)("input",{className:"components-form-toggle__input",id:n,type:"checkbox",checked:o,onChange:p,disabled:b,...z}),(0,M.createElement)("span",{className:"components-form-toggle__track"}),(0,M.createElement)("span",{className:"components-form-toggle__thumb"}))},br=ic((function(e,t){const o=Mr(e);return(0,M.createElement)(Ac,{...o,ref:t})}),"FlexItem"),pr=["40em","52em","64em"],zr=(e={})=>{const{defaultIndex:t=0}=e;if("number"!=typeof t)throw new TypeError(`Default breakpoint index should be a number. Got: ${t}, ${typeof t}`);if(t<0||t>pr.length-1)throw new RangeError(`Default breakpoint index out of range. Theme has ${pr.length} breakpoints, got index ${t}`);const[o,n]=(0,M.useState)(t);return(0,M.useEffect)((()=>{const e=()=>{const e=pr.filter((e=>"undefined"!=typeof window&&window.matchMedia(`screen and (min-width: ${e})`).matches)).length;o!==e&&n(e)};return e(),"undefined"!=typeof window&&window.addEventListener("resize",e),()=>{"undefined"!=typeof window&&window.removeEventListener("resize",e)}}),[o]),o};function cr(e){const{align:t,className:o,direction:n="row",expanded:b=!0,gap:p=2,justify:z="space-between",wrap:c=!1,...a}=Oc(function(e){const{isReversed:M,...t}=e;return void 0!==M?(Mo("Flex isReversed",{alternative:'Flex direction="row-reverse" or "column-reverse"',since:"5.9"}),{...t,direction:M?"row-reverse":"row"}):t}(e),"Flex"),r=function(e,M={}){const t=zr(M);if(!Array.isArray(e)&&"function"!=typeof e)return e;const o=e||[];return o[t>=o.length?o.length-1:t]}(Array.isArray(n)?n:[n]),O="string"==typeof r&&!!r.includes("column"),i=rc();return{...a,className:(0,M.useMemo)((()=>{const e=bM({alignItems:null!=t?t:O?"normal":"center",flexDirection:r,flexWrap:c?"wrap":void 0,gap:zM(p),justifyContent:z,height:O&&b?"100%":void 0,width:!O&&b?"100%":void 0},"","");return i(Ja,e,O?Za:er,o)}),[t,o,i,r,b,p,O,z,c]),isColumn:O}}const ar={bottom:{align:"flex-end",justify:"center"},bottomLeft:{align:"flex-end",justify:"flex-start"},bottomRight:{align:"flex-end",justify:"flex-end"},center:{align:"center",justify:"center"},edge:{align:"center",justify:"space-between"},left:{align:"center",justify:"flex-start"},right:{align:"center",justify:"flex-end"},stretch:{align:"stretch"},top:{align:"flex-start",justify:"center"},topLeft:{align:"flex-start",justify:"flex-start"},topRight:{align:"flex-start",justify:"flex-end"}},rr={bottom:{justify:"flex-end",align:"center"},bottomLeft:{justify:"flex-end",align:"flex-start"},bottomRight:{justify:"flex-end",align:"flex-end"},center:{justify:"center",align:"center"},edge:{justify:"space-between",align:"center"},left:{justify:"center",align:"flex-start"},right:{justify:"center",align:"flex-end"},stretch:{align:"stretch"},top:{justify:"flex-start",align:"center"},topLeft:{justify:"flex-start",align:"flex-start"},topRight:{justify:"flex-start",align:"flex-end"}};const Or=ic((function(e,t){const o=function(e){const{alignment:t="edge",children:o,direction:n,spacing:b=2,...p}=Oc(e,"HStack"),z=function(e,M="row"){if(!Tc(e))return{};const t="column"===M?rr:ar;return e in t?t[e]:{align:e}}(t,n);return cr({children:function(e){return"string"==typeof e?[e]:M.Children.toArray(e).filter((e=>(0,M.isValidElement)(e)))}(o).map(((e,t)=>{if(dc(e,["Spacer"])){const o=e,n=o.key||`hstack-${t}`;return(0,M.createElement)(br,{isBlock:!0,key:n,...o.props})}return e})),direction:n,justify:"center",...z,...p,gap:b})}(e);return(0,M.createElement)(Ac,{...o,ref:t})}),"HStack"),ir=function e({__nextHasNoMarginBottom:t,label:o,checked:n,help:b,className:p,onChange:z,disabled:c}){const a=`inspector-toggle-control-${oo(e)}`,r=rc()("components-toggle-control",p,!t&&bM({marginBottom:zM(3)},"",""));let O,i;return b&&("function"==typeof b?void 0!==n&&(i=b(n)):i=b,i&&(O=a+"__help")),(0,M.createElement)(xa,{id:a,help:i,className:r,__nextHasNoMarginBottom:!0},(0,M.createElement)(Or,{justify:"flex-start",spacing:3},(0,M.createElement)(nr,{id:a,checked:n,onChange:function(e){z(e.target.checked)},"aria-describedby":O,disabled:c}),(0,M.createElement)(tr,{as:"label",htmlFor:a,className:"components-toggle-control__label"},o)))};function sr({checked:e,compact:t=!1,disabled:o=!1,onChange:n,text:b,title:p}){return(0,M.createElement)("div",{className:N()("amp-setting-toggle",{"amp-setting-toggle--disabled":o,"amp-setting-toggle--compact":t})},(0,M.createElement)(ir,{checked:!o&&e,label:(0,M.createElement)("div",{className:"amp-setting-toggle__label-text"},p&&((0,M.isValidElement)(p)?p:(0,M.createElement)("h3",null,p)),b&&(0,M.createElement)("p",null,b)),onChange:n}))}let dr;function lr(e){if("string"!=typeof e||-1===e.indexOf("&"))return e;void 0===dr&&(dr=document.implementation&&document.implementation.createHTMLDocument?document.implementation.createHTMLDocument("").createElement("textarea"):document.createElement("textarea")),dr.innerHTML=e;const M=dr.textContent;return dr.innerHTML="",M}function ur({children:e,isLoading:t=!1}){return(0,M.createElement)("div",{className:"phone "+(t?"is-loading":"")},(0,M.createElement)("div",{className:"phone__inner"},(0,M.createElement)("div",{className:"phone__overlay"},(0,M.createElement)(tt,null)),e))}var Ar=function(e){return(0,M.createElement)("svg",{...e},(0,M.createElement)("defs",null,(0,M.createElement)("style",null,".cls-1","{","fill:#fff","}",".cls-2","{","fill:#c4c4c4","}",".cls-4","{","fill:#e7e7e7","}")),(0,M.createElement)("path",{className:"cls-1",d:"M.13 140.05V-.14h78.89v140.19z"}),(0,M.createElement)("path",{className:"cls-2",d:"m7.51 14.71 16.68.07a2.31 2.31 0 0 1 2.3 2.33 2.3 2.3 0 0 1-2.32 2.3l-16.68-.07A2.33 2.33 0 0 1 5.18 17a2.31 2.31 0 0 1 2.33-2.29Z"}),(0,M.createElement)("rect",{className:"cls-2",x:"32.11",y:"-4.06",width:"2.31",height:"56.24",rx:"1.16",transform:"rotate(-90 33.14 24.08)"}),(0,M.createElement)("rect",{className:"cls-2",x:"18.84",y:"58.89",width:"4.63",height:"32.47",rx:"2.31",transform:"rotate(-89.74 21.163 75.128)"}),(0,M.createElement)("path",{className:"cls-2",d:"M6.19 61.26h9.27a1.15 1.15 0 0 1 1.15 1.16 1.16 1.16 0 0 1-1.16 1.16H6.18A1.15 1.15 0 0 1 5 62.41a1.15 1.15 0 0 1 1.19-1.15ZM22.4 61.33h9.27a1.16 1.16 0 0 1 1.15 1.17 1.15 1.15 0 0 1-1.16 1.15h-9.27a1.16 1.16 0 0 1-1.15-1.16 1.16 1.16 0 0 1 1.16-1.16ZM6.06 80.48h11a1.15 1.15 0 0 1 1.15 1.16 1.15 1.15 0 0 1-1.16 1.15h-11a1.16 1.16 0 0 1-1.16-1.16 1.16 1.16 0 0 1 1.17-1.15ZM73.15 99.46l-19.56-.09a1.15 1.15 0 0 0-1.16 1.15 1.15 1.15 0 0 0 1.15 1.16l19.56.09a1.15 1.15 0 0 0 1.16-1.15 1.15 1.15 0 0 0-1.15-1.16ZM6 91.43h11a1.15 1.15 0 0 1 1.15 1.16 1.15 1.15 0 0 1-1.15 1.2l-11-.05a1.16 1.16 0 0 1-1.16-1.16A1.16 1.16 0 0 1 6 91.43ZM62.17 86.26h11a1.17 1.17 0 0 1 1.15 1.17 1.16 1.16 0 0 1-1.16 1.15h-11A1.16 1.16 0 0 1 61 87.41a1.16 1.16 0 0 1 1.17-1.15ZM25.92 104.78l-20-.09a1.15 1.15 0 0 0-1.16 1.15A1.15 1.15 0 0 0 5.94 107l20 .09a1.15 1.15 0 0 0 1.16-1.15 1.15 1.15 0 0 0-1.18-1.16ZM24 80.56l49.28.22a1.16 1.16 0 0 1 1.16 1.16 1.18 1.18 0 0 1-1.17 1.16l-49.28-.23a1.15 1.15 0 0 1-1.15-1.16A1.15 1.15 0 0 1 24 80.56ZM47.71 99.34 6 99.15a1.15 1.15 0 0 0-1.16 1.15A1.17 1.17 0 0 0 6 101.47l41.74.18a1.16 1.16 0 0 0 1.17-1.15 1.16 1.16 0 0 0-1.2-1.16ZM23.9 91.51l49.28.22a1.16 1.16 0 0 1 1.16 1.16 1.18 1.18 0 0 1-1.17 1.16l-49.28-.23a1.15 1.15 0 0 1-1.15-1.16 1.15 1.15 0 0 1 1.16-1.15ZM6 86l49.28.22a1.15 1.15 0 0 1 1.15 1.16 1.16 1.16 0 0 1-1.16 1.16L6 88.32a1.15 1.15 0 0 1-1.15-1.16A1.15 1.15 0 0 1 6 86ZM73.13 105l-41.79-.19a1.18 1.18 0 0 0-1.17 1.19 1.17 1.17 0 0 0 1.15 1.16l41.8.19a1.17 1.17 0 0 0 1.16-1.16 1.16 1.16 0 0 0-1.15-1.19ZM38.62 61.41h9.26a1.16 1.16 0 0 1 1.12 1.2 1.16 1.16 0 0 1-1.17 1.15h-9.26a1.16 1.16 0 0 1-1.16-1.16 1.16 1.16 0 0 1 1.21-1.19ZM54.83 61.48h9.27a1.15 1.15 0 0 1 1.15 1.16 1.15 1.15 0 0 1-1.16 1.15h-9.27a1.15 1.15 0 0 1-1.15-1.16 1.15 1.15 0 0 1 1.16-1.15ZM5.7 4.65h4.63a.45.45 0 0 1 .46.46.46.46 0 0 1-.46.46H5.7a.46.46 0 0 1-.46-.46.47.47 0 0 1 .46-.46ZM5.69 6.51h4.63a.45.45 0 0 1 .46.46.45.45 0 0 1-.46.46H5.69A.46.46 0 0 1 5.23 7a.45.45 0 0 1 .46-.49ZM5.69 8.36h4.63a.47.47 0 0 1 .46.46.46.46 0 0 1-.47.46H5.68a.47.47 0 0 1-.46-.46.46.46 0 0 1 .47-.46Z"}),(0,M.createElement)("path",{d:"M56.12 5.88 72.55 6a1.31 1.31 0 0 1 1.31 1.32 1.31 1.31 0 0 1-1.32 1.31l-16.43-.12a1.32 1.32 0 0 1-1.31-1.32 1.3 1.3 0 0 1 1.32-1.31Z",style:{fill:"none",stroke:"#c4c4c4",strokeWidth:"2px"}}),(0,M.createElement)("rect",{className:"cls-4",x:"27.33",y:"9.56",width:"24.99",height:"69.44",rx:"10",transform:"rotate(-89.74 39.83 44.28)"}),(0,M.createElement)("path",{className:"cls-2",d:"M29.36 44.42 9.54 56.64l60.56.28-20-18-16.56 11.15Z"}),(0,M.createElement)("circle",{className:"cls-1",cx:"14.39",cy:"40.41",r:"3.76"}),(0,M.createElement)("rect",{className:"cls-4",x:"8.41",y:"108",width:"24.99",height:"32.41",rx:"10",transform:"rotate(-90 20.58 123.97)"}),(0,M.createElement)("path",{className:"cls-2",d:"m17.35 124.37-8.22 12.28 25 .11-8.23-18L19.06 130Z"}),(0,M.createElement)("circle",{className:"cls-1",cx:"12.56",cy:"118.49",r:"3.76"}),(0,M.createElement)("rect",{className:"cls-4",x:"45.64",y:"108.16",width:"24.99",height:"32.41",rx:"10",transform:"rotate(-89.74 58.139 124.366)"}),(0,M.createElement)("path",{className:"cls-2",d:"m54.58 124.54-8.22 12.27 25 .11-8.23-18-6.85 11.24Z"}),(0,M.createElement)("circle",{className:"cls-1",cx:"49.78",cy:"118.66",r:"3.76"}))};function qr({description:e,ElementName:t="li",homepage:o,screenshotUrl:n,slug:b,name:z,disabled:c,style:a}){const{editedOptions:r,updateOptions:O}=(0,M.useContext)(q),{reader_theme:i}=r,s=`theme-card__${b}`;return(0,M.createElement)(Yc,{className:"theme-card "+(c?"theme-card--disabled":""),direction:"bottom",ElementName:t,selected:i===b,style:a},(0,M.createElement)("label",{htmlFor:s,className:"theme-card__label"},(0,M.createElement)(ur,null,n?(0,M.createElement)("img",{src:n,alt:z||b,height:"2165",width:"1000",loading:"lazy",decoding:"async"}):(0,M.createElement)(Ar,{style:{width:"100%"}}),c&&(0,M.createElement)("div",{className:"theme-card__disabled-overlay"},(0,p.__)("Unavailable","amp"))),(0,M.createElement)("div",{className:"theme-card__label-header"},(0,M.createElement)("input",{disabled:Boolean(c),type:"radio",id:s,checked:i===b,onChange:()=>{O({reader_theme:b})}}),(0,M.createElement)("h4",{className:"theme-card__title"},lr(z||b))),e&&(0,M.createElement)("p",{className:"theme-card__description"},lr(e))),o&&(0,M.createElement)("p",{className:"theme-card__theme-link"},(0,M.createElement)("a",{href:o,target:"_blank",rel:"noreferrer noopener"},(0,p.__)("Learn more","amp"))))}Ar.defaultProps={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 79 139"};const fr=window.lodash;function mr(e={}){e={...e,mobileBreakpoint:h};const{mobileBreakpoint:t}=e,[o,b]=(0,M.useState)(window.innerWidth);return(0,M.useEffect)((()=>{const e=()=>{b(window.innerWidth)};return n.g.addEventListener("resize",e,{passive:!0}),()=>{n.g.removeEventListener("resize",e)}}),[]),{windowWidth:o,isMobile:o<t}}function Wr({id:e,isHighlighted:t,label:o,namespace:n,onClick:b}){return(0,M.createElement)(Wc,{className:N()(`${n}__nav-dot-button`,{[`${n}__nav-dot-button--active`]:t}),id:e,onClick:b,"aria-label":o},(0,M.createElement)(qc,{as:"span"},o),t&&(0,M.createElement)(qc,{as:"span"},(0,p.__)("(Selected item)","amp")),(0,M.createElement)("span",{className:`${n}__nav-dot`}))}function _r({currentPage:e,items:t,namespace:o,nextButtonDisabled:n,prevButtonDisabled:b,setCurrentPage:z,centeredItemIndex:c,showDots:a}){return(0,M.createElement)("div",{className:`${o}__nav`},(0,M.createElement)(Wc,{id:`${o}__prev-button`,isPrimary:!0,disabled:b,onClick:()=>{z(e.previousElementSibling)},className:`${o}__prev`,"aria-label":(0,p.__)("Previous","amp")},(0,M.createElement)(qc,{as:"span"},(0,p.__)("Previous","amp")),(0,M.createElement)("svg",{width:"12",height:"11",viewBox:"0 0 12 11",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,M.createElement)("path",{d:"M5.47729 1.19531L1.18289 5.48906L5.47729 9.78347",stroke:"#FAFAFC",strokeWidth:"2",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M1.15854 5.48828L10.281 5.48828",stroke:"#FAFAFC",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"}))),a?(0,M.createElement)("div",{className:`${o}__dots`},[...t].map(((e,t)=>(0,M.createElement)(Wr,{id:`${o}__${e.id}-dot`,key:`${o}__${e.id}-dot`,isHighlighted:t===c,label:e.getAttribute("data-label"),namespace:o,onClick:()=>{z(e)}})))):(0,M.createElement)("div",{className:`${o}__item-counter`},(0,M.createElement)("span",null,c+1),(0,M.createElement)("span",null,t.length)),(0,M.createElement)(Wc,{id:`${o}__next-button`,isPrimary:!0,disabled:n,onClick:()=>{z(e.nextElementSibling)},className:`${o}__next`,"aria-label":(0,p.__)("Next","amp")},(0,M.createElement)(qc,{as:"span"},(0,p.__)("Next","amp")),(0,M.createElement)("svg",{width:"12",height:"11",viewBox:"0 0 12 11",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,M.createElement)("path",{d:"M5.95255 1.19531L10.247 5.48906L5.95255 9.78347",stroke:"#FAFAFC",strokeWidth:"2",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M10.2712 5.48828L1.14868 5.48828",stroke:"#FAFAFC",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"}))))}const hr=60,Lr=783;function Rr({gutterWidth:e=hr,items:t,mobileBreakpoint:o=Lr,namespace:n="amp-carousel",highlightedItemIndex:b=0}){const{windowWidth:p}=mr(),[z,c]=(0,M.useState)(null),[a,r]=(0,M.useState)(0),[O,i]=(0,M.useState)(null),s=(0,M.useRef)(),d=(0,M.useCallback)(((e,M=!0,t=!0)=>{c(e),e&&M&&s.current.scrollTo({top:0,left:e.offsetLeft,behavior:t?"smooth":"auto"})}),[]);(0,M.useEffect)((()=>{const e=s.current.children.item(b);d(e,!0,!1)}),[b,a,d]),(0,M.useLayoutEffect)((()=>{let e=!0;const M=s.current,t=(0,fr.debounce)((()=>{if(e)for(const e of[...M.children])if(e.offsetLeft>=M.scrollLeft)return void(e!==z&&d(e,!1))}),300);return M.addEventListener("scroll",t,{passive:!0}),()=>{e=!1,M.removeEventListener("scroll",t)}}),[z,d]),(0,M.useEffect)((()=>{r(s?.current?.clientWidth||0)}),[t.length,p]),(0,M.useEffect)((()=>{i(t.length>1)}),[t.length]);const l=[...s.current?.children||[]].indexOf(z),u=l>=t.length-1,A=l<=0;return(0,M.createElement)("div",{className:n},(0,M.createElement)("div",{className:`${n}__container`},(0,M.createElement)("ul",{className:`${n}__carousel`,ref:s},t.map((({label:e,name:t,Item:o})=>(0,M.createElement)("li",{className:`${n}__item`,"data-label":e,id:`${n}-item-${t}`,key:`${n}-item-${t}`,tabIndex:-1},(0,M.createElement)(o,null)))))),O&&(0,M.createElement)(_r,{currentPage:z,centeredItemIndex:l,items:s?.current?.children,namespace:n,nextButtonDisabled:u,prevButtonDisabled:A,setCurrentPage:d,highlightedItemIndex:b,showDots:o<p}),(0,M.createElement)(gr,{gutterWidth:e,itemWidth:a,namespace:n}))}function gr({gutterWidth:e,itemWidth:t,namespace:o}){return(0,M.createElement)("style",null,`\n\n.${o}__carousel {\n\tposition: relative;\n\tdisplay: grid;\n\tgap: ${e}px;\n\tgrid-auto-flow: column;\n\toverflow-x: scroll;\n\t-ms-overflow-style: none;\n\tpadding: 1rem 0;\n\tscrollbar-width: none;\n\tscroll-snap-type: x mandatory;\n}\n\n.${o}__carousel::-webkit-scrollbar {\n\tdisplay: none;\n}\n\n.${o}__item {\n\tflex-shrink: 0;\n\tscroll-snap-align: center;\n\twidth: ${t}px;\n}\n\n.${o}__item:focus,\n.${o}__item:focus > * {\n\toutline: none;\n}\n\n.${o}__nav {\n\tdisplay: flex;\n\tjustify-content: center;\n\tpadding: 1.5rem;\n}\n\n.${o}__nav .components-button.is-primary svg {\n\tdisplay: block;\n\tmargin-left: 0;\n\tmargin-right: 0;\n}\n\n.${o}__nav .components-button.is-primary svg path {\n\tfill: transparent;\n}\n\n.${o}__nav .components-button.is-primary {\n\tpadding: 7px;\n}\n\n.${o}__dots {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tjustify-content: center;\n}\n\n.${o}__nav .${o}__nav-dot-button {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tpadding: 0;\n\twidth: 20px;\n}\n\n.${o}__prev {\n\tmargin-right: 10px;\n}\n\n.${o}__next {\n\tmargin-left: 10px;\n}\n\n.${o}__nav-dot-button .${o}__nav-dot {\n\tbackground-color: #c4c4c4;\n\tborder-radius: 5px;\n\tborder: 2px solid #c4c4c4;\n\tflex-shrink: 0;\n\theight: 10px;\n\tpadding: 0;\n\ttransition: .2s all;\n\twidth: 10px;\n}\n\n.${o}__item-counter {\n\talign-items: center;\n\tdisplay: flex;\n\tfont-size: 14px;\n\tfont-variant-numeric: tabular-nums;\n\tpadding: 0 0.5rem;\n}\n\n.${o}__item-counter span:first-of-type {\n\tdisplay: flex;\n\tfont-size: 20px;\n}\n\n.${o}__item-counter span:first-of-type:after {\n\tborder-left: 2px solid var(--color-gray-medium);\n\tcontent: '';\n\tmargin: -0.5rem 0.5rem;\n}\n\n.${o}__nav-dot-button--active .${o}__nav-dot {\n\tbackground-color: var(--amp-settings-color-brand);\n\tborder-color: var(--amp-settings-color-brand);\n}\n\n`)}function yr(){const{themesAPIError:e}=(0,M.useContext)(L);return e?(0,M.createElement)($c,{type:Hc},(0,M.createElement)("p",null,e)):null}function vr(){const{windowWidth:e}=mr(),{availableThemes:t,currentTheme:o,fetchingThemes:n,selectedTheme:b,themes:z,unavailableThemes:c}=(0,M.useContext)(L),[a,r]=(0,M.useState)(!1),O=c.length>0,i=a?z:t,s=e<Lr,d=(0,M.useMemo)((()=>{if(s)return i.map((e=>({label:e.name,name:e.slug,Item:()=>(0,M.createElement)(qr,{disabled:c.includes(e),ElementName:"div",screenshotUrl:e.screenshot_url,...e})})));const e=[],t=[...i];for(;t.length;)e.push(t.splice(0,3));return e.map(((e,t)=>({label:(0,p.sprintf)(/* translators: Placeholder is a page number. */
(0,p.__)("Page %d"),t),name:`carousel-page-${t}`,Item:()=>(0,M.createElement)("div",{className:"amp-carousel__page"},e.map((e=>(0,M.createElement)(qr,{key:`theme-card-${e.slug}`,disabled:c.includes(e),ElementName:"div",screenshotUrl:e.screenshot_url,...e}))))})))}),[s,i,c]),l=(0,M.useMemo)((()=>{for(let e=0;e<i.length;e+=1)if(i[e].slug===b.slug)return s?e:Math.floor(e/3);return 0}),[s,b.slug,i]);return n?(0,M.createElement)(tt,null):(0,M.createElement)("div",{className:"reader-theme-selection"},(0,M.createElement)("p",null,(0,p.__)("Choose the theme to be used for AMP pages. This theme will normally be exclusively shown to mobile visitors.","amp")),o&&o.is_reader_theme&&(0,M.createElement)($c,null,(0,M.createElement)("p",null,(0,p.sprintf)(/* translators: placeholder is the name of a WordPress theme. */
(0,p.__)("Your active theme “%s” is not listed below because it is already AMP-compatible. If you wish to use your active theme for both AMP and non-AMP pages, then Transitional template mode is what you should choose.","amp"),o.name))),(0,M.createElement)(yr,null),(0,M.createElement)("div",null,O&&(0,M.createElement)($c,{type:jc},(0,M.createElement)("p",null,(0,p.__)("Some supported themes cannot be installed automatically on this site. To use, please install them manually or contact your hosting provider.","amp")),(0,M.createElement)(sr,{text:(0,p.__)("Show unavailable themes","amp"),onChange:e=>{r(e)},checked:a})),0<i.length&&(0,M.createElement)(Rr,{items:d,highlightedItemIndex:l})))}const Nr="recommended",kr="neutral",Tr="notRecommended";function Br(){return(0,M.createElement)($c,{size:Uc},(0,p.__)("Recommended","amp"))}function wr(){return(0,M.createElement)($c,{size:Uc,type:Hc},(0,p.__)("Not recommended","amp"))}function Sr({focusReaderThemes:e}){const{editedOptions:{theme_support:t}}=(0,M.useContext)(q),{selectedTheme:o,templateModeWasOverridden:n}=(0,M.useContext)(L),b=function(){const{hasSiteScanResults:e,isBusy:t,isFetchingScannableUrls:o,pluginsWithAmpIncompatibility:n,stale:b,themesWithAmpIncompatibility:z}=(0,M.useContext)(ea),{developerToolsOption:c,fetchingUser:a,savingDeveloperToolsOption:r}=(0,M.useContext)(bt),{fetchingOptions:O,originalOptions:i,savedOptions:s,savingOptions:d}=(0,M.useContext)(q),[l,u]=(0,M.useState)(null);return(0,M.useLayoutEffect)((()=>{if(t||o||O||d||a||r)return;const l={...i,...s},A=Object.entries(l?.suppressed_plugins||{}).some((([e,M])=>M&&Boolean(l.suppressible_plugins?.[e])));u(function({hasFreshSiteScanResults:e,hasPluginIssues:t,hasSuppressedPlugins:o,hasThemeIssues:n,userIsTechnical:b}){const z=(0,p.__)("If automatic mobile redirection is enabled, the AMP version of the content will be served on mobile devices. If AMP-to-AMP linking is enabled, once users are on an AMP page, they will continue navigating your AMP content.","amp"),c=mt((0,p.__)("In Reader mode <b>your site will have a non-AMP and an AMP version</b>, and <b>each version will use its own theme</b>.","amp")+" "+z,{b:(0,M.createElement)("b",null)}),a=mt((0,p.__)("In Transitional mode <b>your site will have a non-AMP and an AMP version</b>, and <b>both will use the same theme</b>.","amp")+" "+z,{b:(0,M.createElement)("b",null)}),r=mt((0,p.__)("In Standard mode <b>your site will be completely AMP</b> (except in cases where you opt-out of AMP for specific parts of your site), and <b>it will use a single theme</b>.","amp"),{b:(0,M.createElement)("b",null)}),O=(0,p.__)("To address plugin compatibility issue(s), you may need to use Plugin Suppression to disable incompatible plugins on AMP pages or else select an alternative AMP-compatible plugin.","amp"),i=(0,p.__)("Recommended if you want to enable AMP on your site despite the detected compatibility issue(s).","amp"),s=(0,p.__)("Recommended so you can progressively enable AMP on your site while still making the non-AMP version available to visitors for functionality that is not AMP-compatible. Choose this mode if compatibility issues can be fixed or if your theme degrades gracefully when JavaScript is disabled.","amp"),d=(0,p.__)("Not recommended as your site has no AMP compatibility issues detected.","amp"),l=(0,p.__)("Not recommended until you can fix the detected compatibility issue(s).","amp"),u=(0,p.__)("Recommended since there were no theme compatibility issues detected.","amp"),A=(0,p.__)("Not recommended due to compatibility issue(s) which may break key site functionality, without developer assistance.","amp"),q=(0,p.__)("Not recommended because you have suppressed plugins.","amp");switch(!0){case!e:return{[m]:{recommendationLevel:kr,details:[c]},[_]:{recommendationLevel:kr,details:[a]},[W]:{recommendationLevel:kr,details:[r]}};case n&&t&&b:return{[m]:{recommendationLevel:Nr,details:[c,i,O]},[_]:{recommendationLevel:kr,details:[a,s,O]},[W]:{recommendationLevel:Tr,details:[r,l,O]}};case n&&t&&!b:return{[m]:{recommendationLevel:Nr,details:[c,i,O]},[_]:{recommendationLevel:Tr,details:[a,A,O]},[W]:{recommendationLevel:Tr,details:[r,A,O]}};case n&&!t&&b:return{[m]:{recommendationLevel:Nr,details:[c,i]},[_]:{recommendationLevel:Nr,details:[a,s]},[W]:{recommendationLevel:kr,details:[r,l]}};case n&&!t&&!b:return{[m]:{recommendationLevel:Nr,details:[c,i]},[_]:{recommendationLevel:Tr,details:[a,A]},[W]:{recommendationLevel:Tr,details:[r,A]}};case!n&&t&&b:return{[m]:{recommendationLevel:Tr,details:[c,O]},[_]:{recommendationLevel:Nr,details:[a,u,O]},[W]:{recommendationLevel:kr,details:[r,l,O]}};case!n&&t&&!b:return{[m]:{recommendationLevel:Nr,details:[c,O]},[_]:{recommendationLevel:Nr,details:[a,u,O]},[W]:{recommendationLevel:Tr,details:[r,A,O]}};case!n&&!t&&b:return{[m]:{recommendationLevel:Tr,details:[c,d]},[_]:{recommendationLevel:o?Nr:Tr,details:[a,d]},[W]:{recommendationLevel:o?Tr:Nr,details:[r,(0,p.__)("Recommended as you have an AMP-compatible theme and no issues were detected with any of the plugins on your site.","amp"),o?q:null]}};case!n&&!t&&!b:return{[m]:{recommendationLevel:Tr,details:[c,d]},[_]:{recommendationLevel:o?Nr:kr,details:[a,(0,p.__)("Recommended if you can’t commit to choosing plugins that are AMP compatible when extending your site. This mode will make it easy to keep AMP content even if non-AMP-compatible plugins are used later on.","amp")]},[W]:{recommendationLevel:kr,details:[r,(0,p.__)("Recommended if you can commit to always choosing plugins that are AMP compatible when extending your site.","amp"),o?q:null]}};default:throw new Error((0,p.__)("A template mode recommendation case was not accounted for.","amp"))}}({hasPluginIssues:n?.length>0,hasFreshSiteScanResults:e&&!b,hasSuppressedPlugins:A,hasThemeIssues:z?.length>0,userIsTechnical:!0===c}))}),[c,O,a,e,t,o,i,n?.length,s,r,d,b,z?.length]),l}(),z=(0,M.useCallback)((e=>{if(!b)return null;switch(b[e].recommendationLevel){case Nr:return(0,M.createElement)(Br,null);case Tr:return(0,M.createElement)(wr,null);default:return null}}),[b]);return(0,M.createElement)("section",{className:"template-modes",id:"template-modes"},(0,M.createElement)("h2",null,(0,p.__)("Template Mode","amp")),n&&(0,M.createElement)($c,{type:jc,size:Vc},(0,p.__)("Because you selected a Reader theme that is the same as your site's active theme, your site has automatically been switched to Transitional template mode.","amp")),(0,M.createElement)($a,{details:b?.[W]?.details,detailsUrl:"https://amp-wp.org/documentation/getting-started/standard/",initialOpen:!1,mode:W,labelExtra:z(W)}),(0,M.createElement)($a,{details:b?.[_]?.details,detailsUrl:"https://amp-wp.org/documentation/getting-started/transitional/",initialOpen:!1,mode:_,labelExtra:z(_)}),(0,M.createElement)($a,{details:b?.[m]?.details,detailsUrl:"https://amp-wp.org/documentation/getting-started/reader/",initialOpen:!1,mode:m,labelExtra:z(m)}),m===t&&(0,M.createElement)(Cc,{selected:!0,heading:(0,M.createElement)("div",{className:"reader-themes__heading"},(0,M.createElement)("h3",null,(0,p.sprintf)(/* translators: placeholder is a theme name. */
(0,p.__)("Reader theme: %s","amp"),o.name||""))),hiddenTitle:(0,p.__)("Show reader themes","amp"),id:"reader-themes",initialOpen:e},(0,M.createElement)(vr,null)))}function Er(){const{editedOptions:e,updateOptions:t}=(0,M.useContext)(q),{all_templates_supported:o,reader_theme:n,theme_support:b}=e;return"reader"===b&&"legacy"===n?null:(0,M.createElement)(sr,{checked:!0===o,title:(0,M.createElement)("p",null,(0,p.__)("Serve all templates as AMP","amp")),onChange:()=>{t({all_templates_supported:!o})}})}function Xr(e){return Boolean(e.find((e=>!(!e.children||!Xr(e.children))||"is_front_page"===e.id)))}function Yr({postTypeObject:e}){const{editedOptions:t,updateOptions:o}=(0,M.useContext)(q),{supported_post_types:n,supportable_templates:b,supported_templates:z,all_templates_supported:c}=t||{},a=Xr(b),r=z.includes("is_home"),O=z.includes("is_front_page");return(0,M.createElement)("li",{key:`supportable-post-type-${e.name}`},(0,M.createElement)(Ca,{checked:n.includes(e.name),label:e.label,onChange:M=>{if(!M&&a&&!c&&"page"===e.name){let e="";if(r&&O?e=(0,p.__)("Note that disabling pages will prevent you from serving your homepage and posts page (blog index) as AMP.","amp"):r?e=(0,p.__)("Note that disabling pages will prevent you from serving your posts page (blog index) as AMP.","amp"):O&&(e=(0,p.__)("Note that disabling pages will prevent you from serving your homepage as AMP.","amp")),e&&!window.confirm(e))return}const t=n.filter((M=>M!==e.name));M&&t.push(e.name),o({supported_post_types:t})}}))}function Dr(){const{editedOptions:e}=(0,M.useContext)(q),{supportable_post_types:t}=e||{};return t?(0,M.createElement)("fieldset",{id:"supported_post_types_fieldset"},(0,M.createElement)("h4",{className:"title"},(0,p.__)("Content Types","amp")),(0,M.createElement)("p",null,(0,p.__)("Content types enabled for AMP:","amp")),(0,M.createElement)("ul",null,t.map((e=>(0,M.createElement)(Yr,{key:`supportable-post-type-${e.name}`,postTypeObject:e}))))):null}function xr(e){const M=[e.id];for(const t of e.children)M.push(...xr(t));return M}function Cr({supportableTemplates:e}){const{editedOptions:t,updateOptions:o}=(0,M.useContext)(q),{supported_templates:n,supported_post_types:b}=t||{};if(!e.length)return null;const z=Xr(e),c=b.includes("page"),a=z?e.filter((e=>!z||c||!["is_home","is_front_page"].includes(e.id))):e;return(0,M.createElement)("ul",null,a.map((e=>(0,M.createElement)("li",{key:e.id},(0,M.createElement)(Ca,{checked:n.includes(e.id),help:e.description,label:e.label,onChange:M=>{if(!M&&"is_singular"===e.id&&!window.confirm((0,p.__)("Are you sure you want to disable the singular template? This template is needed to serve individual posts and pages as AMP.")))return;let t=[...n];const b=xr(e);M?b.forEach((e=>{t.includes(e)||t.push(e)})):t=t.filter((e=>!b.includes(e))),o({supported_templates:t})}}),(0,M.createElement)(Cr,{supportableTemplates:e.children})))))}function Pr(){const{editedOptions:e}=(0,M.useContext)(q),{all_templates_supported:t,theme_support:o,supportable_templates:n,reader_theme:b}=e||{};return m===o&&"legacy"===b||!n?.length?null:(0,M.createElement)("fieldset",{id:"supported_templates_fieldset"},(0,M.createElement)("h4",{className:"title"},(0,p.__)("Templates","amp")),(0,M.createElement)(Er,null),t?null:(0,M.createElement)(M.Fragment,null,(0,M.createElement)("p",null,mt((0,p.__)("Limit AMP on a subset of the WordPress <a>Template Hierarchy</a>:","amp"),{a:(0,M.createElement)("a",{href:"https://developer.wordpress.org/themes/basics/template-hierarchy/",target:"_blank",rel:"noreferrer"})})),(0,M.createElement)(Cr,{supportableTemplates:n})))}function Hr(){return(0,M.createElement)("div",{className:"supported-templates"},(0,M.createElement)("div",{className:"supported-templates__fields"},(0,M.createElement)(Dr,null),(0,M.createElement)(Pr,null)))}function jr({errorMessage:e}){return(0,M.createElement)("div",{className:"amp-error-notice"},(0,M.createElement)($c,{type:Pc},(0,M.createElement)("p",null,(0,M.createElement)("strong",null,(0,p.__)("Error:","amp"))," ",e)))}function Fr(){const{didSaveOptions:e,editedOptions:t,hasOptionsChanges:n,savingOptions:b,modifiedOptions:z}=(0,M.useContext)(q),{downloadingTheme:c}=(0,M.useContext)(L),{error:a}=(0,M.useContext)(u),{didSaveDeveloperToolsOption:r,hasDeveloperToolsOptionChange:O,savingDeveloperToolsOption:i}=(0,M.useContext)(bt),{reader_theme:s,theme_support:d}=t,l=n||O,A=b||c||i,f=!l||A||!d||m===d&&!s,W=z?.theme_support||z?.reader_theme;return(0,M.createElement)("section",{className:"amp-settings-nav"},(0,M.createElement)("div",{className:"amp-settings-nav__inner"},(0,M.createElement)(Wc,{isPrimary:!0,disabled:f,isBusy:A,type:"submit"},A?(0,p.__)("Saving","amp"):(0,p.__)("Save","amp"),(0,M.createElement)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 64 64"},(0,M.createElement)("path",{d:"M43.16 10.18c-0.881-0.881-2.322-0.881-3.203 0s-0.881 2.322 0 3.203l16.335 16.335h-54.051c-1.281 0-2.242 1.041-2.242 2.242 0 1.281 0.961 2.322 2.242 2.322h54.051l-16.415 16.335c-0.881 0.881-0.881 2.322 0 3.203s2.322 0.881 3.203 0l20.259-20.259c0.881-0.881 0.881-2.322 0-3.203l-20.179-20.179z"}))),a&&(0,M.createElement)(jr,{errorMessage:a.message||(0,p.__)("An error occurred. You might be offline or logged out.","amp")}),!a&&!l&&!c&&(e||r)&&(0,M.createElement)($c,{className:"amp-save-success-notice",type:Ic},(0,M.createElement)("p",null,o.HAS_PAGE_CACHING&&W?(0,M.createElement)(M.Fragment,null,(0,p.__)("Saved. Consider flushing page cache.","amp")+" ",(0,M.createElement)("a",{href:"https://amp-wp.org/documentation/getting-started/amp-site-setup/page-caching-with-amp-and-wordpress/",target:"_blank",rel:"noreferrer noopener"},(0,p.__)("Learn More","amp"))):(0,p.__)("Saved","amp")))))}function Ir(e){const t=`clip-icon-laptop-toggles-${oo(Ir)}`;return(0,M.createElement)("svg",{viewBox:"0 0 40 28",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e},(0,M.createElement)("g",{clipPath:`url(#${t})`,stroke:"#005AF0",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},(0,M.createElement)("path",{d:"M4.46 21.02V3.91A2.92 2.92 0 017.38 1h24.4a2.91 2.91 0 012.91 2.91v17.64M25.15 21.76v.88h-11v-.88H1v2.09a2.24 2.24 0 002.28 2.25h32.79a2.24 2.24 0 002.21-2.25v-2.09H25.15zM11.2 5.79v11.6"}),(0,M.createElement)("path",{d:"M11.2 14.06a2.47 2.47 0 100-4.94 2.47 2.47 0 000 4.94z",fill:"#fff"}),(0,M.createElement)("path",{d:"M19.58 5.79v11.6"}),(0,M.createElement)("path",{d:"M19.58 12.06a2.47 2.47 0 100-4.94 2.47 2.47 0 000 4.94z",fill:"#fff"}),(0,M.createElement)("path",{d:"M27.95 5.79v11.6"}),(0,M.createElement)("path",{d:"M27.95 16.06a2.47 2.47 0 100-4.94 2.47 2.47 0 000 4.94z",fill:"#fff"})),(0,M.createElement)("defs",null,(0,M.createElement)("clipPath",{id:t},(0,M.createElement)("path",{fill:"#fff",d:"M0 0h39.31v27.09H0z"}))))}const Ur=42,Vr=29,$r=2;function Gr({width:e=Ur,...t}){const o=`clip-icon-laptop-search-${oo(Gr)}`,n=$r*(Ur/e);return(0,M.createElement)("svg",{viewBox:`0 0 ${Ur} ${Vr}`,fill:"none",xmlns:"http://www.w3.org/2000/svg",width:e,...t},(0,M.createElement)("g",{clipPath:`url(#${o})`},(0,M.createElement)("path",{d:"M9.102 6.577l-.017 3.95a1.89 1.89 0 001.882 1.897l15.76.066a1.89 1.89 0 001.898-1.882l.016-3.95a1.89 1.89 0 00-1.882-1.897L11 4.694a1.89 1.89 0 00-1.897 1.883z",stroke:"#005AF0",strokeWidth:n,strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M13.14 9.2a1.15 1.15 0 100-2.3 1.15 1.15 0 000 2.3zM9.13 18.03a1.15 1.15 0 100-2.3 1.15 1.15 0 000 2.3z",fill:"#005AF0"}),(0,M.createElement)("path",{d:"M12.24 16.88h4.63M19.83 16.88h1.79M14.46 12.22l7.98-4.97 4.36 5.22",stroke:"#005AF0",strokeWidth:n,strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M4.24 19.65V3.71A2.71 2.71 0 016.95 1h22.74a2.71 2.71 0 012.72 2.71v16.43M23.5 20.35v.82H13.24v-.82H1v2a2.1 2.1 0 002.09 2h30.59a2.1 2.1 0 002.09-2.09v-2l-12.27.09z",stroke:"#005AF0",strokeWidth:n,strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M33.622 20.67l-.686.686a2 2 0 000 2.829l3.14 3.14a2 2 0 002.828 0l.686-.687a2 2 0 000-2.828l-3.14-3.14a2 2 0 00-2.828 0z",fill:"#fff"}),(0,M.createElement)("path",{d:"M33.622 20.67l-.686.686a2 2 0 000 2.829l3.14 3.14a2 2 0 002.828 0l.686-.687a2 2 0 000-2.828l-3.14-3.14a2 2 0 00-2.828 0z",stroke:"#005AF0",strokeWidth:n,strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M29.37 23.51a6.4 6.4 0 100-12.8 6.4 6.4 0 000 12.8z",fill:"#fff",stroke:"#005AF0",strokeWidth:n,strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M32.11 15.98a2.999 2.999 0 01-2.93 3.8",stroke:"#005AF0",strokeWidth:n,strokeLinecap:"round",strokeLinejoin:"round"})),(0,M.createElement)("defs",null,(0,M.createElement)("clipPath",{id:o},(0,M.createElement)("path",{fill:"#fff",d:"M0 0h41.21v28.96H0z"}))))}function Jr(){const{reviewPanelDismissedForTemplateMode:e,saveReviewPanelDismissedForTemplateMode:t,savingReviewPanelDismissedForTemplateMode:o}=(0,M.useContext)(bt),{previewPermalink:n}=(0,M.useContext)(ea),{originalOptions:b}=(0,M.useContext)(q),{theme_support:z}=b;return o||e===z?null:(0,M.createElement)(Cc,{heading:(0,M.createElement)(M.Fragment,null,(0,M.createElement)(Gr,{width:55}),(0,p.__)("Review","amp")),hiddenTitle:(0,p.__)("Review","amp"),id:"site-review",initialOpen:!0},(0,M.createElement)("div",{className:"settings-site-review"},(0,M.createElement)("p",null,(0,p.__)("Your site is ready to bring great experiences to your users!","amp")),W===z&&(0,M.createElement)("p",null,(0,p.__)("In Standard mode there is a single AMP version of your site. Browse your site below to ensure it meets your expectations.","amp")),_===z&&(0,M.createElement)(M.Fragment,null,(0,M.createElement)("p",null,(0,p.__)("In Transitional mode AMP and non-AMP versions of your site are served using your currently active theme.","amp")),(0,M.createElement)("p",null,(0,p.__)("Browse your site below to ensure it meets your expectations, and toggle the AMP setting to compare both versions.","amp"))),m===z&&(0,M.createElement)("p",null,(0,p.__)("In Reader mode AMP is served using your selected Reader theme, and pages for your non-AMP site are served using your primary theme. Browse your site below to ensure it meets your expectations, and toggle the AMP setting to compare both versions.","amp")),(0,M.createElement)("h3",{className:"settings-site-review__heading"},(0,M.createElement)(Ir,null),(0,p.__)("Need help?","amp")),(0,M.createElement)("ul",{className:"settings-site-review__list"},(0,M.createElement)("li",null,mt((0,p.__)("Reach out in the <a>support forums</a>","amp"),{a:(0,M.createElement)("a",{href:"https://wordpress.org/support/plugin/amp/#new-topic-0",target:"_blank",rel:"noreferrer noopener"})})),(0,M.createElement)("li",null,mt((0,p.__)("Try a different <a>template mode</a>","amp"),{a:(0,M.createElement)("a",{href:"#template-modes"})})),(0,M.createElement)("li",null,mt((0,p.__)("<a>Learn more</a> how the AMP plugin works","amp"),{a:(0,M.createElement)("a",{href:"https://amp-wp.org/documentation/how-the-plugin-works/",target:"_blank",rel:"noreferrer noopener"})}))),(0,M.createElement)("div",{className:"settings-site-review__actions"},n&&(0,M.createElement)(Wc,{href:n,isPrimary:!0},(0,p.__)("Browse Site","amp")),(0,M.createElement)(Wc,{onClick:()=>{t(z)},isLink:!0},(0,p.__)("Dismiss","amp")))))}const Kr=new RegExp("(<((?=!--|!\\[CDATA\\[)((?=!-)!(?:-(?!->)[^\\-]*)*(?:--\x3e)?|!\\[CDATA\\[[^\\]]*(?:](?!]>)[^\\]]*)*?(?:]]>)?)|[^>]*>?))");function Qr(e,M=!0){const t=[];if(""===e.trim())return"";if(-1!==(e+="\n").indexOf("<pre")){const M=e.split("</pre>"),o=M.pop();e="";for(let o=0;o<M.length;o++){const n=M[o],b=n.indexOf("<pre");if(-1===b){e+=n;continue}const p="<pre wp-pre-tag-"+o+"></pre>";t.push([p,n.substr(b)+"</pre>"]),e+=n.substr(0,b)+p}e+=o}const o="(?:table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|form|map|area|blockquote|address|math|style|p|h[1-6]|hr|fieldset|legend|section|article|aside|hgroup|header|footer|nav|figure|figcaption|details|menu|summary)";-1!==(e=function(e,M){const t=function(e){const M=[];let t,o=e;for(;t=o.match(Kr);){const e=t.index;M.push(o.slice(0,e)),M.push(t[0]),o=o.slice(e+t[0].length)}return o.length&&M.push(o),M}(e);let o=!1;const n=Object.keys(M);for(let e=1;e<t.length;e+=2)for(let b=0;b<n.length;b++){const p=n[b];if(-1!==t[e].indexOf(p)){t[e]=t[e].replace(new RegExp(p,"g"),M[p]),o=!0;break}}return o&&(e=t.join("")),e}(e=(e=(e=(e=e.replace(/<br\s*\/?>\s*<br\s*\/?>/g,"\n\n")).replace(new RegExp("(<"+o+"[\\s/>])","g"),"\n\n$1")).replace(new RegExp("(</"+o+">)","g"),"$1\n\n")).replace(/\r\n|\r/g,"\n"),{"\n":" \x3c!-- wpnl --\x3e "})).indexOf("<option")&&(e=(e=e.replace(/\s*<option/g,"<option")).replace(/<\/option>\s*/g,"</option>")),-1!==e.indexOf("</object>")&&(e=(e=(e=e.replace(/(<object[^>]*>)\s*/g,"$1")).replace(/\s*<\/object>/g,"</object>")).replace(/\s*(<\/?(?:param|embed)[^>]*>)\s*/g,"$1")),-1===e.indexOf("<source")&&-1===e.indexOf("<track")||(e=(e=(e=e.replace(/([<\[](?:audio|video)[^>\]]*[>\]])\s*/g,"$1")).replace(/\s*([<\[]\/(?:audio|video)[>\]])/g,"$1")).replace(/\s*(<(?:source|track)[^>]*>)\s*/g,"$1")),-1!==e.indexOf("<figcaption")&&(e=(e=e.replace(/\s*(<figcaption[^>]*>)/,"$1")).replace(/<\/figcaption>\s*/,"</figcaption>"));const n=(e=e.replace(/\n\n+/g,"\n\n")).split(/\n\s*\n/).filter(Boolean);return e="",n.forEach((M=>{e+="<p>"+M.replace(/^\n*|\n*$/g,"")+"</p>\n"})),e=(e=(e=(e=(e=(e=(e=(e=e.replace(/<p>\s*<\/p>/g,"")).replace(/<p>([^<]+)<\/(div|address|form)>/g,"<p>$1</p></$2>")).replace(new RegExp("<p>\\s*(</?"+o+"[^>]*>)\\s*</p>","g"),"$1")).replace(/<p>(<li.+?)<\/p>/g,"$1")).replace(/<p><blockquote([^>]*)>/gi,"<blockquote$1><p>")).replace(/<\/blockquote><\/p>/g,"</p></blockquote>")).replace(new RegExp("<p>\\s*(</?"+o+"[^>]*>)","g"),"$1")).replace(new RegExp("(</?"+o+"[^>]*>)\\s*</p>","g"),"$1"),M&&(e=(e=(e=e.replace(/<(script|style).*?<\/\\1>/g,(e=>e[0].replace(/\n/g,"<WPPreserveNewline />")))).replace(/<br>|<br\/>/g,"<br />")).replace(/(<br \/>)?\s*\n/g,((e,M)=>M?e:"<br />\n")),e=e.replace(/<WPPreserveNewline \/>/g,"\n")),e=(e=(e=e.replace(new RegExp("(</?"+o+"[^>]*>)\\s*<br />","g"),"$1")).replace(/<br \/>(\s*<\/?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)[^>]*>)/g,"$1")).replace(/\n<\/p>$/g,"</p>"),t.forEach((M=>{const[t,o]=M;e=e.replace(t,o)})),-1!==e.indexOf("\x3c!-- wpnl --\x3e")&&(e=e.replace(/\s?<!-- wpnl -->\s?/g,"\n")),e}var Zr=n(381),eO=n.n(Zr);n(5177),n(5341);const MO="WP",tO=/^[+-][0-1][0-9](:?[0-9][0-9])?$/;let oO={l10n:{locale:"en",months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],weekdays:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],weekdaysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],meridiem:{am:"am",pm:"pm",AM:"AM",PM:"PM"},relative:{future:"%s from now",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},startOfWeek:0},formats:{time:"g: i a",date:"F j, Y",datetime:"F j, Y g: i a",datetimeAbbreviated:"M j, Y g: i a"},timezone:{offset:"0",string:"",abbr:""}};const nO={d:"DD",D:"ddd",j:"D",l:"dddd",N:"E",S(e){const M=e.format("D");return e.format("Do").replace(M,"")},w:"d",z:e=>(parseInt(e.format("DDD"),10)-1).toString(),W:"W",F:"MMMM",m:"MM",M:"MMM",n:"M",t:e=>e.daysInMonth(),L:e=>e.isLeapYear()?"1":"0",o:"GGGG",Y:"YYYY",y:"YY",a:"a",A:"A",B(e){const M=eO()(e).utcOffset(60),t=parseInt(M.format("s"),10),o=parseInt(M.format("m"),10),n=parseInt(M.format("H"),10);return parseInt(((t+60*o+3600*n)/86.4).toString(),10)},g:"h",G:"H",h:"hh",H:"HH",i:"mm",s:"ss",u:"SSSSSS",v:"SSS",e:"zz",I:e=>e.isDST()?"1":"0",O:"ZZ",P:"Z",T:"z",Z(e){const M=e.format("Z"),t="-"===M[0]?-1:1,o=M.substring(1).split(":").map((e=>parseInt(e,10)));return t*(60*o[0]+o[1])*60},c:"YYYY-MM-DDTHH:mm:ssZ",r:e=>e.locale("en").format("ddd, DD MMM YYYY HH:mm:ss ZZ"),U:"X"};function bO(e,M=new Date){let t,o;const n=[],b=eO()(M);for(t=0;t<e.length;t++)if(o=e[t],"\\"!==o)if(o in nO){const e=nO[o];"string"!=typeof e?n.push("["+e(b)+"]"):n.push(e)}else n.push("["+o+"]");else t++,n.push("["+e[t]+"]");return b.format(n.join("[]"))}function pO(e,M=new Date,t){if(!0===t)return function(e,M=new Date){const t=eO()(M).utc();return t.locale(oO.l10n.locale),bO(e,t)}(e,M);!1===t&&(t=void 0);const o=function(e,M=""){const t=eO()(e);return M&&!zO(M)?t.tz(M):M&&zO(M)?t.utcOffset(M):oO.timezone.string?t.tz(oO.timezone.string):t.utcOffset(+oO.timezone.offset)}(M,t);return o.locale(oO.l10n.locale),bO(e,o)}function zO(e){return"number"==typeof e||tO.test(e)}!function(){const e=eO().tz.zone(oO.timezone.string);e?eO().tz.add(eO().tz.pack({name:MO,abbrs:e.abbrs,untils:e.untils,offsets:e.offsets})):eO().tz.add(eO().tz.pack({name:MO,abbrs:[MO],untils:[null],offsets:[60*-oO.timezone.offset||0]}))}();const cO=ic((function(e,t){const{children:o,isColumn:n,...b}=cr(e);return(0,M.createElement)(Ga.Provider,{value:{flexItemDisplay:n?"block":void 0}},(0,M.createElement)(Ac,{...b,ref:t},o))}),"Flex"),aO={name:"hdknak",styles:"display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap"},rO="…",OO={auto:"auto",head:"head",middle:"middle",tail:"tail",none:"none"},iO={ellipsis:rO,ellipsizeMode:OO.auto,limit:0,numberOfLines:0};const sO=bM("color:",FM.gray[900],";line-height:",GM.fontLineHeightBase,";margin:0;",""),dO={name:"4zleql",styles:"display:block"},lO=bM("color:",FM.alert.green,";",""),uO=bM("color:",FM.alert.red,";",""),AO=bM("color:",FM.gray[700],";",""),qO=bM("mark{background:",FM.alert.yellow,";border-radius:2px;box-shadow:0 0 0 1px rgba( 0, 0, 0, 0.05 ) inset,0 -1px 0 rgba( 0, 0, 0, 0.1 ) inset;}",""),fO={name:"50zrmy",styles:"text-transform:uppercase"};var mO=n(6928);const WO=cM((e=>{const M={};for(const t in e)M[t.toLowerCase()]=e[t];return M})),_O=13,hO={body:_O,caption:10,footnote:11,largeTitle:28,subheadline:12,title:20};function LO(e=_O){if(e in hO)return LO(hO[e]);if("number"!=typeof e){const M=parseFloat(e);if(Number.isNaN(M))return e;e=M}return`calc((${e} / ${_O}) * ${GM.fontSize})`}[1,2,3,4,5,6].flatMap((e=>[e,e.toString()]));var RO={name:"50zrmy",styles:"text-transform:uppercase"};function gO(t){const{adjustLineHeightForInnerControls:o,align:n,children:b,className:p,color:z,ellipsizeMode:c,isDestructive:a=!1,display:r,highlightEscape:O=!1,highlightCaseSensitive:i=!1,highlightWords:s,highlightSanitize:d,isBlock:l=!1,letterSpacing:u,lineHeight:A,optimizeReadabilityFor:q,size:f,truncate:m=!1,upperCase:W=!1,variant:_,weight:h=GM.fontWeight,...L}=Oc(t,"Text");let R=b;const g=Array.isArray(s),y="caption"===f;if(g){if("string"!=typeof b)throw new TypeError("`children` of `Text` must only be `string` types when `highlightWords` is defined");R=function({activeClassName:e="",activeIndex:t=-1,activeStyle:o,autoEscape:n,caseSensitive:b=!1,children:p,findChunks:z,highlightClassName:c="",highlightStyle:a={},highlightTag:r="mark",sanitize:O,searchWords:i=[],unhighlightClassName:s="",unhighlightStyle:d}){if(!p)return null;if("string"!=typeof p)return p;const l=p,u=(0,mO.findAll)({autoEscape:n,caseSensitive:b,findChunks:z,sanitize:O,searchWords:i,textToHighlight:l}),A=r;let q,f=-1,m="";return u.map(((n,p)=>{const z=l.substr(n.start,n.end-n.start);if(n.highlight){let n;f++,n="object"==typeof c?b?c[z]:(c=WO(c))[z.toLowerCase()]:c;const r=f===+t;m=`${n} ${r?e:""}`,q=!0===r&&null!==o?Object.assign({},a,o):a;const O={children:z,className:m,key:p,style:q};return"string"!=typeof A&&(O.highlightIndex=f),(0,M.createElement)(A,O)}return(0,M.createElement)("span",{children:z,className:s,key:p,style:d})}))}({autoEscape:O,children:b,caseSensitive:i,searchWords:s,sanitize:d})}const v=rc();let N;!0===m&&(N="auto"),!1===m&&(N="none");const k=function(e){const{className:t,children:o,ellipsis:n=rO,ellipsizeMode:b=OO.auto,limit:p=0,numberOfLines:z=0,...c}=Oc(e,"Truncate"),a=rc(),r=function(e="",M){const t={...iO,...M},{ellipsis:o,ellipsizeMode:n,limit:b}=t;if(n===OO.none)return e;let p,z;switch(n){case OO.head:p=0,z=b;break;case OO.middle:p=Math.floor(b/2),z=Math.floor(b/2);break;default:p=b,z=0}const c=n!==OO.auto?function(e,M,t,o){if("string"!=typeof e)return"";const n=e.length,b=~~M,p=~~t,z=Tc(o)?o:rO;return 0===b&&0===p||b>=n||p>=n||b+p>=n?e:0===p?e.slice(0,b)+z:e.slice(0,b)+z+e.slice(n-p)}(e,p,z,o):e;return c}("string"==typeof o?o:"",{ellipsis:n,ellipsizeMode:b,limit:p,numberOfLines:z}),O=b===OO.auto;return{...c,className:(0,M.useMemo)((()=>a(O&&!z&&aO,O&&!!z&&bM("-webkit-box-orient:vertical;-webkit-line-clamp:",z,";display:-webkit-box;overflow:hidden;",""),t)),[t,a,z,O]),children:r}}({...L,className:(0,M.useMemo)((()=>{const M={},t=function(e,M){if(M)return M;if(!e)return;let t=`calc(${GM.controlHeight} + ${zM(2)})`;switch(e){case"large":t=`calc(${GM.controlHeightLarge} + ${zM(2)})`;break;case"small":t=`calc(${GM.controlHeightSmall} + ${zM(2)})`;break;case"xSmall":t=`calc(${GM.controlHeightXSmall} + ${zM(2)})`}return t}(o,A);if(M.Base=bM({color:z,display:r,fontSize:LO(f),fontWeight:h,lineHeight:t,letterSpacing:u,textAlign:n},"",""),M.upperCase=RO,M.optimalTextColor=null,q){const e="dark"==("#000000"===function(e){const M=DM(e);return SM(M).isLight()?"#000000":"#ffffff"}(q)?"dark":"light");M.optimalTextColor=bM(e?{color:FM.gray[900]}:{color:FM.white},"","")}return v(sO,M.Base,M.optimalTextColor,a&&uO,!!g&&qO,l&&dO,y&&AO,_&&e[_],W&&M.upperCase,p)}),[o,n,p,z,v,r,l,y,a,g,u,A,q,f,W,_,h]),children:b,ellipsizeMode:c||N});return!m&&Array.isArray(b)&&(R=M.Children.map(b,(e=>"object"==typeof e&&null!==e&&"props"in e&&dc(e,["Link"])?(0,M.cloneElement)(e,{size:e.props.size||"inherit"}):e))),{...k,children:m?k.children:R}}const yO=ic((function(e,t){const o=gO(e);return(0,M.createElement)(Ac,{as:"span",...o,ref:t})}),"Text"),vO=new RegExp(/-left/g),NO=new RegExp(/-right/g),kO=new RegExp(/Left/g),TO=new RegExp(/Right/g);function BO(e){return"left"===e?"right":"right"===e?"left":vO.test(e)?e.replace(vO,"-right"):NO.test(e)?e.replace(NO,"-left"):kO.test(e)?e.replace(kO,"Right"):TO.test(e)?e.replace(TO,"Left"):e}function wO(e={},M){return()=>M?(0,p.isRTL)()?bM(M,""):bM(e,""):(0,p.isRTL)()?bM(((e={})=>Object.fromEntries(Object.entries(e).map((([e,M])=>[BO(e),M]))))(e),""):bM(e,"")}wO.watch=()=>(0,p.isRTL)();var SO={name:"1739oy8",styles:"z-index:1"};const EO=({isFocused:e})=>e?SO:"",XO=nM(cO,{target:"em5sgkm7"})("box-sizing:border-box;position:relative;border-radius:2px;padding-top:0;",EO,";");var YO={name:"1d3w5wq",styles:"width:100%"};const DO=nM("div",{target:"em5sgkm6"})("align-items:center;box-sizing:border-box;border-radius:inherit;display:flex;flex:1;position:relative;",(({disabled:e})=>bM({backgroundColor:e?FM.ui.backgroundDisabled:FM.ui.background},"",""))," ",(({__unstableInputWidth:e,labelPosition:M})=>e?"side"===M?"":bM("edge"===M?{flex:`0 0 ${e}`}:{width:e},"",""):YO),";"),xO=({inputSize:e,__next40pxDefaultSize:M})=>{const t={default:{height:40,lineHeight:1,minHeight:40,paddingLeft:zM(4),paddingRight:zM(4)},small:{height:24,lineHeight:1,minHeight:24,paddingLeft:zM(2),paddingRight:zM(2)},"__unstable-large":{height:40,lineHeight:1,minHeight:40,paddingLeft:zM(4),paddingRight:zM(4)}};return M||(t.default={height:32,lineHeight:1,minHeight:32,paddingLeft:zM(2),paddingRight:zM(2)}),t[e]||t.default},CO=(nM("input",{target:"em5sgkm5"})("&&&{background-color:transparent;box-sizing:border-box;border:none;box-shadow:none!important;color:",FM.gray[900],";display:block;font-family:inherit;margin:0;outline:none;width:100%;",(({isDragging:e,dragCursor:M})=>{let t,o;return e&&(t=bM("cursor:",M,";user-select:none;&::-webkit-outer-spin-button,&::-webkit-inner-spin-button{-webkit-appearance:none!important;margin:0!important;}","")),e&&M&&(o=bM("&:active{cursor:",M,";}","")),bM(t," ",o,";","")})," ",(({disabled:e})=>e?bM({color:FM.ui.textDisabled},"",""):"")," ",(({inputSize:e})=>{const M={default:"13px",small:"11px","__unstable-large":"13px"},t=M[e]||M.default;return t?bM("font-size:","16px",";@media ( min-width: 600px ){font-size:",t,";}",""):""})," ",(e=>bM(xO(e),"",""))," ",(({paddingInlineStart:e,paddingInlineEnd:M})=>bM({paddingInlineStart:e,paddingInlineEnd:M},"",""))," &::-webkit-input-placeholder{line-height:normal;}}"),nM(yO,{target:"em5sgkm4"})("&&&{",ka,";box-sizing:border-box;display:block;padding-top:0;padding-bottom:0;max-width:100%;z-index:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}")),PO=e=>(0,M.createElement)(CO,{...e,as:"label"}),HO=nM(br,{target:"em5sgkm3"})({name:"1b6uupn",styles:"max-width:calc( 100% - 10px )"}),jO=nM("div",{target:"em5sgkm2"})("&&&{box-sizing:border-box;border-radius:inherit;bottom:0;left:0;margin:0;padding:0;pointer-events:none;position:absolute;right:0;top:0;",(({disabled:e,isFocused:M})=>{let t,o,n,b=M?FM.ui.borderFocus:FM.ui.border;return M&&(t=GM.controlBoxShadowFocus,o="2px solid transparent",n="-2px"),e&&(b=FM.ui.borderDisabled),bM({boxShadow:t,borderColor:b,borderStyle:"solid",borderWidth:1,outline:o,outlineOffset:n},"","")})," ",wO({paddingLeft:2}),";}"),FO=nM("span",{target:"em5sgkm1"})({name:"pvvbxf",styles:"box-sizing:border-box;display:block"}),IO=nM("span",{target:"em5sgkm0"})({name:"jgf79h",styles:"align-items:center;align-self:stretch;box-sizing:border-box;display:flex"}),UO=(0,M.memo)((function({disabled:e=!1,isFocused:t=!1}){return(0,M.createElement)(jO,{"aria-hidden":"true",className:"components-input-control__backdrop",disabled:e,isFocused:t})}));function VO({children:e,hideLabelFromVision:t,htmlFor:o,...n}){return e?t?(0,M.createElement)(qc,{as:"label",htmlFor:o},e):(0,M.createElement)(HO,null,(0,M.createElement)(PO,{htmlFor:o,...n},e)):null}function $O(e,M,t="6.3"){const{__next36pxDefaultSize:o,__next40pxDefaultSize:n,...b}=e;return void 0!==o&&Mo("`__next36pxDefaultSize` prop in "+M,{alternative:"`__next40pxDefaultSize`",since:t}),{...b,__next40pxDefaultSize:null!=n?n:o}}function GO(e){const M={};switch(e){case"top":M.direction="column",M.expanded=!1,M.gap=0;break;case"bottom":M.direction="column-reverse",M.expanded=!1,M.gap=0;break;case"edge":M.justify="space-between"}return M}const JO=(0,M.forwardRef)((function e(t,o){const{__next40pxDefaultSize:n,__unstableInputWidth:b,children:p,className:z,disabled:c=!1,hideLabelFromVision:a=!1,labelPosition:r,id:O,isFocused:i=!1,label:s,prefix:d,size:l="default",suffix:u,...A}=$O(t,"wp.components.InputBase","6.4"),q=function(M){const t=oo(e);return M||`input-base-control-${t}`}(O),f=a||!s,{paddingLeft:m,paddingRight:W}=xO({inputSize:l,__next40pxDefaultSize:n}),_=(0,M.useMemo)((()=>({InputControlPrefixWrapper:{paddingLeft:m},InputControlSuffixWrapper:{paddingRight:W}})),[m,W]);return(0,M.createElement)(XO,{...A,...GO(r),className:z,gap:2,isFocused:i,labelPosition:r,ref:o},(0,M.createElement)(VO,{className:"components-input-control__label",hideLabelFromVision:a,labelPosition:r,htmlFor:q},s),(0,M.createElement)(DO,{__unstableInputWidth:b,className:"components-input-control__container",disabled:c,hideLabel:f,labelPosition:r},(0,M.createElement)(Gz,{value:_},d&&(0,M.createElement)(FO,{className:"components-input-control__prefix"},d),p,u&&(0,M.createElement)(IO,{className:"components-input-control__suffix"},u)),(0,M.createElement)(UO,{disabled:c,isFocused:i})))})),KO=e=>null!=e,QO=ic((function(e,t){const o=function(e){const{className:M,margin:t,marginBottom:o=2,marginLeft:n,marginRight:b,marginTop:p,marginX:z,marginY:c,padding:a,paddingBottom:r,paddingLeft:O,paddingRight:i,paddingTop:s,paddingX:d,paddingY:l,...u}=Oc(e,"Spacer");return{...u,className:rc()(KO(t)&&bM("margin:",zM(t),";",""),KO(c)&&bM("margin-bottom:",zM(c),";margin-top:",zM(c),";",""),KO(z)&&bM("margin-left:",zM(z),";margin-right:",zM(z),";",""),KO(p)&&bM("margin-top:",zM(p),";",""),KO(o)&&bM("margin-bottom:",zM(o),";",""),KO(n)&&wO({marginLeft:zM(n)})(),KO(b)&&wO({marginRight:zM(b)})(),KO(a)&&bM("padding:",zM(a),";",""),KO(l)&&bM("padding-bottom:",zM(l),";padding-top:",zM(l),";",""),KO(d)&&bM("padding-left:",zM(d),";padding-right:",zM(d),";",""),KO(s)&&bM("padding-top:",zM(s),";",""),KO(r)&&bM("padding-bottom:",zM(r),";",""),KO(O)&&wO({paddingLeft:zM(O)})(),KO(i)&&wO({paddingRight:zM(i)})(),M)}}(e);return(0,M.createElement)(Ac,{...o,ref:t})}),"Spacer"),ZO=ic((function(e,t){const o=Oc(e,"InputControlSuffixWrapper");return(0,M.createElement)(QO,{marginBottom:0,...o,ref:t})}),"InputControlSuffixWrapper"),ei=nM("select",{target:"e1mv6sxx2"})("&&&{appearance:none;background:transparent;box-sizing:border-box;border:none;box-shadow:none!important;color:",FM.gray[900],";display:block;font-family:inherit;margin:0;width:100%;max-width:none;cursor:pointer;white-space:nowrap;text-overflow:ellipsis;",(({disabled:e})=>e?bM({color:FM.ui.textDisabled},"",""):""),";",(({selectSize:e="default"})=>{const M={default:"13px",small:"11px","__unstable-large":"13px"}[e];return M?bM("font-size:","16px",";@media ( min-width: 600px ){font-size:",M,";}",""):""}),";",(({__next40pxDefaultSize:e,multiple:M,selectSize:t="default"})=>{if(M)return;const o={default:{height:40,minHeight:40,paddingTop:0,paddingBottom:0},small:{height:24,minHeight:24,paddingTop:0,paddingBottom:0},"__unstable-large":{height:40,minHeight:40,paddingTop:0,paddingBottom:0}};return e||(o.default={height:32,minHeight:32,paddingTop:0,paddingBottom:0}),bM(o[t]||o.default,"","")}),";",(({__next40pxDefaultSize:e,multiple:M,selectSize:t="default"})=>{const o={default:16,small:8,"__unstable-large":16};e||(o.default=8);const n=o[t]||o.default;return wO({paddingLeft:n,paddingRight:n+18,...M?{paddingTop:n,paddingBottom:n}:{}})}),";",(({multiple:e})=>({overflow:e?"auto":"hidden"})),";}"),Mi=nM("div",{target:"e1mv6sxx1"})("margin-inline-end:",zM(-1),";line-height:0;"),ti=nM(ZO,{target:"e1mv6sxx0"})("position:absolute;pointer-events:none;",wO({right:0}),";"),oi=()=>(0,M.createElement)(ti,null,(0,M.createElement)(Mi,null,(0,M.createElement)(Ra,{icon:kc,size:18}))),ni=()=>{},bi=(0,M.forwardRef)((function(e,t){const{className:o,disabled:n=!1,help:b,hideLabelFromVision:p,id:z,label:c,multiple:a=!1,onBlur:r=ni,onChange:O,onFocus:i=ni,options:s=[],size:d="default",value:l,labelPosition:u="top",children:A,prefix:q,suffix:f,__next40pxDefaultSize:m=!1,__nextHasNoMarginBottom:W=!1,..._}=$O(e,"wp.components.SelectControl","6.4"),[h,L]=(0,M.useState)(!1),R=function(e){const M=oo(bi);return e||`inspector-select-control-${M}`}(z),g=b?`${R}__help`:void 0;if(!s?.length&&!A)return null;const y=N()("components-select-control",o);return(0,M.createElement)(xa,{help:b,id:R,__nextHasNoMarginBottom:W},(0,M.createElement)(JO,{className:y,disabled:n,hideLabelFromVision:p,id:R,isFocused:h,label:c,size:d,suffix:f||!a&&(0,M.createElement)(oi,null),prefix:q,labelPosition:u,__next40pxDefaultSize:m},(0,M.createElement)(ei,{..._,__next40pxDefaultSize:m,"aria-describedby":g,className:"components-select-control__input",disabled:n,id:R,multiple:a,onBlur:e=>{r(e),L(!1)},onChange:M=>{if(e.multiple){const t=Array.from(M.target.options).filter((({selected:e})=>e)).map((({value:e})=>e));e.onChange?.(t,{event:M})}else e.onChange?.(M.target.value,{event:M})},onFocus:e=>{i(e),L(!0)},ref:t,selectSize:d,value:l},A||s.map(((e,t)=>{const o=e.id||`${e.label}-${e.value}-${t}`;return(0,M.createElement)("option",{key:o,value:e.value,disabled:e.disabled,hidden:e.hidden},e.label)})))))})),pi=bi;function zi({children:e,summary:t}){return e&&0<M.Children.toArray(e).filter((e=>e)).length?(0,M.createElement)("details",null,(0,M.createElement)("summary",null,t),e):t}function ci({suppressedPlugin:e}){const{settings:t}=(0,M.useContext)(g),{date_format:o}=t;return e&&e.timestamp&&o?(0,M.createElement)("time",{dateTime:bO("c",e.timestamp)},(0,p.sprintf)(/* translators: placeholder is a formatted date. */
(0,p.__)("Since %s.","amp"),pO(o,1e3*e.timestamp))):null}function ai({suppressedPlugin:e}){return(0,M.createElement)("span",null,(0,p.sprintf)(/* translators: placeholder is the name of the user who suppressed the plugin */
(0,p.__)("Done by %s.","amp"),e.user.name||e.user.slug))}function ri({pluginDetails:e,suppressedPlugin:t}){return t.last_version===e.Version?null:e.Version?(0,M.createElement)("span",null,(0,p.sprintf)(/* translators: both placeholders are plugin version numbers. */
(0,p.__)("Now updated to version %1$s since suppressed at %2$s.","amp"),e.Version,t.last_version)):(0,p.__)("Plugin updated since last suppressed.","amp")}function Oi({errors:e}){return 0===e.length?(0,M.createElement)("p",null,(0,p.__)("No validation errors yet detected.","amp")):(0,M.createElement)("details",null,(0,M.createElement)("summary",null,(0,p.sprintf)(/* translators: %s is the error count */
(0,p._n)("%s validation error","%s validation errors",e.length,"amp"),e.length)),(0,M.createElement)("ul",null,e.map((e=>{const t=e.is_reviewed?M.Fragment:"strong";return(0,M.createElement)("li",{key:e.term.term_id,className:N()("error-"+(e.is_removed?"removed":"kept"),"error-"+(e.is_reviewed?"reviewed":"unreviewed"))},(0,M.createElement)(t,null,(0,M.createElement)("a",{href:e.edit_url,target:"_blank",rel:"noreferrer",title:e.tooltip},(0,M.createElement)("span",null,mt(e.title,{code:(0,M.createElement)("code",null)})))))}))))}function ii({pluginKey:e,pluginDetails:t}){const{editedOptions:o,originalOptions:n,updateOptions:b}=(0,M.useContext)(q),{suppressed_plugins:z}=o,{suppressed_plugins:c}=n,a=e in c,r=e in z&&!1!==z[e],O=(0,M.createElement)("div",{className:"error-details"},a?(0,M.createElement)("p",null,(0,M.createElement)(ci,{suppressedPlugin:c[e]})," ",(0,M.createElement)(ai,{suppressedPlugin:c[e]})," ",(0,M.createElement)(ri,{pluginDetails:t,suppressedPlugin:c[e]})):(0,M.createElement)(Oi,{errors:t.validation_errors}));return(0,M.createElement)("tr",{className:N()({"has-border-color":r||t.validation_errors.length,"has-validation-errors":!r&&t.validation_errors.length,"is-suppressed":r})},(0,M.createElement)("th",{className:"column-status",scope:"row"},(0,M.createElement)(pi,{hideLabelFromVision:!0,onChange:()=>{const M={...o.suppressed_plugins};M[e]=!r,b({suppressed_plugins:M})},value:r,label:(0,p.__)("Plugin status:","amp"),options:[{value:!1,label:(0,p.__)("Active","amp")},{value:!0,label:(0,p.__)("Suppressed","amp")}]})),(0,M.createElement)("td",{className:"column-plugin"},(0,M.createElement)(zi,{summary:(0,M.createElement)((()=>(0,M.createElement)("strong",{className:"plugin-name"},t.Name)),null)},[t.Author&&(0,M.createElement)("p",{className:"plugin-author-uri",key:`${e}-details-author`},t.AuthorURI?(0,M.createElement)("a",{href:t.AuthorURI,target:"_blank",rel:"noreferrer"},(0,p.sprintf)(/* translators: placeholder is an author name. */
(0,p.__)("By %s"),t.Author)):/* translators: placeholder is an author name. */(0,p.sprintf)((0,p.__)("By %s"),t.Author)),t.Description&&(0,M.createElement)("div",{key:`${e}-details-description`,className:"plugin-description",dangerouslySetInnerHTML:{__html:Qr(t.Description)}}),t.PluginURI&&(0,M.createElement)("a",{href:t.PluginURI,target:"_blank",rel:"noreferrer",key:`${e}-details-plugin-uri`},(0,p.__)("More details","amp"))].filter((e=>e))),O),(0,M.createElement)("td",{className:"column-details"},O))}function si(){const{editedOptions:e}=(0,M.useContext)(q),{suppressible_plugins:t}=e,o=()=>(0,M.createElement)("p",null,(0,p.__)("When a plugin adds markup that is not allowed in AMP you may let the AMP plugin remove it, or you may suppress the plugin from running on AMP pages. The following list includes all active plugins on your site, with any of those detected to be generating invalid AMP markup appearing first.","amp"));return t&&0!==Object.keys(t).length?(0,M.createElement)(M.Fragment,null,(0,M.createElement)(o,null),(0,M.createElement)("table",{id:"suppressed-plugins-table",className:"wp-list-table widefat fixed"},(0,M.createElement)("thead",null,(0,M.createElement)("tr",null,(0,M.createElement)("th",{className:"column-status",scope:"col"},(0,p.__)("Status","amp")),(0,M.createElement)("th",{className:"column-plugin",scope:"col"},(0,p.__)("Plugin","amp")),(0,M.createElement)("th",{className:"column-details",scope:"col"},(0,p.__)("Details","amp")))),(0,M.createElement)("tbody",null,Object.keys(t).map((e=>(0,M.createElement)(ii,{key:`plugin-row-${e}`,pluginDetails:t[e],pluginKey:e})))))):(0,M.createElement)(M.Fragment,null,(0,M.createElement)(o,null),(0,M.createElement)("p",null,(0,M.createElement)("em",null,(0,p.__)("You have no suppressible plugins active.","amp"))))}const di={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};let li;const ui=new Uint8Array(16);function Ai(){if(!li&&(li="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!li))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return li(ui)}const qi=[];for(let e=0;e<256;++e)qi.push((e+256).toString(16).slice(1));const fi=function(e,M,t){if(di.randomUUID&&!M&&!e)return di.randomUUID();const o=(e=e||{}).random||(e.rng||Ai)();if(o[6]=15&o[6]|64,o[8]=63&o[8]|128,M){t=t||0;for(let e=0;e<16;++e)M[t+e]=o[e];return M}return function(e,M=0){return qi[e[M+0]]+qi[e[M+1]]+qi[e[M+2]]+qi[e[M+3]]+"-"+qi[e[M+4]]+qi[e[M+5]]+"-"+qi[e[M+6]]+qi[e[M+7]]+"-"+qi[e[M+8]]+qi[e[M+9]]+"-"+qi[e[M+10]]+qi[e[M+11]]+qi[e[M+12]]+qi[e[M+13]]+qi[e[M+14]]+qi[e[M+15]]}(o)},mi=(0,M.createElement)(Yz,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,M.createElement)(Xz,{fillRule:"evenodd",clipRule:"evenodd",d:"M12 5.5A2.25 2.25 0 0 0 9.878 7h4.244A2.251 2.251 0 0 0 12 5.5ZM12 4a3.751 3.751 0 0 0-3.675 3H5v1.5h1.27l.818 8.997a2.75 2.75 0 0 0 2.739 2.501h4.347a2.75 2.75 0 0 0 2.738-2.5L17.73 8.5H19V7h-3.325A3.751 3.751 0 0 0 12 4Zm4.224 4.5H7.776l.806 8.861a1.25 1.25 0 0 0 1.245 1.137h4.347a1.25 1.25 0 0 0 1.245-1.137l.805-8.861Z"})),Wi=(0,M.createElement)(Yz,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,M.createElement)(Xz,{d:"M11 12.5V17.5H12.5V12.5H17.5V11H12.5V6H11V11H6V12.5H11Z"})),_i=(0,M.forwardRef)((function({className:e,children:t},o){return(0,M.createElement)("div",{className:N()("components-panel__row",e),ref:o},t)})),hi=mt((0,p.__)("For Google Analytics please consider using <GoogleSiteKitLink>Site Kit by Google</GoogleSiteKitLink>. This plugin configures analytics for both non-AMP and AMP pages alike, avoiding the need to manually provide a separate AMP configuration here. Nevertheless, for documentation on manual configuration see <GoogleAnalyticsDevGuideLink>Adding Analytics to your AMP pages</GoogleAnalyticsDevGuideLink>.","amp"),{GoogleSiteKitLink:(0,M.createElement)("a",{href:"https://wordpress.org/plugins/google-site-kit/",target:"_blank",rel:"noreferrer"}),GoogleAnalyticsDevGuideLink:(0,M.createElement)("a",{href:"https://developers.google.com/analytics/devguides/collection/amp-analytics/",target:"_blank",rel:"noreferrer"})}),Li=mt((0,p.__)("The <Code>googleanalytics</Code> type is obsolete as Google Analytics has switched to use gtag in the transition from Universal Analytics (UA) to GA4. Please use gtag instead. Learn more about <GA4AMP>GA4 in AMP</GA4AMP>.","amp"),{GA4AMP:(0,M.createElement)("a",{href:"https://support.google.com/analytics/topic/13706307?hl=en&ref_topic=9303319&sjid=7478006548081699185-NA",target:"_blank",rel:"noreferrer"}),Code:(0,M.createElement)("code",null)}),Ri={"":{sample:"{}"},adobeanalytics:{notice:mt((0,p.__)("<a>Learn more</a> about Adobe Analytics in AMP."),{a:(0,M.createElement)("a",{href:"https://experienceleague.adobe.com/docs/analytics/implementation/other/amp.html",target:"_blank",rel:"noreferrer"})}),sample:JSON.stringify({requests:{myClick:"{click}&v1={eVar1}"},vars:{host:"metrics.example.com",reportSuites:"reportSuiteID"},triggers:{pageLoad:{on:"visible",request:"pageview"},click:{on:"click",selector:"#test1",request:"myClick",vars:{eVar1:"button clicked"}},linkers:{enabled:!0,destinationDomains:["localhost"]}}},null,"\t")},alexametrics:{notice:mt((0,p.__)("<a>Learn more</a> about Alexa metrics in AMP."),{a:(0,M.createElement)("a",{href:"https://support.alexa.com/hc/en-us/articles/115004090654-Does-Alexa-have-a-Certify-Code-for-AMP",target:"_blank",rel:"noreferrer"})}),sample:JSON.stringify({vars:{atrk_acct:"<YOURACCOUNT>",domain:"<YOURDOMAIN>"}},null,"\t")},baiduanalytics:{notice:mt((0,p.__)("<a>Learn more</a> about Baidu Analytics in AMP."),{a:(0,M.createElement)("a",{href:"https://tongji.baidu.com/web/help/article?id=268&castk=LTE%3D",target:"_blank",rel:"noreferrer"})}),sample:JSON.stringify({vars:{token:"👉 "+(0,p.__)("Provide Token.","amp")+" 👈"},triggers:{pageview:{on:"visible",request:"pageview"}}},null,"\t")},facebookpixel:{notice:mt((0,p.__)("<a>Learn more</a> about Facebook Pixel in AMP."),{a:(0,M.createElement)("a",{href:"https://developers.facebook.com/docs/meta-pixel",target:"_blank",rel:"noreferrer"})}),sample:JSON.stringify({vars:{pixelId:"👉 "+(0,p.__)("Provide Facebook Pixel ID here.","amp")+" 👈"},triggers:{trackPageview:{on:"visible",request:"pageview"}}},null,"\t")},googleanalytics:{notice:hi,warning:Li,sample:JSON.stringify({vars:{account:"👉 "+(0,p.__)("Provide site tracking ID here (e.g. UA-XXXXX-Y)","amp")+" 👈"},triggers:{trackPageview:{on:"visible",request:"pageview"}}},null,"\t")},gtag:{notice:hi,sample:JSON.stringify({vars:{gtag_id:"<GA_MEASUREMENT_ID>",config:{"<GA_MEASUREMENT_ID>":{groups:"default"}}}},null,"\t")},googletagmanager:{notice:hi,sample:"{}"},newrelic:{notice:mt((0,p.__)("<a>Learn more</a> about New Relic in AMP."),{a:(0,M.createElement)("a",{href:"https://docs.newrelic.com/docs/browser/browser-monitoring/installation/install-browser-monitoring-agent/",target:"_blank",rel:"noreferrer"})}),sample:JSON.stringify({vars:{appId:"👉 "+(0,p.__)("Provide App ID here.","amp")+" 👈",licenseKey:"<LICENSE_KEY>"}},null,"\t")},nielsen:{notice:mt((0,p.__)("<a>Learn more</a> about Nielsen in AMP."),{a:(0,M.createElement)("a",{href:"https://engineeringportal.nielsen.com/docs/DCR_Static_Google_AMP_Cloud_API",target:"_blank",rel:"noreferrer"})}),sample:JSON.stringify({vars:{apid:"👉 "+(0,p.__)("Provide App ID here.","amp")+" 👈",apv:"1.0",section:"Entertainment",segA:"Music"}},null,"\t")},metrika:{notice:mt((0,p.__)("<a>Learn more</a> about Yandex Metrika in AMP."),{a:(0,M.createElement)("a",{href:"https://yandex.com/support/metrica/code/install-counter-amp.html",target:"_blank",rel:"noreferrer"})}),sample:JSON.stringify({vars:{counterId:"<COUNTER_ID>",yaParams:"{'key': 'value'}"},requests:{},triggers:{notBounce:{on:"timer",timerSpec:{immediate:!1,interval:15,maxTimerLength:14},request:"notBounce"},someGoalReach:{on:"click",selector:"#test1",request:"reachGoal",vars:{goalId:"superGoalId",yaParams:"{'inner-key': 'inner-value'}"}},halfScroll:{on:"scroll",scrollSpec:{verticalBoundaries:[50]},request:"reachGoal",vars:{goalId:"halfScrollGoal"}}}},null,"\t")}},gi="googleanalytics",yi=[];for(const e of Object.values(o.ANALYTICS_VENDORS_LIST))yi.push((0,M.createElement)("option",{key:e.value,value:e.value},e.label));function vi({entryIndex:e,onChange:t,onDelete:o,type:b="",config:z="{}"}){const c=(0,M.useRef)();(0,M.useEffect)((()=>{if(c?.current)if(z)try{const e=JSON.parse(z);null===e||"object"!=typeof e||Array.isArray(e)?c.current.setCustomValidity((0,p.__)("A JSON object is required, e.g. {…}","amp")):c.current.setCustomValidity("")}catch(e){c.current.setCustomValidity(e.message)}else c.current.setCustomValidity("")}),[z]);const a=Ri[b]?.sample||"{}",r=""!==z.trim()&&!Object.values(Ri).find((({sample:e})=>e===z))||c?.current&&c.current===c.current.ownerDocument.activeElement?z:a;return(0,M.createElement)(_i,{className:"amp-analytics-entry"},(0,M.createElement)("h4",null,(0,p.sprintf)(/* translators: placeholder is the entry index */
(0,p.__)("Analytics Configuration #%s","amp"),e)),(0,M.createElement)("div",{className:"amp-analytics-entry__options",id:`amp-analytics-entry-${String(e)}`},(0,M.createElement)("div",{className:"amp-analytics-entry__text-input"},(0,M.createElement)("label",{className:"input-label",htmlFor:`amp-analytics-entry__text-input-${String(e)}`},(0,p.__)("Type:","amp")),(0,M.createElement)("input",{className:"text-input",id:`amp-analytics-entry__text-input-${String(e)}`,list:`amp-analytics-vendors-${String(e)}`,placeholder:(0,p.__)("Vendor or blank","amp"),value:b,onChange:e=>{t({type:e.target.value})}}),(0,M.createElement)("datalist",{id:`amp-analytics-vendors-${String(e)}`,className:"input-datalist"},yi)),Ri[b]?.notice&&(0,M.createElement)($c,{size:Uc},(0,M.createElement)("span",null,Ri[b].notice)),Ri[b]?.warning&&(0,M.createElement)($c,{size:Uc,type:Hc},(0,M.createElement)("span",null,Ri[b].warning)),(0,M.createElement)(xa,{id:`analytics-textarea-control-${e}`,label:(0,p.__)("JSON Configuration:","amp")},(0,M.createElement)("textarea",{rows:Math.max(10,(r.match(/\n/g)||[]).length+1),cols:"100",className:"amp-analytics-input",id:`analytics-textarea-control-${e}`,onChange:e=>{t({config:e.target.value})},placeholder:"{...}",ref:c,required:!0,value:r}))),(0,M.createElement)(Wc,{isLink:!0,onClick:()=>{(a===z||n.g.confirm((0,p.__)("Are you sure you want to delete this entry?","amp")))&&o()},className:"amp-analytics__delete-button"},(0,M.createElement)(Ra,{icon:mi}),(0,p.__)("Remove entry","amp")))}function Ni(){const{editedOptions:e,originalOptions:t,updateOptions:o}=(0,M.useContext)(q),{analytics:n}=e;return(0,M.createElement)("div",null,(0,M.createElement)("details",{open:!Boolean(Object.keys(t.analytics).length)},(0,M.createElement)("summary",null,(0,p.__)("Learn about analytics for AMP.","amp")),(0,M.createElement)("p",null,mt((0,p.sprintf)(/* translators: 1: amp-analytics, 2: {, 3: }, 4: amp-analytics tag, 5: script tag, 6: googleanalytics. */
(0,p.__)("Please see AMP project's <AnalyticsDocsLink>documentation</AnalyticsDocsLink> for %1$s as well as the <PluginAnalyticsDocsLink>plugin's analytics documentation</PluginAnalyticsDocsLink>. Each analytics configuration supplied below must take the form of a JSON object beginning with a %2$s and ending with a %3$s. Do not include any HTML tags like %4$s or %5$s. For the type field, supply one of the <VendorDocsLink>available analytics vendors</VendorDocsLink> or leave it blank for in-house analytics. For Google Analytics specifically, the type should be %6$s. For Google Tag Manager please consider using <SiteKitLink>Site Kit by Google</SiteKitLink> plugin.","amp"),"<code>amp-analytics</code>","<code>{</code>","<code>}</code>",`<code>${gi}</code>`),{AnalyticsDocsLink:(0,M.createElement)("a",{href:"https://amp.dev/documentation/components/amp-analytics/",target:"_blank",rel:"noreferrer"}),PluginAnalyticsDocsLink:(0,M.createElement)("a",{href:"https://amp-wp.org/documentation/getting-started/analytics/",target:"_blank",rel:"noreferrer"}),VendorDocsLink:(0,M.createElement)("a",{href:"https://amp.dev/documentation/guides-and-tutorials/optimize-and-measure/configure-analytics/analytics-vendors/",target:"_blank",rel:"noreferrer"}),SiteKitLink:(0,M.createElement)("a",{href:"https://wordpress.org/plugins/google-site-kit/",target:"_blank",rel:"noreferrer"}),code:(0,M.createElement)("code",null),AmpAnalyticsTag:(0,M.createElement)("code",null,"<amp-analytics>"),ScriptTag:(0,M.createElement)("code",null,"<script>")}))),Object.entries(n||{}).map((([e,{type:b,config:p}],z)=>(0,M.createElement)(vi,{key:`analytics-entry-${z}`,entryIndex:z+1,isExistingEntry:e in t.analytics,type:b,config:p,onDelete:()=>{const M={...n};delete M[e],o({analytics:M})},onChange:M=>{o({analytics:{...n,[e]:{...n[e],...M}}})}}))),(0,M.createElement)(Wc,{id:"amp-analytics-add-entry",className:"amp-analytics__entry-appender",onClick:()=>{o({analytics:{...n,[fi()]:{type:"",config:"{}"}}})}},(0,M.createElement)(qc,{as:"span"},(0,p.__)("Add entry","amp")),(0,M.createElement)(Ra,{icon:Wi})))}const ki=({pairedUrls:e})=>e?(0,M.createElement)("details",{className:"amp-paired-url-examples"},(0,M.createElement)("summary",null,(0,p.__)("Examples","amp")),e.map((e=>(0,M.createElement)("div",{className:"amp-paired-url-example",key:e},(0,M.createElement)("code",null,e))))):null;function Ti({slug:e,conflicts:t}){return(0,M.createElement)($c,{size:Vc,type:jc},(0,M.createElement)("p",null,(0,p.sprintf)(/* translators: %s is the AMP slug */
(0,p.__)("There are one or more entities that are already using the “%s” URL slug. For this reason, you cannot currently use the path suffix or legacy reader paired URL structures. See below for the source of the slug conflict(s):","amp"),e)),(0,M.createElement)("ul",null,t.posts&&t.posts.map((e=>(0,M.createElement)("li",{key:`post-${e.id}`},e.edit_link?(0,M.createElement)("a",{href:e.edit_link,target:"_blank",rel:"noreferrer"},e.label||e.post_type):e.label||e.post_type,e.title&&": "+e.title," ",(0,M.createElement)("small",null,/* translators: %d is entity ID */
(0,p.sprintf)((0,p.__)("(ID: %d)","amp"),e.id))))),t.terms&&t.terms.map((e=>(0,M.createElement)("li",{key:`term-${e.id}`},e.edit_link?(0,M.createElement)("a",{href:e.edit_link,target:"_blank",rel:"noreferrer"},e.label||e.taxonomy):e.label||e.taxonomy,e.name&&": "+e.name," ",(0,M.createElement)("small",null,/* translators: %d is entity ID */
(0,p.sprintf)((0,p.__)("(ID: %d)","amp"),e.id))))),t.user&&(0,M.createElement)("li",null,t.user.edit_link?(0,M.createElement)("a",{href:t.user.edit_link,target:"_blank",rel:"noreferrer"},(0,p.__)("User","amp")):(0,p.__)("User","amp"),": "+t.user.name," ",(0,M.createElement)("small",null,(0,p.sprintf)(/* translators: %d is entity ID */
(0,p.__)("(ID: %d)","amp"),t.user.id))),t.post_type&&(0,M.createElement)("li",null,(0,p.sprintf)(/* translators: %s is post type label */
(0,p.__)("Post type: %s","amp"),t.post_type.label||"--")," ",(0,M.createElement)("small",null,(0,p.sprintf)(/* translators: %s is entity name */
(0,p.__)("(name: %s)","amp"),t.post_type.name))),t.taxonomy&&(0,M.createElement)("li",null,(0,p.sprintf)(/* translators: %s is taxonomy label */
(0,p.__)("Taxonomy: %s","amp"),t.taxonomy.label||"--")," ",(0,M.createElement)("small",null,(0,p.sprintf)(/* translators: %s is entity name */
(0,p.__)("(name: %s)","amp"),t.taxonomy.name))),t.rewrite&&(0,M.createElement)("li",null,(0,p.__)("Rewrite rules: ","amp"),t.rewrite.map((e=>(0,M.createElement)("code",{key:e},e))).reduce(((e,M)=>[e,", ",M])))))}function Bi({focusedSection:e}){const{editedOptions:t,updateOptions:o}=(0,M.useContext)(q),{theme_support:n}=t||{};if(!n||W===n)return null;const b=t.amp_slug,z="custom"===t.paired_url_structure,c=null===t.endpoint_path_slug_conflicts;return(0,M.createElement)(Cc,{className:"amp-paired-url-structure",heading:(0,M.createElement)("h3",null,(0,p.__)("Paired URL Structure","amp")),hiddenTitle:(0,p.__)("Paired URL Structure","amp"),id:"paired-url-structure",initialOpen:"paired-url-structure"===e},z&&(0,M.createElement)($c,{size:Vc,type:jc},(0,M.createElement)("p",null,(0,p.__)("A custom paired URL structure is being applied so the following options are unavailable.","amp"),t.custom_paired_endpoint_sources.length>0&&" "+function(e){let M=(0,p.__)("The custom structure is being introduced by:","amp")+" ";return M+=e.map((e=>{let M,t=e.name||e.slug;switch(e.type){case"plugin":M=(0,p.__)("a plugin","amp");break;case"theme":M=(0,p.__)("a theme","amp");break;case"mu-plugin":M=(0,p.__)("a must-use plugin","amp");break;default:M=null}return M&&(t+=` (${M})`),t})).join(", ")+".",M}(t.custom_paired_endpoint_sources)),(0,M.createElement)(ki,{pairedUrls:t.paired_url_examples.custom})),(0,M.createElement)("p",null,mt((0,p.__)("When using the Transitional or Reader template modes, your site is in a “Paired AMP” configuration. Your site's canonical URLs are non-AMP, and the separate AMP versions of your pages have AMP-specific URLs. The structure of a paired AMP URL is not important, whether using a query parameter or path suffix. The use of a query parameter is the most compatible across various sites and it has the benefit of not resulting in a 404 if the AMP plugin is deactivated. <em>Note: Changing the paired URL structure can cause AMP pages to temporarily disappear from search results until your site is re-indexed.</em> If you're migrating from another AMP plugin with a different paired URL structure, then you may want to change this setting. Otherwise we recommend leaving it as is. <a>Learn more</a>","amp"),{em:(0,M.createElement)("em",null),a:(0,M.createElement)("a",{href:"https://amp-wp.org/?p=10004",target:"_blank",rel:"noreferrer"})})),!c&&(0,M.createElement)(Ti,{slug:b,conflicts:t.endpoint_path_slug_conflicts}),(0,M.createElement)("ul",null,(0,M.createElement)("li",null,(0,M.createElement)("input",{id:"paired_url_structure_query_var",type:"radio",name:"paired_url_structure",checked:"query_var"===t.paired_url_structure,onChange:()=>{o({paired_url_structure:"query_var"})},disabled:z}),(0,M.createElement)("label",{htmlFor:"paired_url_structure_query_var"},(0,p.__)("Query parameter","amp")+": ",(0,M.createElement)("code",null,`?${b}=1`)," ",(0,M.createElement)("em",null,(0,p.__)("(default)","amp"))),(0,M.createElement)(ki,{pairedUrls:t.paired_url_examples.query_var})),(0,M.createElement)("li",null,(0,M.createElement)("input",{id:"paired_url_structure_path_suffix",type:"radio",name:"paired_url_structure",checked:"path_suffix"===t.paired_url_structure,onChange:()=>{o({paired_url_structure:"path_suffix"})},disabled:z||!c||!t.rewrite_using_permalinks}),(0,M.createElement)("label",{htmlFor:"paired_url_structure_path_suffix"},(0,p.__)("Path suffix","amp")+": ",(0,M.createElement)("code",null,`/${b}/`),!c&&(0,M.createElement)("em",null," "+(0,p.__)("(unavailable due to slug conflict per above)","amp")),!t.rewrite_using_permalinks&&(0,M.createElement)("em",null," "+(0,p.__)("(unavailable due to not using permalinks)","amp"))),(0,M.createElement)(ki,{pairedUrls:t.paired_url_examples.path_suffix})),(0,M.createElement)("li",null,(0,M.createElement)("input",{id:"paired_url_structure_legacy_transitional",type:"radio",name:"paired_url_structure",checked:"legacy_transitional"===t.paired_url_structure,onChange:()=>{o({paired_url_structure:"legacy_transitional"})},disabled:z}),(0,M.createElement)("label",{htmlFor:"paired_url_structure_legacy_transitional"},(0,p.__)("Legacy transitional","amp")+": ",(0,M.createElement)("code",null,`?${b}`)),(0,M.createElement)(ki,{pairedUrls:t.paired_url_examples.legacy_transitional})),(0,M.createElement)("li",null,(0,M.createElement)("input",{id:"paired_url_structure_legacy_reader",type:"radio",name:"paired_url_structure",checked:"legacy_reader"===t.paired_url_structure,onChange:()=>{o({paired_url_structure:"legacy_reader"})},disabled:z||!c||!t.rewrite_using_permalinks}),(0,M.createElement)("label",{htmlFor:"paired_url_structure_legacy_reader"},(0,p.__)("Legacy reader","amp")+": ",(0,M.createElement)("code",null,`/${b}/`)," & ",(0,M.createElement)("code",null,`?${b}`),!c&&(0,M.createElement)("em",null," "+(0,p.__)("(unavailable due to slug conflict per above)","amp")),!t.rewrite_using_permalinks&&(0,M.createElement)("em",null," "+(0,p.__)("(unavailable due to not using permalinks)","amp"))),(0,M.createElement)(ki,{pairedUrls:t.paired_url_examples.legacy_reader}))))}function wi(){const{editedOptions:e,updateOptions:t}=(0,M.useContext)(q),{mobile_redirect:o}=e;return(0,M.createElement)(sr,{checked:!0===o,title:(0,p.__)("Redirect mobile visitors to AMP","amp"),onChange:()=>{t({mobile_redirect:!o})}})}function Si(){const{editedOptions:e}=(0,M.useContext)(q),{theme_support:t}=e||{};return t&&W!==t?(0,M.createElement)("section",{className:"mobile-redirection"},(0,M.createElement)(wi,null)):null}function Ei(){const{developerToolsOption:e,fetchingUser:t,setDeveloperToolsOption:o}=(0,M.useContext)(bt);return t?(0,M.createElement)(tt,null):(0,M.createElement)(sr,{checked:!0===e,title:(0,p.__)("Enable Developer Tools","amp"),onChange:()=>{o(!e)}})}function Xi(){return(0,M.createElement)("section",{className:"developer-tools"},(0,M.createElement)(Ei,null),(0,M.createElement)("p",null,(0,p.__)("Enable AMP developer tools to surface validation errors when editing posts and viewing the site.","amp")),(0,M.createElement)("p",null,(0,p.__)("This is a per-user setting. It presumes you have some experience coding with HTML, CSS, JS, and PHP. Once enabled you will have access to Validated URLs and Error Index in the admin menu, the Validate URL item in the admin bar, and the AMP Validation sidebar in the editor.","amp")))}const Yi=59,Di=44,xi=2;function Ci({width:e=Yi,...t}){const o=`clip-icon-landscape-hills-cogs-alt-${oo(Ci)}`,n=xi*(Yi/e);return(0,M.createElement)("svg",{viewBox:`0 0 ${Yi} ${Di}`,width:e,fill:"none",xmlns:"http://www.w3.org/2000/svg",...t},(0,M.createElement)("path",{d:"M22.338 42.001s10.762-10.545 33.9-5.458",stroke:"#2459E7",strokeWidth:n,strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M29.379 37.814S15.763 30.246 3.481 34.93m44.413 4.28c-2.79-1.395-5.334-.558-5.241-.34",stroke:"#2459E7",strokeWidth:n,strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("mask",{id:o,maskUnits:"userSpaceOnUse",x:"5.396",y:"28.18",width:"12",height:"8",fill:"#000"},(0,M.createElement)("path",{fill:"#fff",d:"M5.396 28.18h12v8h-12z"}),(0,M.createElement)("path",{d:"M8.072 33.629c-.528-.186-.838-.869-.59-1.396.218-.527.93-.775 1.427-.496-.062-.372.186-.745.527-.869a.92.92 0 0 1 .993.28c.217-.62.9-1.024 1.582-.962.496.062.93.372 1.147.837.28-.279.806-.279 1.086.031.279.28.248.807-.062 1.086.372-.093.775.062.961.372.186.31.217.745 0 1.055"})),(0,M.createElement)("path",{d:"M7.406 35.515a2 2 0 1 0 1.331-3.772l-1.331 3.772Zm.076-3.282 1.81.852.04-.09-1.85-.762Zm1.427-.496-.98 1.743a2 2 0 0 0 2.953-2.072l-1.973.329Zm1.52-.59L8.85 32.375a2 2 0 0 0 3.466-.567l-1.887-.66Zm1.582-.961.248-1.985a1.903 1.903 0 0 0-.067-.007l-.181 1.992Zm1.147.837-1.812.846a2 2 0 0 0 3.226.569l-1.414-1.415Zm1.086.031-1.487 1.338.072.077 1.415-1.415Zm-.062 1.086-1.338-1.487a2 2 0 0 0 1.823 3.427l-.485-1.94Zm-.677.28a2 2 0 1 0 3.277 2.294l-3.277-2.294Zm-4.768-.677c.34.12.512.352.585.521.076.176.13.48-.03.82l-3.62-1.703a3.004 3.004 0 0 0-.021 2.472c.298.689.888 1.356 1.755 1.662l1.331-3.772Zm.595 1.252a.997.997 0 0 1-.584.576 1 1 0 0 1-.82-.091l1.962-3.486c-.83-.467-1.743-.449-2.456-.2-.713.247-1.439.799-1.801 1.677l3.699 1.524Zm1.55-1.587a1.24 1.24 0 0 1-.165.861c-.123.198-.32.378-.597.479l-1.367-3.76c-1.147.418-2.054 1.653-1.817 3.078l3.946-.658Zm-.762 1.34c-.277.1-.518.08-.685.033a1.136 1.136 0 0 1-.585-.406l3.158-2.455c-.76-.978-2.114-1.346-3.255-.931l1.367 3.759Zm2.197-.94a.587.587 0 0 1-.24.316.399.399 0 0 1-.248.054l.363-3.984c-1.495-.136-3.099.715-3.65 2.293l3.774 1.321Zm-.555.362a.536.536 0 0 1-.416-.3l3.624-1.692a3.464 3.464 0 0 0-2.71-1.978l-.497 3.97Zm2.81.268a1.254 1.254 0 0 1-.91.38 1.256 1.256 0 0 1-.905-.426l2.973-2.676c-1.064-1.182-2.916-1.177-3.986-.107l2.828 2.829Zm-1.742.03a1.297 1.297 0 0 1-.393-.986c.015-.258.123-.574.407-.829l2.676 2.974a2.793 2.793 0 0 0 .91-1.915 2.704 2.704 0 0 0-.772-2.072l-2.829 2.829Zm1.837 1.612c-.23.058-.457.037-.656-.04a1.182 1.182 0 0 1-.583-.499l3.43-2.058c-.68-1.132-2.014-1.57-3.161-1.283l.97 3.88Zm-1.239-.539a.919.919 0 0 1-.133-.46 1.12 1.12 0 0 1 .21-.661l3.277 2.294c.767-1.097.573-2.403.076-3.23l-3.43 2.057Z",fill:"#2459E7",mask:`url(#${o})`}),(0,M.createElement)("path",{d:"m3.481 19.719.652 1.83 1.83.651-1.83.651-.652 1.83-.651-1.83L1 22.2l1.83-.651.651-1.83Z",fill:"#fff",stroke:"#2459E7",strokeWidth:n,strokeMiterlimit:"10",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"m37.508 22.858.374 2.918 2.07.723 1.468 2.185-.419 2.13 2.864 1.512 1.576-1.587 2.614-.434 1.951 1.332 2.185-1.468-.554-2.005 1.511-2.864 2.065-.858-.434-2.614-2.07-.723-1.772-2.245.419-2.13-2.56-1.452-1.636 1.891-2.554.13-2.255-1.391-1.82 1.222.493 2.31-1.51 2.864-2.006.554Z",stroke:"#2459E7",strokeWidth:n,strokeMiterlimit:"10"}),(0,M.createElement)("path",{d:"M45.733 26.845a3.102 3.102 0 1 0 1.196-6.087 3.102 3.102 0 0 0-1.196 6.087ZM35.74 14.167l3.108 1.876-.718 3.652-3.587.559-.907 1.402.863 3.646-3.277 2.201-3.049-2.18-1.641.31-1.511 2.864-3.957-.778-.314-3.223-1.647-1.272-3.038.984-2.2-3.278 1.815-2.804-.31-1.641-3.108-1.875.718-3.652 3.587-.56.968-1.706-.924-3.342 3.218-1.896 3.048 2.18 1.701-.615 1.512-2.863 3.956.777.619 3.283 1.342 1.212 3.342-.924 2.26 2.973-2.12 2.745.25 1.945Z",stroke:"#2459E7",strokeWidth:n,strokeMiterlimit:"10"}),(0,M.createElement)("path",{d:"M24.957 18.37a3.102 3.102 0 1 0 1.197-6.086 3.102 3.102 0 0 0-1.197 6.086Z",stroke:"#2459E7",strokeWidth:n,strokeMiterlimit:"10"}),(0,M.createElement)("path",{d:"M24.365 21.38a6.172 6.172 0 1 0 2.38-12.112 6.172 6.172 0 0 0-2.38 12.113Z",stroke:"#2459E7",strokeWidth:n,strokeMiterlimit:"10"}))}function Pi({value:e}){const t={transform:`translateX(${Math.max(e,3)-100}%)`,transitionDuration:(e<100?800:200)+"ms"};return(0,M.createElement)("div",{className:"progress-bar",role:"progressbar","aria-valuenow":e,"aria-valuemin":"0","aria-valuemax":"100"},(0,M.createElement)("div",{className:"progress-bar__track"},(0,M.createElement)("div",{className:"progress-bar__indicator",style:t})))}function Hi({callToAction:e,children:t,className:o,count:n,icon:b,title:p}){return(0,M.createElement)(Yc,{className:N()("site-scan-results",o)},(0,M.createElement)("div",{className:"site-scan-results__header"},b,(0,M.createElement)("p",{className:"site-scan-results__heading","data-badge-content":n},p,(0,M.createElement)(qc,{as:"span"},`(${n})`))),(0,M.createElement)("div",{className:"site-scan-results__content"},t,e&&(0,M.createElement)("p",{className:"site-scan-results__cta"},e)))}const ji=(0,M.createElement)(Yz,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,M.createElement)(Xz,{d:"M19.5 4.5h-7V6h4.44l-5.97 5.97 1.06 1.06L18 7.06v4.44h1.5v-7Zm-13 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-3H17v3a.5.5 0 0 1-.5.5h-10a.5.5 0 0 1-.5-.5v-10a.5.5 0 0 1 .5-.5h3V5.5h-3Z"})),Fi=nM(Ra,{target:"esh4a730"})({name:"rvs7bx",styles:"width:1em;height:1em;margin:0;vertical-align:middle;fill:currentColor"}),Ii=(0,M.forwardRef)((function(e,t){const{href:o,children:n,className:b,rel:z="",...c}=e,a=[...new Set([...z.split(" "),"external","noreferrer","noopener"].filter(Boolean))].join(" "),r=N()("components-external-link",b),O=!!o?.startsWith("#");return(0,M.createElement)("a",{...c,className:r,href:o,onClick:M=>{O&&M.preventDefault(),e.onClick&&e.onClick(M)},target:"_blank",rel:a,ref:t},n,(0,M.createElement)(qc,{as:"span"},/* translators: accessibility text */
(0,p.__)("(opens in a new tab)")),(0,M.createElement)(Fi,{icon:ji,className:"components-external-link__icon"}))})),Ui=58,Vi=38,$i=2;function Gi({width:e=Ui,...t}){const o=$i*(Ui/e);return(0,M.createElement)("svg",{viewBox:`0 0 ${Ui} ${Vi}`,width:e,fill:"none",xmlns:"http://www.w3.org/2000/svg",...t},(0,M.createElement)("path",{d:"m5.764 8.012-.031 7.59A1.89 1.89 0 0 0 7.615 17.5l24.96.105a1.89 1.89 0 0 0 1.897-1.882l.032-7.59a1.89 1.89 0 0 0-1.882-1.898L7.662 6.13a1.89 1.89 0 0 0-1.898 1.882ZM20.22 29.17a1.9 1.9 0 0 1-1.88-1.9v-3.13a1.9 1.9 0 0 1 1.9-1.88l12.38.07a1.91 1.91 0 0 1 1.88 1.9v3.13a1.869 1.869 0 0 1-1.89 1.87l-12.39-.06ZM7.61 29.18a1.92 1.92 0 0 1-1.88-1.91v-3.13a1.87 1.87 0 0 1 1.89-1.86h3.57a1.92 1.92 0 0 1 1.89 1.91v3.13a1.862 1.862 0 0 1-1.89 1.86H7.61Z",stroke:"#005AF0",strokeWidth:"2.08",strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M11.71 12.77a1.69 1.69 0 1 0 0-3.38 1.69 1.69 0 0 0 0 3.38Z",fill:"#005AF0"}),(0,M.createElement)("path",{d:"M13.65 17.21 25.39 9.9l6.41 7.69",stroke:"#005AF0",strokeWidth:o,strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"M2.4 1h35.43a1.4 1.4 0 0 1 1.4 1.4v32.07H1V2.4A1.4 1.4 0 0 1 2.4 1v0Z",stroke:"#005AF0",strokeWidth:o,strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"m48.87 29.137-14-14-7.283 7.283 14 14 7.283-7.283Z",fill:"#fff",stroke:"#005AF0",strokeWidth:o,strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"m41.797 12.362 9.836 9.836a2.94 2.94 0 0 1 0 4.158l-2.78 2.779L34.86 15.14l2.779-2.779a2.94 2.94 0 0 1 4.158 0ZM55.774 8.23a4.17 4.17 0 0 1 0 5.897l-6.102 6.103-5.897-5.898 6.102-6.102a4.17 4.17 0 0 1 5.897 0Z",fill:"#fff",stroke:"#005AF0",strokeWidth:o,strokeLinecap:"round",strokeLinejoin:"round"}),(0,M.createElement)("path",{d:"m32.55 26.42 6.55-6.56M37.59 31.46l6.55-6.56",stroke:"#005AF0",strokeWidth:o,strokeLinecap:"round",strokeLinejoin:"round"}))}const Ji=e=>n.g?.location?.host!==new URL(e).host;function Ki(e,M){return e.filter((e=>e?.name&&M===Zc(e.name)))}function Qi({slug:e}){const[t,o]=(0,M.useState)(!1),{scannableUrls:n}=(0,M.useContext)(ea),b=(0,M.useMemo)((()=>n.map((M=>{const t=function(e,M){const t=[];for(const o of e){const e=Ki(o.sources||[],M);if(e&&0<e.length){const M={...o,sources:e};t.push(M)}}return t}(M.validation_errors||[],e);return t?.length>0?{...M,validation_errors:t}:null})).filter(Boolean)),[n,e]),z=JSON.stringify(b,null,4);return(0,M.createElement)("div",{className:"site-scan-results__detail-body"},(0,M.createElement)("ul",{className:"site-scan-results__urls-list"},b.map((({url:e})=>(0,M.createElement)("li",{key:e},(0,M.createElement)(Ii,{href:e},e))))),(0,M.createElement)("p",{className:"site-scan-results__source-intro"},(0,p.__)("Raw validation data which you may want to share with the author so they can fix AMP compatibility:","amp")),(0,M.createElement)("pre",{className:"site-scan-results__source-detail"},z),(0,M.createElement)(hc,{isSmall:!0,text:z,onCopy:()=>o(!0),onFinishCopy:()=>o(!1)},t?(0,p.__)("Copied!","amp"):(0,p.__)("Copy Validation Data","amp")))}function Zi({author:e,name:t,slug:o,status:n,version:b,inactiveSourceNotice:z,uninstalledSourceNotice:c}){const[a,r]=(0,M.useState)(!1);return(0,M.createElement)("details",{open:!1,onKeyDown:({key:e})=>{[" ","return"].includes(e)&&r(!0)},onClick:()=>{r(!0)}},(0,M.createElement)("summary",null,(0,M.createElement)("span",{className:"site-scan-results__summary-wrapper"},t&&(0,M.createElement)("span",{className:N()("site-scan-results__source-name",{"site-scan-results__source-name--inactive":["inactive","uninstalled"].includes(n)})},t),!t&&o&&(0,M.createElement)("code",{className:"site-scan-results__source-slug"},o),"active"===n?(0,M.createElement)(M.Fragment,null,e&&(0,M.createElement)("span",{className:"site-scan-results__source-author"},(0,p.sprintf)(/* translators: %s is an author name. */
(0,p.__)("by %s","amp"),e)),b&&(0,M.createElement)("span",{className:"site-scan-results__source-version"},(0,p.sprintf)(/* translators: %s is a version number. */
(0,p.__)("Version %s","amp"),b))):(0,M.createElement)($c,{className:"site-scan-results__source-notice",type:Fc,size:Uc},"inactive"===n?z:null,"uninstalled"===n?c:null))),a&&(0,M.createElement)(Qi,{slug:o}))}function es({sources:e,inactiveSourceNotice:t,uninstalledSourceNotice:o}){return 0===e.length?(0,M.createElement)(tt,null):(0,M.createElement)("ul",{className:"site-scan-results__sources"},e.map((e=>(0,M.createElement)("li",{key:e.slug,className:"site-scan-results__source"},(0,M.createElement)(Zi,{...e,inactiveSourceNotice:t,uninstalledSourceNotice:o})))))}function Ms({className:e,showHelpText:t=!1,slugs:n=[],...b}){const z=function(){const{fetchingThemes:e,themes:t}=(0,M.useContext)(Kc),[o,n]=(0,M.useState)({});return(0,M.useEffect)((()=>{e||0===t.length||n((()=>t.reduce(((e,M)=>({...e,[M.stylesheet]:Object.keys(M).reduce(((e,o)=>{var n;const b={...e,slug:M.stylesheet,[o]:null!==(n=M[o]?.raw)&&void 0!==n?n:M[o]},p=t.find((e=>e.template===M.stylesheet&&e.template!==e.stylesheet))?.stylesheet;return p&&(b.child=p),M.template&&M.template!==M.stylesheet&&(b.parent=M.template),b}),{})})),{})))}),[e,t]),o}(),c=(0,M.useMemo)((()=>n?.map((e=>{const M=z?.[e];if(!M)return{slug:e,status:"uninstalled"};const t="active"===z?.[M?.child]?.status;return{...M,status:t?"active":M.status}}))),[n,z]);return(0,M.createElement)(Hi,{title:(0,p.__)("Themes with AMP incompatibility","amp"),icon:(0,M.createElement)(Gi,null),count:n.length,className:N()("site-scan-results--themes",e),...b},t&&(0,M.createElement)("p",null,mt((0,p.__)("Because of theme issue(s) we’ve found, you’ll want to consider a different <a>template mode</a> below.","amp"),{a:(0,M.createElement)("a",{href:"#template-modes"})}),o.AMP_COMPATIBLE_THEMES_URL?mt(` ${(0,p.__)("You may also want to browse alternative <a>AMP compatible themes</a>.","amp")}`,{a:Ji(o.AMP_COMPATIBLE_THEMES_URL)?(0,M.createElement)(Ii,{href:o.AMP_COMPATIBLE_THEMES_URL}):(0,M.createElement)("a",{href:o.AMP_COMPATIBLE_THEMES_URL})}):""),(0,M.createElement)(es,{sources:c,inactiveSourceNotice:(0,p.__)("This theme has been deactivated since last site scan."),uninstalledSourceNotice:(0,p.__)("This theme has been uninstalled or its metadata is unavailable.")}))}const ts=58,os=40,ns=2;function bs({width:e=ts,...t}){const o=ns*(ts/e);return(0,M.createElement)("svg",{viewBox:`0 0 ${ts} ${os}`,width:e,fill:"none",xmlns:"http://www.w3.org/2000/svg",...t},(0,M.createElement)("g",{stroke:"#005AF0",strokeWidth:o,strokeLinecap:"round",strokeLinejoin:"round"},(0,M.createElement)("path",{d:"M6.2 31.05V5.37A4.37 4.37 0 0 1 10.57 1H47.2a4.37 4.37 0 0 1 4.37 4.37v26.47M37.25 32.14v1.32H20.76v-1.32H1v3.14a3.37 3.37 0 0 0 3.36 3.37h49.28A3.36 3.36 0 0 0 57 35.28v-3.14H37.25Z"}),(0,M.createElement)("path",{d:"M21.2 11.53h2.15v12.35H21.2a6.178 6.178 0 0 1-5.728-8.54 6.183 6.183 0 0 1 5.728-3.81v0ZM36.99 23.89h-2.15V11.54h2.15a6.181 6.181 0 0 1 6.18 6.18 6.18 6.18 0 0 1-6.18 6.17v0ZM29.15 13.4h-5.79v2.83h5.79V13.4ZM29.15 19.19h-5.79v2.83h5.79v-2.83Z"}),(0,M.createElement)("path",{d:"M42.76 15.62h5.39v4.18h-5.39M15 19.8H9.61v-4.18H15"})))}function ps({className:e,showHelpText:t=!1,slugs:n=[],...b}){const z=function(){const{fetchingPlugins:e,plugins:t}=(0,M.useContext)(Gc),[o,n]=(0,M.useState)({});return(0,M.useEffect)((()=>{e||0===t.length||n(t.reduce(((e,M)=>{const t=Zc(M.plugin);return{...e,[t]:Object.keys(M).reduce(((e,o)=>{var n;return{...e,slug:t,[o]:null!==(n=M[o]?.raw)&&void 0!==n?n:M[o]}}),{})}}),{}))}),[e,t]),o}(),c=(0,M.useMemo)((()=>n?.map((e=>{var M;return null!==(M=z?.[e])&&void 0!==M?M:{slug:e,status:"uninstalled"}}))||[]),[z,n]);return(0,M.createElement)(Hi,{title:(0,p.__)("Plugins with AMP incompatibility","amp"),icon:(0,M.createElement)(bs,null),count:n.length,className:N()("site-scan-results--plugins",e),...b},t&&(0,M.createElement)("p",null,mt((0,p.__)("Because of plugin issue(s) detected, you may want to <a>review and suppress plugins</a>.","amp"),{a:(0,M.createElement)("a",{href:"#plugin-suppression"})}),o.AMP_COMPATIBLE_PLUGINS_URL?mt(` ${(0,p.__)("You may also want to browse alternative <a>AMP compatible plugins</a>.","amp")}`,{a:Ji(o.AMP_COMPATIBLE_PLUGINS_URL)?(0,M.createElement)(Ii,{href:o.AMP_COMPATIBLE_PLUGINS_URL}):(0,M.createElement)("a",{href:o.AMP_COMPATIBLE_PLUGINS_URL})}):""),(0,M.createElement)(es,{sources:c,inactiveSourceNotice:(0,p.__)("This plugin has been deactivated since last site scan."),uninstalledSourceNotice:(0,p.__)("This plugin has been uninstalled or its metadata is unavailable.")}))}function zs({onSiteScan:e}){const{cancelSiteScan:t,fetchScannableUrls:n,hasSiteScanResults:b,isBusy:z,isCancelled:c,isCompleted:a,isFailed:r,isFetchingScannableUrls:d,isReady:l,isSiteScannable:u,pluginsWithAmpIncompatibility:A,previewPermalink:q,stale:f,startSiteScan:m,themesWithAmpIncompatibility:W}=(0,M.useContext)(ea),_=W.length>0||A.length>0;(0,M.useEffect)((()=>(n(),t)),[t,n]),(0,M.useEffect)((()=>{const e=function(e){const M=function(e){const M=/^[^\/\s:]+:(?:\/\/)?[^\/\s#?]+[\/]([^\s#?]+)[#?]{0,1}\S*$/.exec(e);if(M)return M[1]}(e),t=O(e);let o="/";return M&&(o+=M),t&&(o+=`?${t}`),o}(document.location.href);var M,t;l&&(M=e,t=o.AMP_SCAN_IF_STALE,void 0!==function(e,M){return i(e)[M]}(M,t))&&(f&&m(),window.history.replaceState({},"",function(e,...M){const t=e.indexOf("?");if(-1===t)return e;const o=i(e),n=e.substr(0,t);M.forEach((e=>delete o[e]));const b=s(o);return b?n+"?"+b:n}(e,o.AMP_SCAN_IF_STALE)))}),[l,f,m]);const h=function(e,{delay:t=500}={}){const[o,n]=(0,M.useState)(e),b=(0,M.useRef)(!1);return(0,M.useEffect)((()=>()=>{b.current=!0}),[]),(0,M.useEffect)((()=>{let M=()=>{};return e&&!o?M=setTimeout((()=>{b.current||n(!0)}),t):!e&&o&&n(!1),()=>{clearTimeout(M)}}),[e,o,t]),o}(a),L=l||h,[R,g]=(0,M.useState)(!1);(0,M.useEffect)((()=>{!R&&z&&g(!0)}),[R,z]);const y=(0,M.useCallback)((()=>d?(0,M.createElement)(tt,null):r?(0,M.createElement)($c,{type:Pc,size:Vc},(0,M.createElement)("p",null,(0,p.__)("Site scan failed. Try again.","amp"))):c?(0,M.createElement)($c,{type:Pc,size:Vc},(0,M.createElement)("p",null,(0,p.__)("Site scan has been cancelled. Try again.","amp"))):u?L?(0,M.createElement)(rs,null):(0,M.createElement)(as,null):(0,M.createElement)($c,{type:Pc,size:Vc},(0,M.createElement)("p",null,(0,p.__)("Your site cannot be scanned. There are no AMP-enabled URLs available.","amp")))),[c,r,d,u,L]);return(0,M.createElement)(cs,{initialOpen:!b||f||!(l&&!_&&!R),labelExtra:f&&(l||h)?(0,M.createElement)($c,{type:Fc,size:Uc},(0,p.__)("Stale results","amp")):null,footerContent:u&&(L||r||c)&&(0,M.createElement)(M.Fragment,null,(0,M.createElement)(Wc,{onClick:()=>{"function"==typeof e&&e(),m()},isPrimary:!0},b?(0,p.__)("Rescan Site","amp"):(0,p.__)("Scan Site","amp")),b&&(0,M.createElement)(Wc,{href:q,isLink:!0},(0,p.__)("Browse Site","amp")))},y())}function cs({children:e,footerContent:t,...o}){return(0,M.createElement)(Cc,{heading:(0,M.createElement)(M.Fragment,null,(0,M.createElement)(Ci,null),(0,p.__)("Site Scan","amp")),hiddenTitle:(0,p.__)("Site Scan","amp"),id:"site-scan",...o},(0,M.createElement)("div",{className:"settings-site-scan"},e,t&&(0,M.createElement)("div",{className:"settings-site-scan__footer"},t)))}function as(){const{isCompleted:e,scannableUrls:t,scannedUrlsMaxIndex:o}=(0,M.useContext)(ea);return(0,M.createElement)(M.Fragment,null,(0,M.createElement)("p",null,(0,p.__)("Site scan is checking if there are AMP compatibility issues with your active theme and plugins. We’ll then recommend how to use the AMP plugin.","amp")),(0,M.createElement)(Pi,{value:e?100:o/t.length*100}),(0,M.createElement)("p",{className:"settings-site-scan__status"},e?(0,p.__)("Scan complete","amp"):(0,p.sprintf)(
// translators: 1: currently scanned URL index; 2: scannable URLs count; 3: scanned page type.
(0,p.__)("Scanning %1$d/%2$d URLs: Checking %3$s…","amp"),o+1,t.length,t[o]?.label)))}function rs(){const{hasSiteScanResults:e,isReady:t,pluginsWithAmpIncompatibility:n,stale:b,themesWithAmpIncompatibility:z}=(0,M.useContext)(ea),c=z.length>0||n.length>0,{developerToolsOption:a}=(0,M.useContext)(bt),r=(0,M.useMemo)((()=>!0===a),[a]);return t&&!e?(0,M.createElement)($c,{type:jc,size:Vc},(0,M.createElement)("p",null,(0,p.__)("The site has not been scanned yet. Scan your site to ensure everything is working properly.","amp"))):c||b?(0,M.createElement)(M.Fragment,null,b&&(0,M.createElement)($c,{type:jc,size:Vc},(0,M.createElement)("p",null,(0,p.__)("Stale results. Rescan your site to ensure everything is working properly.","amp"))),!b&&t&&(0,M.createElement)($c,{type:jc,size:Vc},(0,M.createElement)("p",null,(0,p.__)("No changes since your last scan.","amp"))),z.length>0&&(0,M.createElement)(Ms,{slugs:z.map((({slug:e})=>e)),showHelpText:!0,callToAction:r&&!b?(0,M.createElement)("a",{href:o.VALIDATED_URLS_LINK},(0,p.__)("Review Validated URLs","amp")):null}),n.length>0&&(0,M.createElement)(ps,{slugs:n.map((({slug:e})=>e)),showHelpText:!0,callToAction:r&&!b?(0,M.createElement)("a",{href:o.VALIDATED_URLS_LINK},(0,p.__)("Review Validated URLs","amp")):null})):(0,M.createElement)($c,{type:Ic,size:Vc},(0,M.createElement)("p",null,(0,p.__)("Site scan found no issues on your site. Browse your site to ensure everything is working as expected.","amp")))}function Os(){const{editedOptions:e,fetchingOptions:t,updateOptions:o}=(0,M.useContext)(q);if(t)return(0,M.createElement)(tt,null);const n=e?.use_native_img_tag;return(0,M.createElement)("section",{className:"use-native-img-tag"},(0,M.createElement)(sr,{checked:!0===n,title:(0,p.__)("Use native HTML image tag","amp"),onChange:()=>{o({use_native_img_tag:!n})}}),(0,M.createElement)("p",null,mt((0,p.__)("The native <ImgTag /> HTML can now be used instead of the AMP-specific <AMPImgTag /> tag. AMP no longer requires the latter because lazy-loading is now a feature of the Web platform. Using native images can further improve page performance, although not all AMP components have been updated to work with them (see <a>example</a>). If you have CSS that is specifically targeting <AMPImgTag /> tags, you will need to update them to target <ImgTag /> instead (which can be done by default since such tags are automatically rewritten in CSS selectors when conversions are done).","amp"),{ImgTag:(0,M.createElement)("code",null,"<img>"),AMPImgTag:(0,M.createElement)("code",null,"<amp-img>"),a:(0,M.createElement)("a",{href:"https://github.com/ampproject/amphtml/pull/38028",target:"_blank",rel:"noreferrer noopener"})})))}function is(){const{editedOptions:e,fetchingOptions:t,updateOptions:o}=(0,M.useContext)(q);if(t)return(0,M.createElement)(tt,null);const n=e?.delete_data_at_uninstall;return(0,M.createElement)("section",{className:"delete-data-at-uninstall"},(0,M.createElement)(sr,{checked:!0===n,title:(0,p.__)("Delete plugin data at uninstall","amp"),onChange:()=>{o({delete_data_at_uninstall:!n})}}),(0,M.createElement)("p",null,(0,p.__)("When you uninstall the plugin you have the choice of whether its data should also be deleted. Examples of plugin data include the settings, validated URLs, and transients used to store image dimensions and parsed stylesheets.","amp")))}const{ajaxurl:ss}=n.g;let ds;function ls({children:e}){return n.g.removeEventListener("error",ds),(0,M.createElement)(A,null,(0,M.createElement)(Rc,null,(0,M.createElement)(y,{hasErrorBoundary:!0},(0,M.createElement)(f,{hasErrorBoundary:!0,optionsRestPath:o.OPTIONS_REST_PATH,populateDefaultValues:!0},(0,M.createElement)(pt,{onlyFetchIfPluginIsConfigured:!1,userOptionDeveloperTools:o.USER_FIELD_DEVELOPER_TOOLS_ENABLED,userFieldReviewPanelDismissedForTemplateMode:o.USER_FIELD_REVIEW_PANEL_DISMISSED_FOR_TEMPLATE_MODE,usersResourceRestPath:o.USERS_RESOURCE_REST_PATH},(0,M.createElement)(R,{currentTheme:o.CURRENT_THEME,readerThemesRestPath:o.READER_THEMES_REST_PATH,hasErrorBoundary:!0,hideCurrentlyActiveTheme:!0,updatesNonce:o.UPDATES_NONCE,wpAjaxUrl:ss},(0,M.createElement)(Jc,null,(0,M.createElement)(Qc,null,(0,M.createElement)(ha,{fetchCachedValidationErrors:!0,refetchPluginSuppressionOnScanComplete:!0,resetOnOptionsChange:!0,scannableUrlsRestPath:o.SCANNABLE_URLS_REST_PATH,validateNonce:o.VALIDATE_NONCE},e)))))))))}function us(e){const M=new URL(e),t=new Map(new URLSearchParams(M.search).entries());e:for(const e of document.querySelectorAll("#toplevel_page_amp-options ul > li > a")){if(!e.pathname.endsWith(M.pathname))continue;const o=new URLSearchParams(M.search);for(const[e,M]of t.entries())if(o.get(e)!==M)continue e;return e.parentNode}return null}function As(e,M){const t=document.querySelector("#toplevel_page_amp-options ul");if(!t||us(M))return;const o=document.createElement("li"),n=document.createElement("a");n.innerText=e,n.href=M,o.appendChild(n),t.appendChild(o)}function qs(e){const M=us(e);M&&M.remove()}function fs({appRoot:e}){const[t,b]=(0,M.useState)(n.g.location.hash.replace(/^#/,"")),{hasOptionsChanges:z,fetchingOptions:c,saveOptions:a}=(0,M.useContext)(q),{hasDeveloperToolsOptionChange:r,saveDeveloperToolsOption:O,developerToolsOption:i}=(0,M.useContext)(bt),{templateModeWasOverridden:s}=(0,M.useContext)(L),{isSkipped:d,isFetchingScannableUrls:l}=(0,M.useContext)(ea),u=(0,M.useCallback)((e=>{e.preventDefault(),z&&a(),r&&(O(),i?(As((0,p.__)("Validated URLs","amp"),o.VALIDATED_URLS_LINK),As((0,p.__)("Error Index","amp"),o.ERROR_INDEX_LINK)):(qs(o.VALIDATED_URLS_LINK),qs(o.ERROR_INDEX_LINK)))}),[r,z,O,a,i]);(0,M.useEffect)((()=>{c||null===s||function(e){if(!e)return;const M=document.getElementById(e);if(!M)return;M.scrollIntoView();const t=M.querySelector("input, select, textarea, button");t&&t.focus()}(t)}),[c,l,t,s]),(0,M.useEffect)((()=>{const e=(e=null)=>{e&&e.preventDefault();const M=n.g.location.hash.replace(/^#/,"");b(M)};return e(),n.g.addEventListener("hashchange",e),()=>{n.g.removeEventListener("hashchange",e)}}),[c]);const A=(0,M.useCallback)((()=>{b("site-scan")}),[]);return!1!==c||null===s?(0,M.createElement)(tt,null):(0,M.createElement)(M.Fragment,null,!o.HAS_DEPENDENCY_SUPPORT&&(0,M.createElement)($c,{className:"not-has-dependency-support",size:Vc},(0,p.__)("You are using an old version of WordPress. Please upgrade to access all of the features of the AMP plugin.","amp")),(0,M.createElement)(La,null),!d&&(0,M.createElement)(zs,{onSiteScan:A}),(0,M.createElement)(Jr,null),(0,M.createElement)("form",{onSubmit:u},(0,M.createElement)(Sr,{focusReaderThemes:"reader-themes"===t}),(0,M.createElement)("h2",{id:"advanced-settings"},(0,p.__)("Advanced Settings","amp")),(0,M.createElement)(Cc,{heading:(0,M.createElement)("h3",null,(0,p.__)("Supported Templates","amp")),hiddenTitle:(0,p.__)("Supported templates","amp"),id:"supported-templates",initialOpen:"supported-templates"===t},(0,M.createElement)(Hr,null)),(0,M.createElement)(Cc,{heading:(0,M.createElement)("h3",null,(0,p.__)("Plugin Suppression","amp")),hiddenTitle:(0,p.__)("Plugin suppression","amp"),id:"plugin-suppression",initialOpen:"plugin-suppression"===t},(0,M.createElement)(si,null)),(0,M.createElement)(Cc,{className:"amp-analytics",heading:(0,M.createElement)("h3",null,(0,p.__)("Analytics","amp")),hiddenTitle:(0,p.__)("Analytics","amp"),id:"analytics-options",initialOpen:"analytics-options"===t},(0,M.createElement)(Ni,null)),(0,M.createElement)(Cc,{heading:(0,M.createElement)("h3",null,(0,p.__)("Sandboxing (Experimental)","amp")),hiddenTitle:(0,p.__)("Sandboxing (Experimental)","amp"),id:"sandboxing",initialOpen:"sandboxing"===t},(0,M.createElement)(Pa,null)),(0,M.createElement)(Bi,{focusedSection:t}),(0,M.createElement)(Cc,{className:"amp-other-settings",heading:(0,M.createElement)("h3",null,(0,p.__)("Other","amp")),hiddenTitle:(0,p.__)("Other","amp"),id:"other-settings",initialOpen:"other-settings"===t},(0,M.createElement)(Si,null),o.HAS_DEPENDENCY_SUPPORT&&(0,M.createElement)(Xi,null),(0,M.createElement)(Os,null),(0,M.createElement)(is,null)),(0,M.createElement)(Fr,null)),(0,M.createElement)(zt,{excludeUserContext:!0,appRoot:e}))}var ms;ms=()=>{const e=document.getElementById("amp-settings-root");e&&(ds=t=>{t.filename&&/amp-settings(\.min)?\.js/.test(t.filename)&&(0,b.s)(e).render((0,M.createElement)(Lc,{error:t.error}))},n.g.addEventListener("error",ds),(0,b.s)(e).render((0,M.createElement)(ls,null,(0,M.createElement)(fs,{appRoot:e}))))},"undefined"!=typeof document&&("complete"!==document.readyState&&"interactive"!==document.readyState?document.addEventListener("DOMContentLoaded",ms):ms())})()})();PK.3YP�v���3bunyad-amp/assets/js/amp-site-scan-notice.asset.php<?php return array('dependencies' => array('react', 'wp-api-fetch', 'wp-components', 'wp-compose', 'wp-dom-ready', 'wp-element', 'wp-i18n', 'wp-url'), 'version' => 'fb606f80dafc98b6e889');
PK.3Y��_�I�I,bunyad-amp/assets/js/amp-site-scan-notice.js(()=>{var e={184:(e,t)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function s(){for(var e=[],t=0;t<arguments.length;t++){var n=arguments[t];if(n){var a=typeof n;if("string"===a||"number"===a)e.push(n);else if(Array.isArray(n)){if(n.length){var l=s.apply(null,n);l&&e.push(l)}}else if("object"===a){if(n.toString!==Object.prototype.toString&&!n.toString.toString().includes("[native code]")){e.push(n.toString());continue}for(var i in n)r.call(n,i)&&n[i]&&e.push(i)}}}return e.join(" ")}e.exports?(s.default=s,e.exports=s):void 0===(n=function(){return s}.apply(t,[]))||(e.exports=n)}()}},t={};function n(r){var s=t[r];if(void 0!==s)return s.exports;var a=t[r]={exports:{}};return e[r](a,a.exports,n),a.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{"use strict";const e=window.React,t=ampSiteScanNotice,r=window.wp.domReady;var s=n.n(r);const a=window.wp.element,l=window.wp.i18n,i=(0,a.createContext)();function c({children:t}){const[n,r]=(0,a.useState)(null);return(0,e.createElement)(i.Provider,{value:{error:n,setError:r}},t)}const o=window.wp.apiFetch;var u=n.n(o);const p=window.wp.url;function m(){const[e,t]=(0,a.useState)();return{error:e,setAsyncError:(0,a.useCallback)((e=>{t((()=>{throw e}))}),[])}}const d=(0,a.createContext)();function h({children:t,optionsRestPath:n,populateDefaultValues:r,hasErrorBoundary:s=!1,delaySave:l=!1}){const[c,o]=(0,a.useState)({}),[h,f]=(0,a.useState)(!1),[_,S]=(0,a.useState)(null),[E,g]=(0,a.useState)({}),[y,b]=(0,a.useState)(!1),[A,v]=(0,a.useState)(!1),[I,C]=(0,a.useState)({}),[U,w]=(0,a.useState)({}),{error:P,setError:T}=(0,a.useContext)(i),{setAsyncError:N}=m(),[O,R]=(0,a.useState)(!1),L=(0,a.useRef)(!1);(0,a.useEffect)((()=>()=>{L.current=!0}),[]);const x=(0,a.useCallback)((()=>{P||h||(async()=>{f(!0);try{const e=await u()({path:(0,p.addQueryArgs)(n,{_fields:["suppressed_plugins","suppressible_plugins"]})});if(!0===L.current)return;C({...I,...e})}catch(e){if(!0===L.current)return;return T(e),void(s&&N(e))}f(!1)})()}),[P,h,s,n,I,N,T]);(0,a.useEffect)((()=>{P||Object.keys(I).length||_||(async()=>{S(!0);try{const e=await u()({path:n});if(!0===L.current)return;r||!1!==e.plugin_configured||(e.mobile_redirect=!0,e.reader_theme=null,e.theme_support=null),C(e)}catch(e){if(!0===L.current)return;return T(e),void(s&&N(e))}S(!1)})()}),[P,_,s,I,n,r,N,T]);const M=(0,a.useCallback)((async()=>{b(!0);try{const e={...c};null===e.reader_theme&&delete e.reader_theme,I.plugin_configured||"mobile_redirect"in e||(e.mobile_redirect=I.mobile_redirect),I.plugin_configured||(e.plugin_configured=!0);const[t]=await Promise.all([u()({method:"post",path:n,data:e}),l?new Promise((e=>{setTimeout(e,1e3)})):()=>{}]);if(!0===L.current)return;C(t),T(null)}catch(e){if(!0===L.current)return;return b(!1),T(e),void(s&&N(e))}w({...U,...c}),(0,a.flushSync)((()=>{g(c),o({}),v(!0)})),b(!1)}),[l,s,n,N,I,T,c,U]),k=(0,a.useCallback)((e=>{o({...c,...e}),v(!1)}),[c]),B=(0,a.useCallback)((e=>{const t={...c};delete t[e],o(t)}),[c]);return(0,e.createElement)(d.Provider,{value:{editedOptions:{...I,...c},fetchingOptions:_,hasOptionsChanges:Boolean(Object.keys(c).length),didSaveOptions:A,updates:c,originalOptions:I,saveOptions:M,savedOptions:E,savingOptions:y,unsetOption:B,updateOptions:k,readerModeWasOverridden:O,refetchPluginSuppression:x,setReaderModeWasOverridden:R,modifiedOptions:U}},t)}const f=(0,a.createContext)();function _({children:t}){const[n,r]=(0,a.useState)([]),[s,l]=(0,a.useState)(null),[i,c]=(0,a.useState)(),o=(0,a.useRef)(!1);return(0,a.useEffect)((()=>()=>{o.current=!0}),[]),(0,a.useEffect)((()=>{i||n.length>0||s||(async()=>{l(!0);try{const e=await u()({path:(0,p.addQueryArgs)("/wp/v2/plugins",{_fields:["author","name","plugin","status","version"]})});if(!0===o.current)return;r(e)}catch(e){if(!0===o.current)return;c(e)}l(!1)})()}),[i,s,n]),(0,e.createElement)(f.Provider,{value:{fetchingPlugins:s,plugins:n}},t)}const S="standard";function E(e=""){return e.replace(/\/.*$/,"").replace(/\.php$/,"")}const g=(0,a.createContext)(),y="ACTION_SET_STATUS",b="ACTION_SCANNABLE_URLS_REQUEST",A="ACTION_SCANNABLE_URLS_RECEIVE",v="ACTION_SCAN_INITIALIZE",I="ACTION_SCAN_URL",C="ACTION_SCAN_RECEIVE_RESULTS",U="ACTION_SCAN_COMPLETE",w="ACTION_SCAN_CANCEL",P="STATUS_REQUEST_SCANNABLE_URLS",T="STATUS_FETCHING_SCANNABLE_URLS",N="STATUS_REFETCHING_PLUGIN_SUPPRESSION",O="STATUS_READY",R="STATUS_IDLE",L="STATUS_IN_PROGRESS",x="STATUS_COMPLETED",M="STATUS_FAILED",k="STATUS_CANCELLED",B="STATUS_SKIPPED",D={currentlyScannedUrlIndexes:[],forceStandardMode:!1,scannableUrls:[],scanOnce:!1,status:"",scansCount:0,urlIndexesPendingScan:[]},W=3,j=500;function $(e,t){if(e.status===B)return e;switch(t.type){case y:return{...e,status:t.status};case b:var n;return{...e,status:P,forceStandardMode:null!==(n=t?.forceStandardMode)&&void 0!==n&&n,currentlyScannedUrlIndexes:[],urlIndexesPendingScan:[]};case A:{const n=Array.isArray(t.scannableUrls)&&t.scannableUrls.length>0;return{...e,status:e.scanOnce&&e.scansCount>0||!n?x:O,scannableUrls:n?t.scannableUrls:[]}}case v:return[O,x,M,k].includes(e.status)?e.scanOnce&&e.scansCount>0?{...e,status:x}:{...e,status:R,currentlyScannedUrlIndexes:[],scansCount:e.scansCount+1,urlIndexesPendingScan:e.scannableUrls.map(((e,t)=>t))}:e;case I:return[R,L].includes(e.status)?{...e,status:L,currentlyScannedUrlIndexes:[...e.currentlyScannedUrlIndexes,t.currentlyScannedUrlIndex],urlIndexesPendingScan:e.urlIndexesPendingScan.filter((e=>e!==t.currentlyScannedUrlIndex))}:e;case C:var r;return[R,L].includes(e.status)?{...e,status:R,currentlyScannedUrlIndexes:e.currentlyScannedUrlIndexes.filter((e=>e!==t.currentlyScannedUrlIndex)),scannableUrls:[...e.scannableUrls.slice(0,t.currentlyScannedUrlIndex),{...e.scannableUrls[t.currentlyScannedUrlIndex],stale:!1,error:null!==(r=t.error)&&void 0!==r&&r,validated_url_post:t.error?{}:t.validatedUrlPost,validation_errors:t.error?[]:t.validationErrors},...e.scannableUrls.slice(t.currentlyScannedUrlIndex+1)]}:e;case U:{const t=e.scannableUrls.every((e=>Boolean(e.error)));return{...e,status:t?M:N}}case w:return[R,L].includes(e.status)?{...e,status:k,currentlyScannedUrlIndexes:[],urlIndexesPendingScan:[]}:e;default:throw new Error(`Unhandled action type: ${t.type}`)}}function F({children:t,fetchCachedValidationErrors:n=!1,refetchPluginSuppressionOnScanComplete:r=!1,resetOnOptionsChange:s=!1,scannableUrlsRestPath:l,scanOnce:i=!1,validateNonce:c}){var o;const{originalOptions:{theme_support:h},savedOptions:f,refetchPluginSuppression:_}=(0,a.useContext)(d),{setAsyncError:F}=m(),[V,G]=(0,a.useReducer)($,{...D,scanOnce:i}),{currentlyScannedUrlIndexes:H,forceStandardMode:Q,scannableUrls:z,urlIndexesPendingScan:K,status:J}=V,Y=Q||h===S?"url":"amp_url",Z=null!==(o=z?.[0]?.[Y])&&void 0!==o?o:"",{hasSiteScanResults:q,pluginsWithAmpIncompatibility:X,stale:ee,themesWithAmpIncompatibility:te}=(0,a.useMemo)((()=>{if(![O,x,B].includes(J))return{hasSiteScanResults:!1,pluginsWithAmpIncompatibility:[],stale:!1,themesWithAmpIncompatibility:[]};const e=function(e=[],{useAmpUrls:t=!1}={}){const n=new Map,r=new Map;for(const s of e){const{amp_url:e,url:a,validation_errors:l}=s;if(l?.length)for(const s of l)if(s?.sources?.length)for(const l of s.sources)if(l?.type)if("plugin"===l.type){const r=E(l.name);if("gutenberg"===r&&s.sources.length>1)continue;n.set(r,new Set([...n.get(r)||[],t?e:a]))}else"theme"===l.type&&r.set(l.name,new Set([...r.get(l.name)||[],t?e:a]))}return n.delete("amp"),{plugins:[...n].map((([e,t])=>({slug:e,urls:[...t]}))),themes:[...r].map((([e,t])=>({slug:e,urls:[...t]})))}}(z,{useAmpUrls:"amp_url"===Y});return{hasSiteScanResults:z.some((e=>Boolean(e?.validation_errors))),pluginsWithAmpIncompatibility:e.plugins,stale:z.some((e=>!0===e?.stale)),themesWithAmpIncompatibility:e.themes}}),[z,J,Y]);(0,a.useEffect)((()=>{c||J===B||G({type:y,status:B})}),[J,c]);const ne=(0,a.useRef)(!1);(0,a.useEffect)((()=>()=>{ne.current=!0}),[]);const re=(0,a.useCallback)(((e={})=>{G({type:b,forceStandardMode:e?.forceStandardMode})}),[]),se=(0,a.useCallback)((()=>{G({type:v})}),[]),ae=(0,a.useCallback)((()=>{G({type:w})}),[]);(0,a.useEffect)((()=>{s&&Object.keys(f).length>0&&G({type:b})}),[s,f]),(0,a.useEffect)((()=>{J===O&&Object.keys(f.suppressed_plugins||{}).length>0&&G({type:v})}),[f?.suppressed_plugins,J]),(0,a.useEffect)((()=>{J===N&&(r&&_(),G({type:y,status:x}))}),[_,r,J]);const[le,ie]=(0,a.useState)(!1);return(0,a.useEffect)((()=>{let e;return le&&(async()=>{await new Promise((t=>{e=setTimeout(t,j)})),!0!==ne.current&&ie(!1)})(),()=>{e&&clearTimeout(e)}}),[le]),(0,a.useEffect)((()=>{(async()=>{if(J===P){G({type:y,status:T});try{const e=["url","amp_url","type","label"],t=await u()({path:(0,p.addQueryArgs)(l,{_fields:n?[...e,"validation_errors","stale"]:e,force_standard_mode:Q?1:void 0})});if(!0===ne.current)return;G({type:A,scannableUrls:t})}catch(e){if(!0===ne.current)return;F(e)}}})()}),[n,Q,l,F,J]),(0,a.useEffect)((()=>{if(![R,L].includes(J))return;if(0===K.length)return void(0===H.length&&G({type:U}));if(le||H.length>=W)return;ie(!0);const e=K[0];G({type:I,currentlyScannedUrlIndex:e}),(async()=>{const t={};try{const n=z[e][Y],r={amp_validate:{cache:!0,cache_bust:Math.random(),force_standard_mode:Q||void 0,nonce:c,omit_stylesheets:!0}},s=await fetch((0,p.addQueryArgs)(n,r)),a=await s.json();if(!0===ne.current)return;s.ok?(t.validatedUrlPost=a.validated_url_post,t.validationErrors=a.results.map((({error:e})=>e))):t.error=a?.code||!0}catch(e){if(!0===ne.current)return;t.error=!0}G({type:C,currentlyScannedUrlIndex:e,...t}),ie(!1)})()}),[H.length,Q,z,le,J,K,Y,c]),(0,e.createElement)(g.Provider,{value:{cancelSiteScan:ae,fetchScannableUrls:re,forceStandardMode:Q,hasSiteScanResults:q,isBusy:[R,L].includes(J),isCancelled:J===k,isCompleted:[N,x].includes(J),isFailed:J===M,isFetchingScannableUrls:[P,T].includes(J),isInitializing:!Boolean(J),isReady:J===O,isSiteScannable:z.length>0,isSkipped:J===B,pluginsWithAmpIncompatibility:X,previewPermalink:Z,scannableUrls:z,scannedUrlsMaxIndex:([L,R].includes(J)?Math.min(z.length,...K):0)-1,stale:ee,startSiteScan:se,themesWithAmpIncompatibility:te}},t)}const V=(0,a.createContext)();function G({children:t}){const[n,r]=(0,a.useState)([]),[s,l]=(0,a.useState)(null),[i,c]=(0,a.useState)(),o=(0,a.useRef)(!1);return(0,a.useEffect)((()=>()=>{o.current=!0}),[]),(0,a.useEffect)((()=>{i||n.length>0||s||(async()=>{l(!0);try{const e=await u()({path:(0,p.addQueryArgs)("/wp/v2/themes",{_fields:["author","name","status","stylesheet","template","version"]})});if(!0===o.current)return;r(e)}catch(e){if(!0===o.current)return;c(e)}l(!1)})()}),[i,s,n]),(0,e.createElement)(V.Provider,{value:{fetchingThemes:s,themes:n}},t)}const H=window.wp.components,Q=window.wp.compose,z=4e3;function K({children:t,onCopy:n,onFinishCopy:r,text:s,...l}){const i=(0,a.useRef)(),c=(0,Q.useCopyToClipboard)(s,(()=>{n&&n(),clearTimeout(i.current),r&&(i.current=setTimeout((()=>r()),z))}));return(0,a.useEffect)((()=>{clearTimeout(i.current)}),[]),(0,e.createElement)(H.Button,{...l,className:"components-clipboard-button",ref:c,onCopy:e=>{e.target.focus()}},t)}function J({error:t,finishLinkLabel:n,finishLinkUrl:r,title:s}){const[i,c]=(0,a.useState)(!1),{message:o,stack:u}=t;return(0,e.createElement)("div",{className:"error-screen-container"},(0,e.createElement)(H.Panel,{className:"error-screen"},(0,e.createElement)("h1",null,s||(0,l.__)("Something went wrong.","amp")),(0,e.createElement)("p",{dangerouslySetInnerHTML:{__html:o||(0,l.__)("There was an error loading the page.","amp")}}),(0,e.createElement)("p",null,(0,a.createInterpolateElement)((0,l.__)("Please submit details to our <a>support forum</a>.","amp"),{a:(0,e.createElement)("a",{href:"https://wordpress.org/support/plugin/amp/",target:"_blank",rel:"noreferrer noopener"})})),u&&(0,e.createElement)("details",null,(0,e.createElement)("summary",null,(0,l.__)("Details","amp")),(0,e.createElement)("pre",null,u),(0,e.createElement)(K,{isSmall:!0,isSecondary:!0,text:JSON.stringify({message:o,stack:u},null,2),onCopy:()=>c(!0),onFinishCopy:()=>c(!1)},i?(0,l.__)("Copied!","amp"):(0,l.__)("Copy Error","amp"))),r&&n&&(0,e.createElement)("p",null,(0,e.createElement)("a",{href:r},n))))}class Y extends a.Component{constructor(e){super(e),this.timeout=null,this.state={error:null}}componentDidMount(){this.mounted=!0}componentWillUnmount(){this.mounted=!1}componentDidCatch(e){this.setState({error:e})}render(){const{error:t}=this.state,{children:n,exitLinkLabel:r,exitLinkUrl:s,title:a}=this.props;return t?(0,e.createElement)(J,{error:t,finishLinkLabel:r,finishLinkUrl:s,title:a}):n}}var Z=n(184),q=n.n(Z);const X="info",ee="success",te="warning",ne="error";function re({children:t,className:n,isDismissible:r=!1,onDismiss:s,type:i=X}){const[c,o]=(0,a.useState)(!1),u=(0,a.useCallback)((()=>{o(!0),"function"==typeof s&&s()}),[s]);return r&&c?null:(0,e.createElement)("div",{className:q()("amp-admin-notice",n,{"amp-admin-notice--dismissible":r,"amp-admin-notice--info":i===X,"amp-admin-notice--success":i===ee,"amp-admin-notice--warning":i===te,"amp-admin-notice--error":i===ne})},t,r&&(0,e.createElement)("button",{type:"button",onClick:u,className:"amp-admin-notice__dismiss"},(0,e.createElement)(H.VisuallyHidden,{as:"span"},(0,l.__)("Dismiss","amp"))))}function se({inline:t=!1}){const n=t?"span":"div";return(0,e.createElement)(n,{className:q()("amp-spinner-container",{"amp-spinner-container--inline":t})},(0,e.createElement)(H.Spinner,null))}const ae=e=>n.g?.location?.host!==new URL(e).host,le=new URL(t.SETTINGS_LINK);function ie({pluginsWithAmpIncompatibility:n}){const{fetchingPlugins:r,plugins:s}=(0,a.useContext)(f),i=(0,a.useMemo)((()=>s?.reduce(((e,t)=>({...e,[E(t.plugin)]:t.name})),{})),[s]);return r?null:(0,e.createElement)(e.Fragment,null,(0,e.createElement)("p",null,(0,l._n)("AMP compatibility issue(s) discovered with the following plugin:","AMP compatibility issue(s) discovered with the following plugins:",n.length,"amp")),n.map((t=>(0,e.createElement)("details",{key:t.slug,className:"amp-site-scan-notice__source-details"},(0,e.createElement)("summary",{className:"amp-site-scan-notice__source-summary"},(0,a.createInterpolateElement)((0,l.sprintf)(/* translators: 1: plugin name; 2: number of URLs with AMP validation issues. */
(0,l._n)("<b>%1$s</b> on %2$d URL","<b>%1$s</b> on %2$d URLs",t.urls.length,"amp"),i[t.slug],t.urls.length),{b:(0,e.createElement)("b",null)})),(0,e.createElement)("ul",{className:"amp-site-scan-notice__urls-list"},t.urls.map((t=>(0,e.createElement)("li",{key:t},(0,e.createElement)("a",{href:t,target:"_blank",rel:"noopener noreferrer"},t)))))))),(0,e.createElement)("div",{className:"amp-site-scan-notice__cta"},(0,e.createElement)("a",{href:le.href,className:"button"},(0,l.__)("Review Plugin Suppression","amp")),(0,e.createElement)("a",{href:t.AMP_COMPATIBLE_PLUGINS_URL,className:"button",...ae(t.AMP_COMPATIBLE_PLUGINS_URL)?{target:"_blank",rel:"noopener noreferrer"}:{}},(0,l.__)("View AMP-Compatible Plugins","amp"))))}function ce({themesWithAmpIncompatibility:n}){const{fetchingThemes:r,themes:s}=(0,a.useContext)(V),i=(0,a.useMemo)((()=>s?.reduce(((e,t)=>{var n;return{...e,[t.stylesheet]:null!==(n=t.name?.rendered)&&void 0!==n?n:t.name}}),{})),[s]);return r?null:(0,e.createElement)(e.Fragment,null,(0,e.createElement)("p",null,(0,l._n)("AMP compatibility issue(s) discovered with the following theme:","AMP compatibility issue(s) discovered with the following themes:",n.length,"amp")),n.map((t=>(0,e.createElement)("details",{key:t.slug,className:"amp-site-scan-notice__source-details"},(0,e.createElement)("summary",{className:"amp-site-scan-notice__source-summary"},(0,a.createInterpolateElement)((0,l.sprintf)(/* translators: 1: theme name; 2: number of URLs with AMP validation issues. */
(0,l._n)("<b>%1$s</b> on %2$d URL","<b>%1$s</b> on %2$d URLs",t.urls.length,"amp"),i[t.slug],t.urls.length),{b:(0,e.createElement)("b",null)})),(0,e.createElement)("ul",{className:"amp-site-scan-notice__urls-list"},t.urls.map((t=>(0,e.createElement)("li",{key:t},(0,e.createElement)("a",{href:t,target:"_blank",rel:"noopener noreferrer"},t)))))))),(0,e.createElement)("div",{className:"amp-site-scan-notice__cta"},(0,e.createElement)("a",{href:t.AMP_COMPATIBLE_THEMES_URL,className:"button",...ae(t.AMP_COMPATIBLE_THEMES_URL)?{target:"_blank",rel:"noopener noreferrer"}:{}},(0,l.__)("View AMP-Compatible Themes","amp"))))}function oe(){const{cancelSiteScan:t,fetchScannableUrls:n,isCancelled:r,isCompleted:s,isFailed:i,isInitializing:c,isReady:o,pluginsWithAmpIncompatibility:u,themesWithAmpIncompatibility:p,startSiteScan:m}=(0,a.useContext)(g);(0,a.useEffect)((()=>t),[t]),(0,a.useEffect)((()=>{c?n():o&&m()}),[n,c,o,m]);const d={className:"amp-site-scan-notice",isDismissible:!0,onDismiss:t};if(i||r)return(0,e.createElement)(re,{type:ne,...d},(0,e.createElement)("p",null,(0,l.__)("AMP could not check your site for compatibility issues.","amp")));if(s){let t=[u.length>0?(0,e.createElement)(ie,{key:`plugins-${u.length}`,pluginsWithAmpIncompatibility:u}):null,p.length>0?(0,e.createElement)(ce,{key:`themes-${p.length}`,themesWithAmpIncompatibility:p}):null];return document.location.href.includes("themes.php")&&(t=t.reverse()),t=t.filter(Boolean),(0,e.createElement)(re,{type:t.length?te:ee,...d},t.length?t:(0,e.createElement)("p",null,(0,l.__)("No AMP compatibility issues detected.","amp")))}return(0,e.createElement)(re,{type:X,...d},(0,e.createElement)("p",null,(0,l.__)("Checking your site for AMP compatibility issues…","amp"),(0,e.createElement)(se,{inline:!0})))}let ue;function pe({children:r}){return n.g.removeEventListener("error",ue),(0,e.createElement)(c,null,(0,e.createElement)(Y,{title:(0,l.__)("The AMP Site Scanner has experienced an error.","amp")},(0,e.createElement)(h,{hasErrorBoundary:!0,optionsRestPath:t.OPTIONS_REST_PATH,populateDefaultValues:!1},(0,e.createElement)(_,null,(0,e.createElement)(G,null,(0,e.createElement)(F,{scannableUrlsRestPath:t.SCANNABLE_URLS_REST_PATH,validateNonce:t.VALIDATE_NONCE},r))))))}le.hash="plugin-suppression",s()((()=>{let r=document.getElementById(t.APP_ROOT_ID);if(!r){const e=document.getElementById(t.APP_ROOT_SIBLING_ID);if(!e)return;r=document.createElement("div"),r.setAttribute("id",t.APP_ROOT_ID),e.after(r)}ue=t=>{t.filename&&/amp-site-scan-notice(\.min)?\.js/.test(t.filename)&&(0,a.createRoot)(r).render((0,e.createElement)(J,{error:t.error}))},n.g.addEventListener("error",ue),(0,a.createRoot)(r).render((0,e.createElement)(pe,null,(0,e.createElement)(oe,null)))}))})()})();PK.3YA.:�bb*bunyad-amp/assets/js/amp-support.asset.php<?php return array('dependencies' => array('wp-api-fetch'), 'version' => '29e4e32ef12cef63a8ac');
PK.3Yڸ��Z<Z<#bunyad-amp/assets/js/amp-support.js(()=>{var e,t,n={4184:(e,t)=>{var n;!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e=[],t=0;t<arguments.length;t++){var n=arguments[t];if(n){var a=typeof n;if("string"===a||"number"===a)e.push(n);else if(Array.isArray(n)){if(n.length){var i=o.apply(null,n);i&&e.push(i)}}else if("object"===a){if(n.toString!==Object.prototype.toString&&!n.toString.toString().includes("[native code]")){e.push(n.toString());continue}for(var l in n)r.call(n,l)&&n[l]&&e.push(l)}}}return e.join(" ")}e.exports?(o.default=o,e.exports=o):void 0===(n=function(){return o}.apply(t,[]))||(e.exports=n)}()},2152:function(e){var t;t=function(){return function(){var e={686:function(e,t,n){"use strict";n.d(t,{default:function(){return w}});var r=n(279),o=n.n(r),a=n(370),i=n.n(a),l=n(817),u=n.n(l);function s(e){try{return document.execCommand(e)}catch(e){return!1}}var c=function(e){var t=u()(e);return s("cut"),t},f=function(e,t){var n=function(e){var t="rtl"===document.documentElement.getAttribute("dir"),n=document.createElement("textarea");n.style.fontSize="12pt",n.style.border="0",n.style.padding="0",n.style.margin="0",n.style.position="absolute",n.style[t?"right":"left"]="-9999px";var r=window.pageYOffset||document.documentElement.scrollTop;return n.style.top="".concat(r,"px"),n.setAttribute("readonly",""),n.value=e,n}(e);t.container.appendChild(n);var r=u()(n);return s("copy"),n.remove(),r},d=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{container:document.body},n="";return"string"==typeof e?n=f(e,t):e instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(null==e?void 0:e.type)?n=f(e.value,t):(n=u()(e),s("copy")),n};function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}function m(e){return m="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},m(e)}function h(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function v(e,t){return v=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},v(e,t)}function g(e){return g=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},g(e)}function y(e,t){var n="data-clipboard-".concat(e);if(t.hasAttribute(n))return t.getAttribute(n)}var b=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&v(e,t)}(u,e);var t,n,r,o,a,l=(o=u,a=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,t,n=g(o);if(a){var r=g(this).constructor;e=Reflect.construct(n,arguments,r)}else e=n.apply(this,arguments);return!(t=e)||"object"!==m(t)&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(this):t});function u(e,t){var n;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,u),(n=l.call(this)).resolveOptions(t),n.listenClick(e),n}return t=u,n=[{key:"resolveOptions",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof e.action?e.action:this.defaultAction,this.target="function"==typeof e.target?e.target:this.defaultTarget,this.text="function"==typeof e.text?e.text:this.defaultText,this.container="object"===m(e.container)?e.container:document.body}},{key:"listenClick",value:function(e){var t=this;this.listener=i()(e,"click",(function(e){return t.onClick(e)}))}},{key:"onClick",value:function(e){var t=e.delegateTarget||e.currentTarget,n=this.action(t)||"copy",r=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.action,n=void 0===t?"copy":t,r=e.container,o=e.target,a=e.text;if("copy"!==n&&"cut"!==n)throw new Error('Invalid "action" value, use either "copy" or "cut"');if(void 0!==o){if(!o||"object"!==p(o)||1!==o.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===n&&o.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===n&&(o.hasAttribute("readonly")||o.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes')}return a?d(a,{container:r}):o?"cut"===n?c(o):d(o,{container:r}):void 0}({action:n,container:this.container,target:this.target(t),text:this.text(t)});this.emit(r?"success":"error",{action:n,text:r,trigger:t,clearSelection:function(){t&&t.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(e){return y("action",e)}},{key:"defaultTarget",value:function(e){var t=y("target",e);if(t)return document.querySelector(t)}},{key:"defaultText",value:function(e){return y("text",e)}},{key:"destroy",value:function(){this.listener.destroy()}}],r=[{key:"copy",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{container:document.body};return d(e,t)}},{key:"cut",value:function(e){return c(e)}},{key:"isSupported",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],t="string"==typeof e?[e]:e,n=!!document.queryCommandSupported;return t.forEach((function(e){n=n&&!!document.queryCommandSupported(e)})),n}}],n&&h(t.prototype,n),r&&h(t,r),u}(o()),w=b},828:function(e){if("undefined"!=typeof Element&&!Element.prototype.matches){var t=Element.prototype;t.matches=t.matchesSelector||t.mozMatchesSelector||t.msMatchesSelector||t.oMatchesSelector||t.webkitMatchesSelector}e.exports=function(e,t){for(;e&&9!==e.nodeType;){if("function"==typeof e.matches&&e.matches(t))return e;e=e.parentNode}}},438:function(e,t,n){var r=n(828);function o(e,t,n,r,o){var i=a.apply(this,arguments);return e.addEventListener(n,i,o),{destroy:function(){e.removeEventListener(n,i,o)}}}function a(e,t,n,o){return function(n){n.delegateTarget=r(n.target,t),n.delegateTarget&&o.call(e,n)}}e.exports=function(e,t,n,r,a){return"function"==typeof e.addEventListener?o.apply(null,arguments):"function"==typeof n?o.bind(null,document).apply(null,arguments):("string"==typeof e&&(e=document.querySelectorAll(e)),Array.prototype.map.call(e,(function(e){return o(e,t,n,r,a)})))}},879:function(e,t){t.node=function(e){return void 0!==e&&e instanceof HTMLElement&&1===e.nodeType},t.nodeList=function(e){var n=Object.prototype.toString.call(e);return void 0!==e&&("[object NodeList]"===n||"[object HTMLCollection]"===n)&&"length"in e&&(0===e.length||t.node(e[0]))},t.string=function(e){return"string"==typeof e||e instanceof String},t.fn=function(e){return"[object Function]"===Object.prototype.toString.call(e)}},370:function(e,t,n){var r=n(879),o=n(438);e.exports=function(e,t,n){if(!e&&!t&&!n)throw new Error("Missing required arguments");if(!r.string(t))throw new TypeError("Second argument must be a String");if(!r.fn(n))throw new TypeError("Third argument must be a Function");if(r.node(e))return function(e,t,n){return e.addEventListener(t,n),{destroy:function(){e.removeEventListener(t,n)}}}(e,t,n);if(r.nodeList(e))return function(e,t,n){return Array.prototype.forEach.call(e,(function(e){e.addEventListener(t,n)})),{destroy:function(){Array.prototype.forEach.call(e,(function(e){e.removeEventListener(t,n)}))}}}(e,t,n);if(r.string(e))return function(e,t,n){return o(document.body,e,t,n)}(e,t,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}},817:function(e){e.exports=function(e){var t;if("SELECT"===e.nodeName)e.focus(),t=e.value;else if("INPUT"===e.nodeName||"TEXTAREA"===e.nodeName){var n=e.hasAttribute("readonly");n||e.setAttribute("readonly",""),e.select(),e.setSelectionRange(0,e.value.length),n||e.removeAttribute("readonly"),t=e.value}else{e.hasAttribute("contenteditable")&&e.focus();var r=window.getSelection(),o=document.createRange();o.selectNodeContents(e),r.removeAllRanges(),r.addRange(o),t=r.toString()}return t}},279:function(e){function t(){}t.prototype={on:function(e,t,n){var r=this.e||(this.e={});return(r[e]||(r[e]=[])).push({fn:t,ctx:n}),this},once:function(e,t,n){var r=this;function o(){r.off(e,o),t.apply(n,arguments)}return o._=t,this.on(e,o,n)},emit:function(e){for(var t=[].slice.call(arguments,1),n=((this.e||(this.e={}))[e]||[]).slice(),r=0,o=n.length;r<o;r++)n[r].fn.apply(n[r].ctx,t);return this},off:function(e,t){var n=this.e||(this.e={}),r=n[e],o=[];if(r&&t)for(var a=0,i=r.length;a<i;a++)r[a].fn!==t&&r[a].fn._!==t&&o.push(r[a]);return o.length?n[e]=o:delete n[e],this}},e.exports=t,e.exports.TinyEmitter=t}},t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={exports:{}};return e[r](o,o.exports,n),o.exports}return n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n(686)}().default},e.exports=t()},9996:e=>{"use strict";var t=function(e){return function(e){return!!e&&"object"==typeof e}(e)&&!function(e){var t=Object.prototype.toString.call(e);return"[object RegExp]"===t||"[object Date]"===t||function(e){return e.$$typeof===n}(e)}(e)},n="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103;function r(e,t){return!1!==t.clone&&t.isMergeableObject(e)?l((n=e,Array.isArray(n)?[]:{}),e,t):e;var n}function o(e,t,n){return e.concat(t).map((function(e){return r(e,n)}))}function a(e){return Object.keys(e).concat(function(e){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e).filter((function(t){return Object.propertyIsEnumerable.call(e,t)})):[]}(e))}function i(e,t){try{return t in e}catch(e){return!1}}function l(e,n,u){(u=u||{}).arrayMerge=u.arrayMerge||o,u.isMergeableObject=u.isMergeableObject||t,u.cloneUnlessOtherwiseSpecified=r;var s=Array.isArray(n);return s===Array.isArray(e)?s?u.arrayMerge(e,n,u):function(e,t,n){var o={};return n.isMergeableObject(e)&&a(e).forEach((function(t){o[t]=r(e[t],n)})),a(t).forEach((function(a){(function(e,t){return i(e,t)&&!(Object.hasOwnProperty.call(e,t)&&Object.propertyIsEnumerable.call(e,t))})(e,a)||(i(e,a)&&n.isMergeableObject(t[a])?o[a]=function(e,t){if(!t.customMerge)return l;var n=t.customMerge(e);return"function"==typeof n?n:l}(a,n)(e[a],t[a],n):o[a]=r(t[a],n))})),o}(e,n,u):r(n,u)}l.all=function(e,t){if(!Array.isArray(e))throw new Error("first argument should be an array");return e.reduce((function(e,n){return l(e,n,t)}),{})};var u=l;e.exports=u},2991:e=>{"use strict";e.exports=function e(t,n){if(t===n)return!0;if(t&&n&&"object"==typeof t&&"object"==typeof n){if(t.constructor!==n.constructor)return!1;var r,o,a;if(Array.isArray(t)){if((r=t.length)!=n.length)return!1;for(o=r;0!=o--;)if(!e(t[o],n[o]))return!1;return!0}if(t instanceof Map&&n instanceof Map){if(t.size!==n.size)return!1;for(o of t.entries())if(!n.has(o[0]))return!1;for(o of t.entries())if(!e(o[1],n.get(o[0])))return!1;return!0}if(t instanceof Set&&n instanceof Set){if(t.size!==n.size)return!1;for(o of t.entries())if(!n.has(o[0]))return!1;return!0}if(ArrayBuffer.isView(t)&&ArrayBuffer.isView(n)){if((r=t.length)!=n.length)return!1;for(o=r;0!=o--;)if(t[o]!==n[o])return!1;return!0}if(t.constructor===RegExp)return t.source===n.source&&t.flags===n.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===n.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===n.toString();if((r=(a=Object.keys(t)).length)!==Object.keys(n).length)return!1;for(o=r;0!=o--;)if(!Object.prototype.hasOwnProperty.call(n,a[o]))return!1;for(o=r;0!=o--;){var i=a[o];if(!e(t[i],n[i]))return!1}return!0}return t!=t&&n!=n}},4448:(e,t,n)=>{"use strict";var r=n(7294),o=n(3840);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var i=new Set,l={};function u(e,t){s(e,t),s(e+"Capture",t)}function s(e,t){for(l[e]=t,e=0;e<t.length;e++)i.add(t[e])}var c=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),f=Object.prototype.hasOwnProperty,d=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,p={},m={};function h(e,t,n,r,o,a,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=a,this.removeEmptyString=i}var v={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){v[e]=new h(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];v[t]=new h(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){v[e]=new h(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){v[e]=new h(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){v[e]=new h(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){v[e]=new h(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){v[e]=new h(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){v[e]=new h(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){v[e]=new h(e,5,!1,e.toLowerCase(),null,!1,!1)}));var g=/[\-:]([a-z])/g;function y(e){return e[1].toUpperCase()}function b(e,t,n,r){var o=v.hasOwnProperty(t)?v[t]:null;(null!==o?0!==o.type:r||!(2<t.length)||"o"!==t[0]&&"O"!==t[0]||"n"!==t[1]&&"N"!==t[1])&&(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,o,r)&&(n=null),r||null===o?function(e){return!!f.call(m,e)||!f.call(p,e)&&(d.test(e)?m[e]=!0:(p[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&"":n:(t=o.attributeName,r=o.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(o=o.type)||4===o&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(g,y);v[t]=new h(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(g,y);v[t]=new h(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(g,y);v[t]=new h(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){v[e]=new h(e,1,!1,e.toLowerCase(),null,!1,!1)})),v.xlinkHref=new h("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){v[e]=new h(e,1,!1,e.toLowerCase(),null,!0,!0)}));var w=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,x=Symbol.for("react.element"),k=Symbol.for("react.portal"),S=Symbol.for("react.fragment"),E=Symbol.for("react.strict_mode"),_=Symbol.for("react.profiler"),C=Symbol.for("react.provider"),P=Symbol.for("react.context"),O=Symbol.for("react.forward_ref"),T=Symbol.for("react.suspense"),N=Symbol.for("react.suspense_list"),L=Symbol.for("react.memo"),R=Symbol.for("react.lazy");Symbol.for("react.scope"),Symbol.for("react.debug_trace_mode");var A=Symbol.for("react.offscreen");Symbol.for("react.legacy_hidden"),Symbol.for("react.cache"),Symbol.for("react.tracing_marker");var z=Symbol.iterator;function F(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=z&&e[z]||e["@@iterator"])?e:null}var M,D=Object.assign;function j(e){if(void 0===M)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);M=t&&t[1]||""}return"\n"+M+e}var I=!1;function $(e,t){if(!e||I)return"";I=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(e){var r=e}Reflect.construct(e,[],t)}else{try{t.call()}catch(e){r=e}e.call(t.prototype)}else{try{throw Error()}catch(e){r=e}e()}}catch(t){if(t&&r&&"string"==typeof t.stack){for(var o=t.stack.split("\n"),a=r.stack.split("\n"),i=o.length-1,l=a.length-1;1<=i&&0<=l&&o[i]!==a[l];)l--;for(;1<=i&&0<=l;i--,l--)if(o[i]!==a[l]){if(1!==i||1!==l)do{if(i--,0>--l||o[i]!==a[l]){var u="\n"+o[i].replace(" at new "," at ");return e.displayName&&u.includes("<anonymous>")&&(u=u.replace("<anonymous>",e.displayName)),u}}while(1<=i&&0<=l);break}}}finally{I=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?j(e):""}function U(e){switch(e.tag){case 5:return j(e.type);case 16:return j("Lazy");case 13:return j("Suspense");case 19:return j("SuspenseList");case 0:case 2:case 15:return $(e.type,!1);case 11:return $(e.type.render,!1);case 1:return $(e.type,!0);default:return""}}function V(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case S:return"Fragment";case k:return"Portal";case _:return"Profiler";case E:return"StrictMode";case T:return"Suspense";case N:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case P:return(e.displayName||"Context")+".Consumer";case C:return(e._context.displayName||"Context")+".Provider";case O:var t=e.render;return(e=e.displayName)||(e=""!==(e=t.displayName||t.name||"")?"ForwardRef("+e+")":"ForwardRef"),e;case L:return null!==(t=e.displayName||null)?t:V(e.type)||"Memo";case R:t=e._payload,e=e._init;try{return V(e(t))}catch(e){}}return null}function H(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=(e=t.render).displayName||e.name||"",t.displayName||(""!==e?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return V(t);case 8:return t===E?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if("function"==typeof t)return t.displayName||t.name||null;if("string"==typeof t)return t}return null}function B(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":case"object":return e;default:return""}}function W(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function q(e){e._valueTracker||(e._valueTracker=function(e){var t=W(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var o=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function Q(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=W(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function Y(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function K(e,t){var n=t.checked;return D({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function X(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=B(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function G(e,t){null!=(t=t.checked)&&b(e,"checked",t,!1)}function Z(e,t){G(e,t);var n=B(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?ee(e,t.type,n):t.hasOwnProperty("defaultValue")&&ee(e,t.type,B(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function J(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function ee(e,t,n){"number"===t&&Y(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var te=Array.isArray;function ne(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+B(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function re(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(a(91));return D({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function oe(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(a(92));if(te(n)){if(1<n.length)throw Error(a(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:B(n)}}function ae(e,t){var n=B(t.value),r=B(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function ie(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}function le(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function ue(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?le(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var se,ce,fe=(ce=function(e,t){if("http://www.w3.org/2000/svg"!==e.namespaceURI||"innerHTML"in e)e.innerHTML=t;else{for((se=se||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=se.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return ce(e,t)}))}:ce);function de(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var pe={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},me=["Webkit","ms","Moz","O"];function he(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||pe.hasOwnProperty(e)&&pe[e]?(""+t).trim():t+"px"}function ve(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),o=he(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}Object.keys(pe).forEach((function(e){me.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),pe[t]=pe[e]}))}));var ge=D({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ye(e,t){if(t){if(ge[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(a(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(a(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(a(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(a(62))}}function be(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var we=null;function xe(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var ke=null,Se=null,Ee=null;function _e(e){if(e=xo(e)){if("function"!=typeof ke)throw Error(a(280));var t=e.stateNode;t&&(t=So(t),ke(e.stateNode,e.type,t))}}function Ce(e){Se?Ee?Ee.push(e):Ee=[e]:Se=e}function Pe(){if(Se){var e=Se,t=Ee;if(Ee=Se=null,_e(e),t)for(e=0;e<t.length;e++)_e(t[e])}}function Oe(e,t){return e(t)}function Te(){}var Ne=!1;function Le(e,t,n){if(Ne)return e(t,n);Ne=!0;try{return Oe(e,t,n)}finally{Ne=!1,(null!==Se||null!==Ee)&&(Te(),Pe())}}function Re(e,t){var n=e.stateNode;if(null===n)return null;var r=So(n);if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(a(231,t,typeof n));return n}var Ae=!1;if(c)try{var ze={};Object.defineProperty(ze,"passive",{get:function(){Ae=!0}}),window.addEventListener("test",ze,ze),window.removeEventListener("test",ze,ze)}catch(ce){Ae=!1}function Fe(e,t,n,r,o,a,i,l,u){var s=Array.prototype.slice.call(arguments,3);try{t.apply(n,s)}catch(e){this.onError(e)}}var Me=!1,De=null,je=!1,Ie=null,$e={onError:function(e){Me=!0,De=e}};function Ue(e,t,n,r,o,a,i,l,u){Me=!1,De=null,Fe.apply($e,arguments)}function Ve(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(4098&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function He(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&null!==(e=e.alternate)&&(t=e.memoizedState),null!==t)return t.dehydrated}return null}function Be(e){if(Ve(e)!==e)throw Error(a(188))}function We(e){return null!==(e=function(e){var t=e.alternate;if(!t){if(null===(t=Ve(e)))throw Error(a(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var i=o.alternate;if(null===i){if(null!==(r=o.return)){n=r;continue}break}if(o.child===i.child){for(i=o.child;i;){if(i===n)return Be(o),e;if(i===r)return Be(o),t;i=i.sibling}throw Error(a(188))}if(n.return!==r.return)n=o,r=i;else{for(var l=!1,u=o.child;u;){if(u===n){l=!0,n=o,r=i;break}if(u===r){l=!0,r=o,n=i;break}u=u.sibling}if(!l){for(u=i.child;u;){if(u===n){l=!0,n=i,r=o;break}if(u===r){l=!0,r=i,n=o;break}u=u.sibling}if(!l)throw Error(a(189))}}if(n.alternate!==r)throw Error(a(190))}if(3!==n.tag)throw Error(a(188));return n.stateNode.current===n?e:t}(e))?qe(e):null}function qe(e){if(5===e.tag||6===e.tag)return e;for(e=e.child;null!==e;){var t=qe(e);if(null!==t)return t;e=e.sibling}return null}var Qe=o.unstable_scheduleCallback,Ye=o.unstable_cancelCallback,Ke=o.unstable_shouldYield,Xe=o.unstable_requestPaint,Ge=o.unstable_now,Ze=o.unstable_getCurrentPriorityLevel,Je=o.unstable_ImmediatePriority,et=o.unstable_UserBlockingPriority,tt=o.unstable_NormalPriority,nt=o.unstable_LowPriority,rt=o.unstable_IdlePriority,ot=null,at=null,it=Math.clz32?Math.clz32:function(e){return 0===(e>>>=0)?32:31-(lt(e)/ut|0)|0},lt=Math.log,ut=Math.LN2,st=64,ct=4194304;function ft(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194240&e;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return 130023424&e;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function dt(e,t){var n=e.pendingLanes;if(0===n)return 0;var r=0,o=e.suspendedLanes,a=e.pingedLanes,i=268435455&n;if(0!==i){var l=i&~o;0!==l?r=ft(l):0!=(a&=i)&&(r=ft(a))}else 0!=(i=n&~o)?r=ft(i):0!==a&&(r=ft(a));if(0===r)return 0;if(0!==t&&t!==r&&0==(t&o)&&((o=r&-r)>=(a=t&-t)||16===o&&0!=(4194240&a)))return t;if(0!=(4&r)&&(r|=16&n),0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)o=1<<(n=31-it(t)),r|=e[n],t&=~o;return r}function pt(e,t){switch(e){case 1:case 2:case 4:return t+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;default:return-1}}function mt(e){return 0!=(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function ht(){var e=st;return 0==(4194240&(st<<=1))&&(st=64),e}function vt(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function gt(e,t,n){e.pendingLanes|=t,536870912!==t&&(e.suspendedLanes=0,e.pingedLanes=0),(e=e.eventTimes)[t=31-it(t)]=n}function yt(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var r=31-it(n),o=1<<r;o&t|e[r]&t&&(e[r]|=t),n&=~o}}var bt=0;function wt(e){return 1<(e&=-e)?4<e?0!=(268435455&e)?16:536870912:4:1}var xt,kt,St,Et,_t,Ct=!1,Pt=[],Ot=null,Tt=null,Nt=null,Lt=new Map,Rt=new Map,At=[],zt="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function Ft(e,t){switch(e){case"focusin":case"focusout":Ot=null;break;case"dragenter":case"dragleave":Tt=null;break;case"mouseover":case"mouseout":Nt=null;break;case"pointerover":case"pointerout":Lt.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":Rt.delete(t.pointerId)}}function Mt(e,t,n,r,o,a){return null===e||e.nativeEvent!==a?(e={blockedOn:t,domEventName:n,eventSystemFlags:r,nativeEvent:a,targetContainers:[o]},null!==t&&null!==(t=xo(t))&&kt(t),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function Dt(e){var t=wo(e.target);if(null!==t){var n=Ve(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=He(n)))return e.blockedOn=t,void _t(e.priority,(function(){St(n)}))}else if(3===t&&n.stateNode.current.memoizedState.isDehydrated)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function jt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Kt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=xo(n))&&kt(t),e.blockedOn=n,!1;var r=new(n=e.nativeEvent).constructor(n.type,n);we=r,n.target.dispatchEvent(r),we=null,t.shift()}return!0}function It(e,t,n){jt(e)&&n.delete(t)}function $t(){Ct=!1,null!==Ot&&jt(Ot)&&(Ot=null),null!==Tt&&jt(Tt)&&(Tt=null),null!==Nt&&jt(Nt)&&(Nt=null),Lt.forEach(It),Rt.forEach(It)}function Ut(e,t){e.blockedOn===t&&(e.blockedOn=null,Ct||(Ct=!0,o.unstable_scheduleCallback(o.unstable_NormalPriority,$t)))}function Vt(e){function t(t){return Ut(t,e)}if(0<Pt.length){Ut(Pt[0],e);for(var n=1;n<Pt.length;n++){var r=Pt[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==Ot&&Ut(Ot,e),null!==Tt&&Ut(Tt,e),null!==Nt&&Ut(Nt,e),Lt.forEach(t),Rt.forEach(t),n=0;n<At.length;n++)(r=At[n]).blockedOn===e&&(r.blockedOn=null);for(;0<At.length&&null===(n=At[0]).blockedOn;)Dt(n),null===n.blockedOn&&At.shift()}var Ht=w.ReactCurrentBatchConfig,Bt=!0;function Wt(e,t,n,r){var o=bt,a=Ht.transition;Ht.transition=null;try{bt=1,Qt(e,t,n,r)}finally{bt=o,Ht.transition=a}}function qt(e,t,n,r){var o=bt,a=Ht.transition;Ht.transition=null;try{bt=4,Qt(e,t,n,r)}finally{bt=o,Ht.transition=a}}function Qt(e,t,n,r){if(Bt){var o=Kt(e,t,n,r);if(null===o)Wr(e,t,r,Yt,n),Ft(e,r);else if(function(e,t,n,r,o){switch(t){case"focusin":return Ot=Mt(Ot,e,t,n,r,o),!0;case"dragenter":return Tt=Mt(Tt,e,t,n,r,o),!0;case"mouseover":return Nt=Mt(Nt,e,t,n,r,o),!0;case"pointerover":var a=o.pointerId;return Lt.set(a,Mt(Lt.get(a)||null,e,t,n,r,o)),!0;case"gotpointercapture":return a=o.pointerId,Rt.set(a,Mt(Rt.get(a)||null,e,t,n,r,o)),!0}return!1}(o,e,t,n,r))r.stopPropagation();else if(Ft(e,r),4&t&&-1<zt.indexOf(e)){for(;null!==o;){var a=xo(o);if(null!==a&&xt(a),null===(a=Kt(e,t,n,r))&&Wr(e,t,r,Yt,n),a===o)break;o=a}null!==o&&r.stopPropagation()}else Wr(e,t,r,null,n)}}var Yt=null;function Kt(e,t,n,r){if(Yt=null,null!==(e=wo(e=xe(r))))if(null===(t=Ve(e)))e=null;else if(13===(n=t.tag)){if(null!==(e=He(t)))return e;e=null}else if(3===n){if(t.stateNode.current.memoizedState.isDehydrated)return 3===t.tag?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null);return Yt=e,null}function Xt(e){switch(e){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(Ze()){case Je:return 1;case et:return 4;case tt:case nt:return 16;case rt:return 536870912;default:return 16}default:return 16}}var Gt=null,Zt=null,Jt=null;function en(){if(Jt)return Jt;var e,t,n=Zt,r=n.length,o="value"in Gt?Gt.value:Gt.textContent,a=o.length;for(e=0;e<r&&n[e]===o[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===o[a-t];t++);return Jt=o.slice(e,1<t?1-t:void 0)}function tn(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function nn(){return!0}function rn(){return!1}function on(e){function t(t,n,r,o,a){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?nn:rn,this.isPropagationStopped=rn,this}return D(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=nn)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=nn)},persist:function(){},isPersistent:nn}),t}var an,ln,un,sn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},cn=on(sn),fn=D({},sn,{view:0,detail:0}),dn=on(fn),pn=D({},fn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Cn,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==un&&(un&&"mousemove"===e.type?(an=e.screenX-un.screenX,ln=e.screenY-un.screenY):ln=an=0,un=e),an)},movementY:function(e){return"movementY"in e?e.movementY:ln}}),mn=on(pn),hn=on(D({},pn,{dataTransfer:0})),vn=on(D({},fn,{relatedTarget:0})),gn=on(D({},sn,{animationName:0,elapsedTime:0,pseudoElement:0})),yn=D({},sn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),bn=on(yn),wn=on(D({},sn,{data:0})),xn={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},kn={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},Sn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function En(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=Sn[e])&&!!t[e]}function Cn(){return En}var Pn=D({},fn,{key:function(e){if(e.key){var t=xn[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=tn(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?kn[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Cn,charCode:function(e){return"keypress"===e.type?tn(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?tn(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),On=on(Pn),Tn=on(D({},pn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),Nn=on(D({},fn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Cn})),Ln=on(D({},sn,{propertyName:0,elapsedTime:0,pseudoElement:0})),Rn=D({},pn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),An=on(Rn),zn=[9,13,27,32],Fn=c&&"CompositionEvent"in window,Mn=null;c&&"documentMode"in document&&(Mn=document.documentMode);var Dn=c&&"TextEvent"in window&&!Mn,jn=c&&(!Fn||Mn&&8<Mn&&11>=Mn),In=String.fromCharCode(32),$n=!1;function Un(e,t){switch(e){case"keyup":return-1!==zn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Vn(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Hn=!1,Bn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Wn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Bn[e.type]:"textarea"===t}function qn(e,t,n,r){Ce(r),0<(t=Qr(t,"onChange")).length&&(n=new cn("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var Qn=null,Yn=null;function Kn(e){Ir(e,0)}function Xn(e){if(Q(ko(e)))return e}function Gn(e,t){if("change"===e)return t}var Zn=!1;if(c){var Jn;if(c){var er="oninput"in document;if(!er){var tr=document.createElement("div");tr.setAttribute("oninput","return;"),er="function"==typeof tr.oninput}Jn=er}else Jn=!1;Zn=Jn&&(!document.documentMode||9<document.documentMode)}function nr(){Qn&&(Qn.detachEvent("onpropertychange",rr),Yn=Qn=null)}function rr(e){if("value"===e.propertyName&&Xn(Yn)){var t=[];qn(t,Yn,e,xe(e)),Le(Kn,t)}}function or(e,t,n){"focusin"===e?(nr(),Yn=n,(Qn=t).attachEvent("onpropertychange",rr)):"focusout"===e&&nr()}function ar(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Xn(Yn)}function ir(e,t){if("click"===e)return Xn(t)}function lr(e,t){if("input"===e||"change"===e)return Xn(t)}var ur="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t};function sr(e,t){if(ur(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++){var o=n[r];if(!f.call(t,o)||!ur(e[o],t[o]))return!1}return!0}function cr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function fr(e,t){var n,r=cr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=cr(r)}}function dr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?dr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function pr(){for(var e=window,t=Y();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(e){n=!1}if(!n)break;t=Y((e=t.contentWindow).document)}return t}function mr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}function hr(e){var t=pr(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&dr(n.ownerDocument.documentElement,n)){if(null!==r&&mr(n))if(t=r.start,void 0===(e=r.end)&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if((e=(t=n.ownerDocument||document)&&t.defaultView||window).getSelection){e=e.getSelection();var o=n.textContent.length,a=Math.min(r.start,o);r=void 0===r.end?a:Math.min(r.end,o),!e.extend&&a>r&&(o=r,r=a,a=o),o=fr(n,a);var i=fr(n,r);o&&i&&(1!==e.rangeCount||e.anchorNode!==o.node||e.anchorOffset!==o.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&((t=t.createRange()).setStart(o.node,o.offset),e.removeAllRanges(),a>r?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}for(t=[],e=n;e=e.parentNode;)1===e.nodeType&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for("function"==typeof n.focus&&n.focus(),n=0;n<t.length;n++)(e=t[n]).element.scrollLeft=e.left,e.element.scrollTop=e.top}}var vr=c&&"documentMode"in document&&11>=document.documentMode,gr=null,yr=null,br=null,wr=!1;function xr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;wr||null==gr||gr!==Y(r)||(r="selectionStart"in(r=gr)&&mr(r)?{start:r.selectionStart,end:r.selectionEnd}:{anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},br&&sr(br,r)||(br=r,0<(r=Qr(yr,"onSelect")).length&&(t=new cn("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=gr)))}function kr(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var Sr={animationend:kr("Animation","AnimationEnd"),animationiteration:kr("Animation","AnimationIteration"),animationstart:kr("Animation","AnimationStart"),transitionend:kr("Transition","TransitionEnd")},Er={},_r={};function Cr(e){if(Er[e])return Er[e];if(!Sr[e])return e;var t,n=Sr[e];for(t in n)if(n.hasOwnProperty(t)&&t in _r)return Er[e]=n[t];return e}c&&(_r=document.createElement("div").style,"AnimationEvent"in window||(delete Sr.animationend.animation,delete Sr.animationiteration.animation,delete Sr.animationstart.animation),"TransitionEvent"in window||delete Sr.transitionend.transition);var Pr=Cr("animationend"),Or=Cr("animationiteration"),Tr=Cr("animationstart"),Nr=Cr("transitionend"),Lr=new Map,Rr="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function Ar(e,t){Lr.set(e,t),u(t,[e])}for(var zr=0;zr<Rr.length;zr++){var Fr=Rr[zr];Ar(Fr.toLowerCase(),"on"+(Fr[0].toUpperCase()+Fr.slice(1)))}Ar(Pr,"onAnimationEnd"),Ar(Or,"onAnimationIteration"),Ar(Tr,"onAnimationStart"),Ar("dblclick","onDoubleClick"),Ar("focusin","onFocus"),Ar("focusout","onBlur"),Ar(Nr,"onTransitionEnd"),s("onMouseEnter",["mouseout","mouseover"]),s("onMouseLeave",["mouseout","mouseover"]),s("onPointerEnter",["pointerout","pointerover"]),s("onPointerLeave",["pointerout","pointerover"]),u("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),u("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),u("onBeforeInput",["compositionend","keypress","textInput","paste"]),u("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Mr="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Dr=new Set("cancel close invalid load scroll toggle".split(" ").concat(Mr));function jr(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,o,i,l,u,s){if(Ue.apply(this,arguments),Me){if(!Me)throw Error(a(198));var c=De;Me=!1,De=null,je||(je=!0,Ie=c)}}(r,t,void 0,e),e.currentTarget=null}function Ir(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var a=void 0;if(t)for(var i=r.length-1;0<=i;i--){var l=r[i],u=l.instance,s=l.currentTarget;if(l=l.listener,u!==a&&o.isPropagationStopped())break e;jr(o,l,s),a=u}else for(i=0;i<r.length;i++){if(u=(l=r[i]).instance,s=l.currentTarget,l=l.listener,u!==a&&o.isPropagationStopped())break e;jr(o,l,s),a=u}}}if(je)throw e=Ie,je=!1,Ie=null,e}function $r(e,t){var n=t[go];void 0===n&&(n=t[go]=new Set);var r=e+"__bubble";n.has(r)||(Br(t,e,2,!1),n.add(r))}function Ur(e,t,n){var r=0;t&&(r|=4),Br(n,e,r,t)}var Vr="_reactListening"+Math.random().toString(36).slice(2);function Hr(e){if(!e[Vr]){e[Vr]=!0,i.forEach((function(t){"selectionchange"!==t&&(Dr.has(t)||Ur(t,!1,e),Ur(t,!0,e))}));var t=9===e.nodeType?e:e.ownerDocument;null===t||t[Vr]||(t[Vr]=!0,Ur("selectionchange",!1,t))}}function Br(e,t,n,r){switch(Xt(t)){case 1:var o=Wt;break;case 4:o=qt;break;default:o=Qt}n=o.bind(null,t,n,e),o=void 0,!Ae||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(o=!0),r?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function Wr(e,t,n,r,o){var a=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var l=r.stateNode.containerInfo;if(l===o||8===l.nodeType&&l.parentNode===o)break;if(4===i)for(i=r.return;null!==i;){var u=i.tag;if((3===u||4===u)&&((u=i.stateNode.containerInfo)===o||8===u.nodeType&&u.parentNode===o))return;i=i.return}for(;null!==l;){if(null===(i=wo(l)))return;if(5===(u=i.tag)||6===u){r=a=i;continue e}l=l.parentNode}}r=r.return}Le((function(){var r=a,o=xe(n),i=[];e:{var l=Lr.get(e);if(void 0!==l){var u=cn,s=e;switch(e){case"keypress":if(0===tn(n))break e;case"keydown":case"keyup":u=On;break;case"focusin":s="focus",u=vn;break;case"focusout":s="blur",u=vn;break;case"beforeblur":case"afterblur":u=vn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":u=mn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":u=hn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":u=Nn;break;case Pr:case Or:case Tr:u=gn;break;case Nr:u=Ln;break;case"scroll":u=dn;break;case"wheel":u=An;break;case"copy":case"cut":case"paste":u=bn;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":u=Tn}var c=0!=(4&t),f=!c&&"scroll"===e,d=c?null!==l?l+"Capture":null:l;c=[];for(var p,m=r;null!==m;){var h=(p=m).stateNode;if(5===p.tag&&null!==h&&(p=h,null!==d&&null!=(h=Re(m,d))&&c.push(qr(m,h,p))),f)break;m=m.return}0<c.length&&(l=new u(l,s,null,n,o),i.push({event:l,listeners:c}))}}if(0==(7&t)){if(u="mouseout"===e||"pointerout"===e,(!(l="mouseover"===e||"pointerover"===e)||n===we||!(s=n.relatedTarget||n.fromElement)||!wo(s)&&!s[vo])&&(u||l)&&(l=o.window===o?o:(l=o.ownerDocument)?l.defaultView||l.parentWindow:window,u?(u=r,null!==(s=(s=n.relatedTarget||n.toElement)?wo(s):null)&&(s!==(f=Ve(s))||5!==s.tag&&6!==s.tag)&&(s=null)):(u=null,s=r),u!==s)){if(c=mn,h="onMouseLeave",d="onMouseEnter",m="mouse","pointerout"!==e&&"pointerover"!==e||(c=Tn,h="onPointerLeave",d="onPointerEnter",m="pointer"),f=null==u?l:ko(u),p=null==s?l:ko(s),(l=new c(h,m+"leave",u,n,o)).target=f,l.relatedTarget=p,h=null,wo(o)===r&&((c=new c(d,m+"enter",s,n,o)).target=p,c.relatedTarget=f,h=c),f=h,u&&s)e:{for(d=s,m=0,p=c=u;p;p=Yr(p))m++;for(p=0,h=d;h;h=Yr(h))p++;for(;0<m-p;)c=Yr(c),m--;for(;0<p-m;)d=Yr(d),p--;for(;m--;){if(c===d||null!==d&&c===d.alternate)break e;c=Yr(c),d=Yr(d)}c=null}else c=null;null!==u&&Kr(i,l,u,c,!1),null!==s&&null!==f&&Kr(i,f,s,c,!0)}if("select"===(u=(l=r?ko(r):window).nodeName&&l.nodeName.toLowerCase())||"input"===u&&"file"===l.type)var v=Gn;else if(Wn(l))if(Zn)v=lr;else{v=ar;var g=or}else(u=l.nodeName)&&"input"===u.toLowerCase()&&("checkbox"===l.type||"radio"===l.type)&&(v=ir);switch(v&&(v=v(e,r))?qn(i,v,n,o):(g&&g(e,l,r),"focusout"===e&&(g=l._wrapperState)&&g.controlled&&"number"===l.type&&ee(l,"number",l.value)),g=r?ko(r):window,e){case"focusin":(Wn(g)||"true"===g.contentEditable)&&(gr=g,yr=r,br=null);break;case"focusout":br=yr=gr=null;break;case"mousedown":wr=!0;break;case"contextmenu":case"mouseup":case"dragend":wr=!1,xr(i,n,o);break;case"selectionchange":if(vr)break;case"keydown":case"keyup":xr(i,n,o)}var y;if(Fn)e:{switch(e){case"compositionstart":var b="onCompositionStart";break e;case"compositionend":b="onCompositionEnd";break e;case"compositionupdate":b="onCompositionUpdate";break e}b=void 0}else Hn?Un(e,n)&&(b="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(b="onCompositionStart");b&&(jn&&"ko"!==n.locale&&(Hn||"onCompositionStart"!==b?"onCompositionEnd"===b&&Hn&&(y=en()):(Zt="value"in(Gt=o)?Gt.value:Gt.textContent,Hn=!0)),0<(g=Qr(r,b)).length&&(b=new wn(b,e,null,n,o),i.push({event:b,listeners:g}),(y||null!==(y=Vn(n)))&&(b.data=y))),(y=Dn?function(e,t){switch(e){case"compositionend":return Vn(t);case"keypress":return 32!==t.which?null:($n=!0,In);case"textInput":return(e=t.data)===In&&$n?null:e;default:return null}}(e,n):function(e,t){if(Hn)return"compositionend"===e||!Fn&&Un(e,t)?(e=en(),Jt=Zt=Gt=null,Hn=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return jn&&"ko"!==t.locale?null:t.data}}(e,n))&&0<(r=Qr(r,"onBeforeInput")).length&&(o=new wn("onBeforeInput","beforeinput",null,n,o),i.push({event:o,listeners:r}),o.data=y)}Ir(i,t)}))}function qr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Qr(e,t){for(var n=t+"Capture",r=[];null!==e;){var o=e,a=o.stateNode;5===o.tag&&null!==a&&(o=a,null!=(a=Re(e,n))&&r.unshift(qr(e,a,o)),null!=(a=Re(e,t))&&r.push(qr(e,a,o))),e=e.return}return r}function Yr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Kr(e,t,n,r,o){for(var a=t._reactName,i=[];null!==n&&n!==r;){var l=n,u=l.alternate,s=l.stateNode;if(null!==u&&u===r)break;5===l.tag&&null!==s&&(l=s,o?null!=(u=Re(n,a))&&i.unshift(qr(n,u,l)):o||null!=(u=Re(n,a))&&i.push(qr(n,u,l))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}var Xr=/\r\n?/g,Gr=/\u0000|\uFFFD/g;function Zr(e){return("string"==typeof e?e:""+e).replace(Xr,"\n").replace(Gr,"")}function Jr(e,t,n){if(t=Zr(t),Zr(e)!==t&&n)throw Error(a(425))}function eo(){}var to=null,no=null;function ro(e,t){return"textarea"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var oo="function"==typeof setTimeout?setTimeout:void 0,ao="function"==typeof clearTimeout?clearTimeout:void 0,io="function"==typeof Promise?Promise:void 0,lo="function"==typeof queueMicrotask?queueMicrotask:void 0!==io?function(e){return io.resolve(null).then(e).catch(uo)}:oo;function uo(e){setTimeout((function(){throw e}))}function so(e,t){var n=t,r=0;do{var o=n.nextSibling;if(e.removeChild(n),o&&8===o.nodeType)if("/$"===(n=o.data)){if(0===r)return e.removeChild(o),void Vt(t);r--}else"$"!==n&&"$?"!==n&&"$!"!==n||r++;n=o}while(n);Vt(t)}function co(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break;if(8===t){if("$"===(t=e.data)||"$!"===t||"$?"===t)break;if("/$"===t)return null}}return e}function fo(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var po=Math.random().toString(36).slice(2),mo="__reactFiber$"+po,ho="__reactProps$"+po,vo="__reactContainer$"+po,go="__reactEvents$"+po,yo="__reactListeners$"+po,bo="__reactHandles$"+po;function wo(e){var t=e[mo];if(t)return t;for(var n=e.parentNode;n;){if(t=n[vo]||n[mo]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=fo(e);null!==e;){if(n=e[mo])return n;e=fo(e)}return t}n=(e=n).parentNode}return null}function xo(e){return!(e=e[mo]||e[vo])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function ko(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(a(33))}function So(e){return e[ho]||null}var Eo=[],_o=-1;function Co(e){return{current:e}}function Po(e){0>_o||(e.current=Eo[_o],Eo[_o]=null,_o--)}function Oo(e,t){_o++,Eo[_o]=e.current,e.current=t}var To={},No=Co(To),Lo=Co(!1),Ro=To;function Ao(e,t){var n=e.type.contextTypes;if(!n)return To;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,a={};for(o in n)a[o]=t[o];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function zo(e){return null!=e.childContextTypes}function Fo(){Po(Lo),Po(No)}function Mo(e,t,n){if(No.current!==To)throw Error(a(168));Oo(No,t),Oo(Lo,n)}function Do(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var o in r=r.getChildContext())if(!(o in t))throw Error(a(108,H(e)||"Unknown",o));return D({},n,r)}function jo(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||To,Ro=No.current,Oo(No,e),Oo(Lo,Lo.current),!0}function Io(e,t,n){var r=e.stateNode;if(!r)throw Error(a(169));n?(e=Do(e,t,Ro),r.__reactInternalMemoizedMergedChildContext=e,Po(Lo),Po(No),Oo(No,e)):Po(Lo),Oo(Lo,n)}var $o=null,Uo=!1,Vo=!1;function Ho(e){null===$o?$o=[e]:$o.push(e)}function Bo(){if(!Vo&&null!==$o){Vo=!0;var e=0,t=bt;try{var n=$o;for(bt=1;e<n.length;e++){var r=n[e];do{r=r(!0)}while(null!==r)}$o=null,Uo=!1}catch(t){throw null!==$o&&($o=$o.slice(e+1)),Qe(Je,Bo),t}finally{bt=t,Vo=!1}}return null}var Wo=[],qo=0,Qo=null,Yo=0,Ko=[],Xo=0,Go=null,Zo=1,Jo="";function ea(e,t){Wo[qo++]=Yo,Wo[qo++]=Qo,Qo=e,Yo=t}function ta(e,t,n){Ko[Xo++]=Zo,Ko[Xo++]=Jo,Ko[Xo++]=Go,Go=e;var r=Zo;e=Jo;var o=32-it(r)-1;r&=~(1<<o),n+=1;var a=32-it(t)+o;if(30<a){var i=o-o%5;a=(r&(1<<i)-1).toString(32),r>>=i,o-=i,Zo=1<<32-it(t)+o|n<<o|r,Jo=a+e}else Zo=1<<a|n<<o|r,Jo=e}function na(e){null!==e.return&&(ea(e,1),ta(e,1,0))}function ra(e){for(;e===Qo;)Qo=Wo[--qo],Wo[qo]=null,Yo=Wo[--qo],Wo[qo]=null;for(;e===Go;)Go=Ko[--Xo],Ko[Xo]=null,Jo=Ko[--Xo],Ko[Xo]=null,Zo=Ko[--Xo],Ko[Xo]=null}var oa=null,aa=null,ia=!1,la=null;function ua(e,t){var n=As(5,null,null,0);n.elementType="DELETED",n.stateNode=t,n.return=e,null===(t=e.deletions)?(e.deletions=[n],e.flags|=16):t.push(n)}function sa(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,oa=e,aa=co(t.firstChild),!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,oa=e,aa=null,!0);case 13:return null!==(t=8!==t.nodeType?null:t)&&(n=null!==Go?{id:Zo,overflow:Jo}:null,e.memoizedState={dehydrated:t,treeContext:n,retryLane:1073741824},(n=As(18,null,null,0)).stateNode=t,n.return=e,e.child=n,oa=e,aa=null,!0);default:return!1}}function ca(e){return 0!=(1&e.mode)&&0==(128&e.flags)}function fa(e){if(ia){var t=aa;if(t){var n=t;if(!sa(e,t)){if(ca(e))throw Error(a(418));t=co(n.nextSibling);var r=oa;t&&sa(e,t)?ua(r,n):(e.flags=-4097&e.flags|2,ia=!1,oa=e)}}else{if(ca(e))throw Error(a(418));e.flags=-4097&e.flags|2,ia=!1,oa=e}}}function da(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;oa=e}function pa(e){if(e!==oa)return!1;if(!ia)return da(e),ia=!0,!1;var t;if((t=3!==e.tag)&&!(t=5!==e.tag)&&(t="head"!==(t=e.type)&&"body"!==t&&!ro(e.type,e.memoizedProps)),t&&(t=aa)){if(ca(e))throw ma(),Error(a(418));for(;t;)ua(e,t),t=co(t.nextSibling)}if(da(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(a(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){aa=co(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}aa=null}}else aa=oa?co(e.stateNode.nextSibling):null;return!0}function ma(){for(var e=aa;e;)e=co(e.nextSibling)}function ha(){aa=oa=null,ia=!1}function va(e){null===la?la=[e]:la.push(e)}var ga=w.ReactCurrentBatchConfig;function ya(e,t){if(e&&e.defaultProps){for(var n in t=D({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var ba=Co(null),wa=null,xa=null,ka=null;function Sa(){ka=xa=wa=null}function Ea(e){var t=ba.current;Po(ba),e._currentValue=t}function _a(e,t,n){for(;null!==e;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,null!==r&&(r.childLanes|=t)):null!==r&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function Ca(e,t){wa=e,ka=xa=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(xl=!0),e.firstContext=null)}function Pa(e){var t=e._currentValue;if(ka!==e)if(e={context:e,memoizedValue:t,next:null},null===xa){if(null===wa)throw Error(a(308));xa=e,wa.dependencies={lanes:0,firstContext:e}}else xa=xa.next=e;return t}var Oa=null;function Ta(e){null===Oa?Oa=[e]:Oa.push(e)}function Na(e,t,n,r){var o=t.interleaved;return null===o?(n.next=n,Ta(t)):(n.next=o.next,o.next=n),t.interleaved=n,La(e,r)}function La(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}var Ra=!1;function Aa(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function za(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Fa(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Ma(e,t,n){var r=e.updateQueue;if(null===r)return null;if(r=r.shared,0!=(2&Nu)){var o=r.pending;return null===o?t.next=t:(t.next=o.next,o.next=t),r.pending=t,La(e,n)}return null===(o=r.interleaved)?(t.next=t,Ta(r)):(t.next=o.next,o.next=t),r.interleaved=t,La(e,n)}function Da(e,t,n){if(null!==(t=t.updateQueue)&&(t=t.shared,0!=(4194240&n))){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,yt(e,n)}}function ja(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,a=null;if(null!==(n=n.firstBaseUpdate)){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===a?o=a=i:a=a.next=i,n=n.next}while(null!==n);null===a?o=a=t:a=a.next=t}else o=a=t;return n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Ia(e,t,n,r){var o=e.updateQueue;Ra=!1;var a=o.firstBaseUpdate,i=o.lastBaseUpdate,l=o.shared.pending;if(null!==l){o.shared.pending=null;var u=l,s=u.next;u.next=null,null===i?a=s:i.next=s,i=u;var c=e.alternate;null!==c&&(l=(c=c.updateQueue).lastBaseUpdate)!==i&&(null===l?c.firstBaseUpdate=s:l.next=s,c.lastBaseUpdate=u)}if(null!==a){var f=o.baseState;for(i=0,c=s=u=null,l=a;;){var d=l.lane,p=l.eventTime;if((r&d)===d){null!==c&&(c=c.next={eventTime:p,lane:0,tag:l.tag,payload:l.payload,callback:l.callback,next:null});e:{var m=e,h=l;switch(d=t,p=n,h.tag){case 1:if("function"==typeof(m=h.payload)){f=m.call(p,f,d);break e}f=m;break e;case 3:m.flags=-65537&m.flags|128;case 0:if(null==(d="function"==typeof(m=h.payload)?m.call(p,f,d):m))break e;f=D({},f,d);break e;case 2:Ra=!0}}null!==l.callback&&0!==l.lane&&(e.flags|=64,null===(d=o.effects)?o.effects=[l]:d.push(l))}else p={eventTime:p,lane:d,tag:l.tag,payload:l.payload,callback:l.callback,next:null},null===c?(s=c=p,u=f):c=c.next=p,i|=d;if(null===(l=l.next)){if(null===(l=o.shared.pending))break;l=(d=l).next,d.next=null,o.lastBaseUpdate=d,o.shared.pending=null}}if(null===c&&(u=f),o.baseState=u,o.firstBaseUpdate=s,o.lastBaseUpdate=c,null!==(t=o.shared.interleaved)){o=t;do{i|=o.lane,o=o.next}while(o!==t)}else null===a&&(o.shared.lanes=0);ju|=i,e.lanes=i,e.memoizedState=f}}function $a(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],o=r.callback;if(null!==o){if(r.callback=null,r=n,"function"!=typeof o)throw Error(a(191,o));o.call(r)}}}var Ua=(new r.Component).refs;function Va(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:D({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var Ha={isMounted:function(e){return!!(e=e._reactInternals)&&Ve(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=ns(),o=rs(e),a=Fa(r,o);a.payload=t,null!=n&&(a.callback=n),null!==(t=Ma(e,a,o))&&(os(t,e,o,r),Da(t,e,o))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=ns(),o=rs(e),a=Fa(r,o);a.tag=1,a.payload=t,null!=n&&(a.callback=n),null!==(t=Ma(e,a,o))&&(os(t,e,o,r),Da(t,e,o))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=ns(),r=rs(e),o=Fa(n,r);o.tag=2,null!=t&&(o.callback=t),null!==(t=Ma(e,o,r))&&(os(t,e,r,n),Da(t,e,r))}};function Ba(e,t,n,r,o,a,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,i):!(t.prototype&&t.prototype.isPureReactComponent&&sr(n,r)&&sr(o,a))}function Wa(e,t,n){var r=!1,o=To,a=t.contextType;return"object"==typeof a&&null!==a?a=Pa(a):(o=zo(t)?Ro:No.current,a=(r=null!=(r=t.contextTypes))?Ao(e,o):To),t=new t(n,a),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=Ha,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=a),t}function qa(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&Ha.enqueueReplaceState(t,t.state,null)}function Qa(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs=Ua,Aa(e);var a=t.contextType;"object"==typeof a&&null!==a?o.context=Pa(a):(a=zo(t)?Ro:No.current,o.context=Ao(e,a)),o.state=e.memoizedState,"function"==typeof(a=t.getDerivedStateFromProps)&&(Va(e,t,a,n),o.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof o.getSnapshotBeforeUpdate||"function"!=typeof o.UNSAFE_componentWillMount&&"function"!=typeof o.componentWillMount||(t=o.state,"function"==typeof o.componentWillMount&&o.componentWillMount(),"function"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&Ha.enqueueReplaceState(o,o.state,null),Ia(e,n,o,r),o.state=e.memoizedState),"function"==typeof o.componentDidMount&&(e.flags|=4194308)}function Ya(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(a(309));var r=n.stateNode}if(!r)throw Error(a(147,e));var o=r,i=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===i?t.ref:(t=function(e){var t=o.refs;t===Ua&&(t=o.refs={}),null===e?delete t[i]:t[i]=e},t._stringRef=i,t)}if("string"!=typeof e)throw Error(a(284));if(!n._owner)throw Error(a(290,e))}return e}function Ka(e,t){throw e=Object.prototype.toString.call(t),Error(a(31,"[object Object]"===e?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function Xa(e){return(0,e._init)(e._payload)}function Ga(e){function t(t,n){if(e){var r=t.deletions;null===r?(t.deletions=[n],t.flags|=16):r.push(n)}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=Fs(e,t)).index=0,e.sibling=null,e}function i(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags|=2,n):r:(t.flags|=2,n):(t.flags|=1048576,n)}function l(t){return e&&null===t.alternate&&(t.flags|=2),t}function u(e,t,n,r){return null===t||6!==t.tag?((t=Is(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function s(e,t,n,r){var a=n.type;return a===S?f(e,t,n.props.children,r,n.key):null!==t&&(t.elementType===a||"object"==typeof a&&null!==a&&a.$$typeof===R&&Xa(a)===t.type)?((r=o(t,n.props)).ref=Ya(e,t,n),r.return=e,r):((r=Ms(n.type,n.key,n.props,null,e.mode,r)).ref=Ya(e,t,n),r.return=e,r)}function c(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=$s(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function f(e,t,n,r,a){return null===t||7!==t.tag?((t=Ds(n,e.mode,r,a)).return=e,t):((t=o(t,n)).return=e,t)}function d(e,t,n){if("string"==typeof t&&""!==t||"number"==typeof t)return(t=Is(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case x:return(n=Ms(t.type,t.key,t.props,null,e.mode,n)).ref=Ya(e,null,t),n.return=e,n;case k:return(t=$s(t,e.mode,n)).return=e,t;case R:return d(e,(0,t._init)(t._payload),n)}if(te(t)||F(t))return(t=Ds(t,e.mode,n,null)).return=e,t;Ka(e,t)}return null}function p(e,t,n,r){var o=null!==t?t.key:null;if("string"==typeof n&&""!==n||"number"==typeof n)return null!==o?null:u(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case x:return n.key===o?s(e,t,n,r):null;case k:return n.key===o?c(e,t,n,r):null;case R:return p(e,t,(o=n._init)(n._payload),r)}if(te(n)||F(n))return null!==o?null:f(e,t,n,r,null);Ka(e,n)}return null}function m(e,t,n,r,o){if("string"==typeof r&&""!==r||"number"==typeof r)return u(t,e=e.get(n)||null,""+r,o);if("object"==typeof r&&null!==r){switch(r.$$typeof){case x:return s(t,e=e.get(null===r.key?n:r.key)||null,r,o);case k:return c(t,e=e.get(null===r.key?n:r.key)||null,r,o);case R:return m(e,t,n,(0,r._init)(r._payload),o)}if(te(r)||F(r))return f(t,e=e.get(n)||null,r,o,null);Ka(t,r)}return null}function h(o,a,l,u){for(var s=null,c=null,f=a,h=a=0,v=null;null!==f&&h<l.length;h++){f.index>h?(v=f,f=null):v=f.sibling;var g=p(o,f,l[h],u);if(null===g){null===f&&(f=v);break}e&&f&&null===g.alternate&&t(o,f),a=i(g,a,h),null===c?s=g:c.sibling=g,c=g,f=v}if(h===l.length)return n(o,f),ia&&ea(o,h),s;if(null===f){for(;h<l.length;h++)null!==(f=d(o,l[h],u))&&(a=i(f,a,h),null===c?s=f:c.sibling=f,c=f);return ia&&ea(o,h),s}for(f=r(o,f);h<l.length;h++)null!==(v=m(f,o,h,l[h],u))&&(e&&null!==v.alternate&&f.delete(null===v.key?h:v.key),a=i(v,a,h),null===c?s=v:c.sibling=v,c=v);return e&&f.forEach((function(e){return t(o,e)})),ia&&ea(o,h),s}function v(o,l,u,s){var c=F(u);if("function"!=typeof c)throw Error(a(150));if(null==(u=c.call(u)))throw Error(a(151));for(var f=c=null,h=l,v=l=0,g=null,y=u.next();null!==h&&!y.done;v++,y=u.next()){h.index>v?(g=h,h=null):g=h.sibling;var b=p(o,h,y.value,s);if(null===b){null===h&&(h=g);break}e&&h&&null===b.alternate&&t(o,h),l=i(b,l,v),null===f?c=b:f.sibling=b,f=b,h=g}if(y.done)return n(o,h),ia&&ea(o,v),c;if(null===h){for(;!y.done;v++,y=u.next())null!==(y=d(o,y.value,s))&&(l=i(y,l,v),null===f?c=y:f.sibling=y,f=y);return ia&&ea(o,v),c}for(h=r(o,h);!y.done;v++,y=u.next())null!==(y=m(h,o,v,y.value,s))&&(e&&null!==y.alternate&&h.delete(null===y.key?v:y.key),l=i(y,l,v),null===f?c=y:f.sibling=y,f=y);return e&&h.forEach((function(e){return t(o,e)})),ia&&ea(o,v),c}return function e(r,a,i,u){if("object"==typeof i&&null!==i&&i.type===S&&null===i.key&&(i=i.props.children),"object"==typeof i&&null!==i){switch(i.$$typeof){case x:e:{for(var s=i.key,c=a;null!==c;){if(c.key===s){if((s=i.type)===S){if(7===c.tag){n(r,c.sibling),(a=o(c,i.props.children)).return=r,r=a;break e}}else if(c.elementType===s||"object"==typeof s&&null!==s&&s.$$typeof===R&&Xa(s)===c.type){n(r,c.sibling),(a=o(c,i.props)).ref=Ya(r,c,i),a.return=r,r=a;break e}n(r,c);break}t(r,c),c=c.sibling}i.type===S?((a=Ds(i.props.children,r.mode,u,i.key)).return=r,r=a):((u=Ms(i.type,i.key,i.props,null,r.mode,u)).ref=Ya(r,a,i),u.return=r,r=u)}return l(r);case k:e:{for(c=i.key;null!==a;){if(a.key===c){if(4===a.tag&&a.stateNode.containerInfo===i.containerInfo&&a.stateNode.implementation===i.implementation){n(r,a.sibling),(a=o(a,i.children||[])).return=r,r=a;break e}n(r,a);break}t(r,a),a=a.sibling}(a=$s(i,r.mode,u)).return=r,r=a}return l(r);case R:return e(r,a,(c=i._init)(i._payload),u)}if(te(i))return h(r,a,i,u);if(F(i))return v(r,a,i,u);Ka(r,i)}return"string"==typeof i&&""!==i||"number"==typeof i?(i=""+i,null!==a&&6===a.tag?(n(r,a.sibling),(a=o(a,i)).return=r,r=a):(n(r,a),(a=Is(i,r.mode,u)).return=r,r=a),l(r)):n(r,a)}}var Za=Ga(!0),Ja=Ga(!1),ei={},ti=Co(ei),ni=Co(ei),ri=Co(ei);function oi(e){if(e===ei)throw Error(a(174));return e}function ai(e,t){switch(Oo(ri,t),Oo(ni,e),Oo(ti,ei),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:ue(null,"");break;default:t=ue(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}Po(ti),Oo(ti,t)}function ii(){Po(ti),Po(ni),Po(ri)}function li(e){oi(ri.current);var t=oi(ti.current),n=ue(t,e.type);t!==n&&(Oo(ni,e),Oo(ti,n))}function ui(e){ni.current===e&&(Po(ti),Po(ni))}var si=Co(0);function ci(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(128&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var fi=[];function di(){for(var e=0;e<fi.length;e++)fi[e]._workInProgressVersionPrimary=null;fi.length=0}var pi=w.ReactCurrentDispatcher,mi=w.ReactCurrentBatchConfig,hi=0,vi=null,gi=null,yi=null,bi=!1,wi=!1,xi=0,ki=0;function Si(){throw Error(a(321))}function Ei(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!ur(e[n],t[n]))return!1;return!0}function _i(e,t,n,r,o,i){if(hi=i,vi=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,pi.current=null===e||null===e.memoizedState?ul:sl,e=n(r,o),wi){i=0;do{if(wi=!1,xi=0,25<=i)throw Error(a(301));i+=1,yi=gi=null,t.updateQueue=null,pi.current=cl,e=n(r,o)}while(wi)}if(pi.current=ll,t=null!==gi&&null!==gi.next,hi=0,yi=gi=vi=null,bi=!1,t)throw Error(a(300));return e}function Ci(){var e=0!==xi;return xi=0,e}function Pi(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===yi?vi.memoizedState=yi=e:yi=yi.next=e,yi}function Oi(){if(null===gi){var e=vi.alternate;e=null!==e?e.memoizedState:null}else e=gi.next;var t=null===yi?vi.memoizedState:yi.next;if(null!==t)yi=t,gi=e;else{if(null===e)throw Error(a(310));e={memoizedState:(gi=e).memoizedState,baseState:gi.baseState,baseQueue:gi.baseQueue,queue:gi.queue,next:null},null===yi?vi.memoizedState=yi=e:yi=yi.next=e}return yi}function Ti(e,t){return"function"==typeof t?t(e):t}function Ni(e){var t=Oi(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var r=gi,o=r.baseQueue,i=n.pending;if(null!==i){if(null!==o){var l=o.next;o.next=i.next,i.next=l}r.baseQueue=o=i,n.pending=null}if(null!==o){i=o.next,r=r.baseState;var u=l=null,s=null,c=i;do{var f=c.lane;if((hi&f)===f)null!==s&&(s=s.next={lane:0,action:c.action,hasEagerState:c.hasEagerState,eagerState:c.eagerState,next:null}),r=c.hasEagerState?c.eagerState:e(r,c.action);else{var d={lane:f,action:c.action,hasEagerState:c.hasEagerState,eagerState:c.eagerState,next:null};null===s?(u=s=d,l=r):s=s.next=d,vi.lanes|=f,ju|=f}c=c.next}while(null!==c&&c!==i);null===s?l=r:s.next=u,ur(r,t.memoizedState)||(xl=!0),t.memoizedState=r,t.baseState=l,t.baseQueue=s,n.lastRenderedState=r}if(null!==(e=n.interleaved)){o=e;do{i=o.lane,vi.lanes|=i,ju|=i,o=o.next}while(o!==e)}else null===o&&(n.lanes=0);return[t.memoizedState,n.dispatch]}function Li(e){var t=Oi(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,i=t.memoizedState;if(null!==o){n.pending=null;var l=o=o.next;do{i=e(i,l.action),l=l.next}while(l!==o);ur(i,t.memoizedState)||(xl=!0),t.memoizedState=i,null===t.baseQueue&&(t.baseState=i),n.lastRenderedState=i}return[i,r]}function Ri(){}function Ai(e,t){var n=vi,r=Oi(),o=t(),i=!ur(r.memoizedState,o);if(i&&(r.memoizedState=o,xl=!0),r=r.queue,Wi(Mi.bind(null,n,r,e),[e]),r.getSnapshot!==t||i||null!==yi&&1&yi.memoizedState.tag){if(n.flags|=2048,$i(9,Fi.bind(null,n,r,o,t),void 0,null),null===Lu)throw Error(a(349));0!=(30&hi)||zi(n,t,o)}return o}function zi(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},null===(t=vi.updateQueue)?(t={lastEffect:null,stores:null},vi.updateQueue=t,t.stores=[e]):null===(n=t.stores)?t.stores=[e]:n.push(e)}function Fi(e,t,n,r){t.value=n,t.getSnapshot=r,Di(t)&&ji(e)}function Mi(e,t,n){return n((function(){Di(t)&&ji(e)}))}function Di(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!ur(e,n)}catch(e){return!0}}function ji(e){var t=La(e,1);null!==t&&os(t,e,1,-1)}function Ii(e){var t=Pi();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Ti,lastRenderedState:e},t.queue=e,e=e.dispatch=rl.bind(null,vi,e),[t.memoizedState,e]}function $i(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=vi.updateQueue)?(t={lastEffect:null,stores:null},vi.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function Ui(){return Oi().memoizedState}function Vi(e,t,n,r){var o=Pi();vi.flags|=e,o.memoizedState=$i(1|t,n,void 0,void 0===r?null:r)}function Hi(e,t,n,r){var o=Oi();r=void 0===r?null:r;var a=void 0;if(null!==gi){var i=gi.memoizedState;if(a=i.destroy,null!==r&&Ei(r,i.deps))return void(o.memoizedState=$i(t,n,a,r))}vi.flags|=e,o.memoizedState=$i(1|t,n,a,r)}function Bi(e,t){return Vi(8390656,8,e,t)}function Wi(e,t){return Hi(2048,8,e,t)}function qi(e,t){return Hi(4,2,e,t)}function Qi(e,t){return Hi(4,4,e,t)}function Yi(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function Ki(e,t,n){return n=null!=n?n.concat([e]):null,Hi(4,4,Yi.bind(null,t,e),n)}function Xi(){}function Gi(e,t){var n=Oi();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&Ei(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Zi(e,t){var n=Oi();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&Ei(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Ji(e,t,n){return 0==(21&hi)?(e.baseState&&(e.baseState=!1,xl=!0),e.memoizedState=n):(ur(n,t)||(n=ht(),vi.lanes|=n,ju|=n,e.baseState=!0),t)}function el(e,t){var n=bt;bt=0!==n&&4>n?n:4,e(!0);var r=mi.transition;mi.transition={};try{e(!1),t()}finally{bt=n,mi.transition=r}}function tl(){return Oi().memoizedState}function nl(e,t,n){var r=rs(e);n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},ol(e)?al(t,n):null!==(n=Na(e,t,n,r))&&(os(n,e,r,ns()),il(n,t,r))}function rl(e,t,n){var r=rs(e),o={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(ol(e))al(t,o);else{var a=e.alternate;if(0===e.lanes&&(null===a||0===a.lanes)&&null!==(a=t.lastRenderedReducer))try{var i=t.lastRenderedState,l=a(i,n);if(o.hasEagerState=!0,o.eagerState=l,ur(l,i)){var u=t.interleaved;return null===u?(o.next=o,Ta(t)):(o.next=u.next,u.next=o),void(t.interleaved=o)}}catch(e){}null!==(n=Na(e,t,o,r))&&(os(n,e,r,o=ns()),il(n,t,r))}}function ol(e){var t=e.alternate;return e===vi||null!==t&&t===vi}function al(e,t){wi=bi=!0;var n=e.pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function il(e,t,n){if(0!=(4194240&n)){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,yt(e,n)}}var ll={readContext:Pa,useCallback:Si,useContext:Si,useEffect:Si,useImperativeHandle:Si,useInsertionEffect:Si,useLayoutEffect:Si,useMemo:Si,useReducer:Si,useRef:Si,useState:Si,useDebugValue:Si,useDeferredValue:Si,useTransition:Si,useMutableSource:Si,useSyncExternalStore:Si,useId:Si,unstable_isNewReconciler:!1},ul={readContext:Pa,useCallback:function(e,t){return Pi().memoizedState=[e,void 0===t?null:t],e},useContext:Pa,useEffect:Bi,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,Vi(4194308,4,Yi.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Vi(4194308,4,e,t)},useInsertionEffect:function(e,t){return Vi(4,2,e,t)},useMemo:function(e,t){var n=Pi();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Pi();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=nl.bind(null,vi,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},Pi().memoizedState=e},useState:Ii,useDebugValue:Xi,useDeferredValue:function(e){return Pi().memoizedState=e},useTransition:function(){var e=Ii(!1),t=e[0];return e=el.bind(null,e[1]),Pi().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=vi,o=Pi();if(ia){if(void 0===n)throw Error(a(407));n=n()}else{if(n=t(),null===Lu)throw Error(a(349));0!=(30&hi)||zi(r,t,n)}o.memoizedState=n;var i={value:n,getSnapshot:t};return o.queue=i,Bi(Mi.bind(null,r,i,e),[e]),r.flags|=2048,$i(9,Fi.bind(null,r,i,n,t),void 0,null),n},useId:function(){var e=Pi(),t=Lu.identifierPrefix;if(ia){var n=Jo;t=":"+t+"R"+(n=(Zo&~(1<<32-it(Zo)-1)).toString(32)+n),0<(n=xi++)&&(t+="H"+n.toString(32)),t+=":"}else t=":"+t+"r"+(n=ki++).toString(32)+":";return e.memoizedState=t},unstable_isNewReconciler:!1},sl={readContext:Pa,useCallback:Gi,useContext:Pa,useEffect:Wi,useImperativeHandle:Ki,useInsertionEffect:qi,useLayoutEffect:Qi,useMemo:Zi,useReducer:Ni,useRef:Ui,useState:function(){return Ni(Ti)},useDebugValue:Xi,useDeferredValue:function(e){return Ji(Oi(),gi.memoizedState,e)},useTransition:function(){return[Ni(Ti)[0],Oi().memoizedState]},useMutableSource:Ri,useSyncExternalStore:Ai,useId:tl,unstable_isNewReconciler:!1},cl={readContext:Pa,useCallback:Gi,useContext:Pa,useEffect:Wi,useImperativeHandle:Ki,useInsertionEffect:qi,useLayoutEffect:Qi,useMemo:Zi,useReducer:Li,useRef:Ui,useState:function(){return Li(Ti)},useDebugValue:Xi,useDeferredValue:function(e){var t=Oi();return null===gi?t.memoizedState=e:Ji(t,gi.memoizedState,e)},useTransition:function(){return[Li(Ti)[0],Oi().memoizedState]},useMutableSource:Ri,useSyncExternalStore:Ai,useId:tl,unstable_isNewReconciler:!1};function fl(e,t){try{var n="",r=t;do{n+=U(r),r=r.return}while(r);var o=n}catch(e){o="\nError generating stack: "+e.message+"\n"+e.stack}return{value:e,source:t,stack:o,digest:null}}function dl(e,t,n){return{value:e,source:null,stack:null!=n?n:null,digest:null!=t?t:null}}function pl(e,t){try{console.error(t.value)}catch(e){setTimeout((function(){throw e}))}}var ml="function"==typeof WeakMap?WeakMap:Map;function hl(e,t,n){(n=Fa(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){qu||(qu=!0,Qu=r),pl(0,t)},n}function vl(e,t,n){(n=Fa(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var o=t.value;n.payload=function(){return r(o)},n.callback=function(){pl(0,t)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(n.callback=function(){pl(0,t),"function"!=typeof r&&(null===Yu?Yu=new Set([this]):Yu.add(this));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}function gl(e,t,n){var r=e.pingCache;if(null===r){r=e.pingCache=new ml;var o=new Set;r.set(t,o)}else void 0===(o=r.get(t))&&(o=new Set,r.set(t,o));o.has(n)||(o.add(n),e=Ps.bind(null,e,t,n),t.then(e,e))}function yl(e){do{var t;if((t=13===e.tag)&&(t=null===(t=e.memoizedState)||null!==t.dehydrated),t)return e;e=e.return}while(null!==e);return null}function bl(e,t,n,r,o){return 0==(1&e.mode)?(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,1===n.tag&&(null===n.alternate?n.tag=17:((t=Fa(-1,1)).tag=2,Ma(n,t,1))),n.lanes|=1),e):(e.flags|=65536,e.lanes=o,e)}var wl=w.ReactCurrentOwner,xl=!1;function kl(e,t,n,r){t.child=null===e?Ja(t,null,n,r):Za(t,e.child,n,r)}function Sl(e,t,n,r,o){n=n.render;var a=t.ref;return Ca(t,o),r=_i(e,t,n,r,a,o),n=Ci(),null===e||xl?(ia&&n&&na(t),t.flags|=1,kl(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,ql(e,t,o))}function El(e,t,n,r,o){if(null===e){var a=n.type;return"function"!=typeof a||zs(a)||void 0!==a.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Ms(n.type,null,r,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=a,_l(e,t,a,r,o))}if(a=e.child,0==(e.lanes&o)){var i=a.memoizedProps;if((n=null!==(n=n.compare)?n:sr)(i,r)&&e.ref===t.ref)return ql(e,t,o)}return t.flags|=1,(e=Fs(a,r)).ref=t.ref,e.return=t,t.child=e}function _l(e,t,n,r,o){if(null!==e){var a=e.memoizedProps;if(sr(a,r)&&e.ref===t.ref){if(xl=!1,t.pendingProps=r=a,0==(e.lanes&o))return t.lanes=e.lanes,ql(e,t,o);0!=(131072&e.flags)&&(xl=!0)}}return Ol(e,t,n,r,o)}function Cl(e,t,n){var r=t.pendingProps,o=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode)if(0==(1&t.mode))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},Oo(Fu,zu),zu|=n;else{if(0==(1073741824&n))return e=null!==a?a.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,Oo(Fu,zu),zu|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=null!==a?a.baseLanes:n,Oo(Fu,zu),zu|=r}else null!==a?(r=a.baseLanes|n,t.memoizedState=null):r=n,Oo(Fu,zu),zu|=r;return kl(e,t,o,n),t.child}function Pl(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function Ol(e,t,n,r,o){var a=zo(n)?Ro:No.current;return a=Ao(t,a),Ca(t,o),n=_i(e,t,n,r,a,o),r=Ci(),null===e||xl?(ia&&r&&na(t),t.flags|=1,kl(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,ql(e,t,o))}function Tl(e,t,n,r,o){if(zo(n)){var a=!0;jo(t)}else a=!1;if(Ca(t,o),null===t.stateNode)Wl(e,t),Wa(t,n,r),Qa(t,n,r,o),r=!0;else if(null===e){var i=t.stateNode,l=t.memoizedProps;i.props=l;var u=i.context,s=n.contextType;s="object"==typeof s&&null!==s?Pa(s):Ao(t,s=zo(n)?Ro:No.current);var c=n.getDerivedStateFromProps,f="function"==typeof c||"function"==typeof i.getSnapshotBeforeUpdate;f||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==r||u!==s)&&qa(t,i,r,s),Ra=!1;var d=t.memoizedState;i.state=d,Ia(t,r,i,o),u=t.memoizedState,l!==r||d!==u||Lo.current||Ra?("function"==typeof c&&(Va(t,n,c,r),u=t.memoizedState),(l=Ra||Ba(t,n,l,r,d,u,s))?(f||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4194308)):("function"==typeof i.componentDidMount&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=u),i.props=r,i.state=u,i.context=s,r=l):("function"==typeof i.componentDidMount&&(t.flags|=4194308),r=!1)}else{i=t.stateNode,za(e,t),l=t.memoizedProps,s=t.type===t.elementType?l:ya(t.type,l),i.props=s,f=t.pendingProps,d=i.context,u="object"==typeof(u=n.contextType)&&null!==u?Pa(u):Ao(t,u=zo(n)?Ro:No.current);var p=n.getDerivedStateFromProps;(c="function"==typeof p||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==f||d!==u)&&qa(t,i,r,u),Ra=!1,d=t.memoizedState,i.state=d,Ia(t,r,i,o);var m=t.memoizedState;l!==f||d!==m||Lo.current||Ra?("function"==typeof p&&(Va(t,n,p,r),m=t.memoizedState),(s=Ra||Ba(t,n,s,r,d,m,u)||!1)?(c||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,m,u),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,m,u)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=1024)):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&d===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&d===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=m),i.props=r,i.state=m,i.context=u,r=s):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&d===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&d===e.memoizedState||(t.flags|=1024),r=!1)}return Nl(e,t,n,r,a,o)}function Nl(e,t,n,r,o,a){Pl(e,t);var i=0!=(128&t.flags);if(!r&&!i)return o&&Io(t,n,!1),ql(e,t,a);r=t.stateNode,wl.current=t;var l=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=Za(t,e.child,null,a),t.child=Za(t,null,l,a)):kl(e,t,l,a),t.memoizedState=r.state,o&&Io(t,n,!0),t.child}function Ll(e){var t=e.stateNode;t.pendingContext?Mo(0,t.pendingContext,t.pendingContext!==t.context):t.context&&Mo(0,t.context,!1),ai(e,t.containerInfo)}function Rl(e,t,n,r,o){return ha(),va(o),t.flags|=256,kl(e,t,n,r),t.child}var Al,zl,Fl,Ml,Dl={dehydrated:null,treeContext:null,retryLane:0};function jl(e){return{baseLanes:e,cachePool:null,transitions:null}}function Il(e,t,n){var r,o=t.pendingProps,i=si.current,l=!1,u=0!=(128&t.flags);if((r=u)||(r=(null===e||null!==e.memoizedState)&&0!=(2&i)),r?(l=!0,t.flags&=-129):null!==e&&null===e.memoizedState||(i|=1),Oo(si,1&i),null===e)return fa(t),null!==(e=t.memoizedState)&&null!==(e=e.dehydrated)?(0==(1&t.mode)?t.lanes=1:"$!"===e.data?t.lanes=8:t.lanes=1073741824,null):(u=o.children,e=o.fallback,l?(o=t.mode,l=t.child,u={mode:"hidden",children:u},0==(1&o)&&null!==l?(l.childLanes=0,l.pendingProps=u):l=js(u,o,0,null),e=Ds(e,o,n,null),l.return=t,e.return=t,l.sibling=e,t.child=l,t.child.memoizedState=jl(n),t.memoizedState=Dl,e):$l(t,u));if(null!==(i=e.memoizedState)&&null!==(r=i.dehydrated))return function(e,t,n,r,o,i,l){if(n)return 256&t.flags?(t.flags&=-257,Ul(e,t,l,r=dl(Error(a(422))))):null!==t.memoizedState?(t.child=e.child,t.flags|=128,null):(i=r.fallback,o=t.mode,r=js({mode:"visible",children:r.children},o,0,null),(i=Ds(i,o,l,null)).flags|=2,r.return=t,i.return=t,r.sibling=i,t.child=r,0!=(1&t.mode)&&Za(t,e.child,null,l),t.child.memoizedState=jl(l),t.memoizedState=Dl,i);if(0==(1&t.mode))return Ul(e,t,l,null);if("$!"===o.data){if(r=o.nextSibling&&o.nextSibling.dataset)var u=r.dgst;return r=u,Ul(e,t,l,r=dl(i=Error(a(419)),r,void 0))}if(u=0!=(l&e.childLanes),xl||u){if(null!==(r=Lu)){switch(l&-l){case 4:o=2;break;case 16:o=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:o=32;break;case 536870912:o=268435456;break;default:o=0}0!==(o=0!=(o&(r.suspendedLanes|l))?0:o)&&o!==i.retryLane&&(i.retryLane=o,La(e,o),os(r,e,o,-1))}return gs(),Ul(e,t,l,r=dl(Error(a(421))))}return"$?"===o.data?(t.flags|=128,t.child=e.child,t=Ts.bind(null,e),o._reactRetry=t,null):(e=i.treeContext,aa=co(o.nextSibling),oa=t,ia=!0,la=null,null!==e&&(Ko[Xo++]=Zo,Ko[Xo++]=Jo,Ko[Xo++]=Go,Zo=e.id,Jo=e.overflow,Go=t),(t=$l(t,r.children)).flags|=4096,t)}(e,t,u,o,r,i,n);if(l){l=o.fallback,u=t.mode,r=(i=e.child).sibling;var s={mode:"hidden",children:o.children};return 0==(1&u)&&t.child!==i?((o=t.child).childLanes=0,o.pendingProps=s,t.deletions=null):(o=Fs(i,s)).subtreeFlags=14680064&i.subtreeFlags,null!==r?l=Fs(r,l):(l=Ds(l,u,n,null)).flags|=2,l.return=t,o.return=t,o.sibling=l,t.child=o,o=l,l=t.child,u=null===(u=e.child.memoizedState)?jl(n):{baseLanes:u.baseLanes|n,cachePool:null,transitions:u.transitions},l.memoizedState=u,l.childLanes=e.childLanes&~n,t.memoizedState=Dl,o}return e=(l=e.child).sibling,o=Fs(l,{mode:"visible",children:o.children}),0==(1&t.mode)&&(o.lanes=n),o.return=t,o.sibling=null,null!==e&&(null===(n=t.deletions)?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=o,t.memoizedState=null,o}function $l(e,t){return(t=js({mode:"visible",children:t},e.mode,0,null)).return=e,e.child=t}function Ul(e,t,n,r){return null!==r&&va(r),Za(t,e.child,null,n),(e=$l(t,t.pendingProps.children)).flags|=2,t.memoizedState=null,e}function Vl(e,t,n){e.lanes|=t;var r=e.alternate;null!==r&&(r.lanes|=t),_a(e.return,t,n)}function Hl(e,t,n,r,o){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o}:(a.isBackwards=t,a.rendering=null,a.renderingStartTime=0,a.last=r,a.tail=n,a.tailMode=o)}function Bl(e,t,n){var r=t.pendingProps,o=r.revealOrder,a=r.tail;if(kl(e,t,r.children,n),0!=(2&(r=si.current)))r=1&r|2,t.flags|=128;else{if(null!==e&&0!=(128&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Vl(e,n,t);else if(19===e.tag)Vl(e,n,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(Oo(si,r),0==(1&t.mode))t.memoizedState=null;else switch(o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===ci(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),Hl(t,!1,o,n,a);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===ci(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}Hl(t,!0,n,null,a);break;case"together":Hl(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function Wl(e,t){0==(1&t.mode)&&null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2)}function ql(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),ju|=t.lanes,0==(n&t.childLanes))return null;if(null!==e&&t.child!==e.child)throw Error(a(153));if(null!==t.child){for(n=Fs(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Fs(e,e.pendingProps)).return=t;n.sibling=null}return t.child}function Ql(e,t){if(!ia)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function Yl(e){var t=null!==e.alternate&&e.alternate.child===e.child,n=0,r=0;if(t)for(var o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=14680064&o.subtreeFlags,r|=14680064&o.flags,o.return=e,o=o.sibling;else for(o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=o.subtreeFlags,r|=o.flags,o.return=e,o=o.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function Kl(e,t,n){var r=t.pendingProps;switch(ra(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Yl(t),null;case 1:case 17:return zo(t.type)&&Fo(),Yl(t),null;case 3:return r=t.stateNode,ii(),Po(Lo),Po(No),di(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(pa(t)?t.flags|=4:null===e||e.memoizedState.isDehydrated&&0==(256&t.flags)||(t.flags|=1024,null!==la&&(us(la),la=null))),zl(e,t),Yl(t),null;case 5:ui(t);var o=oi(ri.current);if(n=t.type,null!==e&&null!=t.stateNode)Fl(e,t,n,r,o),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!r){if(null===t.stateNode)throw Error(a(166));return Yl(t),null}if(e=oi(ti.current),pa(t)){r=t.stateNode,n=t.type;var i=t.memoizedProps;switch(r[mo]=t,r[ho]=i,e=0!=(1&t.mode),n){case"dialog":$r("cancel",r),$r("close",r);break;case"iframe":case"object":case"embed":$r("load",r);break;case"video":case"audio":for(o=0;o<Mr.length;o++)$r(Mr[o],r);break;case"source":$r("error",r);break;case"img":case"image":case"link":$r("error",r),$r("load",r);break;case"details":$r("toggle",r);break;case"input":X(r,i),$r("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!i.multiple},$r("invalid",r);break;case"textarea":oe(r,i),$r("invalid",r)}for(var u in ye(n,i),o=null,i)if(i.hasOwnProperty(u)){var s=i[u];"children"===u?"string"==typeof s?r.textContent!==s&&(!0!==i.suppressHydrationWarning&&Jr(r.textContent,s,e),o=["children",s]):"number"==typeof s&&r.textContent!==""+s&&(!0!==i.suppressHydrationWarning&&Jr(r.textContent,s,e),o=["children",""+s]):l.hasOwnProperty(u)&&null!=s&&"onScroll"===u&&$r("scroll",r)}switch(n){case"input":q(r),J(r,i,!0);break;case"textarea":q(r),ie(r);break;case"select":case"option":break;default:"function"==typeof i.onClick&&(r.onclick=eo)}r=o,t.updateQueue=r,null!==r&&(t.flags|=4)}else{u=9===o.nodeType?o:o.ownerDocument,"http://www.w3.org/1999/xhtml"===e&&(e=le(n)),"http://www.w3.org/1999/xhtml"===e?"script"===n?((e=u.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=u.createElement(n,{is:r.is}):(e=u.createElement(n),"select"===n&&(u=e,r.multiple?u.multiple=!0:r.size&&(u.size=r.size))):e=u.createElementNS(e,n),e[mo]=t,e[ho]=r,Al(e,t,!1,!1),t.stateNode=e;e:{switch(u=be(n,r),n){case"dialog":$r("cancel",e),$r("close",e),o=r;break;case"iframe":case"object":case"embed":$r("load",e),o=r;break;case"video":case"audio":for(o=0;o<Mr.length;o++)$r(Mr[o],e);o=r;break;case"source":$r("error",e),o=r;break;case"img":case"image":case"link":$r("error",e),$r("load",e),o=r;break;case"details":$r("toggle",e),o=r;break;case"input":X(e,r),o=K(e,r),$r("invalid",e);break;case"option":default:o=r;break;case"select":e._wrapperState={wasMultiple:!!r.multiple},o=D({},r,{value:void 0}),$r("invalid",e);break;case"textarea":oe(e,r),o=re(e,r),$r("invalid",e)}for(i in ye(n,o),s=o)if(s.hasOwnProperty(i)){var c=s[i];"style"===i?ve(e,c):"dangerouslySetInnerHTML"===i?null!=(c=c?c.__html:void 0)&&fe(e,c):"children"===i?"string"==typeof c?("textarea"!==n||""!==c)&&de(e,c):"number"==typeof c&&de(e,""+c):"suppressContentEditableWarning"!==i&&"suppressHydrationWarning"!==i&&"autoFocus"!==i&&(l.hasOwnProperty(i)?null!=c&&"onScroll"===i&&$r("scroll",e):null!=c&&b(e,i,c,u))}switch(n){case"input":q(e),J(e,r,!1);break;case"textarea":q(e),ie(e);break;case"option":null!=r.value&&e.setAttribute("value",""+B(r.value));break;case"select":e.multiple=!!r.multiple,null!=(i=r.value)?ne(e,!!r.multiple,i,!1):null!=r.defaultValue&&ne(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof o.onClick&&(e.onclick=eo)}switch(n){case"button":case"input":case"select":case"textarea":r=!!r.autoFocus;break e;case"img":r=!0;break e;default:r=!1}}r&&(t.flags|=4)}null!==t.ref&&(t.flags|=512,t.flags|=2097152)}return Yl(t),null;case 6:if(e&&null!=t.stateNode)Ml(e,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(a(166));if(n=oi(ri.current),oi(ti.current),pa(t)){if(r=t.stateNode,n=t.memoizedProps,r[mo]=t,(i=r.nodeValue!==n)&&null!==(e=oa))switch(e.tag){case 3:Jr(r.nodeValue,n,0!=(1&e.mode));break;case 5:!0!==e.memoizedProps.suppressHydrationWarning&&Jr(r.nodeValue,n,0!=(1&e.mode))}i&&(t.flags|=4)}else(r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[mo]=t,t.stateNode=r}return Yl(t),null;case 13:if(Po(si),r=t.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(ia&&null!==aa&&0!=(1&t.mode)&&0==(128&t.flags))ma(),ha(),t.flags|=98560,i=!1;else if(i=pa(t),null!==r&&null!==r.dehydrated){if(null===e){if(!i)throw Error(a(318));if(!(i=null!==(i=t.memoizedState)?i.dehydrated:null))throw Error(a(317));i[mo]=t}else ha(),0==(128&t.flags)&&(t.memoizedState=null),t.flags|=4;Yl(t),i=!1}else null!==la&&(us(la),la=null),i=!0;if(!i)return 65536&t.flags?t:null}return 0!=(128&t.flags)?(t.lanes=n,t):((r=null!==r)!=(null!==e&&null!==e.memoizedState)&&r&&(t.child.flags|=8192,0!=(1&t.mode)&&(null===e||0!=(1&si.current)?0===Mu&&(Mu=3):gs())),null!==t.updateQueue&&(t.flags|=4),Yl(t),null);case 4:return ii(),zl(e,t),null===e&&Hr(t.stateNode.containerInfo),Yl(t),null;case 10:return Ea(t.type._context),Yl(t),null;case 19:if(Po(si),null===(i=t.memoizedState))return Yl(t),null;if(r=0!=(128&t.flags),null===(u=i.rendering))if(r)Ql(i,!1);else{if(0!==Mu||null!==e&&0!=(128&e.flags))for(e=t.child;null!==e;){if(null!==(u=ci(e))){for(t.flags|=128,Ql(i,!1),null!==(r=u.updateQueue)&&(t.updateQueue=r,t.flags|=4),t.subtreeFlags=0,r=n,n=t.child;null!==n;)e=r,(i=n).flags&=14680066,null===(u=i.alternate)?(i.childLanes=0,i.lanes=e,i.child=null,i.subtreeFlags=0,i.memoizedProps=null,i.memoizedState=null,i.updateQueue=null,i.dependencies=null,i.stateNode=null):(i.childLanes=u.childLanes,i.lanes=u.lanes,i.child=u.child,i.subtreeFlags=0,i.deletions=null,i.memoizedProps=u.memoizedProps,i.memoizedState=u.memoizedState,i.updateQueue=u.updateQueue,i.type=u.type,e=u.dependencies,i.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return Oo(si,1&si.current|2),t.child}e=e.sibling}null!==i.tail&&Ge()>Bu&&(t.flags|=128,r=!0,Ql(i,!1),t.lanes=4194304)}else{if(!r)if(null!==(e=ci(u))){if(t.flags|=128,r=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),Ql(i,!0),null===i.tail&&"hidden"===i.tailMode&&!u.alternate&&!ia)return Yl(t),null}else 2*Ge()-i.renderingStartTime>Bu&&1073741824!==n&&(t.flags|=128,r=!0,Ql(i,!1),t.lanes=4194304);i.isBackwards?(u.sibling=t.child,t.child=u):(null!==(n=i.last)?n.sibling=u:t.child=u,i.last=u)}return null!==i.tail?(t=i.tail,i.rendering=t,i.tail=t.sibling,i.renderingStartTime=Ge(),t.sibling=null,n=si.current,Oo(si,r?1&n|2:1&n),t):(Yl(t),null);case 22:case 23:return ps(),r=null!==t.memoizedState,null!==e&&null!==e.memoizedState!==r&&(t.flags|=8192),r&&0!=(1&t.mode)?0!=(1073741824&zu)&&(Yl(t),6&t.subtreeFlags&&(t.flags|=8192)):Yl(t),null;case 24:case 25:return null}throw Error(a(156,t.tag))}function Xl(e,t){switch(ra(t),t.tag){case 1:return zo(t.type)&&Fo(),65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 3:return ii(),Po(Lo),Po(No),di(),0!=(65536&(e=t.flags))&&0==(128&e)?(t.flags=-65537&e|128,t):null;case 5:return ui(t),null;case 13:if(Po(si),null!==(e=t.memoizedState)&&null!==e.dehydrated){if(null===t.alternate)throw Error(a(340));ha()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 19:return Po(si),null;case 4:return ii(),null;case 10:return Ea(t.type._context),null;case 22:case 23:return ps(),null;default:return null}}Al=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},zl=function(){},Fl=function(e,t,n,r){var o=e.memoizedProps;if(o!==r){e=t.stateNode,oi(ti.current);var a,i=null;switch(n){case"input":o=K(e,o),r=K(e,r),i=[];break;case"select":o=D({},o,{value:void 0}),r=D({},r,{value:void 0}),i=[];break;case"textarea":o=re(e,o),r=re(e,r),i=[];break;default:"function"!=typeof o.onClick&&"function"==typeof r.onClick&&(e.onclick=eo)}for(c in ye(n,r),n=null,o)if(!r.hasOwnProperty(c)&&o.hasOwnProperty(c)&&null!=o[c])if("style"===c){var u=o[c];for(a in u)u.hasOwnProperty(a)&&(n||(n={}),n[a]="")}else"dangerouslySetInnerHTML"!==c&&"children"!==c&&"suppressContentEditableWarning"!==c&&"suppressHydrationWarning"!==c&&"autoFocus"!==c&&(l.hasOwnProperty(c)?i||(i=[]):(i=i||[]).push(c,null));for(c in r){var s=r[c];if(u=null!=o?o[c]:void 0,r.hasOwnProperty(c)&&s!==u&&(null!=s||null!=u))if("style"===c)if(u){for(a in u)!u.hasOwnProperty(a)||s&&s.hasOwnProperty(a)||(n||(n={}),n[a]="");for(a in s)s.hasOwnProperty(a)&&u[a]!==s[a]&&(n||(n={}),n[a]=s[a])}else n||(i||(i=[]),i.push(c,n)),n=s;else"dangerouslySetInnerHTML"===c?(s=s?s.__html:void 0,u=u?u.__html:void 0,null!=s&&u!==s&&(i=i||[]).push(c,s)):"children"===c?"string"!=typeof s&&"number"!=typeof s||(i=i||[]).push(c,""+s):"suppressContentEditableWarning"!==c&&"suppressHydrationWarning"!==c&&(l.hasOwnProperty(c)?(null!=s&&"onScroll"===c&&$r("scroll",e),i||u===s||(i=[])):(i=i||[]).push(c,s))}n&&(i=i||[]).push("style",n);var c=i;(t.updateQueue=c)&&(t.flags|=4)}},Ml=function(e,t,n,r){n!==r&&(t.flags|=4)};var Gl=!1,Zl=!1,Jl="function"==typeof WeakSet?WeakSet:Set,eu=null;function tu(e,t){var n=e.ref;if(null!==n)if("function"==typeof n)try{n(null)}catch(n){Cs(e,t,n)}else n.current=null}function nu(e,t,n){try{n()}catch(n){Cs(e,t,n)}}var ru=!1;function ou(e,t,n){var r=t.updateQueue;if(null!==(r=null!==r?r.lastEffect:null)){var o=r=r.next;do{if((o.tag&e)===e){var a=o.destroy;o.destroy=void 0,void 0!==a&&nu(t,n,a)}o=o.next}while(o!==r)}}function au(e,t){if(null!==(t=null!==(t=t.updateQueue)?t.lastEffect:null)){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function iu(e){var t=e.ref;if(null!==t){var n=e.stateNode;e.tag,e=n,"function"==typeof t?t(e):t.current=e}}function lu(e){var t=e.alternate;null!==t&&(e.alternate=null,lu(t)),e.child=null,e.deletions=null,e.sibling=null,5===e.tag&&null!==(t=e.stateNode)&&(delete t[mo],delete t[ho],delete t[go],delete t[yo],delete t[bo]),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function uu(e){return 5===e.tag||3===e.tag||4===e.tag}function su(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||uu(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(2&e.flags)continue e;if(null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function cu(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=eo));else if(4!==r&&null!==(e=e.child))for(cu(e,t,n),e=e.sibling;null!==e;)cu(e,t,n),e=e.sibling}function fu(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(fu(e,t,n),e=e.sibling;null!==e;)fu(e,t,n),e=e.sibling}var du=null,pu=!1;function mu(e,t,n){for(n=n.child;null!==n;)hu(e,t,n),n=n.sibling}function hu(e,t,n){if(at&&"function"==typeof at.onCommitFiberUnmount)try{at.onCommitFiberUnmount(ot,n)}catch(e){}switch(n.tag){case 5:Zl||tu(n,t);case 6:var r=du,o=pu;du=null,mu(e,t,n),pu=o,null!==(du=r)&&(pu?(e=du,n=n.stateNode,8===e.nodeType?e.parentNode.removeChild(n):e.removeChild(n)):du.removeChild(n.stateNode));break;case 18:null!==du&&(pu?(e=du,n=n.stateNode,8===e.nodeType?so(e.parentNode,n):1===e.nodeType&&so(e,n),Vt(e)):so(du,n.stateNode));break;case 4:r=du,o=pu,du=n.stateNode.containerInfo,pu=!0,mu(e,t,n),du=r,pu=o;break;case 0:case 11:case 14:case 15:if(!Zl&&null!==(r=n.updateQueue)&&null!==(r=r.lastEffect)){o=r=r.next;do{var a=o,i=a.destroy;a=a.tag,void 0!==i&&(0!=(2&a)||0!=(4&a))&&nu(n,t,i),o=o.next}while(o!==r)}mu(e,t,n);break;case 1:if(!Zl&&(tu(n,t),"function"==typeof(r=n.stateNode).componentWillUnmount))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(e){Cs(n,t,e)}mu(e,t,n);break;case 21:mu(e,t,n);break;case 22:1&n.mode?(Zl=(r=Zl)||null!==n.memoizedState,mu(e,t,n),Zl=r):mu(e,t,n);break;default:mu(e,t,n)}}function vu(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new Jl),t.forEach((function(t){var r=Ns.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function gu(e,t){var n=t.deletions;if(null!==n)for(var r=0;r<n.length;r++){var o=n[r];try{var i=e,l=t,u=l;e:for(;null!==u;){switch(u.tag){case 5:du=u.stateNode,pu=!1;break e;case 3:case 4:du=u.stateNode.containerInfo,pu=!0;break e}u=u.return}if(null===du)throw Error(a(160));hu(i,l,o),du=null,pu=!1;var s=o.alternate;null!==s&&(s.return=null),o.return=null}catch(e){Cs(o,t,e)}}if(12854&t.subtreeFlags)for(t=t.child;null!==t;)yu(t,e),t=t.sibling}function yu(e,t){var n=e.alternate,r=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(gu(t,e),bu(e),4&r){try{ou(3,e,e.return),au(3,e)}catch(t){Cs(e,e.return,t)}try{ou(5,e,e.return)}catch(t){Cs(e,e.return,t)}}break;case 1:gu(t,e),bu(e),512&r&&null!==n&&tu(n,n.return);break;case 5:if(gu(t,e),bu(e),512&r&&null!==n&&tu(n,n.return),32&e.flags){var o=e.stateNode;try{de(o,"")}catch(t){Cs(e,e.return,t)}}if(4&r&&null!=(o=e.stateNode)){var i=e.memoizedProps,l=null!==n?n.memoizedProps:i,u=e.type,s=e.updateQueue;if(e.updateQueue=null,null!==s)try{"input"===u&&"radio"===i.type&&null!=i.name&&G(o,i),be(u,l);var c=be(u,i);for(l=0;l<s.length;l+=2){var f=s[l],d=s[l+1];"style"===f?ve(o,d):"dangerouslySetInnerHTML"===f?fe(o,d):"children"===f?de(o,d):b(o,f,d,c)}switch(u){case"input":Z(o,i);break;case"textarea":ae(o,i);break;case"select":var p=o._wrapperState.wasMultiple;o._wrapperState.wasMultiple=!!i.multiple;var m=i.value;null!=m?ne(o,!!i.multiple,m,!1):p!==!!i.multiple&&(null!=i.defaultValue?ne(o,!!i.multiple,i.defaultValue,!0):ne(o,!!i.multiple,i.multiple?[]:"",!1))}o[ho]=i}catch(t){Cs(e,e.return,t)}}break;case 6:if(gu(t,e),bu(e),4&r){if(null===e.stateNode)throw Error(a(162));o=e.stateNode,i=e.memoizedProps;try{o.nodeValue=i}catch(t){Cs(e,e.return,t)}}break;case 3:if(gu(t,e),bu(e),4&r&&null!==n&&n.memoizedState.isDehydrated)try{Vt(t.containerInfo)}catch(t){Cs(e,e.return,t)}break;case 4:default:gu(t,e),bu(e);break;case 13:gu(t,e),bu(e),8192&(o=e.child).flags&&(i=null!==o.memoizedState,o.stateNode.isHidden=i,!i||null!==o.alternate&&null!==o.alternate.memoizedState||(Hu=Ge())),4&r&&vu(e);break;case 22:if(f=null!==n&&null!==n.memoizedState,1&e.mode?(Zl=(c=Zl)||f,gu(t,e),Zl=c):gu(t,e),bu(e),8192&r){if(c=null!==e.memoizedState,(e.stateNode.isHidden=c)&&!f&&0!=(1&e.mode))for(eu=e,f=e.child;null!==f;){for(d=eu=f;null!==eu;){switch(m=(p=eu).child,p.tag){case 0:case 11:case 14:case 15:ou(4,p,p.return);break;case 1:tu(p,p.return);var h=p.stateNode;if("function"==typeof h.componentWillUnmount){r=p,n=p.return;try{t=r,h.props=t.memoizedProps,h.state=t.memoizedState,h.componentWillUnmount()}catch(e){Cs(r,n,e)}}break;case 5:tu(p,p.return);break;case 22:if(null!==p.memoizedState){Su(d);continue}}null!==m?(m.return=p,eu=m):Su(d)}f=f.sibling}e:for(f=null,d=e;;){if(5===d.tag){if(null===f){f=d;try{o=d.stateNode,c?"function"==typeof(i=o.style).setProperty?i.setProperty("display","none","important"):i.display="none":(u=d.stateNode,l=null!=(s=d.memoizedProps.style)&&s.hasOwnProperty("display")?s.display:null,u.style.display=he("display",l))}catch(t){Cs(e,e.return,t)}}}else if(6===d.tag){if(null===f)try{d.stateNode.nodeValue=c?"":d.memoizedProps}catch(t){Cs(e,e.return,t)}}else if((22!==d.tag&&23!==d.tag||null===d.memoizedState||d===e)&&null!==d.child){d.child.return=d,d=d.child;continue}if(d===e)break e;for(;null===d.sibling;){if(null===d.return||d.return===e)break e;f===d&&(f=null),d=d.return}f===d&&(f=null),d.sibling.return=d.return,d=d.sibling}}break;case 19:gu(t,e),bu(e),4&r&&vu(e);case 21:}}function bu(e){var t=e.flags;if(2&t){try{e:{for(var n=e.return;null!==n;){if(uu(n)){var r=n;break e}n=n.return}throw Error(a(160))}switch(r.tag){case 5:var o=r.stateNode;32&r.flags&&(de(o,""),r.flags&=-33),fu(e,su(e),o);break;case 3:case 4:var i=r.stateNode.containerInfo;cu(e,su(e),i);break;default:throw Error(a(161))}}catch(t){Cs(e,e.return,t)}e.flags&=-3}4096&t&&(e.flags&=-4097)}function wu(e,t,n){eu=e,xu(e,t,n)}function xu(e,t,n){for(var r=0!=(1&e.mode);null!==eu;){var o=eu,a=o.child;if(22===o.tag&&r){var i=null!==o.memoizedState||Gl;if(!i){var l=o.alternate,u=null!==l&&null!==l.memoizedState||Zl;l=Gl;var s=Zl;if(Gl=i,(Zl=u)&&!s)for(eu=o;null!==eu;)u=(i=eu).child,22===i.tag&&null!==i.memoizedState?Eu(o):null!==u?(u.return=i,eu=u):Eu(o);for(;null!==a;)eu=a,xu(a,t,n),a=a.sibling;eu=o,Gl=l,Zl=s}ku(e)}else 0!=(8772&o.subtreeFlags)&&null!==a?(a.return=o,eu=a):ku(e)}}function ku(e){for(;null!==eu;){var t=eu;if(0!=(8772&t.flags)){var n=t.alternate;try{if(0!=(8772&t.flags))switch(t.tag){case 0:case 11:case 15:Zl||au(5,t);break;case 1:var r=t.stateNode;if(4&t.flags&&!Zl)if(null===n)r.componentDidMount();else{var o=t.elementType===t.type?n.memoizedProps:ya(t.type,n.memoizedProps);r.componentDidUpdate(o,n.memoizedState,r.__reactInternalSnapshotBeforeUpdate)}var i=t.updateQueue;null!==i&&$a(t,i,r);break;case 3:var l=t.updateQueue;if(null!==l){if(n=null,null!==t.child)switch(t.child.tag){case 5:case 1:n=t.child.stateNode}$a(t,l,n)}break;case 5:var u=t.stateNode;if(null===n&&4&t.flags){n=u;var s=t.memoizedProps;switch(t.type){case"button":case"input":case"select":case"textarea":s.autoFocus&&n.focus();break;case"img":s.src&&(n.src=s.src)}}break;case 6:case 4:case 12:case 19:case 17:case 21:case 22:case 23:case 25:break;case 13:if(null===t.memoizedState){var c=t.alternate;if(null!==c){var f=c.memoizedState;if(null!==f){var d=f.dehydrated;null!==d&&Vt(d)}}}break;default:throw Error(a(163))}Zl||512&t.flags&&iu(t)}catch(e){Cs(t,t.return,e)}}if(t===e){eu=null;break}if(null!==(n=t.sibling)){n.return=t.return,eu=n;break}eu=t.return}}function Su(e){for(;null!==eu;){var t=eu;if(t===e){eu=null;break}var n=t.sibling;if(null!==n){n.return=t.return,eu=n;break}eu=t.return}}function Eu(e){for(;null!==eu;){var t=eu;try{switch(t.tag){case 0:case 11:case 15:var n=t.return;try{au(4,t)}catch(e){Cs(t,n,e)}break;case 1:var r=t.stateNode;if("function"==typeof r.componentDidMount){var o=t.return;try{r.componentDidMount()}catch(e){Cs(t,o,e)}}var a=t.return;try{iu(t)}catch(e){Cs(t,a,e)}break;case 5:var i=t.return;try{iu(t)}catch(e){Cs(t,i,e)}}}catch(e){Cs(t,t.return,e)}if(t===e){eu=null;break}var l=t.sibling;if(null!==l){l.return=t.return,eu=l;break}eu=t.return}}var _u,Cu=Math.ceil,Pu=w.ReactCurrentDispatcher,Ou=w.ReactCurrentOwner,Tu=w.ReactCurrentBatchConfig,Nu=0,Lu=null,Ru=null,Au=0,zu=0,Fu=Co(0),Mu=0,Du=null,ju=0,Iu=0,$u=0,Uu=null,Vu=null,Hu=0,Bu=1/0,Wu=null,qu=!1,Qu=null,Yu=null,Ku=!1,Xu=null,Gu=0,Zu=0,Ju=null,es=-1,ts=0;function ns(){return 0!=(6&Nu)?Ge():-1!==es?es:es=Ge()}function rs(e){return 0==(1&e.mode)?1:0!=(2&Nu)&&0!==Au?Au&-Au:null!==ga.transition?(0===ts&&(ts=ht()),ts):0!==(e=bt)?e:e=void 0===(e=window.event)?16:Xt(e.type)}function os(e,t,n,r){if(50<Zu)throw Zu=0,Ju=null,Error(a(185));gt(e,n,r),0!=(2&Nu)&&e===Lu||(e===Lu&&(0==(2&Nu)&&(Iu|=n),4===Mu&&ss(e,Au)),as(e,r),1===n&&0===Nu&&0==(1&t.mode)&&(Bu=Ge()+500,Uo&&Bo()))}function as(e,t){var n=e.callbackNode;!function(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,o=e.expirationTimes,a=e.pendingLanes;0<a;){var i=31-it(a),l=1<<i,u=o[i];-1===u?0!=(l&n)&&0==(l&r)||(o[i]=pt(l,t)):u<=t&&(e.expiredLanes|=l),a&=~l}}(e,t);var r=dt(e,e===Lu?Au:0);if(0===r)null!==n&&Ye(n),e.callbackNode=null,e.callbackPriority=0;else if(t=r&-r,e.callbackPriority!==t){if(null!=n&&Ye(n),1===t)0===e.tag?function(e){Uo=!0,Ho(e)}(cs.bind(null,e)):Ho(cs.bind(null,e)),lo((function(){0==(6&Nu)&&Bo()})),n=null;else{switch(wt(r)){case 1:n=Je;break;case 4:n=et;break;case 16:default:n=tt;break;case 536870912:n=rt}n=Ls(n,is.bind(null,e))}e.callbackPriority=t,e.callbackNode=n}}function is(e,t){if(es=-1,ts=0,0!=(6&Nu))throw Error(a(327));var n=e.callbackNode;if(Es()&&e.callbackNode!==n)return null;var r=dt(e,e===Lu?Au:0);if(0===r)return null;if(0!=(30&r)||0!=(r&e.expiredLanes)||t)t=ys(e,r);else{t=r;var o=Nu;Nu|=2;var i=vs();for(Lu===e&&Au===t||(Wu=null,Bu=Ge()+500,ms(e,t));;)try{ws();break}catch(t){hs(e,t)}Sa(),Pu.current=i,Nu=o,null!==Ru?t=0:(Lu=null,Au=0,t=Mu)}if(0!==t){if(2===t&&0!==(o=mt(e))&&(r=o,t=ls(e,o)),1===t)throw n=Du,ms(e,0),ss(e,r),as(e,Ge()),n;if(6===t)ss(e,r);else{if(o=e.current.alternate,0==(30&r)&&!function(e){for(var t=e;;){if(16384&t.flags){var n=t.updateQueue;if(null!==n&&null!==(n=n.stores))for(var r=0;r<n.length;r++){var o=n[r],a=o.getSnapshot;o=o.value;try{if(!ur(a(),o))return!1}catch(e){return!1}}}if(n=t.child,16384&t.subtreeFlags&&null!==n)n.return=t,t=n;else{if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}(o)&&(2===(t=ys(e,r))&&0!==(i=mt(e))&&(r=i,t=ls(e,i)),1===t))throw n=Du,ms(e,0),ss(e,r),as(e,Ge()),n;switch(e.finishedWork=o,e.finishedLanes=r,t){case 0:case 1:throw Error(a(345));case 2:case 5:Ss(e,Vu,Wu);break;case 3:if(ss(e,r),(130023424&r)===r&&10<(t=Hu+500-Ge())){if(0!==dt(e,0))break;if(((o=e.suspendedLanes)&r)!==r){ns(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=oo(Ss.bind(null,e,Vu,Wu),t);break}Ss(e,Vu,Wu);break;case 4:if(ss(e,r),(4194240&r)===r)break;for(t=e.eventTimes,o=-1;0<r;){var l=31-it(r);i=1<<l,(l=t[l])>o&&(o=l),r&=~i}if(r=o,10<(r=(120>(r=Ge()-r)?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*Cu(r/1960))-r)){e.timeoutHandle=oo(Ss.bind(null,e,Vu,Wu),r);break}Ss(e,Vu,Wu);break;default:throw Error(a(329))}}}return as(e,Ge()),e.callbackNode===n?is.bind(null,e):null}function ls(e,t){var n=Uu;return e.current.memoizedState.isDehydrated&&(ms(e,t).flags|=256),2!==(e=ys(e,t))&&(t=Vu,Vu=n,null!==t&&us(t)),e}function us(e){null===Vu?Vu=e:Vu.push.apply(Vu,e)}function ss(e,t){for(t&=~$u,t&=~Iu,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-it(t),r=1<<n;e[n]=-1,t&=~r}}function cs(e){if(0!=(6&Nu))throw Error(a(327));Es();var t=dt(e,0);if(0==(1&t))return as(e,Ge()),null;var n=ys(e,t);if(0!==e.tag&&2===n){var r=mt(e);0!==r&&(t=r,n=ls(e,r))}if(1===n)throw n=Du,ms(e,0),ss(e,t),as(e,Ge()),n;if(6===n)throw Error(a(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,Ss(e,Vu,Wu),as(e,Ge()),null}function fs(e,t){var n=Nu;Nu|=1;try{return e(t)}finally{0===(Nu=n)&&(Bu=Ge()+500,Uo&&Bo())}}function ds(e){null!==Xu&&0===Xu.tag&&0==(6&Nu)&&Es();var t=Nu;Nu|=1;var n=Tu.transition,r=bt;try{if(Tu.transition=null,bt=1,e)return e()}finally{bt=r,Tu.transition=n,0==(6&(Nu=t))&&Bo()}}function ps(){zu=Fu.current,Po(Fu)}function ms(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,ao(n)),null!==Ru)for(n=Ru.return;null!==n;){var r=n;switch(ra(r),r.tag){case 1:null!=(r=r.type.childContextTypes)&&Fo();break;case 3:ii(),Po(Lo),Po(No),di();break;case 5:ui(r);break;case 4:ii();break;case 13:case 19:Po(si);break;case 10:Ea(r.type._context);break;case 22:case 23:ps()}n=n.return}if(Lu=e,Ru=e=Fs(e.current,null),Au=zu=t,Mu=0,Du=null,$u=Iu=ju=0,Vu=Uu=null,null!==Oa){for(t=0;t<Oa.length;t++)if(null!==(r=(n=Oa[t]).interleaved)){n.interleaved=null;var o=r.next,a=n.pending;if(null!==a){var i=a.next;a.next=o,r.next=i}n.pending=r}Oa=null}return e}function hs(e,t){for(;;){var n=Ru;try{if(Sa(),pi.current=ll,bi){for(var r=vi.memoizedState;null!==r;){var o=r.queue;null!==o&&(o.pending=null),r=r.next}bi=!1}if(hi=0,yi=gi=vi=null,wi=!1,xi=0,Ou.current=null,null===n||null===n.return){Mu=1,Du=t,Ru=null;break}e:{var i=e,l=n.return,u=n,s=t;if(t=Au,u.flags|=32768,null!==s&&"object"==typeof s&&"function"==typeof s.then){var c=s,f=u,d=f.tag;if(0==(1&f.mode)&&(0===d||11===d||15===d)){var p=f.alternate;p?(f.updateQueue=p.updateQueue,f.memoizedState=p.memoizedState,f.lanes=p.lanes):(f.updateQueue=null,f.memoizedState=null)}var m=yl(l);if(null!==m){m.flags&=-257,bl(m,l,u,0,t),1&m.mode&&gl(i,c,t),s=c;var h=(t=m).updateQueue;if(null===h){var v=new Set;v.add(s),t.updateQueue=v}else h.add(s);break e}if(0==(1&t)){gl(i,c,t),gs();break e}s=Error(a(426))}else if(ia&&1&u.mode){var g=yl(l);if(null!==g){0==(65536&g.flags)&&(g.flags|=256),bl(g,l,u,0,t),va(fl(s,u));break e}}i=s=fl(s,u),4!==Mu&&(Mu=2),null===Uu?Uu=[i]:Uu.push(i),i=l;do{switch(i.tag){case 3:i.flags|=65536,t&=-t,i.lanes|=t,ja(i,hl(0,s,t));break e;case 1:u=s;var y=i.type,b=i.stateNode;if(0==(128&i.flags)&&("function"==typeof y.getDerivedStateFromError||null!==b&&"function"==typeof b.componentDidCatch&&(null===Yu||!Yu.has(b)))){i.flags|=65536,t&=-t,i.lanes|=t,ja(i,vl(i,u,t));break e}}i=i.return}while(null!==i)}ks(n)}catch(e){t=e,Ru===n&&null!==n&&(Ru=n=n.return);continue}break}}function vs(){var e=Pu.current;return Pu.current=ll,null===e?ll:e}function gs(){0!==Mu&&3!==Mu&&2!==Mu||(Mu=4),null===Lu||0==(268435455&ju)&&0==(268435455&Iu)||ss(Lu,Au)}function ys(e,t){var n=Nu;Nu|=2;var r=vs();for(Lu===e&&Au===t||(Wu=null,ms(e,t));;)try{bs();break}catch(t){hs(e,t)}if(Sa(),Nu=n,Pu.current=r,null!==Ru)throw Error(a(261));return Lu=null,Au=0,Mu}function bs(){for(;null!==Ru;)xs(Ru)}function ws(){for(;null!==Ru&&!Ke();)xs(Ru)}function xs(e){var t=_u(e.alternate,e,zu);e.memoizedProps=e.pendingProps,null===t?ks(e):Ru=t,Ou.current=null}function ks(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(32768&t.flags)){if(null!==(n=Kl(n,t,zu)))return void(Ru=n)}else{if(null!==(n=Xl(n,t)))return n.flags&=32767,void(Ru=n);if(null===e)return Mu=6,void(Ru=null);e.flags|=32768,e.subtreeFlags=0,e.deletions=null}if(null!==(t=t.sibling))return void(Ru=t);Ru=t=e}while(null!==t);0===Mu&&(Mu=5)}function Ss(e,t,n){var r=bt,o=Tu.transition;try{Tu.transition=null,bt=1,function(e,t,n,r){do{Es()}while(null!==Xu);if(0!=(6&Nu))throw Error(a(327));n=e.finishedWork;var o=e.finishedLanes;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(a(177));e.callbackNode=null,e.callbackPriority=0;var i=n.lanes|n.childLanes;if(function(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0<n;){var o=31-it(n),a=1<<o;t[o]=0,r[o]=-1,e[o]=-1,n&=~a}}(e,i),e===Lu&&(Ru=Lu=null,Au=0),0==(2064&n.subtreeFlags)&&0==(2064&n.flags)||Ku||(Ku=!0,Ls(tt,(function(){return Es(),null}))),i=0!=(15990&n.flags),0!=(15990&n.subtreeFlags)||i){i=Tu.transition,Tu.transition=null;var l=bt;bt=1;var u=Nu;Nu|=4,Ou.current=null,function(e,t){if(to=Bt,mr(e=pr())){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{var r=(n=(n=e.ownerDocument)&&n.defaultView||window).getSelection&&n.getSelection();if(r&&0!==r.rangeCount){n=r.anchorNode;var o=r.anchorOffset,i=r.focusNode;r=r.focusOffset;try{n.nodeType,i.nodeType}catch(e){n=null;break e}var l=0,u=-1,s=-1,c=0,f=0,d=e,p=null;t:for(;;){for(var m;d!==n||0!==o&&3!==d.nodeType||(u=l+o),d!==i||0!==r&&3!==d.nodeType||(s=l+r),3===d.nodeType&&(l+=d.nodeValue.length),null!==(m=d.firstChild);)p=d,d=m;for(;;){if(d===e)break t;if(p===n&&++c===o&&(u=l),p===i&&++f===r&&(s=l),null!==(m=d.nextSibling))break;p=(d=p).parentNode}d=m}n=-1===u||-1===s?null:{start:u,end:s}}else n=null}n=n||{start:0,end:0}}else n=null;for(no={focusedElem:e,selectionRange:n},Bt=!1,eu=t;null!==eu;)if(e=(t=eu).child,0!=(1028&t.subtreeFlags)&&null!==e)e.return=t,eu=e;else for(;null!==eu;){t=eu;try{var h=t.alternate;if(0!=(1024&t.flags))switch(t.tag){case 0:case 11:case 15:case 5:case 6:case 4:case 17:break;case 1:if(null!==h){var v=h.memoizedProps,g=h.memoizedState,y=t.stateNode,b=y.getSnapshotBeforeUpdate(t.elementType===t.type?v:ya(t.type,v),g);y.__reactInternalSnapshotBeforeUpdate=b}break;case 3:var w=t.stateNode.containerInfo;1===w.nodeType?w.textContent="":9===w.nodeType&&w.documentElement&&w.removeChild(w.documentElement);break;default:throw Error(a(163))}}catch(e){Cs(t,t.return,e)}if(null!==(e=t.sibling)){e.return=t.return,eu=e;break}eu=t.return}h=ru,ru=!1}(e,n),yu(n,e),hr(no),Bt=!!to,no=to=null,e.current=n,wu(n,e,o),Xe(),Nu=u,bt=l,Tu.transition=i}else e.current=n;if(Ku&&(Ku=!1,Xu=e,Gu=o),0===(i=e.pendingLanes)&&(Yu=null),function(e){if(at&&"function"==typeof at.onCommitFiberRoot)try{at.onCommitFiberRoot(ot,e,void 0,128==(128&e.current.flags))}catch(e){}}(n.stateNode),as(e,Ge()),null!==t)for(r=e.onRecoverableError,n=0;n<t.length;n++)r((o=t[n]).value,{componentStack:o.stack,digest:o.digest});if(qu)throw qu=!1,e=Qu,Qu=null,e;0!=(1&Gu)&&0!==e.tag&&Es(),0!=(1&(i=e.pendingLanes))?e===Ju?Zu++:(Zu=0,Ju=e):Zu=0,Bo()}(e,t,n,r)}finally{Tu.transition=o,bt=r}return null}function Es(){if(null!==Xu){var e=wt(Gu),t=Tu.transition,n=bt;try{if(Tu.transition=null,bt=16>e?16:e,null===Xu)var r=!1;else{if(e=Xu,Xu=null,Gu=0,0!=(6&Nu))throw Error(a(331));var o=Nu;for(Nu|=4,eu=e.current;null!==eu;){var i=eu,l=i.child;if(0!=(16&eu.flags)){var u=i.deletions;if(null!==u){for(var s=0;s<u.length;s++){var c=u[s];for(eu=c;null!==eu;){var f=eu;switch(f.tag){case 0:case 11:case 15:ou(8,f,i)}var d=f.child;if(null!==d)d.return=f,eu=d;else for(;null!==eu;){var p=(f=eu).sibling,m=f.return;if(lu(f),f===c){eu=null;break}if(null!==p){p.return=m,eu=p;break}eu=m}}}var h=i.alternate;if(null!==h){var v=h.child;if(null!==v){h.child=null;do{var g=v.sibling;v.sibling=null,v=g}while(null!==v)}}eu=i}}if(0!=(2064&i.subtreeFlags)&&null!==l)l.return=i,eu=l;else e:for(;null!==eu;){if(0!=(2048&(i=eu).flags))switch(i.tag){case 0:case 11:case 15:ou(9,i,i.return)}var y=i.sibling;if(null!==y){y.return=i.return,eu=y;break e}eu=i.return}}var b=e.current;for(eu=b;null!==eu;){var w=(l=eu).child;if(0!=(2064&l.subtreeFlags)&&null!==w)w.return=l,eu=w;else e:for(l=b;null!==eu;){if(0!=(2048&(u=eu).flags))try{switch(u.tag){case 0:case 11:case 15:au(9,u)}}catch(e){Cs(u,u.return,e)}if(u===l){eu=null;break e}var x=u.sibling;if(null!==x){x.return=u.return,eu=x;break e}eu=u.return}}if(Nu=o,Bo(),at&&"function"==typeof at.onPostCommitFiberRoot)try{at.onPostCommitFiberRoot(ot,e)}catch(e){}r=!0}return r}finally{bt=n,Tu.transition=t}}return!1}function _s(e,t,n){e=Ma(e,t=hl(0,t=fl(n,t),1),1),t=ns(),null!==e&&(gt(e,1,t),as(e,t))}function Cs(e,t,n){if(3===e.tag)_s(e,e,n);else for(;null!==t;){if(3===t.tag){_s(t,e,n);break}if(1===t.tag){var r=t.stateNode;if("function"==typeof t.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Yu||!Yu.has(r))){t=Ma(t,e=vl(t,e=fl(n,e),1),1),e=ns(),null!==t&&(gt(t,1,e),as(t,e));break}}t=t.return}}function Ps(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=ns(),e.pingedLanes|=e.suspendedLanes&n,Lu===e&&(Au&n)===n&&(4===Mu||3===Mu&&(130023424&Au)===Au&&500>Ge()-Hu?ms(e,0):$u|=n),as(e,t)}function Os(e,t){0===t&&(0==(1&e.mode)?t=1:(t=ct,0==(130023424&(ct<<=1))&&(ct=4194304)));var n=ns();null!==(e=La(e,t))&&(gt(e,t,n),as(e,n))}function Ts(e){var t=e.memoizedState,n=0;null!==t&&(n=t.retryLane),Os(e,n)}function Ns(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,o=e.memoizedState;null!==o&&(n=o.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(a(314))}null!==r&&r.delete(t),Os(e,n)}function Ls(e,t){return Qe(e,t)}function Rs(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function As(e,t,n,r){return new Rs(e,t,n,r)}function zs(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Fs(e,t){var n=e.alternate;return null===n?((n=As(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=14680064&e.flags,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Ms(e,t,n,r,o,i){var l=2;if(r=e,"function"==typeof e)zs(e)&&(l=1);else if("string"==typeof e)l=5;else e:switch(e){case S:return Ds(n.children,o,i,t);case E:l=8,o|=8;break;case _:return(e=As(12,n,t,2|o)).elementType=_,e.lanes=i,e;case T:return(e=As(13,n,t,o)).elementType=T,e.lanes=i,e;case N:return(e=As(19,n,t,o)).elementType=N,e.lanes=i,e;case A:return js(n,o,i,t);default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case C:l=10;break e;case P:l=9;break e;case O:l=11;break e;case L:l=14;break e;case R:l=16,r=null;break e}throw Error(a(130,null==e?e:typeof e,""))}return(t=As(l,n,t,o)).elementType=e,t.type=r,t.lanes=i,t}function Ds(e,t,n,r){return(e=As(7,e,r,t)).lanes=n,e}function js(e,t,n,r){return(e=As(22,e,r,t)).elementType=A,e.lanes=n,e.stateNode={isHidden:!1},e}function Is(e,t,n){return(e=As(6,e,null,t)).lanes=n,e}function $s(e,t,n){return(t=As(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Us(e,t,n,r,o){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=vt(0),this.expirationTimes=vt(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=vt(0),this.identifierPrefix=r,this.onRecoverableError=o,this.mutableSourceEagerHydrationData=null}function Vs(e,t,n,r,o,a,i,l,u){return e=new Us(e,t,n,l,u),1===t?(t=1,!0===a&&(t|=8)):t=0,a=As(3,null,null,t),e.current=a,a.stateNode=e,a.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Aa(a),e}function Hs(e){if(!e)return To;e:{if(Ve(e=e._reactInternals)!==e||1!==e.tag)throw Error(a(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(zo(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(null!==t);throw Error(a(171))}if(1===e.tag){var n=e.type;if(zo(n))return Do(e,n,t)}return t}function Bs(e,t,n,r,o,a,i,l,u){return(e=Vs(n,r,!0,e,0,a,0,l,u)).context=Hs(null),n=e.current,(a=Fa(r=ns(),o=rs(n))).callback=null!=t?t:null,Ma(n,a,o),e.current.lanes=o,gt(e,o,r),as(e,r),e}function Ws(e,t,n,r){var o=t.current,a=ns(),i=rs(o);return n=Hs(n),null===t.context?t.context=n:t.pendingContext=n,(t=Fa(a,i)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),null!==(e=Ma(o,t,i))&&(os(e,o,i,a),Da(e,o,i)),i}function qs(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function Qs(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function Ys(e,t){Qs(e,t),(e=e.alternate)&&Qs(e,t)}_u=function(e,t,n){if(null!==e)if(e.memoizedProps!==t.pendingProps||Lo.current)xl=!0;else{if(0==(e.lanes&n)&&0==(128&t.flags))return xl=!1,function(e,t,n){switch(t.tag){case 3:Ll(t),ha();break;case 5:li(t);break;case 1:zo(t.type)&&jo(t);break;case 4:ai(t,t.stateNode.containerInfo);break;case 10:var r=t.type._context,o=t.memoizedProps.value;Oo(ba,r._currentValue),r._currentValue=o;break;case 13:if(null!==(r=t.memoizedState))return null!==r.dehydrated?(Oo(si,1&si.current),t.flags|=128,null):0!=(n&t.child.childLanes)?Il(e,t,n):(Oo(si,1&si.current),null!==(e=ql(e,t,n))?e.sibling:null);Oo(si,1&si.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(128&e.flags)){if(r)return Bl(e,t,n);t.flags|=128}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),Oo(si,si.current),r)break;return null;case 22:case 23:return t.lanes=0,Cl(e,t,n)}return ql(e,t,n)}(e,t,n);xl=0!=(131072&e.flags)}else xl=!1,ia&&0!=(1048576&t.flags)&&ta(t,Yo,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Wl(e,t),e=t.pendingProps;var o=Ao(t,No.current);Ca(t,n),o=_i(null,t,r,e,o,n);var i=Ci();return t.flags|=1,"object"==typeof o&&null!==o&&"function"==typeof o.render&&void 0===o.$$typeof?(t.tag=1,t.memoizedState=null,t.updateQueue=null,zo(r)?(i=!0,jo(t)):i=!1,t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,Aa(t),o.updater=Ha,t.stateNode=o,o._reactInternals=t,Qa(t,r,e,n),t=Nl(null,t,r,!0,i,n)):(t.tag=0,ia&&i&&na(t),kl(null,t,o,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Wl(e,t),e=t.pendingProps,r=(o=r._init)(r._payload),t.type=r,o=t.tag=function(e){if("function"==typeof e)return zs(e)?1:0;if(null!=e){if((e=e.$$typeof)===O)return 11;if(e===L)return 14}return 2}(r),e=ya(r,e),o){case 0:t=Ol(null,t,r,e,n);break e;case 1:t=Tl(null,t,r,e,n);break e;case 11:t=Sl(null,t,r,e,n);break e;case 14:t=El(null,t,r,ya(r.type,e),n);break e}throw Error(a(306,r,""))}return t;case 0:return r=t.type,o=t.pendingProps,Ol(e,t,r,o=t.elementType===r?o:ya(r,o),n);case 1:return r=t.type,o=t.pendingProps,Tl(e,t,r,o=t.elementType===r?o:ya(r,o),n);case 3:e:{if(Ll(t),null===e)throw Error(a(387));r=t.pendingProps,o=(i=t.memoizedState).element,za(e,t),Ia(t,r,null,n);var l=t.memoizedState;if(r=l.element,i.isDehydrated){if(i={element:r,isDehydrated:!1,cache:l.cache,pendingSuspenseBoundaries:l.pendingSuspenseBoundaries,transitions:l.transitions},t.updateQueue.baseState=i,t.memoizedState=i,256&t.flags){t=Rl(e,t,r,n,o=fl(Error(a(423)),t));break e}if(r!==o){t=Rl(e,t,r,n,o=fl(Error(a(424)),t));break e}for(aa=co(t.stateNode.containerInfo.firstChild),oa=t,ia=!0,la=null,n=Ja(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|4096,n=n.sibling}else{if(ha(),r===o){t=ql(e,t,n);break e}kl(e,t,r,n)}t=t.child}return t;case 5:return li(t),null===e&&fa(t),r=t.type,o=t.pendingProps,i=null!==e?e.memoizedProps:null,l=o.children,ro(r,o)?l=null:null!==i&&ro(r,i)&&(t.flags|=32),Pl(e,t),kl(e,t,l,n),t.child;case 6:return null===e&&fa(t),null;case 13:return Il(e,t,n);case 4:return ai(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=Za(t,null,r,n):kl(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,Sl(e,t,r,o=t.elementType===r?o:ya(r,o),n);case 7:return kl(e,t,t.pendingProps,n),t.child;case 8:case 12:return kl(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,o=t.pendingProps,i=t.memoizedProps,l=o.value,Oo(ba,r._currentValue),r._currentValue=l,null!==i)if(ur(i.value,l)){if(i.children===o.children&&!Lo.current){t=ql(e,t,n);break e}}else for(null!==(i=t.child)&&(i.return=t);null!==i;){var u=i.dependencies;if(null!==u){l=i.child;for(var s=u.firstContext;null!==s;){if(s.context===r){if(1===i.tag){(s=Fa(-1,n&-n)).tag=2;var c=i.updateQueue;if(null!==c){var f=(c=c.shared).pending;null===f?s.next=s:(s.next=f.next,f.next=s),c.pending=s}}i.lanes|=n,null!==(s=i.alternate)&&(s.lanes|=n),_a(i.return,n,t),u.lanes|=n;break}s=s.next}}else if(10===i.tag)l=i.type===t.type?null:i.child;else if(18===i.tag){if(null===(l=i.return))throw Error(a(341));l.lanes|=n,null!==(u=l.alternate)&&(u.lanes|=n),_a(l,n,t),l=i.sibling}else l=i.child;if(null!==l)l.return=i;else for(l=i;null!==l;){if(l===t){l=null;break}if(null!==(i=l.sibling)){i.return=l.return,l=i;break}l=l.return}i=l}kl(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=t.pendingProps.children,Ca(t,n),r=r(o=Pa(o)),t.flags|=1,kl(e,t,r,n),t.child;case 14:return o=ya(r=t.type,t.pendingProps),El(e,t,r,o=ya(r.type,o),n);case 15:return _l(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:ya(r,o),Wl(e,t),t.tag=1,zo(r)?(e=!0,jo(t)):e=!1,Ca(t,n),Wa(t,r,o),Qa(t,r,o,n),Nl(null,t,r,!0,e,n);case 19:return Bl(e,t,n);case 22:return Cl(e,t,n)}throw Error(a(156,t.tag))};var Ks="function"==typeof reportError?reportError:function(e){console.error(e)};function Xs(e){this._internalRoot=e}function Gs(e){this._internalRoot=e}function Zs(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType)}function Js(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function ec(){}function tc(e,t,n,r,o){var a=n._reactRootContainer;if(a){var i=a;if("function"==typeof o){var l=o;o=function(){var e=qs(i);l.call(e)}}Ws(t,i,e,o)}else i=function(e,t,n,r,o){if(o){if("function"==typeof r){var a=r;r=function(){var e=qs(i);a.call(e)}}var i=Bs(t,r,e,0,null,!1,0,"",ec);return e._reactRootContainer=i,e[vo]=i.current,Hr(8===e.nodeType?e.parentNode:e),ds(),i}for(;o=e.lastChild;)e.removeChild(o);if("function"==typeof r){var l=r;r=function(){var e=qs(u);l.call(e)}}var u=Vs(e,0,!1,null,0,!1,0,"",ec);return e._reactRootContainer=u,e[vo]=u.current,Hr(8===e.nodeType?e.parentNode:e),ds((function(){Ws(t,u,n,r)})),u}(n,t,e,o,r);return qs(i)}Gs.prototype.render=Xs.prototype.render=function(e){var t=this._internalRoot;if(null===t)throw Error(a(409));Ws(e,t,null,null)},Gs.prototype.unmount=Xs.prototype.unmount=function(){var e=this._internalRoot;if(null!==e){this._internalRoot=null;var t=e.containerInfo;ds((function(){Ws(null,e,null,null)})),t[vo]=null}},Gs.prototype.unstable_scheduleHydration=function(e){if(e){var t=Et();e={blockedOn:null,target:e,priority:t};for(var n=0;n<At.length&&0!==t&&t<At[n].priority;n++);At.splice(n,0,e),0===n&&Dt(e)}},xt=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var n=ft(t.pendingLanes);0!==n&&(yt(t,1|n),as(t,Ge()),0==(6&Nu)&&(Bu=Ge()+500,Bo()))}break;case 13:ds((function(){var t=La(e,1);if(null!==t){var n=ns();os(t,e,1,n)}})),Ys(e,1)}},kt=function(e){if(13===e.tag){var t=La(e,134217728);null!==t&&os(t,e,134217728,ns()),Ys(e,134217728)}},St=function(e){if(13===e.tag){var t=rs(e),n=La(e,t);null!==n&&os(n,e,t,ns()),Ys(e,t)}},Et=function(){return bt},_t=function(e,t){var n=bt;try{return bt=e,t()}finally{bt=n}},ke=function(e,t,n){switch(t){case"input":if(Z(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=So(r);if(!o)throw Error(a(90));Q(r),Z(r,o)}}}break;case"textarea":ae(e,n);break;case"select":null!=(t=n.value)&&ne(e,!!n.multiple,t,!1)}},Oe=fs,Te=ds;var nc={usingClientEntryPoint:!1,Events:[xo,ko,So,Ce,Pe,fs]},rc={findFiberByHostInstance:wo,bundleType:0,version:"18.2.0",rendererPackageName:"react-dom"},oc={bundleType:rc.bundleType,version:rc.version,rendererPackageName:rc.rendererPackageName,rendererConfig:rc.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:w.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=We(e))?null:e.stateNode},findFiberByHostInstance:rc.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.2.0-next-9e3b772b8-20220608"};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var ac=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!ac.isDisabled&&ac.supportsFiber)try{ot=ac.inject(oc),at=ac}catch(ce){}}t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=nc,t.createPortal=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!Zs(t))throw Error(a(200));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:k,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)},t.createRoot=function(e,t){if(!Zs(e))throw Error(a(299));var n=!1,r="",o=Ks;return null!=t&&(!0===t.unstable_strictMode&&(n=!0),void 0!==t.identifierPrefix&&(r=t.identifierPrefix),void 0!==t.onRecoverableError&&(o=t.onRecoverableError)),t=Vs(e,1,!1,null,0,n,0,r,o),e[vo]=t.current,Hr(8===e.nodeType?e.parentNode:e),new Xs(t)},t.findDOMNode=function(e){if(null==e)return null;if(1===e.nodeType)return e;var t=e._reactInternals;if(void 0===t){if("function"==typeof e.render)throw Error(a(188));throw e=Object.keys(e).join(","),Error(a(268,e))}return null===(e=We(t))?null:e.stateNode},t.flushSync=function(e){return ds(e)},t.hydrate=function(e,t,n){if(!Js(t))throw Error(a(200));return tc(null,e,t,!0,n)},t.hydrateRoot=function(e,t,n){if(!Zs(e))throw Error(a(405));var r=null!=n&&n.hydratedSources||null,o=!1,i="",l=Ks;if(null!=n&&(!0===n.unstable_strictMode&&(o=!0),void 0!==n.identifierPrefix&&(i=n.identifierPrefix),void 0!==n.onRecoverableError&&(l=n.onRecoverableError)),t=Bs(t,null,e,1,null!=n?n:null,o,0,i,l),e[vo]=t.current,Hr(e),r)for(e=0;e<r.length;e++)o=(o=(n=r[e])._getVersion)(n._source),null==t.mutableSourceEagerHydrationData?t.mutableSourceEagerHydrationData=[n,o]:t.mutableSourceEagerHydrationData.push(n,o);return new Gs(t)},t.render=function(e,t,n){if(!Js(t))throw Error(a(200));return tc(null,e,t,!1,n)},t.unmountComponentAtNode=function(e){if(!Js(e))throw Error(a(40));return!!e._reactRootContainer&&(ds((function(){tc(null,null,e,!1,(function(){e._reactRootContainer=null,e[vo]=null}))})),!0)},t.unstable_batchedUpdates=fs,t.unstable_renderSubtreeIntoContainer=function(e,t,n,r){if(!Js(n))throw Error(a(200));if(null==e||void 0===e._reactInternals)throw Error(a(38));return tc(e,t,n,!1,r)},t.version="18.2.0-next-9e3b772b8-20220608"},745:(e,t,n)=>{"use strict";var r=n(3935);t.s=r.createRoot,r.hydrateRoot},3935:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(e){console.error(e)}}(),e.exports=n(4448)},5251:(e,t,n)=>{"use strict";var r=n(7294),o=Symbol.for("react.element"),a=Symbol.for("react.fragment"),i=Object.prototype.hasOwnProperty,l=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,u={key:!0,ref:!0,__self:!0,__source:!0};function s(e,t,n){var r,a={},s=null,c=null;for(r in void 0!==n&&(s=""+n),void 0!==t.key&&(s=""+t.key),void 0!==t.ref&&(c=t.ref),t)i.call(t,r)&&!u.hasOwnProperty(r)&&(a[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===a[r]&&(a[r]=t[r]);return{$$typeof:o,type:e,key:s,ref:c,props:a,_owner:l.current}}t.Fragment=a,t.jsx=s,t.jsxs=s},2408:(e,t)=>{"use strict";var n=Symbol.for("react.element"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),l=Symbol.for("react.provider"),u=Symbol.for("react.context"),s=Symbol.for("react.forward_ref"),c=Symbol.for("react.suspense"),f=Symbol.for("react.memo"),d=Symbol.for("react.lazy"),p=Symbol.iterator,m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},h=Object.assign,v={};function g(e,t,n){this.props=e,this.context=t,this.refs=v,this.updater=n||m}function y(){}function b(e,t,n){this.props=e,this.context=t,this.refs=v,this.updater=n||m}g.prototype.isReactComponent={},g.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},g.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},y.prototype=g.prototype;var w=b.prototype=new y;w.constructor=b,h(w,g.prototype),w.isPureReactComponent=!0;var x=Array.isArray,k=Object.prototype.hasOwnProperty,S={current:null},E={key:!0,ref:!0,__self:!0,__source:!0};function _(e,t,r){var o,a={},i=null,l=null;if(null!=t)for(o in void 0!==t.ref&&(l=t.ref),void 0!==t.key&&(i=""+t.key),t)k.call(t,o)&&!E.hasOwnProperty(o)&&(a[o]=t[o]);var u=arguments.length-2;if(1===u)a.children=r;else if(1<u){for(var s=Array(u),c=0;c<u;c++)s[c]=arguments[c+2];a.children=s}if(e&&e.defaultProps)for(o in u=e.defaultProps)void 0===a[o]&&(a[o]=u[o]);return{$$typeof:n,type:e,key:i,ref:l,props:a,_owner:S.current}}function C(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}var P=/\/+/g;function O(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function T(e,t,o,a,i){var l=typeof e;"undefined"!==l&&"boolean"!==l||(e=null);var u=!1;if(null===e)u=!0;else switch(l){case"string":case"number":u=!0;break;case"object":switch(e.$$typeof){case n:case r:u=!0}}if(u)return i=i(u=e),e=""===a?"."+O(u,0):a,x(i)?(o="",null!=e&&(o=e.replace(P,"$&/")+"/"),T(i,t,o,"",(function(e){return e}))):null!=i&&(C(i)&&(i=function(e,t){return{$$typeof:n,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,o+(!i.key||u&&u.key===i.key?"":(""+i.key).replace(P,"$&/")+"/")+e)),t.push(i)),1;if(u=0,a=""===a?".":a+":",x(e))for(var s=0;s<e.length;s++){var c=a+O(l=e[s],s);u+=T(l,t,o,c,i)}else if(c=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=p&&e[p]||e["@@iterator"])?e:null}(e),"function"==typeof c)for(e=c.call(e),s=0;!(l=e.next()).done;)u+=T(l=l.value,t,o,c=a+O(l,s++),i);else if("object"===l)throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return u}function N(e,t,n){if(null==e)return e;var r=[],o=0;return T(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function L(e){if(-1===e._status){var t=e._result;(t=t()).then((function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)}),(function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)})),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var R={current:null},A={transition:null},z={ReactCurrentDispatcher:R,ReactCurrentBatchConfig:A,ReactCurrentOwner:S};t.Children={map:N,forEach:function(e,t,n){N(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return N(e,(function(){t++})),t},toArray:function(e){return N(e,(function(e){return e}))||[]},only:function(e){if(!C(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},t.Component=g,t.Fragment=o,t.Profiler=i,t.PureComponent=b,t.StrictMode=a,t.Suspense=c,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=z,t.cloneElement=function(e,t,r){if(null==e)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var o=h({},e.props),a=e.key,i=e.ref,l=e._owner;if(null!=t){if(void 0!==t.ref&&(i=t.ref,l=S.current),void 0!==t.key&&(a=""+t.key),e.type&&e.type.defaultProps)var u=e.type.defaultProps;for(s in t)k.call(t,s)&&!E.hasOwnProperty(s)&&(o[s]=void 0===t[s]&&void 0!==u?u[s]:t[s])}var s=arguments.length-2;if(1===s)o.children=r;else if(1<s){u=Array(s);for(var c=0;c<s;c++)u[c]=arguments[c+2];o.children=u}return{$$typeof:n,type:e.type,key:a,ref:i,props:o,_owner:l}},t.createContext=function(e){return(e={$$typeof:u,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null}).Provider={$$typeof:l,_context:e},e.Consumer=e},t.createElement=_,t.createFactory=function(e){var t=_.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:s,render:e}},t.isValidElement=C,t.lazy=function(e){return{$$typeof:d,_payload:{_status:-1,_result:e},_init:L}},t.memo=function(e,t){return{$$typeof:f,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=A.transition;A.transition={};try{e()}finally{A.transition=t}},t.unstable_act=function(){throw Error("act(...) is not supported in production builds of React.")},t.useCallback=function(e,t){return R.current.useCallback(e,t)},t.useContext=function(e){return R.current.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e){return R.current.useDeferredValue(e)},t.useEffect=function(e,t){return R.current.useEffect(e,t)},t.useId=function(){return R.current.useId()},t.useImperativeHandle=function(e,t,n){return R.current.useImperativeHandle(e,t,n)},t.useInsertionEffect=function(e,t){return R.current.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return R.current.useLayoutEffect(e,t)},t.useMemo=function(e,t){return R.current.useMemo(e,t)},t.useReducer=function(e,t,n){return R.current.useReducer(e,t,n)},t.useRef=function(e){return R.current.useRef(e)},t.useState=function(e){return R.current.useState(e)},t.useSyncExternalStore=function(e,t,n){return R.current.useSyncExternalStore(e,t,n)},t.useTransition=function(){return R.current.useTransition()},t.version="18.2.0"},7294:(e,t,n)=>{"use strict";e.exports=n(2408)},5893:(e,t,n)=>{"use strict";e.exports=n(5251)},53:(e,t)=>{"use strict";function n(e,t){var n=e.length;e.push(t);e:for(;0<n;){var r=n-1>>>1,o=e[r];if(!(0<a(o,t)))break e;e[r]=t,e[n]=o,n=r}}function r(e){return 0===e.length?null:e[0]}function o(e){if(0===e.length)return null;var t=e[0],n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length,i=o>>>1;r<i;){var l=2*(r+1)-1,u=e[l],s=l+1,c=e[s];if(0>a(u,n))s<o&&0>a(c,u)?(e[r]=c,e[s]=n,r=s):(e[r]=u,e[l]=n,r=l);else{if(!(s<o&&0>a(c,n)))break e;e[r]=c,e[s]=n,r=s}}}return t}function a(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var l=Date,u=l.now();t.unstable_now=function(){return l.now()-u}}var s=[],c=[],f=1,d=null,p=3,m=!1,h=!1,v=!1,g="function"==typeof setTimeout?setTimeout:null,y="function"==typeof clearTimeout?clearTimeout:null,b="undefined"!=typeof setImmediate?setImmediate:null;function w(e){for(var t=r(c);null!==t;){if(null===t.callback)o(c);else{if(!(t.startTime<=e))break;o(c),t.sortIndex=t.expirationTime,n(s,t)}t=r(c)}}function x(e){if(v=!1,w(e),!h)if(null!==r(s))h=!0,A(k);else{var t=r(c);null!==t&&z(x,t.startTime-e)}}function k(e,n){h=!1,v&&(v=!1,y(C),C=-1),m=!0;var a=p;try{for(w(n),d=r(s);null!==d&&(!(d.expirationTime>n)||e&&!T());){var i=d.callback;if("function"==typeof i){d.callback=null,p=d.priorityLevel;var l=i(d.expirationTime<=n);n=t.unstable_now(),"function"==typeof l?d.callback=l:d===r(s)&&o(s),w(n)}else o(s);d=r(s)}if(null!==d)var u=!0;else{var f=r(c);null!==f&&z(x,f.startTime-n),u=!1}return u}finally{d=null,p=a,m=!1}}"undefined"!=typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var S,E=!1,_=null,C=-1,P=5,O=-1;function T(){return!(t.unstable_now()-O<P)}function N(){if(null!==_){var e=t.unstable_now();O=e;var n=!0;try{n=_(!0,e)}finally{n?S():(E=!1,_=null)}}else E=!1}if("function"==typeof b)S=function(){b(N)};else if("undefined"!=typeof MessageChannel){var L=new MessageChannel,R=L.port2;L.port1.onmessage=N,S=function(){R.postMessage(null)}}else S=function(){g(N,0)};function A(e){_=e,E||(E=!0,S())}function z(e,n){C=g((function(){e(t.unstable_now())}),n)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){h||m||(h=!0,A(k))},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):P=0<e?Math.floor(1e3/e):5},t.unstable_getCurrentPriorityLevel=function(){return p},t.unstable_getFirstCallbackNode=function(){return r(s)},t.unstable_next=function(e){switch(p){case 1:case 2:case 3:var t=3;break;default:t=p}var n=p;p=t;try{return e()}finally{p=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=function(){},t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=p;p=e;try{return t()}finally{p=n}},t.unstable_scheduleCallback=function(e,o,a){var i=t.unstable_now();switch(a="object"==typeof a&&null!==a&&"number"==typeof(a=a.delay)&&0<a?i+a:i,e){case 1:var l=-1;break;case 2:l=250;break;case 5:l=1073741823;break;case 4:l=1e4;break;default:l=5e3}return e={id:f++,callback:o,priorityLevel:e,startTime:a,expirationTime:l=a+l,sortIndex:-1},a>i?(e.sortIndex=a,n(c,e),null===r(s)&&e===r(c)&&(v?(y(C),C=-1):v=!0,z(x,a-i))):(e.sortIndex=l,n(s,e),h||m||(h=!0,A(k))),e},t.unstable_shouldYield=T,t.unstable_wrapCallback=function(e){var t=p;return function(){var n=p;p=t;try{return e.apply(this,arguments)}finally{p=n}}}},3840:(e,t,n)=>{"use strict";e.exports=n(53)},8975:(e,t,n)=>{var r;!function(){"use strict";var o={not_string:/[^s]/,not_bool:/[^t]/,not_type:/[^T]/,not_primitive:/[^v]/,number:/[diefg]/,numeric_arg:/[bcdiefguxX]/,json:/[j]/,not_json:/[^j]/,text:/^[^\x25]+/,modulo:/^\x25{2}/,placeholder:/^\x25(?:([1-9]\d*)\$|\(([^)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijostTuvxX])/,key:/^([a-z_][a-z_\d]*)/i,key_access:/^\.([a-z_][a-z_\d]*)/i,index_access:/^\[(\d+)\]/,sign:/^[+-]/};function a(e){return function(e,t){var n,r,i,l,u,s,c,f,d,p=1,m=e.length,h="";for(r=0;r<m;r++)if("string"==typeof e[r])h+=e[r];else if("object"==typeof e[r]){if((l=e[r]).keys)for(n=t[p],i=0;i<l.keys.length;i++){if(null==n)throw new Error(a('[sprintf] Cannot access property "%s" of undefined value "%s"',l.keys[i],l.keys[i-1]));n=n[l.keys[i]]}else n=l.param_no?t[l.param_no]:t[p++];if(o.not_type.test(l.type)&&o.not_primitive.test(l.type)&&n instanceof Function&&(n=n()),o.numeric_arg.test(l.type)&&"number"!=typeof n&&isNaN(n))throw new TypeError(a("[sprintf] expecting number but found %T",n));switch(o.number.test(l.type)&&(f=n>=0),l.type){case"b":n=parseInt(n,10).toString(2);break;case"c":n=String.fromCharCode(parseInt(n,10));break;case"d":case"i":n=parseInt(n,10);break;case"j":n=JSON.stringify(n,null,l.width?parseInt(l.width):0);break;case"e":n=l.precision?parseFloat(n).toExponential(l.precision):parseFloat(n).toExponential();break;case"f":n=l.precision?parseFloat(n).toFixed(l.precision):parseFloat(n);break;case"g":n=l.precision?String(Number(n.toPrecision(l.precision))):parseFloat(n);break;case"o":n=(parseInt(n,10)>>>0).toString(8);break;case"s":n=String(n),n=l.precision?n.substring(0,l.precision):n;break;case"t":n=String(!!n),n=l.precision?n.substring(0,l.precision):n;break;case"T":n=Object.prototype.toString.call(n).slice(8,-1).toLowerCase(),n=l.precision?n.substring(0,l.precision):n;break;case"u":n=parseInt(n,10)>>>0;break;case"v":n=n.valueOf(),n=l.precision?n.substring(0,l.precision):n;break;case"x":n=(parseInt(n,10)>>>0).toString(16);break;case"X":n=(parseInt(n,10)>>>0).toString(16).toUpperCase()}o.json.test(l.type)?h+=n:(!o.number.test(l.type)||f&&!l.sign?d="":(d=f?"+":"-",n=n.toString().replace(o.sign,"")),s=l.pad_char?"0"===l.pad_char?"0":l.pad_char.charAt(1):" ",c=l.width-(d+n).length,u=l.width&&c>0?s.repeat(c):"",h+=l.align?d+n+u:"0"===s?d+u+n:u+d+n)}return h}(function(e){if(l[e])return l[e];for(var t,n=e,r=[],a=0;n;){if(null!==(t=o.text.exec(n)))r.push(t[0]);else if(null!==(t=o.modulo.exec(n)))r.push("%");else{if(null===(t=o.placeholder.exec(n)))throw new SyntaxError("[sprintf] unexpected placeholder");if(t[2]){a|=1;var i=[],u=t[2],s=[];if(null===(s=o.key.exec(u)))throw new SyntaxError("[sprintf] failed to parse named argument key");for(i.push(s[1]);""!==(u=u.substring(s[0].length));)if(null!==(s=o.key_access.exec(u)))i.push(s[1]);else{if(null===(s=o.index_access.exec(u)))throw new SyntaxError("[sprintf] failed to parse named argument key");i.push(s[1])}t[2]=i}else a|=2;if(3===a)throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported");r.push({placeholder:t[0],param_no:t[1],keys:t[2],sign:t[3],pad_char:t[4],align:t[5],width:t[6],precision:t[7],type:t[8]})}n=n.substring(t[0].length)}return l[e]=r}(e),arguments)}function i(e,t){return a.apply(null,[e].concat(t||[]))}var l=Object.create(null);t.sprintf=a,t.vsprintf=i,"undefined"!=typeof window&&(window.sprintf=a,window.vsprintf=i,void 0===(r=function(){return{sprintf:a,vsprintf:i}}.call(t,n,t,e))||(e.exports=r))}()},3250:(e,t,n)=>{"use strict";var r=n(7294),o="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},a=r.useState,i=r.useEffect,l=r.useLayoutEffect,u=r.useDebugValue;function s(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(e){return!0}}var c="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=a({inst:{value:n,getSnapshot:t}}),o=r[0].inst,c=r[1];return l((function(){o.value=n,o.getSnapshot=t,s(o)&&c({inst:o})}),[e,n,t]),i((function(){return s(o)&&c({inst:o}),e((function(){s(o)&&c({inst:o})}))}),[e]),u(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:c},1688:(e,t,n)=>{"use strict";e.exports=n(3250)}},r={};function o(e){var t=r[e];if(void 0!==t)return t.exports;var a=r[e]={exports:{}};return n[e].call(a.exports,a,a.exports,o),a.exports}o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,o.t=function(n,r){if(1&r&&(n=this(n)),8&r)return n;if("object"==typeof n&&n){if(4&r&&n.__esModule)return n;if(16&r&&"function"==typeof n.then)return n}var a=Object.create(null);o.r(a);var i={};e=e||[null,t({}),t([]),t(t)];for(var l=2&r&&n;"object"==typeof l&&!~e.indexOf(l);l=t(l))Object.getOwnPropertyNames(l).forEach((e=>i[e]=()=>n[e]));return i.default=()=>n,o.d(a,i),a},o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{"use strict";var e=o(7294),t=o.t(e,2);const n=ampSupport;var r=o(745);const a=(0,e.createContext)();function i({children:t}){const[n,r]=(0,e.useState)(null);return(0,e.createElement)(a.Provider,{value:{error:n,setError:r}},t)}let l,u,s,c;const f=/<(\/)?(\w+)\s*(\/)?>/g;function d(e,t,n,r,o){return{element:e,tokenStart:t,tokenLength:n,prevOffset:r,leadingTextStart:o,children:[]}}function p(t){const n=function(){const e=f.exec(l);if(null===e)return["no-more-tokens"];const t=e.index,[n,r,o,a]=e,i=n.length;return a?["self-closed",o,t,i]:r?["closer",o,t,i]:["opener",o,t,i]}(),[r,o,a,i]=n,p=c.length,v=a>u?u:null;if(!t[o])return m(),!1;switch(r){case"no-more-tokens":if(0!==p){const{leadingTextStart:e,tokenStart:t}=c.pop();s.push(l.substr(e,t))}return m(),!1;case"self-closed":return 0===p?(null!==v&&s.push(l.substr(v,a-v)),s.push(t[o]),u=a+i,!0):(h(d(t[o],a,i)),u=a+i,!0);case"opener":return c.push(d(t[o],a,i,a+i,v)),u=a+i,!0;case"closer":if(1===p)return function(t){const{element:n,leadingTextStart:r,prevOffset:o,tokenStart:a,children:i}=c.pop(),u=t?l.substr(o,t-o):l.substr(o);u&&i.push(u),null!==r&&s.push(l.substr(r,a-r)),s.push((0,e.cloneElement)(n,null,...i))}(a),u=a+i,!0;const n=c.pop(),r=l.substr(n.prevOffset,a-n.prevOffset);n.children.push(r),n.prevOffset=a+i;const f=d(n.element,n.tokenStart,n.tokenLength,a+i);return f.children=n.children,h(f),u=a+i,!0;default:return m(),!1}}function m(){const e=l.length-u;0!==e&&s.push(l.substr(u,e))}function h(t){const{element:n,tokenStart:r,tokenLength:o,prevOffset:a,children:i}=t,u=c[c.length-1],s=l.substr(u.prevOffset,r-u.prevOffset);s&&u.children.push(s),u.children.push((0,e.cloneElement)(n,null,...i)),u.prevOffset=a||r+o}const v=(t,n)=>{if(l=t,u=0,s=[],c=[],f.lastIndex=0,!(t=>{const n="object"==typeof t,r=n&&Object.values(t);return n&&r.length&&r.every((t=>(0,e.isValidElement)(t)))})(n))throw new TypeError("The conversionMap provided is not valid. It must be an object with values that are React Elements");do{}while(p(n));return(0,e.createElement)(e.Fragment,null,...s)};var g=o(4184),y=o.n(g);const b=function(e){return"string"!=typeof e||""===e?(console.error("The namespace must be a non-empty string."),!1):!!/^[a-zA-Z][a-zA-Z0-9_.\-\/]*$/.test(e)||(console.error("The namespace can only contain numbers, letters, dashes, periods, underscores and slashes."),!1)},w=function(e){return"string"!=typeof e||""===e?(console.error("The hook name must be a non-empty string."),!1):/^__/.test(e)?(console.error("The hook name cannot begin with `__`."),!1):!!/^[a-zA-Z][a-zA-Z0-9_.-]*$/.test(e)||(console.error("The hook name can only contain numbers, letters, dashes, periods and underscores."),!1)},x=function(e,t){return function(n,r,o,a=10){const i=e[t];if(!w(n))return;if(!b(r))return;if("function"!=typeof o)return void console.error("The hook callback must be a function.");if("number"!=typeof a)return void console.error("If specified, the hook priority must be a number.");const l={callback:o,priority:a,namespace:r};if(i[n]){const e=i[n].handlers;let t;for(t=e.length;t>0&&!(a>=e[t-1].priority);t--);t===e.length?e[t]=l:e.splice(t,0,l),i.__current.forEach((e=>{e.name===n&&e.currentIndex>=t&&e.currentIndex++}))}else i[n]={handlers:[l],runs:0};"hookAdded"!==n&&e.doAction("hookAdded",n,r,o,a)}},k=function(e,t,n=!1){return function(r,o){const a=e[t];if(!w(r))return;if(!n&&!b(o))return;if(!a[r])return 0;let i=0;if(n)i=a[r].handlers.length,a[r]={runs:a[r].runs,handlers:[]};else{const e=a[r].handlers;for(let t=e.length-1;t>=0;t--)e[t].namespace===o&&(e.splice(t,1),i++,a.__current.forEach((e=>{e.name===r&&e.currentIndex>=t&&e.currentIndex--})))}return"hookRemoved"!==r&&e.doAction("hookRemoved",r,o),i}},S=function(e,t){return function(n,r){const o=e[t];return void 0!==r?n in o&&o[n].handlers.some((e=>e.namespace===r)):n in o}},E=function(e,t,n=!1){return function(r,...o){const a=e[t];a[r]||(a[r]={handlers:[],runs:0}),a[r].runs++;const i=a[r].handlers;if(!i||!i.length)return n?o[0]:void 0;const l={name:r,currentIndex:0};for(a.__current.push(l);l.currentIndex<i.length;){const e=i[l.currentIndex].callback.apply(null,o);n&&(o[0]=e),l.currentIndex++}return a.__current.pop(),n?o[0]:void 0}},_=function(e,t){return function(){var n;const r=e[t];return null!==(n=r.__current[r.__current.length-1]?.name)&&void 0!==n?n:null}},C=function(e,t){return function(n){const r=e[t];return void 0===n?void 0!==r.__current[0]:!!r.__current[0]&&n===r.__current[0].name}},P=function(e,t){return function(n){const r=e[t];if(w(n))return r[n]&&r[n].runs?r[n].runs:0}};class O{constructor(){this.actions=Object.create(null),this.actions.__current=[],this.filters=Object.create(null),this.filters.__current=[],this.addAction=x(this,"actions"),this.addFilter=x(this,"filters"),this.removeAction=k(this,"actions"),this.removeFilter=k(this,"filters"),this.hasAction=S(this,"actions"),this.hasFilter=S(this,"filters"),this.removeAllActions=k(this,"actions",!0),this.removeAllFilters=k(this,"filters",!0),this.doAction=E(this,"actions"),this.applyFilters=E(this,"filters",!0),this.currentAction=_(this,"actions"),this.currentFilter=_(this,"filters"),this.doingAction=C(this,"actions"),this.doingFilter=C(this,"filters"),this.didAction=P(this,"actions"),this.didFilter=P(this,"filters")}}const T=new O,{addAction:N,addFilter:L,removeAction:R,removeFilter:A,hasAction:z,hasFilter:F,removeAllActions:M,removeAllFilters:D,doAction:j,applyFilters:I,currentAction:$,currentFilter:U,doingAction:V,doingFilter:H,didAction:B,didFilter:W,actions:q,filters:Q}=T,Y=Object.create(null);function K(e,t={}){const{since:n,version:r,alternative:o,plugin:a,link:i,hint:l}=t,u=`${e} is deprecated${n?` since version ${n}`:""}${r?` and will be removed${a?` from ${a}`:""} in version ${r}`:""}.${o?` Please use ${o} instead.`:""}${i?` See: ${i}`:""}${l?` Note: ${l}`:""}`;u in Y||(j("deprecated",e,t,u),console.warn(u),Y[u]=!0)}const X=new WeakMap,G=function(t,n,r){return(0,e.useMemo)((()=>{if(r)return r;const e=function(e){const t=X.get(e)||0;return X.set(e,t+1),t}(t);return n?`${n}-${e}`:e}),[t,r,n])};var Z=Object.defineProperty,J=Object.defineProperties,ee=Object.getOwnPropertyDescriptors,te=Object.getOwnPropertySymbols,ne=Object.prototype.hasOwnProperty,re=Object.prototype.propertyIsEnumerable,oe=(e,t,n)=>t in e?Z(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,ae=(e,t)=>{for(var n in t||(t={}))ne.call(t,n)&&oe(e,n,t[n]);if(te)for(var n of te(t))re.call(t,n)&&oe(e,n,t[n]);return e},ie=(e,t)=>J(e,ee(t)),le=(e,t)=>{var n={};for(var r in e)ne.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&te)for(var r of te(e))t.indexOf(r)<0&&re.call(e,r)&&(n[r]=e[r]);return n},ue=Object.defineProperty,se=Object.defineProperties,ce=Object.getOwnPropertyDescriptors,fe=Object.getOwnPropertySymbols,de=Object.prototype.hasOwnProperty,pe=Object.prototype.propertyIsEnumerable,me=(e,t,n)=>t in e?ue(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,he=(e,t)=>{for(var n in t||(t={}))de.call(t,n)&&me(e,n,t[n]);if(fe)for(var n of fe(t))pe.call(t,n)&&me(e,n,t[n]);return e},ve=(e,t)=>se(e,ce(t)),ge=(e,t)=>{var n={};for(var r in e)de.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&fe)for(var r of fe(e))t.indexOf(r)<0&&pe.call(e,r)&&(n[r]=e[r]);return n};function ye(...e){}function be(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function we(...e){return(...t)=>{for(const n of e)"function"==typeof n&&n(...t)}}function xe(e){return e}function ke(e,t){if(!e){if("string"!=typeof t)throw new Error("Invariant failed");throw new Error(t)}}function Se(e,...t){const n="function"==typeof e?e(...t):e;return null!=n&&!n}function Ee(e){return e.disabled||!0===e["aria-disabled"]||"true"===e["aria-disabled"]}function _e(...e){for(const t of e)if(void 0!==t)return t}function Ce(e,t){"function"==typeof e?e(t):e&&(e.current=t)}var Pe,Oe="undefined"!=typeof window&&!!(null==(Pe=window.document)?void 0:Pe.createElement);function Te(e){return e?e.ownerDocument||e:document}function Ne(e,t=!1){const{activeElement:n}=Te(e);if(!(null==n?void 0:n.nodeName))return null;if(Re(n)&&n.contentDocument)return Ne(n.contentDocument.body,t);if(t){const e=n.getAttribute("aria-activedescendant");if(e){const t=Te(n).getElementById(e);if(t)return t}}return n}function Le(e,t){return e===t||e.contains(t)}function Re(e){return"IFRAME"===e.tagName}function Ae(e){const t=e.tagName.toLowerCase();return"button"===t||!("input"!==t||!e.type)&&-1!==ze.indexOf(e.type)}var ze=["button","color","file","image","reset","submit"];function Fe(e,t){return"matches"in e?e.matches(t):"msMatchesSelector"in e?e.msMatchesSelector(t):e.webkitMatchesSelector(t)}function Me(e){const t=e;return t.offsetWidth>0||t.offsetHeight>0||e.getClientRects().length>0}function De(e,t){if("closest"in e)return e.closest(t);do{if(Fe(e,t))return e;e=e.parentElement||e.parentNode}while(null!==e&&1===e.nodeType);return null}function je(e){return e.target===e.currentTarget}function Ie(e,t){const n=t||e.currentTarget,r=e.relatedTarget;return!r||!Le(n,r)}function $e(e,t,n){const r=requestAnimationFrame((()=>{e.removeEventListener(t,o,!0),n()})),o=()=>{cancelAnimationFrame(r),n()};return e.addEventListener(t,o,{once:!0,capture:!0}),r}function Ue(e,t,n,r=window){const o=[];try{r.document.addEventListener(e,t,n);for(const a of Array.from(r.frames))o.push(Ue(e,t,n,a))}catch(e){}return()=>{try{r.document.removeEventListener(e,t,n)}catch(e){}o.forEach((e=>e()))}}var Ve=ae({},t),He=Ve.useId,Be=(Ve.useDeferredValue,Ve.useInsertionEffect),We=Oe?e.useLayoutEffect:e.useEffect;function qe(t){const n=(0,e.useRef)(t);return We((()=>{n.current=t})),n}function Qe(t){const n=(0,e.useRef)((()=>{throw new Error("Cannot call an event handler while rendering.")}));return Be?Be((()=>{n.current=t})):n.current=t,(0,e.useCallback)(((...e)=>{var t;return null==(t=n.current)?void 0:t.call(n,...e)}),[])}function Ye(...t){return(0,e.useMemo)((()=>{if(t.some(Boolean))return e=>{t.forEach((t=>Ce(t,e)))}}),t)}function Ke(t){if(He){const e=He();return t||e}const[n,r]=(0,e.useState)(t);return We((()=>{if(t||n)return;const e=Math.random().toString(36).substr(2,6);r(`id-${e}`)}),[t,n]),t||n}function Xe(t,n){const r=(0,e.useRef)(!1);(0,e.useEffect)((()=>{if(r.current)return t();r.current=!0}),n),(0,e.useEffect)((()=>()=>{r.current=!1}),[])}function Ge(e){return Qe("function"==typeof e?e:()=>e)}function Ze(t,n,r=[]){const o=(0,e.useCallback)((e=>(t.wrapElement&&(e=t.wrapElement(e)),n(e))),[...r,t.wrapElement]);return ie(ae({},t),{wrapElement:o})}function Je(t=!1,n){const[r,o]=(0,e.useState)(null);return{portalRef:Ye(o,n),portalNode:r,domReady:!t||r}}Symbol("setNextState");var et=!1,tt=0,nt=0;function rt(e){(function(e){const t=e.movementX||e.screenX-tt,n=e.movementY||e.screenY-nt;return tt=e.screenX,nt=e.screenY,t||n||!1})(e)&&(et=!0)}function ot(){et=!1}function at(e,t){const n=e.__unstableInternals;return ke(n,"Invalid store"),n[t]}function it(e,...t){let n=e,r=n,o=Symbol(),a=!1;const i=new Set,l=new Set,u=new Set,s=new Set,c=new WeakMap,f=new WeakMap,d=(e,t,n=u)=>(n.add(t),f.set(t,e),()=>{var e;null==(e=c.get(t))||e(),c.delete(t),f.delete(t),n.delete(t)}),p=(e,a,l=!1)=>{if(!be(n,e))return;const d=(p=a,m=n[e],function(e){return"function"==typeof e}(p)?p(function(e){return"function"==typeof e}(m)?m():m):p);var p,m;if(d===n[e])return;l||t.forEach((t=>{var n;null==(n=null==t?void 0:t.setState)||n.call(t,e,d)}));const h=n;n=ve(he({},n),{[e]:d});const v=Symbol();o=v,i.add(e);const g=(t,r,o)=>{var a;const i=f.get(t);i&&!i.some((t=>o?o.has(t):t===e))||(null==(a=c.get(t))||a(),c.set(t,t(n,r)))};u.forEach((e=>{g(e,h)})),queueMicrotask((()=>{if(o!==v)return;const e=n;s.forEach((e=>{g(e,r,i)})),r=e,i.clear()}))},m={getState:()=>n,setState:p,__unstableInternals:{setup:e=>(l.add(e),()=>l.delete(e)),init:()=>{if(a)return ye;if(!t.length)return ye;a=!0;const e=(r=n,Object.keys(r)).map((e=>we(...t.map((t=>{var n;const r=null==(n=null==t?void 0:t.getState)?void 0:n.call(t);if(r&&be(r,e))return ct(t,[e],(t=>p(e,t[e],!0)))})))));var r;const o=[];l.forEach((e=>o.push(e())));const i=t.map(ut);return we(...e,...o,...i,(()=>{a=!1}))},subscribe:(e,t)=>d(e,t),sync:(e,t)=>(c.set(t,t(n,n)),d(e,t)),batch:(e,t)=>(c.set(t,t(n,r)),d(e,t,s)),pick:e=>it(function(e,t){const n={};for(const r of t)be(e,r)&&(n[r]=e[r]);return n}(n,e),m),omit:e=>it(function(e,t){const n=he({},e);for(const e of t)be(n,e)&&delete n[e];return n}(n,e),m)}};return m}function lt(e,...t){if(e)return at(e,"setup")(...t)}function ut(e,...t){if(e)return at(e,"init")(...t)}function st(e,...t){if(e)return at(e,"subscribe")(...t)}function ct(e,...t){if(e)return at(e,"sync")(...t)}function ft(e,...t){if(e)return at(e,"omit")(...t)}function dt(...e){const t=e.reduce(((e,t)=>{var n;const r=null==(n=null==t?void 0:t.getState)?void 0:n.call(t);return r?he(he({},e),r):e}),{});return it(t,...e)}var pt=o(1688),{useSyncExternalStore:mt}=pt,ht=()=>()=>{};function vt(t,n=xe){const r=e.useCallback((e=>t?st(t,null,e):ht()),[t]),o=()=>{const e="string"==typeof n?n:null,r="function"==typeof n?n:null,o=null==t?void 0:t.getState();return r?r(o):o&&e&&be(o,e)?o[e]:void 0};return mt(r,o,o)}function gt(t,n,r,o){const a=be(n,r)?n[r]:void 0,i=o?n[o]:void 0,l=qe({value:a,setValue:i}),u=e.useRef(!0);We((()=>ct(t,[r],((e,t)=>{const{value:n,setValue:o}=l.current;o&&e[r]!==t[r]&&e[r]!==n&&(u.current=!1,o(e[r]))}))),[t,r]),We((()=>{if(void 0!==a)return u.current=!0,ct(t,[r],(()=>{void 0!==a&&u.current&&t.setState(r,a)}))}))}function yt(t,n){const[r,o]=e.useState((()=>t(n)));We((()=>ut(r)),[r]);const a=e.useCallback((e=>vt(r,e)),[r]);return[e.useMemo((()=>ie(ae({},r),{useState:a})),[r,a]),Qe((()=>{o((e=>t(ae(ae({},n),e.getState()))))}))]}function bt(e={}){const t=dt(e.store,ft(e.disclosure,["contentElement","disclosureElement"])),n=null==t?void 0:t.getState(),r=_e(e.open,null==n?void 0:n.open,e.defaultOpen,!1),o=_e(e.animated,null==n?void 0:n.animated,!1),a=it({open:r,animated:o,animating:!!o&&r,mounted:r,contentElement:_e(null==n?void 0:n.contentElement,null),disclosureElement:_e(null==n?void 0:n.disclosureElement,null)},t);return lt(a,(()=>ct(a,["animated","animating"],(e=>{e.animated||a.setState("animating",!1)})))),lt(a,(()=>st(a,["open"],(()=>{a.getState().animated&&a.setState("animating",!0)})))),lt(a,(()=>ct(a,["open","animating"],(e=>{a.setState("mounted",e.open||e.animating)})))),ve(he({},a),{setOpen:e=>a.setState("open",e),show:()=>a.setState("open",!0),hide:()=>a.setState("open",!1),toggle:()=>a.setState("open",(e=>!e)),stopAnimation:()=>a.setState("animating",!1),setContentElement:e=>a.setState("contentElement",e),setDisclosureElement:e=>a.setState("disclosureElement",e)})}function wt(e,t,n){return Xe(t,[n.store,n.disclosure]),gt(e,n,"open","setOpen"),gt(e,n,"mounted","setMounted"),gt(e,n,"animated"),e}function xt(e={}){return bt(e)}function kt(e,t,n){return wt(e,t,n)}function St(e,t,n){return gt(e=function(e,t,n){return Xe(t,[n.popover]),gt(e=kt(e,t,n),n,"placement"),e}(e,t,n),n,"timeout"),gt(e,n,"showTimeout"),gt(e,n,"hideTimeout"),e}function Et(e={}){var t;const n=null==(t=e.store)?void 0:t.getState(),r=function(e={}){var t;const n=null==(t=e.store)?void 0:t.getState(),r=function(e={}){var t=e,{popover:n}=t,r=ge(t,["popover"]);const o=dt(r.store,ft(n,["arrowElement","anchorElement","contentElement","popoverElement","disclosureElement"])),a=null==o?void 0:o.getState(),i=xt(ve(he({},r),{store:o})),l=_e(r.placement,null==a?void 0:a.placement,"bottom"),u=it(ve(he({},i.getState()),{placement:l,currentPlacement:l,anchorElement:_e(null==a?void 0:a.anchorElement,null),popoverElement:_e(null==a?void 0:a.popoverElement,null),arrowElement:_e(null==a?void 0:a.arrowElement,null),rendered:Symbol("rendered")}),i,o);return ve(he(he({},i),u),{setAnchorElement:e=>u.setState("anchorElement",e),setPopoverElement:e=>u.setState("popoverElement",e),setArrowElement:e=>u.setState("arrowElement",e),render:()=>u.setState("rendered",Symbol("rendered"))})}(ve(he({},e),{placement:_e(e.placement,null==n?void 0:n.placement,"bottom")})),o=_e(e.timeout,null==n?void 0:n.timeout,500),a=it(ve(he({},r.getState()),{timeout:o,showTimeout:_e(e.showTimeout,null==n?void 0:n.showTimeout),hideTimeout:_e(e.hideTimeout,null==n?void 0:n.hideTimeout),autoFocusOnShow:_e(null==n?void 0:n.autoFocusOnShow,!1)}),r,e.store);return ve(he(he({},r),a),{setAutoFocusOnShow:e=>a.setState("autoFocusOnShow",e)})}(ve(he({},e),{placement:_e(e.placement,null==n?void 0:n.placement,"top"),hideTimeout:_e(e.hideTimeout,null==n?void 0:n.hideTimeout,0)})),o=it(ve(he({},r.getState()),{type:_e(e.type,null==n?void 0:n.type,"description"),skipTimeout:_e(e.skipTimeout,null==n?void 0:n.skipTimeout,300)}),r,e.store);return he(he({},r),o)}var _t=o(5893);function Ct(t){return e.forwardRef(((e,n)=>t(ae({ref:n},e))))}function Pt(t,n){const r=n,{as:o,wrapElement:a,render:i}=r,l=le(r,["as","wrapElement","render"]);let u;const s=Ye(n.ref,function(t){return function(t){return!!t&&!!(0,e.isValidElement)(t)&&"ref"in t}(t)?t.ref:null}(i));if(o&&"string"!=typeof o)u=(0,_t.jsx)(o,ie(ae({},l),{render:i}));else if(e.isValidElement(i)){const t=ie(ae({},i.props),{ref:s});u=e.cloneElement(i,function(e,t){const n=ae({},e);for(const r in t){if(!be(t,r))continue;if("className"===r){const r="className";n[r]=e[r]?`${e[r]} ${t[r]}`:t[r];continue}if("style"===r){const r="style";n[r]=e[r]?ae(ae({},e[r]),t[r]):t[r];continue}const o=t[r];if("function"==typeof o&&r.startsWith("on")){const t=e[r];if("function"==typeof t){n[r]=(...e)=>{o(...e),t(...e)};continue}}n[r]=o}return n}(l,t))}else if(i)u=i(l);else if("function"==typeof n.children){const e=l,{children:t}=e,r=le(e,["children"]);u=n.children(r)}else u=o?(0,_t.jsx)(o,ae({},l)):(0,_t.jsx)(t,ae({},l));return a?a(u):u}function Ot(e){return(t={})=>{const n=e(t),r={};for(const e in n)be(n,e)&&void 0!==n[e]&&(r[e]=n[e]);return r}}function Tt(t=[],n=[]){const r=e.createContext(void 0),o=e.createContext(void 0),a=()=>e.useContext(r),i=e=>t.reduceRight(((t,n)=>(0,_t.jsx)(n,ie(ae({},e),{children:t}))),(0,_t.jsx)(r.Provider,ae({},e)));return{context:r,scopedContext:o,useContext:a,useScopedContext:(t=!1)=>{const n=e.useContext(o),r=a();return t?n:n||r},useProviderContext:()=>{const t=e.useContext(o),n=a();if(!t||t!==n)return n},ContextProvider:i,ScopedContextProvider:e=>(0,_t.jsx)(i,ie(ae({},e),{children:n.reduceRight(((t,n)=>(0,_t.jsx)(n,ie(ae({},e),{children:t}))),(0,_t.jsx)(o.Provider,ae({},e)))}))}}var Nt=Tt(),Lt=(Nt.useContext,Nt.useScopedContext,Nt.useProviderContext),Rt=Tt([Nt.ContextProvider],[Nt.ScopedContextProvider]),At=(Rt.useContext,Rt.useScopedContext,Rt.useProviderContext),zt=Rt.ContextProvider,Ft=Rt.ScopedContextProvider,Mt=(0,e.createContext)(void 0),Dt=(0,e.createContext)(void 0),jt=Tt([zt],[Ft]),It=(jt.useContext,jt.useScopedContext,jt.useProviderContext),$t=jt.ContextProvider,Ut=jt.ScopedContextProvider,Vt=Tt([$t],[Ut]),Ht=(Vt.useContext,Vt.useScopedContext,Vt.useProviderContext),Bt=Vt.ContextProvider,Wt=Vt.ScopedContextProvider,qt=(0,e.createContext)(!0),Qt="input:not([type='hidden']):not([disabled]), select:not([disabled]), textarea:not([disabled]), a[href], button:not([disabled]), [tabindex], iframe, object, embed, area[href], audio[controls], video[controls], [contenteditable]:not([contenteditable='false'])";function Yt(e){return!!Fe(e,Qt)&&!!Me(e)&&!De(e,"[inert]")}function Kt(e){if(!Yt(e))return!1;if(function(e){return parseInt(e.getAttribute("tabindex")||"0",10)<0}(e))return!1;if(!("form"in e))return!0;if(!e.form)return!0;if(e.checked)return!0;if("radio"!==e.type)return!0;const t=e.form.elements.namedItem(e.name);if(!t)return!0;if(!("length"in t))return!0;const n=Ne(e);return!n||n===e||!("form"in n)||n.form!==e.form||n.name!==e.name}function Xt(e,t){const n=Array.from(e.querySelectorAll(Qt));t&&n.unshift(e);const r=n.filter(Yt);return r.forEach(((e,t)=>{if(Re(e)&&e.contentDocument){const n=e.contentDocument.body;r.splice(t,1,...Xt(n))}})),r}function Gt(e,t,n){const r=Array.from(e.querySelectorAll(Qt)),o=r.filter(Kt);return t&&Kt(e)&&o.unshift(e),o.forEach(((e,t)=>{if(Re(e)&&e.contentDocument){const r=Gt(e.contentDocument.body,!1,n);o.splice(t,1,...r)}})),!o.length&&n?r:o}function Zt(e,t){return function(e,t,n,r){const o=Ne(e),a=Xt(e,!1),i=a.indexOf(o),l=a.slice(i+1);return l.find(Kt)||(n?a.find(Kt):null)||(r?l[0]:null)||null}(document.body,0,e,t)}function Jt(e,t){return function(e,t,n,r){const o=Ne(e),a=Xt(e,!1).reverse(),i=a.indexOf(o),l=a.slice(i+1);return l.find(Kt)||(n?a.find(Kt):null)||(r?l[0]:null)||null}(document.body,0,e,t)}function en(e){const t=Ne(e);if(!t)return!1;if(t===e)return!0;const n=t.getAttribute("aria-activedescendant");return!!n&&n===e.id}function tn(e){const t=Ne(e);if(!t)return!1;if(Le(e,t))return!0;const n=t.getAttribute("aria-activedescendant");return!!n&&"id"in e&&(n===e.id||!!e.querySelector(`#${CSS.escape(n)}`))}function nn(e){!tn(e)&&Yt(e)&&e.focus()}function rn(e){var t;const n=null!=(t=e.getAttribute("tabindex"))?t:"";e.setAttribute("data-tabindex",n),e.setAttribute("tabindex","-1")}function on(){return!!Oe&&/mac|iphone|ipad|ipod/i.test(navigator.platform)}function an(){return Oe&&on()&&/apple/i.test(navigator.vendor)}var ln=an(),un=["text","search","url","tel","email","password","number","date","month","week","time","datetime","datetime-local"];function sn(e){return!("input"!==e.tagName.toLowerCase()||!e.type||"radio"!==e.type&&"checkbox"!==e.type)}function cn(e,t,n,r,o){return e?t?n&&!r?-1:void 0:n?o:o||0:o}function fn(e,t){return Qe((n=>{null==e||e(n),n.defaultPrevented||t&&(n.stopPropagation(),n.preventDefault())}))}var dn=!0;function pn(e){const t=e.target;t&&"hasAttribute"in t&&(t.hasAttribute("data-focus-visible")||(dn=!1))}function mn(e){e.metaKey||e.ctrlKey||e.altKey||(dn=!0)}var hn=Ot((t=>{var n=t,{focusable:r=!0,accessibleWhenDisabled:o,autoFocus:a,onFocusVisible:i}=n,l=le(n,["focusable","accessibleWhenDisabled","autoFocus","onFocusVisible"]);const u=(0,e.useRef)(null);(0,e.useEffect)((()=>{r&&(Ue("mousedown",pn,!0),Ue("keydown",mn,!0))}),[r]),ln&&(0,e.useEffect)((()=>{if(!r)return;const e=u.current;if(!e)return;if(!sn(e))return;const t=function(e){return"labels"in e?e.labels:null}(e);if(!t)return;const n=()=>queueMicrotask((()=>e.focus()));return t.forEach((e=>e.addEventListener("mouseup",n))),()=>{t.forEach((e=>e.removeEventListener("mouseup",n)))}}),[r]);const s=r&&Ee(l),c=!!s&&!o,[f,d]=(0,e.useState)(!1);(0,e.useEffect)((()=>{r&&c&&f&&d(!1)}),[r,c,f]),(0,e.useEffect)((()=>{if(!r)return;if(!f)return;const e=u.current;if(!e)return;if("undefined"==typeof IntersectionObserver)return;const t=new IntersectionObserver((()=>{Yt(e)||d(!1)}));return t.observe(e),()=>t.disconnect()}),[r,f]);const p=fn(l.onKeyPressCapture,s),m=fn(l.onMouseDownCapture,s),h=fn(l.onClickCapture,s),v=l.onMouseDown,g=Qe((e=>{if(null==v||v(e),e.defaultPrevented)return;if(!r)return;const t=e.currentTarget;if(!ln)return;if(function(e){return Boolean(e.currentTarget&&!Le(e.currentTarget,e.target))}(e))return;if(!Ae(t)&&!sn(t))return;let n=!1;const o=()=>{n=!0};t.addEventListener("focusin",o,{capture:!0,once:!0}),$e(t,"mouseup",(()=>{t.removeEventListener("focusin",o,!0),n||nn(t)}))})),y=(e,t)=>{if(t&&(e.currentTarget=t),!r)return;const n=e.currentTarget;n&&en(n)&&(null==i||i(e),e.defaultPrevented||d(!0))},b=l.onKeyDownCapture,w=Qe((e=>{if(null==b||b(e),e.defaultPrevented)return;if(!r)return;if(f)return;if(e.metaKey)return;if(e.altKey)return;if(e.ctrlKey)return;if(!je(e))return;const t=e.currentTarget;queueMicrotask((()=>y(e,t)))})),x=l.onFocusCapture,k=Qe((e=>{if(null==x||x(e),e.defaultPrevented)return;if(!r)return;if(!je(e))return void d(!1);const t=e.currentTarget,n=()=>y(e,t);dn||function(e){const{tagName:t,readOnly:n,type:r}=e;return"TEXTAREA"===t&&!n||"SELECT"===t&&!n||("INPUT"!==t||n?!!e.isContentEditable:un.includes(r))}(e.target)?queueMicrotask(n):function(e){return"combobox"===e.getAttribute("role")&&!!e.dataset.name}(e.target)?$e(e.target,"focusout",n):d(!1)})),S=l.onBlur,E=Qe((e=>{null==S||S(e),r&&Ie(e)&&d(!1)})),_=(0,e.useContext)(qt),C=Qe((e=>{r&&a&&e&&_&&queueMicrotask((()=>{en(e)||Yt(e)&&e.focus()}))})),P=function(t,n){const r=e=>{if("string"==typeof e)return e},[o,a]=(0,e.useState)((()=>r(n)));return We((()=>{const e=t&&"current"in t?t.current:t;a((null==e?void 0:e.tagName.toLowerCase())||r(n))}),[t,n]),o}(u,l.as),O=r&&function(e){return!e||"button"===e||"input"===e||"select"===e||"textarea"===e||"a"===e}(P),T=r&&function(e){return!e||"button"===e||"input"===e||"select"===e||"textarea"===e}(P),N=c?ae({pointerEvents:"none"},l.style):l.style;return ie(ae({"data-focus-visible":r&&f?"":void 0,"data-autofocus":!!a||void 0,"aria-disabled":!!s||void 0},l),{ref:Ye(u,C,l.ref),style:N,tabIndex:cn(r,c,O,T,l.tabIndex),disabled:!(!T||!c)||void 0,contentEditable:s?void 0:l.contentEditable,onKeyPressCapture:p,onClickCapture:h,onMouseDownCapture:m,onMouseDown:g,onKeyDownCapture:w,onFocusCapture:k,onBlur:E})}));Ct((e=>Pt("div",e=hn(e))));var vn=Ot((t=>{var n=t,{store:r,showOnHover:o=!0}=n,a=le(n,["store","showOnHover"]);const i=Ht();ke(r=r||i,!1);const l=r.useState("mounted"),u=Ee(a),s=(0,e.useRef)(0);(0,e.useEffect)((()=>()=>window.clearTimeout(s.current)),[]),(0,e.useEffect)((()=>Ue("mouseleave",(e=>{if(!r)return;const{anchorElement:t}=r.getState();t&&e.target===t&&(window.clearTimeout(s.current),s.current=0)}),!0)),[r]);const c=a.onMouseMove,f=Ge(o),d=((0,e.useEffect)((()=>{Ue("mousemove",rt,!0),Ue("mousedown",ot,!0),Ue("mouseup",ot,!0),Ue("keydown",ot,!0),Ue("scroll",ot,!0)}),[]),Qe((()=>et))),p=Qe((e=>{if(null==r||r.setAnchorElement(e.currentTarget),null==c||c(e),u)return;if(e.defaultPrevented)return;if(s.current)return;if(!d())return;if(!r)return;if(!f(e))return;const{showTimeout:t,timeout:n}=r.getState();s.current=window.setTimeout((()=>{s.current=0,d()&&(null==r||r.show())}),null!=t?t:n)}));return a=ie(ae({},a),{ref:Ye(r.setAnchorElement,l?r.setDisclosureElement:void 0,a.ref),onMouseMove:p}),hn(a)}));Ct((e=>Pt("a",vn(e))));var gn=Tt([Bt],[Wt]),yn=(gn.useContext,gn.useScopedContext,gn.useProviderContext),bn=(gn.ContextProvider,gn.ScopedContextProvider),wn=it({activeStore:null}),xn=Ot((t=>{var n=t,{store:r,showOnHover:o=!0}=n,a=le(n,["store","showOnHover"]);const i=yn();ke(r=r||i,!1);const l=(0,e.useRef)(!1);(0,e.useEffect)((()=>ct(r,["mounted"],(e=>{e.mounted||(l.current=!1)}))),[r]),(0,e.useEffect)((()=>ct(r,["mounted","skipTimeout"],(e=>{if(!r)return;if(e.mounted){const{activeStore:e}=wn.getState();return e!==r&&(null==e||e.hide()),wn.setState("activeStore",r)}const t=setTimeout((()=>{const{activeStore:e}=wn.getState();e===r&&wn.setState("activeStore",null)}),e.skipTimeout);return()=>clearTimeout(t)}))),[r]);const u=a.onMouseEnter,s=Qe((e=>{null==u||u(e),l.current=!0})),c=a.onFocusVisible,f=Qe((e=>{null==c||c(e),e.defaultPrevented||(null==r||r.setAnchorElement(e.currentTarget),null==r||r.show())})),d=a.onBlur,p=Qe((e=>{if(null==d||d(e),e.defaultPrevented)return;const{activeStore:t}=wn.getState();t===r&&wn.setState("activeStore",null)})),m=r.useState("type"),h=r.useState((e=>{var t;return null==(t=e.contentElement)?void 0:t.id}));return a=ie(ae({"aria-labelledby":"label"===m?h:void 0,"aria-describedby":"description"===m?h:void 0},a),{onMouseEnter:s,onFocusVisible:f,onBlur:p}),vn(ae({store:r,showOnHover:e=>{if(!l.current)return!1;if(Se(o,e))return!1;const{activeStore:t}=wn.getState();return!t||(null==r||r.show(),!1)}},a))})),kn=Ct((e=>Pt("div",xn(e))));function Sn(e){return[e.clientX,e.clientY]}function En(e,t){const[n,r]=e;let o=!1;for(let e=t.length,a=0,i=e-1;a<e;i=a++){const[l,u]=t[a],[s,c]=t[i],[,f]=t[0===i?e-1:i-1]||[0,0],d=(u-c)*(n-l)-(l-s)*(r-u);if(c<u){if(r>=c&&r<u){if(0===d)return!0;d>0&&(r===c?r>f&&(o=!o):o=!o)}}else if(u<c){if(r>u&&r<=c){if(0===d)return!0;d<0&&(r===c?r<f&&(o=!o):o=!o)}}else if(r==u&&(n>=s&&n<=l||n>=l&&n<=s))return!0}return o}function Cn(e,t){const n=e.getBoundingClientRect(),{top:r,right:o,bottom:a,left:i}=n,[l,u]=function(e,t){const{top:n,right:r,bottom:o,left:a}=t,[i,l]=e;return[i<a?"left":i>r?"right":null,l<n?"top":l>o?"bottom":null]}(t,n),s=[t];return l?("top"!==u&&s.push(["left"===l?i:o,r]),s.push(["left"===l?o:i,r]),s.push(["left"===l?o:i,a]),"bottom"!==u&&s.push(["left"===l?i:o,a])):"top"===u?(s.push([i,r]),s.push([i,a]),s.push([o,a]),s.push([o,r])):(s.push([i,a]),s.push([i,r]),s.push([o,r]),s.push([o,a])),s}function Pn(e,...t){if(!e)return!1;const n=e.getAttribute("data-backdrop");return null!=n&&(""===n||"true"===n||!t.length||t.some((e=>n===e)))}var On=new WeakMap;function Tn(e,t,n){On.has(e)||On.set(e,new Map);const r=On.get(e),o=r.get(t);if(!o)return r.set(t,n()),()=>{var e;null==(e=r.get(t))||e(),r.delete(t)};const a=n(),i=()=>{a(),o(),r.delete(t)};return r.set(t,i),()=>{r.get(t)===i&&(a(),r.set(t,o))}}function Nn(e,t,n){return Tn(e,t,(()=>{const r=e.getAttribute(t);return e.setAttribute(t,n),()=>{null==r?e.removeAttribute(t):e.setAttribute(t,r)}}))}function Ln(e,t,n){return Tn(e,t,(()=>{const r=t in e,o=e[t];return e[t]=n,()=>{r?e[t]=o:delete e[t]}}))}function Rn(e,t){return e?Tn(e,"style",(()=>{const n=e.style.cssText;return Object.assign(e.style,t),()=>{e.style.cssText=n}})):()=>{}}var An=["SCRIPT","STYLE"];function zn(e){return`__ariakit-dialog-snapshot-${e}`}function Fn(e,t,n){return!An.includes(t.tagName)&&!!function(e,t){const n=Te(t),r=zn(e);if(!n.body[r])return!0;for(;;){if(t===n.body)return!1;if(t[r])return!0;if(!t.parentElement)return!1;t=t.parentElement}}(e,t)&&!n.some((e=>e&&Le(t,e)))}function Mn(e,t,n,r){for(let o of t){if(!(null==o?void 0:o.isConnected))continue;const a=t.some((e=>!!e&&e!==o&&e.contains(o))),i=Te(o),l=o;for(;o.parentElement&&o!==i.body;){if(null==r||r(o.parentElement,l),!a)for(const r of o.parentElement.children)Fn(e,r,t)&&n(r,l);o=o.parentElement}}}function Dn(e="",t=!1){return`__ariakit-dialog-${t?"ancestor":"outside"}${e?`-${e}`:""}`}function jn(e,t=""){return we(Ln(e,Dn("",!0),!0),Ln(e,Dn(t,!0),!0))}function In(e,t){if(e[Dn(t,!0)])return!0;const n=Dn(t);for(;;){if(e[n])return!0;if(!e.parentElement)return!1;e=e.parentElement}}function $n(e,t){const n=[],r=t.map((e=>null==e?void 0:e.id));return Mn(e,t,(t=>{Pn(t,...r)||n.unshift(function(e,t=""){return we(Ln(e,Dn(),!0),Ln(e,Dn(t),!0))}(t,e))}),((t,r)=>{r.hasAttribute("data-dialog")&&r.id!==e||n.unshift(jn(t,e))})),()=>{n.forEach((e=>e()))}}Ot((e=>e));var Un=Ct((e=>Pt("div",e)));function Vn(e,t){const n=setTimeout(t,e);return()=>clearTimeout(n)}function Hn(...e){return e.join(", ").split(", ").reduce(((e,t)=>{const n=1e3*parseFloat(t||"0s");return n>e?n:e}),0)}function Bn(e,t,n){return!(n||!1===t||e&&!t)}Object.assign(Un,["a","button","details","dialog","div","form","h1","h2","h3","h4","h5","h6","header","img","input","label","li","nav","ol","p","section","select","span","textarea","ul","svg"].reduce(((e,t)=>(e[t]=Ct((e=>Pt(t,e))),e)),{}));var Wn=Ot((t=>{var n=t,{store:r,alwaysVisible:o}=n,a=le(n,["store","alwaysVisible"]);const i=Lt();ke(r=r||i,!1);const l=Ke(a.id),[u,s]=(0,e.useState)(null),c=r.useState("open"),f=r.useState("mounted"),d=r.useState("animated"),p=r.useState("contentElement");We((()=>{if(d){if(null==p?void 0:p.isConnected)return function(e){let t=requestAnimationFrame((()=>{t=requestAnimationFrame(e)}));return()=>cancelAnimationFrame(t)}((()=>{s(c?"enter":"leave")}));s(null)}}),[d,p,c]),We((()=>{if(!r)return;if(!d)return;if(!p)return;if(!u)return;if("enter"===u&&!c)return;if("leave"===u&&c)return;if("number"==typeof d)return Vn(d,r.stopAnimation);const{transitionDuration:e,animationDuration:t,transitionDelay:n,animationDelay:o}=getComputedStyle(p),a=Hn(n,o)+Hn(e,t);return a?Vn(a,r.stopAnimation):void 0}),[r,d,p,c,u]);const m=Bn(f,(a=Ze(a,(e=>(0,_t.jsx)(Ft,{value:r,children:e})),[r])).hidden,o),h=m?ie(ae({},a.style),{display:"none"}):a.style;return ie(ae({id:l,"data-enter":"enter"===u?"":void 0,"data-leave":"leave"===u?"":void 0,hidden:m},a),{ref:Ye(l?r.setContentElement:null,a.ref),style:h})})),qn=Ct((e=>Pt("div",Wn(e))));function Qn({store:t,backdrop:n,backdropProps:r,alwaysVisible:o,hidden:a}){const i=(0,e.useRef)(null),l=function(e={}){const[t,n]=yt(bt,e);return wt(t,n,e)}({disclosure:t}),u=t.useState("contentElement");We((()=>{const e=i.current,t=u;e&&t&&(e.style.zIndex=getComputedStyle(t).zIndex)}),[u]),We((()=>{const e=null==u?void 0:u.id;if(!e)return;const t=i.current;return t?jn(t,e):void 0}),[u]),null!=a&&(r=ie(ae({},r),{hidden:a}));const s=Wn(ie(ae({store:l,role:"presentation","data-backdrop":(null==u?void 0:u.id)||"",alwaysVisible:o},r),{ref:Ye(null==r?void 0:r.ref,i),style:ae({position:"fixed",top:0,right:0,bottom:0,left:0},null==r?void 0:r.style)}));if(!n)return null;if((0,e.isValidElement)(n))return(0,_t.jsx)(Un,ie(ae({},s),{render:n}));const c="boolean"!=typeof n?n:"div";return(0,_t.jsx)(Un,ie(ae({},s),{render:(0,_t.jsx)(c,{})}))}Ct((e=>{var t=e,{unmountOnHide:n}=t,r=le(t,["unmountOnHide"]);const o=Lt();return!1===vt(r.store||o,(e=>!n||(null==e?void 0:e.mounted)))?null:(0,_t.jsx)(qn,ae({},r))}));var Yn=(0,e.createContext)({});function Kn({store:t,type:n,listener:r,capture:o,domReady:a}){const i=Qe(r),l=t.useState("open"),u=(0,e.useRef)(!1);We((()=>{if(!l)return;if(!a)return;const{contentElement:e}=t.getState();if(!e)return;const n=()=>{u.current=!0};return e.addEventListener("focusin",n,!0),()=>e.removeEventListener("focusin",n,!0)}),[t,l,a]),(0,e.useEffect)((()=>{if(l)return Ue(n,(e=>{const{contentElement:n,disclosureElement:r}=t.getState(),o=e.target;n&&o&&function(e){return"HTML"===e.tagName||Le(Te(e).body,e)}(o)&&(Le(n,o)||function(e,t){if(!e)return!1;if(Le(e,t))return!0;const n=t.getAttribute("aria-activedescendant");if(n){const t=Te(e).getElementById(n);if(t)return Le(e,t)}return!1}(r,o)||o.hasAttribute("data-focus-trap")||function(e,t){if(!("clientY"in e))return!1;const n=t.getBoundingClientRect();return 0!==n.width&&0!==n.height&&n.top<=e.clientY&&e.clientY<=n.top+n.height&&n.left<=e.clientX&&e.clientX<=n.left+n.width}(e,n)||u.current&&!In(o,n.id)||i(e))}),o)}),[l,o])}function Xn(e,t){return"function"==typeof e?e(t):!!e}function Gn(e){return Nn(e,"aria-hidden","true")}function Zn(e,t){return"style"in e?"inert"in HTMLElement.prototype?Ln(e,"inert",!0):we(...Gt(e,!0).map((e=>(null==t?void 0:t.some((t=>t&&Le(t,e))))?ye:Nn(e,"tabindex","-1"))),Gn(e),Rn(e,{pointerEvents:"none",userSelect:"none",cursor:"default"})):ye}var Jn=o(3935);function er(t,n,r){const o=function({attribute:t,contentId:n,contentElement:r,enabled:o}){const[a,i]=(0,e.useReducer)((()=>[]),[]),l=(0,e.useCallback)((()=>{if(!o)return!1;if(!r)return!1;const{body:e}=Te(r),a=e.getAttribute(t);return!a||a===n}),[a,o,r,t,n]);return(0,e.useEffect)((()=>{if(!o)return;if(!n)return;if(!r)return;const{body:e}=Te(r);if(l())return e.setAttribute(t,n),()=>e.removeAttribute(t);const a=new MutationObserver((()=>(0,Jn.flushSync)(i)));return a.observe(e,{attributeFilter:[t]}),()=>a.disconnect()}),[a,o,n,r,l,t]),l}({attribute:"data-dialog-prevent-body-scroll",contentElement:t,contentId:n,enabled:r});(0,e.useEffect)((()=>{if(!o())return;if(!t)return;const e=Te(t),n=function(e){return Te(e).defaultView||window}(t),{documentElement:r,body:a}=e,i=r.style.getPropertyValue("--scrollbar-width"),l=i?parseInt(i):n.innerWidth-r.clientWidth,u=function(e){const t=e.getBoundingClientRect().left;return Math.round(t)+e.scrollLeft?"paddingLeft":"paddingRight"}(r),s=on()&&!(Oe&&navigator.platform.startsWith("Mac")&&(!Oe||!navigator.maxTouchPoints));return we((f="--scrollbar-width",d=`${l}px`,(c=r)?Tn(c,f,(()=>{const e=c.style.getPropertyValue(f);return c.style.setProperty(f,d),()=>{e?c.style.setProperty(f,e):c.style.removeProperty(f)}})):()=>{}),s?(()=>{var e,t;const{scrollX:r,scrollY:o,visualViewport:i}=n,s=null!=(e=null==i?void 0:i.offsetLeft)?e:0,c=null!=(t=null==i?void 0:i.offsetTop)?t:0,f=Rn(a,{position:"fixed",overflow:"hidden",top:-(o-Math.floor(c))+"px",left:-(r-Math.floor(s))+"px",right:"0",[u]:`${l}px`});return()=>{f(),n.scrollTo(r,o)}})():Rn(a,{overflow:"hidden",[u]:`${l}px`}));var c,f,d}),[o,t])}var tr=Ot((e=>{var t=e,{autoFocusOnShow:n=!0}=t,r=le(t,["autoFocusOnShow"]);return Ze(r,(e=>(0,_t.jsx)(qt.Provider,{value:n,children:e})),[n])}));Ct((e=>Pt("div",tr(e))));var nr=(0,e.createContext)(0);function rr({level:t,children:n}){const r=(0,e.useContext)(nr),o=Math.max(Math.min(t||r+1,6),1);return(0,_t.jsx)(nr.Provider,{value:o,children:n})}var or=Ot((e=>ie(ae({},e),{style:ae({border:0,clip:"rect(0 0 0 0)",height:"1px",margin:"-1px",overflow:"hidden",padding:0,position:"absolute",whiteSpace:"nowrap",width:"1px"},e.style)})));Ct((e=>Pt("span",or(e))));var ar=Ot((e=>(e=ie(ae({"data-focus-trap":"",tabIndex:0,"aria-hidden":!0},e),{style:ae({position:"fixed",top:0,left:0},e.style)}),or(e)))),ir=Ct((e=>Pt("span",ar(e)))),lr=(0,e.createContext)(null);function ur(e){queueMicrotask((()=>{null==e||e.focus()}))}var sr=Ot((t=>{var n=t,{preserveTabOrder:r,portalElement:o,portalRef:a,portal:i=!0}=n,l=le(n,["preserveTabOrder","portalElement","portalRef","portal"]);const u=(0,e.useRef)(null),s=Ye(u,l.ref),c=(0,e.useContext)(lr),[f,d]=(0,e.useState)(null),p=(0,e.useRef)(null),m=(0,e.useRef)(null),h=(0,e.useRef)(null),v=(0,e.useRef)(null);return We((()=>{const e=u.current;if(!e||!i)return void d(null);const t=function(e,t){return t?"function"==typeof t?t(e):t:Te(e).createElement("div")}(e,o);if(!t)return void d(null);const n=t.isConnected;if(!n){const n=c||function(e){return Te(e).body}(e);n.appendChild(t)}return t.id||(t.id=e.id?`portal/${e.id}`:function(e="id"){return`${e?`${e}-`:""}${Math.random().toString(36).substr(2,6)}`}()),d(t),Ce(a,t),n?void 0:()=>{t.remove(),Ce(a,null)}}),[i,o,c,a]),(0,e.useEffect)((()=>{if(!f)return;if(!r)return;let e=0;const t=t=>{if(Ie(t))return"focusin"===t.type?function(e){const t=e.querySelectorAll("[data-tabindex]"),n=e=>{const t=e.getAttribute("data-tabindex");e.removeAttribute("data-tabindex"),t?e.setAttribute("tabindex",t):e.removeAttribute("tabindex")};e.hasAttribute("data-tabindex")&&n(e),t.forEach(n)}(f):(cancelAnimationFrame(e),void(e=requestAnimationFrame((()=>{Gt(f,!0).forEach(rn)}))))};return f.addEventListener("focusin",t,!0),f.addEventListener("focusout",t,!0),()=>{f.removeEventListener("focusin",t,!0),f.removeEventListener("focusout",t,!0)}}),[f,r]),l=Ze(l,(e=>(e=(0,_t.jsx)(lr.Provider,{value:f||c,children:e}),i?f?(e=(0,_t.jsxs)(_t.Fragment,{children:[r&&f&&(0,_t.jsx)(ir,{ref:m,className:"__focus-trap-inner-before",onFocus:e=>{Ie(e,f)?ur(Zt()):ur(p.current)}}),e,r&&f&&(0,_t.jsx)(ir,{ref:h,className:"__focus-trap-inner-after",onFocus:e=>{Ie(e,f)?ur(Jt()):ur(v.current)}})]}),f&&(e=(0,Jn.createPortal)(e,f)),e=(0,_t.jsxs)(_t.Fragment,{children:[r&&f&&(0,_t.jsx)(ir,{ref:p,className:"__focus-trap-outer-before",onFocus:e=>{e.relatedTarget!==v.current&&Ie(e,f)?ur(m.current):ur(Jt())}}),r&&(0,_t.jsx)("span",{"aria-owns":null==f?void 0:f.id,style:{position:"fixed"}}),e,r&&f&&(0,_t.jsx)(ir,{ref:v,className:"__focus-trap-outer-after",onFocus:e=>{if(Ie(e,f))ur(h.current);else{const e=Zt();if(e===m.current)return void requestAnimationFrame((()=>{var e;return null==(e=Zt())?void 0:e.focus()}));ur(e)}}})]})):(0,_t.jsx)("span",{ref:s,id:l.id,style:{position:"fixed"},hidden:!0}):e)),[f,c,i,l.id,r]),l=ie(ae({},l),{ref:s})}));Ct((e=>Pt("div",sr(e))));var cr=an();function fr(e,t=!1){if(!e)return null;const n="current"in e?e.current:e;return n?t?Yt(n)?n:null:n:null}var dr=Ot((t=>{var n=t,{store:r,open:o,onClose:a,focusable:i=!0,modal:l=!0,portal:u=!!l,backdrop:s=!!l,backdropProps:c,hideOnEscape:f=!0,hideOnInteractOutside:d=!0,getPersistentElements:p,preventBodyScroll:m=!!l,autoFocusOnShow:h=!0,autoFocusOnHide:v=!0,initialFocus:g,finalFocus:y,unmountOnHide:b}=n,w=le(n,["store","open","onClose","focusable","modal","portal","backdrop","backdropProps","hideOnEscape","hideOnInteractOutside","getPersistentElements","preventBodyScroll","autoFocusOnShow","autoFocusOnHide","initialFocus","finalFocus","unmountOnHide"]);const x=At(),k=(0,e.useRef)(null),S=function(e={}){const[t,n]=yt(xt,e);return kt(t,n,e)}({store:r||x,open:o,setOpen(e){if(e)return;const t=k.current;if(!t)return;const n=new Event("close",{bubbles:!1,cancelable:!0});a&&t.addEventListener("close",a,{once:!0}),t.dispatchEvent(n),n.defaultPrevented&&S.setOpen(!0)}}),{portalRef:E,domReady:_}=Je(u,w.portalRef),C=w.preserveTabOrder,P=S.useState((e=>C&&!l&&e.mounted)),O=Ke(w.id),T=S.useState("open"),N=S.useState("mounted"),L=S.useState("contentElement"),R=Bn(N,w.hidden,w.alwaysVisible);er(L,O,m&&!R),function(t,n,r){const o=function(t){const n=(0,e.useRef)();return(0,e.useEffect)((()=>{if(t)return Ue("mousedown",(e=>{n.current=e.target}),!0);n.current=null}),[t]),n}(t.useState("open")),a={store:t,domReady:r,capture:!0};Kn(ie(ae({},a),{type:"click",listener:e=>{const{contentElement:r}=t.getState(),a=o.current;a&&Me(a)&&In(a,null==r?void 0:r.id)&&Xn(n,e)&&t.hide()}})),Kn(ie(ae({},a),{type:"focusin",listener:e=>{const{contentElement:r}=t.getState();r&&e.target!==Te(r)&&Xn(n,e)&&t.hide()}})),Kn(ie(ae({},a),{type:"contextmenu",listener:e=>{Xn(n,e)&&t.hide()}}))}(S,d,_);const{wrapElement:A,nestedDialogs:z}=function(t){const n=(0,e.useContext)(Yn),[r,o]=(0,e.useState)([]),a=(0,e.useCallback)((e=>{var t;return o((t=>[...t,e])),we(null==(t=n.add)?void 0:t.call(n,e),(()=>{o((t=>t.filter((t=>t!==e))))}))}),[n]);We((()=>ct(t,["open","contentElement"],(e=>{var r;if(e.open&&e.contentElement)return null==(r=n.add)?void 0:r.call(n,t)}))),[t,n]);const i=(0,e.useMemo)((()=>({store:t,add:a})),[t,a]);return{wrapElement:(0,e.useCallback)((e=>(0,_t.jsx)(Yn.Provider,{value:i,children:e})),[i]),nestedDialogs:r}}(S);w=Ze(w,A,[A]),We((()=>{if(!T)return;const e=k.current,t=Ne(e,!0);t&&"BODY"!==t.tagName&&(e&&Le(e,t)||S.setDisclosureElement(t))}),[S,T]),cr&&(0,e.useEffect)((()=>{if(!N)return;const{disclosureElement:e}=S.getState();if(!e)return;if(!Ae(e))return;const t=()=>{let t=!1;const n=()=>{t=!0};e.addEventListener("focusin",n,{capture:!0,once:!0}),$e(e,"mouseup",(()=>{e.removeEventListener("focusin",n,!0),t||nn(e)}))};return e.addEventListener("mousedown",t),()=>{e.removeEventListener("mousedown",t)}}),[S,N]);const F=l||u&&P&&an();(0,e.useEffect)((()=>{if(!N)return;if(!_)return;const e=k.current;return e&&F?e.querySelector("[data-dialog-dismiss]")?void 0:function(e,t){const n=Te(e).createElement("button");return n.type="button",n.tabIndex=-1,n.textContent="Dismiss popup",Object.assign(n.style,{border:"0px",clip:"rect(0 0 0 0)",height:"1px",margin:"-1px",overflow:"hidden",padding:"0px",position:"absolute",whiteSpace:"nowrap",width:"1px"}),n.addEventListener("click",t),e.prepend(n),()=>{n.removeEventListener("click",t),n.remove()}}(e,S.hide):void 0}),[S,N,_,F]),We((()=>{if(T)return;if(!N)return;if(!_)return;const e=k.current;return e?Zn(e):void 0}),[T,N,_]);const M=T&&_;We((()=>{if(!O)return;if(!M)return;const e=k.current;return function(e,t){const{body:n}=Te(t[0]),r=[];return Mn(e,t,(t=>{r.push(Ln(t,zn(e),!0))})),we(Ln(n,zn(e),!0),(()=>r.forEach((e=>e()))))}(O,[e])}),[O,M]);const D=Qe(p);We((()=>{if(!O)return;if(!M)return;const{disclosureElement:e}=S.getState(),t=[k.current,...D()||[],...z.map((e=>e.getState().contentElement))];return F?l?we($n(O,t),function(e,t){const n=[],r=t.map((e=>null==e?void 0:e.id));return Mn(e,t,(e=>{Pn(e,...r)||n.unshift(Zn(e,t))})),()=>{n.forEach((e=>e()))}}(O,t)):we($n(O,[e,...t]),function(e,t){const n=[],r=t.map((e=>null==e?void 0:e.id));return Mn(e,t,(e=>{Pn(e,...r)||n.unshift(Gn(e))})),()=>{n.forEach((e=>e()))}}(O,t)):$n(O,[e,...t])}),[O,S,M,D,z,F,l]);const j=!!h,I=Ge(h),[$,U]=(0,e.useState)(!1);(0,e.useEffect)((()=>{if(!T)return;if(!j)return;if(!_)return;if(!(null==L?void 0:L.isConnected))return;const e=fr(g,!0)||L.querySelector("[data-autofocus=true],[autofocus]")||function(e,t,n){const[r]=Gt(e,t,n);return r||null}(L,!0,u&&P)||L,t=Yt(e);I(t?e:null)&&(U(!0),queueMicrotask((()=>{e.focus(),cr&&e.scrollIntoView({block:"nearest",inline:"nearest"})})))}),[T,j,_,L,g,u,P,I]);const V=!!v,H=Ge(v),[B,W]=(0,e.useState)(!1);(0,e.useEffect)((()=>{if(T)return W(!0),()=>W(!1)}),[T]);const q=(0,e.useCallback)(((e,t=!0)=>{const{disclosureElement:n}=S.getState();if(function(e){const t=Ne();return!(!t||e&&Le(e,t)||!Yt(t))}(e))return;let r=fr(y)||n;if(null==r?void 0:r.id){const e=Te(r),t=`[aria-activedescendant="${r.id}"]`,n=e.querySelector(t);n&&(r=n)}if(r&&!Yt(r)){const e=De(r,"[data-dialog]");if(e&&e.id){const t=Te(e),n=`[aria-controls~="${e.id}"]`,o=t.querySelector(n);o&&(r=o)}}const o=r&&Yt(r);o||!t?H(o?r:null)&&o&&(null==r||r.focus()):requestAnimationFrame((()=>q(e,!1)))}),[S,y,H]);We((()=>{if(T)return;if(!B)return;if(!V)return;const e=k.current;q(e)}),[T,B,_,V,q]),(0,e.useEffect)((()=>{if(!B)return;if(!V)return;const e=k.current;return()=>q(e)}),[B,V,q]);const Q=Ge(f);(0,e.useEffect)((()=>{if(_&&N)return Ue("keydown",(e=>{if("Escape"!==e.key)return;if(e.defaultPrevented)return;const t=k.current;if(!t)return;if(In(t))return;const n=e.target;if(!n)return;const{disclosureElement:r}=S.getState();("BODY"===n.tagName||Le(t,n)||!r||Le(r,n))&&Q(e)&&S.hide()}),!0)}),[S,_,N,Q]);const Y=(w=Ze(w,(e=>(0,_t.jsx)(rr,{level:l?1:void 0,children:e})),[l])).hidden,K=w.alwaysVisible;w=Ze(w,(e=>s?(0,_t.jsxs)(_t.Fragment,{children:[(0,_t.jsx)(Qn,{store:S,backdrop:s,backdropProps:c,hidden:Y,alwaysVisible:K}),e]}):e),[S,s,c,Y,K]);const[X,G]=(0,e.useState)(),[Z,J]=(0,e.useState)();return w=Ze(w,(e=>(0,_t.jsx)(Ft,{value:S,children:(0,_t.jsx)(Mt.Provider,{value:G,children:(0,_t.jsx)(Dt.Provider,{value:J,children:e})})})),[S]),w=ie(ae({id:O,"data-dialog":"",role:"dialog",tabIndex:i?-1:void 0,"aria-labelledby":X,"aria-describedby":Z},w),{ref:Ye(k,w.ref)}),w=tr(ie(ae({},w),{autoFocusOnShow:$})),w=Wn(ae({store:S},w)),w=hn(ie(ae({},w),{focusable:i})),sr(ie(ae({portal:u},w),{portalRef:E,preserveTabOrder:P}))}));function pr(e,t=At){return Ct((n=>{const r=t();return vt(n.store||r,(e=>!n.unmountOnHide||(null==e?void 0:e.mounted)||!!n.open))?(0,_t.jsx)(e,ae({},n)):null}))}pr(Ct((e=>Pt("div",dr(e)))),At);const mr=Math.min,hr=Math.max,vr=Math.round,gr=Math.floor,yr=e=>({x:e,y:e}),br={left:"right",right:"left",bottom:"top",top:"bottom"},wr={start:"end",end:"start"};function xr(e,t,n){return hr(e,mr(t,n))}function kr(e,t){return"function"==typeof e?e(t):e}function Sr(e){return e.split("-")[0]}function Er(e){return e.split("-")[1]}function _r(e){return"x"===e?"y":"x"}function Cr(e){return"y"===e?"height":"width"}function Pr(e){return["top","bottom"].includes(Sr(e))?"y":"x"}function Or(e){return _r(Pr(e))}function Tr(e){return e.replace(/start|end/g,(e=>wr[e]))}function Nr(e){return e.replace(/left|right|bottom|top/g,(e=>br[e]))}function Lr(e){return"number"!=typeof e?function(e){return{top:0,right:0,bottom:0,left:0,...e}}(e):{top:e,right:e,bottom:e,left:e}}function Rr(e){return{...e,top:e.y,left:e.x,right:e.x+e.width,bottom:e.y+e.height}}function Ar(e,t,n){let{reference:r,floating:o}=e;const a=Pr(t),i=Or(t),l=Cr(i),u=Sr(t),s="y"===a,c=r.x+r.width/2-o.width/2,f=r.y+r.height/2-o.height/2,d=r[l]/2-o[l]/2;let p;switch(u){case"top":p={x:c,y:r.y-o.height};break;case"bottom":p={x:c,y:r.y+r.height};break;case"right":p={x:r.x+r.width,y:f};break;case"left":p={x:r.x-o.width,y:f};break;default:p={x:r.x,y:r.y}}switch(Er(t)){case"start":p[i]-=d*(n&&s?-1:1);break;case"end":p[i]+=d*(n&&s?-1:1)}return p}async function zr(e,t){var n;void 0===t&&(t={});const{x:r,y:o,platform:a,rects:i,elements:l,strategy:u}=e,{boundary:s="clippingAncestors",rootBoundary:c="viewport",elementContext:f="floating",altBoundary:d=!1,padding:p=0}=kr(t,e),m=Lr(p),h=l[d?"floating"===f?"reference":"floating":f],v=Rr(await a.getClippingRect({element:null==(n=await(null==a.isElement?void 0:a.isElement(h)))||n?h:h.contextElement||await(null==a.getDocumentElement?void 0:a.getDocumentElement(l.floating)),boundary:s,rootBoundary:c,strategy:u})),g="floating"===f?{...i.floating,x:r,y:o}:i.reference,y=await(null==a.getOffsetParent?void 0:a.getOffsetParent(l.floating)),b=await(null==a.isElement?void 0:a.isElement(y))&&await(null==a.getScale?void 0:a.getScale(y))||{x:1,y:1},w=Rr(a.convertOffsetParentRelativeRectToViewportRelativeRect?await a.convertOffsetParentRelativeRectToViewportRelativeRect({rect:g,offsetParent:y,strategy:u}):g);return{top:(v.top-w.top+m.top)/b.y,bottom:(w.bottom-v.bottom+m.bottom)/b.y,left:(v.left-w.left+m.left)/b.x,right:(w.right-v.right+m.right)/b.x}}function Fr(e){return jr(e)?(e.nodeName||"").toLowerCase():"#document"}function Mr(e){var t;return(null==e||null==(t=e.ownerDocument)?void 0:t.defaultView)||window}function Dr(e){var t;return null==(t=(jr(e)?e.ownerDocument:e.document)||window.document)?void 0:t.documentElement}function jr(e){return e instanceof Node||e instanceof Mr(e).Node}function Ir(e){return e instanceof Element||e instanceof Mr(e).Element}function $r(e){return e instanceof HTMLElement||e instanceof Mr(e).HTMLElement}function Ur(e){return"undefined"!=typeof ShadowRoot&&(e instanceof ShadowRoot||e instanceof Mr(e).ShadowRoot)}function Vr(e){const{overflow:t,overflowX:n,overflowY:r,display:o}=Qr(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&!["inline","contents"].includes(o)}function Hr(e){return["table","td","th"].includes(Fr(e))}function Br(e){const t=Wr(),n=Qr(e);return"none"!==n.transform||"none"!==n.perspective||!!n.containerType&&"normal"!==n.containerType||!t&&!!n.backdropFilter&&"none"!==n.backdropFilter||!t&&!!n.filter&&"none"!==n.filter||["transform","perspective","filter"].some((e=>(n.willChange||"").includes(e)))||["paint","layout","strict","content"].some((e=>(n.contain||"").includes(e)))}function Wr(){return!("undefined"==typeof CSS||!CSS.supports)&&CSS.supports("-webkit-backdrop-filter","none")}function qr(e){return["html","body","#document"].includes(Fr(e))}function Qr(e){return Mr(e).getComputedStyle(e)}function Yr(e){return Ir(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function Kr(e){if("html"===Fr(e))return e;const t=e.assignedSlot||e.parentNode||Ur(e)&&e.host||Dr(e);return Ur(t)?t.host:t}function Xr(e){const t=Kr(e);return qr(t)?e.ownerDocument?e.ownerDocument.body:e.body:$r(t)&&Vr(t)?t:Xr(t)}function Gr(e,t){var n;void 0===t&&(t=[]);const r=Xr(e),o=r===(null==(n=e.ownerDocument)?void 0:n.body),a=Mr(r);return o?t.concat(a,a.visualViewport||[],Vr(r)?r:[]):t.concat(r,Gr(r))}function Zr(e){const t=Qr(e);let n=parseFloat(t.width)||0,r=parseFloat(t.height)||0;const o=$r(e),a=o?e.offsetWidth:n,i=o?e.offsetHeight:r,l=vr(n)!==a||vr(r)!==i;return l&&(n=a,r=i),{width:n,height:r,$:l}}function Jr(e){return Ir(e)?e:e.contextElement}function eo(e){const t=Jr(e);if(!$r(t))return yr(1);const n=t.getBoundingClientRect(),{width:r,height:o,$:a}=Zr(t);let i=(a?vr(n.width):n.width)/r,l=(a?vr(n.height):n.height)/o;return i&&Number.isFinite(i)||(i=1),l&&Number.isFinite(l)||(l=1),{x:i,y:l}}const to=yr(0);function no(e){const t=Mr(e);return Wr()&&t.visualViewport?{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}:to}function ro(e,t,n,r){void 0===t&&(t=!1),void 0===n&&(n=!1);const o=e.getBoundingClientRect(),a=Jr(e);let i=yr(1);t&&(r?Ir(r)&&(i=eo(r)):i=eo(e));const l=function(e,t,n){return void 0===t&&(t=!1),!(!n||t&&n!==Mr(e))&&t}(a,n,r)?no(a):yr(0);let u=(o.left+l.x)/i.x,s=(o.top+l.y)/i.y,c=o.width/i.x,f=o.height/i.y;if(a){const e=Mr(a),t=r&&Ir(r)?Mr(r):r;let n=e.frameElement;for(;n&&r&&t!==e;){const e=eo(n),t=n.getBoundingClientRect(),r=Qr(n),o=t.left+(n.clientLeft+parseFloat(r.paddingLeft))*e.x,a=t.top+(n.clientTop+parseFloat(r.paddingTop))*e.y;u*=e.x,s*=e.y,c*=e.x,f*=e.y,u+=o,s+=a,n=Mr(n).frameElement}}return Rr({width:c,height:f,x:u,y:s})}function oo(e){return ro(Dr(e)).left+Yr(e).scrollLeft}function ao(e,t,n){let r;if("viewport"===t)r=function(e,t){const n=Mr(e),r=Dr(e),o=n.visualViewport;let a=r.clientWidth,i=r.clientHeight,l=0,u=0;if(o){a=o.width,i=o.height;const e=Wr();(!e||e&&"fixed"===t)&&(l=o.offsetLeft,u=o.offsetTop)}return{width:a,height:i,x:l,y:u}}(e,n);else if("document"===t)r=function(e){const t=Dr(e),n=Yr(e),r=e.ownerDocument.body,o=hr(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),a=hr(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight);let i=-n.scrollLeft+oo(e);const l=-n.scrollTop;return"rtl"===Qr(r).direction&&(i+=hr(t.clientWidth,r.clientWidth)-o),{width:o,height:a,x:i,y:l}}(Dr(e));else if(Ir(t))r=function(e,t){const n=ro(e,!0,"fixed"===t),r=n.top+e.clientTop,o=n.left+e.clientLeft,a=$r(e)?eo(e):yr(1);return{width:e.clientWidth*a.x,height:e.clientHeight*a.y,x:o*a.x,y:r*a.y}}(t,n);else{const n=no(e);r={...t,x:t.x-n.x,y:t.y-n.y}}return Rr(r)}function io(e,t){const n=Kr(e);return!(n===t||!Ir(n)||qr(n))&&("fixed"===Qr(n).position||io(n,t))}function lo(e,t,n){const r=$r(t),o=Dr(t),a="fixed"===n,i=ro(e,!0,a,t);let l={scrollLeft:0,scrollTop:0};const u=yr(0);if(r||!r&&!a)if(("body"!==Fr(t)||Vr(o))&&(l=Yr(t)),r){const e=ro(t,!0,a,t);u.x=e.x+t.clientLeft,u.y=e.y+t.clientTop}else o&&(u.x=oo(o));return{x:i.left+l.scrollLeft-u.x,y:i.top+l.scrollTop-u.y,width:i.width,height:i.height}}function uo(e,t){return $r(e)&&"fixed"!==Qr(e).position?t?t(e):e.offsetParent:null}function so(e,t){const n=Mr(e);if(!$r(e))return n;let r=uo(e,t);for(;r&&Hr(r)&&"static"===Qr(r).position;)r=uo(r,t);return r&&("html"===Fr(r)||"body"===Fr(r)&&"static"===Qr(r).position&&!Br(r))?n:r||function(e){let t=Kr(e);for(;$r(t)&&!qr(t);){if(Br(t))return t;t=Kr(t)}return null}(e)||n}const co={convertOffsetParentRelativeRectToViewportRelativeRect:function(e){let{rect:t,offsetParent:n,strategy:r}=e;const o=$r(n),a=Dr(n);if(n===a)return t;let i={scrollLeft:0,scrollTop:0},l=yr(1);const u=yr(0);if((o||!o&&"fixed"!==r)&&(("body"!==Fr(n)||Vr(a))&&(i=Yr(n)),$r(n))){const e=ro(n);l=eo(n),u.x=e.x+n.clientLeft,u.y=e.y+n.clientTop}return{width:t.width*l.x,height:t.height*l.y,x:t.x*l.x-i.scrollLeft*l.x+u.x,y:t.y*l.y-i.scrollTop*l.y+u.y}},getDocumentElement:Dr,getClippingRect:function(e){let{element:t,boundary:n,rootBoundary:r,strategy:o}=e;const a="clippingAncestors"===n?function(e,t){const n=t.get(e);if(n)return n;let r=Gr(e).filter((e=>Ir(e)&&"body"!==Fr(e))),o=null;const a="fixed"===Qr(e).position;let i=a?Kr(e):e;for(;Ir(i)&&!qr(i);){const t=Qr(i),n=Br(i);n||"fixed"!==t.position||(o=null),(a?!n&&!o:!n&&"static"===t.position&&o&&["absolute","fixed"].includes(o.position)||Vr(i)&&!n&&io(e,i))?r=r.filter((e=>e!==i)):o=t,i=Kr(i)}return t.set(e,r),r}(t,this._c):[].concat(n),i=[...a,r],l=i[0],u=i.reduce(((e,n)=>{const r=ao(t,n,o);return e.top=hr(r.top,e.top),e.right=mr(r.right,e.right),e.bottom=mr(r.bottom,e.bottom),e.left=hr(r.left,e.left),e}),ao(t,l,o));return{width:u.right-u.left,height:u.bottom-u.top,x:u.left,y:u.top}},getOffsetParent:so,getElementRects:async function(e){let{reference:t,floating:n,strategy:r}=e;const o=this.getOffsetParent||so,a=this.getDimensions;return{reference:lo(t,await o(n),r),floating:{x:0,y:0,...await a(n)}}},getClientRects:function(e){return Array.from(e.getClientRects())},getDimensions:function(e){return Zr(e)},getScale:eo,isElement:Ir,isRTL:function(e){return"rtl"===Qr(e).direction}};function fo(e=0,t=0,n=0,r=0){if("function"==typeof DOMRect)return new DOMRect(e,t,n,r);const o={x:e,y:t,width:n,height:r,top:t,right:e+n,bottom:t+r,left:e};return ie(ae({},o),{toJSON:()=>o})}function po(e){return/^(?:top|bottom|left|right)(?:-(?:start|end))?$/.test(e)}function mo(e){const t=window.devicePixelRatio||1;return Math.round(e*t)/t}function ho(e,t){return n=({placement:n})=>{var r;const o=((null==e?void 0:e.clientHeight)||0)/2,a="number"==typeof t.gutter?t.gutter+o:null!=(r=t.gutter)?r:o;return{crossAxis:n.split("-")[1]?void 0:t.shift,mainAxis:a,alignmentAxis:t.shift}},void 0===n&&(n=0),{name:"offset",options:n,async fn(e){const{x:t,y:r}=e,o=await async function(e,t){const{placement:n,platform:r,elements:o}=e,a=await(null==r.isRTL?void 0:r.isRTL(o.floating)),i=Sr(n),l=Er(n),u="y"===Pr(n),s=["left","top"].includes(i)?-1:1,c=a&&u?-1:1,f=kr(t,e);let{mainAxis:d,crossAxis:p,alignmentAxis:m}="number"==typeof f?{mainAxis:f,crossAxis:0,alignmentAxis:null}:{mainAxis:0,crossAxis:0,alignmentAxis:null,...f};return l&&"number"==typeof m&&(p="end"===l?-1*m:m),u?{x:p*c,y:d*s}:{x:d*s,y:p*c}}(e,n);return{x:t+o.x,y:r+o.y,data:o}}};var n}function vo(e){if(!1===e.flip)return;const t="string"==typeof e.flip?e.flip.split(" "):void 0;return ke(!t||t.every(po),!1),void 0===(n={padding:e.overflowPadding,fallbackPlacements:t})&&(n={}),{name:"flip",options:n,async fn(e){var t;const{placement:r,middlewareData:o,rects:a,initialPlacement:i,platform:l,elements:u}=e,{mainAxis:s=!0,crossAxis:c=!0,fallbackPlacements:f,fallbackStrategy:d="bestFit",fallbackAxisSideDirection:p="none",flipAlignment:m=!0,...h}=kr(n,e),v=Sr(r),g=Sr(i)===i,y=await(null==l.isRTL?void 0:l.isRTL(u.floating)),b=f||(g||!m?[Nr(i)]:function(e){const t=Nr(e);return[Tr(e),t,Tr(t)]}(i));f||"none"===p||b.push(...function(e,t,n,r){const o=Er(e);let a=function(e,t,n){const r=["left","right"],o=["right","left"],a=["top","bottom"],i=["bottom","top"];switch(e){case"top":case"bottom":return n?t?o:r:t?r:o;case"left":case"right":return t?a:i;default:return[]}}(Sr(e),"start"===n,r);return o&&(a=a.map((e=>e+"-"+o)),t&&(a=a.concat(a.map(Tr)))),a}(i,m,p,y));const w=[i,...b],x=await zr(e,h),k=[];let S=(null==(t=o.flip)?void 0:t.overflows)||[];if(s&&k.push(x[v]),c){const e=function(e,t,n){void 0===n&&(n=!1);const r=Er(e),o=Or(e),a=Cr(o);let i="x"===o?r===(n?"end":"start")?"right":"left":"start"===r?"bottom":"top";return t.reference[a]>t.floating[a]&&(i=Nr(i)),[i,Nr(i)]}(r,a,y);k.push(x[e[0]],x[e[1]])}if(S=[...S,{placement:r,overflows:k}],!k.every((e=>e<=0))){var E,_;const e=((null==(E=o.flip)?void 0:E.index)||0)+1,t=w[e];if(t)return{data:{index:e,overflows:S},reset:{placement:t}};let n=null==(_=S.filter((e=>e.overflows[0]<=0)).sort(((e,t)=>e.overflows[1]-t.overflows[1]))[0])?void 0:_.placement;if(!n)switch(d){case"bestFit":{var C;const e=null==(C=S.map((e=>[e.placement,e.overflows.filter((e=>e>0)).reduce(((e,t)=>e+t),0)])).sort(((e,t)=>e[1]-t[1]))[0])?void 0:C[0];e&&(n=e);break}case"initialPlacement":n=i}if(r!==n)return{reset:{placement:n}}}return{}}};var n}function go(e){var t;if(e.slide||e.overlap)return void 0===(t={mainAxis:e.slide,crossAxis:e.overlap,padding:e.overflowPadding})&&(t={}),{name:"shift",options:t,async fn(e){const{x:n,y:r,placement:o}=e,{mainAxis:a=!0,crossAxis:i=!1,limiter:l={fn:e=>{let{x:t,y:n}=e;return{x:t,y:n}}},...u}=kr(t,e),s={x:n,y:r},c=await zr(e,u),f=Pr(Sr(o)),d=_r(f);let p=s[d],m=s[f];if(a){const e="y"===d?"bottom":"right";p=xr(p+c["y"===d?"top":"left"],p,p-c[e])}if(i){const e="y"===f?"bottom":"right";m=xr(m+c["y"===f?"top":"left"],m,m-c[e])}const h=l.fn({...e,[d]:p,[f]:m});return{...h,data:{x:h.x-n,y:h.y-r}}}}}function yo(e){return void 0===(t={padding:e.overflowPadding,apply({elements:t,availableWidth:n,availableHeight:r,rects:o}){const a=t.floating,i=Math.round(o.reference.width);n=Math.floor(n),r=Math.floor(r),a.style.setProperty("--popover-anchor-width",`${i}px`),a.style.setProperty("--popover-available-width",`${n}px`),a.style.setProperty("--popover-available-height",`${r}px`),e.sameWidth&&(a.style.width=`${i}px`),e.fitViewport&&(a.style.maxWidth=`${n}px`,a.style.maxHeight=`${r}px`)}})&&(t={}),{name:"size",options:t,async fn(e){const{placement:n,rects:r,platform:o,elements:a}=e,{apply:i=(()=>{}),...l}=kr(t,e),u=await zr(e,l),s=Sr(n),c=Er(n),f="y"===Pr(n),{width:d,height:p}=r.floating;let m,h;"top"===s||"bottom"===s?(m=s,h=c===(await(null==o.isRTL?void 0:o.isRTL(a.floating))?"start":"end")?"left":"right"):(h=s,m="end"===c?"top":"bottom");const v=p-u[m],g=d-u[h],y=!e.middlewareData.shift;let b=v,w=g;if(f){const e=d-u.left-u.right;w=c||y?mr(g,e):e}else{const e=p-u.top-u.bottom;b=c||y?mr(v,e):e}if(y&&!c){const e=hr(u.left,0),t=hr(u.right,0),n=hr(u.top,0),r=hr(u.bottom,0);f?w=d-2*(0!==e||0!==t?e+t:hr(u.left,u.right)):b=p-2*(0!==n||0!==r?n+r:hr(u.top,u.bottom))}await i({...e,availableWidth:w,availableHeight:b});const x=await o.getDimensions(a.floating);return d!==x.width||p!==x.height?{reset:{rects:!0}}:{}}};var t}function bo(e,t){var n;if(e)return{name:"arrow",options:n={element:e,padding:t.arrowPadding},async fn(e){const{x:t,y:r,placement:o,rects:a,platform:i,elements:l}=e,{element:u,padding:s=0}=kr(n,e)||{};if(null==u)return{};const c=Lr(s),f={x:t,y:r},d=Or(o),p=Cr(d),m=await i.getDimensions(u),h="y"===d,v=h?"top":"left",g=h?"bottom":"right",y=h?"clientHeight":"clientWidth",b=a.reference[p]+a.reference[d]-f[d]-a.floating[p],w=f[d]-a.reference[d],x=await(null==i.getOffsetParent?void 0:i.getOffsetParent(u));let k=x?x[y]:0;k&&await(null==i.isElement?void 0:i.isElement(x))||(k=l.floating[y]||a.floating[p]);const S=b/2-w/2,E=k/2-m[p]/2-1,_=mr(c[v],E),C=mr(c[g],E),P=_,O=k-m[p]-C,T=k/2-m[p]/2+S,N=xr(P,T,O),L=null!=Er(o)&&T!=N&&a.reference[p]/2-(T<P?_:C)-m[p]/2<0?T<P?P-T:O-T:0;return{[d]:f[d]-L,data:{[d]:N,centerOffset:T-N+L}}}}}var wo=Ot((t=>{var n=t,{store:r,modal:o=!1,portal:a=!!o,preserveTabOrder:i=!0,autoFocusOnShow:l=!0,wrapperProps:u,fixed:s=!1,flip:c=!0,shift:f=0,slide:d=!0,overlap:p=!1,sameWidth:m=!1,fitViewport:h=!1,gutter:v,arrowPadding:g=4,overflowPadding:y=8,getAnchorRect:b,updatePosition:w}=n,x=le(n,["store","modal","portal","preserveTabOrder","autoFocusOnShow","wrapperProps","fixed","flip","shift","slide","overlap","sameWidth","fitViewport","gutter","arrowPadding","overflowPadding","getAnchorRect","updatePosition"]);const k=It();ke(r=r||k,!1);const S=r.useState("arrowElement"),E=r.useState("anchorElement"),_=r.useState("popoverElement"),C=r.useState("contentElement"),P=r.useState("placement"),O=r.useState("mounted"),T=r.useState("rendered"),[N,L]=(0,e.useState)(!1),{portalRef:R,domReady:A}=Je(a,x.portalRef),z=Qe(b),F=Qe(w),M=!!w;We((()=>{if(!(null==_?void 0:_.isConnected))return;_.style.setProperty("--popover-overflow-padding",`${y}px`);const e=function(e,t){return{contextElement:e||void 0,getBoundingClientRect:()=>{const n=e,r=null==t?void 0:t(n);return r||!n?function(e){if(!e)return fo();const{x:t,y:n,width:r,height:o}=e;return fo(t,n,r,o)}(r):n.getBoundingClientRect()}}}(E,z),t=async()=>{if(!O)return;const t=[ho(S,{gutter:v,shift:f}),vo({flip:c,overflowPadding:y}),go({slide:d,overlap:p,overflowPadding:y}),bo(S,{arrowPadding:g}),yo({sameWidth:m,fitViewport:h,overflowPadding:y})],n=await((e,t,n)=>{const r=new Map,o={platform:co,...n},a={...o.platform,_c:r};return(async(e,t,n)=>{const{placement:r="bottom",strategy:o="absolute",middleware:a=[],platform:i}=n,l=a.filter(Boolean),u=await(null==i.isRTL?void 0:i.isRTL(t));let s=await i.getElementRects({reference:e,floating:t,strategy:o}),{x:c,y:f}=Ar(s,r,u),d=r,p={},m=0;for(let n=0;n<l.length;n++){const{name:a,fn:h}=l[n],{x:v,y:g,data:y,reset:b}=await h({x:c,y:f,initialPlacement:r,placement:d,strategy:o,middlewareData:p,rects:s,platform:i,elements:{reference:e,floating:t}});c=null!=v?v:c,f=null!=g?g:f,p={...p,[a]:{...p[a],...y}},b&&m<=50&&(m++,"object"==typeof b&&(b.placement&&(d=b.placement),b.rects&&(s=!0===b.rects?await i.getElementRects({reference:e,floating:t,strategy:o}):b.rects),({x:c,y:f}=Ar(s,d,u))),n=-1)}return{x:c,y:f,placement:d,strategy:o,middlewareData:p}})(e,t,{...o,platform:a})})(e,_,{placement:P,strategy:s?"fixed":"absolute",middleware:t});null==r||r.setState("currentPlacement",n.placement),L(!0);const o=mo(n.x),a=mo(n.y);if(Object.assign(_.style,{top:"0",left:"0",transform:`translate3d(${o}px,${a}px,0)`}),S&&n.middlewareData.arrow){const{x:e,y:t}=n.middlewareData.arrow,r=n.placement.split("-")[0];Object.assign(S.style,{left:null!=e?`${e}px`:"",top:null!=t?`${t}px`:"",[r]:"100%"})}},n=function(e,t,n,r){void 0===r&&(r={});const{ancestorScroll:o=!0,ancestorResize:a=!0,elementResize:i="function"==typeof ResizeObserver,layoutShift:l="function"==typeof IntersectionObserver,animationFrame:u=!1}=r,s=Jr(e),c=o||a?[...s?Gr(s):[],...Gr(t)]:[];c.forEach((e=>{o&&e.addEventListener("scroll",n,{passive:!0}),a&&e.addEventListener("resize",n)}));const f=s&&l?function(e,t){let n,r=null;const o=Dr(e);function a(){clearTimeout(n),r&&r.disconnect(),r=null}return function i(l,u){void 0===l&&(l=!1),void 0===u&&(u=1),a();const{left:s,top:c,width:f,height:d}=e.getBoundingClientRect();if(l||t(),!f||!d)return;const p={rootMargin:-gr(c)+"px "+-gr(o.clientWidth-(s+f))+"px "+-gr(o.clientHeight-(c+d))+"px "+-gr(s)+"px",threshold:hr(0,mr(1,u))||1};let m=!0;function h(e){const t=e[0].intersectionRatio;if(t!==u){if(!m)return i();t?i(!1,t):n=setTimeout((()=>{i(!1,1e-7)}),100)}m=!1}try{r=new IntersectionObserver(h,{...p,root:o.ownerDocument})}catch(e){r=new IntersectionObserver(h,p)}r.observe(e)}(!0),a}(s,n):null;let d,p=-1,m=null;i&&(m=new ResizeObserver((e=>{let[r]=e;r&&r.target===s&&m&&(m.unobserve(t),cancelAnimationFrame(p),p=requestAnimationFrame((()=>{m&&m.observe(t)}))),n()})),s&&!u&&m.observe(s),m.observe(t));let h=u?ro(e):null;return u&&function t(){const r=ro(e);!h||r.x===h.x&&r.y===h.y&&r.width===h.width&&r.height===h.height||n(),h=r,d=requestAnimationFrame(t)}(),n(),()=>{c.forEach((e=>{o&&e.removeEventListener("scroll",n),a&&e.removeEventListener("resize",n)})),f&&f(),m&&m.disconnect(),m=null,u&&cancelAnimationFrame(d)}}(e,_,(async()=>{M?(await F({updatePosition:t}),L(!0)):await t()}),{elementResize:"function"==typeof ResizeObserver});return()=>{L(!1),n()}}),[r,T,_,S,E,_,P,O,A,s,c,f,d,p,m,h,v,g,y,z,M,F]),We((()=>{if(!O)return;if(!A)return;if(!(null==_?void 0:_.isConnected))return;if(!(null==C?void 0:C.isConnected))return;const e=()=>{_.style.zIndex=getComputedStyle(C).zIndex};e();let t=requestAnimationFrame((()=>{t=requestAnimationFrame(e)}));return()=>cancelAnimationFrame(t)}),[O,A,_,C]);const D=s?"fixed":"absolute";return x=Ze(x,(e=>(0,_t.jsx)("div",ie(ae({role:"presentation"},u),{style:ae({position:D,top:0,left:0,width:"max-content"},null==u?void 0:u.style),ref:null==r?void 0:r.setPopoverElement,children:e}))),[r,D,u]),x=Ze(x,(e=>(0,_t.jsx)(Ut,{value:r,children:e})),[r]),x=ie(ae({"data-placing":N?void 0:""},x),{style:ae({position:"relative"},x.style)}),dr(ie(ae({store:r,modal:o,preserveTabOrder:i,portal:a,autoFocusOnShow:N&&l},x),{portalRef:R}))}));function xo(e,t,n,r){return!!(tn(t)||e&&(Le(t,e)||n&&Le(n,e)||(null==r?void 0:r.some((t=>xo(e,t,n))))))}pr(Ct((e=>Pt("div",wo(e)))),It);var ko=(0,e.createContext)(null),So=Ot((t=>{var n=t,{store:r,modal:o=!1,portal:a=!!o,hideOnEscape:i=!0,hideOnHoverOutside:l=!0,disablePointerEventsOnApproach:u=!!l}=n,s=le(n,["store","modal","portal","hideOnEscape","hideOnHoverOutside","disablePointerEventsOnApproach"]);const c=Ht();ke(r=r||c,!1);const f=(0,e.useRef)(null),[d,p]=(0,e.useState)([]),m=(0,e.useRef)(0),h=(0,e.useRef)(null),{portalRef:v,domReady:g}=Je(a,s.portalRef),y=!!l,b=Ge(l),w=!!u,x=Ge(u),k=r.useState("open"),S=r.useState("mounted");(0,e.useEffect)((()=>{if(!g)return;if(!S)return;if(!y&&!w)return;const e=f.current;return e?we(Ue("mousemove",(t=>{if(!r)return;const{anchorElement:n,hideTimeout:o,timeout:a}=r.getState(),i=h.current,l=t.target,u=n;if(xo(l,e,u,d))return h.current=l&&u&&Le(u,l)?Sn(t):null,window.clearTimeout(m.current),void(m.current=0);if(!m.current){if(i){const n=Sn(t);if(En(n,Cn(e,i))){if(h.current=n,!x(t))return;return t.preventDefault(),void t.stopPropagation()}}b(t)&&(m.current=window.setTimeout((()=>{m.current=0,null==r||r.hide()}),null!=o?o:a))}}),!0),(()=>clearTimeout(m.current))):void 0}),[r,g,S,y,w,d,x,b]),(0,e.useEffect)((()=>{if(!g)return;if(!S)return;if(!w)return;const e=e=>{const t=f.current;if(!t)return;const n=h.current;if(!n)return;const r=Cn(t,n);if(En(Sn(e),r)){if(!x(e))return;e.preventDefault(),e.stopPropagation()}};return we(Ue("mouseenter",e,!0),Ue("mouseover",e,!0),Ue("mouseout",e,!0),Ue("mouseleave",e,!0))}),[g,S,w,x]),(0,e.useEffect)((()=>{g&&(k||null==r||r.setAutoFocusOnShow(!1))}),[r,g,k]);const E=qe(k);(0,e.useEffect)((()=>{if(g)return()=>{E.current||null==r||r.setAutoFocusOnShow(!1)}}),[r,g]);const _=(0,e.useContext)(ko);We((()=>{if(o)return;if(!a)return;if(!S)return;if(!g)return;const e=f.current;return e?null==_?void 0:_(e):void 0}),[o,a,S,g]);const C=(0,e.useCallback)((e=>{p((t=>[...t,e]));const t=null==_?void 0:_(e);return()=>{p((t=>t.filter((t=>t!==e)))),null==t||t()}}),[_]);s=Ze(s,(e=>(0,_t.jsx)(Wt,{value:r,children:(0,_t.jsx)(ko.Provider,{value:C,children:e})})),[r,C]),s=ie(ae({},s),{ref:Ye(f,s.ref)}),s=function(t){var n=t,{store:r}=n,o=le(n,["store"]);const[a,i]=(0,e.useState)(!1),l=r.useState("mounted");(0,e.useEffect)((()=>{l||i(!1)}),[l]);const u=o.onFocus,s=Qe((e=>{null==u||u(e),e.defaultPrevented||i(!0)})),c=(0,e.useRef)(null);return(0,e.useEffect)((()=>ct(r,["anchorElement"],(e=>{c.current=e.anchorElement}))),[]),ie(ae({autoFocusOnHide:a,finalFocus:c},o),{onFocus:s})}(ae({store:r},s));const P=r.useState((e=>o||e.autoFocusOnShow));return wo(ie(ae({store:r,modal:o,portal:a,autoFocusOnShow:P},s),{portalRef:v,hideOnEscape:e=>!Se(i,e)&&(requestAnimationFrame((()=>{requestAnimationFrame((()=>{null==r||r.hide()}))})),!0)}))}));pr(Ct((e=>Pt("div",So(e)))),Ht);var Eo=Ot((e=>{var t=e,{store:n,portal:r=!0,gutter:o=8,preserveTabOrder:a=!1,hideOnHoverOutside:i=!0,hideOnInteractOutside:l=!0}=t,u=le(t,["store","portal","gutter","preserveTabOrder","hideOnHoverOutside","hideOnInteractOutside"]);const s=yn();ke(n=n||s,!1),u=Ze(u,(e=>(0,_t.jsx)(bn,{value:n,children:e})),[n]);const c=n.useState((e=>"description"===e.type?"tooltip":"none"));return u=ae({role:c},u),So(ie(ae({},u),{store:n,portal:r,gutter:o,preserveTabOrder:a,hideOnHoverOutside:e=>{if(Se(i,e))return!1;const t=null==n?void 0:n.getState().anchorElement;return!t||!("focusVisible"in t.dataset)},hideOnInteractOutside:e=>{if(Se(l,e))return!1;const t=null==n?void 0:n.getState().anchorElement;return!t||!Le(t,e.target)}}))})),_o=pr(Ct((e=>Pt("div",Eo(e)))),yn);const Co=function(t){const{shortcut:n,className:r}=t;if(!n)return null;let o,a;return"string"==typeof n&&(o=n),null!==n&&"object"==typeof n&&(o=n.display,a=n.ariaLabel),(0,e.createElement)("span",{className:r,"aria-label":a},o)},Po={bottom:"bottom",top:"top","middle left":"left","middle right":"right","bottom left":"bottom-end","bottom center":"bottom","bottom right":"bottom-start","top left":"top-end","top center":"top","top right":"top-start","middle left left":"left","middle left right":"left","middle left bottom":"left-end","middle left top":"left-start","middle right left":"right","middle right right":"right","middle right bottom":"right-end","middle right top":"right-start","bottom left left":"bottom-end","bottom left right":"bottom-end","bottom left bottom":"bottom-end","bottom left top":"bottom-end","bottom center left":"bottom","bottom center right":"bottom","bottom center bottom":"bottom","bottom center top":"bottom","bottom right left":"bottom-start","bottom right right":"bottom-start","bottom right bottom":"bottom-start","bottom right top":"bottom-start","top left left":"top-end","top left right":"top-end","top left bottom":"top-end","top left top":"top-end","top center left":"top","top center right":"top","top center bottom":"top","top center top":"top","top right left":"top-start","top right right":"top-start","top right bottom":"top-start","top right top":"top-start",middle:"bottom","middle center":"bottom","middle center bottom":"bottom","middle center left":"bottom","middle center right":"bottom","middle center top":"bottom"},Oo=e=>{var t;return null!==(t=Po[e])&&void 0!==t?t:"bottom"},To=700,No=function t(n){const{children:r,delay:o=To,hideOnClick:a=!0,placement:i,position:l,shortcut:u,text:s}=n,c=G(t,"tooltip"),f=s||u?c:void 0,d=1===e.Children.count(r);let p;void 0!==i?p=i:void 0!==l&&(p=Oo(l),K("`position` prop in wp.components.tooltip",{since:"6.4",alternative:"`placement` prop"})),p=p||"bottom";const m=function(e={}){const[t,n]=yt(Et,e);return function(e,t,n){return gt(e=St(e,t,n),n,"type"),gt(e,n,"skipTimeout"),e}(t,n,e)}({placement:p,timeout:o});return(0,e.createElement)(e.Fragment,null,(0,e.createElement)(kn,{onClick:a?m.hide:void 0,store:m,render:d?r:void 0},d?void 0:r),d&&(s||u)&&(0,e.createElement)(_o,{unmountOnHide:!0,className:"components-tooltip",gutter:4,id:f,overflowPadding:.5,store:m},s,u&&(0,e.createElement)(Co,{className:s?"components-tooltip__shortcut":"",shortcut:u})))},Lo=(0,e.forwardRef)((({className:t,isPressed:n,...r},o)=>{const a={...r,className:y()(t,{"is-pressed":n})||void 0,"aria-hidden":!0,focusable:!1};return(0,e.createElement)("svg",{...a,ref:o})}));Lo.displayName="SVG";const Ro=function({icon:t,className:n,size:r=20,style:o={},...a}){const i=["dashicon","dashicons","dashicons-"+t,n].filter(Boolean).join(" "),l={...20!=r?{fontSize:`${r}px`,width:`${r}px`,height:`${r}px`}:{},...o};return(0,e.createElement)("span",{className:i,style:l,...a})},Ao=function({icon:t=null,size:n=("string"==typeof t?20:24),...r}){if("string"==typeof t)return(0,e.createElement)(Ro,{icon:t,size:n,...r});if((0,e.isValidElement)(t)&&Ro===t.type)return(0,e.cloneElement)(t,{...r});if("function"==typeof t)return(0,e.createElement)(t,{size:n,...r});if(t&&("svg"===t.type||t.type===Lo)){const o={...t.props,width:n,height:n,...r};return(0,e.createElement)(Lo,{...o})}return(0,e.isValidElement)(t)?(0,e.cloneElement)(t,{size:n,...r}):t};var zo=o(9996),Fo=o.n(zo),Mo=o(2991),Do=o.n(Mo);function jo(e){return"[object Object]"===Object.prototype.toString.call(e)}function Io(e){var t,n;return!1!==jo(e)&&(void 0===(t=e.constructor)||!1!==jo(n=t.prototype)&&!1!==n.hasOwnProperty("isPrototypeOf"))}const $o=(0,e.createContext)({}),Uo=()=>(0,e.useContext)($o);(0,e.memo)((({children:t,value:n})=>{const r=function({value:t}){const n=Uo(),r=(0,e.useRef)(t);return function(t,n){const r=(0,e.useRef)(!1);(0,e.useEffect)((()=>{if(r.current)return t();r.current=!0}),n)}((()=>{Do()(r.current,t)&&r.current}),[t]),(0,e.useMemo)((()=>Fo()(null!=n?n:{},null!=t?t:{},{isMergeableObject:Io})),[n,t])}({value:n});return(0,e.createElement)($o.Provider,{value:r},t)}));const Vo="data-wp-component",Ho="data-wp-c16t",Bo="__contextSystemKey__";var Wo=function(){return Wo=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},Wo.apply(this,arguments)};function qo(e){return e.toLowerCase()}Object.create,Object.create,"function"==typeof SuppressedError&&SuppressedError;var Qo=[/([a-z0-9])([A-Z])/g,/([A-Z])([A-Z][a-z])/g],Yo=/[^A-Z0-9]+/gi;function Ko(e,t,n){return t instanceof RegExp?e.replace(t,n):t.reduce((function(e,t){return e.replace(t,n)}),e)}function Xo(e,t){var n,r,o=0;function a(){var a,i,l=n,u=arguments.length;e:for(;l;){if(l.args.length===arguments.length){for(i=0;i<u;i++)if(l.args[i]!==arguments[i]){l=l.next;continue e}return l!==n&&(l===r&&(r=l.prev),l.prev.next=l.next,l.next&&(l.next.prev=l.prev),l.next=n,l.prev=null,n.prev=l,n=l),l.val}l=l.next}for(a=new Array(u),i=0;i<u;i++)a[i]=arguments[i];return l={args:a,val:e.apply(null,a)},n?(n.prev=l,l.next=n):r=l,o===t.maxSize?(r=r.prev).next=null:o++,n=l,l.val}return t=t||{},a.clear=function(){n=null,r=null,o=0},a}const Go=Xo((function(e){var t;return`components-${void 0===t&&(t={}),function(e,t){return void 0===t&&(t={}),function(e,t){void 0===t&&(t={});for(var n=t.splitRegexp,r=void 0===n?Qo:n,o=t.stripRegexp,a=void 0===o?Yo:o,i=t.transform,l=void 0===i?qo:i,u=t.delimiter,s=void 0===u?" ":u,c=Ko(Ko(e,r,"$1\0$2"),a,"\0"),f=0,d=c.length;"\0"===c.charAt(f);)f++;for(;"\0"===c.charAt(d-1);)d--;return c.slice(f,d).split("\0").map(l).join(s)}(e,Wo({delimiter:"."},t))}(e,Wo({delimiter:"-"},t))}`}));var Zo=function(){function e(e){var t=this;this._insertTag=function(e){var n;n=0===t.tags.length?t.insertionPoint?t.insertionPoint.nextSibling:t.prepend?t.container.firstChild:t.before:t.tags[t.tags.length-1].nextSibling,t.container.insertBefore(e,n),t.tags.push(e)},this.isSpeedy=void 0===e.speedy||e.speedy,this.tags=[],this.ctr=0,this.nonce=e.nonce,this.key=e.key,this.container=e.container,this.prepend=e.prepend,this.insertionPoint=e.insertionPoint,this.before=null}var t=e.prototype;return t.hydrate=function(e){e.forEach(this._insertTag)},t.insert=function(e){this.ctr%(this.isSpeedy?65e3:1)==0&&this._insertTag(function(e){var t=document.createElement("style");return t.setAttribute("data-emotion",e.key),void 0!==e.nonce&&t.setAttribute("nonce",e.nonce),t.appendChild(document.createTextNode("")),t.setAttribute("data-s",""),t}(this));var t=this.tags[this.tags.length-1];if(this.isSpeedy){var n=function(e){if(e.sheet)return e.sheet;for(var t=0;t<document.styleSheets.length;t++)if(document.styleSheets[t].ownerNode===e)return document.styleSheets[t]}(t);try{n.insertRule(e,n.cssRules.length)}catch(e){}}else t.appendChild(document.createTextNode(e));this.ctr++},t.flush=function(){this.tags.forEach((function(e){return e.parentNode&&e.parentNode.removeChild(e)})),this.tags=[],this.ctr=0},e}(),Jo=Math.abs,ea=String.fromCharCode,ta=Object.assign;function na(e){return e.trim()}function ra(e,t,n){return e.replace(t,n)}function oa(e,t){return e.indexOf(t)}function aa(e,t){return 0|e.charCodeAt(t)}function ia(e,t,n){return e.slice(t,n)}function la(e){return e.length}function ua(e){return e.length}function sa(e,t){return t.push(e),e}var ca=1,fa=1,da=0,pa=0,ma=0,ha="";function va(e,t,n,r,o,a,i){return{value:e,root:t,parent:n,type:r,props:o,children:a,line:ca,column:fa,length:i,return:""}}function ga(e,t){return ta(va("",null,null,"",null,null,0),e,{length:-e.length},t)}function ya(){return ma=pa>0?aa(ha,--pa):0,fa--,10===ma&&(fa=1,ca--),ma}function ba(){return ma=pa<da?aa(ha,pa++):0,fa++,10===ma&&(fa=1,ca++),ma}function wa(){return aa(ha,pa)}function xa(){return pa}function ka(e,t){return ia(ha,e,t)}function Sa(e){switch(e){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function Ea(e){return ca=fa=1,da=la(ha=e),pa=0,[]}function _a(e){return ha="",e}function Ca(e){return na(ka(pa-1,Ta(91===e?e+2:40===e?e+1:e)))}function Pa(e){for(;(ma=wa())&&ma<33;)ba();return Sa(e)>2||Sa(ma)>3?"":" "}function Oa(e,t){for(;--t&&ba()&&!(ma<48||ma>102||ma>57&&ma<65||ma>70&&ma<97););return ka(e,xa()+(t<6&&32==wa()&&32==ba()))}function Ta(e){for(;ba();)switch(ma){case e:return pa;case 34:case 39:34!==e&&39!==e&&Ta(ma);break;case 40:41===e&&Ta(e);break;case 92:ba()}return pa}function Na(e,t){for(;ba()&&e+ma!==57&&(e+ma!==84||47!==wa()););return"/*"+ka(t,pa-1)+"*"+ea(47===e?e:ba())}function La(e){for(;!Sa(wa());)ba();return ka(e,pa)}var Ra="-ms-",Aa="-moz-",za="-webkit-",Fa="comm",Ma="rule",Da="decl",ja="@keyframes";function Ia(e,t){for(var n="",r=ua(e),o=0;o<r;o++)n+=t(e[o],o,e,t)||"";return n}function $a(e,t,n,r){switch(e.type){case"@layer":if(e.children.length)break;case"@import":case Da:return e.return=e.return||e.value;case Fa:return"";case ja:return e.return=e.value+"{"+Ia(e.children,r)+"}";case Ma:e.value=e.props.join(",")}return la(n=Ia(e.children,r))?e.return=e.value+"{"+n+"}":""}function Ua(e){return _a(Va("",null,null,null,[""],e=Ea(e),0,[0],e))}function Va(e,t,n,r,o,a,i,l,u){for(var s=0,c=0,f=i,d=0,p=0,m=0,h=1,v=1,g=1,y=0,b="",w=o,x=a,k=r,S=b;v;)switch(m=y,y=ba()){case 40:if(108!=m&&58==aa(S,f-1)){-1!=oa(S+=ra(Ca(y),"&","&\f"),"&\f")&&(g=-1);break}case 34:case 39:case 91:S+=Ca(y);break;case 9:case 10:case 13:case 32:S+=Pa(m);break;case 92:S+=Oa(xa()-1,7);continue;case 47:switch(wa()){case 42:case 47:sa(Ba(Na(ba(),xa()),t,n),u);break;default:S+="/"}break;case 123*h:l[s++]=la(S)*g;case 125*h:case 59:case 0:switch(y){case 0:case 125:v=0;case 59+c:-1==g&&(S=ra(S,/\f/g,"")),p>0&&la(S)-f&&sa(p>32?Wa(S+";",r,n,f-1):Wa(ra(S," ","")+";",r,n,f-2),u);break;case 59:S+=";";default:if(sa(k=Ha(S,t,n,s,c,o,l,b,w=[],x=[],f),a),123===y)if(0===c)Va(S,t,k,k,w,a,f,l,x);else switch(99===d&&110===aa(S,3)?100:d){case 100:case 108:case 109:case 115:Va(e,k,k,r&&sa(Ha(e,k,k,0,0,o,l,b,o,w=[],f),x),o,x,f,l,r?w:x);break;default:Va(S,k,k,k,[""],x,0,l,x)}}s=c=p=0,h=g=1,b=S="",f=i;break;case 58:f=1+la(S),p=m;default:if(h<1)if(123==y)--h;else if(125==y&&0==h++&&125==ya())continue;switch(S+=ea(y),y*h){case 38:g=c>0?1:(S+="\f",-1);break;case 44:l[s++]=(la(S)-1)*g,g=1;break;case 64:45===wa()&&(S+=Ca(ba())),d=wa(),c=f=la(b=S+=La(xa())),y++;break;case 45:45===m&&2==la(S)&&(h=0)}}return a}function Ha(e,t,n,r,o,a,i,l,u,s,c){for(var f=o-1,d=0===o?a:[""],p=ua(d),m=0,h=0,v=0;m<r;++m)for(var g=0,y=ia(e,f+1,f=Jo(h=i[m])),b=e;g<p;++g)(b=na(h>0?d[g]+" "+y:ra(y,/&\f/g,d[g])))&&(u[v++]=b);return va(e,t,n,0===o?Ma:l,u,s,c)}function Ba(e,t,n){return va(e,t,n,Fa,ea(ma),ia(e,2,-2),0)}function Wa(e,t,n,r){return va(e,t,n,Da,ia(e,0,r),ia(e,r+1,-1),r)}var qa=function(e,t,n){for(var r=0,o=0;r=o,o=wa(),38===r&&12===o&&(t[n]=1),!Sa(o);)ba();return ka(e,pa)},Qa=new WeakMap,Ya=function(e){if("rule"===e.type&&e.parent&&!(e.length<1)){for(var t=e.value,n=e.parent,r=e.column===n.column&&e.line===n.line;"rule"!==n.type;)if(!(n=n.parent))return;if((1!==e.props.length||58===t.charCodeAt(0)||Qa.get(n))&&!r){Qa.set(e,!0);for(var o=[],a=function(e,t){return _a(function(e,t){var n=-1,r=44;do{switch(Sa(r)){case 0:38===r&&12===wa()&&(t[n]=1),e[n]+=qa(pa-1,t,n);break;case 2:e[n]+=Ca(r);break;case 4:if(44===r){e[++n]=58===wa()?"&\f":"",t[n]=e[n].length;break}default:e[n]+=ea(r)}}while(r=ba());return e}(Ea(e),t))}(t,o),i=n.props,l=0,u=0;l<a.length;l++)for(var s=0;s<i.length;s++,u++)e.props[u]=o[l]?a[l].replace(/&\f/g,i[s]):i[s]+" "+a[l]}}},Ka=function(e){if("decl"===e.type){var t=e.value;108===t.charCodeAt(0)&&98===t.charCodeAt(2)&&(e.return="",e.value="")}};function Xa(e,t){switch(function(e,t){return 45^aa(e,0)?(((t<<2^aa(e,0))<<2^aa(e,1))<<2^aa(e,2))<<2^aa(e,3):0}(e,t)){case 5103:return za+"print-"+e+e;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return za+e+e;case 5349:case 4246:case 4810:case 6968:case 2756:return za+e+Aa+e+Ra+e+e;case 6828:case 4268:return za+e+Ra+e+e;case 6165:return za+e+Ra+"flex-"+e+e;case 5187:return za+e+ra(e,/(\w+).+(:[^]+)/,za+"box-$1$2"+Ra+"flex-$1$2")+e;case 5443:return za+e+Ra+"flex-item-"+ra(e,/flex-|-self/,"")+e;case 4675:return za+e+Ra+"flex-line-pack"+ra(e,/align-content|flex-|-self/,"")+e;case 5548:return za+e+Ra+ra(e,"shrink","negative")+e;case 5292:return za+e+Ra+ra(e,"basis","preferred-size")+e;case 6060:return za+"box-"+ra(e,"-grow","")+za+e+Ra+ra(e,"grow","positive")+e;case 4554:return za+ra(e,/([^-])(transform)/g,"$1"+za+"$2")+e;case 6187:return ra(ra(ra(e,/(zoom-|grab)/,za+"$1"),/(image-set)/,za+"$1"),e,"")+e;case 5495:case 3959:return ra(e,/(image-set\([^]*)/,za+"$1$`$1");case 4968:return ra(ra(e,/(.+:)(flex-)?(.*)/,za+"box-pack:$3"+Ra+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+za+e+e;case 4095:case 3583:case 4068:case 2532:return ra(e,/(.+)-inline(.+)/,za+"$1$2")+e;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(la(e)-1-t>6)switch(aa(e,t+1)){case 109:if(45!==aa(e,t+4))break;case 102:return ra(e,/(.+:)(.+)-([^]+)/,"$1"+za+"$2-$3$1"+Aa+(108==aa(e,t+3)?"$3":"$2-$3"))+e;case 115:return~oa(e,"stretch")?Xa(ra(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(115!==aa(e,t+1))break;case 6444:switch(aa(e,la(e)-3-(~oa(e,"!important")&&10))){case 107:return ra(e,":",":"+za)+e;case 101:return ra(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+za+(45===aa(e,14)?"inline-":"")+"box$3$1"+za+"$2$3$1"+Ra+"$2box$3")+e}break;case 5936:switch(aa(e,t+11)){case 114:return za+e+Ra+ra(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return za+e+Ra+ra(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return za+e+Ra+ra(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return za+e+Ra+e+e}return e}var Ga=[function(e,t,n,r){if(e.length>-1&&!e.return)switch(e.type){case Da:e.return=Xa(e.value,e.length);break;case ja:return Ia([ga(e,{value:ra(e.value,"@","@"+za)})],r);case Ma:if(e.length)return function(e,t){return e.map(t).join("")}(e.props,(function(t){switch(function(e,t){return(e=/(::plac\w+|:read-\w+)/.exec(e))?e[0]:e}(t)){case":read-only":case":read-write":return Ia([ga(e,{props:[ra(t,/:(read-\w+)/,":-moz-$1")]})],r);case"::placeholder":return Ia([ga(e,{props:[ra(t,/:(plac\w+)/,":"+za+"input-$1")]}),ga(e,{props:[ra(t,/:(plac\w+)/,":-moz-$1")]}),ga(e,{props:[ra(t,/:(plac\w+)/,Ra+"input-$1")]})],r)}return""}))}}],Za=function(e){var t=e.key;if("css"===t){var n=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(n,(function(e){-1!==e.getAttribute("data-emotion").indexOf(" ")&&(document.head.appendChild(e),e.setAttribute("data-s",""))}))}var r,o,a=e.stylisPlugins||Ga,i={},l=[];r=e.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+t+' "]'),(function(e){for(var t=e.getAttribute("data-emotion").split(" "),n=1;n<t.length;n++)i[t[n]]=!0;l.push(e)}));var u,s,c,f,d=[$a,(f=function(e){u.insert(e)},function(e){e.root||(e=e.return)&&f(e)})],p=(s=[Ya,Ka].concat(a,d),c=ua(s),function(e,t,n,r){for(var o="",a=0;a<c;a++)o+=s[a](e,t,n,r)||"";return o});o=function(e,t,n,r){u=n,Ia(Ua(e?e+"{"+t.styles+"}":t.styles),p),r&&(m.inserted[t.name]=!0)};var m={key:t,sheet:new Zo({key:t,container:r,nonce:e.nonce,speedy:e.speedy,prepend:e.prepend,insertionPoint:e.insertionPoint}),nonce:e.nonce,inserted:i,registered:{},insert:o};return m.sheet.hydrate(l),m},Ja={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};function ei(e){var t=Object.create(null);return function(n){return void 0===t[n]&&(t[n]=e(n)),t[n]}}var ti=/[A-Z]|^ms/g,ni=/_EMO_([^_]+?)_([^]*?)_EMO_/g,ri=function(e){return 45===e.charCodeAt(1)},oi=function(e){return null!=e&&"boolean"!=typeof e},ai=ei((function(e){return ri(e)?e:e.replace(ti,"-$&").toLowerCase()})),ii=function(e,t){switch(e){case"animation":case"animationName":if("string"==typeof t)return t.replace(ni,(function(e,t,n){return ui={name:t,styles:n,next:ui},t}))}return 1===Ja[e]||ri(e)||"number"!=typeof t||0===t?t:t+"px"};function li(e,t,n){if(null==n)return"";if(void 0!==n.__emotion_styles)return n;switch(typeof n){case"boolean":return"";case"object":if(1===n.anim)return ui={name:n.name,styles:n.styles,next:ui},n.name;if(void 0!==n.styles){var r=n.next;if(void 0!==r)for(;void 0!==r;)ui={name:r.name,styles:r.styles,next:ui},r=r.next;return n.styles+";"}return function(e,t,n){var r="";if(Array.isArray(n))for(var o=0;o<n.length;o++)r+=li(e,t,n[o])+";";else for(var a in n){var i=n[a];if("object"!=typeof i)null!=t&&void 0!==t[i]?r+=a+"{"+t[i]+"}":oi(i)&&(r+=ai(a)+":"+ii(a,i)+";");else if(!Array.isArray(i)||"string"!=typeof i[0]||null!=t&&void 0!==t[i[0]]){var l=li(e,t,i);switch(a){case"animation":case"animationName":r+=ai(a)+":"+l+";";break;default:r+=a+"{"+l+"}"}}else for(var u=0;u<i.length;u++)oi(i[u])&&(r+=ai(a)+":"+ii(a,i[u])+";")}return r}(e,t,n);case"function":if(void 0!==e){var o=ui,a=n(e);return ui=o,li(e,t,a)}}if(null==t)return n;var i=t[n];return void 0!==i?i:n}var ui,si=/label:\s*([^\s;\n{]+)\s*(;|$)/g,ci=function(e,t,n){if(1===e.length&&"object"==typeof e[0]&&null!==e[0]&&void 0!==e[0].styles)return e[0];var r=!0,o="";ui=void 0;var a=e[0];null==a||void 0===a.raw?(r=!1,o+=li(n,t,a)):o+=a[0];for(var i=1;i<e.length;i++)o+=li(n,t,e[i]),r&&(o+=a[i]);si.lastIndex=0;for(var l,u="";null!==(l=si.exec(o));)u+="-"+l[1];var s=function(e){for(var t,n=0,r=0,o=e.length;o>=4;++r,o-=4)t=1540483477*(65535&(t=255&e.charCodeAt(r)|(255&e.charCodeAt(++r))<<8|(255&e.charCodeAt(++r))<<16|(255&e.charCodeAt(++r))<<24))+(59797*(t>>>16)<<16),n=1540483477*(65535&(t^=t>>>24))+(59797*(t>>>16)<<16)^1540483477*(65535&n)+(59797*(n>>>16)<<16);switch(o){case 3:n^=(255&e.charCodeAt(r+2))<<16;case 2:n^=(255&e.charCodeAt(r+1))<<8;case 1:n=1540483477*(65535&(n^=255&e.charCodeAt(r)))+(59797*(n>>>16)<<16)}return(((n=1540483477*(65535&(n^=n>>>13))+(59797*(n>>>16)<<16))^n>>>15)>>>0).toString(36)}(o)+u;return{name:s,styles:o,next:ui}},fi=!!t.useInsertionEffect&&t.useInsertionEffect,di=fi||function(e){return e()},pi=(fi||e.useLayoutEffect,e.createContext("undefined"!=typeof HTMLElement?Za({key:"css"}):null));pi.Provider;var mi=e.createContext({});function hi(e,t,n){var r="";return n.split(" ").forEach((function(n){void 0!==e[n]?t.push(e[n]+";"):r+=n+" "})),r}var vi=function(e,t,n){var r=e.key+"-"+t.name;!1===n&&void 0===e.registered[r]&&(e.registered[r]=t.styles)},gi=function(e,t,n){vi(e,t,n);var r=e.key+"-"+t.name;if(void 0===e.inserted[t.name]){var o=t;do{e.insert(t===o?"."+r:"",o,e.sheet,!0),o=o.next}while(void 0!==o)}};function yi(e,t){if(void 0===e.inserted[t.name])return e.insert("",t,e.sheet,!0)}function bi(e,t,n){var r=[],o=hi(e,r,n);return r.length<2?n:o+t(r)}var wi=function e(t){for(var n="",r=0;r<t.length;r++){var o=t[r];if(null!=o){var a=void 0;switch(typeof o){case"boolean":break;case"object":if(Array.isArray(o))a=e(o);else for(var i in a="",o)o[i]&&i&&(a&&(a+=" "),a+=i);break;default:a=o}a&&(n&&(n+=" "),n+=a)}}return n},xi=function(e){var t=Za({key:"css"});t.sheet.speedy=function(e){this.isSpeedy=e},t.compat=!0;var n=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];var o=ci(n,t.registered,void 0);return gi(t,o,!1),t.key+"-"+o.name};return{css:n,cx:function(){for(var e=arguments.length,r=new Array(e),o=0;o<e;o++)r[o]=arguments[o];return bi(t.registered,n,wi(r))},injectGlobal:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];var o=ci(n,t.registered);yi(t,o)},keyframes:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];var o=ci(n,t.registered),a="animation-"+o.name;return yi(t,{name:o.name,styles:"@keyframes "+a+"{"+o.styles+"}"}),a},hydrate:function(e){e.forEach((function(e){t.inserted[e]=!0}))},flush:function(){t.registered={},t.inserted={},t.sheet.flush()},sheet:t.sheet,cache:t,getRegisteredStyles:hi.bind(null,t.registered),merge:bi.bind(null,t.registered,n)}}(),ki=(xi.flush,xi.hydrate,xi.cx);xi.merge,xi.getRegisteredStyles,xi.injectGlobal,xi.keyframes,xi.css,xi.sheet,xi.cache;const Si={border:0,clip:"rect(1px, 1px, 1px, 1px)",WebkitClipPath:"inset( 50% )",clipPath:"inset( 50% )",height:"1px",margin:"-1px",overflow:"hidden",padding:0,position:"absolute",width:"1px",wordWrap:"normal"};function Ei(){return Ei=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Ei.apply(this,arguments)}var _i=/^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/,Ci=ei((function(e){return _i.test(e)||111===e.charCodeAt(0)&&110===e.charCodeAt(1)&&e.charCodeAt(2)<91})),Pi=function(e){return"theme"!==e},Oi=function(e){return"string"==typeof e&&e.charCodeAt(0)>96?Ci:Pi},Ti=function(e,t,n){var r;if(t){var o=t.shouldForwardProp;r=e.__emotion_forwardProp&&o?function(t){return e.__emotion_forwardProp(t)&&o(t)}:o}return"function"!=typeof r&&n&&(r=e.__emotion_forwardProp),r},Ni=function(e){var t=e.cache,n=e.serialized,r=e.isStringTag;return vi(t,n,r),di((function(){return gi(t,n,r)})),null},Li=function t(n,r){var o,a,i=n.__emotion_real===n,l=i&&n.__emotion_base||n;void 0!==r&&(o=r.label,a=r.target);var u=Ti(n,r,i),s=u||Oi(l),c=!s("as");return function(){var f=arguments,d=i&&void 0!==n.__emotion_styles?n.__emotion_styles.slice(0):[];if(void 0!==o&&d.push("label:"+o+";"),null==f[0]||void 0===f[0].raw)d.push.apply(d,f);else{d.push(f[0][0]);for(var p=f.length,m=1;m<p;m++)d.push(f[m],f[0][m])}var h,v=(h=function(t,n,r){var o=c&&t.as||l,i="",f=[],p=t;if(null==t.theme){for(var m in p={},t)p[m]=t[m];p.theme=e.useContext(mi)}"string"==typeof t.className?i=hi(n.registered,f,t.className):null!=t.className&&(i=t.className+" ");var h=ci(d.concat(f),n.registered,p);i+=n.key+"-"+h.name,void 0!==a&&(i+=" "+a);var v=c&&void 0===u?Oi(o):s,g={};for(var y in t)c&&"as"===y||v(y)&&(g[y]=t[y]);return g.className=i,g.ref=r,e.createElement(e.Fragment,null,e.createElement(Ni,{cache:n,serialized:h,isStringTag:"string"==typeof o}),e.createElement(o,g))},(0,e.forwardRef)((function(t,n){var r=(0,e.useContext)(pi);return h(t,r,n)})));return v.displayName=void 0!==o?o:"Styled("+("string"==typeof l?l:l.displayName||l.name||"Component")+")",v.defaultProps=n.defaultProps,v.__emotion_real=v,v.__emotion_base=l,v.__emotion_styles=d,v.__emotion_forwardProp=u,Object.defineProperty(v,"toString",{value:function(){return"."+a}}),v.withComponent=function(e,n){return t(e,Ei({},r,n,{shouldForwardProp:Ti(v,n,!0)})).apply(void 0,d)},v}};const Ri=Li("div",{target:"e19lxcc00"})("");Ri.selector=".components-view",Ri.displayName="View";const Ai=Ri,zi=function(t,n,r){const o=r?.forwardsRef?(0,e.forwardRef)(t):t;let a=o[Bo]||[n];return Array.isArray(n)&&(a=[...a,...n]),"string"==typeof n&&(a=[...a,n]),Object.assign(o,{[Bo]:[...new Set(a)],displayName:n,selector:`.${Go(n)}`})}((function(t,n){const{style:r,...o}=function(t,n){const r=Uo(),o=r?.[n]||{},a={[Ho]:!0,...(i=n,{[Vo]:i})};var i;const{_overrides:l,...u}=o,s=Object.entries(u).length?Object.assign({},u,t):t,c=(()=>{const t=(0,e.useContext)(pi);return(0,e.useCallback)(((...e)=>{if(null===t)throw new Error("The `useCx` hook should be only used within a valid Emotion Cache Context");return ki(...e.map((e=>{return null!=(n=e)&&["name","styles"].every((e=>void 0!==n[e]))?(gi(t,e,!1),`${t.key}-${e.name}`):e;var n})))}),[t])})()(Go(n),t.className),f="function"==typeof s.renderChildren?s.renderChildren(s):s.children;for(const e in s)a[e]=s[e];for(const e in l)a[e]=l[e];return void 0!==f&&(a.children=f),a.className=c,a}(t,"VisuallyHidden");return(0,e.createElement)(Ai,{ref:n,...o,style:{...Si,...r||{}}})}),"VisuallyHidden",{forwardsRef:!0}),Fi=["onMouseDown","onClick"],Mi=(0,e.forwardRef)((function(t,n){const{__next40pxDefaultSize:r,isBusy:o,isDestructive:a,className:i,disabled:l,icon:u,iconPosition:s="left",iconSize:c,showTooltip:f,tooltipPosition:d,shortcut:p,label:m,children:h,size:v="default",text:g,variant:b,__experimentalIsFocusable:w,describedBy:x,...k}=function({isDefault:e,isPrimary:t,isSecondary:n,isTertiary:r,isLink:o,isPressed:a,isSmall:i,size:l,variant:u,...s}){let c=l,f=u;const d={"aria-pressed":a};var p,m,h,v,g,y;return i&&(null!==(p=c)&&void 0!==p||(c="small")),t&&(null!==(m=f)&&void 0!==m||(f="primary")),r&&(null!==(h=f)&&void 0!==h||(f="tertiary")),n&&(null!==(v=f)&&void 0!==v||(f="secondary")),e&&(K("Button isDefault prop",{since:"5.4",alternative:'variant="secondary"',version:"6.2"}),null!==(g=f)&&void 0!==g||(f="secondary")),o&&(null!==(y=f)&&void 0!==y||(f="link")),{...d,...s,size:c,variant:f}}(t),{href:S,target:E,"aria-checked":_,"aria-pressed":C,"aria-selected":P,...O}="href"in k?k:{href:void 0,target:void 0,...k},T=G(Mi,"components-button__description"),N="string"==typeof h&&!!h||Array.isArray(h)&&h?.[0]&&null!==h[0]&&"components-tooltip"!==h?.[0]?.props?.className,L=y()("components-button",i,{"is-next-40px-default-size":r,"is-secondary":"secondary"===b,"is-primary":"primary"===b,"is-small":"small"===v,"is-compact":"compact"===v,"is-tertiary":"tertiary"===b,"is-pressed":[!0,"true","mixed"].includes(C),"is-pressed-mixed":"mixed"===C,"is-busy":o,"is-link":"link"===b,"is-destructive":a,"has-text":!!u&&N,"has-icon":!!u}),R=l&&!w,A=void 0===S||R?"button":"a",z="button"===A?{type:"button",disabled:R,"aria-checked":_,"aria-pressed":C,"aria-selected":P}:{},F="a"===A?{href:S,target:E}:{};if(l&&w){z["aria-disabled"]=!0,F["aria-disabled"]=!0;for(const e of Fi)O[e]=e=>{e&&(e.stopPropagation(),e.preventDefault())}}const M=!R&&(f&&m||p||!!m&&!h?.length&&!1!==f),D=x?T:void 0,j=O["aria-describedby"]||D,I={className:L,"aria-label":O["aria-label"]||m,"aria-describedby":j,ref:n},$=(0,e.createElement)(e.Fragment,null,u&&"left"===s&&(0,e.createElement)(Ao,{icon:u,size:c}),g&&(0,e.createElement)(e.Fragment,null,g),u&&"right"===s&&(0,e.createElement)(Ao,{icon:u,size:c}),h),U="a"===A?(0,e.createElement)("a",{...F,...O,...I},$):(0,e.createElement)("button",{...z,...O,...I},$);let V;return void 0!==d&&(V=Oo(d)),M?(0,e.createElement)(e.Fragment,null,(0,e.createElement)(No,{text:h?.length&&x?x:m,shortcut:p,placement:V},U),x&&(0,e.createElement)(zi,null,(0,e.createElement)("span",{id:D},x))):(0,e.createElement)(e.Fragment,null,U,x&&(0,e.createElement)(zi,null,(0,e.createElement)("span",{id:D},x)))})),Di=Mi;var ji=o(8975),Ii=o.n(ji);const $i=Xo(console.error);function Ui(e,...t){try{return Ii().sprintf(e,...t)}catch(t){return t instanceof Error&&$i("sprintf error: \n\n"+t.toString()),e}}var Vi,Hi,Bi,Wi;Vi={"(":9,"!":8,"*":7,"/":7,"%":7,"+":6,"-":6,"<":5,"<=":5,">":5,">=":5,"==":4,"!=":4,"&&":3,"||":2,"?":1,"?:":1},Hi=["(","?"],Bi={")":["("],":":["?","?:"]},Wi=/<=|>=|==|!=|&&|\|\||\?:|\(|!|\*|\/|%|\+|-|<|>|\?|\)|:/;var qi={"!":function(e){return!e},"*":function(e,t){return e*t},"/":function(e,t){return e/t},"%":function(e,t){return e%t},"+":function(e,t){return e+t},"-":function(e,t){return e-t},"<":function(e,t){return e<t},"<=":function(e,t){return e<=t},">":function(e,t){return e>t},">=":function(e,t){return e>=t},"==":function(e,t){return e===t},"!=":function(e,t){return e!==t},"&&":function(e,t){return e&&t},"||":function(e,t){return e||t},"?:":function(e,t,n){if(e)throw t;return n}};var Qi={contextDelimiter:"",onMissingKey:null};function Yi(e,t){var n;for(n in this.data=e,this.pluralForms={},this.options={},Qi)this.options[n]=void 0!==t&&n in t?t[n]:Qi[n]}Yi.prototype.getPluralForm=function(e,t){var n,r,o,a,i=this.pluralForms[e];return i||("function"!=typeof(o=(n=this.data[e][""])["Plural-Forms"]||n["plural-forms"]||n.plural_forms)&&(r=function(e){var t,n,r;for(t=e.split(";"),n=0;n<t.length;n++)if(0===(r=t[n].trim()).indexOf("plural="))return r.substr(7)}(n["Plural-Forms"]||n["plural-forms"]||n.plural_forms),a=function(e){var t=function(e){for(var t,n,r,o,a=[],i=[];t=e.match(Wi);){for(n=t[0],(r=e.substr(0,t.index).trim())&&a.push(r);o=i.pop();){if(Bi[n]){if(Bi[n][0]===o){n=Bi[n][1]||n;break}}else if(Hi.indexOf(o)>=0||Vi[o]<Vi[n]){i.push(o);break}a.push(o)}Bi[n]||i.push(n),e=e.substr(t.index+n.length)}return(e=e.trim())&&a.push(e),a.concat(i.reverse())}(e);return function(e){return function(e,t){var n,r,o,a,i,l,u=[];for(n=0;n<e.length;n++){if(i=e[n],a=qi[i]){for(r=a.length,o=Array(r);r--;)o[r]=u.pop();try{l=a.apply(null,o)}catch(e){return e}}else l=t.hasOwnProperty(i)?t[i]:+i;u.push(l)}return u[0]}(t,e)}}(r),o=function(e){return+a({n:e})}),i=this.pluralForms[e]=o),i(t)},Yi.prototype.dcnpgettext=function(e,t,n,r,o){var a,i,l;return a=void 0===o?0:this.getPluralForm(e,o),i=n,t&&(i=t+this.options.contextDelimiter+n),(l=this.data[e][i])&&l[a]?l[a]:(this.options.onMissingKey&&this.options.onMissingKey(n,e),0===a?n:r)};const Ki={plural_forms:e=>1===e?0:1},Xi=/^i18n\.(n?gettext|has_translation)(_|$)/,Gi=((e,t,n)=>{const r=new Yi({}),o=new Set,a=()=>{o.forEach((e=>e()))},i=(e,t="default")=>{r.data[t]={...r.data[t],...e},r.data[t][""]={...Ki,...r.data[t]?.[""]},delete r.pluralForms[t]},l=(e,t)=>{i(e,t),a()},u=(e="default",t,n,o,a)=>(r.data[e]||i(void 0,e),r.dcnpgettext(e,t,n,o,a)),s=(e="default")=>e,_x=(e,t,r)=>{let o=u(r,t,e);return n?(o=n.applyFilters("i18n.gettext_with_context",o,e,t,r),n.applyFilters("i18n.gettext_with_context_"+s(r),o,e,t,r)):o};if(n){const e=e=>{Xi.test(e)&&a()};n.addAction("hookAdded","core/i18n",e),n.addAction("hookRemoved","core/i18n",e)}return{getLocaleData:(e="default")=>r.data[e],setLocaleData:l,addLocaleData:(e,t="default")=>{r.data[t]={...r.data[t],...e,"":{...Ki,...r.data[t]?.[""],...e?.[""]}},delete r.pluralForms[t],a()},resetLocaleData:(e,t)=>{r.data={},r.pluralForms={},l(e,t)},subscribe:e=>(o.add(e),()=>o.delete(e)),__:(e,t)=>{let r=u(t,void 0,e);return n?(r=n.applyFilters("i18n.gettext",r,e,t),n.applyFilters("i18n.gettext_"+s(t),r,e,t)):r},_x,_n:(e,t,r,o)=>{let a=u(o,void 0,e,t,r);return n?(a=n.applyFilters("i18n.ngettext",a,e,t,r,o),n.applyFilters("i18n.ngettext_"+s(o),a,e,t,r,o)):a},_nx:(e,t,r,o,a)=>{let i=u(a,o,e,t,r);return n?(i=n.applyFilters("i18n.ngettext_with_context",i,e,t,r,o,a),n.applyFilters("i18n.ngettext_with_context_"+s(a),i,e,t,r,o,a)):i},isRTL:()=>"rtl"===_x("ltr","text direction"),hasTranslation:(e,t,o)=>{const a=t?t+""+e:e;let i=!!r.data?.[null!=o?o:"default"]?.[a];return n&&(i=n.applyFilters("i18n.has_translation",i,e,t,o),i=n.applyFilters("i18n.has_translation_"+s(o),i,e,t,o)),i}}})(0,0,T),__=(Gi.getLocaleData.bind(Gi),Gi.setLocaleData.bind(Gi),Gi.resetLocaleData.bind(Gi),Gi.subscribe.bind(Gi),Gi.__.bind(Gi)),Zi=(Gi._x.bind(Gi),Gi._n.bind(Gi),Gi._nx.bind(Gi),Gi.isRTL.bind(Gi),Gi.hasTranslation.bind(Gi),(0,e.createElement)(Lo,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},(0,e.createElement)((t=>(0,e.createElement)("path",t)),{d:"M19.5 4.5h-7V6h4.44l-5.97 5.97 1.06 1.06L18 7.06v4.44h1.5v-7Zm-13 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-3H17v3a.5.5 0 0 1-.5.5h-10a.5.5 0 0 1-.5-.5v-10a.5.5 0 0 1 .5-.5h3V5.5h-3Z"}))),Ji=Li((0,e.forwardRef)((function({icon:t,size:n=24,...r},o){return(0,e.cloneElement)(t,{width:n,height:n,...r,ref:o})})),{target:"esh4a730"})({name:"rvs7bx",styles:"width:1em;height:1em;margin:0;vertical-align:middle;fill:currentColor"}),el=(0,e.forwardRef)((function(t,n){const{href:r,children:o,className:a,rel:i="",...l}=t,u=[...new Set([...i.split(" "),"external","noreferrer","noopener"].filter(Boolean))].join(" "),s=y()("components-external-link",a),c=!!r?.startsWith("#");return(0,e.createElement)("a",{...l,className:s,href:r,onClick:e=>{c&&e.preventDefault(),t.onClick&&t.onClick(e)},target:"_blank",rel:u,ref:n},o,(0,e.createElement)(zi,{as:"span"},/* translators: accessibility text */
__("(opens in a new tab)")),(0,e.createElement)(Ji,{icon:Zi,className:"components-external-link__icon"}))})),tl=window.wp.apiFetch;var nl=o.n(tl);function rl({children:t,className:n="",direction:r="left",ElementName:o="div",selected:a=!1,...i}){return(0,e.createElement)(o,{className:y()(n,"selectable",{"selectable--selected":a},`selectable--${r}`),...i},t)}const ol="error",al="warning",il="info",ll="success",ul="small",sl="large";function cl({children:t,className:n,size:r=sl,type:o=il,...a}){const i=function(t){let n;switch(t){case ll:n=()=>(0,e.createElement)("svg",{width:"35",height:"36",viewBox:"0 0 35 36",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,e.createElement)("rect",{x:"1.90112",y:"1.98828",width:"32.0691",height:"32.0691",rx:"16.0345",stroke:"#00A02F",strokeWidth:"2"}),(0,e.createElement)("mask",{id:"mask-notice-success",style:{maskType:"alpha"},maskUnits:"userSpaceOnUse",x:"10",y:"12",width:"16",height:"12"},(0,e.createElement)("path",{d:"M15.0921 21.461L11.3924 17.7613L10.1326 19.0122L15.0921 23.9718L25.7387 13.3252L24.4877 12.0742L15.0921 21.461Z",fill:"white"})),(0,e.createElement)("g",{mask:"url(#mask-notice-success)"},(0,e.createElement)("rect",{x:"7.28906",y:"7.375",width:"21.2932",height:"21.2932",fill:"#00A02F"})));break;case ol:n=()=>(0,e.createElement)("svg",{width:"44",height:"44",viewBox:"0 0 44 44",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,e.createElement)("path",{d:"M8.18125 16.1001L16.4324 7.84902L28.1012 7.84902L36.3523 16.1001L36.3523 27.769L28.1012 36.0201L16.4324 36.0201L8.18125 27.769L8.18125 16.1001Z",stroke:"#EF0000",strokeWidth:"2"}),(0,e.createElement)("path",{d:"M24.2671 27.4609C24.2671 28.5654 23.3716 29.4609 22.2671 29.4609C21.1626 29.4609 20.2671 28.5654 20.2671 27.4609C20.2671 26.3564 21.1626 25.4609 22.2671 25.4609C23.3716 25.4609 24.2671 26.3564 24.2671 27.4609Z",fill:"#EF0000"}),(0,e.createElement)("line",{x1:"22.2891",y1:"14.0586",x2:"22.2891",y2:"23.5659",stroke:"#EF0000",strokeWidth:"2"}));break;default:n=()=>(0,e.createElement)("svg",{width:"35",height:"35",viewBox:"0 0 35 35",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,e.createElement)("rect",{x:"1.66626",y:"1.76172",width:"31.4597",height:"31.4597",rx:"15.7299",stroke:"currentColor",strokeWidth:"2"}),(0,e.createElement)("path",{d:"M15.3048 11.3424C15.3048 10.1875 16.2412 9.25113 17.3961 9.25113C18.5509 9.25113 19.4873 10.1875 19.4873 11.3424C19.4873 12.4972 18.5509 13.4336 17.3961 13.4336C16.2412 13.4336 15.3048 12.4972 15.3048 11.3424Z",fill:"currentColor"}),(0,e.createElement)("line",{x1:"17.4184",y1:"25.3594",x2:"17.4184",y2:"15.4184",stroke:"currentColor",strokeWidth:"2"}))}return(0,e.createElement)(n,null)}(o);return(0,e.createElement)("div",{className:y()(n,"amp-notice",`amp-notice--${o}`,`amp-notice--${r}`),...a},(0,e.createElement)("div",{className:"amp-notice__icon"},i),(0,e.createElement)("div",{className:"amp-notice__body"},t))}var fl=o(2152),dl=o.n(fl);function pl(t){const n=(0,e.useRef)(t);return n.current=t,n}function ml(t,n){const r=pl(t),o=pl(n);return function(t,n){const a=(0,e.useRef)();return(0,e.useCallback)((e=>{e?a.current=(e=>{const t=new(dl())(e,{text:()=>"function"==typeof r.current?r.current():r.current||""});return t.on("success",(({clearSelection:t})=>{t(),e.focus(),o.current&&o.current()})),()=>{t.destroy()}})(e):a.current&&a.current()}),[])}()}const hl=4e3;function vl({children:t,onCopy:n,onFinishCopy:r,text:o,...a}){const i=(0,e.useRef)(),l=ml(o,(()=>{n&&n(),clearTimeout(i.current),r&&(i.current=setTimeout((()=>r()),hl))}));return(0,e.useEffect)((()=>{clearTimeout(i.current)}),[]),(0,e.createElement)(Di,{...a,className:"components-clipboard-button",ref:l,onCopy:e=>{e.target.focus()}},t)}function gl({open:t=!1,title:n,description:r}){return n&&r&&(0,e.createElement)("details",{open:t},(0,e.createElement)("summary",null,n),(0,e.createElement)("div",{className:"detail-body"},(0,e.createElement)("p",{className:"detail-body-text"},r)))}function yl({className:t="",isDisc:n=!1,heading:r,items:o}){return(0,e.createElement)("ul",{className:y()("list-items",t,{"list-items--list-style-disc":n})},r&&(0,e.createElement)("li",{className:"list-items__item"},(0,e.createElement)("h4",{className:"list-items__heading"},r)),o.map(((t,n)=>(0,e.createElement)("li",{key:n,className:"list-items__item"},t.label&&(0,e.createElement)("strong",{className:"list-items__item-key"},t.label),t.value||t.url?(0,e.createElement)("span",{className:"list-items__item-value"},t.value,t.url&&(0,e.createElement)("a",{href:t.url,title:t.url,target:"_blank",rel:"noreferrer noopener"},t.url)):"-"))))}function bl({plugins:t}){if(!Array.isArray(t))return null;const n=t.map((e=>({value:`${e.name} ${e.version?"("+e.version+")":""}`})));return(0,e.createElement)("details",{open:!1},(0,e.createElement)("summary",null,Ui(/* translators: Placeholder is the number of plugins */
__("Plugins (%s)","amp"),t.length)),(0,e.createElement)("div",{className:"detail-body"},(0,e.createElement)(yl,{isDisc:!0,items:n})))}function wl({data:t}){return(0,e.createElement)("details",{open:!1},(0,e.createElement)("summary",null,__("Raw Data","amp")),(0,e.createElement)("pre",{className:"amp-support__raw-data detail-body"},JSON.stringify(t,null,4)))}function xl({siteInfo:t}){return"object"!=typeof t?null:(0,e.createElement)("details",{open:!1},(0,e.createElement)("summary",null,__("Site Information","amp")),(0,e.createElement)("div",{className:"detail-body"},(0,e.createElement)(yl,{heading:__("Site Information","amp"),items:[{label:__("Site URL","amp"),value:t?.site_url},{label:__("Site title","amp"),value:t?.site_title},{label:__("PHP version","amp"),value:t?.php_version},{label:__("MySQL version","amp"),value:t?.mysql_version},{label:__("WordPress version","amp"),value:t?.wp_version},{label:__("WordPress language","amp"),value:t?.wp_language}]}),(0,e.createElement)(yl,{heading:__("Site Health","amp"),items:[{label:__("Https status","amp"),value:t?.wp_https_status?"Yes":"No"},{label:__("Object cache status","amp"),value:t?.object_cache_status?"Yes":"No"},{label:__("Libxml version","amp"),value:t?.libxml_version},{label:__("Is defined curl multi","amp"),value:t?.is_defined_curl_multi?"Yes":"No"}]}),(0,e.createElement)(yl,{heading:__("AMP Information","amp"),items:[{label:__("AMP mode","amp"),value:t?.amp_mode},{label:__("AMP version","amp"),value:t?.amp_version},{label:__("AMP plugin configured","amp"),value:t?.amp_plugin_configured?"Yes":"No"},{label:__("AMP all templates supported","amp"),value:t?.amp_all_templates_supported?"Yes":"No"},{label:__("AMP supported post types","amp"),value:t?.amp_supported_post_types?t.amp_supported_post_types.join(", "):""},{label:__("AMP supported templates","amp"),value:t?.amp_supported_templates?t.amp_supported_templates.join(", "):""},{label:__("AMP mobile redirect","amp"),value:t?.amp_mobile_redirect?"Yes":"No"},{label:__("AMP reader theme","amp"),value:t?.amp_reader_theme}]})))}function kl({themes:t}){if(!Array.isArray(t))return null;const n=t.map((e=>({value:`${e.name} ${e.version?"("+e.version+")":""}`})));return(0,e.createElement)("details",{open:!1},(0,e.createElement)("summary",null,__("Themes","amp")),(0,e.createElement)("div",{className:"detail-body"},(0,e.createElement)(yl,{isDisc:!0,items:n})))}function Sl({validatedUrls:t}){if(!Array.isArray(t))return null;const n=t.map((e=>{var t;return{url:null!==(t=e.url)&&void 0!==t?t:null}}));return(0,e.createElement)("details",{open:!1},(0,e.createElement)("summary",null,Ui(/* translators: Placeholder is the number of validated URLs. */
__("Validated URLs (%d)","amp"),t.length)),(0,e.createElement)("div",{className:"detail-body"},(0,e.createElement)(yl,{isDisc:!0,items:n})))}function El({data:t,args:n,ampValidatedPostCount:r}){const o=0<n?.urls?.length,a=0<t.errors?.length||0<t.urls?.length,i=0<r.all&&r.all===r.stale,l=0<r.fresh&&0<r.stale,u=0<r.all&&r.all===r.fresh;return o||0!==r.all?!o&&i?(0,e.createElement)(cl,{type:al,size:ul},__("The validation data is stale. Go to the AMP Settings page and rescan you site before sending a support request.","amp")):o||a||!l?o||a||!u?o&&!a?(0,e.createElement)(cl,{type:ll,size:ul},__("The requested URL does not have any AMP validation errors.","amp")):null:(0,e.createElement)(cl,{type:il,size:ul},__("We found no issues on your site. Browse your site to ensure everything is working as expected.","amp")):(0,e.createElement)(cl,{type:al,size:ul},__("We found no issues on your site but there are some stale validation results. Browse your site to ensure everything is working as expected.","amp")):(0,e.createElement)(cl,{type:al,size:ul},__("The site has no validation data. Go to the AMP Settings page and scan you site before sending a support request.","amp"))}function _l(t){const{data:n,restEndpoint:r,args:o,ampValidatedPostCount:a}=t,[i,l]=(0,e.useState)(!1),[u,s]=(0,e.useState)(null),[c,f]=(0,e.useState)(null),[d,p]=(0,e.useState)(!1),[m,h]=(0,e.useState)(!1);return(0,e.useEffect)((()=>{(async()=>{if(m&&!u&&!i){l(!0),s(null),f(null);try{const e=await nl()({url:r,method:"POST",data:{args:o}});if(void 0===e.success||void 0===e?.data?.uuid)throw new Error(__("Failed to send support request. Please try again later.","amp"));s(e.data.uuid)}catch(e){h(!1),f(e.message)}finally{l(!1)}}})()}),[m,u,i,r,o]),(0,e.createElement)("div",{className:"amp-support"},(0,e.createElement)(rl,null,(0,e.createElement)("h2",{className:"amp-support__heading"},__("AMP Support","amp")),(0,e.createElement)("p",null,v(__("In order to best assist you, please tap the Send Data button below to send the following site information to our private database. Once you have done so, copy the the resulting Support UUID in the blue box that appears and include the ID in a new <a>support forum topic</a>. You do not have to submit data to get support, but our team will be able to help you more effectively if you do so.","amp"),{a:(0,e.createElement)("a",{href:"https://wordpress.org/support/plugin/amp/#new-topic-0",rel:"noreferrer",target:"_blank"})})),(0,e.createElement)(El,{data:n,args:o,ampValidatedPostCount:a}),(0,e.createElement)("div",{className:"amp-support__body"},n.site_info&&(0,e.createElement)(xl,{siteInfo:n.site_info}),n.themes&&(0,e.createElement)(kl,{themes:n.themes}),n.plugins&&(0,e.createElement)(bl,{plugins:n.plugins}),n?.errors?.length>0&&(0,e.createElement)(gl,{title:Ui(/* translators: Placeholder is the number of errors */
__("Errors (%d)","amp"),n.errors.length),description:__('Please check "Raw Data" for all error information.',"amp")}),n?.error_sources?.length>0&&(0,e.createElement)(gl,{title:Ui(/* translators: Placeholder is the number of error sources */
__("Error Sources (%d)","amp"),n.error_sources.length),description:__('Please check "Raw Data" for all error source information.',"amp")}),n?.urls?.length>0&&(0,e.createElement)(Sl,{validatedUrls:n.urls}),n&&(0,e.createElement)(wl,{data:n})),(0,e.createElement)("div",{className:"amp-support__footer"},(0,e.createElement)(Di,{disabled:Boolean(u)||i,className:"components-button--send-button",isPrimary:!0,onClick:()=>{h(!0)}},u&&__("Sent","amp"),i&&__("Sending…","amp"),!u&&!i&&__("Send data","amp")),u&&(0,e.createElement)(el,{href:"https://wordpress.org/support/plugin/amp/#new-topic-0"},__("Create support topic","amp")),c&&(0,e.createElement)(cl,{type:ol,size:ul},c)),u&&(0,e.createElement)(cl,{type:il,size:ul,className:"amp-notice--uuid"},__("Support UUID: ","amp"),(0,e.createElement)("code",null,u),(0,e.createElement)(vl,{isSmall:!0,text:u,onCopy:()=>p(!0),onFinishCopy:()=>p(!1)},__(d?"Copied!":"Copy UUID","amp")))))}const Cl=function({label:t,children:n}){return(0,e.createElement)("div",{className:"components-panel__header"},t&&(0,e.createElement)("h2",null,t),n)},Pl=(0,e.forwardRef)((function({header:t,className:n,children:r},o){const a=y()(n,"components-panel");return(0,e.createElement)("div",{className:a,ref:o},t&&(0,e.createElement)(Cl,{label:t}),r)}));function Ol({error:t,finishLinkLabel:n,finishLinkUrl:r,title:o}){const[a,i]=(0,e.useState)(!1),{message:l,stack:u}=t;return(0,e.createElement)("div",{className:"error-screen-container"},(0,e.createElement)(Pl,{className:"error-screen"},(0,e.createElement)("h1",null,o||__("Something went wrong.","amp")),(0,e.createElement)("p",{dangerouslySetInnerHTML:{__html:l||__("There was an error loading the page.","amp")}}),(0,e.createElement)("p",null,v(__("Please submit details to our <a>support forum</a>.","amp"),{a:(0,e.createElement)("a",{href:"https://wordpress.org/support/plugin/amp/",target:"_blank",rel:"noreferrer noopener"})})),u&&(0,e.createElement)("details",null,(0,e.createElement)("summary",null,__("Details","amp")),(0,e.createElement)("pre",null,u),(0,e.createElement)(vl,{isSmall:!0,isSecondary:!0,text:JSON.stringify({message:l,stack:u},null,2),onCopy:()=>i(!0),onFinishCopy:()=>i(!1)},__(a?"Copied!":"Copy Error","amp"))),r&&n&&(0,e.createElement)("p",null,(0,e.createElement)("a",{href:r},n))))}class Tl extends e.Component{constructor(e){super(e),this.timeout=null,this.state={error:null}}componentDidMount(){this.mounted=!0}componentWillUnmount(){this.mounted=!1}componentDidCatch(e){this.setState({error:e})}render(){const{error:t}=this.state,{children:n,exitLinkLabel:r,exitLinkUrl:o,title:a}=this.props;return t?(0,e.createElement)(Ol,{error:t,finishLinkLabel:r,finishLinkUrl:o,title:a}):n}}var Nl;Nl=()=>{const t=document.getElementById("amp-support-root");o.g.addEventListener("error",(n=>{n.filename&&/amp-support(\.min)?\.js/.test(n.filename)&&(0,r.s)(t).render((0,e.createElement)(Ol,{error:n.error}))})),t&&(0,r.s)(t).render((0,e.createElement)(i,null,(0,e.createElement)(Tl,null,(0,e.createElement)(_l,{restEndpoint:n.restEndpoint,args:n.args,data:n.data,ampValidatedPostCount:n.ampValidatedPostCount}))))},"undefined"!=typeof document&&("complete"!==document.readyState&&"interactive"!==document.readyState?document.addEventListener("DOMContentLoaded",Nl):Nl())})()})();PK.3Y���Jmm0bunyad-amp/assets/js/amp-theme-install.asset.php<?php return array('dependencies' => array('wp-dom-ready', 'wp-i18n'), 'version' => '629802708e724a127a74');
PK.3Y(V�|�	�	)bunyad-amp/assets/js/amp-theme-install.js(()=>{"use strict";var e={n:t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return e.d(n,{a:n}),n},d:(t,n)=>{for(var i in n)e.o(n,i)&&!e.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:n[i]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const t=ampThemes,n=window.wp.i18n,i=window.wp.domReady;var s=e.n(i);const a=wp.themes.view.Theme,r=a.extend({isAmpCompatibleTab:()=>new URLSearchParams(window.location.search.substr(1)).get("browse")===t.AMP_COMPATIBLE,render(...e){if(a.prototype.render.apply(this,e),0>=this.$el?.length||!this.$el[0])return;const t=this.$el[0],i=this.model.toJSON();let s=i?.slug;if(s||(s=i?.id),s&&this.isAmpTheme(s)&&setTimeout((()=>{if(this.isAmpCompatibleTab())return;const e=document.createElement("div"),i=document.createElement("span"),s=document.createElement("span");e.classList.add("amp-extension-card-message"),i.classList.add("amp-logo-icon"),s.classList.add("tooltiptext"),s.append((0,n.__)("This is known to work well with the AMP plugin.","amp")),e.append(i,s),t.appendChild(e)})),s&&!this.isWPORGTheme(s)){const e=document.createElement("span");e.classList.add("dashicons","dashicons-external"),e.setAttribute("aria-hidden","true");const s=document.createElement("span");s.classList.add("screen-reader-text"),s.append((0,n.__)("(opens in a new tab)","amp"));const a=document.createElement("a");a.classList.add("button","button-primary"),a.append((0,n.__)("Visit Site","amp"),s,e),a.href=i?.preview_url?i.preview_url:i.homepage,a.target="_blank",a.rel="noopener noreferrer",a.setAttribute("aria-label",(0,n.sprintf)(/* translators: %s: theme name. */
(0,n.__)("Visit site of %s theme","amp"),i.name));const r=t.querySelector(".theme-actions");r&&(r.textContent="",r.append(a));const o=t.querySelector(".more-details");o&&(o.textContent="",o.append((0,n.__)("Visit Site","amp"),e.cloneNode(!0)))}},preview(...e){const t=this.model.toJSON();this.isWPORGTheme(t.slug)?a.prototype.preview.apply(this,e):t?.preview_url&&window.open(t.preview_url,"_blank","noopener,noreferrer")},isAmpTheme:e=>t.AMP_THEMES.includes(e),isWPORGTheme:e=>!t.NONE_WPORG_THEMES.includes(e)}),o={init(){this.addTab(),this.overrideViews()},addTab(){const e=document.querySelector(".filter-links");if(!e)return;const i=document.createElement("li"),s=document.createElement("a");s.setAttribute("href","#"),s.setAttribute("data-sort",t.AMP_COMPATIBLE),s.append((0,n.__)("AMP Compatible","amp")),i.appendChild(s),e.appendChild(i)},overrideViews(){wp.themes.view.Theme=r}};s()((()=>{o.init()}))})();PK.3Y�P0mmAbunyad-amp/assets/js/amp-validated-url-post-edit-screen.asset.php<?php return array('dependencies' => array('wp-dom-ready', 'wp-i18n'), 'version' => '54830ec97686b01a8ce8');
PK.3Y��\7�=�=:bunyad-amp/assets/js/amp-validated-url-post-edit-screen.js(()=>{var e={152:function(e){var t;t=function(){return function(){var e={686:function(e,t,n){"use strict";n.d(t,{default:function(){return E}});var r=n(279),o=n.n(r),c=n(370),i=n.n(c),a=n(817),u=n.n(a);function l(e){try{return document.execCommand(e)}catch(e){return!1}}var s=function(e){var t=u()(e);return l("cut"),t},d=function(e,t){var n=function(e){var t="rtl"===document.documentElement.getAttribute("dir"),n=document.createElement("textarea");n.style.fontSize="12pt",n.style.border="0",n.style.padding="0",n.style.margin="0",n.style.position="absolute",n.style[t?"right":"left"]="-9999px";var r=window.pageYOffset||document.documentElement.scrollTop;return n.style.top="".concat(r,"px"),n.setAttribute("readonly",""),n.value=e,n}(e);t.container.appendChild(n);var r=u()(n);return l("copy"),n.remove(),r},f=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{container:document.body},n="";return"string"==typeof e?n=d(e,t):e instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(null==e?void 0:e.type)?n=d(e.value,t):(n=u()(e),l("copy")),n};function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}function y(e){return y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},y(e)}function m(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function h(e,t){return h=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},h(e,t)}function v(e){return v=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},v(e)}function g(e,t){var n="data-clipboard-".concat(e);if(t.hasAttribute(n))return t.getAttribute(n)}var b=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&h(e,t)}(u,e);var t,n,r,o,c,a=(o=u,c=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,t,n=v(o);if(c){var r=v(this).constructor;e=Reflect.construct(n,arguments,r)}else e=n.apply(this,arguments);return!(t=e)||"object"!==y(t)&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(this):t});function u(e,t){var n;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,u),(n=a.call(this)).resolveOptions(t),n.listenClick(e),n}return t=u,n=[{key:"resolveOptions",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof e.action?e.action:this.defaultAction,this.target="function"==typeof e.target?e.target:this.defaultTarget,this.text="function"==typeof e.text?e.text:this.defaultText,this.container="object"===y(e.container)?e.container:document.body}},{key:"listenClick",value:function(e){var t=this;this.listener=i()(e,"click",(function(e){return t.onClick(e)}))}},{key:"onClick",value:function(e){var t=e.delegateTarget||e.currentTarget,n=this.action(t)||"copy",r=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.action,n=void 0===t?"copy":t,r=e.container,o=e.target,c=e.text;if("copy"!==n&&"cut"!==n)throw new Error('Invalid "action" value, use either "copy" or "cut"');if(void 0!==o){if(!o||"object"!==p(o)||1!==o.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===n&&o.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===n&&(o.hasAttribute("readonly")||o.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes')}return c?f(c,{container:r}):o?"cut"===n?s(o):f(o,{container:r}):void 0}({action:n,container:this.container,target:this.target(t),text:this.text(t)});this.emit(r?"success":"error",{action:n,text:r,trigger:t,clearSelection:function(){t&&t.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(e){return g("action",e)}},{key:"defaultTarget",value:function(e){var t=g("target",e);if(t)return document.querySelector(t)}},{key:"defaultText",value:function(e){return g("text",e)}},{key:"destroy",value:function(){this.listener.destroy()}}],r=[{key:"copy",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{container:document.body};return f(e,t)}},{key:"cut",value:function(e){return s(e)}},{key:"isSupported",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],t="string"==typeof e?[e]:e,n=!!document.queryCommandSupported;return t.forEach((function(e){n=n&&!!document.queryCommandSupported(e)})),n}}],n&&m(t.prototype,n),r&&m(t,r),u}(o()),E=b},828:function(e){if("undefined"!=typeof Element&&!Element.prototype.matches){var t=Element.prototype;t.matches=t.matchesSelector||t.mozMatchesSelector||t.msMatchesSelector||t.oMatchesSelector||t.webkitMatchesSelector}e.exports=function(e,t){for(;e&&9!==e.nodeType;){if("function"==typeof e.matches&&e.matches(t))return e;e=e.parentNode}}},438:function(e,t,n){var r=n(828);function o(e,t,n,r,o){var i=c.apply(this,arguments);return e.addEventListener(n,i,o),{destroy:function(){e.removeEventListener(n,i,o)}}}function c(e,t,n,o){return function(n){n.delegateTarget=r(n.target,t),n.delegateTarget&&o.call(e,n)}}e.exports=function(e,t,n,r,c){return"function"==typeof e.addEventListener?o.apply(null,arguments):"function"==typeof n?o.bind(null,document).apply(null,arguments):("string"==typeof e&&(e=document.querySelectorAll(e)),Array.prototype.map.call(e,(function(e){return o(e,t,n,r,c)})))}},879:function(e,t){t.node=function(e){return void 0!==e&&e instanceof HTMLElement&&1===e.nodeType},t.nodeList=function(e){var n=Object.prototype.toString.call(e);return void 0!==e&&("[object NodeList]"===n||"[object HTMLCollection]"===n)&&"length"in e&&(0===e.length||t.node(e[0]))},t.string=function(e){return"string"==typeof e||e instanceof String},t.fn=function(e){return"[object Function]"===Object.prototype.toString.call(e)}},370:function(e,t,n){var r=n(879),o=n(438);e.exports=function(e,t,n){if(!e&&!t&&!n)throw new Error("Missing required arguments");if(!r.string(t))throw new TypeError("Second argument must be a String");if(!r.fn(n))throw new TypeError("Third argument must be a Function");if(r.node(e))return function(e,t,n){return e.addEventListener(t,n),{destroy:function(){e.removeEventListener(t,n)}}}(e,t,n);if(r.nodeList(e))return function(e,t,n){return Array.prototype.forEach.call(e,(function(e){e.addEventListener(t,n)})),{destroy:function(){Array.prototype.forEach.call(e,(function(e){e.removeEventListener(t,n)}))}}}(e,t,n);if(r.string(e))return function(e,t,n){return o(document.body,e,t,n)}(e,t,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}},817:function(e){e.exports=function(e){var t;if("SELECT"===e.nodeName)e.focus(),t=e.value;else if("INPUT"===e.nodeName||"TEXTAREA"===e.nodeName){var n=e.hasAttribute("readonly");n||e.setAttribute("readonly",""),e.select(),e.setSelectionRange(0,e.value.length),n||e.removeAttribute("readonly"),t=e.value}else{e.hasAttribute("contenteditable")&&e.focus();var r=window.getSelection(),o=document.createRange();o.selectNodeContents(e),r.removeAllRanges(),r.addRange(o),t=r.toString()}return t}},279:function(e){function t(){}t.prototype={on:function(e,t,n){var r=this.e||(this.e={});return(r[e]||(r[e]=[])).push({fn:t,ctx:n}),this},once:function(e,t,n){var r=this;function o(){r.off(e,o),t.apply(n,arguments)}return o._=t,this.on(e,o,n)},emit:function(e){for(var t=[].slice.call(arguments,1),n=((this.e||(this.e={}))[e]||[]).slice(),r=0,o=n.length;r<o;r++)n[r].fn.apply(n[r].ctx,t);return this},off:function(e,t){var n=this.e||(this.e={}),r=n[e],o=[];if(r&&t)for(var c=0,i=r.length;c<i;c++)r[c].fn!==t&&r[c].fn._!==t&&o.push(r[c]);return o.length?n[e]=o:delete n[e],this}},e.exports=t,e.exports.TinyEmitter=t}},t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={exports:{}};return e[r](o,o.exports,n),o.exports}return n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n(686)}().default},e.exports=t()}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var c=t[r]={exports:{}};return e[r].call(c.exports,c,c.exports,n),c.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{"use strict";const e=window.wp.domReady;var t=n.n(e);const r=window.wp.i18n;var o=n(152),c=n.n(o);function i(e={}){const t=[...document.querySelectorAll("select.amp-validation-error-status")].map((e=>e.closest("tr")));return!0!==e.checkedOnly?t:t.filter((e=>e.querySelector(".check-column input[type=checkbox]").checked))}function a({trigger:e}){e.focus();const t=(0,r.__)("Copied to clipboard","amp");if(e.innerText===t)return;const n=e.innerText;e.innerText=t,setTimeout((()=>{document.body.contains(e)&&(e.innerText=n)}),4e3)}const u="number-errors",l="show-all-errors";t()((()=>{h(),v(),g(),b(),E(),f(),S(),function(){const e=[];e.push(new(c())("button.single-url-detail-copy",{text:e=>JSON.stringify(JSON.parse(e.getAttribute("data-error-json")),null,"\t")})),e.push(new(c())("button.copy-all",{text:()=>{const e=i({checkedOnly:!0}).map((e=>{const t=e.querySelector(".single-url-detail-copy");return t?JSON.parse(t.getAttribute("data-error-json")):null})).filter((e=>e));return JSON.stringify(e,null,"\t")}})),e.forEach((e=>{e.on("success",a)}))}()}));let s=!1;const d=()=>{s||(n.g.addEventListener("beforeunload",p),document.querySelector("#major-publishing-actions").addEventListener("click",(()=>{n.g.removeEventListener("beforeunload",p)})),s=!0)},f=()=>{const e=t=>{(t.target.matches(".amp-validation-error-status")||t.target.matches(".amp-validation-error-status-review"))&&(document.getElementById("post").removeEventListener("change",e),d())};document.getElementById("post").addEventListener("change",e)},p=e=>(e.preventDefault(),e.returnValue=(0,r.__)("You have unsaved changes. Are you sure you want to leave?","amp"),(0,r.__)("You have unsaved changes. Are you sure you want to leave?","amp")),y=(e,t)=>{const n=document.getElementById(l);let o,c,i=document.getElementById(u);const a=document.getElementsByTagName("thead");a[0]&&!i&&(o=a[0],i=document.createElement("tr"),c=document.createElement("th"),c.setAttribute("id",u),c.setAttribute("colspan","6"),i.appendChild(c),o.appendChild(i)),e===t?(n&&n.classList.add("hidden"),i.classList.add("hidden")):null!==e&&(document.getElementById(u).innerText=(0,r.sprintf)(/* translators: 1: number of errors being displayed. 2: total number of errors found. */
(0,r._n)("Showing %1$s of %2$s validation error","Showing %1$s of %2$s validation errors",t,"amp"),e,t),document.getElementById(u).classList.remove("hidden"),m(),document.getElementById(l)&&document.getElementById(l).classList.remove("hidden"))},m=()=>{const e=document.getElementById("url-post-filter");let t=document.getElementById(l);!t&&e&&(t=document.createElement("button"),t.id=l,t.classList.add("button"),t.innerText=(0,r.__)("Show all","amp"),e.appendChild(t))},h=()=>{document.getElementById("url-post-filter").addEventListener("click",(e=>{if(!e.target.matches("#"+l))return;e.preventDefault();const t=document.querySelectorAll("[data-error-type]");t.forEach((e=>{e.parentElement.parentElement.classList.remove("hidden")})),y(t.length,t.length),e.target.classList.add("hidden"),document.getElementById("amp_validation_error_type").selectedIndex=0}))},v=()=>{document.getElementById("amp_validation_error_type").addEventListener("change",(e=>{if(!e.target.matches("select"))return;e.preventDefault();const t=document.getElementById(l),n="-1"===e.target.value,r=document.querySelectorAll("[data-error-type]");n&&t&&t.classList.add("hidden");let o=0;r.forEach((t=>{const r=t.getAttribute("data-error-type");n||!e.target.value||e.target.value===r?(t.parentElement.parentElement.classList.remove("hidden"),o++):t.parentElement.parentElement.classList.add("hidden")})),y(o,r.length)}))},g=()=>{const e=document.getElementById("search-submit");e&&e.addEventListener("click",(e=>{if(e.preventDefault(),!e.target.matches("input"))return;const t=document.getElementById("invalid-url-search-search-input").value,n=document.querySelectorAll("tbody .column-details");let r=0;n.forEach((e=>{let n=!1;e.querySelectorAll(".detailed").forEach((e=>{-1!==e.innerText.indexOf(t)&&(n=!0)})),n?(e.parentElement.classList.remove("hidden"),r++):e.parentElement.classList.add("hidden")})),y(r,n.length)}))},b=()=>{document.querySelectorAll('tr[id^="tag-"]').forEach((e=>{const t=e.querySelector(".amp-validation-error-status"),n=e.querySelector(".amp-validation-error-status-review");t&&t.addEventListener("change",(()=>e.classList.toggle("kept"))),n&&n.addEventListener("change",(()=>e.classList.toggle("new")))}))},E=()=>{const e=document.querySelector("button.action.remove"),t=document.querySelector("button.action.keep"),r=document.getElementById("remove-keep-buttons"),o=e=>{let t;e.target.matches("[type=checkbox]")&&(e.target.checked?r.classList.remove("hidden"):(t=!1,document.querySelectorAll(".check-column [type=checkbox]").forEach((e=>{e.checked&&(t=!0)})),t||r.classList.add("hidden")))};document.querySelectorAll(".check-column [type=checkbox]").forEach((e=>{e.addEventListener("change",o)})),e.addEventListener("click",(()=>{Array.prototype.forEach.call(document.querySelectorAll("select.amp-validation-error-status"),(e=>{const t=e.closest("tr");t.querySelector(".check-column input[type=checkbox]").checked&&(e.value="3",t.classList.remove("kept"),d())}))})),t.addEventListener("click",(()=>{Array.prototype.forEach.call(document.querySelectorAll("select.amp-validation-error-status"),(e=>{const t=e.closest("tr");t.querySelector(".check-column input[type=checkbox]").checked&&(e.value="2",t.classList.add("kept"),d())}))})),n.g.addEventListener("click",(({target:e})=>{if(!e.classList.contains("reviewed-toggle"))return;const t=e.classList.contains("reviewed");i({checkedOnly:!0}).forEach((e=>{e.querySelector("input[type=checkbox].amp-validation-error-status-review").checked=t,e.classList.toggle("new",!t),d()}))}))},S=()=>{const e=document.getElementById("amp_stylesheets");for(const t of e.querySelectorAll(".toggle-stylesheet-details")){const e=t.closest("tr");t.addEventListener("click",(()=>{e.classList.toggle("expanded")}))}for(const t of e.querySelectorAll(".stylesheet-details")){const e=t.querySelector(".shaken-stylesheet"),n=t.querySelector(".show-removed-styles");n&&n.addEventListener("click",(()=>{e.classList.toggle("removed-styles-shown",n.checked)}))}}})()})();PK.3Y�P�q}}4bunyad-amp/assets/js/amp-validation-counts.asset.php<?php return array('dependencies' => array('wp-api-fetch', 'wp-dom-ready', 'wp-i18n'), 'version' => '6f0063a681dc58f3ca5d');
PK.3YP��$��-bunyad-amp/assets/js/amp-validation-counts.js(()=>{"use strict";var e={n:n=>{var t=n&&n.__esModule?()=>n.default:()=>n;return e.d(t,{a:t}),t},d:(n,t)=>{for(var o in t)e.o(t,o)&&!e.o(n,o)&&Object.defineProperty(n,o,{enumerable:!0,get:t[o]})},o:(e,n)=>Object.prototype.hasOwnProperty.call(e,n)};const n=window.wp.i18n,t=window.wp.apiFetch;var o=e.n(t);const r=window.wp.domReady;function s(e){return`${e}-last-count`}function a(e){const n=document.getElementById(e);if(!n||n.querySelector(".amp-count-loading"))return;const t=sessionStorage.getItem(s(e));if(!t||"0"!==t){const e=document.createElement("span");e.classList.add("amp-count-loading"),n.append(e),n.classList.add("awaiting-mod")}}function i(e,n){const t=document.getElementById(e);if(t)if(isNaN(n)||0===n)t.parentNode.removeChild(t),sessionStorage.setItem(s(e),"0");else{const o=n.toLocaleString();t.textContent=o,t.classList.add("awaiting-mod"),sessionStorage.setItem(s(e),o)}}function c(e){const{validated_urls:n,errors:t}=e;i("amp-new-error-index-count",t),i("amp-new-validation-url-count",n)}function d(){o()({path:"/amp/v1/unreviewed-validation-counts"}).then((e=>{c(e)})).catch((e=>{c({validated_urls:0,errors:0});const t=e?.message||(0,n.__)("An unknown error occurred while retrieving the validation counts","amp");console.error(`[AMP Plugin] ${t}`)}))}e.n(r)()((()=>{const e=document.getElementById("toplevel_page_amp-options");e&&(a("amp-new-error-index-count"),a("amp-new-validation-url-count"),e.classList.contains("wp-menu-open")?d():function(e){if(!("IntersectionObserver"in window))return void c({validated_urls:0,errors:0});const n=e.querySelector("ul"),t=new IntersectionObserver((([e])=>{e&&e.isIntersecting&&(t.unobserve(n),d())}),{root:e});t.observe(n)}(e))}))})();PK.3Y�x;mm;bunyad-amp/assets/js/amp-validation-detail-toggle.asset.php<?php return array('dependencies' => array('wp-dom-ready', 'wp-i18n'), 'version' => '56d829934c186fc35767');
PK.3Yq�t��4bunyad-amp/assets/js/amp-validation-detail-toggle.js(()=>{"use strict";var t={n:e=>{var o=e&&e.__esModule?()=>e.default:()=>e;return t.d(o,{a:o}),o},d:(e,o)=>{for(var l in o)t.o(o,l)&&!t.o(e,l)&&Object.defineProperty(e,l,{enumerable:!0,get:o[l]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e)};const e=window.wp.domReady;var o=t.n(e);const l=window.wp.i18n;function r(t,e){return[...document.querySelectorAll(t)].map((t=>(t=>{const o=document.createElement("button");return o.setAttribute("aria-label",e),o.setAttribute("type","button"),o.setAttribute("class","error-details-toggle"),t.appendChild(o),o})(t)))}function n({btn:t,toggleAllButtonSelector:e=null,targetDetailsSelector:o}){let l=!1;const r=[...document.querySelectorAll(o)];let n=[];e&&(n=[...document.querySelectorAll(e)]),t.addEventListener("click",(()=>{l=!l,n.forEach((t=>{t.classList.toggle("is-open")})),r.forEach((t=>{l?t.setAttribute("open",!0):t.removeAttribute("open")}))}))}o()((()=>{r("th.column-details.manage-column",(0,l.__)("Toggle all details","amp")).forEach((t=>{n({btn:t,toggleAllButtonSelector:".column-details button.error-details-toggle",targetDetailsSelector:".column-details details"})})),r("th.manage-column.column-sources_with_invalid_output",(0,l.__)("Toggle all sources","amp")).forEach((t=>{n({btn:t,toggleAllButtonSelector:".column-sources_with_invalid_output button.error-details-toggle",targetDetailsSelector:"details.source"})})),document.querySelectorAll("tr[id]").forEach((t=>{!function(t){const e=t.querySelector(".amp-validation-error-new");e&&t.classList.toggle("new",Boolean(parseInt(e.value)))}(t),function(t){const e=t.querySelector(".amp-validation-error-status");if(!e)return;const{tagName:o,value:l}=e,r="SELECT"===o?"2"===l:"0"===l;t.classList.toggle("kept",r)}(t)}))}))})();PK.3YQ59�bbFbunyad-amp/assets/js/amp-validation-single-error-url-details.asset.php<?php return array('dependencies' => array('wp-dom-ready'), 'version' => '63014822ef6a3a634d50');
PK.3YX:eL&	&	?bunyad-amp/assets/js/amp-validation-single-error-url-details.js(()=>{"use strict";var t={n:e=>{var i=e&&e.__esModule?()=>e.default:()=>e;return t.d(i,{a:i}),i},d:(e,i)=>{for(var s in i)t.o(i,s)&&!t.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:i[s]})}};t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),t.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);const e=window.wp.domReady;var i=t.n(e);class s{constructor(t,e,i){this.tr=t,this.index=e,this.activeTermId=i}init(){this.details=this.tr.querySelector(".column-details details"),this.details&&(this.createNewTr(),[...this.tr.querySelectorAll(".single-url-detail-toggle"),this.details.querySelector("summary")].forEach((t=>{t.addEventListener("click",(()=>{this.toggle(t)}))}))),this.maybeInitiallyOpenRow()}maybeInitiallyOpenRow(){this.activeTermId&&this.tr.id===`tag-${this.activeTermId}`&&this.toggle(this.tr.querySelector(".single-url-detail-toggle"))}createNewTr(){this.newTr=document.createElement("tr"),this.newTr.classList.add("details");const t=document.createElement("td");t.setAttribute("colspan",this.getRowColspan());for(const e of this.details.childNodes)"SUMMARY"!==e.tagName&&t.appendChild(e.cloneNode(!0));this.newTr.appendChild(t)}getRowColspan(){return[...this.tr.childNodes].filter((t=>["TD","TH"].includes(t.tagName))).length}toggle(t){this.tr.classList.contains("expanded")?this.onClose(t):this.onOpen(t)}onOpen(t){this.tr.parentNode.insertBefore(this.newTr,this.tr.nextSibling),this.tr.classList.add("expanded"),"SUMMARY"!==t.tagName&&this.details.setAttribute("open",!0)}onClose(t){this.tr.parentNode.removeChild(this.newTr),this.tr.classList.remove("expanded"),"SUMMARY"!==t.tagName&&this.details.removeAttribute("open")}}class r{constructor(t){this.rows=[...document.querySelectorAll('.wp-list-table tr[id^="tag-"]')].map(((e,i)=>{const r=new s(e,i,t);return r.init(),r})).filter((t=>t.details))}init(){this.addToggleAllListener()}addToggleAllListener(){let e=!1;const i=[...document.querySelectorAll(".column-details button.error-details-toggle")],s=t=>{e=!e,this.rows.forEach((i=>{e?i.onOpen(t):i.onClose(t)}))};t.g.addEventListener("click",(t=>{i.includes(t.target)&&s(t.target)}))}}i()((()=>{let t=null;const e=window.location.hash.match(/^#tag-(\d+)/);e&&(t=parseInt(e[1])),new r(t).init()}))})();PK.3Yd� �pp6bunyad-amp/assets/js/amp-validation-tooltips.asset.php<?php return array('dependencies' => array('wp-dom-ready', 'wp-pointer'), 'version' => 'ae3f02c83a308375aa51');
PK.3Y��ք==/bunyad-amp/assets/js/amp-validation-tooltips.js(()=>{"use strict";var t={n:e=>{var o=e&&e.__esModule?()=>e.default:()=>e;return t.d(o,{a:o}),o},d:(e,o)=>{for(var n in o)t.o(o,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:o[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e)};const e=window.wp.domReady;var o=t.n(e);window.wp.pointer,o()((function(){jQuery(document).on("click",".tooltip-button",(function(){jQuery(this).pointer({content:jQuery(this).next(".tooltip").attr("data-content"),position:{edge:"left",align:"center"},pointerClass:"wp-pointer wp-pointer--tooltip"}).pointer("open")}))}))})();PK.3Y�;�hTT1bunyad-amp/assets/js/mobile-redirection.asset.php<?php return array('dependencies' => array(), 'version' => 'e90f53ad4205cc35aaf7');
PK.3Y����gg*bunyad-amp/assets/js/mobile-redirection.js(()=>{var e={};e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),function({ampUrl:n,isCustomizePreview:t,isAmpDevMode:r,noampQueryVarName:o,noampQueryVarValue:s,disabledStorageKey:i,mobileUserAgents:a,regexRegex:c}){if("undefined"==typeof sessionStorage)return;const d=new RegExp(c);if(!a.some((e=>{const n=e.match(d);return!(!n||!new RegExp(n[1],n[2]).test(navigator.userAgent))||navigator.userAgent.includes(e)})))return;e.g.addEventListener("DOMContentLoaded",(()=>{const e=document.getElementById("amp-mobile-version-switcher");if(!e)return;e.hidden=!1;const n=e.querySelector("a[href]");n&&n.addEventListener("click",(()=>{sessionStorage.removeItem(i)}))}));const g=r&&["paired-browsing-non-amp","paired-browsing-amp"].includes(window.name);if(sessionStorage.getItem(i)||t||g)return;const u=new URL(location.href),m=new URL(n);m.hash=u.hash,u.searchParams.has(o)&&s===u.searchParams.get(o)?sessionStorage.setItem(i,"1"):m.href!==u.href&&(window.stop(),location.replace(m.href))}(AMP_MOBILE_REDIRECTION)})();PK.3Y��|d]]+bunyad-amp/assets/js/wp-api-fetch.asset.php<?php return array('dependencies' => array('wp-i18n'), 'version' => '5cf7915d91b1ae010c97');
PK.3Y��;�;$bunyad-amp/assets/js/wp-api-fetch.js(()=>{var e={2459:(e,t,r)=>{"use strict";var n=r(4836);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=r(5736),a=n(r(9887)),s=n(r(1377)),i=n(r(6016)),u=n(r(8887)),c=n(r(5865)),l=n(r(1139)),d=n(r(5637)),p=n(r(2774)),f=n(r(6414)),h=r(5028);const g={Accept:"application/json, */*;q=0.1"},y={credentials:"include"},m=[d.default,c.default,l.default,u.default],w=e=>{if(e.status>=200&&e.status<300)return e;throw e};let O=e=>{const{url:t,path:r,data:n,parse:a=!0,...s}=e;let{body:i,headers:u}=e;return u={...g,...u},n&&(i=JSON.stringify(n),u["Content-Type"]="application/json"),window.fetch(t||r||window.location.href,{...y,...s,body:i,headers:u}).then((e=>Promise.resolve(e).then(w).catch((e=>(0,h.parseAndThrowError)(e,a))).then((e=>(0,h.parseResponseAndNormalizeError)(e,a)))),(e=>{if(e&&"AbortError"===e.name)throw e;throw{code:"fetch_error",message:(0,o.__)("You are probably offline.")}}))};function v(e){return m.reduceRight(((e,t)=>r=>t(r,e)),O)(e).catch((t=>"rest_cookie_invalid_nonce"!==t.code?Promise.reject(t):window.fetch(v.nonceEndpoint).then(w).then((e=>e.text())).then((t=>(v.nonceMiddleware.nonce=t,v(e))))))}v.use=function(e){m.unshift(e)},v.setFetchHandler=function(e){O=e},v.createNonceMiddleware=a.default,v.createPreloadingMiddleware=i.default,v.createRootURLMiddleware=s.default,v.fetchAllMiddleware=u.default,v.mediaUploadMiddleware=p.default,v.createThemePreviewMiddleware=f.default;var A=v;t.default=A},8887:(e,t,r)=>{"use strict";var n=r(4836);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=r(7702),a=n(r(2459));const s=({path:e,url:t,...r},n)=>({...r,url:t&&(0,o.addQueryArgs)(t,n),path:e&&(0,o.addQueryArgs)(e,n)}),i=e=>e.json?e.json():Promise.reject(e),u=e=>{const{next:t}=(e=>{if(!e)return{};const t=e.match(/<([^>]+)>; rel="next"/);return t?{next:t[1]}:{}})(e.headers.get("link"));return t};t.default=async(e,t)=>{if(!1===e.parse)return t(e);if(!(e=>{const t=!!e.path&&-1!==e.path.indexOf("per_page=-1"),r=!!e.url&&-1!==e.url.indexOf("per_page=-1");return t||r})(e))return t(e);const r=await(0,a.default)({...s(e,{per_page:100}),parse:!1}),n=await i(r);if(!Array.isArray(n))return n;let o=u(r);if(!o)return n;let c=[].concat(n);for(;o;){const t=await(0,a.default)({...e,path:void 0,url:o,parse:!1}),r=await i(t);c=c.concat(r),o=u(t)}return c}},1139:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;const r=new Set(["PATCH","PUT","DELETE"]),n="GET";t.default=(e,t)=>{const{method:o=n}=e;return r.has(o.toUpperCase())&&(e={...e,headers:{...e.headers,"X-HTTP-Method-Override":o,"Content-Type":"application/json"},method:"POST"}),t(e)}},2774:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(5736),o=r(5028);t.default=(e,t)=>{if(!function(e){const t=!!e.method&&"POST"===e.method;return(!!e.path&&-1!==e.path.indexOf("/wp/v2/media")||!!e.url&&-1!==e.url.indexOf("/wp/v2/media"))&&t}(e))return t(e);let r=0;const a=e=>(r++,t({path:`/wp/v2/media/${e}/post-process`,method:"POST",data:{action:"create-image-subsizes"},parse:!1}).catch((()=>r<5?a(e):(t({path:`/wp/v2/media/${e}?force=true`,method:"DELETE"}),Promise.reject()))));return t({...e,parse:!1}).catch((t=>{const r=t.headers.get("x-wp-upload-attachment-id");return t.status>=500&&t.status<600&&r?a(r).catch((()=>!1!==e.parse?Promise.reject({code:"post_process",message:(0,n.__)("Media upload failed. If this is a photo or a large image, please scale it down and try again.")}):Promise.reject(t))):(0,o.parseAndThrowError)(t,e.parse)})).then((t=>(0,o.parseResponseAndNormalizeError)(t,e.parse)))}},5865:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=(e,t)=>{let r,n,o=e.path;return"string"==typeof e.namespace&&"string"==typeof e.endpoint&&(r=e.namespace.replace(/^\/|\/$/g,""),n=e.endpoint.replace(/^\//,""),o=n?r+"/"+n:r),delete e.namespace,delete e.endpoint,t({...e,path:o})}},9887:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=function(e){const t=(e,r)=>{const{headers:n={}}=e;for(const o in n)if("x-wp-nonce"===o.toLowerCase()&&n[o]===t.nonce)return r(e);return r({...e,headers:{...n,"X-WP-Nonce":t.nonce}})};return t.nonce=e,t}},6016:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(7702);function o(e,t){return Promise.resolve(t?e.body:new window.Response(JSON.stringify(e.body),{status:200,statusText:"OK",headers:e.headers}))}t.default=function(e){const t=Object.fromEntries(Object.entries(e).map((([e,t])=>[(0,n.normalizePath)(e),t])));return(e,r)=>{const{parse:a=!0}=e;let s=e.path;if(!s&&e.url){const{rest_route:t,...r}=(0,n.getQueryArgs)(e.url);"string"==typeof t&&(s=(0,n.addQueryArgs)(t,r))}if("string"!=typeof s)return r(e);const i=e.method||"GET",u=(0,n.normalizePath)(s);if("GET"===i&&t[u]){const e=t[u];return delete t[u],o(e,!!a)}if("OPTIONS"===i&&t[i]&&t[i][u]){const e=t[i][u];return delete t[i][u],o(e,!!a)}return r(e)}}},1377:(e,t,r)=>{"use strict";var n=r(4836);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=n(r(5865));t.default=e=>(t,r)=>(0,o.default)(t,(t=>{let n,o=t.url,a=t.path;return"string"==typeof a&&(n=e,-1!==e.indexOf("?")&&(a=a.replace("?","&")),a=a.replace(/^\//,""),"string"==typeof n&&-1!==n.indexOf("?")&&(a=a.replace("?","&")),o=n+a),r({...t,url:o})}))},6414:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(7702);t.default=e=>(t,r)=>("string"!=typeof t.url||(0,n.hasQueryArg)(t.url,"wp_theme_preview")||(t.url=(0,n.addQueryArgs)(t.url,{wp_theme_preview:e})),"string"!=typeof t.path||(0,n.hasQueryArg)(t.path,"wp_theme_preview")||(t.path=(0,n.addQueryArgs)(t.path,{wp_theme_preview:e})),r(t))},5637:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(7702);t.default=(e,t)=>("string"!=typeof e.url||(0,n.hasQueryArg)(e.url,"_locale")||(e.url=(0,n.addQueryArgs)(e.url,{_locale:"user"})),"string"!=typeof e.path||(0,n.hasQueryArg)(e.path,"_locale")||(e.path=(0,n.addQueryArgs)(e.path,{_locale:"user"})),t(e))},5028:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.parseAndThrowError=a,t.parseResponseAndNormalizeError=void 0;var n=r(5736);const o=e=>{const t={code:"invalid_json",message:(0,n.__)("The response is not a valid JSON response.")};if(!e||!e.json)throw t;return e.json().catch((()=>{throw t}))};function a(e,t=!0){if(!t)throw e;return o(e).then((e=>{const t={code:"unknown_error",message:(0,n.__)("An unknown error occurred.")};throw e||t}))}t.parseResponseAndNormalizeError=(e,t=!0)=>Promise.resolve(((e,t=!0)=>t?204===e.status?null:e.json?e.json():Promise.reject(e):e)(e,t)).catch((e=>a(e,t)))},7702:(e,t,r)=>{"use strict";function n(e){try{return new URL(e),!0}catch{return!1}}r.r(t),r.d(t,{addQueryArgs:()=>v,buildQueryString:()=>f,cleanForSlug:()=>M,filterURLForDisplay:()=>U,getAuthority:()=>u,getFilename:()=>I,getFragment:()=>y,getPath:()=>l,getPathAndQueryString:()=>g,getProtocol:()=>s,getQueryArg:()=>A,getQueryArgs:()=>O,getQueryString:()=>p,hasQueryArg:()=>_,isEmail:()=>a,isURL:()=>n,isValidAuthority:()=>c,isValidFragment:()=>m,isValidPath:()=>d,isValidProtocol:()=>i,isValidQueryString:()=>h,normalizePath:()=>R,prependHTTP:()=>j,prependHTTPS:()=>S,removeQueryArgs:()=>E,safeDecodeURI:()=>P,safeDecodeURIComponent:()=>w});const o=/^(mailto:)?[a-z0-9._%+-]+@[a-z0-9][a-z0-9.-]*\.[a-z]{2,63}$/i;function a(e){return o.test(e)}function s(e){const t=/^([^\s:]+:)/.exec(e);if(t)return t[1]}function i(e){return!!e&&/^[a-z\-.\+]+[0-9]*:$/i.test(e)}function u(e){const t=/^[^\/\s:]+:(?:\/\/)?\/?([^\/\s#?]+)[\/#?]{0,1}\S*$/.exec(e);if(t)return t[1]}function c(e){return!!e&&/^[^\s#?]+$/.test(e)}function l(e){const t=/^[^\/\s:]+:(?:\/\/)?[^\/\s#?]+[\/]([^\s#?]+)[#?]{0,1}\S*$/.exec(e);if(t)return t[1]}function d(e){return!!e&&/^[^\s#?]+$/.test(e)}function p(e){let t;try{t=new URL(e,"http://example.com").search.substring(1)}catch(e){}if(t)return t}function f(e){let t="";const r=Object.entries(e);let n;for(;n=r.shift();){let[e,o]=n;if(Array.isArray(o)||o&&o.constructor===Object){const t=Object.entries(o).reverse();for(const[n,o]of t)r.unshift([`${e}[${n}]`,o])}else void 0!==o&&(null===o&&(o=""),t+="&"+[e,o].map(encodeURIComponent).join("="))}return t.substr(1)}function h(e){return!!e&&/^[^\s#?\/]+$/.test(e)}function g(e){const t=l(e),r=p(e);let n="/";return t&&(n+=t),r&&(n+=`?${r}`),n}function y(e){const t=/^\S+?(#[^\s\?]*)/.exec(e);if(t)return t[1]}function m(e){return!!e&&/^#[^\s#?\/]*$/.test(e)}function w(e){try{return decodeURIComponent(e)}catch(t){return e}}function O(e){return(p(e)||"").replace(/\+/g,"%20").split("&").reduce(((e,t)=>{const[r,n=""]=t.split("=").filter(Boolean).map(w);return r&&function(e,t,r){const n=t.length,o=n-1;for(let a=0;a<n;a++){let n=t[a];!n&&Array.isArray(e)&&(n=e.length.toString()),n=["__proto__","constructor","prototype"].includes(n)?n.toUpperCase():n;const s=!isNaN(Number(t[a+1]));e[n]=a===o?r:e[n]||(s?[]:{}),Array.isArray(e[n])&&!s&&(e[n]={...e[n]}),e=e[n]}}(e,r.replace(/\]/g,"").split("["),n),e}),Object.create(null))}function v(e="",t){if(!t||!Object.keys(t).length)return e;let r=e;const n=e.indexOf("?");return-1!==n&&(t=Object.assign(O(e),t),r=r.substr(0,n)),r+"?"+f(t)}function A(e,t){return O(e)[t]}function _(e,t){return void 0!==A(e,t)}function E(e,...t){const r=e.indexOf("?");if(-1===r)return e;const n=O(e),o=e.substr(0,r);t.forEach((e=>delete n[e]));const a=f(n);return a?o+"?"+a:o}const b=/^(?:[a-z]+:|#|\?|\.|\/)/i;function j(e){return e?(e=e.trim(),b.test(e)||a(e)?e:"http://"+e):e}function P(e){try{return decodeURI(e)}catch(t){return e}}function U(e,t=null){let r=e.replace(/^(?:https?:)\/\/(?:www\.)?/,"");if(r.match(/^[^\/]+\/$/)&&(r=r.replace("/","")),!t||r.length<=t||!r.match(/\/([^\/?]+)\.(?:[\w]+)(?=\?|$)/))return r;r=r.split("?")[0];const n=r.split("/"),o=n[n.length-1];if(o.length<=t)return"…"+r.slice(-t);const a=o.lastIndexOf("."),[s,i]=[o.slice(0,a),o.slice(a+1)],u=s.slice(-3)+"."+i;return o.slice(0,t-u.length-1)+"…"+u}var x=r(6826),T=r.n(x);function M(e){return e?T()(e).replace(/[\s\./]+/g,"-").replace(/[^\p{L}\p{N}_-]+/gu,"").toLowerCase().replace(/-+/g,"-").replace(/(^-+)|(-+$)/g,""):""}function I(e){let t;try{t=new URL(e,"http://example.com").pathname.split("/").pop()}catch(e){}if(t)return t}function R(e){const t=e.split("?"),r=t[1],n=t[0];return r?n+"?"+r.split("&").map((e=>e.split("="))).map((e=>e.map(decodeURIComponent))).sort(((e,t)=>e[0].localeCompare(t[0]))).map((e=>e.map(encodeURIComponent))).map((e=>e.join("="))).join("&"):n}function S(e){return e?e.startsWith("http://")?e:(e=j(e)).replace(/^http:/,"https:"):e}},6826:e=>{var t={À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",Ấ:"A",Ắ:"A",Ẳ:"A",Ẵ:"A",Ặ:"A",Æ:"AE",Ầ:"A",Ằ:"A",Ȃ:"A",Ả:"A",Ạ:"A",Ẩ:"A",Ẫ:"A",Ậ:"A",Ç:"C",Ḉ:"C",È:"E",É:"E",Ê:"E",Ë:"E",Ế:"E",Ḗ:"E",Ề:"E",Ḕ:"E",Ḝ:"E",Ȇ:"E",Ẻ:"E",Ẽ:"E",Ẹ:"E",Ể:"E",Ễ:"E",Ệ:"E",Ì:"I",Í:"I",Î:"I",Ï:"I",Ḯ:"I",Ȋ:"I",Ỉ:"I",Ị:"I",Ð:"D",Ñ:"N",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",Ố:"O",Ṍ:"O",Ṓ:"O",Ȏ:"O",Ỏ:"O",Ọ:"O",Ổ:"O",Ỗ:"O",Ộ:"O",Ờ:"O",Ở:"O",Ỡ:"O",Ớ:"O",Ợ:"O",Ù:"U",Ú:"U",Û:"U",Ü:"U",Ủ:"U",Ụ:"U",Ử:"U",Ữ:"U",Ự:"U",Ý:"Y",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",ấ:"a",ắ:"a",ẳ:"a",ẵ:"a",ặ:"a",æ:"ae",ầ:"a",ằ:"a",ȃ:"a",ả:"a",ạ:"a",ẩ:"a",ẫ:"a",ậ:"a",ç:"c",ḉ:"c",è:"e",é:"e",ê:"e",ë:"e",ế:"e",ḗ:"e",ề:"e",ḕ:"e",ḝ:"e",ȇ:"e",ẻ:"e",ẽ:"e",ẹ:"e",ể:"e",ễ:"e",ệ:"e",ì:"i",í:"i",î:"i",ï:"i",ḯ:"i",ȋ:"i",ỉ:"i",ị:"i",ð:"d",ñ:"n",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",ố:"o",ṍ:"o",ṓ:"o",ȏ:"o",ỏ:"o",ọ:"o",ổ:"o",ỗ:"o",ộ:"o",ờ:"o",ở:"o",ỡ:"o",ớ:"o",ợ:"o",ù:"u",ú:"u",û:"u",ü:"u",ủ:"u",ụ:"u",ử:"u",ữ:"u",ự:"u",ý:"y",ÿ:"y",Ā:"A",ā:"a",Ă:"A",ă:"a",Ą:"A",ą:"a",Ć:"C",ć:"c",Ĉ:"C",ĉ:"c",Ċ:"C",ċ:"c",Č:"C",č:"c",C̆:"C",c̆:"c",Ď:"D",ď:"d",Đ:"D",đ:"d",Ē:"E",ē:"e",Ĕ:"E",ĕ:"e",Ė:"E",ė:"e",Ę:"E",ę:"e",Ě:"E",ě:"e",Ĝ:"G",Ǵ:"G",ĝ:"g",ǵ:"g",Ğ:"G",ğ:"g",Ġ:"G",ġ:"g",Ģ:"G",ģ:"g",Ĥ:"H",ĥ:"h",Ħ:"H",ħ:"h",Ḫ:"H",ḫ:"h",Ĩ:"I",ĩ:"i",Ī:"I",ī:"i",Ĭ:"I",ĭ:"i",Į:"I",į:"i",İ:"I",ı:"i",IJ:"IJ",ij:"ij",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",Ḱ:"K",ḱ:"k",K̆:"K",k̆:"k",Ĺ:"L",ĺ:"l",Ļ:"L",ļ:"l",Ľ:"L",ľ:"l",Ŀ:"L",ŀ:"l",Ł:"l",ł:"l",Ḿ:"M",ḿ:"m",M̆:"M",m̆:"m",Ń:"N",ń:"n",Ņ:"N",ņ:"n",Ň:"N",ň:"n",ʼn:"n",N̆:"N",n̆:"n",Ō:"O",ō:"o",Ŏ:"O",ŏ:"o",Ő:"O",ő:"o",Œ:"OE",œ:"oe",P̆:"P",p̆:"p",Ŕ:"R",ŕ:"r",Ŗ:"R",ŗ:"r",Ř:"R",ř:"r",R̆:"R",r̆:"r",Ȓ:"R",ȓ:"r",Ś:"S",ś:"s",Ŝ:"S",ŝ:"s",Ş:"S",Ș:"S",ș:"s",ş:"s",Š:"S",š:"s",Ţ:"T",ţ:"t",ț:"t",Ț:"T",Ť:"T",ť:"t",Ŧ:"T",ŧ:"t",T̆:"T",t̆:"t",Ũ:"U",ũ:"u",Ū:"U",ū:"u",Ŭ:"U",ŭ:"u",Ů:"U",ů:"u",Ű:"U",ű:"u",Ų:"U",ų:"u",Ȗ:"U",ȗ:"u",V̆:"V",v̆:"v",Ŵ:"W",ŵ:"w",Ẃ:"W",ẃ:"w",X̆:"X",x̆:"x",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Y̆:"Y",y̆:"y",Ź:"Z",ź:"z",Ż:"Z",ż:"z",Ž:"Z",ž:"z",ſ:"s",ƒ:"f",Ơ:"O",ơ:"o",Ư:"U",ư:"u",Ǎ:"A",ǎ:"a",Ǐ:"I",ǐ:"i",Ǒ:"O",ǒ:"o",Ǔ:"U",ǔ:"u",Ǖ:"U",ǖ:"u",Ǘ:"U",ǘ:"u",Ǚ:"U",ǚ:"u",Ǜ:"U",ǜ:"u",Ứ:"U",ứ:"u",Ṹ:"U",ṹ:"u",Ǻ:"A",ǻ:"a",Ǽ:"AE",ǽ:"ae",Ǿ:"O",ǿ:"o",Þ:"TH",þ:"th",Ṕ:"P",ṕ:"p",Ṥ:"S",ṥ:"s",X́:"X",x́:"x",Ѓ:"Г",ѓ:"г",Ќ:"К",ќ:"к",A̋:"A",a̋:"a",E̋:"E",e̋:"e",I̋:"I",i̋:"i",Ǹ:"N",ǹ:"n",Ồ:"O",ồ:"o",Ṑ:"O",ṑ:"o",Ừ:"U",ừ:"u",Ẁ:"W",ẁ:"w",Ỳ:"Y",ỳ:"y",Ȁ:"A",ȁ:"a",Ȅ:"E",ȅ:"e",Ȉ:"I",ȉ:"i",Ȍ:"O",ȍ:"o",Ȑ:"R",ȑ:"r",Ȕ:"U",ȕ:"u",B̌:"B",b̌:"b",Č̣:"C",č̣:"c",Ê̌:"E",ê̌:"e",F̌:"F",f̌:"f",Ǧ:"G",ǧ:"g",Ȟ:"H",ȟ:"h",J̌:"J",ǰ:"j",Ǩ:"K",ǩ:"k",M̌:"M",m̌:"m",P̌:"P",p̌:"p",Q̌:"Q",q̌:"q",Ř̩:"R",ř̩:"r",Ṧ:"S",ṧ:"s",V̌:"V",v̌:"v",W̌:"W",w̌:"w",X̌:"X",x̌:"x",Y̌:"Y",y̌:"y",A̧:"A",a̧:"a",B̧:"B",b̧:"b",Ḑ:"D",ḑ:"d",Ȩ:"E",ȩ:"e",Ɛ̧:"E",ɛ̧:"e",Ḩ:"H",ḩ:"h",I̧:"I",i̧:"i",Ɨ̧:"I",ɨ̧:"i",M̧:"M",m̧:"m",O̧:"O",o̧:"o",Q̧:"Q",q̧:"q",U̧:"U",u̧:"u",X̧:"X",x̧:"x",Z̧:"Z",z̧:"z",й:"и",Й:"И",ё:"е",Ё:"Е"},r=Object.keys(t).join("|"),n=new RegExp(r,"g"),o=new RegExp(r,"");function a(e){return t[e]}var s=function(e){return e.replace(n,a)};e.exports=s,e.exports.has=function(e){return!!e.match(o)},e.exports.remove=s},5736:e=>{"use strict";e.exports=window.wp.i18n},4836:e=>{e.exports=function(e){return e&&e.__esModule?e:{default:e}},e.exports.__esModule=!0,e.exports.default=e.exports}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var a=t[n]={exports:{}};return e[n](a,a.exports,r),a.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{"use strict";var e=r(2459);r.g.wp=r.g.wp||{},r.g.wp.apiFetch=e.default})()})();PK.3YB`�FTT+bunyad-amp/assets/js/wp-dom-ready.asset.php<?php return array('dependencies' => array(), 'version' => 'f77871ff7694fffea381');
PK.3Y�~���$bunyad-amp/assets/js/wp-dom-ready.js(()=>{"use strict";var e={d:(t,d)=>{for(var o in d)e.o(d,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:d[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},t={};function d(e){"undefined"!=typeof document&&("complete"!==document.readyState&&"interactive"!==document.readyState?document.addEventListener("DOMContentLoaded",e):e())}e.d(t,{default:()=>d}),(window.wp=window.wp||{}).domReady=t.default})();PK.3Y-G	�TT'bunyad-amp/assets/js/wp-hooks.asset.php<?php return array('dependencies' => array(), 'version' => 'd38a5156d32f4d0be04b');
PK.3Y~4C��� bunyad-amp/assets/js/wp-hooks.jsvar wp;(()=>{"use strict";var t={d:(e,n)=>{for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{actions:()=>S,addAction:()=>m,addFilter:()=>p,applyFilters:()=>k,createHooks:()=>h,currentAction:()=>I,currentFilter:()=>x,defaultHooks:()=>f,didAction:()=>O,didFilter:()=>j,doAction:()=>b,doingAction:()=>T,doingFilter:()=>w,filters:()=>z,hasAction:()=>v,hasFilter:()=>y,removeAction:()=>A,removeAllActions:()=>F,removeAllFilters:()=>g,removeFilter:()=>_});const n=function(t){return"string"!=typeof t||""===t?(console.error("The namespace must be a non-empty string."),!1):!!/^[a-zA-Z][a-zA-Z0-9_.\-\/]*$/.test(t)||(console.error("The namespace can only contain numbers, letters, dashes, periods, underscores and slashes."),!1)},r=function(t){return"string"!=typeof t||""===t?(console.error("The hook name must be a non-empty string."),!1):/^__/.test(t)?(console.error("The hook name cannot begin with `__`."),!1):!!/^[a-zA-Z][a-zA-Z0-9_.-]*$/.test(t)||(console.error("The hook name can only contain numbers, letters, dashes, periods and underscores."),!1)},o=function(t,e){return function(o,i,s,c=10){const l=t[e];if(!r(o))return;if(!n(i))return;if("function"!=typeof s)return void console.error("The hook callback must be a function.");if("number"!=typeof c)return void console.error("If specified, the hook priority must be a number.");const u={callback:s,priority:c,namespace:i};if(l[o]){const t=l[o].handlers;let e;for(e=t.length;e>0&&!(c>=t[e-1].priority);e--);e===t.length?t[e]=u:t.splice(e,0,u),l.__current.forEach((t=>{t.name===o&&t.currentIndex>=e&&t.currentIndex++}))}else l[o]={handlers:[u],runs:0};"hookAdded"!==o&&t.doAction("hookAdded",o,i,s,c)}},i=function(t,e,o=!1){return function(i,s){const c=t[e];if(!r(i))return;if(!o&&!n(s))return;if(!c[i])return 0;let l=0;if(o)l=c[i].handlers.length,c[i]={runs:c[i].runs,handlers:[]};else{const t=c[i].handlers;for(let e=t.length-1;e>=0;e--)t[e].namespace===s&&(t.splice(e,1),l++,c.__current.forEach((t=>{t.name===i&&t.currentIndex>=e&&t.currentIndex--})))}return"hookRemoved"!==i&&t.doAction("hookRemoved",i,s),l}},s=function(t,e){return function(n,r){const o=t[e];return void 0!==r?n in o&&o[n].handlers.some((t=>t.namespace===r)):n in o}},c=function(t,e,n=!1){return function(r,...o){const i=t[e];i[r]||(i[r]={handlers:[],runs:0}),i[r].runs++;const s=i[r].handlers;if(!s||!s.length)return n?o[0]:void 0;const c={name:r,currentIndex:0};for(i.__current.push(c);c.currentIndex<s.length;){const t=s[c.currentIndex].callback.apply(null,o);n&&(o[0]=t),c.currentIndex++}return i.__current.pop(),n?o[0]:void 0}},l=function(t,e){return function(){var n;const r=t[e];return null!==(n=r.__current[r.__current.length-1]?.name)&&void 0!==n?n:null}},u=function(t,e){return function(n){const r=t[e];return void 0===n?void 0!==r.__current[0]:!!r.__current[0]&&n===r.__current[0].name}},a=function(t,e){return function(n){const o=t[e];if(r(n))return o[n]&&o[n].runs?o[n].runs:0}};class d{constructor(){this.actions=Object.create(null),this.actions.__current=[],this.filters=Object.create(null),this.filters.__current=[],this.addAction=o(this,"actions"),this.addFilter=o(this,"filters"),this.removeAction=i(this,"actions"),this.removeFilter=i(this,"filters"),this.hasAction=s(this,"actions"),this.hasFilter=s(this,"filters"),this.removeAllActions=i(this,"actions",!0),this.removeAllFilters=i(this,"filters",!0),this.doAction=c(this,"actions"),this.applyFilters=c(this,"filters",!0),this.currentAction=l(this,"actions"),this.currentFilter=l(this,"filters"),this.doingAction=u(this,"actions"),this.doingFilter=u(this,"filters"),this.didAction=a(this,"actions"),this.didFilter=a(this,"filters")}}const h=function(){return new d},f=h(),{addAction:m,addFilter:p,removeAction:A,removeFilter:_,hasAction:v,hasFilter:y,removeAllActions:F,removeAllFilters:g,doAction:b,applyFilters:k,currentAction:I,currentFilter:x,doingAction:T,doingFilter:w,didAction:O,didFilter:j,actions:S,filters:z}=f;(wp=void 0===wp?{}:wp).hooks=e})();PK.3Y��/�TT/bunyad-amp/assets/js/wp-html-entities.asset.php<?php return array('dependencies' => array(), 'version' => '1f27c647b207020377e6');
PK.3YOD�H��(bunyad-amp/assets/js/wp-html-entities.jsvar wp;(()=>{"use strict";var e={d:(t,n)=>{for(var o in n)e.o(n,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:n[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};let n;function o(e){if("string"!=typeof e||-1===e.indexOf("&"))return e;void 0===n&&(n=document.implementation&&document.implementation.createHTMLDocument?document.implementation.createHTMLDocument("").createElement("textarea"):document.createElement("textarea")),n.innerHTML=e;const t=n.textContent;return n.innerHTML="",t}e.r(t),e.d(t,{decodeEntities:()=>o}),(wp=void 0===wp?{}:wp).htmlEntities=t})();PK.3Yd:��TT&bunyad-amp/assets/js/wp-i18n.asset.php<?php return array('dependencies' => array(), 'version' => '3e0e4a08be614dbcfa53');
PK.3Y|?
�-1-1bunyad-amp/assets/js/wp-i18n.jsvar wp;(()=>{var t={416:(t,e,n)=>{"use strict";n.d(e,{defaultHooks:()=>f});const r=function(t){return"string"!=typeof t||""===t?(console.error("The namespace must be a non-empty string."),!1):!!/^[a-zA-Z][a-zA-Z0-9_.\-\/]*$/.test(t)||(console.error("The namespace can only contain numbers, letters, dashes, periods, underscores and slashes."),!1)},i=function(t){return"string"!=typeof t||""===t?(console.error("The hook name must be a non-empty string."),!1):/^__/.test(t)?(console.error("The hook name cannot begin with `__`."),!1):!!/^[a-zA-Z][a-zA-Z0-9_.-]*$/.test(t)||(console.error("The hook name can only contain numbers, letters, dashes, periods and underscores."),!1)},o=function(t,e){return function(n,o,s,a=10){const c=t[e];if(!i(n))return;if(!r(o))return;if("function"!=typeof s)return void console.error("The hook callback must be a function.");if("number"!=typeof a)return void console.error("If specified, the hook priority must be a number.");const l={callback:s,priority:a,namespace:o};if(c[n]){const t=c[n].handlers;let e;for(e=t.length;e>0&&!(a>=t[e-1].priority);e--);e===t.length?t[e]=l:t.splice(e,0,l),c.__current.forEach((t=>{t.name===n&&t.currentIndex>=e&&t.currentIndex++}))}else c[n]={handlers:[l],runs:0};"hookAdded"!==n&&t.doAction("hookAdded",n,o,s,a)}},s=function(t,e,n=!1){return function(o,s){const a=t[e];if(!i(o))return;if(!n&&!r(s))return;if(!a[o])return 0;let c=0;if(n)c=a[o].handlers.length,a[o]={runs:a[o].runs,handlers:[]};else{const t=a[o].handlers;for(let e=t.length-1;e>=0;e--)t[e].namespace===s&&(t.splice(e,1),c++,a.__current.forEach((t=>{t.name===o&&t.currentIndex>=e&&t.currentIndex--})))}return"hookRemoved"!==o&&t.doAction("hookRemoved",o,s),c}},a=function(t,e){return function(n,r){const i=t[e];return void 0!==r?n in i&&i[n].handlers.some((t=>t.namespace===r)):n in i}},c=function(t,e,n=!1){return function(r,...i){const o=t[e];o[r]||(o[r]={handlers:[],runs:0}),o[r].runs++;const s=o[r].handlers;if(!s||!s.length)return n?i[0]:void 0;const a={name:r,currentIndex:0};for(o.__current.push(a);a.currentIndex<s.length;){const t=s[a.currentIndex].callback.apply(null,i);n&&(i[0]=t),a.currentIndex++}return o.__current.pop(),n?i[0]:void 0}},l=function(t,e){return function(){var n;const r=t[e];return null!==(n=r.__current[r.__current.length-1]?.name)&&void 0!==n?n:null}},u=function(t,e){return function(n){const r=t[e];return void 0===n?void 0!==r.__current[0]:!!r.__current[0]&&n===r.__current[0].name}},p=function(t,e){return function(n){const r=t[e];if(i(n))return r[n]&&r[n].runs?r[n].runs:0}};class d{constructor(){this.actions=Object.create(null),this.actions.__current=[],this.filters=Object.create(null),this.filters.__current=[],this.addAction=o(this,"actions"),this.addFilter=o(this,"filters"),this.removeAction=s(this,"actions"),this.removeFilter=s(this,"filters"),this.hasAction=a(this,"actions"),this.hasFilter=a(this,"filters"),this.removeAllActions=s(this,"actions",!0),this.removeAllFilters=s(this,"filters",!0),this.doAction=c(this,"actions"),this.applyFilters=c(this,"filters",!0),this.currentAction=l(this,"actions"),this.currentFilter=l(this,"filters"),this.doingAction=u(this,"actions"),this.doingFilter=u(this,"filters"),this.didAction=p(this,"actions"),this.didFilter=p(this,"filters")}}const f=new d,{addAction:h,addFilter:g,removeAction:_,removeFilter:m,hasAction:v,hasFilter:y,removeAllActions:b,removeAllFilters:x,doAction:k,applyFilters:F,currentAction:w,currentFilter:A,doingAction:S,doingFilter:I,didAction:T,didFilter:j,actions:L,filters:O}=f},975:(t,e,n)=>{var r;!function(){"use strict";var i={not_string:/[^s]/,not_bool:/[^t]/,not_type:/[^T]/,not_primitive:/[^v]/,number:/[diefg]/,numeric_arg:/[bcdiefguxX]/,json:/[j]/,not_json:/[^j]/,text:/^[^\x25]+/,modulo:/^\x25{2}/,placeholder:/^\x25(?:([1-9]\d*)\$|\(([^)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijostTuvxX])/,key:/^([a-z_][a-z_\d]*)/i,key_access:/^\.([a-z_][a-z_\d]*)/i,index_access:/^\[(\d+)\]/,sign:/^[+-]/};function o(t){return function(t,e){var n,r,s,a,c,l,u,p,d,f=1,h=t.length,g="";for(r=0;r<h;r++)if("string"==typeof t[r])g+=t[r];else if("object"==typeof t[r]){if((a=t[r]).keys)for(n=e[f],s=0;s<a.keys.length;s++){if(null==n)throw new Error(o('[sprintf] Cannot access property "%s" of undefined value "%s"',a.keys[s],a.keys[s-1]));n=n[a.keys[s]]}else n=a.param_no?e[a.param_no]:e[f++];if(i.not_type.test(a.type)&&i.not_primitive.test(a.type)&&n instanceof Function&&(n=n()),i.numeric_arg.test(a.type)&&"number"!=typeof n&&isNaN(n))throw new TypeError(o("[sprintf] expecting number but found %T",n));switch(i.number.test(a.type)&&(p=n>=0),a.type){case"b":n=parseInt(n,10).toString(2);break;case"c":n=String.fromCharCode(parseInt(n,10));break;case"d":case"i":n=parseInt(n,10);break;case"j":n=JSON.stringify(n,null,a.width?parseInt(a.width):0);break;case"e":n=a.precision?parseFloat(n).toExponential(a.precision):parseFloat(n).toExponential();break;case"f":n=a.precision?parseFloat(n).toFixed(a.precision):parseFloat(n);break;case"g":n=a.precision?String(Number(n.toPrecision(a.precision))):parseFloat(n);break;case"o":n=(parseInt(n,10)>>>0).toString(8);break;case"s":n=String(n),n=a.precision?n.substring(0,a.precision):n;break;case"t":n=String(!!n),n=a.precision?n.substring(0,a.precision):n;break;case"T":n=Object.prototype.toString.call(n).slice(8,-1).toLowerCase(),n=a.precision?n.substring(0,a.precision):n;break;case"u":n=parseInt(n,10)>>>0;break;case"v":n=n.valueOf(),n=a.precision?n.substring(0,a.precision):n;break;case"x":n=(parseInt(n,10)>>>0).toString(16);break;case"X":n=(parseInt(n,10)>>>0).toString(16).toUpperCase()}i.json.test(a.type)?g+=n:(!i.number.test(a.type)||p&&!a.sign?d="":(d=p?"+":"-",n=n.toString().replace(i.sign,"")),l=a.pad_char?"0"===a.pad_char?"0":a.pad_char.charAt(1):" ",u=a.width-(d+n).length,c=a.width&&u>0?l.repeat(u):"",g+=a.align?d+n+c:"0"===l?d+c+n:c+d+n)}return g}(function(t){if(a[t])return a[t];for(var e,n=t,r=[],o=0;n;){if(null!==(e=i.text.exec(n)))r.push(e[0]);else if(null!==(e=i.modulo.exec(n)))r.push("%");else{if(null===(e=i.placeholder.exec(n)))throw new SyntaxError("[sprintf] unexpected placeholder");if(e[2]){o|=1;var s=[],c=e[2],l=[];if(null===(l=i.key.exec(c)))throw new SyntaxError("[sprintf] failed to parse named argument key");for(s.push(l[1]);""!==(c=c.substring(l[0].length));)if(null!==(l=i.key_access.exec(c)))s.push(l[1]);else{if(null===(l=i.index_access.exec(c)))throw new SyntaxError("[sprintf] failed to parse named argument key");s.push(l[1])}e[2]=s}else o|=2;if(3===o)throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported");r.push({placeholder:e[0],param_no:e[1],keys:e[2],sign:e[3],pad_char:e[4],align:e[5],width:e[6],precision:e[7],type:e[8]})}n=n.substring(e[0].length)}return a[t]=r}(t),arguments)}function s(t,e){return o.apply(null,[t].concat(e||[]))}var a=Object.create(null);e.sprintf=o,e.vsprintf=s,"undefined"!=typeof window&&(window.sprintf=o,window.vsprintf=s,void 0===(r=function(){return{sprintf:o,vsprintf:s}}.call(e,n,e,t))||(t.exports=r))}()}},e={};function n(r){var i=e[r];if(void 0!==i)return i.exports;var o=e[r]={exports:{}};return t[r](o,o.exports,n),o.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};(()=>{"use strict";n.r(r),n.d(r,{__:()=>__,_n:()=>_n,_nx:()=>_nx,_x:()=>_x,createI18n:()=>g,defaultI18n:()=>v,getLocaleData:()=>y,hasTranslation:()=>w,isRTL:()=>F,resetLocaleData:()=>x,setLocaleData:()=>b,sprintf:()=>o,subscribe:()=>k});var t=n(975),e=n.n(t);const i=function(t,e){var n,r,i=0;function o(){var o,s,a=n,c=arguments.length;t:for(;a;){if(a.args.length===arguments.length){for(s=0;s<c;s++)if(a.args[s]!==arguments[s]){a=a.next;continue t}return a!==n&&(a===r&&(r=a.prev),a.prev.next=a.next,a.next&&(a.next.prev=a.prev),a.next=n,a.prev=null,n.prev=a,n=a),a.val}a=a.next}for(o=new Array(c),s=0;s<c;s++)o[s]=arguments[s];return a={args:o,val:t.apply(null,o)},n?(n.prev=a,a.next=n):r=a,i===e.maxSize?(r=r.prev).next=null:i++,n=a,a.val}return e=e||{},o.clear=function(){n=null,r=null,i=0},o}(console.error);function o(t,...n){try{return e().sprintf(t,...n)}catch(e){return e instanceof Error&&i("sprintf error: \n\n"+e.toString()),t}}var s,a,c,l;s={"(":9,"!":8,"*":7,"/":7,"%":7,"+":6,"-":6,"<":5,"<=":5,">":5,">=":5,"==":4,"!=":4,"&&":3,"||":2,"?":1,"?:":1},a=["(","?"],c={")":["("],":":["?","?:"]},l=/<=|>=|==|!=|&&|\|\||\?:|\(|!|\*|\/|%|\+|-|<|>|\?|\)|:/;var u={"!":function(t){return!t},"*":function(t,e){return t*e},"/":function(t,e){return t/e},"%":function(t,e){return t%e},"+":function(t,e){return t+e},"-":function(t,e){return t-e},"<":function(t,e){return t<e},"<=":function(t,e){return t<=e},">":function(t,e){return t>e},">=":function(t,e){return t>=e},"==":function(t,e){return t===e},"!=":function(t,e){return t!==e},"&&":function(t,e){return t&&e},"||":function(t,e){return t||e},"?:":function(t,e,n){if(t)throw e;return n}};var p={contextDelimiter:"",onMissingKey:null};function d(t,e){var n;for(n in this.data=t,this.pluralForms={},this.options={},p)this.options[n]=void 0!==e&&n in e?e[n]:p[n]}d.prototype.getPluralForm=function(t,e){var n,r,i,o,p=this.pluralForms[t];return p||("function"!=typeof(i=(n=this.data[t][""])["Plural-Forms"]||n["plural-forms"]||n.plural_forms)&&(r=function(t){var e,n,r;for(e=t.split(";"),n=0;n<e.length;n++)if(0===(r=e[n].trim()).indexOf("plural="))return r.substr(7)}(n["Plural-Forms"]||n["plural-forms"]||n.plural_forms),o=function(t){var e=function(t){for(var e,n,r,i,o=[],u=[];e=t.match(l);){for(n=e[0],(r=t.substr(0,e.index).trim())&&o.push(r);i=u.pop();){if(c[n]){if(c[n][0]===i){n=c[n][1]||n;break}}else if(a.indexOf(i)>=0||s[i]<s[n]){u.push(i);break}o.push(i)}c[n]||u.push(n),t=t.substr(e.index+n.length)}return(t=t.trim())&&o.push(t),o.concat(u.reverse())}(t);return function(t){return function(t,e){var n,r,i,o,s,a,c=[];for(n=0;n<t.length;n++){if(s=t[n],o=u[s]){for(r=o.length,i=Array(r);r--;)i[r]=c.pop();try{a=o.apply(null,i)}catch(t){return t}}else a=e.hasOwnProperty(s)?e[s]:+s;c.push(a)}return c[0]}(e,t)}}(r),i=function(t){return+o({n:t})}),p=this.pluralForms[t]=i),p(e)},d.prototype.dcnpgettext=function(t,e,n,r,i){var o,s,a;return o=void 0===i?0:this.getPluralForm(t,i),s=n,e&&(s=e+this.options.contextDelimiter+n),(a=this.data[t][s])&&a[o]?a[o]:(this.options.onMissingKey&&this.options.onMissingKey(n,t),0===o?n:r)};const f={plural_forms:t=>1===t?0:1},h=/^i18n\.(n?gettext|has_translation)(_|$)/,g=(t,e,n)=>{const r=new d({}),i=new Set,o=()=>{i.forEach((t=>t()))},s=(t,e="default")=>{r.data[e]={...r.data[e],...t},r.data[e][""]={...f,...r.data[e]?.[""]},delete r.pluralForms[e]},a=(t,e)=>{s(t,e),o()},c=(t="default",e,n,i,o)=>(r.data[t]||s(void 0,t),r.dcnpgettext(t,e,n,i,o)),l=(t="default")=>t,_x=(t,e,r)=>{let i=c(r,e,t);return n?(i=n.applyFilters("i18n.gettext_with_context",i,t,e,r),n.applyFilters("i18n.gettext_with_context_"+l(r),i,t,e,r)):i};if(t&&a(t,e),n){const t=t=>{h.test(t)&&o()};n.addAction("hookAdded","core/i18n",t),n.addAction("hookRemoved","core/i18n",t)}return{getLocaleData:(t="default")=>r.data[t],setLocaleData:a,addLocaleData:(t,e="default")=>{r.data[e]={...r.data[e],...t,"":{...f,...r.data[e]?.[""],...t?.[""]}},delete r.pluralForms[e],o()},resetLocaleData:(t,e)=>{r.data={},r.pluralForms={},a(t,e)},subscribe:t=>(i.add(t),()=>i.delete(t)),__:(t,e)=>{let r=c(e,void 0,t);return n?(r=n.applyFilters("i18n.gettext",r,t,e),n.applyFilters("i18n.gettext_"+l(e),r,t,e)):r},_x,_n:(t,e,r,i)=>{let o=c(i,void 0,t,e,r);return n?(o=n.applyFilters("i18n.ngettext",o,t,e,r,i),n.applyFilters("i18n.ngettext_"+l(i),o,t,e,r,i)):o},_nx:(t,e,r,i,o)=>{let s=c(o,i,t,e,r);return n?(s=n.applyFilters("i18n.ngettext_with_context",s,t,e,r,i,o),n.applyFilters("i18n.ngettext_with_context_"+l(o),s,t,e,r,i,o)):s},isRTL:()=>"rtl"===_x("ltr","text direction"),hasTranslation:(t,e,i)=>{const o=e?e+""+t:t;let s=!!r.data?.[null!=i?i:"default"]?.[o];return n&&(s=n.applyFilters("i18n.has_translation",s,t,e,i),s=n.applyFilters("i18n.has_translation_"+l(i),s,t,e,i)),s}}};var _=n(416);const m=g(void 0,void 0,_.defaultHooks),v=m,y=m.getLocaleData.bind(m),b=m.setLocaleData.bind(m),x=m.resetLocaleData.bind(m),k=m.subscribe.bind(m),__=m.__.bind(m),_x=m._x.bind(m),_n=m._n.bind(m),_nx=m._nx.bind(m),F=m.isRTL.bind(m),w=m.hasTranslation.bind(m)})(),(wp=void 0===wp?{}:wp).i18n=r})();PK.3Y�(
yTT*bunyad-amp/assets/js/wp-polyfill.asset.php<?php return array('dependencies' => array(), 'version' => 'b9604db36c7cdfdd186e');
PK.3Y�m	I�I�#bunyad-amp/assets/js/wp-polyfill.jsvar wp;(()=>{var t={};t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),function(r){"use strict";var e,n,o;e=[function(t,r,e){e(1),e(71),e(78),e(81),e(82),e(84),e(86),e(89),e(93),e(94),e(102),e(103),e(106),e(111),e(127),e(131),e(132),e(134),e(136),e(139),e(140),e(141),e(142),e(143),e(147),e(150),e(157),e(158),e(161),e(162),e(168),e(169),e(172),e(173),e(174),e(175),e(177),e(178),e(180),e(181),e(182),e(183),e(184),e(185),e(186),e(191),e(214),e(215),e(216),e(218),e(219),e(220),e(221),e(222),e(223),e(228),e(229),e(230),e(231),e(232),e(233),e(235),e(236),e(237),e(238),e(239),e(240),e(241),e(242),e(243),e(244),e(245),e(248),e(250),e(252),e(254),e(255),e(256),e(257),e(258),e(259),e(262),e(263),e(265),e(266),e(267),e(268),e(269),e(270),e(273),e(274),e(275),e(276),e(278),e(279),e(280),e(281),e(282),e(286),e(287),e(288),e(289),e(290),e(291),e(292),e(294),e(295),e(296),e(300),e(301),e(303),e(304),e(305),e(306),e(312),e(314),e(315),e(317),e(318),e(319),e(320),e(321),e(322),e(323),e(324),e(325),e(328),e(329),e(336),e(339),e(340),e(341),e(342),e(343),e(345),e(346),e(348),e(349),e(351),e(352),e(354),e(355),e(356),e(357),e(358),e(359),e(360),e(362),e(363),e(365),e(366),e(368),e(370),e(371),e(373),e(377),e(378),e(380),e(381),e(383),e(384),e(385),e(386),e(387),e(388),e(389),e(390),e(391),e(395),e(396),e(397),e(398),e(399),e(402),e(403),e(404),e(405),e(406),e(409),e(410),e(411),e(412),e(414),e(417),e(419),e(420),t.exports=e(421)},function(t,r,e){var n=e(2),o=e(39),i=e(63),a=e(68),u=e(70);n({target:"Array",proto:!0,arity:1,forced:e(6)((function(){return 4294967297!==[].push.call({length:4294967296},1)}))||!function(){try{Object.defineProperty([],"length",{writable:!1}).push()}catch(t){return t instanceof TypeError}}()},{push:function(t){var r=o(this),e=i(r),n=arguments.length;u(e+n);for(var c=0;c<n;c++)r[e]=arguments[c],e++;return a(r,e),e}})},function(t,e,n){var o=n(3),i=n(4).f,a=n(43),u=n(47),c=n(37),f=n(55),s=n(67);t.exports=function(t,e){var n,p,l,h,v,y=t.target,d=t.global,g=t.stat;if(n=d?o:g?o[y]||c(y,{}):(o[y]||{}).prototype)for(p in e){if(h=e[p],l=t.dontCallGetSet?(v=i(n,p))&&v.value:n[p],!s(d?p:y+(g?".":"#")+p,t.forced)&&l!==r){if(typeof h==typeof l)continue;f(h,l)}(t.sham||l&&l.sham)&&a(h,"sham",!0),u(n,p,h,t)}}},function(r,e){var n=function(t){return t&&t.Math==Math&&t};r.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof t.g&&t.g)||function(){return this}()||this||Function("return this")()},function(t,r,e){var n=e(5),o=e(7),i=e(9),a=e(10),u=e(11),c=e(17),f=e(38),s=e(41),p=Object.getOwnPropertyDescriptor;r.f=n?p:function(t,r){if(t=u(t),r=c(r),s)try{return p(t,r)}catch(t){}if(f(t,r))return a(!o(i.f,t,r),t[r])}},function(t,r,e){var n=e(6);t.exports=!n((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},function(t,r){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,r,e){var n=e(8),o=Function.prototype.call;t.exports=n?o.bind(o):function(){return o.apply(o,arguments)}},function(t,r,e){var n=e(6);t.exports=!n((function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")}))},function(t,r,e){var n={}.propertyIsEnumerable,o=Object.getOwnPropertyDescriptor,i=o&&!n.call({1:2},1);r.f=i?function(t){var r=o(this,t);return!!r&&r.enumerable}:n},function(t,r){t.exports=function(t,r){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:r}}},function(t,r,e){var n=e(12),o=e(15);t.exports=function(t){return n(o(t))}},function(t,r,e){var n=e(13),o=e(6),i=e(14),a=Object,u=n("".split);t.exports=o((function(){return!a("z").propertyIsEnumerable(0)}))?function(t){return"String"==i(t)?u(t,""):a(t)}:a},function(t,r,e){var n=e(8),o=Function.prototype,i=o.call,a=n&&o.bind.bind(i,i);t.exports=n?a:function(t){return function(){return i.apply(t,arguments)}}},function(t,r,e){var n=e(13),o=n({}.toString),i=n("".slice);t.exports=function(t){return i(o(t),8,-1)}},function(t,r,e){var n=e(16),o=TypeError;t.exports=function(t){if(n(t))throw o("Can't call method on "+t);return t}},function(t,e){t.exports=function(t){return null===t||t===r}},function(t,r,e){var n=e(18),o=e(22);t.exports=function(t){var r=n(t,"string");return o(r)?r:r+""}},function(t,e,n){var o=n(7),i=n(19),a=n(22),u=n(29),c=n(32),f=n(33),s=TypeError,p=f("toPrimitive");t.exports=function(t,e){if(!i(t)||a(t))return t;var n,f=u(t,p);if(f){if(e===r&&(e="default"),n=o(f,t,e),!i(n)||a(n))return n;throw s("Can't convert object to primitive value")}return e===r&&(e="number"),c(t,e)}},function(t,r,e){var n=e(20),o=e(21),i=o.all;t.exports=o.IS_HTMLDDA?function(t){return"object"==typeof t?null!==t:n(t)||t===i}:function(t){return"object"==typeof t?null!==t:n(t)}},function(t,r,e){var n=e(21),o=n.all;t.exports=n.IS_HTMLDDA?function(t){return"function"==typeof t||t===o}:function(t){return"function"==typeof t}},function(t,e){var n="object"==typeof document&&document.all,o=void 0===n&&n!==r;t.exports={all:n,IS_HTMLDDA:o}},function(t,r,e){var n=e(23),o=e(20),i=e(24),a=e(25),u=Object;t.exports=a?function(t){return"symbol"==typeof t}:function(t){var r=n("Symbol");return o(r)&&i(r.prototype,u(t))}},function(t,e,n){var o=n(3),i=n(20);t.exports=function(t,e){return arguments.length<2?(n=o[t],i(n)?n:r):o[t]&&o[t][e];var n}},function(t,r,e){var n=e(13);t.exports=n({}.isPrototypeOf)},function(t,r,e){var n=e(26);t.exports=n&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},function(t,r,e){var n=e(27),o=e(6),i=e(3).String;t.exports=!!Object.getOwnPropertySymbols&&!o((function(){var t=Symbol();return!i(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&n&&n<41}))},function(t,r,e){var n,o,i=e(3),a=e(28),u=i.process,c=i.Deno,f=u&&u.versions||c&&c.version,s=f&&f.v8;s&&(o=(n=s.split("."))[0]>0&&n[0]<4?1:+(n[0]+n[1])),!o&&a&&(!(n=a.match(/Edge\/(\d+)/))||n[1]>=74)&&(n=a.match(/Chrome\/(\d+)/))&&(o=+n[1]),t.exports=o},function(t,r){t.exports="undefined"!=typeof navigator&&String(navigator.userAgent)||""},function(t,e,n){var o=n(30),i=n(16);t.exports=function(t,e){var n=t[e];return i(n)?r:o(n)}},function(t,r,e){var n=e(20),o=e(31),i=TypeError;t.exports=function(t){if(n(t))return t;throw i(o(t)+" is not a function")}},function(t,r){var e=String;t.exports=function(t){try{return e(t)}catch(t){return"Object"}}},function(t,r,e){var n=e(7),o=e(20),i=e(19),a=TypeError;t.exports=function(t,r){var e,u;if("string"===r&&o(e=t.toString)&&!i(u=n(e,t)))return u;if(o(e=t.valueOf)&&!i(u=n(e,t)))return u;if("string"!==r&&o(e=t.toString)&&!i(u=n(e,t)))return u;throw a("Can't convert object to primitive value")}},function(t,r,e){var n=e(3),o=e(34),i=e(38),a=e(40),u=e(26),c=e(25),f=n.Symbol,s=o("wks"),p=c?f.for||f:f&&f.withoutSetter||a;t.exports=function(t){return i(s,t)||(s[t]=u&&i(f,t)?f[t]:p("Symbol."+t)),s[t]}},function(t,e,n){var o=n(35),i=n(36);(t.exports=function(t,e){return i[t]||(i[t]=e!==r?e:{})})("versions",[]).push({version:"3.31.0",mode:o?"pure":"global",copyright:"© 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.31.0/LICENSE",source:"https://github.com/zloirock/core-js"})},function(t,r){t.exports=!1},function(t,r,e){var n=e(3),o=e(37),i="__core-js_shared__",a=n[i]||o(i,{});t.exports=a},function(t,r,e){var n=e(3),o=Object.defineProperty;t.exports=function(t,r){try{o(n,t,{value:r,configurable:!0,writable:!0})}catch(e){n[t]=r}return r}},function(t,r,e){var n=e(13),o=e(39),i=n({}.hasOwnProperty);t.exports=Object.hasOwn||function(t,r){return i(o(t),r)}},function(t,r,e){var n=e(15),o=Object;t.exports=function(t){return o(n(t))}},function(t,e,n){var o=n(13),i=0,a=Math.random(),u=o(1..toString);t.exports=function(t){return"Symbol("+(t===r?"":t)+")_"+u(++i+a,36)}},function(t,r,e){var n=e(5),o=e(6),i=e(42);t.exports=!n&&!o((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},function(t,r,e){var n=e(3),o=e(19),i=n.document,a=o(i)&&o(i.createElement);t.exports=function(t){return a?i.createElement(t):{}}},function(t,r,e){var n=e(5),o=e(44),i=e(10);t.exports=n?function(t,r,e){return o.f(t,r,i(1,e))}:function(t,r,e){return t[r]=e,t}},function(t,r,e){var n=e(5),o=e(41),i=e(45),a=e(46),u=e(17),c=TypeError,f=Object.defineProperty,s=Object.getOwnPropertyDescriptor,p="enumerable",l="configurable",h="writable";r.f=n?i?function(t,r,e){if(a(t),r=u(r),a(e),"function"==typeof t&&"prototype"===r&&"value"in e&&h in e&&!e[h]){var n=s(t,r);n&&n[h]&&(t[r]=e.value,e={configurable:l in e?e[l]:n[l],enumerable:p in e?e[p]:n[p],writable:!1})}return f(t,r,e)}:f:function(t,r,e){if(a(t),r=u(r),a(e),o)try{return f(t,r,e)}catch(t){}if("get"in e||"set"in e)throw c("Accessors not supported");return"value"in e&&(t[r]=e.value),t}},function(t,r,e){var n=e(5),o=e(6);t.exports=n&&o((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},function(t,r,e){var n=e(19),o=String,i=TypeError;t.exports=function(t){if(n(t))return t;throw i(o(t)+" is not an object")}},function(t,e,n){var o=n(20),i=n(44),a=n(48),u=n(37);t.exports=function(t,e,n,c){c||(c={});var f=c.enumerable,s=c.name!==r?c.name:e;if(o(n)&&a(n,s,c),c.global)f?t[e]=n:u(e,n);else{try{c.unsafe?t[e]&&(f=!0):delete t[e]}catch(t){}f?t[e]=n:i.f(t,e,{value:n,enumerable:!1,configurable:!c.nonConfigurable,writable:!c.nonWritable})}return t}},function(t,e,n){var o=n(13),i=n(6),a=n(20),u=n(38),c=n(5),f=n(49).CONFIGURABLE,s=n(50),p=n(51),l=p.enforce,h=p.get,v=String,y=Object.defineProperty,d=o("".slice),g=o("".replace),b=o([].join),m=c&&!i((function(){return 8!==y((function(){}),"length",{value:8}).length})),x=String(String).split("String"),w=t.exports=function(t,e,n){"Symbol("===d(v(e),0,7)&&(e="["+g(v(e),/^Symbol\(([^)]*)\)/,"$1")+"]"),n&&n.getter&&(e="get "+e),n&&n.setter&&(e="set "+e),(!u(t,"name")||f&&t.name!==e)&&(c?y(t,"name",{value:e,configurable:!0}):t.name=e),m&&n&&u(n,"arity")&&t.length!==n.arity&&y(t,"length",{value:n.arity});try{n&&u(n,"constructor")&&n.constructor?c&&y(t,"prototype",{writable:!1}):t.prototype&&(t.prototype=r)}catch(t){}var o=l(t);return u(o,"source")||(o.source=b(x,"string"==typeof e?e:"")),t};Function.prototype.toString=w((function(){return a(this)&&h(this).source||s(this)}),"toString")},function(t,r,e){var n=e(5),o=e(38),i=Function.prototype,a=n&&Object.getOwnPropertyDescriptor,u=o(i,"name"),c=u&&"something"===function(){}.name,f=u&&(!n||n&&a(i,"name").configurable);t.exports={EXISTS:u,PROPER:c,CONFIGURABLE:f}},function(t,r,e){var n=e(13),o=e(20),i=e(36),a=n(Function.toString);o(i.inspectSource)||(i.inspectSource=function(t){return a(t)}),t.exports=i.inspectSource},function(t,r,e){var n,o,i,a=e(52),u=e(3),c=e(19),f=e(43),s=e(38),p=e(36),l=e(53),h=e(54),v="Object already initialized",y=u.TypeError,d=u.WeakMap;if(a||p.state){var g=p.state||(p.state=new d);g.get=g.get,g.has=g.has,g.set=g.set,n=function(t,r){if(g.has(t))throw y(v);return r.facade=t,g.set(t,r),r},o=function(t){return g.get(t)||{}},i=function(t){return g.has(t)}}else{var b=l("state");h[b]=!0,n=function(t,r){if(s(t,b))throw y(v);return r.facade=t,f(t,b,r),r},o=function(t){return s(t,b)?t[b]:{}},i=function(t){return s(t,b)}}t.exports={set:n,get:o,has:i,enforce:function(t){return i(t)?o(t):n(t,{})},getterFor:function(t){return function(r){var e;if(!c(r)||(e=o(r)).type!==t)throw y("Incompatible receiver, "+t+" required");return e}}}},function(t,r,e){var n=e(3),o=e(20),i=n.WeakMap;t.exports=o(i)&&/native code/.test(String(i))},function(t,r,e){var n=e(34),o=e(40),i=n("keys");t.exports=function(t){return i[t]||(i[t]=o(t))}},function(t,r){t.exports={}},function(t,r,e){var n=e(38),o=e(56),i=e(4),a=e(44);t.exports=function(t,r,e){for(var u=o(r),c=a.f,f=i.f,s=0;s<u.length;s++){var p=u[s];n(t,p)||e&&n(e,p)||c(t,p,f(r,p))}}},function(t,r,e){var n=e(23),o=e(13),i=e(57),a=e(66),u=e(46),c=o([].concat);t.exports=n("Reflect","ownKeys")||function(t){var r=i.f(u(t)),e=a.f;return e?c(r,e(t)):r}},function(t,r,e){var n=e(58),o=e(65).concat("length","prototype");r.f=Object.getOwnPropertyNames||function(t){return n(t,o)}},function(t,r,e){var n=e(13),o=e(38),i=e(11),a=e(59).indexOf,u=e(54),c=n([].push);t.exports=function(t,r){var e,n=i(t),f=0,s=[];for(e in n)!o(u,e)&&o(n,e)&&c(s,e);for(;r.length>f;)o(n,e=r[f++])&&(~a(s,e)||c(s,e));return s}},function(t,r,e){var n=e(11),o=e(60),i=e(63),a=function(t){return function(r,e,a){var u,c=n(r),f=i(c),s=o(a,f);if(t&&e!=e){for(;f>s;)if((u=c[s++])!=u)return!0}else for(;f>s;s++)if((t||s in c)&&c[s]===e)return t||s||0;return!t&&-1}};t.exports={includes:a(!0),indexOf:a(!1)}},function(t,r,e){var n=e(61),o=Math.max,i=Math.min;t.exports=function(t,r){var e=n(t);return e<0?o(e+r,0):i(e,r)}},function(t,r,e){var n=e(62);t.exports=function(t){var r=+t;return r!=r||0===r?0:n(r)}},function(t,r){var e=Math.ceil,n=Math.floor;t.exports=Math.trunc||function(t){var r=+t;return(r>0?n:e)(r)}},function(t,r,e){var n=e(64);t.exports=function(t){return n(t.length)}},function(t,r,e){var n=e(61),o=Math.min;t.exports=function(t){return t>0?o(n(t),9007199254740991):0}},function(t,r){t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},function(t,r){r.f=Object.getOwnPropertySymbols},function(t,r,e){var n=e(6),o=e(20),i=/#|\.prototype\./,a=function(t,r){var e=c[u(t)];return e==s||e!=f&&(o(r)?n(r):!!r)},u=a.normalize=function(t){return String(t).replace(i,".").toLowerCase()},c=a.data={},f=a.NATIVE="N",s=a.POLYFILL="P";t.exports=a},function(t,e,n){var o=n(5),i=n(69),a=TypeError,u=Object.getOwnPropertyDescriptor,c=o&&!function(){if(this!==r)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(t){return t instanceof TypeError}}();t.exports=c?function(t,r){if(i(t)&&!u(t,"length").writable)throw a("Cannot set read only .length");return t.length=r}:function(t,r){return t.length=r}},function(t,r,e){var n=e(14);t.exports=Array.isArray||function(t){return"Array"==n(t)}},function(t,r){var e=TypeError;t.exports=function(t){if(t>9007199254740991)throw e("Maximum allowed index exceeded");return t}},function(t,r,e){var n=e(2),o=e(72),i=e(11),a=e(73),u=Array;n({target:"Array",proto:!0},{toReversed:function(){return o(i(this),u)}}),a("toReversed")},function(t,r,e){var n=e(63);t.exports=function(t,r){for(var e=n(t),o=new r(e),i=0;i<e;i++)o[i]=t[e-i-1];return o}},function(t,e,n){var o=n(33),i=n(74),a=n(44).f,u=o("unscopables"),c=Array.prototype;c[u]==r&&a(c,u,{configurable:!0,value:i(null)}),t.exports=function(t){c[u][t]=!0}},function(t,e,n){var o,i=n(46),a=n(75),u=n(65),c=n(54),f=n(77),s=n(42),p=n(53),l="prototype",h="script",v=p("IE_PROTO"),y=function(){},d=function(t){return"<"+h+">"+t+"</"+h+">"},g=function(t){t.write(d("")),t.close();var r=t.parentWindow.Object;return t=null,r},b=function(){try{o=new ActiveXObject("htmlfile")}catch(t){}var t,r,e;b="undefined"!=typeof document?document.domain&&o?g(o):(r=s("iframe"),e="java"+h+":",r.style.display="none",f.appendChild(r),r.src=String(e),(t=r.contentWindow.document).open(),t.write(d("document.F=Object")),t.close(),t.F):g(o);for(var n=u.length;n--;)delete b[l][u[n]];return b()};c[v]=!0,t.exports=Object.create||function(t,e){var n;return null!==t?(y[l]=i(t),n=new y,y[l]=null,n[v]=t):n=b(),e===r?n:a.f(n,e)}},function(t,r,e){var n=e(5),o=e(45),i=e(44),a=e(46),u=e(11),c=e(76);r.f=n&&!o?Object.defineProperties:function(t,r){a(t);for(var e,n=u(r),o=c(r),f=o.length,s=0;f>s;)i.f(t,e=o[s++],n[e]);return t}},function(t,r,e){var n=e(58),o=e(65);t.exports=Object.keys||function(t){return n(t,o)}},function(t,r,e){var n=e(23);t.exports=n("document","documentElement")},function(t,e,n){var o=n(2),i=n(13),a=n(30),u=n(11),c=n(79),f=n(80),s=n(73),p=Array,l=i(f("Array").sort);o({target:"Array",proto:!0},{toSorted:function(t){t!==r&&a(t);var e=u(this),n=c(p,e);return l(n,t)}}),s("toSorted")},function(t,r,e){var n=e(63);t.exports=function(t,r){for(var e=0,o=n(r),i=new t(o);o>e;)i[e]=r[e++];return i}},function(t,r,e){var n=e(3);t.exports=function(t){return n[t].prototype}},function(t,r,e){var n=e(2),o=e(73),i=e(70),a=e(63),u=e(60),c=e(11),f=e(61),s=Array,p=Math.max,l=Math.min;n({target:"Array",proto:!0},{toSpliced:function(t,r){var e,n,o,h,v=c(this),y=a(v),d=u(t,y),g=arguments.length,b=0;for(0===g?e=n=0:1===g?(e=0,n=y-d):(e=g-2,n=l(p(f(r),0),y-d)),o=i(y+e-n),h=s(o);b<d;b++)h[b]=v[b];for(;b<d+e;b++)h[b]=arguments[b-d+2];for(;b<o;b++)h[b]=v[b+n-e];return h}}),o("toSpliced")},function(t,r,e){var n=e(2),o=e(39),i=e(63),a=e(68),u=e(83),c=e(70);n({target:"Array",proto:!0,arity:1,forced:1!==[].unshift(0)||!function(){try{Object.defineProperty([],"length",{writable:!1}).unshift()}catch(t){return t instanceof TypeError}}()},{unshift:function(t){var r=o(this),e=i(r),n=arguments.length;if(n){c(e+n);for(var f=e;f--;){var s=f+n;f in r?r[s]=r[f]:u(r,s)}for(var p=0;p<n;p++)r[p]=arguments[p]}return a(r,e+n)}})},function(t,r,e){var n=e(31),o=TypeError;t.exports=function(t,r){if(!delete t[r])throw o("Cannot delete property "+n(r)+" of "+n(t))}},function(t,r,e){var n=e(2),o=e(85),i=e(11),a=Array;n({target:"Array",proto:!0},{with:function(t,r){return o(i(this),a,t,r)}})},function(t,r,e){var n=e(63),o=e(61),i=RangeError;t.exports=function(t,r,e,a){var u=n(t),c=o(e),f=c<0?u+c:c;if(f>=u||f<0)throw i("Incorrect index");for(var s=new r(u),p=0;p<u;p++)s[p]=p===f?a:t[p];return s}},function(t,r,e){var n=e(3),o=e(5),i=e(87),a=e(88),u=e(6),c=n.RegExp,f=c.prototype;o&&u((function(){var t=!0;try{c(".","d")}catch(r){t=!1}var r={},e="",n=t?"dgimsy":"gimsy",o=function(t,n){Object.defineProperty(r,t,{get:function(){return e+=n,!0}})},i={dotAll:"s",global:"g",ignoreCase:"i",multiline:"m",sticky:"y"};for(var a in t&&(i.hasIndices="d"),i)o(a,i[a]);return Object.getOwnPropertyDescriptor(f,"flags").get.call(r)!==n||e!==n}))&&i(f,"flags",{configurable:!0,get:a})},function(t,r,e){var n=e(48),o=e(44);t.exports=function(t,r,e){return e.get&&n(e.get,r,{getter:!0}),e.set&&n(e.set,r,{setter:!0}),o.f(t,r,e)}},function(t,r,e){var n=e(46);t.exports=function(){var t=n(this),r="";return t.hasIndices&&(r+="d"),t.global&&(r+="g"),t.ignoreCase&&(r+="i"),t.multiline&&(r+="m"),t.dotAll&&(r+="s"),t.unicode&&(r+="u"),t.unicodeSets&&(r+="v"),t.sticky&&(r+="y"),r}},function(t,r,e){var n=e(2),o=e(13),i=e(15),a=e(90),u=o("".charCodeAt);n({target:"String",proto:!0},{isWellFormed:function(){for(var t=a(i(this)),r=t.length,e=0;e<r;e++){var n=u(t,e);if(55296==(63488&n)&&(n>=56320||++e>=r||56320!=(64512&u(t,e))))return!1}return!0}})},function(t,r,e){var n=e(91),o=String;t.exports=function(t){if("Symbol"===n(t))throw TypeError("Cannot convert a Symbol value to a string");return o(t)}},function(t,e,n){var o=n(92),i=n(20),a=n(14),u=n(33)("toStringTag"),c=Object,f="Arguments"==a(function(){return arguments}());t.exports=o?a:function(t){var e,n,o;return t===r?"Undefined":null===t?"Null":"string"==typeof(n=function(t,r){try{return t[r]}catch(t){}}(e=c(t),u))?n:f?a(e):"Object"==(o=a(e))&&i(e.callee)?"Arguments":o}},function(t,r,e){var n={};n[e(33)("toStringTag")]="z",t.exports="[object z]"===String(n)},function(t,r,e){var n=e(2),o=e(7),i=e(13),a=e(15),u=e(90),c=e(6),f=Array,s=i("".charAt),p=i("".charCodeAt),l=i([].join),h="".toWellFormed,v=h&&c((function(){return"1"!==o(h,1)}));n({target:"String",proto:!0,forced:v},{toWellFormed:function(){var t=u(a(this));if(v)return o(h,t);for(var r=t.length,e=f(r),n=0;n<r;n++){var i=p(t,n);55296!=(63488&i)?e[n]=s(t,n):i>=56320||n+1>=r||56320!=(64512&p(t,n+1))?e[n]="�":(e[n]=s(t,n),e[++n]=s(t,n))}return l(e,"")}})},function(t,r,e){var n=e(72),o=e(95),i=o.aTypedArray,a=o.exportTypedArrayMethod,u=o.getTypedArrayConstructor;a("toReversed",(function(){return n(i(this),u(this))}))},function(t,e,n){var o,i,a,u=n(96),c=n(5),f=n(3),s=n(20),p=n(19),l=n(38),h=n(91),v=n(31),y=n(43),d=n(47),g=n(87),b=n(24),m=n(97),x=n(99),w=n(33),S=n(40),A=n(51),E=A.enforce,O=A.get,R=f.Int8Array,I=R&&R.prototype,k=f.Uint8ClampedArray,T=k&&k.prototype,M=R&&m(R),j=I&&m(I),P=Object.prototype,D=f.TypeError,C=w("toStringTag"),_=S("TYPED_ARRAY_TAG"),N="TypedArrayConstructor",F=u&&!!x&&"Opera"!==h(f.opera),B=!1,z={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},U={BigInt64Array:8,BigUint64Array:8},L=function(t){var r=m(t);if(p(r)){var e=O(r);return e&&l(e,N)?e[N]:L(r)}},W=function(t){if(!p(t))return!1;var r=h(t);return l(z,r)||l(U,r)};for(o in z)(a=(i=f[o])&&i.prototype)?E(a)[N]=i:F=!1;for(o in U)(a=(i=f[o])&&i.prototype)&&(E(a)[N]=i);if((!F||!s(M)||M===Function.prototype)&&(M=function(){throw D("Incorrect invocation")},F))for(o in z)f[o]&&x(f[o],M);if((!F||!j||j===P)&&(j=M.prototype,F))for(o in z)f[o]&&x(f[o].prototype,j);if(F&&m(T)!==j&&x(T,j),c&&!l(j,C))for(o in B=!0,g(j,C,{configurable:!0,get:function(){return p(this)?this[_]:r}}),z)f[o]&&y(f[o],_,o);t.exports={NATIVE_ARRAY_BUFFER_VIEWS:F,TYPED_ARRAY_TAG:B&&_,aTypedArray:function(t){if(W(t))return t;throw D("Target is not a typed array")},aTypedArrayConstructor:function(t){if(s(t)&&(!x||b(M,t)))return t;throw D(v(t)+" is not a typed array constructor")},exportTypedArrayMethod:function(t,r,e,n){if(c){if(e)for(var o in z){var i=f[o];if(i&&l(i.prototype,t))try{delete i.prototype[t]}catch(e){try{i.prototype[t]=r}catch(t){}}}j[t]&&!e||d(j,t,e?r:F&&I[t]||r,n)}},exportTypedArrayStaticMethod:function(t,r,e){var n,o;if(c){if(x){if(e)for(n in z)if((o=f[n])&&l(o,t))try{delete o[t]}catch(t){}if(M[t]&&!e)return;try{return d(M,t,e?r:F&&M[t]||r)}catch(t){}}for(n in z)!(o=f[n])||o[t]&&!e||d(o,t,r)}},getTypedArrayConstructor:L,isView:function(t){if(!p(t))return!1;var r=h(t);return"DataView"===r||l(z,r)||l(U,r)},isTypedArray:W,TypedArray:M,TypedArrayPrototype:j}},function(t,r){t.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},function(t,r,e){var n=e(38),o=e(20),i=e(39),a=e(53),u=e(98),c=a("IE_PROTO"),f=Object,s=f.prototype;t.exports=u?f.getPrototypeOf:function(t){var r=i(t);if(n(r,c))return r[c];var e=r.constructor;return o(e)&&r instanceof e?e.prototype:r instanceof f?s:null}},function(t,r,e){var n=e(6);t.exports=!n((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype}))},function(t,e,n){var o=n(100),i=n(46),a=n(101);t.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var t,r=!1,e={};try{(t=o(Object.prototype,"__proto__","set"))(e,[]),r=e instanceof Array}catch(t){}return function(e,n){return i(e),a(n),r?t(e,n):e.__proto__=n,e}}():r)},function(t,r,e){var n=e(13),o=e(30);t.exports=function(t,r,e){try{return n(o(Object.getOwnPropertyDescriptor(t,r)[e]))}catch(t){}}},function(t,r,e){var n=e(20),o=String,i=TypeError;t.exports=function(t){if("object"==typeof t||n(t))return t;throw i("Can't set "+o(t)+" as a prototype")}},function(t,e,n){var o=n(95),i=n(13),a=n(30),u=n(79),c=o.aTypedArray,f=o.getTypedArrayConstructor,s=o.exportTypedArrayMethod,p=i(o.TypedArrayPrototype.sort);s("toSorted",(function(t){t!==r&&a(t);var e=c(this),n=u(f(e),e);return p(n,t)}))},function(t,r,e){var n=e(85),o=e(95),i=e(104),a=e(61),u=e(105),c=o.aTypedArray,f=o.getTypedArrayConstructor,s=o.exportTypedArrayMethod,p=!!function(){try{new Int8Array(1).with(2,{valueOf:function(){throw 8}})}catch(t){return 8===t}}();s("with",{with:function(t,r){var e=c(this),o=a(t),s=i(e)?u(r):+r;return n(e,f(e),o,s)}}.with,!p)},function(t,r,e){var n=e(91);t.exports=function(t){var r=n(t);return"BigInt64Array"==r||"BigUint64Array"==r}},function(t,r,e){var n=e(18),o=TypeError;t.exports=function(t){var r=n(t,"number");if("number"==typeof r)throw o("Can't convert number to bigint");return BigInt(r)}},function(t,e,n){var o=n(2),i=n(24),a=n(97),u=n(99),c=n(55),f=n(74),s=n(43),p=n(10),l=n(107),h=n(110),v=n(33)("toStringTag"),y=Error,d=function(t,e,n){var o,c=i(g,this);return u?o=u(y(),c?a(this):g):(o=c?this:f(g),s(o,v,"Error")),n!==r&&s(o,"message",h(n)),l(o,d,o.stack,1),s(o,"error",t),s(o,"suppressed",e),o};u?u(d,y):c(d,y,{name:!0});var g=d.prototype=f(y.prototype,{constructor:p(1,d),message:p(1,""),name:p(1,"SuppressedError")});o({global:!0,constructor:!0,arity:3},{SuppressedError:d})},function(t,r,e){var n=e(43),o=e(108),i=e(109),a=Error.captureStackTrace;t.exports=function(t,r,e,u){i&&(a?a(t,r):n(t,"stack",o(e,u)))}},function(t,r,e){var n=e(13),o=Error,i=n("".replace),a=String(o("zxcasd").stack),u=/\n\s*at [^:]*:[^\n]*/,c=u.test(a);t.exports=function(t,r){if(c&&"string"==typeof t&&!o.prepareStackTrace)for(;r--;)t=i(t,u,"");return t}},function(t,r,e){var n=e(6),o=e(10);t.exports=!n((function(){var t=Error("a");return!("stack"in t)||(Object.defineProperty(t,"stack",o(1,7)),7!==t.stack)}))},function(t,e,n){var o=n(90);t.exports=function(t,e){return t===r?arguments.length<2?"":e:o(t)}},function(t,r,e){e(2)({target:"Array",stat:!0},{fromAsync:e(112)})},function(t,e,n){var o=n(113),i=n(13),a=n(39),u=n(115),c=n(116),f=n(121),s=n(124),p=n(122),l=n(29),h=n(80),v=n(23),y=n(33),d=n(117),g=n(125).toArray,b=y("asyncIterator"),m=i(h("Array").values),x=i(m([]).next),w=function(){return new S(this)},S=function(t){this.iterator=m(t)};S.prototype.next=function(){return x(this.iterator)},t.exports=function(t){var e=this,n=arguments.length,i=n>1?arguments[1]:r,h=n>2?arguments[2]:r;return new(v("Promise"))((function(n){var v=a(t);i!==r&&(i=o(i,h));var y=l(v,b),m=y?r:p(v)||w,x=u(e)?new e:[],S=y?c(v,y):new d(s(f(v,m)));n(g(S,i,x))}))}},function(t,e,n){var o=n(114),i=n(30),a=n(8),u=o(o.bind);t.exports=function(t,e){return i(t),e===r?t:a?u(t,e):function(){return t.apply(e,arguments)}}},function(t,r,e){var n=e(14),o=e(13);t.exports=function(t){if("Function"===n(t))return o(t)}},function(t,r,e){var n=e(13),o=e(6),i=e(20),a=e(91),u=e(23),c=e(50),f=function(){},s=[],p=u("Reflect","construct"),l=/^\s*(?:class|function)\b/,h=n(l.exec),v=!l.exec(f),y=function(t){if(!i(t))return!1;try{return p(f,s,t),!0}catch(t){return!1}},d=function(t){if(!i(t))return!1;switch(a(t)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return v||!!h(l,c(t))}catch(t){return!0}};d.sham=!0,t.exports=!p||o((function(){var t;return y(y.call)||!y(Object)||!y((function(){t=!0}))||t}))?d:y},function(t,r,e){var n=e(7),o=e(117),i=e(46),a=e(121),u=e(124),c=e(29),f=e(33)("asyncIterator");t.exports=function(t,r){var e=arguments.length<2?c(t,f):r;return e?i(n(e,t)):new o(u(a(t)))}},function(t,e,n){var o=n(7),i=n(46),a=n(74),u=n(29),c=n(118),f=n(51),s=n(23),p=n(119),l=n(120),h=s("Promise"),v="AsyncFromSyncIterator",y=f.set,d=f.getterFor(v),g=function(t,r,e){var n=t.done;h.resolve(t.value).then((function(t){r(l(t,n))}),e)},b=function(t){t.type=v,y(this,t)};b.prototype=c(a(p),{next:function(){var t=d(this);return new h((function(r,e){var n=i(o(t.next,t.iterator));g(n,r,e)}))},return:function(){var t=d(this).iterator;return new h((function(e,n){var a=u(t,"return");if(a===r)return e(l(r,!0));var c=i(o(a,t));g(c,e,n)}))}}),t.exports=b},function(t,r,e){var n=e(47);t.exports=function(t,r,e){for(var o in r)n(t,o,r[o],e);return t}},function(t,r,e){var n,o,i=e(3),a=e(36),u=e(20),c=e(74),f=e(97),s=e(47),p=e(33),l=e(35),h="USE_FUNCTION_CONSTRUCTOR",v=p("asyncIterator"),y=i.AsyncIterator,d=a.AsyncIteratorPrototype;if(d)n=d;else if(u(y))n=y.prototype;else if(a[h]||i[h])try{o=f(f(f(Function("return async function*(){}()")()))),f(o)===Object.prototype&&(n=o)}catch(t){}n?l&&(n=c(n)):n={},u(n[v])||s(n,v,(function(){return this})),t.exports=n},function(t,r){t.exports=function(t,r){return{value:t,done:r}}},function(t,r,e){var n=e(7),o=e(30),i=e(46),a=e(31),u=e(122),c=TypeError;t.exports=function(t,r){var e=arguments.length<2?u(t):r;if(o(e))return i(n(e,t));throw c(a(t)+" is not iterable")}},function(t,r,e){var n=e(91),o=e(29),i=e(16),a=e(123),u=e(33)("iterator");t.exports=function(t){if(!i(t))return o(t,u)||o(t,"@@iterator")||a[n(t)]}},function(t,r){t.exports={}},function(t,r){t.exports=function(t){return{iterator:t,next:t.next,done:!1}}},function(t,e,n){var o=n(7),i=n(30),a=n(46),u=n(19),c=n(70),f=n(23),s=n(124),p=n(126),l=function(t){var e=0==t,n=1==t,l=2==t,h=3==t;return function(t,v,y){a(t);var d=v!==r;!d&&e||i(v);var g=s(t),b=f("Promise"),m=g.iterator,x=g.next,w=0;return new b((function(t,i){var f=function(t){p(m,i,t,i)},s=function(){try{if(d)try{c(w)}catch(t){f(t)}b.resolve(a(o(x,m))).then((function(o){try{if(a(o).done)e?(y.length=w,t(y)):t(!h&&(l||r));else{var c=o.value;try{if(d){var g=v(c,w),x=function(r){if(n)s();else if(l)r?s():p(m,t,!1,i);else if(e)try{y[w++]=r,s()}catch(t){f(t)}else r?p(m,t,h||c,i):s()};u(g)?b.resolve(g).then(x,f):x(g)}else y[w++]=c,s()}catch(t){f(t)}}}catch(t){i(t)}}),i)}catch(t){i(t)}};s()}))}};t.exports={toArray:l(0),forEach:l(1),every:l(2),some:l(3),find:l(4)}},function(t,r,e){var n=e(7),o=e(23),i=e(29);t.exports=function(t,r,e,a){try{var u=i(t,"return");if(u)return o("Promise").resolve(n(u,t)).then((function(){r(e)}),(function(t){a(t)}))}catch(t){return a(t)}r(e)}},function(t,e,n){var o=n(2),i=n(128).filterReject,a=n(73);o({target:"Array",proto:!0,forced:!0},{filterOut:function(t){return i(this,t,arguments.length>1?arguments[1]:r)}}),a("filterOut")},function(t,e,n){var o=n(113),i=n(13),a=n(12),u=n(39),c=n(63),f=n(129),s=i([].push),p=function(t){var e=1==t,n=2==t,i=3==t,p=4==t,l=6==t,h=7==t,v=5==t||l;return function(y,d,g,b){for(var m,x,w=u(y),S=a(w),A=o(d,g),E=c(S),O=0,R=b||f,I=e?R(y,E):n||h?R(y,0):r;E>O;O++)if((v||O in S)&&(x=A(m=S[O],O,w),t))if(e)I[O]=x;else if(x)switch(t){case 3:return!0;case 5:return m;case 6:return O;case 2:s(I,m)}else switch(t){case 4:return!1;case 7:s(I,m)}return l?-1:i||p?p:I}};t.exports={forEach:p(0),map:p(1),filter:p(2),some:p(3),every:p(4),find:p(5),findIndex:p(6),filterReject:p(7)}},function(t,r,e){var n=e(130);t.exports=function(t,r){return new(n(t))(0===r?0:r)}},function(t,e,n){var o=n(69),i=n(115),a=n(19),u=n(33)("species"),c=Array;t.exports=function(t){var e;return o(t)&&(e=t.constructor,(i(e)&&(e===c||o(e.prototype))||a(e)&&null===(e=e[u]))&&(e=r)),e===r?c:e}},function(t,e,n){var o=n(2),i=n(128).filterReject,a=n(73);o({target:"Array",proto:!0,forced:!0},{filterReject:function(t){return i(this,t,arguments.length>1?arguments[1]:r)}}),a("filterReject")},function(t,e,n){var o=n(2),i=n(133),a=n(73);o({target:"Array",proto:!0},{group:function(t){return i(this,t,arguments.length>1?arguments[1]:r)}}),a("group")},function(t,r,e){var n=e(113),o=e(13),i=e(12),a=e(39),u=e(17),c=e(63),f=e(74),s=e(79),p=Array,l=o([].push);t.exports=function(t,r,e,o){for(var h,v,y,d=a(t),g=i(d),b=n(r,e),m=f(null),x=c(g),w=0;x>w;w++)y=g[w],(v=u(b(y,w,d)))in m?l(m[v],y):m[v]=[y];if(o&&(h=o(d))!==p)for(v in m)m[v]=s(h,m[v]);return m}},function(t,e,n){var o=n(2),i=n(133),a=n(135),u=n(73);o({target:"Array",proto:!0,forced:!a("groupBy")},{groupBy:function(t){return i(this,t,arguments.length>1?arguments[1]:r)}}),u("groupBy")},function(t,r,e){var n=e(6);t.exports=function(t,r){var e=[][t];return!!e&&n((function(){e.call(null,r||function(){return 1},1)}))}},function(t,r,e){var n=e(2),o=e(135),i=e(73),a=e(137);n({target:"Array",proto:!0,name:"groupToMap",forced:e(35)||!o("groupByToMap")},{groupByToMap:a}),i("groupByToMap")},function(t,e,n){var o=n(113),i=n(13),a=n(12),u=n(39),c=n(63),f=n(138),s=f.Map,p=f.get,l=f.has,h=f.set,v=i([].push);t.exports=function(t){for(var e,n,i=u(this),f=a(i),y=o(t,arguments.length>1?arguments[1]:r),d=new s,g=c(f),b=0;g>b;b++)e=y(n=f[b],b,i),l(d,e)?v(p(d,e),n):h(d,e,[n]);return d}},function(t,r,e){var n=e(13),o=Map.prototype;t.exports={Map,set:n(o.set),get:n(o.get),has:n(o.has),remove:n(o.delete),proto:o}},function(t,r,e){var n=e(2),o=e(73),i=e(137);n({target:"Array",proto:!0,forced:e(35)},{groupToMap:i}),o("groupToMap")},function(t,e,n){var o=n(2),i=n(69),a=Object.isFrozen,u=function(t,e){if(!a||!i(t)||!a(t))return!1;for(var n,o=0,u=t.length;o<u;)if(!("string"==typeof(n=t[o++])||e&&n===r))return!1;return 0!==u};o({target:"Array",stat:!0,sham:!0,forced:!0},{isTemplateObject:function(t){if(!u(t,!0))return!1;var r=t.raw;return r.length===t.length&&u(r,!1)}})},function(t,r,e){var n=e(5),o=e(73),i=e(39),a=e(63),u=e(87);n&&(u(Array.prototype,"lastIndex",{configurable:!0,get:function(){var t=i(this),r=a(t);return 0==r?0:r-1}}),o("lastIndex"))},function(t,e,n){var o=n(5),i=n(73),a=n(39),u=n(63),c=n(87);o&&(c(Array.prototype,"lastItem",{configurable:!0,get:function(){var t=a(this),e=u(t);return 0==e?r:t[e-1]},set:function(t){var r=a(this),e=u(r);return r[0==e?0:e-1]=t}}),i("lastItem"))},function(t,r,e){var n=e(2),o=e(73);n({target:"Array",proto:!0,forced:!0},{uniqueBy:e(144)}),o("uniqueBy")},function(t,r,e){var n=e(13),o=e(30),i=e(16),a=e(63),u=e(39),c=e(138),f=e(145),s=c.Map,p=c.has,l=c.set,h=n([].push);t.exports=function(t){var r,e,n,c=u(this),v=a(c),y=[],d=new s,g=i(t)?function(t){return t}:o(t);for(r=0;r<v;r++)n=g(e=c[r]),p(d,n)||l(d,n,e);return f(d,(function(t){h(y,t)})),y}},function(t,r,e){var n=e(13),o=e(146),i=e(138),a=i.Map,u=i.proto,c=n(u.forEach),f=n(u.entries),s=f(new a).next;t.exports=function(t,r,e){return e?o(f(t),(function(t){return r(t[1],t[0])}),s):c(t,r)}},function(t,e,n){var o=n(7);t.exports=function(t,e,n){for(var i,a,u=n||t.next;!(i=o(u,t)).done;)if((a=e(i.value))!==r)return a}},function(t,r,e){var n=e(5),o=e(87),i=e(148),a=ArrayBuffer.prototype;n&&!("detached"in a)&&o(a,"detached",{configurable:!0,get:function(){return i(this)}})},function(t,r,e){var n=e(13),o=e(149),i=n(ArrayBuffer.prototype.slice);t.exports=function(t){if(0!==o(t))return!1;try{return i(t,0,0),!1}catch(t){return!0}}},function(t,r,e){var n=e(100),o=e(14),i=TypeError;t.exports=n(ArrayBuffer.prototype,"byteLength","get")||function(t){if("ArrayBuffer"!=o(t))throw i("ArrayBuffer expected");return t.byteLength}},function(t,e,n){var o=n(2),i=n(151);i&&o({target:"ArrayBuffer",proto:!0},{transfer:function(){return i(this,arguments.length?arguments[0]:r,!0)}})},function(t,e,n){var o=n(3),i=n(13),a=n(100),u=n(152),c=n(148),f=n(149),s=n(153),p=o.TypeError,l=o.structuredClone,h=o.ArrayBuffer,v=o.DataView,y=Math.min,d=h.prototype,g=v.prototype,b=i(d.slice),m=a(d,"resizable","get"),x=a(d,"maxByteLength","get"),w=i(g.getInt8),S=i(g.setInt8);t.exports=s&&function(t,e,n){var o=f(t),i=e===r?o:u(e),a=!m||!m(t);if(c(t))throw p("ArrayBuffer is detached");var s=l(t,{transfer:[t]});if(o==i&&(n||a))return s;if(o>=i&&(!n||a))return b(s,0,i);for(var d=n&&!a&&x?{maxByteLength:x(s)}:r,g=new h(i,d),A=new v(s),E=new v(g),O=y(i,o),R=0;R<O;R++)S(E,R,w(A,R));return g}},function(t,e,n){var o=n(61),i=n(64),a=RangeError;t.exports=function(t){if(t===r)return 0;var e=o(t),n=i(e);if(e!==n)throw a("Wrong length or index");return n}},function(t,r,e){var n=e(3),o=e(6),i=e(27),a=e(154),u=e(155),c=e(156),f=n.structuredClone;t.exports=!!f&&!o((function(){if(u&&i>92||c&&i>94||a&&i>97)return!1;var t=new ArrayBuffer(8),r=f(t,{transfer:[t]});return 0!=t.byteLength||8!=r.byteLength}))},function(t,r,e){var n=e(155),o=e(156);t.exports=!n&&!o&&"object"==typeof window&&"object"==typeof document},function(t,r){t.exports="object"==typeof Deno&&Deno&&"object"==typeof Deno.version},function(t,r,e){var n=e(14);t.exports="undefined"!=typeof process&&"process"==n(process)},function(t,e,n){var o=n(2),i=n(151);i&&o({target:"ArrayBuffer",proto:!0},{transferToFixedLength:function(){return i(this,arguments.length?arguments[0]:r,!1)}})},function(t,e,n){var o=n(2),i=n(5),a=n(23),u=n(30),c=n(159),f=n(47),s=n(118),p=n(87),l=n(33),h=n(51),v=n(160),y=a("Promise"),d=a("SuppressedError"),g=ReferenceError,b=l("asyncDispose"),m=l("toStringTag"),x="AsyncDisposableStack",w=h.set,S=h.getterFor(x),A="async-dispose",E="disposed",O=function(t){var r=S(t);if(r.state==E)throw g(x+" already disposed");return r},R=function(){w(c(this,I),{type:x,state:"pending",stack:[]}),i||(this.disposed=!1)},I=R.prototype;s(I,{disposeAsync:function(){var t=this;return new y((function(e,n){var o=S(t);if(o.state==E)return e(r);o.state=E,i||(t.disposed=!0);var a,u=o.stack,c=u.length,f=!1,s=function(t){f?a=new d(t,a):(f=!0,a=t),p()},p=function(){if(c){var t=u[--c];u[c]=null;try{y.resolve(t()).then(p,s)}catch(t){s(t)}}else o.stack=null,f?n(a):e(r)};p()}))},use:function(t){return v(O(this),t,A),t},adopt:function(t,e){var n=O(this);return u(e),v(n,r,A,(function(){return e(t)})),t},defer:function(t){var e=O(this);u(t),v(e,r,A,t)},move:function(){var t=O(this),r=new R;return S(r).stack=t.stack,t.stack=[],t.state=E,i||(this.disposed=!0),r}}),i&&p(I,"disposed",{configurable:!0,get:function(){return S(this).state==E}}),f(I,b,I.disposeAsync,{name:"disposeAsync"}),f(I,m,x,{nonWritable:!0}),o({global:!0,constructor:!0,forced:!0},{AsyncDisposableStack:R})},function(t,r,e){var n=e(24),o=TypeError;t.exports=function(t,r){if(n(r,t))return t;throw o("Incorrect invocation")}},function(t,e,n){var o=n(13),i=n(113),a=n(46),u=n(16),c=n(29),f=n(33),s=f("asyncDispose"),p=f("dispose"),l=o([].push),h=function(t,r,e){return i(e||function(t,r){return"async-dispose"==r&&c(t,s)||c(t,p)}(t,r),t)};t.exports=function(t,e,n,o){var i;if(o)i=h(r,n,o);else{if(u(e))return;i=h(a(e),n)}l(t.stack,i)}},function(t,r,e){var n=e(2),o=e(159),i=e(43),a=e(38),u=e(33),c=e(119),f=e(35),s=u("toStringTag"),p=function(){o(this,c)};p.prototype=c,a(c,s)||i(c,s,"AsyncIterator"),!f&&a(c,"constructor")&&c.constructor!==Object||i(c,"constructor",p),n({global:!0,constructor:!0,forced:f},{AsyncIterator:p})},function(t,r,e){e(2)({target:"AsyncIterator",name:"indexed",proto:!0,real:!0,forced:!0},{asIndexedPairs:e(163)})},function(t,r,e){var n=e(7),o=e(164),i=function(t,r){return[r,t]};t.exports=function(){return n(o,this,i)}},function(t,e,n){var o=n(7),i=n(30),a=n(46),u=n(19),c=n(124),f=n(165),s=n(120),p=n(126),l=f((function(t){var e=this,n=e.iterator,i=e.mapper;return new t((function(c,f){var l=function(t){e.done=!0,f(t)},h=function(t){p(n,l,t,l)};t.resolve(a(o(e.next,n))).then((function(n){try{if(a(n).done)e.done=!0,c(s(r,!0));else{var o=n.value;try{var f=i(o,e.counter++),p=function(t){c(s(t,!1))};u(f)?t.resolve(f).then(p,h):p(f)}catch(t){h(t)}}}catch(t){l(t)}}),l)}))}));t.exports=function(t){return a(this),i(t),new l(c(this),{mapper:t})}},function(t,e,n){var o=n(7),i=n(166),a=n(46),u=n(74),c=n(43),f=n(118),s=n(33),p=n(51),l=n(23),h=n(29),v=n(119),y=n(120),d=n(167),g=l("Promise"),b=s("toStringTag"),m="AsyncIteratorHelper",x="WrapForValidAsyncIterator",w=p.set,S=function(t){var e=!t,n=p.getterFor(t?x:m),c=function(t){var o=i((function(){return n(t)})),a=o.error,u=o.value;return a||e&&u.done?{exit:!0,value:a?g.reject(u):g.resolve(y(r,!0))}:{exit:!1,value:u}};return f(u(v),{next:function(){var t=c(this),r=t.value;if(t.exit)return r;var e=i((function(){return a(r.nextHandler(g))})),n=e.error,o=e.value;return n&&(r.done=!0),n?g.reject(o):g.resolve(o)},return:function(){var e=c(this),n=e.value;if(e.exit)return n;n.done=!0;var u,f,s=n.iterator,p=i((function(){if(n.inner)try{d(n.inner.iterator,"normal")}catch(t){return d(s,"throw",t)}return h(s,"return")}));return u=f=p.value,p.error?g.reject(f):u===r?g.resolve(y(r,!0)):(f=(p=i((function(){return o(u,s)}))).value,p.error?g.reject(f):t?g.resolve(f):g.resolve(f).then((function(t){return a(t),y(r,!0)})))}})},A=S(!0),E=S(!1);c(E,b,"Async Iterator Helper"),t.exports=function(t,r){var e=function(e,n){n?(n.iterator=e.iterator,n.next=e.next):n=e,n.type=r?x:m,n.nextHandler=t,n.counter=0,n.done=!1,w(this,n)};return e.prototype=r?A:E,e}},function(t,r){t.exports=function(t){try{return{error:!1,value:t()}}catch(t){return{error:!0,value:t}}}},function(t,r,e){var n=e(7),o=e(46),i=e(29);t.exports=function(t,r,e){var a,u;o(t);try{if(!(a=i(t,"return"))){if("throw"===r)throw e;return e}a=n(a,t)}catch(t){u=!0,a=t}if("throw"===r)throw e;if(u)throw a;return o(a),e}},function(t,e,n){var o=n(7),i=n(47),a=n(23),u=n(29),c=n(38),f=n(33),s=n(119),p=f("asyncDispose"),l=a("Promise");c(s,p)||i(s,p,(function(){var t=this;return new l((function(e,n){var i=u(t,"return");i?l.resolve(o(i,t)).then((function(){e(r)}),n):e(r)}))}))},function(t,e,n){var o=n(2),i=n(7),a=n(46),u=n(124),c=n(170),f=n(171),s=n(165),p=n(120),l=s((function(t){var e=this;return new t((function(n,o){var u=function(t){e.done=!0,o(t)},c=function(){try{t.resolve(a(i(e.next,e.iterator))).then((function(t){try{a(t).done?(e.done=!0,n(p(r,!0))):e.remaining?(e.remaining--,c()):n(p(t.value,!1))}catch(t){u(t)}}),u)}catch(t){u(t)}};c()}))}));o({target:"AsyncIterator",proto:!0,real:!0},{drop:function(t){a(this);var r=f(c(+t));return new l(u(this),{remaining:r})}})},function(t,r){var e=RangeError;t.exports=function(t){if(t==t)return t;throw e("NaN is not allowed")}},function(t,r,e){var n=e(61),o=RangeError;t.exports=function(t){var r=n(t);if(r<0)throw o("The argument can't be less than 0");return r}},function(t,r,e){var n=e(2),o=e(125).every;n({target:"AsyncIterator",proto:!0,real:!0},{every:function(t){return o(this,t)}})},function(t,e,n){var o=n(2),i=n(7),a=n(30),u=n(46),c=n(19),f=n(124),s=n(165),p=n(120),l=n(126),h=s((function(t){var e=this,n=e.iterator,o=e.predicate;return new t((function(a,f){var s=function(t){e.done=!0,f(t)},h=function(t){l(n,s,t,s)},v=function(){try{t.resolve(u(i(e.next,n))).then((function(n){try{if(u(n).done)e.done=!0,a(p(r,!0));else{var i=n.value;try{var f=o(i,e.counter++),l=function(t){t?a(p(i,!1)):v()};c(f)?t.resolve(f).then(l,h):l(f)}catch(t){h(t)}}}catch(t){s(t)}}),s)}catch(t){s(t)}};v()}))}));o({target:"AsyncIterator",proto:!0,real:!0},{filter:function(t){return u(this),a(t),new h(f(this),{predicate:t})}})},function(t,r,e){var n=e(2),o=e(125).find;n({target:"AsyncIterator",proto:!0,real:!0},{find:function(t){return o(this,t)}})},function(t,e,n){var o=n(2),i=n(7),a=n(30),u=n(46),c=n(19),f=n(124),s=n(165),p=n(120),l=n(176),h=n(126),v=s((function(t){var e=this,n=e.iterator,o=e.mapper;return new t((function(a,f){var s=function(t){e.done=!0,f(t)},v=function(t){h(n,s,t,s)},y=function(){try{t.resolve(u(i(e.next,n))).then((function(n){try{if(u(n).done)e.done=!0,a(p(r,!0));else{var i=n.value;try{var f=o(i,e.counter++),h=function(t){try{e.inner=l(t),d()}catch(t){v(t)}};c(f)?t.resolve(f).then(h,v):h(f)}catch(t){v(t)}}}catch(t){s(t)}}),s)}catch(t){s(t)}},d=function(){var r=e.inner;if(r)try{t.resolve(u(i(r.next,r.iterator))).then((function(t){try{u(t).done?(e.inner=null,y()):a(p(t.value,!1))}catch(t){v(t)}}),v)}catch(t){v(t)}else y()};d()}))}));o({target:"AsyncIterator",proto:!0,real:!0},{flatMap:function(t){return u(this),a(t),new v(f(this),{mapper:t,inner:null})}})},function(t,e,n){var o=n(7),i=n(20),a=n(46),u=n(124),c=n(122),f=n(29),s=n(33),p=n(117),l=s("asyncIterator");t.exports=function(t){var e,n=a(t),s=!0,h=f(n,l);return i(h)||(h=c(n),s=!1),h!==r?e=o(h,n):(e=n,s=!0),a(e),u(s?e:new p(u(e)))}},function(t,r,e){var n=e(2),o=e(125).forEach;n({target:"AsyncIterator",proto:!0,real:!0},{forEach:function(t){return o(this,t)}})},function(t,r,e){var n=e(2),o=e(39),i=e(24),a=e(176),u=e(119),c=e(179);n({target:"AsyncIterator",stat:!0},{from:function(t){var r=a("string"==typeof t?o(t):t);return i(u,r.iterator)?r.iterator:new c(r)}})},function(t,r,e){var n=e(7),o=e(165);t.exports=o((function(){return n(this.next,this.iterator)}),!0)},function(t,r,e){e(2)({target:"AsyncIterator",proto:!0,real:!0,forced:!0},{indexed:e(163)})},function(t,r,e){e(2)({target:"AsyncIterator",proto:!0,real:!0},{map:e(164)})},function(t,e,n){var o=n(2),i=n(7),a=n(30),u=n(46),c=n(19),f=n(23),s=n(124),p=n(126),l=f("Promise"),h=TypeError;o({target:"AsyncIterator",proto:!0,real:!0},{reduce:function(t){u(this),a(t);var e=s(this),n=e.iterator,o=e.next,f=arguments.length<2,v=f?r:arguments[1],y=0;return new l((function(r,e){var a=function(t){p(n,e,t,e)},s=function(){try{l.resolve(u(i(o,n))).then((function(n){try{if(u(n).done)f?e(h("Reduce of empty iterator with no initial value")):r(v);else{var o=n.value;if(f)f=!1,v=o,s();else try{var i=t(v,o,y),p=function(t){v=t,s()};c(i)?l.resolve(i).then(p,a):p(i)}catch(t){a(t)}}y++}catch(t){e(t)}}),e)}catch(t){e(t)}};s()}))}})},function(t,r,e){var n=e(2),o=e(125).some;n({target:"AsyncIterator",proto:!0,real:!0},{some:function(t){return o(this,t)}})},function(t,e,n){var o=n(2),i=n(7),a=n(46),u=n(124),c=n(170),f=n(171),s=n(165),p=n(120),l=s((function(t){var e,n=this,o=n.iterator;if(!n.remaining--){var u=p(r,!0);return n.done=!0,(e=o.return)!==r?t.resolve(i(e,o,r)).then((function(){return u})):u}return t.resolve(i(n.next,o)).then((function(t){return a(t).done?(n.done=!0,p(r,!0)):p(t.value,!1)})).then(null,(function(t){throw n.done=!0,t}))}));o({target:"AsyncIterator",proto:!0,real:!0},{take:function(t){a(this);var r=f(c(+t));return new l(u(this),{remaining:r})}})},function(t,e,n){var o=n(2),i=n(125).toArray;o({target:"AsyncIterator",proto:!0,real:!0},{toArray:function(){return i(this,r,[])}})},function(t,r,e){var n=e(2),o=e(187);"function"==typeof BigInt&&n({target:"BigInt",stat:!0,forced:!0},{range:function(t,r,e){return new o(t,r,e,"bigint",BigInt(0),BigInt(1))}})},function(t,e,n){var o=n(51),i=n(188),a=n(120),u=n(16),c=n(19),f=n(87),s=n(5),p="Incorrect Iterator.range arguments",l="NumericRangeIterator",h=o.set,v=o.getterFor(l),y=RangeError,d=TypeError,g=i((function(t,e,n,o,i,a){if(typeof t!=o||e!==1/0&&e!==-1/0&&typeof e!=o)throw d(p);if(t===1/0||t===-1/0)throw y(p);var f,v=e>t,g=!1;if(n===r)f=r;else if(c(n))f=n.step,g=!!n.inclusive;else{if(typeof n!=o)throw d(p);f=n}if(u(f)&&(f=v?a:-a),typeof f!=o)throw d(p);if(f===1/0||f===-1/0||f===i&&t!==e)throw y(p);h(this,{type:l,start:t,end:e,step:f,inclusive:g,hitsEnd:t!=t||e!=e||f!=f||e>t!=f>i,currentCount:i,zero:i}),s||(this.start=t,this.end=e,this.step=f,this.inclusive=g)}),l,(function(){var t=v(this);if(t.hitsEnd)return a(r,!0);var e=t.start,n=t.end,o=e+t.step*t.currentCount++;o===n&&(t.hitsEnd=!0);var i=t.inclusive;return(n>e?i?o>n:o>=n:i?n>o:n>=o)?(t.hitsEnd=!0,a(r,!0)):a(o,!1)})),b=function(t){f(g.prototype,t,{get:function(){return v(this)[t]},set:function(){},configurable:!0,enumerable:!1})};s&&(b("start"),b("end"),b("inclusive"),b("step")),t.exports=g},function(t,r,e){var n=e(189).IteratorPrototype,o=e(74),i=e(10),a=e(190),u=e(123),c=function(){return this};t.exports=function(t,r,e,f){var s=r+" Iterator";return t.prototype=o(n,{next:i(+!f,e)}),a(t,s,!1,!0),u[s]=c,t}},function(t,r,e){var n,o,i,a=e(6),u=e(20),c=e(19),f=e(74),s=e(97),p=e(47),l=e(33),h=e(35),v=l("iterator"),y=!1;[].keys&&("next"in(i=[].keys())?(o=s(s(i)))!==Object.prototype&&(n=o):y=!0),!c(n)||a((function(){var t={};return n[v].call(t)!==t}))?n={}:h&&(n=f(n)),u(n[v])||p(n,v,(function(){return this})),t.exports={IteratorPrototype:n,BUGGY_SAFARI_ITERATORS:y}},function(t,r,e){var n=e(44).f,o=e(38),i=e(33)("toStringTag");t.exports=function(t,r,e){t&&!e&&(t=t.prototype),t&&!o(t,i)&&n(t,i,{configurable:!0,value:r})}},function(t,r,e){var n=e(2),o=e(192),i=e(193),a=e(23),u=e(74),c=Object,f=function(){var t=a("Object","freeze");return t?t(u(null)):u(null)};n({global:!0,forced:!0},{compositeKey:function(){return o(i,c,arguments).get("object",f)}})},function(t,r,e){var n=e(8),o=Function.prototype,i=o.apply,a=o.call;t.exports="object"==typeof Reflect&&Reflect.apply||(n?a.bind(i):function(){return a.apply(i,arguments)})},function(t,r,e){e(194),e(211);var n=e(23),o=e(74),i=e(19),a=Object,u=TypeError,c=n("Map"),f=n("WeakMap"),s=function(){this.object=null,this.symbol=null,this.primitives=null,this.objectsByIndex=o(null)};s.prototype.get=function(t,r){return this[t]||(this[t]=r())},s.prototype.next=function(t,r,e){var n=e?this.objectsByIndex[t]||(this.objectsByIndex[t]=new f):this.primitives||(this.primitives=new c),o=n.get(r);return o||n.set(r,o=new s),o};var p=new s;t.exports=function(){var t,r,e=p,n=arguments.length;for(t=0;t<n;t++)i(r=arguments[t])&&(e=e.next(t,r,!0));if(this===a&&e===p)throw u("Composite keys must contain a non-primitive component");for(t=0;t<n;t++)i(r=arguments[t])||(e=e.next(t,r,!1));return e}},function(t,r,e){e(195)},function(t,e,n){n(196)("Map",(function(t){return function(){return t(this,arguments.length?arguments[0]:r)}}),n(208))},function(t,e,n){var o=n(2),i=n(3),a=n(13),u=n(67),c=n(47),f=n(197),s=n(204),p=n(159),l=n(20),h=n(16),v=n(19),y=n(6),d=n(206),g=n(190),b=n(207);t.exports=function(t,e,n){var m=-1!==t.indexOf("Map"),x=-1!==t.indexOf("Weak"),w=m?"set":"add",S=i[t],A=S&&S.prototype,E=S,O={},R=function(t){var e=a(A[t]);c(A,t,"add"==t?function(t){return e(this,0===t?0:t),this}:"delete"==t?function(t){return!(x&&!v(t))&&e(this,0===t?0:t)}:"get"==t?function(t){return x&&!v(t)?r:e(this,0===t?0:t)}:"has"==t?function(t){return!(x&&!v(t))&&e(this,0===t?0:t)}:function(t,r){return e(this,0===t?0:t,r),this})};if(u(t,!l(S)||!(x||A.forEach&&!y((function(){(new S).entries().next()})))))E=n.getConstructor(e,t,m,w),f.enable();else if(u(t,!0)){var I=new E,k=I[w](x?{}:-0,1)!=I,T=y((function(){I.has(1)})),M=d((function(t){new S(t)})),j=!x&&y((function(){for(var t=new S,r=5;r--;)t[w](r,r);return!t.has(-0)}));M||((E=e((function(t,r){p(t,A);var e=b(new S,t,E);return h(r)||s(r,e[w],{that:e,AS_ENTRIES:m}),e}))).prototype=A,A.constructor=E),(T||j)&&(R("delete"),R("has"),m&&R("get")),(j||k)&&R(w),x&&A.clear&&delete A.clear}return O[t]=E,o({global:!0,constructor:!0,forced:E!=S},O),g(E,t),x||n.setStrong(E,t,m),E}},function(t,r,e){var n=e(2),o=e(13),i=e(54),a=e(19),u=e(38),c=e(44).f,f=e(57),s=e(198),p=e(201),l=e(40),h=e(203),v=!1,y=l("meta"),d=0,g=function(t){c(t,y,{value:{objectID:"O"+d++,weakData:{}}})},b=t.exports={enable:function(){b.enable=function(){},v=!0;var t=f.f,r=o([].splice),e={};e[y]=1,t(e).length&&(f.f=function(e){for(var n=t(e),o=0,i=n.length;o<i;o++)if(n[o]===y){r(n,o,1);break}return n},n({target:"Object",stat:!0,forced:!0},{getOwnPropertyNames:s.f}))},fastKey:function(t,r){if(!a(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!u(t,y)){if(!p(t))return"F";if(!r)return"E";g(t)}return t[y].objectID},getWeakData:function(t,r){if(!u(t,y)){if(!p(t))return!0;if(!r)return!1;g(t)}return t[y].weakData},onFreeze:function(t){return h&&v&&p(t)&&!u(t,y)&&g(t),t}};i[y]=!0},function(t,r,e){var n=e(14),o=e(11),i=e(57).f,a=e(199),u="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){return u&&"Window"==n(t)?function(t){try{return i(t)}catch(t){return a(u)}}(t):i(o(t))}},function(t,e,n){var o=n(60),i=n(63),a=n(200),u=Array,c=Math.max;t.exports=function(t,e,n){for(var f=i(t),s=o(e,f),p=o(n===r?f:n,f),l=u(c(p-s,0)),h=0;s<p;s++,h++)a(l,h,t[s]);return l.length=h,l}},function(t,r,e){var n=e(17),o=e(44),i=e(10);t.exports=function(t,r,e){var a=n(r);a in t?o.f(t,a,i(0,e)):t[a]=e}},function(t,r,e){var n=e(6),o=e(19),i=e(14),a=e(202),u=Object.isExtensible,c=n((function(){u(1)}));t.exports=c||a?function(t){return!!o(t)&&(!a||"ArrayBuffer"!=i(t))&&(!u||u(t))}:u},function(t,r,e){var n=e(6);t.exports=n((function(){if("function"==typeof ArrayBuffer){var t=new ArrayBuffer(8);Object.isExtensible(t)&&Object.defineProperty(t,"a",{value:8})}}))},function(t,r,e){var n=e(6);t.exports=!n((function(){return Object.isExtensible(Object.preventExtensions({}))}))},function(t,r,e){var n=e(113),o=e(7),i=e(46),a=e(31),u=e(205),c=e(63),f=e(24),s=e(121),p=e(122),l=e(167),h=TypeError,v=function(t,r){this.stopped=t,this.result=r},y=v.prototype;t.exports=function(t,r,e){var d,g,b,m,x,w,S,A=e&&e.that,E=!(!e||!e.AS_ENTRIES),O=!(!e||!e.IS_RECORD),R=!(!e||!e.IS_ITERATOR),I=!(!e||!e.INTERRUPTED),k=n(r,A),T=function(t){return d&&l(d,"normal",t),new v(!0,t)},M=function(t){return E?(i(t),I?k(t[0],t[1],T):k(t[0],t[1])):I?k(t,T):k(t)};if(O)d=t.iterator;else if(R)d=t;else{if(!(g=p(t)))throw h(a(t)+" is not iterable");if(u(g)){for(b=0,m=c(t);m>b;b++)if((x=M(t[b]))&&f(y,x))return x;return new v(!1)}d=s(t,g)}for(w=O?t.next:d.next;!(S=o(w,d)).done;){try{x=M(S.value)}catch(t){l(d,"throw",t)}if("object"==typeof x&&x&&f(y,x))return x}return new v(!1)}},function(t,e,n){var o=n(33),i=n(123),a=o("iterator"),u=Array.prototype;t.exports=function(t){return t!==r&&(i.Array===t||u[a]===t)}},function(t,r,e){var n=e(33)("iterator"),o=!1;try{var i=0,a={next:function(){return{done:!!i++}},return:function(){o=!0}};a[n]=function(){return this},Array.from(a,(function(){throw 2}))}catch(t){}t.exports=function(t,r){if(!r&&!o)return!1;var e=!1;try{var i={};i[n]=function(){return{next:function(){return{done:e=!0}}}},t(i)}catch(t){}return e}},function(t,r,e){var n=e(20),o=e(19),i=e(99);t.exports=function(t,r,e){var a,u;return i&&n(a=r.constructor)&&a!==e&&o(u=a.prototype)&&u!==e.prototype&&i(t,u),t}},function(t,e,n){var o=n(74),i=n(87),a=n(118),u=n(113),c=n(159),f=n(16),s=n(204),p=n(209),l=n(120),h=n(210),v=n(5),y=n(197).fastKey,d=n(51),g=d.set,b=d.getterFor;t.exports={getConstructor:function(t,e,n,p){var l=t((function(t,i){c(t,h),g(t,{type:e,index:o(null),first:r,last:r,size:0}),v||(t.size=0),f(i)||s(i,t[p],{that:t,AS_ENTRIES:n})})),h=l.prototype,d=b(e),m=function(t,e,n){var o,i,a=d(t),u=x(t,e);return u?u.value=n:(a.last=u={index:i=y(e,!0),key:e,value:n,previous:o=a.last,next:r,removed:!1},a.first||(a.first=u),o&&(o.next=u),v?a.size++:t.size++,"F"!==i&&(a.index[i]=u)),t},x=function(t,r){var e,n=d(t),o=y(r);if("F"!==o)return n.index[o];for(e=n.first;e;e=e.next)if(e.key==r)return e};return a(h,{clear:function(){for(var t=d(this),e=t.index,n=t.first;n;)n.removed=!0,n.previous&&(n.previous=n.previous.next=r),delete e[n.index],n=n.next;t.first=t.last=r,v?t.size=0:this.size=0},delete:function(t){var r=this,e=d(r),n=x(r,t);if(n){var o=n.next,i=n.previous;delete e.index[n.index],n.removed=!0,i&&(i.next=o),o&&(o.previous=i),e.first==n&&(e.first=o),e.last==n&&(e.last=i),v?e.size--:r.size--}return!!n},forEach:function(t){for(var e,n=d(this),o=u(t,arguments.length>1?arguments[1]:r);e=e?e.next:n.first;)for(o(e.value,e.key,this);e&&e.removed;)e=e.previous},has:function(t){return!!x(this,t)}}),a(h,n?{get:function(t){var r=x(this,t);return r&&r.value},set:function(t,r){return m(this,0===t?0:t,r)}}:{add:function(t){return m(this,t=0===t?0:t,t)}}),v&&i(h,"size",{configurable:!0,get:function(){return d(this).size}}),l},setStrong:function(t,e,n){var o=e+" Iterator",i=b(e),a=b(o);p(t,e,(function(t,e){g(this,{type:o,target:t,state:i(t),kind:e,last:r})}),(function(){for(var t=a(this),e=t.kind,n=t.last;n&&n.removed;)n=n.previous;return t.target&&(t.last=n=n?n.next:t.state.first)?l("keys"==e?n.key:"values"==e?n.value:[n.key,n.value],!1):(t.target=r,l(r,!0))}),n?"entries":"values",!n,!0),h(e)}}},function(t,r,e){var n=e(2),o=e(7),i=e(35),a=e(49),u=e(20),c=e(188),f=e(97),s=e(99),p=e(190),l=e(43),h=e(47),v=e(33),y=e(123),d=e(189),g=a.PROPER,b=a.CONFIGURABLE,m=d.IteratorPrototype,x=d.BUGGY_SAFARI_ITERATORS,w=v("iterator"),S="keys",A="values",E="entries",O=function(){return this};t.exports=function(t,r,e,a,v,d,R){c(e,r,a);var I,k,T,M=function(t){if(t===v&&_)return _;if(!x&&t in D)return D[t];switch(t){case S:case A:case E:return function(){return new e(this,t)}}return function(){return new e(this)}},j=r+" Iterator",P=!1,D=t.prototype,C=D[w]||D["@@iterator"]||v&&D[v],_=!x&&C||M(v),N="Array"==r&&D.entries||C;if(N&&(I=f(N.call(new t)))!==Object.prototype&&I.next&&(i||f(I)===m||(s?s(I,m):u(I[w])||h(I,w,O)),p(I,j,!0,!0),i&&(y[j]=O)),g&&v==A&&C&&C.name!==A&&(!i&&b?l(D,"name",A):(P=!0,_=function(){return o(C,this)})),v)if(k={values:M(A),keys:d?_:M(S),entries:M(E)},R)for(T in k)(x||P||!(T in D))&&h(D,T,k[T]);else n({target:r,proto:!0,forced:x||P},k);return i&&!R||D[w]===_||h(D,w,_,{name:v}),y[r]=_,k}},function(t,r,e){var n=e(23),o=e(87),i=e(33),a=e(5),u=i("species");t.exports=function(t){var r=n(t);a&&r&&!r[u]&&o(r,u,{configurable:!0,get:function(){return this}})}},function(t,r,e){e(212)},function(t,e,n){var o,i=n(203),a=n(3),u=n(13),c=n(118),f=n(197),s=n(196),p=n(213),l=n(19),h=n(51).enforce,v=n(6),y=n(52),d=Object,g=Array.isArray,b=d.isExtensible,m=d.isFrozen,x=d.isSealed,w=d.freeze,S=d.seal,A={},E={},O=!a.ActiveXObject&&"ActiveXObject"in a,R=function(t){return function(){return t(this,arguments.length?arguments[0]:r)}},I=s("WeakMap",R,p),k=I.prototype,T=u(k.set);if(y)if(O){o=p.getConstructor(R,"WeakMap",!0),f.enable();var M=u(k.delete),j=u(k.has),P=u(k.get);c(k,{delete:function(t){if(l(t)&&!b(t)){var r=h(this);return r.frozen||(r.frozen=new o),M(this,t)||r.frozen.delete(t)}return M(this,t)},has:function(t){if(l(t)&&!b(t)){var r=h(this);return r.frozen||(r.frozen=new o),j(this,t)||r.frozen.has(t)}return j(this,t)},get:function(t){if(l(t)&&!b(t)){var r=h(this);return r.frozen||(r.frozen=new o),j(this,t)?P(this,t):r.frozen.get(t)}return P(this,t)},set:function(t,r){if(l(t)&&!b(t)){var e=h(this);e.frozen||(e.frozen=new o),j(this,t)?T(this,t,r):e.frozen.set(t,r)}else T(this,t,r);return this}})}else i&&v((function(){var t=w([]);return T(new I,t,1),!m(t)}))&&c(k,{set:function(t,r){var e;return g(t)&&(m(t)?e=A:x(t)&&(e=E)),T(this,t,r),e==A&&w(t),e==E&&S(t),this}})},function(t,e,n){var o=n(13),i=n(118),a=n(197).getWeakData,u=n(159),c=n(46),f=n(16),s=n(19),p=n(204),l=n(128),h=n(38),v=n(51),y=v.set,d=v.getterFor,g=l.find,b=l.findIndex,m=o([].splice),x=0,w=function(t){return t.frozen||(t.frozen=new S)},S=function(){this.entries=[]},A=function(t,r){return g(t.entries,(function(t){return t[0]===r}))};S.prototype={get:function(t){var r=A(this,t);if(r)return r[1]},has:function(t){return!!A(this,t)},set:function(t,r){var e=A(this,t);e?e[1]=r:this.entries.push([t,r])},delete:function(t){var r=b(this.entries,(function(r){return r[0]===t}));return~r&&m(this.entries,r,1),!!~r}},t.exports={getConstructor:function(t,e,n,o){var l=t((function(t,i){u(t,v),y(t,{type:e,id:x++,frozen:r}),f(i)||p(i,t[o],{that:t,AS_ENTRIES:n})})),v=l.prototype,g=d(e),b=function(t,r,e){var n=g(t),o=a(c(r),!0);return!0===o?w(n).set(r,e):o[n.id]=e,t};return i(v,{delete:function(t){var r=g(this);if(!s(t))return!1;var e=a(t);return!0===e?w(r).delete(t):e&&h(e,r.id)&&delete e[r.id]},has:function(t){var r=g(this);if(!s(t))return!1;var e=a(t);return!0===e?w(r).has(t):e&&h(e,r.id)}}),i(v,n?{get:function(t){var e=g(this);if(s(t)){var n=a(t);return!0===n?w(e).get(t):n?n[e.id]:r}},set:function(t,r){return b(this,t,r)}}:{add:function(t){return b(this,t,!0)}}),l}}},function(t,r,e){var n=e(2),o=e(193),i=e(23),a=e(192);n({global:!0,forced:!0},{compositeSymbol:function(){return 1==arguments.length&&"string"==typeof arguments[0]?i("Symbol").for(arguments[0]):a(o,null,arguments).get("symbol",i("Symbol"))}})},function(t,e,n){var o=n(2),i=n(5),a=n(23),u=n(30),c=n(159),f=n(47),s=n(118),p=n(87),l=n(33),h=n(51),v=n(160),y=a("SuppressedError"),d=ReferenceError,g=l("dispose"),b=l("toStringTag"),m="DisposableStack",x=h.set,w=h.getterFor(m),S="sync-dispose",A="disposed",E=function(t){var r=w(t);if(r.state==A)throw d(m+" already disposed");return r},O=function(){x(c(this,R),{type:m,state:"pending",stack:[]}),i||(this.disposed=!1)},R=O.prototype;s(R,{dispose:function(){var t=w(this);if(t.state!=A){t.state=A,i||(this.disposed=!0);for(var r,e=t.stack,n=e.length,o=!1;n;){var a=e[--n];e[n]=null;try{a()}catch(t){o?r=new y(t,r):(o=!0,r=t)}}if(t.stack=null,o)throw r}},use:function(t){return v(E(this),t,S),t},adopt:function(t,e){var n=E(this);return u(e),v(n,r,S,(function(){e(t)})),t},defer:function(t){var e=E(this);u(t),v(e,r,S,t)},move:function(){var t=E(this),r=new O;return w(r).stack=t.stack,t.stack=[],t.state=A,i||(this.disposed=!0),r}}),i&&p(R,"disposed",{configurable:!0,get:function(){return w(this).state==A}}),f(R,g,R.dispose,{name:"dispose"}),f(R,b,m,{nonWritable:!0}),o({global:!0,constructor:!0},{DisposableStack:O})},function(t,r,e){e(2)({target:"Function",proto:!0,forced:!0},{demethodize:e(217)})},function(t,r,e){var n=e(13),o=e(30);t.exports=function(){return n(o(this))}},function(t,r,e){var n=e(2),o=e(13),i=e(20),a=e(50),u=e(38),c=e(5),f=Object.getOwnPropertyDescriptor,s=/^\s*class\b/,p=o(s.exec);n({target:"Function",stat:!0,sham:!0,forced:!0},{isCallable:function(t){return i(t)&&!function(t){try{if(!c||!p(s,a(t)))return!1}catch(t){}var r=f(t,"prototype");return!!r&&u(r,"writable")&&!r.writable}(t)}})},function(t,r,e){e(2)({target:"Function",stat:!0,forced:!0},{isConstructor:e(115)})},function(t,e,n){var o=n(33),i=n(44).f,a=o("metadata"),u=Function.prototype;u[a]===r&&i(u,a,{value:null})},function(t,r,e){e(2)({target:"Function",proto:!0,forced:!0,name:"demethodize"},{unThis:e(217)})},function(t,r,e){var n=e(2),o=e(3),i=e(159),a=e(20),u=e(43),c=e(6),f=e(38),s=e(33),p=e(189).IteratorPrototype,l=e(35),h=s("toStringTag"),v=o.Iterator,y=l||!a(v)||v.prototype!==p||!c((function(){v({})})),d=function(){i(this,p)};f(p,h)||u(p,h,"Iterator"),!y&&f(p,"constructor")&&p.constructor!==Object||u(p,"constructor",d),d.prototype=p,n({global:!0,constructor:!0,forced:y},{Iterator:d})},function(t,r,e){e(2)({target:"Iterator",name:"indexed",proto:!0,real:!0,forced:!0},{asIndexedPairs:e(224)})},function(t,r,e){var n=e(7),o=e(225),i=function(t,r){return[r,t]};t.exports=function(){return n(o,this,i)}},function(t,r,e){var n=e(7),o=e(30),i=e(46),a=e(124),u=e(226),c=e(227),f=u((function(){var t=this.iterator,r=i(n(this.next,t));if(!(this.done=!!r.done))return c(t,this.mapper,[r.value,this.counter++],!0)}));t.exports=function(t){return i(this),o(t),new f(a(this),{mapper:t})}},function(t,e,n){var o=n(7),i=n(74),a=n(43),u=n(118),c=n(33),f=n(51),s=n(29),p=n(189).IteratorPrototype,l=n(120),h=n(167),v=c("toStringTag"),y="IteratorHelper",d="WrapForValidIterator",g=f.set,b=function(t){var e=f.getterFor(t?d:y);return u(i(p),{next:function(){var n=e(this);if(t)return n.nextHandler();try{var o=n.done?r:n.nextHandler();return l(o,n.done)}catch(t){throw n.done=!0,t}},return:function(){var n=e(this),i=n.iterator;if(n.done=!0,t){var a=s(i,"return");return a?o(a,i):l(r,!0)}if(n.inner)try{h(n.inner.iterator,"normal")}catch(t){return h(i,"throw",t)}return h(i,"normal"),l(r,!0)}})},m=b(!0),x=b(!1);a(x,v,"Iterator Helper"),t.exports=function(t,r){var e=function(e,n){n?(n.iterator=e.iterator,n.next=e.next):n=e,n.type=r?d:y,n.nextHandler=t,n.counter=0,n.done=!1,g(this,n)};return e.prototype=r?m:x,e}},function(t,r,e){var n=e(46),o=e(167);t.exports=function(t,r,e,i){try{return i?r(n(e)[0],e[1]):r(e)}catch(r){o(t,"throw",r)}}},function(t,r,e){var n=e(7),o=e(47),i=e(29),a=e(38),u=e(33),c=e(189).IteratorPrototype,f=u("dispose");a(c,f)||o(c,f,(function(){var t=i(this,"return");t&&n(t,this)}))},function(t,r,e){var n=e(2),o=e(7),i=e(46),a=e(124),u=e(170),c=e(171),f=e(226)((function(){for(var t,r=this.iterator,e=this.next;this.remaining;)if(this.remaining--,t=i(o(e,r)),this.done=!!t.done)return;if(t=i(o(e,r)),!(this.done=!!t.done))return t.value}));n({target:"Iterator",proto:!0,real:!0},{drop:function(t){i(this);var r=c(u(+t));return new f(a(this),{remaining:r})}})},function(t,r,e){var n=e(2),o=e(204),i=e(30),a=e(46),u=e(124);n({target:"Iterator",proto:!0,real:!0},{every:function(t){a(this),i(t);var r=u(this),e=0;return!o(r,(function(r,n){if(!t(r,e++))return n()}),{IS_RECORD:!0,INTERRUPTED:!0}).stopped}})},function(t,r,e){var n=e(2),o=e(7),i=e(30),a=e(46),u=e(124),c=e(226),f=e(227),s=c((function(){for(var t,r,e=this.iterator,n=this.predicate,i=this.next;;){if(t=a(o(i,e)),this.done=!!t.done)return;if(r=t.value,f(e,n,[r,this.counter++],!0))return r}}));n({target:"Iterator",proto:!0,real:!0},{filter:function(t){return a(this),i(t),new s(u(this),{predicate:t})}})},function(t,r,e){var n=e(2),o=e(204),i=e(30),a=e(46),u=e(124);n({target:"Iterator",proto:!0,real:!0},{find:function(t){a(this),i(t);var r=u(this),e=0;return o(r,(function(r,n){if(t(r,e++))return n(r)}),{IS_RECORD:!0,INTERRUPTED:!0}).result}})},function(t,r,e){var n=e(2),o=e(7),i=e(30),a=e(46),u=e(124),c=e(234),f=e(226),s=e(167),p=f((function(){for(var t,r,e=this.iterator,n=this.mapper;;){if(r=this.inner)try{if(!(t=a(o(r.next,r.iterator))).done)return t.value;this.inner=null}catch(t){s(e,"throw",t)}if(t=a(o(this.next,e)),this.done=!!t.done)return;try{this.inner=c(n(t.value,this.counter++))}catch(t){s(e,"throw",t)}}}));n({target:"Iterator",proto:!0,real:!0},{flatMap:function(t){return a(this),i(t),new p(u(this),{mapper:t,inner:null})}})},function(t,e,n){var o=n(7),i=n(46),a=n(124),u=n(122);t.exports=function(t){var e=i(t),n=u(e);return a(i(n!==r?o(n,e):e))}},function(t,r,e){var n=e(2),o=e(204),i=e(30),a=e(46),u=e(124);n({target:"Iterator",proto:!0,real:!0},{forEach:function(t){a(this),i(t);var r=u(this),e=0;o(r,(function(r){t(r,e++)}),{IS_RECORD:!0})}})},function(t,r,e){var n=e(2),o=e(7),i=e(39),a=e(24),u=e(189).IteratorPrototype,c=e(226),f=e(234),s=c((function(){return o(this.next,this.iterator)}),!0);n({target:"Iterator",stat:!0},{from:function(t){var r=f("string"==typeof t?i(t):t);return a(u,r.iterator)?r.iterator:new s(r)}})},function(t,r,e){e(2)({target:"Iterator",proto:!0,real:!0,forced:!0},{indexed:e(224)})},function(t,r,e){e(2)({target:"Iterator",proto:!0,real:!0},{map:e(225)})},function(t,r,e){var n=e(2),o=e(187),i=TypeError;n({target:"Iterator",stat:!0,forced:!0},{range:function(t,r,e){if("number"==typeof t)return new o(t,r,e,"number",0,1);if("bigint"==typeof t)return new o(t,r,e,"bigint",BigInt(0),BigInt(1));throw i("Incorrect Iterator.range arguments")}})},function(t,e,n){var o=n(2),i=n(204),a=n(30),u=n(46),c=n(124),f=TypeError;o({target:"Iterator",proto:!0,real:!0},{reduce:function(t){u(this),a(t);var e=c(this),n=arguments.length<2,o=n?r:arguments[1],s=0;if(i(e,(function(r){n?(n=!1,o=r):o=t(o,r,s),s++}),{IS_RECORD:!0}),n)throw f("Reduce of empty iterator with no initial value");return o}})},function(t,r,e){var n=e(2),o=e(204),i=e(30),a=e(46),u=e(124);n({target:"Iterator",proto:!0,real:!0},{some:function(t){a(this),i(t);var r=u(this),e=0;return o(r,(function(r,n){if(t(r,e++))return n()}),{IS_RECORD:!0,INTERRUPTED:!0}).stopped}})},function(t,e,n){var o=n(2),i=n(7),a=n(46),u=n(124),c=n(170),f=n(171),s=n(226),p=n(167),l=s((function(){var t=this.iterator;if(!this.remaining--)return this.done=!0,p(t,"normal",r);var e=a(i(this.next,t));return(this.done=!!e.done)?void 0:e.value}));o({target:"Iterator",proto:!0,real:!0},{take:function(t){a(this);var r=f(c(+t));return new l(u(this),{remaining:r})}})},function(t,r,e){var n=e(2),o=e(46),i=e(204),a=e(124),u=[].push;n({target:"Iterator",proto:!0,real:!0},{toArray:function(){var t=[];return i(a(o(this)),u,{that:t,IS_RECORD:!0}),t}})},function(t,r,e){var n=e(2),o=e(46),i=e(117),a=e(179),u=e(124);n({target:"Iterator",proto:!0,real:!0},{toAsync:function(){return new a(u(new i(u(o(this)))))}})},function(t,r,e){e(2)({target:"JSON",stat:!0,forced:!e(246)},{isRawJSON:e(247)})},function(t,r,e){var n=e(6);t.exports=!n((function(){var t="9007199254740993",r=JSON.rawJSON(t);return!JSON.isRawJSON(r)||JSON.stringify(r)!==t}))},function(t,r,e){var n=e(19),o=e(51).get;t.exports=function(t){if(!n(t))return!1;var r=o(t);return!!r&&"RawJSON"===r.type}},function(t,e,n){var o=n(2),i=n(5),a=n(3),u=n(23),c=n(13),f=n(7),s=n(20),p=n(19),l=n(69),h=n(38),v=n(90),y=n(63),d=n(200),g=n(6),b=n(249),m=n(26),x=a.JSON,w=a.Number,S=a.SyntaxError,A=x&&x.parse,E=u("Object","keys"),O=Object.getOwnPropertyDescriptor,R=c("".charAt),I=c("".slice),k=c(/./.exec),T=c([].push),M=/^\d$/,j=/^[1-9]$/,P=/^(-|\d)$/,D=/^[\t\n\r ]$/,C=function(t,e,n,o){var i,a,u,c,s,v=t[e],d=o&&v===o.value,g=d&&"string"==typeof o.source?{source:o.source}:{};if(p(v)){var b=l(v),m=d?o.nodes:b?[]:{};if(b)for(i=m.length,u=y(v),c=0;c<u;c++)_(v,c,C(v,""+c,n,c<i?m[c]:r));else for(a=E(v),u=y(a),c=0;c<u;c++)s=a[c],_(v,s,C(v,s,n,h(m,s)?m[s]:r))}return f(n,t,e,v,g)},_=function(t,e,n){if(i){var o=O(t,e);if(o&&!o.configurable)return}n===r?delete t[e]:d(t,e,n)},N=function(t,r,e,n){this.value=t,this.end=r,this.source=e,this.nodes=n},F=function(t,r){this.source=t,this.index=r};F.prototype={fork:function(t){return new F(this.source,t)},parse:function(){var t=this.source,r=this.skip(D,this.index),e=this.fork(r),n=R(t,r);if(k(P,n))return e.number();switch(n){case"{":return e.object();case"[":return e.array();case'"':return e.string();case"t":return e.keyword(!0);case"f":return e.keyword(!1);case"n":return e.keyword(null)}throw S('Unexpected character: "'+n+'" at: '+r)},node:function(t,r,e,n,o){return new N(r,n,t?null:I(this.source,e,n),o)},object:function(){for(var t=this.source,r=this.index+1,e=!1,n={},o={};r<t.length;){if(r=this.until(['"',"}"],r),"}"==R(t,r)&&!e){r++;break}var i=this.fork(r).string(),a=i.value;r=i.end,r=this.until([":"],r)+1,r=this.skip(D,r),i=this.fork(r).parse(),d(o,a,i),d(n,a,i.value),r=this.until([",","}"],i.end);var u=R(t,r);if(","==u)e=!0,r++;else if("}"==u){r++;break}}return this.node(1,n,this.index,r,o)},array:function(){for(var t=this.source,r=this.index+1,e=!1,n=[],o=[];r<t.length;){if(r=this.skip(D,r),"]"==R(t,r)&&!e){r++;break}var i=this.fork(r).parse();if(T(o,i),T(n,i.value),r=this.until([",","]"],i.end),","==R(t,r))e=!0,r++;else if("]"==R(t,r)){r++;break}}return this.node(1,n,this.index,r,o)},string:function(){var t=this.index,r=b(this.source,this.index+1);return this.node(0,r.value,t,r.end)},number:function(){var t=this.source,r=this.index,e=r;if("-"==R(t,e)&&e++,"0"==R(t,e))e++;else{if(!k(j,R(t,e)))throw S("Failed to parse number at: "+e);e=this.skip(M,++e)}if("."==R(t,e)&&(e=this.skip(M,++e)),("e"==R(t,e)||"E"==R(t,e))&&(e++,"+"!=R(t,e)&&"-"!=R(t,e)||e++,e==(e=this.skip(M,e))))throw S("Failed to parse number's exponent value at: "+e);return this.node(0,w(I(t,r,e)),r,e)},keyword:function(t){var r=""+t,e=this.index,n=e+r.length;if(I(this.source,e,n)!=r)throw S("Failed to parse value at: "+e);return this.node(0,t,e,n)},skip:function(t,r){for(var e=this.source;r<e.length&&k(t,R(e,r));r++);return r},until:function(t,r){r=this.skip(D,r);for(var e=R(this.source,r),n=0;n<t.length;n++)if(t[n]==e)return r;throw S('Unexpected character: "'+e+'" at: '+r)}};var B=g((function(){var t,r="9007199254740993";return A(r,(function(r,e,n){t=n.source})),t!==r})),z=m&&!g((function(){return 1/A("-0 \t")!=-1/0}));o({target:"JSON",stat:!0,forced:B},{parse:function(t,r){return z&&!s(r)?A(t):function(t,r){t=v(t);var e=new F(t,0,""),n=e.parse(),o=n.value,i=e.skip(D,n.end);if(i<t.length)throw S('Unexpected extra character: "'+R(t,i)+'" after the parsed data at: '+i);return s(r)?C({"":o},"",r,n):o}(t,r)}})},function(t,r,e){var n=e(13),o=e(38),i=SyntaxError,a=parseInt,u=String.fromCharCode,c=n("".charAt),f=n("".slice),s=n(/./.exec),p={'\\"':'"',"\\\\":"\\","\\/":"/","\\b":"\b","\\f":"\f","\\n":"\n","\\r":"\r","\\t":"\t"},l=/^[\da-f]{4}$/i,h=/^[\u0000-\u001F]$/;t.exports=function(t,r){for(var e=!0,n="";r<t.length;){var v=c(t,r);if("\\"==v){var y=f(t,r,r+2);if(o(p,y))n+=p[y],r+=2;else{if("\\u"!=y)throw i('Unknown escape sequence: "'+y+'"');var d=f(t,r+=2,r+4);if(!s(l,d))throw i("Bad Unicode escape at: "+r);n+=u(a(d,16)),r+=4}}else{if('"'==v){e=!1,r++;break}if(s(h,v))throw i("Bad control character in string literal at: "+r);n+=v,r++}}if(e)throw i("Unterminated string at: "+r);return{value:n,end:r}}},function(t,r,e){var n=e(2),o=e(203),i=e(246),a=e(23),u=e(7),c=e(13),f=e(20),s=e(247),p=e(90),l=e(200),h=e(249),v=e(251),y=e(40),d=e(51).set,g=String,b=SyntaxError,m=a("JSON","parse"),x=a("JSON","stringify"),w=a("Object","create"),S=a("Object","freeze"),A=c("".charAt),E=c("".slice),O=c(/./.exec),R=c([].push),I=y(),k=I.length,T="Unacceptable as raw JSON",M=/^[\t\n\r ]$/;n({target:"JSON",stat:!0,forced:!i},{rawJSON:function(t){var r=p(t);if(""==r||O(M,A(r,0))||O(M,A(r,r.length-1)))throw b(T);var e=m(r);if("object"==typeof e&&null!==e)throw b(T);var n=w(null);return d(n,{type:"RawJSON"}),l(n,"rawJSON",r),o?S(n):n}}),x&&n({target:"JSON",stat:!0,arity:3,forced:!i},{stringify:function(t,r,e){var n=v(r),o=[],i=x(t,(function(t,r){var e=f(n)?u(n,this,g(t),r):r;return s(e)?I+(R(o,e.rawJSON)-1):e}),e);if("string"!=typeof i)return i;for(var a="",c=i.length,p=0;p<c;p++){var l=A(i,p);if('"'==l){var y=h(i,++p).end-1,d=E(i,p,y);a+=E(d,0,k)==I?o[E(d,k)]:'"'+d+'"',p=y}else a+=l}return a}})},function(t,r,e){var n=e(13),o=e(69),i=e(20),a=e(14),u=e(90),c=n([].push);t.exports=function(t){if(i(t))return t;if(o(t)){for(var r=t.length,e=[],n=0;n<r;n++){var f=t[n];"string"==typeof f?c(e,f):"number"!=typeof f&&"Number"!=a(f)&&"String"!=a(f)||c(e,u(f))}var s=e.length,p=!0;return function(t,r){if(p)return p=!1,r;if(o(this))return r;for(var n=0;n<s;n++)if(e[n]===t)return r}}}},function(t,r,e){var n=e(2),o=e(253),i=e(138).remove;n({target:"Map",proto:!0,real:!0,forced:!0},{deleteAll:function(){for(var t,r=o(this),e=!0,n=0,a=arguments.length;n<a;n++)t=i(r,arguments[n]),e=e&&t;return!!e}})},function(t,r,e){var n=e(138).has;t.exports=function(t){return n(t),t}},function(t,r,e){var n=e(2),o=e(253),i=e(138),a=i.get,u=i.has,c=i.set;n({target:"Map",proto:!0,real:!0,forced:!0},{emplace:function(t,r){var e,n,i=o(this);return u(i,t)?(e=a(i,t),"update"in r&&(e=r.update(e,t,i),c(i,t,e)),e):(n=r.insert(t,i),c(i,t,n),n)}})},function(t,e,n){var o=n(2),i=n(113),a=n(253),u=n(145);o({target:"Map",proto:!0,real:!0,forced:!0},{every:function(t){var e=a(this),n=i(t,arguments.length>1?arguments[1]:r);return!1!==u(e,(function(t,r){if(!n(t,r,e))return!1}),!0)}})},function(t,e,n){var o=n(2),i=n(113),a=n(253),u=n(138),c=n(145),f=u.Map,s=u.set;o({target:"Map",proto:!0,real:!0,forced:!0},{filter:function(t){var e=a(this),n=i(t,arguments.length>1?arguments[1]:r),o=new f;return c(e,(function(t,r){n(t,r,e)&&s(o,r,t)})),o}})},function(t,e,n){var o=n(2),i=n(113),a=n(253),u=n(145);o({target:"Map",proto:!0,real:!0,forced:!0},{find:function(t){var e=a(this),n=i(t,arguments.length>1?arguments[1]:r),o=u(e,(function(t,r){if(n(t,r,e))return{value:t}}),!0);return o&&o.value}})},function(t,e,n){var o=n(2),i=n(113),a=n(253),u=n(145);o({target:"Map",proto:!0,real:!0,forced:!0},{findKey:function(t){var e=a(this),n=i(t,arguments.length>1?arguments[1]:r),o=u(e,(function(t,r){if(n(t,r,e))return{key:r}}),!0);return o&&o.key}})},function(t,r,e){e(2)({target:"Map",stat:!0,forced:!0},{from:e(260)})},function(t,e,n){var o=n(113),i=n(7),a=n(30),u=n(261),c=n(16),f=n(204),s=[].push;t.exports=function(t){var e,n,p,l,h=arguments.length,v=h>1?arguments[1]:r;return u(this),(e=v!==r)&&a(v),c(t)?new this:(n=[],e?(p=0,l=o(v,h>2?arguments[2]:r),f(t,(function(t){i(s,n,l(t,p++))}))):f(t,s,{that:n}),new this(n))}},function(t,r,e){var n=e(115),o=e(31),i=TypeError;t.exports=function(t){if(n(t))return t;throw i(o(t)+" is not a constructor")}},function(t,r,e){var n=e(2),o=e(13),i=e(30),a=e(15),u=e(204),c=e(138),f=c.Map,s=c.has,p=c.get,l=c.set,h=o([].push);n({target:"Map",stat:!0,forced:!0},{groupBy:function(t,r){a(t),i(r);var e=new f,n=0;return u(t,(function(t){var o=r(t,n++);s(e,o)?h(p(e,o),t):l(e,o,[t])})),e}})},function(t,r,e){var n=e(2),o=e(264),i=e(253),a=e(145);n({target:"Map",proto:!0,real:!0,forced:!0},{includes:function(t){return!0===a(i(this),(function(r){if(o(r,t))return!0}),!0)}})},function(t,r){t.exports=function(t,r){return t===r||t!=t&&r!=r}},function(t,r,e){var n=e(2),o=e(7),i=e(204),a=e(20),u=e(30),c=e(138).Map;n({target:"Map",stat:!0,forced:!0},{keyBy:function(t,r){var e=new(a(this)?this:c);u(r);var n=u(e.set);return i(t,(function(t){o(n,e,r(t),t)})),e}})},function(t,r,e){var n=e(2),o=e(253),i=e(145);n({target:"Map",proto:!0,real:!0,forced:!0},{keyOf:function(t){var r=i(o(this),(function(r,e){if(r===t)return{key:e}}),!0);return r&&r.key}})},function(t,e,n){var o=n(2),i=n(113),a=n(253),u=n(138),c=n(145),f=u.Map,s=u.set;o({target:"Map",proto:!0,real:!0,forced:!0},{mapKeys:function(t){var e=a(this),n=i(t,arguments.length>1?arguments[1]:r),o=new f;return c(e,(function(t,r){s(o,n(t,r,e),t)})),o}})},function(t,e,n){var o=n(2),i=n(113),a=n(253),u=n(138),c=n(145),f=u.Map,s=u.set;o({target:"Map",proto:!0,real:!0,forced:!0},{mapValues:function(t){var e=a(this),n=i(t,arguments.length>1?arguments[1]:r),o=new f;return c(e,(function(t,r){s(o,r,n(t,r,e))})),o}})},function(t,r,e){var n=e(2),o=e(253),i=e(204),a=e(138).set;n({target:"Map",proto:!0,real:!0,arity:1,forced:!0},{merge:function(t){for(var r=o(this),e=arguments.length,n=0;n<e;)i(arguments[n++],(function(t,e){a(r,t,e)}),{AS_ENTRIES:!0});return r}})},function(t,r,e){e(2)({target:"Map",stat:!0,forced:!0},{of:e(271)})},function(t,r,e){var n=e(272);t.exports=function(){return new this(n(arguments))}},function(t,r,e){var n=e(13);t.exports=n([].slice)},function(t,e,n){var o=n(2),i=n(30),a=n(253),u=n(145),c=TypeError;o({target:"Map",proto:!0,real:!0,forced:!0},{reduce:function(t){var e=a(this),n=arguments.length<2,o=n?r:arguments[1];if(i(t),u(e,(function(r,i){n?(n=!1,o=r):o=t(o,r,i,e)})),n)throw c("Reduce of empty map with no initial value");return o}})},function(t,e,n){var o=n(2),i=n(113),a=n(253),u=n(145);o({target:"Map",proto:!0,real:!0,forced:!0},{some:function(t){var e=a(this),n=i(t,arguments.length>1?arguments[1]:r);return!0===u(e,(function(t,r){if(n(t,r,e))return!0}),!0)}})},function(t,e,n){var o=n(2),i=n(30),a=n(253),u=n(138),c=TypeError,f=u.get,s=u.has,p=u.set;o({target:"Map",proto:!0,real:!0,forced:!0},{update:function(t,e){var n=a(this),o=arguments.length;i(e);var u=s(n,t);if(!u&&o<3)throw c("Updating absent value");var l=u?f(n,t):i(o>2?arguments[2]:r)(t,n);return p(n,t,e(l,t,n)),n}})},function(t,r,e){e(2)({target:"Map",proto:!0,real:!0,name:"upsert",forced:!0},{updateOrInsert:e(277)})},function(t,e,n){var o=n(7),i=n(30),a=n(20),u=n(46),c=TypeError;t.exports=function(t,e){var n,f=u(this),s=i(f.get),p=i(f.has),l=i(f.set),h=arguments.length>2?arguments[2]:r;if(!a(e)&&!a(h))throw c("At least one callback required");return o(p,f,t)?(n=o(s,f,t),a(e)&&(n=e(n),o(l,f,t,n))):a(h)&&(n=h(),o(l,f,t,n)),n}},function(t,r,e){e(2)({target:"Map",proto:!0,real:!0,forced:!0},{upsert:e(277)})},function(t,r,e){var n=e(2),o=Math.min,i=Math.max;n({target:"Math",stat:!0,forced:!0},{clamp:function(t,r,e){return o(e,i(r,t))}})},function(t,r,e){e(2)({target:"Math",stat:!0,nonConfigurable:!0,nonWritable:!0},{DEG_PER_RAD:Math.PI/180})},function(t,r,e){var n=e(2),o=180/Math.PI;n({target:"Math",stat:!0,forced:!0},{degrees:function(t){return t*o}})},function(t,r,e){var n=e(2),o=e(283),i=e(284);n({target:"Math",stat:!0,forced:!0},{fscale:function(t,r,e,n,a){return i(o(t,r,e,n,a))}})},function(t,r){t.exports=Math.scale||function(t,r,e,n,o){var i=+t,a=+r,u=+e,c=+n,f=+o;return i!=i||a!=a||u!=u||c!=c||f!=f?NaN:i===1/0||i===-1/0?i:(i-a)*(f-c)/(u-a)+c}},function(t,r,e){var n=e(285),o=Math.abs,i=Math.pow,a=i(2,-52),u=i(2,-23),c=i(2,127)*(2-u),f=i(2,-126);t.exports=Math.fround||function(t){var r,e,i=+t,s=o(i),p=n(i);return s<f?p*function(t){return t+1/a-1/a}(s/f/u)*f*u:(e=(r=(1+u/a)*s)-(r-s))>c||e!=e?p*(1/0):p*e}},function(t,r){t.exports=Math.sign||function(t){var r=+t;return 0==r||r!=r?r:r<0?-1:1}},function(t,r,e){e(2)({target:"Math",stat:!0,forced:!0},{iaddh:function(t,r,e,n){var o=t>>>0,i=e>>>0;return(r>>>0)+(n>>>0)+((o&i|(o|i)&~(o+i>>>0))>>>31)|0}})},function(t,r,e){e(2)({target:"Math",stat:!0,forced:!0},{imulh:function(t,r){var e=65535,n=+t,o=+r,i=n&e,a=o&e,u=n>>16,c=o>>16,f=(u*a>>>0)+(i*a>>>16);return u*c+(f>>16)+((i*c>>>0)+(f&e)>>16)}})},function(t,r,e){e(2)({target:"Math",stat:!0,forced:!0},{isubh:function(t,r,e,n){var o=t>>>0,i=e>>>0;return(r>>>0)-(n>>>0)-((~o&i|~(o^i)&o-i>>>0)>>>31)|0}})},function(t,r,e){e(2)({target:"Math",stat:!0,nonConfigurable:!0,nonWritable:!0},{RAD_PER_DEG:180/Math.PI})},function(t,r,e){var n=e(2),o=Math.PI/180;n({target:"Math",stat:!0,forced:!0},{radians:function(t){return t*o}})},function(t,r,e){e(2)({target:"Math",stat:!0,forced:!0},{scale:e(283)})},function(t,r,e){var n=e(2),o=e(46),i=e(293),a=e(188),u=e(120),c=e(51),f="Seeded Random",s=f+" Generator",p=c.set,l=c.getterFor(s),h=TypeError,v=a((function(t){p(this,{type:s,seed:t%2147483647})}),f,(function(){var t=l(this),r=t.seed=(1103515245*t.seed+12345)%2147483647;return u((1073741823&r)/1073741823,!1)}));n({target:"Math",stat:!0,forced:!0},{seededPRNG:function(t){var r=o(t).seed;if(!i(r))throw h('Math.seededPRNG() argument should have a "seed" field with a finite value.');return new v(r)}})},function(t,r,e){var n=e(3).isFinite;t.exports=Number.isFinite||function(t){return"number"==typeof t&&n(t)}},function(t,r,e){e(2)({target:"Math",stat:!0,forced:!0},{signbit:function(t){var r=+t;return r==r&&0==r?1/r==-1/0:r<0}})},function(t,r,e){e(2)({target:"Math",stat:!0,forced:!0},{umulh:function(t,r){var e=65535,n=+t,o=+r,i=n&e,a=o&e,u=n>>>16,c=o>>>16,f=(u*a>>>0)+(i*a>>>16);return u*c+(f>>>16)+((i*c>>>0)+(f&e)>>>16)}})},function(t,e,n){var o=n(2),i=n(13),a=n(61),u=n(297),c="Invalid number representation",f=RangeError,s=SyntaxError,p=TypeError,l=/^[\da-z]+$/,h=i("".charAt),v=i(l.exec),y=i(1..toString),d=i("".slice);o({target:"Number",stat:!0,forced:!0},{fromString:function(t,e){var n,o,i=1;if("string"!=typeof t)throw p(c);if(!t.length)throw s(c);if("-"==h(t,0)&&(i=-1,!(t=d(t,1)).length))throw s(c);if((n=e===r?10:a(e))<2||n>36)throw f("Invalid radix");if(!v(l,t)||y(o=u(t,n),n)!==t)throw s(c);return i*o}})},function(t,r,e){var n=e(3),o=e(6),i=e(13),a=e(90),u=e(298).trim,c=e(299),f=n.parseInt,s=n.Symbol,p=s&&s.iterator,l=/^[+-]?0x/i,h=i(l.exec),v=8!==f(c+"08")||22!==f(c+"0x16")||p&&!o((function(){f(Object(p))}));t.exports=v?function(t,r){var e=u(a(t));return f(e,r>>>0||(h(l,e)?16:10))}:f},function(t,r,e){var n=e(13),o=e(15),i=e(90),a=e(299),u=n("".replace),c=RegExp("^["+a+"]+"),f=RegExp("(^|[^"+a+"])["+a+"]+$"),s=function(t){return function(r){var e=i(o(r));return 1&t&&(e=u(e,c,"")),2&t&&(e=u(e,f,"$1")),e}};t.exports={start:s(1),end:s(2),trim:s(3)}},function(t,r){t.exports="\t\n\v\f\r                 \u2028\u2029\ufeff"},function(t,r,e){var n=e(2),o=e(187);n({target:"Number",stat:!0,forced:!0},{range:function(t,r,e){return new o(t,r,e,"number",0,1)}})},function(t,r,e){var n=e(2),o=e(302);n({target:"Object",stat:!0,forced:!0},{iterateEntries:function(t){return new o(t,"entries")}})},function(t,e,n){var o=n(51),i=n(188),a=n(120),u=n(38),c=n(76),f=n(39),s="Object Iterator",p=o.set,l=o.getterFor(s);t.exports=i((function(t,r){var e=f(t);p(this,{type:s,mode:r,object:e,keys:c(e),index:0})}),"Object",(function(){for(var t=l(this),e=t.keys;;){if(null===e||t.index>=e.length)return t.object=t.keys=null,a(r,!0);var n=e[t.index++],o=t.object;if(u(o,n)){switch(t.mode){case"keys":return a(n,!1);case"values":return a(o[n],!1)}return a([n,o[n]],!1)}}}))},function(t,r,e){var n=e(2),o=e(302);n({target:"Object",stat:!0,forced:!0},{iterateKeys:function(t){return new o(t,"keys")}})},function(t,r,e){var n=e(2),o=e(302);n({target:"Object",stat:!0,forced:!0},{iterateValues:function(t){return new o(t,"values")}})},function(t,r,e){var n=e(2),o=e(23),i=e(13),a=e(30),u=e(15),c=e(17),f=e(204),s=o("Object","create"),p=i([].push);n({target:"Object",stat:!0,forced:!0},{groupBy:function(t,r){u(t),a(r);var e=s(null),n=0;return f(t,(function(t){var o=c(r(t,n++));o in e?p(e[o],t):e[o]=[t]})),e}})},function(t,r,e){e(307),e(310),e(311)},function(t,e,n){var o=n(2),i=n(7),a=n(5),u=n(210),c=n(30),f=n(46),s=n(159),p=n(20),l=n(16),h=n(19),v=n(29),y=n(47),d=n(118),g=n(87),b=n(308),m=n(33),x=n(51),w=n(309),S=m("observable"),A="Observable",E="Subscription",O="SubscriptionObserver",R=x.getterFor,I=x.set,k=R(A),T=R(E),M=R(O),j=function(t){this.observer=f(t),this.cleanup=r,this.subscriptionObserver=r};j.prototype={type:E,clean:function(){var t=this.cleanup;if(t){this.cleanup=r;try{t()}catch(t){b(t)}}},close:function(){if(!a){var t=this.facade,e=this.subscriptionObserver;t.closed=!0,e&&(e.closed=!0)}this.observer=r},isClosed:function(){return this.observer===r}};var P=function(t,r){var e,n=I(this,new j(t));a||(this.closed=!1);try{(e=v(t,"start"))&&i(e,t,this)}catch(t){b(t)}if(!n.isClosed()){var o=n.subscriptionObserver=new D(n);try{var u=r(o),f=u;l(u)||(n.cleanup=p(u.unsubscribe)?function(){f.unsubscribe()}:c(u))}catch(t){return void o.error(t)}n.isClosed()&&n.clean()}};P.prototype=d({},{unsubscribe:function(){var t=T(this);t.isClosed()||(t.close(),t.clean())}}),a&&g(P.prototype,"closed",{configurable:!0,get:function(){return T(this).isClosed()}});var D=function(t){I(this,{type:O,subscriptionState:t}),a||(this.closed=!1)};D.prototype=d({},{next:function(t){var r=M(this).subscriptionState;if(!r.isClosed()){var e=r.observer;try{var n=v(e,"next");n&&i(n,e,t)}catch(t){b(t)}}},error:function(t){var r=M(this).subscriptionState;if(!r.isClosed()){var e=r.observer;r.close();try{var n=v(e,"error");n?i(n,e,t):b(t)}catch(t){b(t)}r.clean()}},complete:function(){var t=M(this).subscriptionState;if(!t.isClosed()){var r=t.observer;t.close();try{var e=v(r,"complete");e&&i(e,r)}catch(t){b(t)}t.clean()}}}),a&&g(D.prototype,"closed",{configurable:!0,get:function(){return M(this).subscriptionState.isClosed()}});var C=function(t){s(this,_),I(this,{type:A,subscriber:c(t)})},_=C.prototype;d(_,{subscribe:function(t){var e=arguments.length;return new P(p(t)?{next:t,error:e>1?arguments[1]:r,complete:e>2?arguments[2]:r}:h(t)?t:{},k(this).subscriber)}}),y(_,S,(function(){return this})),o({global:!0,constructor:!0,forced:w},{Observable:C}),u(A)},function(t,r){t.exports=function(t,r){try{1==arguments.length?console.error(t):console.error(t,r)}catch(t){}}},function(t,r,e){var n=e(3),o=e(20),i=e(33)("observable"),a=n.Observable,u=a&&a.prototype;t.exports=!(o(a)&&o(a.from)&&o(a.of)&&o(u.subscribe)&&o(u[i]))},function(t,r,e){var n=e(2),o=e(23),i=e(7),a=e(46),u=e(115),c=e(121),f=e(29),s=e(204),p=e(33),l=e(309),h=p("observable");n({target:"Observable",stat:!0,forced:l},{from:function(t){var r=u(this)?this:o("Observable"),e=f(a(t),h);if(e){var n=a(i(e,t));return n.constructor===r?n:new r((function(t){return n.subscribe(t)}))}var p=c(t);return new r((function(t){s(p,(function(r,e){if(t.next(r),t.closed)return e()}),{IS_ITERATOR:!0,INTERRUPTED:!0}),t.complete()}))}})},function(t,r,e){var n=e(2),o=e(23),i=e(115),a=e(309),u=o("Array");n({target:"Observable",stat:!0,forced:a},{of:function(){for(var t=i(this)?this:o("Observable"),r=arguments.length,e=u(r),n=0;n<r;)e[n]=arguments[n++];return new t((function(t){for(var n=0;n<r;n++)if(t.next(e[n]),t.closed)return;t.complete()}))}})},function(t,r,e){var n=e(2),o=e(313),i=e(166);n({target:"Promise",stat:!0,forced:!0},{try:function(t){var r=o.f(this),e=i(t);return(e.error?r.reject:r.resolve)(e.value),r.promise}})},function(t,e,n){var o=n(30),i=TypeError,a=function(t){var e,n;this.promise=new t((function(t,o){if(e!==r||n!==r)throw i("Bad Promise constructor");e=t,n=o})),this.resolve=o(e),this.reject=o(n)};t.exports.f=function(t){return new a(t)}},function(t,r,e){var n=e(2),o=e(313);n({target:"Promise",stat:!0,forced:!0},{withResolvers:function(){var t=o.f(this);return{promise:t.promise,resolve:t.resolve,reject:t.reject}}})},function(t,e,n){var o=n(2),i=n(316),a=n(46),u=i.toKey,c=i.set;o({target:"Reflect",stat:!0},{defineMetadata:function(t,e,n){var o=arguments.length<4?r:u(arguments[3]);c(t,e,a(n),o)}})},function(t,e,n){n(194),n(211);var o=n(23),i=n(13),a=n(34),u=o("Map"),c=o("WeakMap"),f=i([].push),s=a("metadata"),p=s.store||(s.store=new c),l=function(t,r,e){var n=p.get(t);if(!n){if(!e)return;p.set(t,n=new u)}var o=n.get(r);if(!o){if(!e)return;n.set(r,o=new u)}return o};t.exports={store:p,getMap:l,has:function(t,e,n){var o=l(e,n,!1);return o!==r&&o.has(t)},get:function(t,e,n){var o=l(e,n,!1);return o===r?r:o.get(t)},set:function(t,r,e,n){l(e,n,!0).set(t,r)},keys:function(t,r){var e=l(t,r,!1),n=[];return e&&e.forEach((function(t,r){f(n,r)})),n},toKey:function(t){return t===r||"symbol"==typeof t?t:String(t)}}},function(t,e,n){var o=n(2),i=n(316),a=n(46),u=i.toKey,c=i.getMap,f=i.store;o({target:"Reflect",stat:!0},{deleteMetadata:function(t,e){var n=arguments.length<3?r:u(arguments[2]),o=c(a(e),n,!1);if(o===r||!o.delete(t))return!1;if(o.size)return!0;var i=f.get(e);return i.delete(n),!!i.size||f.delete(e)}})},function(t,e,n){var o=n(2),i=n(316),a=n(46),u=n(97),c=i.has,f=i.get,s=i.toKey,p=function(t,e,n){if(c(t,e,n))return f(t,e,n);var o=u(e);return null!==o?p(t,o,n):r};o({target:"Reflect",stat:!0},{getMetadata:function(t,e){var n=arguments.length<3?r:s(arguments[2]);return p(t,a(e),n)}})},function(t,e,n){var o=n(2),i=n(13),a=n(316),u=n(46),c=n(97),f=i(n(144)),s=i([].concat),p=a.keys,l=a.toKey,h=function(t,r){var e=p(t,r),n=c(t);if(null===n)return e;var o=h(n,r);return o.length?e.length?f(s(e,o)):o:e};o({target:"Reflect",stat:!0},{getMetadataKeys:function(t){var e=arguments.length<2?r:l(arguments[1]);return h(u(t),e)}})},function(t,e,n){var o=n(2),i=n(316),a=n(46),u=i.get,c=i.toKey;o({target:"Reflect",stat:!0},{getOwnMetadata:function(t,e){var n=arguments.length<3?r:c(arguments[2]);return u(t,a(e),n)}})},function(t,e,n){var o=n(2),i=n(316),a=n(46),u=i.keys,c=i.toKey;o({target:"Reflect",stat:!0},{getOwnMetadataKeys:function(t){var e=arguments.length<2?r:c(arguments[1]);return u(a(t),e)}})},function(t,e,n){var o=n(2),i=n(316),a=n(46),u=n(97),c=i.has,f=i.toKey,s=function(t,r,e){if(c(t,r,e))return!0;var n=u(r);return null!==n&&s(t,n,e)};o({target:"Reflect",stat:!0},{hasMetadata:function(t,e){var n=arguments.length<3?r:f(arguments[2]);return s(t,a(e),n)}})},function(t,e,n){var o=n(2),i=n(316),a=n(46),u=i.has,c=i.toKey;o({target:"Reflect",stat:!0},{hasOwnMetadata:function(t,e){var n=arguments.length<3?r:c(arguments[2]);return u(t,a(e),n)}})},function(t,r,e){var n=e(2),o=e(316),i=e(46),a=o.toKey,u=o.set;n({target:"Reflect",stat:!0},{metadata:function(t,r){return function(e,n){u(t,r,i(e),a(n))}}})},function(t,r,e){var n=e(2),o=e(326),i=e(327).add;n({target:"Set",proto:!0,real:!0,forced:!0},{addAll:function(){for(var t=o(this),r=0,e=arguments.length;r<e;r++)i(t,arguments[r]);return t}})},function(t,r,e){var n=e(327).has;t.exports=function(t){return n(t),t}},function(t,r,e){var n=e(13),o=Set.prototype;t.exports={Set,add:n(o.add),has:n(o.has),remove:n(o.delete),proto:o}},function(t,r,e){var n=e(2),o=e(326),i=e(327).remove;n({target:"Set",proto:!0,real:!0,forced:!0},{deleteAll:function(){for(var t,r=o(this),e=!0,n=0,a=arguments.length;n<a;n++)t=i(r,arguments[n]),e=e&&t;return!!e}})},function(t,r,e){var n=e(2),o=e(330);n({target:"Set",proto:!0,real:!0,forced:!e(335)("difference")},{difference:o})},function(t,r,e){var n=e(326),o=e(327),i=e(331),a=e(333),u=e(334),c=e(332),f=e(146),s=o.has,p=o.remove;t.exports=function(t){var r=n(this),e=u(t),o=i(r);return a(r)<=e.size?c(r,(function(t){e.includes(t)&&p(o,t)})):f(e.getIterator(),(function(t){s(r,t)&&p(o,t)})),o}},function(t,r,e){var n=e(327),o=e(332),i=n.Set,a=n.add;t.exports=function(t){var r=new i;return o(t,(function(t){a(r,t)})),r}},function(t,r,e){var n=e(13),o=e(146),i=e(327),a=i.Set,u=i.proto,c=n(u.forEach),f=n(u.keys),s=f(new a).next;t.exports=function(t,r,e){return e?o(f(t),r,s):c(t,r)}},function(t,r,e){var n=e(100),o=e(327);t.exports=n(o.proto,"size","get")||function(t){return t.size}},function(t,r,e){var n=e(30),o=e(46),i=e(7),a=e(61),u=TypeError,c=Math.max,f=function(t,r,e,n){this.set=t,this.size=r,this.has=e,this.keys=n};f.prototype={getIterator:function(){return o(i(this.keys,this.set))},includes:function(t){return i(this.has,this.set,t)}},t.exports=function(t){o(t);var r=+t.size;if(r!=r)throw u("Invalid size");return new f(t,c(a(r),0),n(t.has),n(t.keys))}},function(t,r,e){var n=e(23);t.exports=function(t){try{return(new(n("Set")))[t]({size:0,has:function(){return!1},keys:function(){return{next:function(){return{done:!0}}}}}),!0}catch(t){return!1}}},function(t,r,e){var n=e(2),o=e(7),i=e(337),a=e(330);n({target:"Set",proto:!0,real:!0,forced:!0},{difference:function(t){return o(a,this,i(t))}})},function(t,r,e){var n=e(23),o=e(20),i=e(338),a=e(19),u=n("Set");t.exports=function(t){return function(t){return a(t)&&"number"==typeof t.size&&o(t.has)&&o(t.keys)}(t)?t:i(t)?new u(t):t}},function(t,e,n){var o=n(91),i=n(38),a=n(16),u=n(33),c=n(123),f=u("iterator"),s=Object;t.exports=function(t){if(a(t))return!1;var e=s(t);return e[f]!==r||"@@iterator"in e||i(c,o(e))}},function(t,e,n){var o=n(2),i=n(113),a=n(326),u=n(332);o({target:"Set",proto:!0,real:!0,forced:!0},{every:function(t){var e=a(this),n=i(t,arguments.length>1?arguments[1]:r);return!1!==u(e,(function(t){if(!n(t,t,e))return!1}),!0)}})},function(t,e,n){var o=n(2),i=n(113),a=n(326),u=n(327),c=n(332),f=u.Set,s=u.add;o({target:"Set",proto:!0,real:!0,forced:!0},{filter:function(t){var e=a(this),n=i(t,arguments.length>1?arguments[1]:r),o=new f;return c(e,(function(t){n(t,t,e)&&s(o,t)})),o}})},function(t,e,n){var o=n(2),i=n(113),a=n(326),u=n(332);o({target:"Set",proto:!0,real:!0,forced:!0},{find:function(t){var e=a(this),n=i(t,arguments.length>1?arguments[1]:r),o=u(e,(function(t){if(n(t,t,e))return{value:t}}),!0);return o&&o.value}})},function(t,r,e){e(2)({target:"Set",stat:!0,forced:!0},{from:e(260)})},function(t,r,e){var n=e(2),o=e(6),i=e(344);n({target:"Set",proto:!0,real:!0,forced:!e(335)("intersection")||o((function(){return"3,2"!=Array.from(new Set([1,2,3]).intersection(new Set([3,2])))}))},{intersection:i})},function(t,r,e){var n=e(326),o=e(327),i=e(333),a=e(334),u=e(332),c=e(146),f=o.Set,s=o.add,p=o.has;t.exports=function(t){var r=n(this),e=a(t),o=new f;return i(r)>e.size?c(e.getIterator(),(function(t){p(r,t)&&s(o,t)})):u(r,(function(t){e.includes(t)&&s(o,t)})),o}},function(t,r,e){var n=e(2),o=e(7),i=e(337),a=e(344);n({target:"Set",proto:!0,real:!0,forced:!0},{intersection:function(t){return o(a,this,i(t))}})},function(t,r,e){var n=e(2),o=e(347);n({target:"Set",proto:!0,real:!0,forced:!e(335)("isDisjointFrom")},{isDisjointFrom:o})},function(t,r,e){var n=e(326),o=e(327).has,i=e(333),a=e(334),u=e(332),c=e(146),f=e(167);t.exports=function(t){var r=n(this),e=a(t);if(i(r)<=e.size)return!1!==u(r,(function(t){if(e.includes(t))return!1}),!0);var s=e.getIterator();return!1!==c(s,(function(t){if(o(r,t))return f(s,"normal",!1)}))}},function(t,r,e){var n=e(2),o=e(7),i=e(337),a=e(347);n({target:"Set",proto:!0,real:!0,forced:!0},{isDisjointFrom:function(t){return o(a,this,i(t))}})},function(t,r,e){var n=e(2),o=e(350);n({target:"Set",proto:!0,real:!0,forced:!e(335)("isSubsetOf")},{isSubsetOf:o})},function(t,r,e){var n=e(326),o=e(333),i=e(332),a=e(334);t.exports=function(t){var r=n(this),e=a(t);return!(o(r)>e.size)&&!1!==i(r,(function(t){if(!e.includes(t))return!1}),!0)}},function(t,r,e){var n=e(2),o=e(7),i=e(337),a=e(350);n({target:"Set",proto:!0,real:!0,forced:!0},{isSubsetOf:function(t){return o(a,this,i(t))}})},function(t,r,e){var n=e(2),o=e(353);n({target:"Set",proto:!0,real:!0,forced:!e(335)("isSupersetOf")},{isSupersetOf:o})},function(t,r,e){var n=e(326),o=e(327).has,i=e(333),a=e(334),u=e(146),c=e(167);t.exports=function(t){var r=n(this),e=a(t);if(i(r)<e.size)return!1;var f=e.getIterator();return!1!==u(f,(function(t){if(!o(r,t))return c(f,"normal",!1)}))}},function(t,r,e){var n=e(2),o=e(7),i=e(337),a=e(353);n({target:"Set",proto:!0,real:!0,forced:!0},{isSupersetOf:function(t){return o(a,this,i(t))}})},function(t,e,n){var o=n(2),i=n(13),a=n(326),u=n(332),c=n(90),f=i([].join),s=i([].push);o({target:"Set",proto:!0,real:!0,forced:!0},{join:function(t){var e=a(this),n=t===r?",":c(t),o=[];return u(e,(function(t){s(o,t)})),f(o,n)}})},function(t,e,n){var o=n(2),i=n(113),a=n(326),u=n(327),c=n(332),f=u.Set,s=u.add;o({target:"Set",proto:!0,real:!0,forced:!0},{map:function(t){var e=a(this),n=i(t,arguments.length>1?arguments[1]:r),o=new f;return c(e,(function(t){s(o,n(t,t,e))})),o}})},function(t,r,e){e(2)({target:"Set",stat:!0,forced:!0},{of:e(271)})},function(t,e,n){var o=n(2),i=n(30),a=n(326),u=n(332),c=TypeError;o({target:"Set",proto:!0,real:!0,forced:!0},{reduce:function(t){var e=a(this),n=arguments.length<2,o=n?r:arguments[1];if(i(t),u(e,(function(r){n?(n=!1,o=r):o=t(o,r,r,e)})),n)throw c("Reduce of empty set with no initial value");return o}})},function(t,e,n){var o=n(2),i=n(113),a=n(326),u=n(332);o({target:"Set",proto:!0,real:!0,forced:!0},{some:function(t){var e=a(this),n=i(t,arguments.length>1?arguments[1]:r);return!0===u(e,(function(t){if(n(t,t,e))return!0}),!0)}})},function(t,r,e){var n=e(2),o=e(361);n({target:"Set",proto:!0,real:!0,forced:!e(335)("symmetricDifference")},{symmetricDifference:o})},function(t,r,e){var n=e(326),o=e(327),i=e(331),a=e(334),u=e(146),c=o.add,f=o.has,s=o.remove;t.exports=function(t){var r=n(this),e=a(t).getIterator(),o=i(r);return u(e,(function(t){f(r,t)?s(o,t):c(o,t)})),o}},function(t,r,e){var n=e(2),o=e(7),i=e(337),a=e(361);n({target:"Set",proto:!0,real:!0,forced:!0},{symmetricDifference:function(t){return o(a,this,i(t))}})},function(t,r,e){var n=e(2),o=e(364);n({target:"Set",proto:!0,real:!0,forced:!e(335)("union")},{union:o})},function(t,r,e){var n=e(326),o=e(327).add,i=e(331),a=e(334),u=e(146);t.exports=function(t){var r=n(this),e=a(t).getIterator(),c=i(r);return u(e,(function(t){o(c,t)})),c}},function(t,r,e){var n=e(2),o=e(7),i=e(337),a=e(364);n({target:"Set",proto:!0,real:!0,forced:!0},{union:function(t){return o(a,this,i(t))}})},function(t,e,n){var o=n(2),i=n(367).charAt,a=n(15),u=n(61),c=n(90);o({target:"String",proto:!0,forced:!0},{at:function(t){var e=c(a(this)),n=e.length,o=u(t),f=o>=0?o:n+o;return f<0||f>=n?r:i(e,f)}})},function(t,e,n){var o=n(13),i=n(61),a=n(90),u=n(15),c=o("".charAt),f=o("".charCodeAt),s=o("".slice),p=function(t){return function(e,n){var o,p,l=a(u(e)),h=i(n),v=l.length;return h<0||h>=v?t?"":r:(o=f(l,h))<55296||o>56319||h+1===v||(p=f(l,h+1))<56320||p>57343?t?c(l,h):o:t?s(l,h,h+2):p-56320+(o-55296<<10)+65536}};t.exports={codeAt:p(!1),charAt:p(!0)}},function(t,r,e){e(2)({target:"String",stat:!0,forced:!0},{cooked:e(369)})},function(t,e,n){var o=n(13),i=n(11),a=n(90),u=n(63),c=TypeError,f=o([].push),s=o([].join);t.exports=function(t){var e=i(t),n=u(e);if(!n)return"";for(var o=arguments.length,p=[],l=0;;){var h=e[l++];if(h===r)throw c("Incorrect template");if(f(p,a(h)),l===n)return s(p,"");l<o&&f(p,a(arguments[l]))}}},function(t,e,n){var o=n(2),i=n(188),a=n(120),u=n(15),c=n(90),f=n(51),s=n(367),p=s.codeAt,l=s.charAt,h="String Iterator",v=f.set,y=f.getterFor(h),d=i((function(t){v(this,{type:h,string:t,index:0})}),"String",(function(){var t,e=y(this),n=e.string,o=e.index;return o>=n.length?a(r,!0):(t=l(n,o),e.index+=t.length,a({codePoint:p(t,0),position:o},!1))}));o({target:"String",proto:!0,forced:!0},{codePoints:function(){return new d(c(u(this)))}})},function(t,e,n){var o=n(203),i=n(2),a=n(34),u=n(23),c=n(48),f=n(13),s=n(192),p=n(46),l=n(39),h=n(20),v=n(63),y=n(44).f,d=n(199),g=n(369),b=n(372),m=n(299),x=a("GlobalDedentRegistry",new(u("WeakMap")));x.has=x.has,x.get=x.get,x.set=x.set;var w=Array,S=TypeError,A=Object.freeze||Object,E=Object.isFrozen,O=Math.min,R=f("".charAt),I=f("".slice),k=f("".split),T=f(/./.exec),M=/([\n\u2028\u2029]|\r\n?)/g,j=RegExp("^["+m+"]*"),P=RegExp("[^"+m+"]"),D="Invalid tag",C=function(t,e){if(e===r||t===e)return t;for(var n=0,o=O(t.length,e.length);n<o&&R(t,n)===R(e,n);n++);return I(t,0,n)},_=function(t){return c((function(r){var e=d(arguments);return e[0]=function(t){var r=t.raw;if(o&&!E(r))throw S("Raw template should be frozen");if(x.has(r))return x.get(r);var e=function(t){var r,e,n=l(t),o=v(n),i=w(o),a=w(o),u=0;if(!o)throw S(D);for(;u<o;u++){var c=n[u];if("string"!=typeof c)throw S(D);i[u]=k(c,M)}for(u=0;u<o;u++){var f=u+1===o;if(r=i[u],0===u){if(1===r.length||r[0].length>0)throw S("Invalid opening line");r[1]=""}if(f){if(1===r.length||T(P,r[r.length-1]))throw S("Invalid closing line");r[r.length-2]="",r[r.length-1]=""}for(var s=2;s<r.length;s+=2){var p=r[s],h=s+1===r.length&&!f,y=T(j,p)[0];h||y.length!==p.length?e=C(y,e):r[s]=""}}var d=e?e.length:0;for(u=0;u<o;u++){for(var g=(r=i[u])[0],b=1;b<r.length;b+=2)g+=r[b]+I(r[b+1],d);a[u]=g}return a}(r),n=function(t){for(var r=0,e=t.length,n=w(e);r<e;r++)n[r]=b(t[r]);return n}(e);return y(n,"raw",{value:A(e)}),A(n),x.set(r,n),n}(p(r)),s(t,this,e)}),"")},N=_(g);i({target:"String",stat:!0,forced:!0},{dedent:function(t){return p(t),h(t)?_(t):s(N,this,arguments)}})},function(t,r,e){var n=e(23),o=e(13),i=String.fromCharCode,a=n("String","fromCodePoint"),u=o("".charAt),c=o("".charCodeAt),f=o("".indexOf),s=o("".slice),p=function(t,r){var e=c(t,r);return e>=48&&e<=57},l=function(t,r,e){if(e>=t.length)return-1;for(var n=0;r<e;r++){var o=h(c(t,r));if(-1===o)return-1;n=16*n+o}return n},h=function(t){return t>=48&&t<=57?t-48:t>=97&&t<=102?t-97+10:t>=65&&t<=70?t-65+10:-1};t.exports=function(t){for(var r,e="",n=0,o=0;(o=f(t,"\\",o))>-1;){if(e+=s(t,n,o),++o===t.length)return;var c=u(t,o++);switch(c){case"b":e+="\b";break;case"t":e+="\t";break;case"n":e+="\n";break;case"v":e+="\v";break;case"f":e+="\f";break;case"r":e+="\r";break;case"\r":o<t.length&&"\n"===u(t,o)&&++o;case"\n":case"\u2028":case"\u2029":break;case"0":if(p(t,o))return;e+="\0";break;case"x":if(-1===(r=l(t,o,o+2)))return;o+=2,e+=i(r);break;case"u":if(o<t.length&&"{"===u(t,o)){var h=f(t,"}",++o);if(-1===h)return;r=l(t,o,h),o=h+1}else r=l(t,o,o+4),o+=4;if(-1===r||r>1114111)return;e+=a(r);break;default:if(p(c,0))return;e+=c}n=o}return e+s(t,n)}},function(t,r,e){e(374)("asyncDispose")},function(t,r,e){var n=e(375),o=e(38),i=e(376),a=e(44).f;t.exports=function(t){var r=n.Symbol||(n.Symbol={});o(r,t)||a(r,t,{value:i.f(t)})}},function(t,r,e){var n=e(3);t.exports=n},function(t,r,e){var n=e(33);r.f=n},function(t,r,e){e(374)("dispose")},function(t,r,e){e(2)({target:"Symbol",stat:!0},{isRegisteredSymbol:e(379)})},function(t,e,n){var o=n(23),i=n(13),a=o("Symbol"),u=a.keyFor,c=i(a.prototype.valueOf);t.exports=a.isRegisteredSymbol||function(t){try{return u(c(t))!==r}catch(t){return!1}}},function(t,r,e){e(2)({target:"Symbol",stat:!0,name:"isRegisteredSymbol"},{isRegistered:e(379)})},function(t,r,e){e(2)({target:"Symbol",stat:!0,forced:!0},{isWellKnownSymbol:e(382)})},function(t,r,e){for(var n=e(34),o=e(23),i=e(13),a=e(22),u=e(33),c=o("Symbol"),f=c.isWellKnownSymbol,s=o("Object","getOwnPropertyNames"),p=i(c.prototype.valueOf),l=n("wks"),h=0,v=s(c),y=v.length;h<y;h++)try{var d=v[h];a(c[d])&&u(d)}catch(t){}t.exports=function(t){if(f&&f(t))return!0;try{for(var r=p(t),e=0,n=s(l),o=n.length;e<o;e++)if(l[n[e]]==r)return!0}catch(t){}return!1}},function(t,r,e){e(2)({target:"Symbol",stat:!0,name:"isWellKnownSymbol",forced:!0},{isWellKnown:e(382)})},function(t,r,e){e(374)("matcher")},function(t,r,e){e(374)("metadata")},function(t,r,e){e(374)("metadataKey")},function(t,r,e){e(374)("observable")},function(t,r,e){e(374)("patternMatch")},function(t,r,e){e(374)("replaceAll")},function(t,e,n){var o=n(23),i=n(261),a=n(112),u=n(95),c=n(79),f=u.aTypedArrayConstructor;(0,u.exportTypedArrayStaticMethod)("fromAsync",(function(t){var e=this,n=arguments.length,u=n>1?arguments[1]:r,s=n>2?arguments[2]:r;return new(o("Promise"))((function(r){i(e),r(a(t,u,s))})).then((function(t){return c(f(e),t)}))}),!0)},function(t,e,n){var o=n(95),i=n(128).filterReject,a=n(392),u=o.aTypedArray;(0,o.exportTypedArrayMethod)("filterOut",(function(t){var e=i(u(this),t,arguments.length>1?arguments[1]:r);return a(this,e)}),!0)},function(t,r,e){var n=e(79),o=e(393);t.exports=function(t,r){return n(o(t),r)}},function(t,r,e){var n=e(95),o=e(394),i=n.aTypedArrayConstructor,a=n.getTypedArrayConstructor;t.exports=function(t){return i(o(t,a(t)))}},function(t,e,n){var o=n(46),i=n(261),a=n(16),u=n(33)("species");t.exports=function(t,e){var n,c=o(t).constructor;return c===r||a(n=o(c)[u])?e:i(n)}},function(t,e,n){var o=n(95),i=n(128).filterReject,a=n(392),u=o.aTypedArray;(0,o.exportTypedArrayMethod)("filterReject",(function(t){var e=i(u(this),t,arguments.length>1?arguments[1]:r);return a(this,e)}),!0)},function(t,e,n){var o=n(95),i=n(133),a=n(393),u=o.aTypedArray;(0,o.exportTypedArrayMethod)("groupBy",(function(t){var e=arguments.length>1?arguments[1]:r;return i(u(this),t,e,a)}),!0)},function(t,r,e){var n=e(95),o=e(63),i=e(104),a=e(60),u=e(105),c=e(61),f=e(6),s=n.aTypedArray,p=n.getTypedArrayConstructor,l=n.exportTypedArrayMethod,h=Math.max,v=Math.min;l("toSpliced",(function(t,r){var e,n,f,l,y,d,g,b=s(this),m=p(b),x=o(b),w=a(t,x),S=arguments.length,A=0;if(0===S)e=n=0;else if(1===S)e=0,n=x-w;else if(n=v(h(c(r),0),x-w),e=S-2){l=new m(e),f=i(l);for(var E=2;E<S;E++)y=arguments[E],l[E-2]=f?u(y):+y}for(g=new m(d=x+e-n);A<w;A++)g[A]=b[A];for(;A<w+e;A++)g[A]=l[A-w];for(;A<d;A++)g[A]=b[A+n-e];return g}),!!f((function(){var t=new Int8Array([1]),r=t.toSpliced(1,0,{valueOf:function(){return t[0]=2,3}});return 2!==r[0]||3!==r[1]})))},function(t,r,e){var n=e(13),o=e(95),i=e(79),a=e(144),u=o.aTypedArray,c=o.getTypedArrayConstructor,f=o.exportTypedArrayMethod,s=n(a);f("uniqueBy",(function(t){return u(this),i(c(this),s(this,t))}),!0)},function(t,r,e){var n=e(2),o=e(400),i=e(401).remove;n({target:"WeakMap",proto:!0,real:!0,forced:!0},{deleteAll:function(){for(var t,r=o(this),e=!0,n=0,a=arguments.length;n<a;n++)t=i(r,arguments[n]),e=e&&t;return!!e}})},function(t,r,e){var n=e(401).has;t.exports=function(t){return n(t),t}},function(t,r,e){var n=e(13),o=WeakMap.prototype;t.exports={WeakMap,set:n(o.set),get:n(o.get),has:n(o.has),remove:n(o.delete)}},function(t,r,e){e(2)({target:"WeakMap",stat:!0,forced:!0},{from:e(260)})},function(t,r,e){e(2)({target:"WeakMap",stat:!0,forced:!0},{of:e(271)})},function(t,r,e){var n=e(2),o=e(400),i=e(401),a=i.get,u=i.has,c=i.set;n({target:"WeakMap",proto:!0,real:!0,forced:!0},{emplace:function(t,r){var e,n,i=o(this);return u(i,t)?(e=a(i,t),"update"in r&&(e=r.update(e,t,i),c(i,t,e)),e):(n=r.insert(t,i),c(i,t,n),n)}})},function(t,r,e){e(2)({target:"WeakMap",proto:!0,real:!0,forced:!0},{upsert:e(277)})},function(t,r,e){var n=e(2),o=e(407),i=e(408).add;n({target:"WeakSet",proto:!0,real:!0,forced:!0},{addAll:function(){for(var t=o(this),r=0,e=arguments.length;r<e;r++)i(t,arguments[r]);return t}})},function(t,r,e){var n=e(408).has;t.exports=function(t){return n(t),t}},function(t,r,e){var n=e(13),o=WeakSet.prototype;t.exports={WeakSet,add:n(o.add),has:n(o.has),remove:n(o.delete)}},function(t,r,e){var n=e(2),o=e(407),i=e(408).remove;n({target:"WeakSet",proto:!0,real:!0,forced:!0},{deleteAll:function(){for(var t,r=o(this),e=!0,n=0,a=arguments.length;n<a;n++)t=i(r,arguments[n]),e=e&&t;return!!e}})},function(t,r,e){e(2)({target:"WeakSet",stat:!0,forced:!0},{from:e(260)})},function(t,r,e){e(2)({target:"WeakSet",stat:!0,forced:!0},{of:e(271)})},function(t,e,n){var o=n(2),i=n(3),a=n(23),u=n(10),c=n(44).f,f=n(38),s=n(159),p=n(207),l=n(110),h=n(413),v=n(108),y=n(5),d=n(35),g="DOMException",b=a("Error"),m=a(g),x=function(){s(this,w);var t=arguments.length,e=l(t<1?r:arguments[0]),n=l(t<2?r:arguments[1],"Error"),o=new m(e,n),i=b(e);return i.name=g,c(o,"stack",u(1,v(i.stack,1))),p(o,this,x),o},w=x.prototype=m.prototype,S="stack"in b(g),A="stack"in new m(1,2),E=m&&y&&Object.getOwnPropertyDescriptor(i,g),O=!(!E||E.writable&&E.configurable),R=S&&!O&&!A;o({global:!0,constructor:!0,forced:d||R},{DOMException:R?x:m});var I=a(g),k=I.prototype;if(k.constructor!==I)for(var T in d||c(k,"constructor",u(1,I)),h)if(f(h,T)){var M=h[T],j=M.s;f(I,j)||c(I,j,u(6,M.c))}},function(t,r){t.exports={IndexSizeError:{s:"INDEX_SIZE_ERR",c:1,m:1},DOMStringSizeError:{s:"DOMSTRING_SIZE_ERR",c:2,m:0},HierarchyRequestError:{s:"HIERARCHY_REQUEST_ERR",c:3,m:1},WrongDocumentError:{s:"WRONG_DOCUMENT_ERR",c:4,m:1},InvalidCharacterError:{s:"INVALID_CHARACTER_ERR",c:5,m:1},NoDataAllowedError:{s:"NO_DATA_ALLOWED_ERR",c:6,m:0},NoModificationAllowedError:{s:"NO_MODIFICATION_ALLOWED_ERR",c:7,m:1},NotFoundError:{s:"NOT_FOUND_ERR",c:8,m:1},NotSupportedError:{s:"NOT_SUPPORTED_ERR",c:9,m:1},InUseAttributeError:{s:"INUSE_ATTRIBUTE_ERR",c:10,m:1},InvalidStateError:{s:"INVALID_STATE_ERR",c:11,m:1},SyntaxError:{s:"SYNTAX_ERR",c:12,m:1},InvalidModificationError:{s:"INVALID_MODIFICATION_ERR",c:13,m:1},NamespaceError:{s:"NAMESPACE_ERR",c:14,m:1},InvalidAccessError:{s:"INVALID_ACCESS_ERR",c:15,m:1},ValidationError:{s:"VALIDATION_ERR",c:16,m:0},TypeMismatchError:{s:"TYPE_MISMATCH_ERR",c:17,m:1},SecurityError:{s:"SECURITY_ERR",c:18,m:1},NetworkError:{s:"NETWORK_ERR",c:19,m:1},AbortError:{s:"ABORT_ERR",c:20,m:1},URLMismatchError:{s:"URL_MISMATCH_ERR",c:21,m:1},QuotaExceededError:{s:"QUOTA_EXCEEDED_ERR",c:22,m:1},TimeoutError:{s:"TIMEOUT_ERR",c:23,m:1},InvalidNodeTypeError:{s:"INVALID_NODE_TYPE_ERR",c:24,m:1},DataCloneError:{s:"DATA_CLONE_ERR",c:25,m:1}}},function(t,e,n){var o,i=n(35),a=n(2),u=n(3),c=n(23),f=n(13),s=n(6),p=n(40),l=n(20),h=n(115),v=n(16),y=n(19),d=n(22),g=n(204),b=n(46),m=n(91),x=n(38),w=n(200),S=n(43),A=n(63),E=n(415),O=n(416),R=n(138),I=n(327),k=n(109),T=n(153),M=u.Object,j=u.Array,P=u.Date,D=u.Error,C=u.EvalError,_=u.RangeError,N=u.ReferenceError,F=u.SyntaxError,B=u.TypeError,z=u.URIError,U=u.PerformanceMark,L=u.WebAssembly,W=L&&L.CompileError||D,K=L&&L.LinkError||D,V=L&&L.RuntimeError||D,G=c("DOMException"),H=R.Map,J=R.has,Y=R.get,$=R.set,q=I.Set,X=I.add,Q=c("Object","keys"),Z=f([].push),tt=f((!0).valueOf),rt=f(1..valueOf),et=f("".valueOf),nt=f(P.prototype.getTime),ot=p("structuredClone"),it="DataCloneError",at="Transferring",ut=function(t){return!s((function(){var r=new u.Set([7]),e=t(r),n=t(M(7));return e==r||!e.has(7)||"object"!=typeof n||7!=n}))&&t},ct=function(t,r){return!s((function(){var e=new r,n=t({a:e,b:e});return!(n&&n.a===n.b&&n.a instanceof r&&n.a.stack===e.stack)}))},ft=u.structuredClone,st=i||!ct(ft,D)||!ct(ft,G)||(o=ft,!!s((function(){var t=o(new u.AggregateError([1],ot,{cause:3}));return"AggregateError"!=t.name||1!=t.errors[0]||t.message!=ot||3!=t.cause}))),pt=!ft&&ut((function(t){return new U(ot,{detail:t}).detail})),lt=ut(ft)||pt,ht=function(t){throw new G("Uncloneable type: "+t,it)},vt=function(t,r){throw new G((r||"Cloning")+" of "+t+" cannot be properly polyfilled in this engine",it)},yt=function(t,r){return lt||vt(r),lt(t)},dt=function(t,e){if(d(t)&&ht("Symbol"),!y(t))return t;if(e){if(J(e,t))return Y(e,t)}else e=new H;var n,o,i,a,f,s,p,h,v,g,b,E=m(t),R=!1;switch(E){case"Array":i=j(A(t)),R=!0;break;case"Object":i={},R=!0;break;case"Map":i=new H,R=!0;break;case"Set":i=new q,R=!0;break;case"RegExp":i=new RegExp(t.source,O(t));break;case"Error":switch(o=t.name){case"AggregateError":i=c("AggregateError")([]);break;case"EvalError":i=C();break;case"RangeError":i=_();break;case"ReferenceError":i=N();break;case"SyntaxError":i=F();break;case"TypeError":i=B();break;case"URIError":i=z();break;case"CompileError":i=W();break;case"LinkError":i=K();break;case"RuntimeError":i=V();break;default:i=D()}R=!0;break;case"DOMException":i=new G(t.message,t.name),R=!0;break;case"DataView":case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"Uint32Array":case"Float32Array":case"Float64Array":case"BigInt64Array":case"BigUint64Array":n=u[E],y(n)||vt(E),i=new n(dt(t.buffer,e),t.byteOffset,"DataView"===E?t.byteLength:t.length);break;case"DOMQuad":try{i=new DOMQuad(dt(t.p1,e),dt(t.p2,e),dt(t.p3,e),dt(t.p4,e))}catch(r){i=yt(t,E)}break;case"File":if(lt)try{i=lt(t),m(i)!==E&&(i=r)}catch(t){}if(!i)try{i=new File([t],t.name,t)}catch(t){}i||vt(E);break;case"FileList":if(a=function(){var t;try{t=new u.DataTransfer}catch(r){try{t=new u.ClipboardEvent("").clipboardData}catch(t){}}return t&&t.items&&t.files?t:null}()){for(f=0,s=A(t);f<s;f++)a.items.add(dt(t[f],e));i=a.files}else i=yt(t,E);break;case"ImageData":try{i=new ImageData(dt(t.data,e),t.width,t.height,{colorSpace:t.colorSpace})}catch(r){i=yt(t,E)}break;default:if(lt)i=lt(t);else switch(E){case"BigInt":i=M(t.valueOf());break;case"Boolean":i=M(tt(t));break;case"Number":i=M(rt(t));break;case"String":i=M(et(t));break;case"Date":i=new P(nt(t));break;case"ArrayBuffer":(n=u.DataView)||"function"==typeof t.slice||vt(E);try{if("function"!=typeof t.slice||t.resizable){s=t.byteLength,b="maxByteLength"in t?{maxByteLength:t.maxByteLength}:r,i=new ArrayBuffer(s,b),v=new n(t),g=new n(i);for(f=0;f<s;f++)g.setUint8(f,v.getUint8(f))}else i=t.slice(0)}catch(t){throw new G("ArrayBuffer is detached",it)}break;case"SharedArrayBuffer":i=t;break;case"Blob":try{i=t.slice(0,t.size,t.type)}catch(t){vt(E)}break;case"DOMPoint":case"DOMPointReadOnly":n=u[E];try{i=n.fromPoint?n.fromPoint(t):new n(t.x,t.y,t.z,t.w)}catch(t){vt(E)}break;case"DOMRect":case"DOMRectReadOnly":n=u[E];try{i=n.fromRect?n.fromRect(t):new n(t.x,t.y,t.width,t.height)}catch(t){vt(E)}break;case"DOMMatrix":case"DOMMatrixReadOnly":n=u[E];try{i=n.fromMatrix?n.fromMatrix(t):new n(t)}catch(t){vt(E)}break;case"AudioData":case"VideoFrame":l(t.clone)||vt(E);try{i=t.clone()}catch(t){ht(E)}break;case"CropTarget":case"CryptoKey":case"FileSystemDirectoryHandle":case"FileSystemFileHandle":case"FileSystemHandle":case"GPUCompilationInfo":case"GPUCompilationMessage":case"ImageBitmap":case"RTCCertificate":case"WebAssembly.Module":vt(E);default:ht(E)}}if($(e,t,i),R)switch(E){case"Array":case"Object":for(p=Q(t),f=0,s=A(p);f<s;f++)h=p[f],w(i,h,dt(t[h],e));break;case"Map":t.forEach((function(t,r){$(i,dt(r,e),dt(t,e))}));break;case"Set":t.forEach((function(t){X(i,dt(t,e))}));break;case"Error":S(i,"message",dt(t.message,e)),x(t,"cause")&&S(i,"cause",dt(t.cause,e)),"AggregateError"==o&&(i.errors=dt(t.errors,e));case"DOMException":k&&S(i,"stack",dt(t.stack,e))}return i};a({global:!0,enumerable:!0,sham:!T,forced:st},{structuredClone:function(t){var e,n=E(arguments.length,1)>1&&!v(arguments[1])?b(arguments[1]):r,o=n?n.transfer:r;return o!==r&&function(t,e){if(!y(t))throw B("Transfer option cannot be converted to a sequence");var n=[];g(t,(function(t){Z(n,b(t))}));var o,i,a,c,f,s,p=0,v=A(n);if(T)for(c=ft(n,{transfer:n});p<v;)$(e,n[p],c[p++]);else for(;p<v;){if(o=n[p++],J(e,o))throw new G("Duplicate transferable",it);switch(i=m(o)){case"ImageBitmap":a=u.OffscreenCanvas,h(a)||vt(i,at);try{(s=new a(o.width,o.height)).getContext("bitmaprenderer").transferFromImageBitmap(o),f=s.transferToImageBitmap()}catch(t){}break;case"AudioData":case"VideoFrame":l(o.clone)&&l(o.close)||vt(i,at);try{f=o.clone(),o.close()}catch(t){}break;case"ArrayBuffer":l(o.transfer)||vt(i,at),f=o.transfer();break;case"MediaSourceHandle":case"MessagePort":case"OffscreenCanvas":case"ReadableStream":case"TransformStream":case"WritableStream":vt(i,at)}if(f===r)throw new G("This object cannot be transferred: "+i,it);$(e,o,f)}}(o,e=new H),dt(t,e)}})},function(t,r){var e=TypeError;t.exports=function(t,r){if(t<r)throw e("Not enough arguments");return t}},function(t,e,n){var o=n(7),i=n(38),a=n(24),u=n(88),c=RegExp.prototype;t.exports=function(t){var e=t.flags;return e!==r||"flags"in c||i(t,"flags")||!a(c,t)?e:o(u,t)}},function(t,e,n){var o=n(2),i=n(23),a=n(6),u=n(415),c=n(90),f=n(418),s=i("URL");o({target:"URL",stat:!0,forced:!(f&&a((function(){s.canParse()})))},{canParse:function(t){var e=u(arguments.length,1),n=c(t),o=e<2||arguments[1]===r?r:c(arguments[1]);try{return!!new s(n,o)}catch(t){return!1}}})},function(t,e,n){var o=n(6),i=n(33),a=n(5),u=n(35),c=i("iterator");t.exports=!o((function(){var t=new URL("b?a=1&b=2&c=3","http://a"),e=t.searchParams,n=new URLSearchParams("a=1&a=2"),o="";return t.pathname="c%20d",e.forEach((function(t,r){e.delete("b"),o+=r+t})),n.delete("a",2),u&&(!t.toJSON||!n.has("a",1)||n.has("a",2))||!e.size&&(u||!a)||!e.sort||"http://a/c%20d?a=1&c=3"!==t.href||"3"!==e.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!e[c]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://тест").host||"#%D0%B1"!==new URL("http://a#б").hash||"a1c3"!==o||"x"!==new URL("http://x",r).host}))},function(t,e,n){var o=n(47),i=n(13),a=n(90),u=n(415),c=URLSearchParams,f=c.prototype,s=i(f.append),p=i(f.delete),l=i(f.forEach),h=i([].push),v=new c("a=1&a=2");v.delete("a",1),v+""!="a=2"&&o(f,"delete",(function(t){var e=arguments.length,n=e<2?r:arguments[1];if(e&&n===r)return p(this,t);var o=[];l(this,(function(t,r){h(o,{key:r,value:t})})),u(e,1);for(var i,c=a(t),f=a(n),v=0,y=0,d=!1,g=o.length;v<g;)i=o[v++],d||i.key===c?(d=!0,p(this,i.key)):y++;for(;y<g;)(i=o[y++]).key===c&&i.value===f||s(this,i.key,i.value)}),{enumerable:!0,unsafe:!0})},function(t,e,n){var o=n(47),i=n(13),a=n(90),u=n(415),c=URLSearchParams,f=c.prototype,s=i(f.getAll),p=i(f.has);new c("a=1").has("a",2)&&o(f,"has",(function(t){var e=arguments.length,n=e<2?r:arguments[1];if(e&&n===r)return p(this,t);var o=s(this,t);u(e,1);for(var i=a(n),c=0;c<o.length;)if(o[c++]===i)return!0;return!1}),{enumerable:!0,unsafe:!0})},function(t,r,e){var n=e(5),o=e(13),i=e(87),a=URLSearchParams.prototype,u=o(a.forEach);n&&!("size"in a)&&i(a,"size",{get:function(){var t=0;return u(this,(function(){t++})),t},configurable:!0,enumerable:!0})}],n={},(o=function(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,o),r.l=!0,r.exports}).m=e,o.c=n,o.d=function(t,r,e){o.o(t,r)||Object.defineProperty(t,r,{enumerable:!0,get:e})},o.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.t=function(t,r){if(1&r&&(t=o(t)),8&r)return t;if(4&r&&"object"==typeof t&&t&&t.__esModule)return t;var e=Object.create(null);if(o.r(e),Object.defineProperty(e,"default",{enumerable:!0,value:t}),2&r&&"string"!=typeof t)for(var n in t)o.d(e,n,function(r){return t[r]}.bind(null,n));return e},o.n=function(t){var r=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(r,"a",r),r},o.o=function(t,r){return Object.prototype.hasOwnProperty.call(t,r)},o.p="",o(o.s=0)}(),(wp=void 0===wp?{}:wp).polyfill={}})();PK.3Y�3�TT%bunyad-amp/assets/js/wp-url.asset.php<?php return array('dependencies' => array(), 'version' => 'ce4ea8e3f3b105ac95ac');
PK.3YW�����bunyad-amp/assets/js/wp-url.jsvar wp;(()=>{var e={826:e=>{var t={À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",Ấ:"A",Ắ:"A",Ẳ:"A",Ẵ:"A",Ặ:"A",Æ:"AE",Ầ:"A",Ằ:"A",Ȃ:"A",Ả:"A",Ạ:"A",Ẩ:"A",Ẫ:"A",Ậ:"A",Ç:"C",Ḉ:"C",È:"E",É:"E",Ê:"E",Ë:"E",Ế:"E",Ḗ:"E",Ề:"E",Ḕ:"E",Ḝ:"E",Ȇ:"E",Ẻ:"E",Ẽ:"E",Ẹ:"E",Ể:"E",Ễ:"E",Ệ:"E",Ì:"I",Í:"I",Î:"I",Ï:"I",Ḯ:"I",Ȋ:"I",Ỉ:"I",Ị:"I",Ð:"D",Ñ:"N",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",Ố:"O",Ṍ:"O",Ṓ:"O",Ȏ:"O",Ỏ:"O",Ọ:"O",Ổ:"O",Ỗ:"O",Ộ:"O",Ờ:"O",Ở:"O",Ỡ:"O",Ớ:"O",Ợ:"O",Ù:"U",Ú:"U",Û:"U",Ü:"U",Ủ:"U",Ụ:"U",Ử:"U",Ữ:"U",Ự:"U",Ý:"Y",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",ấ:"a",ắ:"a",ẳ:"a",ẵ:"a",ặ:"a",æ:"ae",ầ:"a",ằ:"a",ȃ:"a",ả:"a",ạ:"a",ẩ:"a",ẫ:"a",ậ:"a",ç:"c",ḉ:"c",è:"e",é:"e",ê:"e",ë:"e",ế:"e",ḗ:"e",ề:"e",ḕ:"e",ḝ:"e",ȇ:"e",ẻ:"e",ẽ:"e",ẹ:"e",ể:"e",ễ:"e",ệ:"e",ì:"i",í:"i",î:"i",ï:"i",ḯ:"i",ȋ:"i",ỉ:"i",ị:"i",ð:"d",ñ:"n",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",ố:"o",ṍ:"o",ṓ:"o",ȏ:"o",ỏ:"o",ọ:"o",ổ:"o",ỗ:"o",ộ:"o",ờ:"o",ở:"o",ỡ:"o",ớ:"o",ợ:"o",ù:"u",ú:"u",û:"u",ü:"u",ủ:"u",ụ:"u",ử:"u",ữ:"u",ự:"u",ý:"y",ÿ:"y",Ā:"A",ā:"a",Ă:"A",ă:"a",Ą:"A",ą:"a",Ć:"C",ć:"c",Ĉ:"C",ĉ:"c",Ċ:"C",ċ:"c",Č:"C",č:"c",C̆:"C",c̆:"c",Ď:"D",ď:"d",Đ:"D",đ:"d",Ē:"E",ē:"e",Ĕ:"E",ĕ:"e",Ė:"E",ė:"e",Ę:"E",ę:"e",Ě:"E",ě:"e",Ĝ:"G",Ǵ:"G",ĝ:"g",ǵ:"g",Ğ:"G",ğ:"g",Ġ:"G",ġ:"g",Ģ:"G",ģ:"g",Ĥ:"H",ĥ:"h",Ħ:"H",ħ:"h",Ḫ:"H",ḫ:"h",Ĩ:"I",ĩ:"i",Ī:"I",ī:"i",Ĭ:"I",ĭ:"i",Į:"I",į:"i",İ:"I",ı:"i",IJ:"IJ",ij:"ij",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",Ḱ:"K",ḱ:"k",K̆:"K",k̆:"k",Ĺ:"L",ĺ:"l",Ļ:"L",ļ:"l",Ľ:"L",ľ:"l",Ŀ:"L",ŀ:"l",Ł:"l",ł:"l",Ḿ:"M",ḿ:"m",M̆:"M",m̆:"m",Ń:"N",ń:"n",Ņ:"N",ņ:"n",Ň:"N",ň:"n",ʼn:"n",N̆:"N",n̆:"n",Ō:"O",ō:"o",Ŏ:"O",ŏ:"o",Ő:"O",ő:"o",Œ:"OE",œ:"oe",P̆:"P",p̆:"p",Ŕ:"R",ŕ:"r",Ŗ:"R",ŗ:"r",Ř:"R",ř:"r",R̆:"R",r̆:"r",Ȓ:"R",ȓ:"r",Ś:"S",ś:"s",Ŝ:"S",ŝ:"s",Ş:"S",Ș:"S",ș:"s",ş:"s",Š:"S",š:"s",Ţ:"T",ţ:"t",ț:"t",Ț:"T",Ť:"T",ť:"t",Ŧ:"T",ŧ:"t",T̆:"T",t̆:"t",Ũ:"U",ũ:"u",Ū:"U",ū:"u",Ŭ:"U",ŭ:"u",Ů:"U",ů:"u",Ű:"U",ű:"u",Ų:"U",ų:"u",Ȗ:"U",ȗ:"u",V̆:"V",v̆:"v",Ŵ:"W",ŵ:"w",Ẃ:"W",ẃ:"w",X̆:"X",x̆:"x",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Y̆:"Y",y̆:"y",Ź:"Z",ź:"z",Ż:"Z",ż:"z",Ž:"Z",ž:"z",ſ:"s",ƒ:"f",Ơ:"O",ơ:"o",Ư:"U",ư:"u",Ǎ:"A",ǎ:"a",Ǐ:"I",ǐ:"i",Ǒ:"O",ǒ:"o",Ǔ:"U",ǔ:"u",Ǖ:"U",ǖ:"u",Ǘ:"U",ǘ:"u",Ǚ:"U",ǚ:"u",Ǜ:"U",ǜ:"u",Ứ:"U",ứ:"u",Ṹ:"U",ṹ:"u",Ǻ:"A",ǻ:"a",Ǽ:"AE",ǽ:"ae",Ǿ:"O",ǿ:"o",Þ:"TH",þ:"th",Ṕ:"P",ṕ:"p",Ṥ:"S",ṥ:"s",X́:"X",x́:"x",Ѓ:"Г",ѓ:"г",Ќ:"К",ќ:"к",A̋:"A",a̋:"a",E̋:"E",e̋:"e",I̋:"I",i̋:"i",Ǹ:"N",ǹ:"n",Ồ:"O",ồ:"o",Ṑ:"O",ṑ:"o",Ừ:"U",ừ:"u",Ẁ:"W",ẁ:"w",Ỳ:"Y",ỳ:"y",Ȁ:"A",ȁ:"a",Ȅ:"E",ȅ:"e",Ȉ:"I",ȉ:"i",Ȍ:"O",ȍ:"o",Ȑ:"R",ȑ:"r",Ȕ:"U",ȕ:"u",B̌:"B",b̌:"b",Č̣:"C",č̣:"c",Ê̌:"E",ê̌:"e",F̌:"F",f̌:"f",Ǧ:"G",ǧ:"g",Ȟ:"H",ȟ:"h",J̌:"J",ǰ:"j",Ǩ:"K",ǩ:"k",M̌:"M",m̌:"m",P̌:"P",p̌:"p",Q̌:"Q",q̌:"q",Ř̩:"R",ř̩:"r",Ṧ:"S",ṧ:"s",V̌:"V",v̌:"v",W̌:"W",w̌:"w",X̌:"X",x̌:"x",Y̌:"Y",y̌:"y",A̧:"A",a̧:"a",B̧:"B",b̧:"b",Ḑ:"D",ḑ:"d",Ȩ:"E",ȩ:"e",Ɛ̧:"E",ɛ̧:"e",Ḩ:"H",ḩ:"h",I̧:"I",i̧:"i",Ɨ̧:"I",ɨ̧:"i",M̧:"M",m̧:"m",O̧:"O",o̧:"o",Q̧:"Q",q̧:"q",U̧:"U",u̧:"u",X̧:"X",x̧:"x",Z̧:"Z",z̧:"z",й:"и",Й:"И",ё:"е",Ё:"Е"},r=Object.keys(t).join("|"),n=new RegExp(r,"g"),o=new RegExp(r,"");function i(e){return t[e]}var u=function(e){return e.replace(n,i)};e.exports=u,e.exports.has=function(e){return!!e.match(o)},e.exports.remove=u}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var i=t[n]={exports:{}};return e[n](i,i.exports,r),i.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var n={};(()=>{"use strict";function e(e){try{return new URL(e),!0}catch{return!1}}r.r(n),r.d(n,{addQueryArgs:()=>y,buildQueryString:()=>f,cleanForSlug:()=>j,filterURLForDisplay:()=>R,getAuthority:()=>c,getFilename:()=>C,getFragment:()=>O,getPath:()=>s,getPathAndQueryString:()=>d,getProtocol:()=>i,getQueryArg:()=>U,getQueryArgs:()=>m,getQueryString:()=>p,hasQueryArg:()=>E,isEmail:()=>o,isURL:()=>e,isValidAuthority:()=>a,isValidFragment:()=>A,isValidPath:()=>l,isValidProtocol:()=>u,isValidQueryString:()=>g,normalizePath:()=>P,prependHTTP:()=>b,prependHTTPS:()=>$,removeQueryArgs:()=>I,safeDecodeURI:()=>v,safeDecodeURIComponent:()=>h});const t=/^(mailto:)?[a-z0-9._%+-]+@[a-z0-9][a-z0-9.-]*\.[a-z]{2,63}$/i;function o(e){return t.test(e)}function i(e){const t=/^([^\s:]+:)/.exec(e);if(t)return t[1]}function u(e){return!!e&&/^[a-z\-.\+]+[0-9]*:$/i.test(e)}function c(e){const t=/^[^\/\s:]+:(?:\/\/)?\/?([^\/\s#?]+)[\/#?]{0,1}\S*$/.exec(e);if(t)return t[1]}function a(e){return!!e&&/^[^\s#?]+$/.test(e)}function s(e){const t=/^[^\/\s:]+:(?:\/\/)?[^\/\s#?]+[\/]([^\s#?]+)[#?]{0,1}\S*$/.exec(e);if(t)return t[1]}function l(e){return!!e&&/^[^\s#?]+$/.test(e)}function p(e){let t;try{t=new URL(e,"http://example.com").search.substring(1)}catch(e){}if(t)return t}function f(e){let t="";const r=Object.entries(e);let n;for(;n=r.shift();){let[e,o]=n;if(Array.isArray(o)||o&&o.constructor===Object){const t=Object.entries(o).reverse();for(const[n,o]of t)r.unshift([`${e}[${n}]`,o])}else void 0!==o&&(null===o&&(o=""),t+="&"+[e,o].map(encodeURIComponent).join("="))}return t.substr(1)}function g(e){return!!e&&/^[^\s#?\/]+$/.test(e)}function d(e){const t=s(e),r=p(e);let n="/";return t&&(n+=t),r&&(n+=`?${r}`),n}function O(e){const t=/^\S+?(#[^\s\?]*)/.exec(e);if(t)return t[1]}function A(e){return!!e&&/^#[^\s#?\/]*$/.test(e)}function h(e){try{return decodeURIComponent(e)}catch(t){return e}}function m(e){return(p(e)||"").replace(/\+/g,"%20").split("&").reduce(((e,t)=>{const[r,n=""]=t.split("=").filter(Boolean).map(h);return r&&function(e,t,r){const n=t.length,o=n-1;for(let i=0;i<n;i++){let n=t[i];!n&&Array.isArray(e)&&(n=e.length.toString()),n=["__proto__","constructor","prototype"].includes(n)?n.toUpperCase():n;const u=!isNaN(Number(t[i+1]));e[n]=i===o?r:e[n]||(u?[]:{}),Array.isArray(e[n])&&!u&&(e[n]={...e[n]}),e=e[n]}}(e,r.replace(/\]/g,"").split("["),n),e}),Object.create(null))}function y(e="",t){if(!t||!Object.keys(t).length)return e;let r=e;const n=e.indexOf("?");return-1!==n&&(t=Object.assign(m(e),t),r=r.substr(0,n)),r+"?"+f(t)}function U(e,t){return m(e)[t]}function E(e,t){return void 0!==U(e,t)}function I(e,...t){const r=e.indexOf("?");if(-1===r)return e;const n=m(e),o=e.substr(0,r);t.forEach((e=>delete n[e]));const i=f(n);return i?o+"?"+i:o}const x=/^(?:[a-z]+:|#|\?|\.|\/)/i;function b(e){return e?(e=e.trim(),x.test(e)||o(e)?e:"http://"+e):e}function v(e){try{return decodeURI(e)}catch(t){return e}}function R(e,t=null){let r=e.replace(/^(?:https?:)\/\/(?:www\.)?/,"");if(r.match(/^[^\/]+\/$/)&&(r=r.replace("/","")),!t||r.length<=t||!r.match(/\/([^\/?]+)\.(?:[\w]+)(?=\?|$)/))return r;r=r.split("?")[0];const n=r.split("/"),o=n[n.length-1];if(o.length<=t)return"…"+r.slice(-t);const i=o.lastIndexOf("."),[u,c]=[o.slice(0,i),o.slice(i+1)],a=u.slice(-3)+"."+c;return o.slice(0,t-a.length-1)+"…"+a}var S=r(826),w=r.n(S);function j(e){return e?w()(e).replace(/[\s\./]+/g,"-").replace(/[^\p{L}\p{N}_-]+/gu,"").toLowerCase().replace(/-+/g,"-").replace(/(^-+)|(-+$)/g,""):""}function C(e){let t;try{t=new URL(e,"http://example.com").pathname.split("/").pop()}catch(e){}if(t)return t}function P(e){const t=e.split("?"),r=t[1],n=t[0];return r?n+"?"+r.split("&").map((e=>e.split("="))).map((e=>e.map(decodeURIComponent))).sort(((e,t)=>e[0].localeCompare(t[0]))).map((e=>e.map(encodeURIComponent))).map((e=>e.join("="))).join("&"):n}function $(e){return e?e.startsWith("http://")?e:(e=b(e)).replace(/^http:/,"https:"):e}})(),(wp=void 0===wp?{}:wp).url=n})();PK.3YͿ�/oo%bunyad-amp/assets/js/vendor/lodash.js(function(){var n,t="Expected a function",r="__lodash_hash_undefined__",e="__lodash_placeholder__",u=32,i=128,o=1/0,f=9007199254740991,a=NaN,c=4294967295,l=[["ary",i],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",u],["partialRight",64],["rearg",256]],s="[object Arguments]",h="[object Array]",p="[object Boolean]",v="[object Date]",_="[object Error]",g="[object Function]",y="[object GeneratorFunction]",d="[object Map]",b="[object Number]",w="[object Object]",m="[object Promise]",x="[object RegExp]",j="[object Set]",A="[object String]",k="[object Symbol]",O="[object WeakMap]",I="[object ArrayBuffer]",R="[object DataView]",z="[object Float32Array]",E="[object Float64Array]",S="[object Int8Array]",W="[object Int16Array]",L="[object Int32Array]",C="[object Uint8Array]",U="[object Uint8ClampedArray]",B="[object Uint16Array]",T="[object Uint32Array]",$=/\b__p \+= '';/g,D=/\b(__p \+=) '' \+/g,M=/(__e\(.*?\)|\b__t\)) \+\n'';/g,F=/&(?:amp|lt|gt|quot|#39);/g,N=/[&<>"']/g,P=RegExp(F.source),q=RegExp(N.source),Z=/<%-([\s\S]+?)%>/g,K=/<%([\s\S]+?)%>/g,V=/<%=([\s\S]+?)%>/g,G=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,H=/^\w*$/,J=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Y=/[\\^$.*+?()[\]{}|]/g,Q=RegExp(Y.source),X=/^\s+/,nn=/\s/,tn=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,rn=/\{\n\/\* \[wrapped with (.+)\] \*/,en=/,? & /,un=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,on=/[()=,{}\[\]\/\s]/,fn=/\\(\\)?/g,an=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,cn=/\w*$/,ln=/^[-+]0x[0-9a-f]+$/i,sn=/^0b[01]+$/i,hn=/^\[object .+?Constructor\]$/,pn=/^0o[0-7]+$/i,vn=/^(?:0|[1-9]\d*)$/,gn=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,yn=/($^)/,dn=/['\n\r\u2028\u2029\\]/g,bn="\\ud800-\\udfff",wn="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",mn="\\u2700-\\u27bf",xn="a-z\\xdf-\\xf6\\xf8-\\xff",jn="A-Z\\xc0-\\xd6\\xd8-\\xde",An="\\ufe0e\\ufe0f",kn="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",On="["+bn+"]",In="["+kn+"]",Rn="["+wn+"]",zn="\\d+",En="["+mn+"]",Sn="["+xn+"]",Wn="[^"+bn+kn+zn+mn+xn+jn+"]",Ln="\\ud83c[\\udffb-\\udfff]",Cn="[^"+bn+"]",Un="(?:\\ud83c[\\udde6-\\uddff]){2}",Bn="[\\ud800-\\udbff][\\udc00-\\udfff]",Tn="["+jn+"]",$n="\\u200d",Dn="(?:"+Sn+"|"+Wn+")",Mn="(?:"+Tn+"|"+Wn+")",Fn="(?:['’](?:d|ll|m|re|s|t|ve))?",Nn="(?:['’](?:D|LL|M|RE|S|T|VE))?",Pn="(?:"+Rn+"|"+Ln+")?",qn="["+An+"]?",Zn=qn+Pn+"(?:"+$n+"(?:"+[Cn,Un,Bn].join("|")+")"+qn+Pn+")*",Kn="(?:"+[En,Un,Bn].join("|")+")"+Zn,Vn="(?:"+[Cn+Rn+"?",Rn,Un,Bn,On].join("|")+")",Gn=RegExp("['’]","g"),Hn=RegExp(Rn,"g"),Jn=RegExp(Ln+"(?="+Ln+")|"+Vn+Zn,"g"),Yn=RegExp([Tn+"?"+Sn+"+"+Fn+"(?="+[In,Tn,"$"].join("|")+")",Mn+"+"+Nn+"(?="+[In,Tn+Dn,"$"].join("|")+")",Tn+"?"+Dn+"+"+Fn,Tn+"+"+Nn,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",zn,Kn].join("|"),"g"),Qn=RegExp("["+$n+bn+wn+An+"]"),Xn=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,nt=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],tt=-1,rt={};rt[z]=rt[E]=rt[S]=rt[W]=rt[L]=rt[C]=rt[U]=rt[B]=rt[T]=!0,rt[s]=rt[h]=rt[I]=rt[p]=rt[R]=rt[v]=rt[_]=rt[g]=rt[d]=rt[b]=rt[w]=rt[x]=rt[j]=rt[A]=rt[O]=!1;var et={};et[s]=et[h]=et[I]=et[R]=et[p]=et[v]=et[z]=et[E]=et[S]=et[W]=et[L]=et[d]=et[b]=et[w]=et[x]=et[j]=et[A]=et[k]=et[C]=et[U]=et[B]=et[T]=!0,et[_]=et[g]=et[O]=!1;var ut={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},it=parseFloat,ot=parseInt,ft="object"==typeof global&&global&&global.Object===Object&&global,at="object"==typeof self&&self&&self.Object===Object&&self,ct=ft||at||Function("return this")(),lt="object"==typeof exports&&exports&&!exports.nodeType&&exports,st=lt&&"object"==typeof module&&module&&!module.nodeType&&module,ht=st&&st.exports===lt,pt=ht&&ft.process,vt=function(){try{return st&&st.require&&st.require("util").types||pt&&pt.binding&&pt.binding("util")}catch(n){}}(),_t=vt&&vt.isArrayBuffer,gt=vt&&vt.isDate,yt=vt&&vt.isMap,dt=vt&&vt.isRegExp,bt=vt&&vt.isSet,wt=vt&&vt.isTypedArray;function mt(n,t,r){switch(r.length){case 0:return n.call(t);case 1:return n.call(t,r[0]);case 2:return n.call(t,r[0],r[1]);case 3:return n.call(t,r[0],r[1],r[2])}return n.apply(t,r)}function xt(n,t,r,e){for(var u=-1,i=null==n?0:n.length;++u<i;){var o=n[u];t(e,o,r(o),n)}return e}function jt(n,t){for(var r=-1,e=null==n?0:n.length;++r<e&&!1!==t(n[r],r,n););return n}function At(n,t){for(var r=null==n?0:n.length;r--&&!1!==t(n[r],r,n););return n}function kt(n,t){for(var r=-1,e=null==n?0:n.length;++r<e;)if(!t(n[r],r,n))return!1;return!0}function Ot(n,t){for(var r=-1,e=null==n?0:n.length,u=0,i=[];++r<e;){var o=n[r];t(o,r,n)&&(i[u++]=o)}return i}function It(n,t){return!(null==n||!n.length)&&Tt(n,t,0)>-1}function Rt(n,t,r){for(var e=-1,u=null==n?0:n.length;++e<u;)if(r(t,n[e]))return!0;return!1}function zt(n,t){for(var r=-1,e=null==n?0:n.length,u=Array(e);++r<e;)u[r]=t(n[r],r,n);return u}function Et(n,t){for(var r=-1,e=t.length,u=n.length;++r<e;)n[u+r]=t[r];return n}function St(n,t,r,e){var u=-1,i=null==n?0:n.length;for(e&&i&&(r=n[++u]);++u<i;)r=t(r,n[u],u,n);return r}function Wt(n,t,r,e){var u=null==n?0:n.length;for(e&&u&&(r=n[--u]);u--;)r=t(r,n[u],u,n);return r}function Lt(n,t){for(var r=-1,e=null==n?0:n.length;++r<e;)if(t(n[r],r,n))return!0;return!1}var Ct=Ft("length");function Ut(n,t,r){var e;return r(n,(function(n,r,u){if(t(n,r,u))return e=r,!1})),e}function Bt(n,t,r,e){for(var u=n.length,i=r+(e?1:-1);e?i--:++i<u;)if(t(n[i],i,n))return i;return-1}function Tt(n,t,r){return t==t?function(n,t,r){for(var e=r-1,u=n.length;++e<u;)if(n[e]===t)return e;return-1}(n,t,r):Bt(n,Dt,r)}function $t(n,t,r,e){for(var u=r-1,i=n.length;++u<i;)if(e(n[u],t))return u;return-1}function Dt(n){return n!=n}function Mt(n,t){var r=null==n?0:n.length;return r?qt(n,t)/r:a}function Ft(t){return function(r){return null==r?n:r[t]}}function Nt(t){return function(r){return null==t?n:t[r]}}function Pt(n,t,r,e,u){return u(n,(function(n,u,i){r=e?(e=!1,n):t(r,n,u,i)})),r}function qt(t,r){for(var e,u=-1,i=t.length;++u<i;){var o=r(t[u]);o!==n&&(e=e===n?o:e+o)}return e}function Zt(n,t){for(var r=-1,e=Array(n);++r<n;)e[r]=t(r);return e}function Kt(n){return n?n.slice(0,cr(n)+1).replace(X,""):n}function Vt(n){return function(t){return n(t)}}function Gt(n,t){return zt(t,(function(t){return n[t]}))}function Ht(n,t){return n.has(t)}function Jt(n,t){for(var r=-1,e=n.length;++r<e&&Tt(t,n[r],0)>-1;);return r}function Yt(n,t){for(var r=n.length;r--&&Tt(t,n[r],0)>-1;);return r}var Qt=Nt({À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"}),Xt=Nt({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"});function nr(n){return"\\"+ut[n]}function tr(n){return Qn.test(n)}function rr(n){var t=-1,r=Array(n.size);return n.forEach((function(n,e){r[++t]=[e,n]})),r}function er(n,t){return function(r){return n(t(r))}}function ur(n,t){for(var r=-1,u=n.length,i=0,o=[];++r<u;){var f=n[r];f!==t&&f!==e||(n[r]=e,o[i++]=r)}return o}function ir(n){var t=-1,r=Array(n.size);return n.forEach((function(n){r[++t]=n})),r}function or(n){var t=-1,r=Array(n.size);return n.forEach((function(n){r[++t]=[n,n]})),r}function fr(n){return tr(n)?function(n){for(var t=Jn.lastIndex=0;Jn.test(n);)++t;return t}(n):Ct(n)}function ar(n){return tr(n)?function(n){return n.match(Jn)||[]}(n):function(n){return n.split("")}(n)}function cr(n){for(var t=n.length;t--&&nn.test(n.charAt(t)););return t}var lr=Nt({"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'"}),sr=function nn(bn){var wn,mn=(bn=null==bn?ct:sr.defaults(ct.Object(),bn,sr.pick(ct,nt))).Array,xn=bn.Date,jn=bn.Error,An=bn.Function,kn=bn.Math,On=bn.Object,In=bn.RegExp,Rn=bn.String,zn=bn.TypeError,En=mn.prototype,Sn=An.prototype,Wn=On.prototype,Ln=bn["__core-js_shared__"],Cn=Sn.toString,Un=Wn.hasOwnProperty,Bn=0,Tn=(wn=/[^.]+$/.exec(Ln&&Ln.keys&&Ln.keys.IE_PROTO||""))?"Symbol(src)_1."+wn:"",$n=Wn.toString,Dn=Cn.call(On),Mn=ct._,Fn=In("^"+Cn.call(Un).replace(Y,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Nn=ht?bn.Buffer:n,Pn=bn.Symbol,qn=bn.Uint8Array,Zn=Nn?Nn.allocUnsafe:n,Kn=er(On.getPrototypeOf,On),Vn=On.create,Jn=Wn.propertyIsEnumerable,Qn=En.splice,ut=Pn?Pn.isConcatSpreadable:n,ft=Pn?Pn.iterator:n,at=Pn?Pn.toStringTag:n,lt=function(){try{var n=ci(On,"defineProperty");return n({},"",{}),n}catch(n){}}(),st=bn.clearTimeout!==ct.clearTimeout&&bn.clearTimeout,pt=xn&&xn.now!==ct.Date.now&&xn.now,vt=bn.setTimeout!==ct.setTimeout&&bn.setTimeout,Ct=kn.ceil,Nt=kn.floor,hr=On.getOwnPropertySymbols,pr=Nn?Nn.isBuffer:n,vr=bn.isFinite,_r=En.join,gr=er(On.keys,On),yr=kn.max,dr=kn.min,br=xn.now,wr=bn.parseInt,mr=kn.random,xr=En.reverse,jr=ci(bn,"DataView"),Ar=ci(bn,"Map"),kr=ci(bn,"Promise"),Or=ci(bn,"Set"),Ir=ci(bn,"WeakMap"),Rr=ci(On,"create"),zr=Ir&&new Ir,Er={},Sr=Ti(jr),Wr=Ti(Ar),Lr=Ti(kr),Cr=Ti(Or),Ur=Ti(Ir),Br=Pn?Pn.prototype:n,Tr=Br?Br.valueOf:n,$r=Br?Br.toString:n;function Dr(n){if(tf(n)&&!qo(n)&&!(n instanceof Pr)){if(n instanceof Nr)return n;if(Un.call(n,"__wrapped__"))return $i(n)}return new Nr(n)}var Mr=function(){function t(){}return function(r){if(!nf(r))return{};if(Vn)return Vn(r);t.prototype=r;var e=new t;return t.prototype=n,e}}();function Fr(){}function Nr(t,r){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!r,this.__index__=0,this.__values__=n}function Pr(n){this.__wrapped__=n,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=c,this.__views__=[]}function qr(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function Zr(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function Kr(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function Vr(n){var t=-1,r=null==n?0:n.length;for(this.__data__=new Kr;++t<r;)this.add(n[t])}function Gr(n){var t=this.__data__=new Zr(n);this.size=t.size}function Hr(n,t){var r=qo(n),e=!r&&Po(n),u=!r&&!e&&Go(n),i=!r&&!e&&!u&&lf(n),o=r||e||u||i,f=o?Zt(n.length,Rn):[],a=f.length;for(var c in n)!t&&!Un.call(n,c)||o&&("length"==c||u&&("offset"==c||"parent"==c)||i&&("buffer"==c||"byteLength"==c||"byteOffset"==c)||gi(c,a))||f.push(c);return f}function Jr(t){var r=t.length;return r?t[Ke(0,r-1)]:n}function Yr(n,t){return Wi(Iu(n),oe(t,0,n.length))}function Qr(n){return Wi(Iu(n))}function Xr(t,r,e){(e!==n&&!Mo(t[r],e)||e===n&&!(r in t))&&ue(t,r,e)}function ne(t,r,e){var u=t[r];Un.call(t,r)&&Mo(u,e)&&(e!==n||r in t)||ue(t,r,e)}function te(n,t){for(var r=n.length;r--;)if(Mo(n[r][0],t))return r;return-1}function re(n,t,r,e){return se(n,(function(n,u,i){t(e,n,r(n),i)})),e}function ee(n,t){return n&&Ru(t,Wf(t),n)}function ue(n,t,r){"__proto__"==t&&lt?lt(n,t,{configurable:!0,enumerable:!0,value:r,writable:!0}):n[t]=r}function ie(t,r){for(var e=-1,u=r.length,i=mn(u),o=null==t;++e<u;)i[e]=o?n:If(t,r[e]);return i}function oe(t,r,e){return t==t&&(e!==n&&(t=t<=e?t:e),r!==n&&(t=t>=r?t:r)),t}function fe(t,r,e,u,i,o){var f,a=1&r,c=2&r,l=4&r;if(e&&(f=i?e(t,u,i,o):e(t)),f!==n)return f;if(!nf(t))return t;var h=qo(t);if(h){if(f=function(n){var t=n.length,r=new n.constructor(t);return t&&"string"==typeof n[0]&&Un.call(n,"index")&&(r.index=n.index,r.input=n.input),r}(t),!a)return Iu(t,f)}else{var _=hi(t),m=_==g||_==y;if(Go(t))return mu(t,a);if(_==w||_==s||m&&!i){if(f=c||m?{}:vi(t),!a)return c?function(n,t){return Ru(n,si(n),t)}(t,function(n,t){return n&&Ru(t,Lf(t),n)}(f,t)):function(n,t){return Ru(n,li(n),t)}(t,ee(f,t))}else{if(!et[_])return i?t:{};f=function(n,t,r){var e,u=n.constructor;switch(t){case I:return xu(n);case p:case v:return new u(+n);case R:return function(n,t){var r=t?xu(n.buffer):n.buffer;return new n.constructor(r,n.byteOffset,n.byteLength)}(n,r);case z:case E:case S:case W:case L:case C:case U:case B:case T:return ju(n,r);case d:return new u;case b:case A:return new u(n);case x:return function(n){var t=new n.constructor(n.source,cn.exec(n));return t.lastIndex=n.lastIndex,t}(n);case j:return new u;case k:return e=n,Tr?On(Tr.call(e)):{}}}(t,_,a)}}o||(o=new Gr);var O=o.get(t);if(O)return O;o.set(t,f),ff(t)?t.forEach((function(n){f.add(fe(n,r,e,n,t,o))})):rf(t)&&t.forEach((function(n,u){f.set(u,fe(n,r,e,u,t,o))}));var $=h?n:(l?c?ri:ti:c?Lf:Wf)(t);return jt($||t,(function(n,u){$&&(n=t[u=n]),ne(f,u,fe(n,r,e,u,t,o))})),f}function ae(t,r,e){var u=e.length;if(null==t)return!u;for(t=On(t);u--;){var i=e[u],o=r[i],f=t[i];if(f===n&&!(i in t)||!o(f))return!1}return!0}function ce(r,e,u){if("function"!=typeof r)throw new zn(t);return Ri((function(){r.apply(n,u)}),e)}function le(n,t,r,e){var u=-1,i=It,o=!0,f=n.length,a=[],c=t.length;if(!f)return a;r&&(t=zt(t,Vt(r))),e?(i=Rt,o=!1):t.length>=200&&(i=Ht,o=!1,t=new Vr(t));n:for(;++u<f;){var l=n[u],s=null==r?l:r(l);if(l=e||0!==l?l:0,o&&s==s){for(var h=c;h--;)if(t[h]===s)continue n;a.push(l)}else i(t,s,e)||a.push(l)}return a}Dr.templateSettings={escape:Z,evaluate:K,interpolate:V,variable:"",imports:{_:Dr}},Dr.prototype=Fr.prototype,Dr.prototype.constructor=Dr,Nr.prototype=Mr(Fr.prototype),Nr.prototype.constructor=Nr,Pr.prototype=Mr(Fr.prototype),Pr.prototype.constructor=Pr,qr.prototype.clear=function(){this.__data__=Rr?Rr(null):{},this.size=0},qr.prototype.delete=function(n){var t=this.has(n)&&delete this.__data__[n];return this.size-=t?1:0,t},qr.prototype.get=function(t){var e=this.__data__;if(Rr){var u=e[t];return u===r?n:u}return Un.call(e,t)?e[t]:n},qr.prototype.has=function(t){var r=this.__data__;return Rr?r[t]!==n:Un.call(r,t)},qr.prototype.set=function(t,e){var u=this.__data__;return this.size+=this.has(t)?0:1,u[t]=Rr&&e===n?r:e,this},Zr.prototype.clear=function(){this.__data__=[],this.size=0},Zr.prototype.delete=function(n){var t=this.__data__,r=te(t,n);return!(r<0||(r==t.length-1?t.pop():Qn.call(t,r,1),--this.size,0))},Zr.prototype.get=function(t){var r=this.__data__,e=te(r,t);return e<0?n:r[e][1]},Zr.prototype.has=function(n){return te(this.__data__,n)>-1},Zr.prototype.set=function(n,t){var r=this.__data__,e=te(r,n);return e<0?(++this.size,r.push([n,t])):r[e][1]=t,this},Kr.prototype.clear=function(){this.size=0,this.__data__={hash:new qr,map:new(Ar||Zr),string:new qr}},Kr.prototype.delete=function(n){var t=fi(this,n).delete(n);return this.size-=t?1:0,t},Kr.prototype.get=function(n){return fi(this,n).get(n)},Kr.prototype.has=function(n){return fi(this,n).has(n)},Kr.prototype.set=function(n,t){var r=fi(this,n),e=r.size;return r.set(n,t),this.size+=r.size==e?0:1,this},Vr.prototype.add=Vr.prototype.push=function(n){return this.__data__.set(n,r),this},Vr.prototype.has=function(n){return this.__data__.has(n)},Gr.prototype.clear=function(){this.__data__=new Zr,this.size=0},Gr.prototype.delete=function(n){var t=this.__data__,r=t.delete(n);return this.size=t.size,r},Gr.prototype.get=function(n){return this.__data__.get(n)},Gr.prototype.has=function(n){return this.__data__.has(n)},Gr.prototype.set=function(n,t){var r=this.__data__;if(r instanceof Zr){var e=r.__data__;if(!Ar||e.length<199)return e.push([n,t]),this.size=++r.size,this;r=this.__data__=new Kr(e)}return r.set(n,t),this.size=r.size,this};var se=Su(be),he=Su(we,!0);function pe(n,t){var r=!0;return se(n,(function(n,e,u){return r=!!t(n,e,u)})),r}function ve(t,r,e){for(var u=-1,i=t.length;++u<i;){var o=t[u],f=r(o);if(null!=f&&(a===n?f==f&&!cf(f):e(f,a)))var a=f,c=o}return c}function _e(n,t){var r=[];return se(n,(function(n,e,u){t(n,e,u)&&r.push(n)})),r}function ge(n,t,r,e,u){var i=-1,o=n.length;for(r||(r=_i),u||(u=[]);++i<o;){var f=n[i];t>0&&r(f)?t>1?ge(f,t-1,r,e,u):Et(u,f):e||(u[u.length]=f)}return u}var ye=Wu(),de=Wu(!0);function be(n,t){return n&&ye(n,t,Wf)}function we(n,t){return n&&de(n,t,Wf)}function me(n,t){return Ot(t,(function(t){return Yo(n[t])}))}function xe(t,r){for(var e=0,u=(r=yu(r,t)).length;null!=t&&e<u;)t=t[Bi(r[e++])];return e&&e==u?t:n}function je(n,t,r){var e=t(n);return qo(n)?e:Et(e,r(n))}function Ae(t){return null==t?t===n?"[object Undefined]":"[object Null]":at&&at in On(t)?function(t){var r=Un.call(t,at),e=t[at];try{t[at]=n;var u=!0}catch(n){}var i=$n.call(t);return u&&(r?t[at]=e:delete t[at]),i}(t):function(n){return $n.call(n)}(t)}function ke(n,t){return n>t}function Oe(n,t){return null!=n&&Un.call(n,t)}function Ie(n,t){return null!=n&&t in On(n)}function Re(t,r,e){for(var u=e?Rt:It,i=t[0].length,o=t.length,f=o,a=mn(o),c=1/0,l=[];f--;){var s=t[f];f&&r&&(s=zt(s,Vt(r))),c=dr(s.length,c),a[f]=!e&&(r||i>=120&&s.length>=120)?new Vr(f&&s):n}s=t[0];var h=-1,p=a[0];n:for(;++h<i&&l.length<c;){var v=s[h],_=r?r(v):v;if(v=e||0!==v?v:0,!(p?Ht(p,_):u(l,_,e))){for(f=o;--f;){var g=a[f];if(!(g?Ht(g,_):u(t[f],_,e)))continue n}p&&p.push(_),l.push(v)}}return l}function ze(t,r,e){var u=null==(t=ki(t,r=yu(r,t)))?t:t[Bi(Hi(r))];return null==u?n:mt(u,t,e)}function Ee(n){return tf(n)&&Ae(n)==s}function Se(t,r,e,u,i){return t===r||(null==t||null==r||!tf(t)&&!tf(r)?t!=t&&r!=r:function(t,r,e,u,i,o){var f=qo(t),a=qo(r),c=f?h:hi(t),l=a?h:hi(r),g=(c=c==s?w:c)==w,y=(l=l==s?w:l)==w,m=c==l;if(m&&Go(t)){if(!Go(r))return!1;f=!0,g=!1}if(m&&!g)return o||(o=new Gr),f||lf(t)?Xu(t,r,e,u,i,o):function(n,t,r,e,u,i,o){switch(r){case R:if(n.byteLength!=t.byteLength||n.byteOffset!=t.byteOffset)return!1;n=n.buffer,t=t.buffer;case I:return!(n.byteLength!=t.byteLength||!i(new qn(n),new qn(t)));case p:case v:case b:return Mo(+n,+t);case _:return n.name==t.name&&n.message==t.message;case x:case A:return n==t+"";case d:var f=rr;case j:var a=1&e;if(f||(f=ir),n.size!=t.size&&!a)return!1;var c=o.get(n);if(c)return c==t;e|=2,o.set(n,t);var l=Xu(f(n),f(t),e,u,i,o);return o.delete(n),l;case k:if(Tr)return Tr.call(n)==Tr.call(t)}return!1}(t,r,c,e,u,i,o);if(!(1&e)){var O=g&&Un.call(t,"__wrapped__"),z=y&&Un.call(r,"__wrapped__");if(O||z){var E=O?t.value():t,S=z?r.value():r;return o||(o=new Gr),i(E,S,e,u,o)}}return!!m&&(o||(o=new Gr),function(t,r,e,u,i,o){var f=1&e,a=ti(t),c=a.length;if(c!=ti(r).length&&!f)return!1;for(var l=c;l--;){var s=a[l];if(!(f?s in r:Un.call(r,s)))return!1}var h=o.get(t),p=o.get(r);if(h&&p)return h==r&&p==t;var v=!0;o.set(t,r),o.set(r,t);for(var _=f;++l<c;){var g=t[s=a[l]],y=r[s];if(u)var d=f?u(y,g,s,r,t,o):u(g,y,s,t,r,o);if(!(d===n?g===y||i(g,y,e,u,o):d)){v=!1;break}_||(_="constructor"==s)}if(v&&!_){var b=t.constructor,w=r.constructor;b==w||!("constructor"in t)||!("constructor"in r)||"function"==typeof b&&b instanceof b&&"function"==typeof w&&w instanceof w||(v=!1)}return o.delete(t),o.delete(r),v}(t,r,e,u,i,o))}(t,r,e,u,Se,i))}function We(t,r,e,u){var i=e.length,o=i,f=!u;if(null==t)return!o;for(t=On(t);i--;){var a=e[i];if(f&&a[2]?a[1]!==t[a[0]]:!(a[0]in t))return!1}for(;++i<o;){var c=(a=e[i])[0],l=t[c],s=a[1];if(f&&a[2]){if(l===n&&!(c in t))return!1}else{var h=new Gr;if(u)var p=u(l,s,c,t,r,h);if(!(p===n?Se(s,l,3,u,h):p))return!1}}return!0}function Le(n){return!(!nf(n)||(t=n,Tn&&Tn in t))&&(Yo(n)?Fn:hn).test(Ti(n));var t}function Ce(n){return"function"==typeof n?n:null==n?ua:"object"==typeof n?qo(n)?De(n[0],n[1]):$e(n):pa(n)}function Ue(n){if(!mi(n))return gr(n);var t=[];for(var r in On(n))Un.call(n,r)&&"constructor"!=r&&t.push(r);return t}function Be(n,t){return n<t}function Te(n,t){var r=-1,e=Ko(n)?mn(n.length):[];return se(n,(function(n,u,i){e[++r]=t(n,u,i)})),e}function $e(n){var t=ai(n);return 1==t.length&&t[0][2]?ji(t[0][0],t[0][1]):function(r){return r===n||We(r,n,t)}}function De(t,r){return di(t)&&xi(r)?ji(Bi(t),r):function(e){var u=If(e,t);return u===n&&u===r?Rf(e,t):Se(r,u,3)}}function Me(t,r,e,u,i){t!==r&&ye(r,(function(o,f){if(i||(i=new Gr),nf(o))!function(t,r,e,u,i,o,f){var a=Oi(t,e),c=Oi(r,e),l=f.get(c);if(l)Xr(t,e,l);else{var s=o?o(a,c,e+"",t,r,f):n,h=s===n;if(h){var p=qo(c),v=!p&&Go(c),_=!p&&!v&&lf(c);s=c,p||v||_?qo(a)?s=a:Vo(a)?s=Iu(a):v?(h=!1,s=mu(c,!0)):_?(h=!1,s=ju(c,!0)):s=[]:uf(c)||Po(c)?(s=a,Po(a)?s=df(a):nf(a)&&!Yo(a)||(s=vi(c))):h=!1}h&&(f.set(c,s),i(s,c,u,o,f),f.delete(c)),Xr(t,e,s)}}(t,r,f,e,Me,u,i);else{var a=u?u(Oi(t,f),o,f+"",t,r,i):n;a===n&&(a=o),Xr(t,f,a)}}),Lf)}function Fe(t,r){var e=t.length;if(e)return gi(r+=r<0?e:0,e)?t[r]:n}function Ne(n,t,r){t=t.length?zt(t,(function(n){return qo(n)?function(t){return xe(t,1===n.length?n[0]:n)}:n})):[ua];var e=-1;t=zt(t,Vt(oi()));var u=Te(n,(function(n,r,u){var i=zt(t,(function(t){return t(n)}));return{criteria:i,index:++e,value:n}}));return function(n,t){var e=n.length;for(n.sort((function(n,t){return function(n,t,r){for(var e=-1,u=n.criteria,i=t.criteria,o=u.length,f=r.length;++e<o;){var a=Au(u[e],i[e]);if(a)return e>=f?a:a*("desc"==r[e]?-1:1)}return n.index-t.index}(n,t,r)}));e--;)n[e]=n[e].value;return n}(u)}function Pe(n,t,r){for(var e=-1,u=t.length,i={};++e<u;){var o=t[e],f=xe(n,o);r(f,o)&&Ye(i,yu(o,n),f)}return i}function qe(n,t,r,e){var u=e?$t:Tt,i=-1,o=t.length,f=n;for(n===t&&(t=Iu(t)),r&&(f=zt(n,Vt(r)));++i<o;)for(var a=0,c=t[i],l=r?r(c):c;(a=u(f,l,a,e))>-1;)f!==n&&Qn.call(f,a,1),Qn.call(n,a,1);return n}function Ze(n,t){for(var r=n?t.length:0,e=r-1;r--;){var u=t[r];if(r==e||u!==i){var i=u;gi(u)?Qn.call(n,u,1):cu(n,u)}}return n}function Ke(n,t){return n+Nt(mr()*(t-n+1))}function Ve(n,t){var r="";if(!n||t<1||t>f)return r;do{t%2&&(r+=n),(t=Nt(t/2))&&(n+=n)}while(t);return r}function Ge(n,t){return zi(Ai(n,t,ua),n+"")}function He(n){return Jr(Ff(n))}function Je(n,t){var r=Ff(n);return Wi(r,oe(t,0,r.length))}function Ye(t,r,e,u){if(!nf(t))return t;for(var i=-1,o=(r=yu(r,t)).length,f=o-1,a=t;null!=a&&++i<o;){var c=Bi(r[i]),l=e;if("__proto__"===c||"constructor"===c||"prototype"===c)return t;if(i!=f){var s=a[c];(l=u?u(s,c,a):n)===n&&(l=nf(s)?s:gi(r[i+1])?[]:{})}ne(a,c,l),a=a[c]}return t}var Qe=zr?function(n,t){return zr.set(n,t),n}:ua,Xe=lt?function(n,t){return lt(n,"toString",{configurable:!0,enumerable:!1,value:ta(t),writable:!0})}:ua;function nu(n){return Wi(Ff(n))}function tu(n,t,r){var e=-1,u=n.length;t<0&&(t=-t>u?0:u+t),(r=r>u?u:r)<0&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0;for(var i=mn(u);++e<u;)i[e]=n[e+t];return i}function ru(n,t){var r;return se(n,(function(n,e,u){return!(r=t(n,e,u))})),!!r}function eu(n,t,r){var e=0,u=null==n?e:n.length;if("number"==typeof t&&t==t&&u<=2147483647){for(;e<u;){var i=e+u>>>1,o=n[i];null!==o&&!cf(o)&&(r?o<=t:o<t)?e=i+1:u=i}return u}return uu(n,t,ua,r)}function uu(t,r,e,u){var i=0,o=null==t?0:t.length;if(0===o)return 0;for(var f=(r=e(r))!=r,a=null===r,c=cf(r),l=r===n;i<o;){var s=Nt((i+o)/2),h=e(t[s]),p=h!==n,v=null===h,_=h==h,g=cf(h);if(f)var y=u||_;else y=l?_&&(u||p):a?_&&p&&(u||!v):c?_&&p&&!v&&(u||!g):!v&&!g&&(u?h<=r:h<r);y?i=s+1:o=s}return dr(o,4294967294)}function iu(n,t){for(var r=-1,e=n.length,u=0,i=[];++r<e;){var o=n[r],f=t?t(o):o;if(!r||!Mo(f,a)){var a=f;i[u++]=0===o?0:o}}return i}function ou(n){return"number"==typeof n?n:cf(n)?a:+n}function fu(n){if("string"==typeof n)return n;if(qo(n))return zt(n,fu)+"";if(cf(n))return $r?$r.call(n):"";var t=n+"";return"0"==t&&1/n==-1/0?"-0":t}function au(n,t,r){var e=-1,u=It,i=n.length,o=!0,f=[],a=f;if(r)o=!1,u=Rt;else if(i>=200){var c=t?null:Vu(n);if(c)return ir(c);o=!1,u=Ht,a=new Vr}else a=t?[]:f;n:for(;++e<i;){var l=n[e],s=t?t(l):l;if(l=r||0!==l?l:0,o&&s==s){for(var h=a.length;h--;)if(a[h]===s)continue n;t&&a.push(s),f.push(l)}else u(a,s,r)||(a!==f&&a.push(s),f.push(l))}return f}function cu(n,t){return null==(n=ki(n,t=yu(t,n)))||delete n[Bi(Hi(t))]}function lu(n,t,r,e){return Ye(n,t,r(xe(n,t)),e)}function su(n,t,r,e){for(var u=n.length,i=e?u:-1;(e?i--:++i<u)&&t(n[i],i,n););return r?tu(n,e?0:i,e?i+1:u):tu(n,e?i+1:0,e?u:i)}function hu(n,t){var r=n;return r instanceof Pr&&(r=r.value()),St(t,(function(n,t){return t.func.apply(t.thisArg,Et([n],t.args))}),r)}function pu(n,t,r){var e=n.length;if(e<2)return e?au(n[0]):[];for(var u=-1,i=mn(e);++u<e;)for(var o=n[u],f=-1;++f<e;)f!=u&&(i[u]=le(i[u]||o,n[f],t,r));return au(ge(i,1),t,r)}function vu(t,r,e){for(var u=-1,i=t.length,o=r.length,f={};++u<i;){var a=u<o?r[u]:n;e(f,t[u],a)}return f}function _u(n){return Vo(n)?n:[]}function gu(n){return"function"==typeof n?n:ua}function yu(n,t){return qo(n)?n:di(n,t)?[n]:Ui(bf(n))}var du=Ge;function bu(t,r,e){var u=t.length;return e=e===n?u:e,!r&&e>=u?t:tu(t,r,e)}var wu=st||function(n){return ct.clearTimeout(n)};function mu(n,t){if(t)return n.slice();var r=n.length,e=Zn?Zn(r):new n.constructor(r);return n.copy(e),e}function xu(n){var t=new n.constructor(n.byteLength);return new qn(t).set(new qn(n)),t}function ju(n,t){var r=t?xu(n.buffer):n.buffer;return new n.constructor(r,n.byteOffset,n.length)}function Au(t,r){if(t!==r){var e=t!==n,u=null===t,i=t==t,o=cf(t),f=r!==n,a=null===r,c=r==r,l=cf(r);if(!a&&!l&&!o&&t>r||o&&f&&c&&!a&&!l||u&&f&&c||!e&&c||!i)return 1;if(!u&&!o&&!l&&t<r||l&&e&&i&&!u&&!o||a&&e&&i||!f&&i||!c)return-1}return 0}function ku(n,t,r,e){for(var u=-1,i=n.length,o=r.length,f=-1,a=t.length,c=yr(i-o,0),l=mn(a+c),s=!e;++f<a;)l[f]=t[f];for(;++u<o;)(s||u<i)&&(l[r[u]]=n[u]);for(;c--;)l[f++]=n[u++];return l}function Ou(n,t,r,e){for(var u=-1,i=n.length,o=-1,f=r.length,a=-1,c=t.length,l=yr(i-f,0),s=mn(l+c),h=!e;++u<l;)s[u]=n[u];for(var p=u;++a<c;)s[p+a]=t[a];for(;++o<f;)(h||u<i)&&(s[p+r[o]]=n[u++]);return s}function Iu(n,t){var r=-1,e=n.length;for(t||(t=mn(e));++r<e;)t[r]=n[r];return t}function Ru(t,r,e,u){var i=!e;e||(e={});for(var o=-1,f=r.length;++o<f;){var a=r[o],c=u?u(e[a],t[a],a,e,t):n;c===n&&(c=t[a]),i?ue(e,a,c):ne(e,a,c)}return e}function zu(n,t){return function(r,e){var u=qo(r)?xt:re,i=t?t():{};return u(r,n,oi(e,2),i)}}function Eu(t){return Ge((function(r,e){var u=-1,i=e.length,o=i>1?e[i-1]:n,f=i>2?e[2]:n;for(o=t.length>3&&"function"==typeof o?(i--,o):n,f&&yi(e[0],e[1],f)&&(o=i<3?n:o,i=1),r=On(r);++u<i;){var a=e[u];a&&t(r,a,u,o)}return r}))}function Su(n,t){return function(r,e){if(null==r)return r;if(!Ko(r))return n(r,e);for(var u=r.length,i=t?u:-1,o=On(r);(t?i--:++i<u)&&!1!==e(o[i],i,o););return r}}function Wu(n){return function(t,r,e){for(var u=-1,i=On(t),o=e(t),f=o.length;f--;){var a=o[n?f:++u];if(!1===r(i[a],a,i))break}return t}}function Lu(t){return function(r){var e=tr(r=bf(r))?ar(r):n,u=e?e[0]:r.charAt(0),i=e?bu(e,1).join(""):r.slice(1);return u[t]()+i}}function Cu(n){return function(t){return St(Qf(qf(t).replace(Gn,"")),n,"")}}function Uu(n){return function(){var t=arguments;switch(t.length){case 0:return new n;case 1:return new n(t[0]);case 2:return new n(t[0],t[1]);case 3:return new n(t[0],t[1],t[2]);case 4:return new n(t[0],t[1],t[2],t[3]);case 5:return new n(t[0],t[1],t[2],t[3],t[4]);case 6:return new n(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new n(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var r=Mr(n.prototype),e=n.apply(r,t);return nf(e)?e:r}}function Bu(t){return function(r,e,u){var i=On(r);if(!Ko(r)){var o=oi(e,3);r=Wf(r),e=function(n){return o(i[n],n,i)}}var f=t(r,e,u);return f>-1?i[o?r[f]:f]:n}}function Tu(r){return ni((function(e){var u=e.length,i=u,o=Nr.prototype.thru;for(r&&e.reverse();i--;){var f=e[i];if("function"!=typeof f)throw new zn(t);if(o&&!a&&"wrapper"==ui(f))var a=new Nr([],!0)}for(i=a?i:u;++i<u;){var c=ui(f=e[i]),l="wrapper"==c?ei(f):n;a=l&&bi(l[0])&&424==l[1]&&!l[4].length&&1==l[9]?a[ui(l[0])].apply(a,l[3]):1==f.length&&bi(f)?a[c]():a.thru(f)}return function(){var n=arguments,t=n[0];if(a&&1==n.length&&qo(t))return a.plant(t).value();for(var r=0,i=u?e[r].apply(this,n):t;++r<u;)i=e[r].call(this,i);return i}}))}function $u(t,r,e,u,o,f,a,c,l,s){var h=r&i,p=1&r,v=2&r,_=24&r,g=512&r,y=v?n:Uu(t);return function i(){for(var d=arguments.length,b=mn(d),w=d;w--;)b[w]=arguments[w];if(_)var m=ii(i),x=function(n,t){for(var r=n.length,e=0;r--;)n[r]===t&&++e;return e}(b,m);if(u&&(b=ku(b,u,o,_)),f&&(b=Ou(b,f,a,_)),d-=x,_&&d<s){var j=ur(b,m);return Zu(t,r,$u,i.placeholder,e,b,j,c,l,s-d)}var A=p?e:this,k=v?A[t]:t;return d=b.length,c?b=function(t,r){for(var e=t.length,u=dr(r.length,e),i=Iu(t);u--;){var o=r[u];t[u]=gi(o,e)?i[o]:n}return t}(b,c):g&&d>1&&b.reverse(),h&&l<d&&(b.length=l),this&&this!==ct&&this instanceof i&&(k=y||Uu(k)),k.apply(A,b)}}function Du(n,t){return function(r,e){return function(n,t,r,e){return be(n,(function(n,u,i){t(e,r(n),u,i)})),e}(r,n,t(e),{})}}function Mu(t,r){return function(e,u){var i;if(e===n&&u===n)return r;if(e!==n&&(i=e),u!==n){if(i===n)return u;"string"==typeof e||"string"==typeof u?(e=fu(e),u=fu(u)):(e=ou(e),u=ou(u)),i=t(e,u)}return i}}function Fu(n){return ni((function(t){return t=zt(t,Vt(oi())),Ge((function(r){var e=this;return n(t,(function(n){return mt(n,e,r)}))}))}))}function Nu(t,r){var e=(r=r===n?" ":fu(r)).length;if(e<2)return e?Ve(r,t):r;var u=Ve(r,Ct(t/fr(r)));return tr(r)?bu(ar(u),0,t).join(""):u.slice(0,t)}function Pu(t){return function(r,e,u){return u&&"number"!=typeof u&&yi(r,e,u)&&(e=u=n),r=vf(r),e===n?(e=r,r=0):e=vf(e),function(n,t,r,e){for(var u=-1,i=yr(Ct((t-n)/(r||1)),0),o=mn(i);i--;)o[e?i:++u]=n,n+=r;return o}(r,e,u=u===n?r<e?1:-1:vf(u),t)}}function qu(n){return function(t,r){return"string"==typeof t&&"string"==typeof r||(t=yf(t),r=yf(r)),n(t,r)}}function Zu(t,r,e,i,o,f,a,c,l,s){var h=8&r;r|=h?u:64,4&(r&=~(h?64:u))||(r&=-4);var p=[t,r,o,h?f:n,h?a:n,h?n:f,h?n:a,c,l,s],v=e.apply(n,p);return bi(t)&&Ii(v,p),v.placeholder=i,Ei(v,t,r)}function Ku(n){var t=kn[n];return function(n,r){if(n=yf(n),(r=null==r?0:dr(_f(r),292))&&vr(n)){var e=(bf(n)+"e").split("e");return+((e=(bf(t(e[0]+"e"+(+e[1]+r)))+"e").split("e"))[0]+"e"+(+e[1]-r))}return t(n)}}var Vu=Or&&1/ir(new Or([,-0]))[1]==o?function(n){return new Or(n)}:ca;function Gu(n){return function(t){var r=hi(t);return r==d?rr(t):r==j?or(t):function(n,t){return zt(t,(function(t){return[t,n[t]]}))}(t,n(t))}}function Hu(r,o,f,a,c,l,s,h){var p=2&o;if(!p&&"function"!=typeof r)throw new zn(t);var v=a?a.length:0;if(v||(o&=-97,a=c=n),s=s===n?s:yr(_f(s),0),h=h===n?h:_f(h),v-=c?c.length:0,64&o){var _=a,g=c;a=c=n}var y=p?n:ei(r),d=[r,o,f,a,c,_,g,l,s,h];if(y&&function(n,t){var r=n[1],u=t[1],o=r|u,f=o<131,a=u==i&&8==r||u==i&&256==r&&n[7].length<=t[8]||384==u&&t[7].length<=t[8]&&8==r;if(!f&&!a)return n;1&u&&(n[2]=t[2],o|=1&r?0:4);var c=t[3];if(c){var l=n[3];n[3]=l?ku(l,c,t[4]):c,n[4]=l?ur(n[3],e):t[4]}(c=t[5])&&(l=n[5],n[5]=l?Ou(l,c,t[6]):c,n[6]=l?ur(n[5],e):t[6]),(c=t[7])&&(n[7]=c),u&i&&(n[8]=null==n[8]?t[8]:dr(n[8],t[8])),null==n[9]&&(n[9]=t[9]),n[0]=t[0],n[1]=o}(d,y),r=d[0],o=d[1],f=d[2],a=d[3],c=d[4],!(h=d[9]=d[9]===n?p?0:r.length:yr(d[9]-v,0))&&24&o&&(o&=-25),o&&1!=o)b=8==o||16==o?function(t,r,e){var u=Uu(t);return function i(){for(var o=arguments.length,f=mn(o),a=o,c=ii(i);a--;)f[a]=arguments[a];var l=o<3&&f[0]!==c&&f[o-1]!==c?[]:ur(f,c);return(o-=l.length)<e?Zu(t,r,$u,i.placeholder,n,f,l,n,n,e-o):mt(this&&this!==ct&&this instanceof i?u:t,this,f)}}(r,o,h):o!=u&&33!=o||c.length?$u.apply(n,d):function(n,t,r,e){var u=1&t,i=Uu(n);return function t(){for(var o=-1,f=arguments.length,a=-1,c=e.length,l=mn(c+f),s=this&&this!==ct&&this instanceof t?i:n;++a<c;)l[a]=e[a];for(;f--;)l[a++]=arguments[++o];return mt(s,u?r:this,l)}}(r,o,f,a);else var b=function(n,t,r){var e=1&t,u=Uu(n);return function t(){return(this&&this!==ct&&this instanceof t?u:n).apply(e?r:this,arguments)}}(r,o,f);return Ei((y?Qe:Ii)(b,d),r,o)}function Ju(t,r,e,u){return t===n||Mo(t,Wn[e])&&!Un.call(u,e)?r:t}function Yu(t,r,e,u,i,o){return nf(t)&&nf(r)&&(o.set(r,t),Me(t,r,n,Yu,o),o.delete(r)),t}function Qu(t){return uf(t)?n:t}function Xu(t,r,e,u,i,o){var f=1&e,a=t.length,c=r.length;if(a!=c&&!(f&&c>a))return!1;var l=o.get(t),s=o.get(r);if(l&&s)return l==r&&s==t;var h=-1,p=!0,v=2&e?new Vr:n;for(o.set(t,r),o.set(r,t);++h<a;){var _=t[h],g=r[h];if(u)var y=f?u(g,_,h,r,t,o):u(_,g,h,t,r,o);if(y!==n){if(y)continue;p=!1;break}if(v){if(!Lt(r,(function(n,t){if(!Ht(v,t)&&(_===n||i(_,n,e,u,o)))return v.push(t)}))){p=!1;break}}else if(_!==g&&!i(_,g,e,u,o)){p=!1;break}}return o.delete(t),o.delete(r),p}function ni(t){return zi(Ai(t,n,qi),t+"")}function ti(n){return je(n,Wf,li)}function ri(n){return je(n,Lf,si)}var ei=zr?function(n){return zr.get(n)}:ca;function ui(n){for(var t=n.name+"",r=Er[t],e=Un.call(Er,t)?r.length:0;e--;){var u=r[e],i=u.func;if(null==i||i==n)return u.name}return t}function ii(n){return(Un.call(Dr,"placeholder")?Dr:n).placeholder}function oi(){var n=Dr.iteratee||ia;return n=n===ia?Ce:n,arguments.length?n(arguments[0],arguments[1]):n}function fi(n,t){var r,e,u=n.__data__;return("string"==(e=typeof(r=t))||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==r:null===r)?u["string"==typeof t?"string":"hash"]:u.map}function ai(n){for(var t=Wf(n),r=t.length;r--;){var e=t[r],u=n[e];t[r]=[e,u,xi(u)]}return t}function ci(t,r){var e=function(t,r){return null==t?n:t[r]}(t,r);return Le(e)?e:n}var li=hr?function(n){return null==n?[]:(n=On(n),Ot(hr(n),(function(t){return Jn.call(n,t)})))}:ga,si=hr?function(n){for(var t=[];n;)Et(t,li(n)),n=Kn(n);return t}:ga,hi=Ae;function pi(n,t,r){for(var e=-1,u=(t=yu(t,n)).length,i=!1;++e<u;){var o=Bi(t[e]);if(!(i=null!=n&&r(n,o)))break;n=n[o]}return i||++e!=u?i:!!(u=null==n?0:n.length)&&Xo(u)&&gi(o,u)&&(qo(n)||Po(n))}function vi(n){return"function"!=typeof n.constructor||mi(n)?{}:Mr(Kn(n))}function _i(n){return qo(n)||Po(n)||!!(ut&&n&&n[ut])}function gi(n,t){var r=typeof n;return!!(t=null==t?f:t)&&("number"==r||"symbol"!=r&&vn.test(n))&&n>-1&&n%1==0&&n<t}function yi(n,t,r){if(!nf(r))return!1;var e=typeof t;return!!("number"==e?Ko(r)&&gi(t,r.length):"string"==e&&t in r)&&Mo(r[t],n)}function di(n,t){if(qo(n))return!1;var r=typeof n;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=n&&!cf(n))||H.test(n)||!G.test(n)||null!=t&&n in On(t)}function bi(n){var t=ui(n),r=Dr[t];if("function"!=typeof r||!(t in Pr.prototype))return!1;if(n===r)return!0;var e=ei(r);return!!e&&n===e[0]}(jr&&hi(new jr(new ArrayBuffer(1)))!=R||Ar&&hi(new Ar)!=d||kr&&hi(kr.resolve())!=m||Or&&hi(new Or)!=j||Ir&&hi(new Ir)!=O)&&(hi=function(t){var r=Ae(t),e=r==w?t.constructor:n,u=e?Ti(e):"";if(u)switch(u){case Sr:return R;case Wr:return d;case Lr:return m;case Cr:return j;case Ur:return O}return r});var wi=Ln?Yo:ya;function mi(n){var t=n&&n.constructor;return n===("function"==typeof t&&t.prototype||Wn)}function xi(n){return n==n&&!nf(n)}function ji(t,r){return function(e){return null!=e&&e[t]===r&&(r!==n||t in On(e))}}function Ai(t,r,e){return r=yr(r===n?t.length-1:r,0),function(){for(var n=arguments,u=-1,i=yr(n.length-r,0),o=mn(i);++u<i;)o[u]=n[r+u];u=-1;for(var f=mn(r+1);++u<r;)f[u]=n[u];return f[r]=e(o),mt(t,this,f)}}function ki(n,t){return t.length<2?n:xe(n,tu(t,0,-1))}function Oi(n,t){if(("constructor"!==t||"function"!=typeof n[t])&&"__proto__"!=t)return n[t]}var Ii=Si(Qe),Ri=vt||function(n,t){return ct.setTimeout(n,t)},zi=Si(Xe);function Ei(n,t,r){var e=t+"";return zi(n,function(n,t){var r=t.length;if(!r)return n;var e=r-1;return t[e]=(r>1?"& ":"")+t[e],t=t.join(r>2?", ":" "),n.replace(tn,"{\n/* [wrapped with "+t+"] */\n")}(e,function(n,t){return jt(l,(function(r){var e="_."+r[0];t&r[1]&&!It(n,e)&&n.push(e)})),n.sort()}(function(n){var t=n.match(rn);return t?t[1].split(en):[]}(e),r)))}function Si(t){var r=0,e=0;return function(){var u=br(),i=16-(u-e);if(e=u,i>0){if(++r>=800)return arguments[0]}else r=0;return t.apply(n,arguments)}}function Wi(t,r){var e=-1,u=t.length,i=u-1;for(r=r===n?u:r;++e<r;){var o=Ke(e,i),f=t[o];t[o]=t[e],t[e]=f}return t.length=r,t}var Li,Ci,Ui=(Li=Co((function(n){var t=[];return 46===n.charCodeAt(0)&&t.push(""),n.replace(J,(function(n,r,e,u){t.push(e?u.replace(fn,"$1"):r||n)})),t}),(function(n){return 500===Ci.size&&Ci.clear(),n})),Ci=Li.cache,Li);function Bi(n){if("string"==typeof n||cf(n))return n;var t=n+"";return"0"==t&&1/n==-1/0?"-0":t}function Ti(n){if(null!=n){try{return Cn.call(n)}catch(n){}try{return n+""}catch(n){}}return""}function $i(n){if(n instanceof Pr)return n.clone();var t=new Nr(n.__wrapped__,n.__chain__);return t.__actions__=Iu(n.__actions__),t.__index__=n.__index__,t.__values__=n.__values__,t}var Di=Ge((function(n,t){return Vo(n)?le(n,ge(t,1,Vo,!0)):[]})),Mi=Ge((function(t,r){var e=Hi(r);return Vo(e)&&(e=n),Vo(t)?le(t,ge(r,1,Vo,!0),oi(e,2)):[]})),Fi=Ge((function(t,r){var e=Hi(r);return Vo(e)&&(e=n),Vo(t)?le(t,ge(r,1,Vo,!0),n,e):[]}));function Ni(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=null==r?0:_f(r);return u<0&&(u=yr(e+u,0)),Bt(n,oi(t,3),u)}function Pi(t,r,e){var u=null==t?0:t.length;if(!u)return-1;var i=u-1;return e!==n&&(i=_f(e),i=e<0?yr(u+i,0):dr(i,u-1)),Bt(t,oi(r,3),i,!0)}function qi(n){return null!=n&&n.length?ge(n,1):[]}function Zi(t){return t&&t.length?t[0]:n}var Ki=Ge((function(n){var t=zt(n,_u);return t.length&&t[0]===n[0]?Re(t):[]})),Vi=Ge((function(t){var r=Hi(t),e=zt(t,_u);return r===Hi(e)?r=n:e.pop(),e.length&&e[0]===t[0]?Re(e,oi(r,2)):[]})),Gi=Ge((function(t){var r=Hi(t),e=zt(t,_u);return(r="function"==typeof r?r:n)&&e.pop(),e.length&&e[0]===t[0]?Re(e,n,r):[]}));function Hi(t){var r=null==t?0:t.length;return r?t[r-1]:n}var Ji=Ge(Yi);function Yi(n,t){return n&&n.length&&t&&t.length?qe(n,t):n}var Qi=ni((function(n,t){var r=null==n?0:n.length,e=ie(n,t);return Ze(n,zt(t,(function(n){return gi(n,r)?+n:n})).sort(Au)),e}));function Xi(n){return null==n?n:xr.call(n)}var no=Ge((function(n){return au(ge(n,1,Vo,!0))})),to=Ge((function(t){var r=Hi(t);return Vo(r)&&(r=n),au(ge(t,1,Vo,!0),oi(r,2))})),ro=Ge((function(t){var r=Hi(t);return r="function"==typeof r?r:n,au(ge(t,1,Vo,!0),n,r)}));function eo(n){if(!n||!n.length)return[];var t=0;return n=Ot(n,(function(n){if(Vo(n))return t=yr(n.length,t),!0})),Zt(t,(function(t){return zt(n,Ft(t))}))}function uo(t,r){if(!t||!t.length)return[];var e=eo(t);return null==r?e:zt(e,(function(t){return mt(r,n,t)}))}var io=Ge((function(n,t){return Vo(n)?le(n,t):[]})),oo=Ge((function(n){return pu(Ot(n,Vo))})),fo=Ge((function(t){var r=Hi(t);return Vo(r)&&(r=n),pu(Ot(t,Vo),oi(r,2))})),ao=Ge((function(t){var r=Hi(t);return r="function"==typeof r?r:n,pu(Ot(t,Vo),n,r)})),co=Ge(eo),lo=Ge((function(t){var r=t.length,e=r>1?t[r-1]:n;return e="function"==typeof e?(t.pop(),e):n,uo(t,e)}));function so(n){var t=Dr(n);return t.__chain__=!0,t}function ho(n,t){return t(n)}var po=ni((function(t){var r=t.length,e=r?t[0]:0,u=this.__wrapped__,i=function(n){return ie(n,t)};return!(r>1||this.__actions__.length)&&u instanceof Pr&&gi(e)?((u=u.slice(e,+e+(r?1:0))).__actions__.push({func:ho,args:[i],thisArg:n}),new Nr(u,this.__chain__).thru((function(t){return r&&!t.length&&t.push(n),t}))):this.thru(i)})),vo=zu((function(n,t,r){Un.call(n,r)?++n[r]:ue(n,r,1)})),_o=Bu(Ni),go=Bu(Pi);function yo(n,t){return(qo(n)?jt:se)(n,oi(t,3))}function bo(n,t){return(qo(n)?At:he)(n,oi(t,3))}var wo=zu((function(n,t,r){Un.call(n,r)?n[r].push(t):ue(n,r,[t])})),mo=Ge((function(n,t,r){var e=-1,u="function"==typeof t,i=Ko(n)?mn(n.length):[];return se(n,(function(n){i[++e]=u?mt(t,n,r):ze(n,t,r)})),i})),xo=zu((function(n,t,r){ue(n,r,t)}));function jo(n,t){return(qo(n)?zt:Te)(n,oi(t,3))}var Ao=zu((function(n,t,r){n[r?0:1].push(t)}),(function(){return[[],[]]})),ko=Ge((function(n,t){if(null==n)return[];var r=t.length;return r>1&&yi(n,t[0],t[1])?t=[]:r>2&&yi(t[0],t[1],t[2])&&(t=[t[0]]),Ne(n,ge(t,1),[])})),Oo=pt||function(){return ct.Date.now()};function Io(t,r,e){return r=e?n:r,r=t&&null==r?t.length:r,Hu(t,i,n,n,n,n,r)}function Ro(r,e){var u;if("function"!=typeof e)throw new zn(t);return r=_f(r),function(){return--r>0&&(u=e.apply(this,arguments)),r<=1&&(e=n),u}}var zo=Ge((function(n,t,r){var e=1;if(r.length){var i=ur(r,ii(zo));e|=u}return Hu(n,e,t,r,i)})),Eo=Ge((function(n,t,r){var e=3;if(r.length){var i=ur(r,ii(Eo));e|=u}return Hu(t,e,n,r,i)}));function So(r,e,u){var i,o,f,a,c,l,s=0,h=!1,p=!1,v=!0;if("function"!=typeof r)throw new zn(t);function _(t){var e=i,u=o;return i=o=n,s=t,a=r.apply(u,e)}function g(t){var r=t-l;return l===n||r>=e||r<0||p&&t-s>=f}function y(){var n=Oo();if(g(n))return d(n);c=Ri(y,function(n){var t=e-(n-l);return p?dr(t,f-(n-s)):t}(n))}function d(t){return c=n,v&&i?_(t):(i=o=n,a)}function b(){var t=Oo(),r=g(t);if(i=arguments,o=this,l=t,r){if(c===n)return function(n){return s=n,c=Ri(y,e),h?_(n):a}(l);if(p)return wu(c),c=Ri(y,e),_(l)}return c===n&&(c=Ri(y,e)),a}return e=yf(e)||0,nf(u)&&(h=!!u.leading,f=(p="maxWait"in u)?yr(yf(u.maxWait)||0,e):f,v="trailing"in u?!!u.trailing:v),b.cancel=function(){c!==n&&wu(c),s=0,i=l=o=c=n},b.flush=function(){return c===n?a:d(Oo())},b}var Wo=Ge((function(n,t){return ce(n,1,t)})),Lo=Ge((function(n,t,r){return ce(n,yf(t)||0,r)}));function Co(n,r){if("function"!=typeof n||null!=r&&"function"!=typeof r)throw new zn(t);var e=function(){var t=arguments,u=r?r.apply(this,t):t[0],i=e.cache;if(i.has(u))return i.get(u);var o=n.apply(this,t);return e.cache=i.set(u,o)||i,o};return e.cache=new(Co.Cache||Kr),e}function Uo(n){if("function"!=typeof n)throw new zn(t);return function(){var t=arguments;switch(t.length){case 0:return!n.call(this);case 1:return!n.call(this,t[0]);case 2:return!n.call(this,t[0],t[1]);case 3:return!n.call(this,t[0],t[1],t[2])}return!n.apply(this,t)}}Co.Cache=Kr;var Bo=du((function(n,t){var r=(t=1==t.length&&qo(t[0])?zt(t[0],Vt(oi())):zt(ge(t,1),Vt(oi()))).length;return Ge((function(e){for(var u=-1,i=dr(e.length,r);++u<i;)e[u]=t[u].call(this,e[u]);return mt(n,this,e)}))})),To=Ge((function(t,r){var e=ur(r,ii(To));return Hu(t,u,n,r,e)})),$o=Ge((function(t,r){var e=ur(r,ii($o));return Hu(t,64,n,r,e)})),Do=ni((function(t,r){return Hu(t,256,n,n,n,r)}));function Mo(n,t){return n===t||n!=n&&t!=t}var Fo=qu(ke),No=qu((function(n,t){return n>=t})),Po=Ee(function(){return arguments}())?Ee:function(n){return tf(n)&&Un.call(n,"callee")&&!Jn.call(n,"callee")},qo=mn.isArray,Zo=_t?Vt(_t):function(n){return tf(n)&&Ae(n)==I};function Ko(n){return null!=n&&Xo(n.length)&&!Yo(n)}function Vo(n){return tf(n)&&Ko(n)}var Go=pr||ya,Ho=gt?Vt(gt):function(n){return tf(n)&&Ae(n)==v};function Jo(n){if(!tf(n))return!1;var t=Ae(n);return t==_||"[object DOMException]"==t||"string"==typeof n.message&&"string"==typeof n.name&&!uf(n)}function Yo(n){if(!nf(n))return!1;var t=Ae(n);return t==g||t==y||"[object AsyncFunction]"==t||"[object Proxy]"==t}function Qo(n){return"number"==typeof n&&n==_f(n)}function Xo(n){return"number"==typeof n&&n>-1&&n%1==0&&n<=f}function nf(n){var t=typeof n;return null!=n&&("object"==t||"function"==t)}function tf(n){return null!=n&&"object"==typeof n}var rf=yt?Vt(yt):function(n){return tf(n)&&hi(n)==d};function ef(n){return"number"==typeof n||tf(n)&&Ae(n)==b}function uf(n){if(!tf(n)||Ae(n)!=w)return!1;var t=Kn(n);if(null===t)return!0;var r=Un.call(t,"constructor")&&t.constructor;return"function"==typeof r&&r instanceof r&&Cn.call(r)==Dn}var of=dt?Vt(dt):function(n){return tf(n)&&Ae(n)==x},ff=bt?Vt(bt):function(n){return tf(n)&&hi(n)==j};function af(n){return"string"==typeof n||!qo(n)&&tf(n)&&Ae(n)==A}function cf(n){return"symbol"==typeof n||tf(n)&&Ae(n)==k}var lf=wt?Vt(wt):function(n){return tf(n)&&Xo(n.length)&&!!rt[Ae(n)]},sf=qu(Be),hf=qu((function(n,t){return n<=t}));function pf(n){if(!n)return[];if(Ko(n))return af(n)?ar(n):Iu(n);if(ft&&n[ft])return function(n){for(var t,r=[];!(t=n.next()).done;)r.push(t.value);return r}(n[ft]());var t=hi(n);return(t==d?rr:t==j?ir:Ff)(n)}function vf(n){return n?(n=yf(n))===o||n===-1/0?17976931348623157e292*(n<0?-1:1):n==n?n:0:0===n?n:0}function _f(n){var t=vf(n),r=t%1;return t==t?r?t-r:t:0}function gf(n){return n?oe(_f(n),0,c):0}function yf(n){if("number"==typeof n)return n;if(cf(n))return a;if(nf(n)){var t="function"==typeof n.valueOf?n.valueOf():n;n=nf(t)?t+"":t}if("string"!=typeof n)return 0===n?n:+n;n=Kt(n);var r=sn.test(n);return r||pn.test(n)?ot(n.slice(2),r?2:8):ln.test(n)?a:+n}function df(n){return Ru(n,Lf(n))}function bf(n){return null==n?"":fu(n)}var wf=Eu((function(n,t){if(mi(t)||Ko(t))Ru(t,Wf(t),n);else for(var r in t)Un.call(t,r)&&ne(n,r,t[r])})),mf=Eu((function(n,t){Ru(t,Lf(t),n)})),xf=Eu((function(n,t,r,e){Ru(t,Lf(t),n,e)})),jf=Eu((function(n,t,r,e){Ru(t,Wf(t),n,e)})),Af=ni(ie),kf=Ge((function(t,r){t=On(t);var e=-1,u=r.length,i=u>2?r[2]:n;for(i&&yi(r[0],r[1],i)&&(u=1);++e<u;)for(var o=r[e],f=Lf(o),a=-1,c=f.length;++a<c;){var l=f[a],s=t[l];(s===n||Mo(s,Wn[l])&&!Un.call(t,l))&&(t[l]=o[l])}return t})),Of=Ge((function(t){return t.push(n,Yu),mt(Uf,n,t)}));function If(t,r,e){var u=null==t?n:xe(t,r);return u===n?e:u}function Rf(n,t){return null!=n&&pi(n,t,Ie)}var zf=Du((function(n,t,r){null!=t&&"function"!=typeof t.toString&&(t=$n.call(t)),n[t]=r}),ta(ua)),Ef=Du((function(n,t,r){null!=t&&"function"!=typeof t.toString&&(t=$n.call(t)),Un.call(n,t)?n[t].push(r):n[t]=[r]}),oi),Sf=Ge(ze);function Wf(n){return Ko(n)?Hr(n):Ue(n)}function Lf(n){return Ko(n)?Hr(n,!0):function(n){if(!nf(n))return function(n){var t=[];if(null!=n)for(var r in On(n))t.push(r);return t}(n);var t=mi(n),r=[];for(var e in n)("constructor"!=e||!t&&Un.call(n,e))&&r.push(e);return r}(n)}var Cf=Eu((function(n,t,r){Me(n,t,r)})),Uf=Eu((function(n,t,r,e){Me(n,t,r,e)})),Bf=ni((function(n,t){var r={};if(null==n)return r;var e=!1;t=zt(t,(function(t){return t=yu(t,n),e||(e=t.length>1),t})),Ru(n,ri(n),r),e&&(r=fe(r,7,Qu));for(var u=t.length;u--;)cu(r,t[u]);return r})),Tf=ni((function(n,t){return null==n?{}:function(n,t){return Pe(n,t,(function(t,r){return Rf(n,r)}))}(n,t)}));function $f(n,t){if(null==n)return{};var r=zt(ri(n),(function(n){return[n]}));return t=oi(t),Pe(n,r,(function(n,r){return t(n,r[0])}))}var Df=Gu(Wf),Mf=Gu(Lf);function Ff(n){return null==n?[]:Gt(n,Wf(n))}var Nf=Cu((function(n,t,r){return t=t.toLowerCase(),n+(r?Pf(t):t)}));function Pf(n){return Yf(bf(n).toLowerCase())}function qf(n){return(n=bf(n))&&n.replace(gn,Qt).replace(Hn,"")}var Zf=Cu((function(n,t,r){return n+(r?"-":"")+t.toLowerCase()})),Kf=Cu((function(n,t,r){return n+(r?" ":"")+t.toLowerCase()})),Vf=Lu("toLowerCase"),Gf=Cu((function(n,t,r){return n+(r?"_":"")+t.toLowerCase()})),Hf=Cu((function(n,t,r){return n+(r?" ":"")+Yf(t)})),Jf=Cu((function(n,t,r){return n+(r?" ":"")+t.toUpperCase()})),Yf=Lu("toUpperCase");function Qf(t,r,e){return t=bf(t),(r=e?n:r)===n?function(n){return Xn.test(n)}(t)?function(n){return n.match(Yn)||[]}(t):function(n){return n.match(un)||[]}(t):t.match(r)||[]}var Xf=Ge((function(t,r){try{return mt(t,n,r)}catch(n){return Jo(n)?n:new jn(n)}})),na=ni((function(n,t){return jt(t,(function(t){t=Bi(t),ue(n,t,zo(n[t],n))})),n}));function ta(n){return function(){return n}}var ra=Tu(),ea=Tu(!0);function ua(n){return n}function ia(n){return Ce("function"==typeof n?n:fe(n,1))}var oa=Ge((function(n,t){return function(r){return ze(r,n,t)}})),fa=Ge((function(n,t){return function(r){return ze(n,r,t)}}));function aa(n,t,r){var e=Wf(t),u=me(t,e);null!=r||nf(t)&&(u.length||!e.length)||(r=t,t=n,n=this,u=me(t,Wf(t)));var i=!(nf(r)&&"chain"in r&&!r.chain),o=Yo(n);return jt(u,(function(r){var e=t[r];n[r]=e,o&&(n.prototype[r]=function(){var t=this.__chain__;if(i||t){var r=n(this.__wrapped__);return(r.__actions__=Iu(this.__actions__)).push({func:e,args:arguments,thisArg:n}),r.__chain__=t,r}return e.apply(n,Et([this.value()],arguments))})})),n}function ca(){}var la=Fu(zt),sa=Fu(kt),ha=Fu(Lt);function pa(n){return di(n)?Ft(Bi(n)):function(n){return function(t){return xe(t,n)}}(n)}var va=Pu(),_a=Pu(!0);function ga(){return[]}function ya(){return!1}var da,ba=Mu((function(n,t){return n+t}),0),wa=Ku("ceil"),ma=Mu((function(n,t){return n/t}),1),xa=Ku("floor"),ja=Mu((function(n,t){return n*t}),1),Aa=Ku("round"),ka=Mu((function(n,t){return n-t}),0);return Dr.after=function(n,r){if("function"!=typeof r)throw new zn(t);return n=_f(n),function(){if(--n<1)return r.apply(this,arguments)}},Dr.ary=Io,Dr.assign=wf,Dr.assignIn=mf,Dr.assignInWith=xf,Dr.assignWith=jf,Dr.at=Af,Dr.before=Ro,Dr.bind=zo,Dr.bindAll=na,Dr.bindKey=Eo,Dr.castArray=function(){if(!arguments.length)return[];var n=arguments[0];return qo(n)?n:[n]},Dr.chain=so,Dr.chunk=function(t,r,e){r=(e?yi(t,r,e):r===n)?1:yr(_f(r),0);var u=null==t?0:t.length;if(!u||r<1)return[];for(var i=0,o=0,f=mn(Ct(u/r));i<u;)f[o++]=tu(t,i,i+=r);return f},Dr.compact=function(n){for(var t=-1,r=null==n?0:n.length,e=0,u=[];++t<r;){var i=n[t];i&&(u[e++]=i)}return u},Dr.concat=function(){var n=arguments.length;if(!n)return[];for(var t=mn(n-1),r=arguments[0],e=n;e--;)t[e-1]=arguments[e];return Et(qo(r)?Iu(r):[r],ge(t,1))},Dr.cond=function(n){var r=null==n?0:n.length,e=oi();return n=r?zt(n,(function(n){if("function"!=typeof n[1])throw new zn(t);return[e(n[0]),n[1]]})):[],Ge((function(t){for(var e=-1;++e<r;){var u=n[e];if(mt(u[0],this,t))return mt(u[1],this,t)}}))},Dr.conforms=function(n){return function(n){var t=Wf(n);return function(r){return ae(r,n,t)}}(fe(n,1))},Dr.constant=ta,Dr.countBy=vo,Dr.create=function(n,t){var r=Mr(n);return null==t?r:ee(r,t)},Dr.curry=function t(r,e,u){var i=Hu(r,8,n,n,n,n,n,e=u?n:e);return i.placeholder=t.placeholder,i},Dr.curryRight=function t(r,e,u){var i=Hu(r,16,n,n,n,n,n,e=u?n:e);return i.placeholder=t.placeholder,i},Dr.debounce=So,Dr.defaults=kf,Dr.defaultsDeep=Of,Dr.defer=Wo,Dr.delay=Lo,Dr.difference=Di,Dr.differenceBy=Mi,Dr.differenceWith=Fi,Dr.drop=function(t,r,e){var u=null==t?0:t.length;return u?tu(t,(r=e||r===n?1:_f(r))<0?0:r,u):[]},Dr.dropRight=function(t,r,e){var u=null==t?0:t.length;return u?tu(t,0,(r=u-(r=e||r===n?1:_f(r)))<0?0:r):[]},Dr.dropRightWhile=function(n,t){return n&&n.length?su(n,oi(t,3),!0,!0):[]},Dr.dropWhile=function(n,t){return n&&n.length?su(n,oi(t,3),!0):[]},Dr.fill=function(t,r,e,u){var i=null==t?0:t.length;return i?(e&&"number"!=typeof e&&yi(t,r,e)&&(e=0,u=i),function(t,r,e,u){var i=t.length;for((e=_f(e))<0&&(e=-e>i?0:i+e),(u=u===n||u>i?i:_f(u))<0&&(u+=i),u=e>u?0:gf(u);e<u;)t[e++]=r;return t}(t,r,e,u)):[]},Dr.filter=function(n,t){return(qo(n)?Ot:_e)(n,oi(t,3))},Dr.flatMap=function(n,t){return ge(jo(n,t),1)},Dr.flatMapDeep=function(n,t){return ge(jo(n,t),o)},Dr.flatMapDepth=function(t,r,e){return e=e===n?1:_f(e),ge(jo(t,r),e)},Dr.flatten=qi,Dr.flattenDeep=function(n){return null!=n&&n.length?ge(n,o):[]},Dr.flattenDepth=function(t,r){return null!=t&&t.length?ge(t,r=r===n?1:_f(r)):[]},Dr.flip=function(n){return Hu(n,512)},Dr.flow=ra,Dr.flowRight=ea,Dr.fromPairs=function(n){for(var t=-1,r=null==n?0:n.length,e={};++t<r;){var u=n[t];e[u[0]]=u[1]}return e},Dr.functions=function(n){return null==n?[]:me(n,Wf(n))},Dr.functionsIn=function(n){return null==n?[]:me(n,Lf(n))},Dr.groupBy=wo,Dr.initial=function(n){return null!=n&&n.length?tu(n,0,-1):[]},Dr.intersection=Ki,Dr.intersectionBy=Vi,Dr.intersectionWith=Gi,Dr.invert=zf,Dr.invertBy=Ef,Dr.invokeMap=mo,Dr.iteratee=ia,Dr.keyBy=xo,Dr.keys=Wf,Dr.keysIn=Lf,Dr.map=jo,Dr.mapKeys=function(n,t){var r={};return t=oi(t,3),be(n,(function(n,e,u){ue(r,t(n,e,u),n)})),r},Dr.mapValues=function(n,t){var r={};return t=oi(t,3),be(n,(function(n,e,u){ue(r,e,t(n,e,u))})),r},Dr.matches=function(n){return $e(fe(n,1))},Dr.matchesProperty=function(n,t){return De(n,fe(t,1))},Dr.memoize=Co,Dr.merge=Cf,Dr.mergeWith=Uf,Dr.method=oa,Dr.methodOf=fa,Dr.mixin=aa,Dr.negate=Uo,Dr.nthArg=function(n){return n=_f(n),Ge((function(t){return Fe(t,n)}))},Dr.omit=Bf,Dr.omitBy=function(n,t){return $f(n,Uo(oi(t)))},Dr.once=function(n){return Ro(2,n)},Dr.orderBy=function(t,r,e,u){return null==t?[]:(qo(r)||(r=null==r?[]:[r]),qo(e=u?n:e)||(e=null==e?[]:[e]),Ne(t,r,e))},Dr.over=la,Dr.overArgs=Bo,Dr.overEvery=sa,Dr.overSome=ha,Dr.partial=To,Dr.partialRight=$o,Dr.partition=Ao,Dr.pick=Tf,Dr.pickBy=$f,Dr.property=pa,Dr.propertyOf=function(t){return function(r){return null==t?n:xe(t,r)}},Dr.pull=Ji,Dr.pullAll=Yi,Dr.pullAllBy=function(n,t,r){return n&&n.length&&t&&t.length?qe(n,t,oi(r,2)):n},Dr.pullAllWith=function(t,r,e){return t&&t.length&&r&&r.length?qe(t,r,n,e):t},Dr.pullAt=Qi,Dr.range=va,Dr.rangeRight=_a,Dr.rearg=Do,Dr.reject=function(n,t){return(qo(n)?Ot:_e)(n,Uo(oi(t,3)))},Dr.remove=function(n,t){var r=[];if(!n||!n.length)return r;var e=-1,u=[],i=n.length;for(t=oi(t,3);++e<i;){var o=n[e];t(o,e,n)&&(r.push(o),u.push(e))}return Ze(n,u),r},Dr.rest=function(r,e){if("function"!=typeof r)throw new zn(t);return Ge(r,e=e===n?e:_f(e))},Dr.reverse=Xi,Dr.sampleSize=function(t,r,e){return r=(e?yi(t,r,e):r===n)?1:_f(r),(qo(t)?Yr:Je)(t,r)},Dr.set=function(n,t,r){return null==n?n:Ye(n,t,r)},Dr.setWith=function(t,r,e,u){return u="function"==typeof u?u:n,null==t?t:Ye(t,r,e,u)},Dr.shuffle=function(n){return(qo(n)?Qr:nu)(n)},Dr.slice=function(t,r,e){var u=null==t?0:t.length;return u?(e&&"number"!=typeof e&&yi(t,r,e)?(r=0,e=u):(r=null==r?0:_f(r),e=e===n?u:_f(e)),tu(t,r,e)):[]},Dr.sortBy=ko,Dr.sortedUniq=function(n){return n&&n.length?iu(n):[]},Dr.sortedUniqBy=function(n,t){return n&&n.length?iu(n,oi(t,2)):[]},Dr.split=function(t,r,e){return e&&"number"!=typeof e&&yi(t,r,e)&&(r=e=n),(e=e===n?c:e>>>0)?(t=bf(t))&&("string"==typeof r||null!=r&&!of(r))&&!(r=fu(r))&&tr(t)?bu(ar(t),0,e):t.split(r,e):[]},Dr.spread=function(n,r){if("function"!=typeof n)throw new zn(t);return r=null==r?0:yr(_f(r),0),Ge((function(t){var e=t[r],u=bu(t,0,r);return e&&Et(u,e),mt(n,this,u)}))},Dr.tail=function(n){var t=null==n?0:n.length;return t?tu(n,1,t):[]},Dr.take=function(t,r,e){return t&&t.length?tu(t,0,(r=e||r===n?1:_f(r))<0?0:r):[]},Dr.takeRight=function(t,r,e){var u=null==t?0:t.length;return u?tu(t,(r=u-(r=e||r===n?1:_f(r)))<0?0:r,u):[]},Dr.takeRightWhile=function(n,t){return n&&n.length?su(n,oi(t,3),!1,!0):[]},Dr.takeWhile=function(n,t){return n&&n.length?su(n,oi(t,3)):[]},Dr.tap=function(n,t){return t(n),n},Dr.throttle=function(n,r,e){var u=!0,i=!0;if("function"!=typeof n)throw new zn(t);return nf(e)&&(u="leading"in e?!!e.leading:u,i="trailing"in e?!!e.trailing:i),So(n,r,{leading:u,maxWait:r,trailing:i})},Dr.thru=ho,Dr.toArray=pf,Dr.toPairs=Df,Dr.toPairsIn=Mf,Dr.toPath=function(n){return qo(n)?zt(n,Bi):cf(n)?[n]:Iu(Ui(bf(n)))},Dr.toPlainObject=df,Dr.transform=function(n,t,r){var e=qo(n),u=e||Go(n)||lf(n);if(t=oi(t,4),null==r){var i=n&&n.constructor;r=u?e?new i:[]:nf(n)&&Yo(i)?Mr(Kn(n)):{}}return(u?jt:be)(n,(function(n,e,u){return t(r,n,e,u)})),r},Dr.unary=function(n){return Io(n,1)},Dr.union=no,Dr.unionBy=to,Dr.unionWith=ro,Dr.uniq=function(n){return n&&n.length?au(n):[]},Dr.uniqBy=function(n,t){return n&&n.length?au(n,oi(t,2)):[]},Dr.uniqWith=function(t,r){return r="function"==typeof r?r:n,t&&t.length?au(t,n,r):[]},Dr.unset=function(n,t){return null==n||cu(n,t)},Dr.unzip=eo,Dr.unzipWith=uo,Dr.update=function(n,t,r){return null==n?n:lu(n,t,gu(r))},Dr.updateWith=function(t,r,e,u){return u="function"==typeof u?u:n,null==t?t:lu(t,r,gu(e),u)},Dr.values=Ff,Dr.valuesIn=function(n){return null==n?[]:Gt(n,Lf(n))},Dr.without=io,Dr.words=Qf,Dr.wrap=function(n,t){return To(gu(t),n)},Dr.xor=oo,Dr.xorBy=fo,Dr.xorWith=ao,Dr.zip=co,Dr.zipObject=function(n,t){return vu(n||[],t||[],ne)},Dr.zipObjectDeep=function(n,t){return vu(n||[],t||[],Ye)},Dr.zipWith=lo,Dr.entries=Df,Dr.entriesIn=Mf,Dr.extend=mf,Dr.extendWith=xf,aa(Dr,Dr),Dr.add=ba,Dr.attempt=Xf,Dr.camelCase=Nf,Dr.capitalize=Pf,Dr.ceil=wa,Dr.clamp=function(t,r,e){return e===n&&(e=r,r=n),e!==n&&(e=(e=yf(e))==e?e:0),r!==n&&(r=(r=yf(r))==r?r:0),oe(yf(t),r,e)},Dr.clone=function(n){return fe(n,4)},Dr.cloneDeep=function(n){return fe(n,5)},Dr.cloneDeepWith=function(t,r){return fe(t,5,r="function"==typeof r?r:n)},Dr.cloneWith=function(t,r){return fe(t,4,r="function"==typeof r?r:n)},Dr.conformsTo=function(n,t){return null==t||ae(n,t,Wf(t))},Dr.deburr=qf,Dr.defaultTo=function(n,t){return null==n||n!=n?t:n},Dr.divide=ma,Dr.endsWith=function(t,r,e){t=bf(t),r=fu(r);var u=t.length,i=e=e===n?u:oe(_f(e),0,u);return(e-=r.length)>=0&&t.slice(e,i)==r},Dr.eq=Mo,Dr.escape=function(n){return(n=bf(n))&&q.test(n)?n.replace(N,Xt):n},Dr.escapeRegExp=function(n){return(n=bf(n))&&Q.test(n)?n.replace(Y,"\\$&"):n},Dr.every=function(t,r,e){var u=qo(t)?kt:pe;return e&&yi(t,r,e)&&(r=n),u(t,oi(r,3))},Dr.find=_o,Dr.findIndex=Ni,Dr.findKey=function(n,t){return Ut(n,oi(t,3),be)},Dr.findLast=go,Dr.findLastIndex=Pi,Dr.findLastKey=function(n,t){return Ut(n,oi(t,3),we)},Dr.floor=xa,Dr.forEach=yo,Dr.forEachRight=bo,Dr.forIn=function(n,t){return null==n?n:ye(n,oi(t,3),Lf)},Dr.forInRight=function(n,t){return null==n?n:de(n,oi(t,3),Lf)},Dr.forOwn=function(n,t){return n&&be(n,oi(t,3))},Dr.forOwnRight=function(n,t){return n&&we(n,oi(t,3))},Dr.get=If,Dr.gt=Fo,Dr.gte=No,Dr.has=function(n,t){return null!=n&&pi(n,t,Oe)},Dr.hasIn=Rf,Dr.head=Zi,Dr.identity=ua,Dr.includes=function(n,t,r,e){n=Ko(n)?n:Ff(n),r=r&&!e?_f(r):0;var u=n.length;return r<0&&(r=yr(u+r,0)),af(n)?r<=u&&n.indexOf(t,r)>-1:!!u&&Tt(n,t,r)>-1},Dr.indexOf=function(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=null==r?0:_f(r);return u<0&&(u=yr(e+u,0)),Tt(n,t,u)},Dr.inRange=function(t,r,e){return r=vf(r),e===n?(e=r,r=0):e=vf(e),function(n,t,r){return n>=dr(t,r)&&n<yr(t,r)}(t=yf(t),r,e)},Dr.invoke=Sf,Dr.isArguments=Po,Dr.isArray=qo,Dr.isArrayBuffer=Zo,Dr.isArrayLike=Ko,Dr.isArrayLikeObject=Vo,Dr.isBoolean=function(n){return!0===n||!1===n||tf(n)&&Ae(n)==p},Dr.isBuffer=Go,Dr.isDate=Ho,Dr.isElement=function(n){return tf(n)&&1===n.nodeType&&!uf(n)},Dr.isEmpty=function(n){if(null==n)return!0;if(Ko(n)&&(qo(n)||"string"==typeof n||"function"==typeof n.splice||Go(n)||lf(n)||Po(n)))return!n.length;var t=hi(n);if(t==d||t==j)return!n.size;if(mi(n))return!Ue(n).length;for(var r in n)if(Un.call(n,r))return!1;return!0},Dr.isEqual=function(n,t){return Se(n,t)},Dr.isEqualWith=function(t,r,e){var u=(e="function"==typeof e?e:n)?e(t,r):n;return u===n?Se(t,r,n,e):!!u},Dr.isError=Jo,Dr.isFinite=function(n){return"number"==typeof n&&vr(n)},Dr.isFunction=Yo,Dr.isInteger=Qo,Dr.isLength=Xo,Dr.isMap=rf,Dr.isMatch=function(n,t){return n===t||We(n,t,ai(t))},Dr.isMatchWith=function(t,r,e){return e="function"==typeof e?e:n,We(t,r,ai(r),e)},Dr.isNaN=function(n){return ef(n)&&n!=+n},Dr.isNative=function(n){if(wi(n))throw new jn("Unsupported core-js use. Try https://npms.io/search?q=ponyfill.");return Le(n)},Dr.isNil=function(n){return null==n},Dr.isNull=function(n){return null===n},Dr.isNumber=ef,Dr.isObject=nf,Dr.isObjectLike=tf,Dr.isPlainObject=uf,Dr.isRegExp=of,Dr.isSafeInteger=function(n){return Qo(n)&&n>=-9007199254740991&&n<=f},Dr.isSet=ff,Dr.isString=af,Dr.isSymbol=cf,Dr.isTypedArray=lf,Dr.isUndefined=function(t){return t===n},Dr.isWeakMap=function(n){return tf(n)&&hi(n)==O},Dr.isWeakSet=function(n){return tf(n)&&"[object WeakSet]"==Ae(n)},Dr.join=function(n,t){return null==n?"":_r.call(n,t)},Dr.kebabCase=Zf,Dr.last=Hi,Dr.lastIndexOf=function(t,r,e){var u=null==t?0:t.length;if(!u)return-1;var i=u;return e!==n&&(i=(i=_f(e))<0?yr(u+i,0):dr(i,u-1)),r==r?function(n,t,r){for(var e=r+1;e--;)if(n[e]===t)return e;return e}(t,r,i):Bt(t,Dt,i,!0)},Dr.lowerCase=Kf,Dr.lowerFirst=Vf,Dr.lt=sf,Dr.lte=hf,Dr.max=function(t){return t&&t.length?ve(t,ua,ke):n},Dr.maxBy=function(t,r){return t&&t.length?ve(t,oi(r,2),ke):n},Dr.mean=function(n){return Mt(n,ua)},Dr.meanBy=function(n,t){return Mt(n,oi(t,2))},Dr.min=function(t){return t&&t.length?ve(t,ua,Be):n},Dr.minBy=function(t,r){return t&&t.length?ve(t,oi(r,2),Be):n},Dr.stubArray=ga,Dr.stubFalse=ya,Dr.stubObject=function(){return{}},Dr.stubString=function(){return""},Dr.stubTrue=function(){return!0},Dr.multiply=ja,Dr.nth=function(t,r){return t&&t.length?Fe(t,_f(r)):n},Dr.noConflict=function(){return ct._===this&&(ct._=Mn),this},Dr.noop=ca,Dr.now=Oo,Dr.pad=function(n,t,r){n=bf(n);var e=(t=_f(t))?fr(n):0;if(!t||e>=t)return n;var u=(t-e)/2;return Nu(Nt(u),r)+n+Nu(Ct(u),r)},Dr.padEnd=function(n,t,r){n=bf(n);var e=(t=_f(t))?fr(n):0;return t&&e<t?n+Nu(t-e,r):n},Dr.padStart=function(n,t,r){n=bf(n);var e=(t=_f(t))?fr(n):0;return t&&e<t?Nu(t-e,r)+n:n},Dr.parseInt=function(n,t,r){return r||null==t?t=0:t&&(t=+t),wr(bf(n).replace(X,""),t||0)},Dr.random=function(t,r,e){if(e&&"boolean"!=typeof e&&yi(t,r,e)&&(r=e=n),e===n&&("boolean"==typeof r?(e=r,r=n):"boolean"==typeof t&&(e=t,t=n)),t===n&&r===n?(t=0,r=1):(t=vf(t),r===n?(r=t,t=0):r=vf(r)),t>r){var u=t;t=r,r=u}if(e||t%1||r%1){var i=mr();return dr(t+i*(r-t+it("1e-"+((i+"").length-1))),r)}return Ke(t,r)},Dr.reduce=function(n,t,r){var e=qo(n)?St:Pt,u=arguments.length<3;return e(n,oi(t,4),r,u,se)},Dr.reduceRight=function(n,t,r){var e=qo(n)?Wt:Pt,u=arguments.length<3;return e(n,oi(t,4),r,u,he)},Dr.repeat=function(t,r,e){return r=(e?yi(t,r,e):r===n)?1:_f(r),Ve(bf(t),r)},Dr.replace=function(){var n=arguments,t=bf(n[0]);return n.length<3?t:t.replace(n[1],n[2])},Dr.result=function(t,r,e){var u=-1,i=(r=yu(r,t)).length;for(i||(i=1,t=n);++u<i;){var o=null==t?n:t[Bi(r[u])];o===n&&(u=i,o=e),t=Yo(o)?o.call(t):o}return t},Dr.round=Aa,Dr.runInContext=nn,Dr.sample=function(n){return(qo(n)?Jr:He)(n)},Dr.size=function(n){if(null==n)return 0;if(Ko(n))return af(n)?fr(n):n.length;var t=hi(n);return t==d||t==j?n.size:Ue(n).length},Dr.snakeCase=Gf,Dr.some=function(t,r,e){var u=qo(t)?Lt:ru;return e&&yi(t,r,e)&&(r=n),u(t,oi(r,3))},Dr.sortedIndex=function(n,t){return eu(n,t)},Dr.sortedIndexBy=function(n,t,r){return uu(n,t,oi(r,2))},Dr.sortedIndexOf=function(n,t){var r=null==n?0:n.length;if(r){var e=eu(n,t);if(e<r&&Mo(n[e],t))return e}return-1},Dr.sortedLastIndex=function(n,t){return eu(n,t,!0)},Dr.sortedLastIndexBy=function(n,t,r){return uu(n,t,oi(r,2),!0)},Dr.sortedLastIndexOf=function(n,t){if(null!=n&&n.length){var r=eu(n,t,!0)-1;if(Mo(n[r],t))return r}return-1},Dr.startCase=Hf,Dr.startsWith=function(n,t,r){return n=bf(n),r=null==r?0:oe(_f(r),0,n.length),t=fu(t),n.slice(r,r+t.length)==t},Dr.subtract=ka,Dr.sum=function(n){return n&&n.length?qt(n,ua):0},Dr.sumBy=function(n,t){return n&&n.length?qt(n,oi(t,2)):0},Dr.template=function(t,r,e){var u=Dr.templateSettings;e&&yi(t,r,e)&&(r=n),t=bf(t),r=xf({},r,u,Ju);var i,o,f=xf({},r.imports,u.imports,Ju),a=Wf(f),c=Gt(f,a),l=0,s=r.interpolate||yn,h="__p += '",p=In((r.escape||yn).source+"|"+s.source+"|"+(s===V?an:yn).source+"|"+(r.evaluate||yn).source+"|$","g"),v="//# sourceURL="+(Un.call(r,"sourceURL")?(r.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++tt+"]")+"\n";t.replace(p,(function(n,r,e,u,f,a){return e||(e=u),h+=t.slice(l,a).replace(dn,nr),r&&(i=!0,h+="' +\n__e("+r+") +\n'"),f&&(o=!0,h+="';\n"+f+";\n__p += '"),e&&(h+="' +\n((__t = ("+e+")) == null ? '' : __t) +\n'"),l=a+n.length,n})),h+="';\n";var _=Un.call(r,"variable")&&r.variable;if(_){if(on.test(_))throw new jn("Invalid `variable` option passed into `_.template`")}else h="with (obj) {\n"+h+"\n}\n";h=(o?h.replace($,""):h).replace(D,"$1").replace(M,"$1;"),h="function("+(_||"obj")+") {\n"+(_?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(i?", __e = _.escape":"")+(o?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+h+"return __p\n}";var g=Xf((function(){return An(a,v+"return "+h).apply(n,c)}));if(g.source=h,Jo(g))throw g;return g},Dr.times=function(n,t){if((n=_f(n))<1||n>f)return[];var r=c,e=dr(n,c);t=oi(t),n-=c;for(var u=Zt(e,t);++r<n;)t(r);return u},Dr.toFinite=vf,Dr.toInteger=_f,Dr.toLength=gf,Dr.toLower=function(n){return bf(n).toLowerCase()},Dr.toNumber=yf,Dr.toSafeInteger=function(n){return n?oe(_f(n),-9007199254740991,f):0===n?n:0},Dr.toString=bf,Dr.toUpper=function(n){return bf(n).toUpperCase()},Dr.trim=function(t,r,e){if((t=bf(t))&&(e||r===n))return Kt(t);if(!t||!(r=fu(r)))return t;var u=ar(t),i=ar(r);return bu(u,Jt(u,i),Yt(u,i)+1).join("")},Dr.trimEnd=function(t,r,e){if((t=bf(t))&&(e||r===n))return t.slice(0,cr(t)+1);if(!t||!(r=fu(r)))return t;var u=ar(t);return bu(u,0,Yt(u,ar(r))+1).join("")},Dr.trimStart=function(t,r,e){if((t=bf(t))&&(e||r===n))return t.replace(X,"");if(!t||!(r=fu(r)))return t;var u=ar(t);return bu(u,Jt(u,ar(r))).join("")},Dr.truncate=function(t,r){var e=30,u="...";if(nf(r)){var i="separator"in r?r.separator:i;e="length"in r?_f(r.length):e,u="omission"in r?fu(r.omission):u}var o=(t=bf(t)).length;if(tr(t)){var f=ar(t);o=f.length}if(e>=o)return t;var a=e-fr(u);if(a<1)return u;var c=f?bu(f,0,a).join(""):t.slice(0,a);if(i===n)return c+u;if(f&&(a+=c.length-a),of(i)){if(t.slice(a).search(i)){var l,s=c;for(i.global||(i=In(i.source,bf(cn.exec(i))+"g")),i.lastIndex=0;l=i.exec(s);)var h=l.index;c=c.slice(0,h===n?a:h)}}else if(t.indexOf(fu(i),a)!=a){var p=c.lastIndexOf(i);p>-1&&(c=c.slice(0,p))}return c+u},Dr.unescape=function(n){return(n=bf(n))&&P.test(n)?n.replace(F,lr):n},Dr.uniqueId=function(n){var t=++Bn;return bf(n)+t},Dr.upperCase=Jf,Dr.upperFirst=Yf,Dr.each=yo,Dr.eachRight=bo,Dr.first=Zi,aa(Dr,(da={},be(Dr,(function(n,t){Un.call(Dr.prototype,t)||(da[t]=n)})),da),{chain:!1}),Dr.VERSION="4.17.21",jt(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(n){Dr[n].placeholder=Dr})),jt(["drop","take"],(function(t,r){Pr.prototype[t]=function(e){e=e===n?1:yr(_f(e),0);var u=this.__filtered__&&!r?new Pr(this):this.clone();return u.__filtered__?u.__takeCount__=dr(e,u.__takeCount__):u.__views__.push({size:dr(e,c),type:t+(u.__dir__<0?"Right":"")}),u},Pr.prototype[t+"Right"]=function(n){return this.reverse()[t](n).reverse()}})),jt(["filter","map","takeWhile"],(function(n,t){var r=t+1,e=1==r||3==r;Pr.prototype[n]=function(n){var t=this.clone();return t.__iteratees__.push({iteratee:oi(n,3),type:r}),t.__filtered__=t.__filtered__||e,t}})),jt(["head","last"],(function(n,t){var r="take"+(t?"Right":"");Pr.prototype[n]=function(){return this[r](1).value()[0]}})),jt(["initial","tail"],(function(n,t){var r="drop"+(t?"":"Right");Pr.prototype[n]=function(){return this.__filtered__?new Pr(this):this[r](1)}})),Pr.prototype.compact=function(){return this.filter(ua)},Pr.prototype.find=function(n){return this.filter(n).head()},Pr.prototype.findLast=function(n){return this.reverse().find(n)},Pr.prototype.invokeMap=Ge((function(n,t){return"function"==typeof n?new Pr(this):this.map((function(r){return ze(r,n,t)}))})),Pr.prototype.reject=function(n){return this.filter(Uo(oi(n)))},Pr.prototype.slice=function(t,r){t=_f(t);var e=this;return e.__filtered__&&(t>0||r<0)?new Pr(e):(t<0?e=e.takeRight(-t):t&&(e=e.drop(t)),r!==n&&(e=(r=_f(r))<0?e.dropRight(-r):e.take(r-t)),e)},Pr.prototype.takeRightWhile=function(n){return this.reverse().takeWhile(n).reverse()},Pr.prototype.toArray=function(){return this.take(c)},be(Pr.prototype,(function(t,r){var e=/^(?:filter|find|map|reject)|While$/.test(r),u=/^(?:head|last)$/.test(r),i=Dr[u?"take"+("last"==r?"Right":""):r],o=u||/^find/.test(r);i&&(Dr.prototype[r]=function(){var r=this.__wrapped__,f=u?[1]:arguments,a=r instanceof Pr,c=f[0],l=a||qo(r),s=function(n){var t=i.apply(Dr,Et([n],f));return u&&h?t[0]:t};l&&e&&"function"==typeof c&&1!=c.length&&(a=l=!1);var h=this.__chain__,p=!!this.__actions__.length,v=o&&!h,_=a&&!p;if(!o&&l){r=_?r:new Pr(this);var g=t.apply(r,f);return g.__actions__.push({func:ho,args:[s],thisArg:n}),new Nr(g,h)}return v&&_?t.apply(this,f):(g=this.thru(s),v?u?g.value()[0]:g.value():g)})})),jt(["pop","push","shift","sort","splice","unshift"],(function(n){var t=En[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:pop|shift)$/.test(n);Dr.prototype[n]=function(){var n=arguments;if(e&&!this.__chain__){var u=this.value();return t.apply(qo(u)?u:[],n)}return this[r]((function(r){return t.apply(qo(r)?r:[],n)}))}})),be(Pr.prototype,(function(n,t){var r=Dr[t];if(r){var e=r.name+"";Un.call(Er,e)||(Er[e]=[]),Er[e].push({name:t,func:r})}})),Er[$u(n,2).name]=[{name:"wrapper",func:n}],Pr.prototype.clone=function(){var n=new Pr(this.__wrapped__);return n.__actions__=Iu(this.__actions__),n.__dir__=this.__dir__,n.__filtered__=this.__filtered__,n.__iteratees__=Iu(this.__iteratees__),n.__takeCount__=this.__takeCount__,n.__views__=Iu(this.__views__),n},Pr.prototype.reverse=function(){if(this.__filtered__){var n=new Pr(this);n.__dir__=-1,n.__filtered__=!0}else(n=this.clone()).__dir__*=-1;return n},Pr.prototype.value=function(){var n=this.__wrapped__.value(),t=this.__dir__,r=qo(n),e=t<0,u=r?n.length:0,i=function(n,t,r){for(var e=-1,u=r.length;++e<u;){var i=r[e],o=i.size;switch(i.type){case"drop":n+=o;break;case"dropRight":t-=o;break;case"take":t=dr(t,n+o);break;case"takeRight":n=yr(n,t-o)}}return{start:n,end:t}}(0,u,this.__views__),o=i.start,f=i.end,a=f-o,c=e?f:o-1,l=this.__iteratees__,s=l.length,h=0,p=dr(a,this.__takeCount__);if(!r||!e&&u==a&&p==a)return hu(n,this.__actions__);var v=[];n:for(;a--&&h<p;){for(var _=-1,g=n[c+=t];++_<s;){var y=l[_],d=y.iteratee,b=y.type,w=d(g);if(2==b)g=w;else if(!w){if(1==b)continue n;break n}}v[h++]=g}return v},Dr.prototype.at=po,Dr.prototype.chain=function(){return so(this)},Dr.prototype.commit=function(){return new Nr(this.value(),this.__chain__)},Dr.prototype.next=function(){this.__values__===n&&(this.__values__=pf(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?n:this.__values__[this.__index__++]}},Dr.prototype.plant=function(t){for(var r,e=this;e instanceof Fr;){var u=$i(e);u.__index__=0,u.__values__=n,r?i.__wrapped__=u:r=u;var i=u;e=e.__wrapped__}return i.__wrapped__=t,r},Dr.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof Pr){var r=t;return this.__actions__.length&&(r=new Pr(this)),(r=r.reverse()).__actions__.push({func:ho,args:[Xi],thisArg:n}),new Nr(r,this.__chain__)}return this.thru(Xi)},Dr.prototype.toJSON=Dr.prototype.valueOf=Dr.prototype.value=function(){return hu(this.__wrapped__,this.__actions__)},Dr.prototype.first=Dr.prototype.head,ft&&(Dr.prototype[ft]=function(){return this}),Dr}();"function"==typeof define&&"object"==typeof define.amd&&define.amd?(ct._=sr,define((function(){return sr}))):st?((st.exports=sr)._=sr,lt._=sr):ct._=sr}).call(this);PK.3Y��h���&bunyad-amp/back-compat/back-compat.php<?php
/**
 * Functions for managing legacy templates
 *
 * @package AMP
 */

/**
 * Add hooks to use legacy AMP post templates from before v0.4.
 *
 * If you want to use the template that shipped with v0.3 and earlier, you can use this to force that.
 * Note that this may not stick around forever, so use caution and `function_exists`.
 *
 * Note that the old legacy post templates from AMP plugin v0.3 should no longer be used. Update to using
 * the current AMP legacy post templates or better yet switch to using a full Reader theme.
 *
 * @deprecated Use Reader themes instead of old legacy AMP post templates.
 * @since 0.4
 */
function amp_backcompat_use_v03_templates() {
	_deprecated_function( __FUNCTION__, '2.0' );
	add_filter( 'amp_customizer_is_enabled', '__return_false' );
	add_filter( 'amp_post_template_dir', '_amp_backcompat_use_v03_templates_callback', 0 ); // Early in case there are other overrides.
}

/**
 * Callback for getting the legacy templates directory.
 *
 * @internal
 * @deprecated
 *
 * @param string $templates Template directory.
 * @return string Legacy template directory.
 */
function _amp_backcompat_use_v03_templates_callback( $templates ) {
	return AMP__DIR__ . '/back-compat/templates-v0-3';
}
PK.3Y�����4bunyad-amp/back-compat/templates-v0-3/header-bar.php<?php
/**
 * Legacy template for the AMP title bar.
 *
 * @package AMP
 */

$site_icon_url = $this->get( 'site_icon_url' );
?>

<nav class="amp-wp-title-bar">
	<div>
		<a href="<?php echo esc_url( $this->get( 'home_url' ) ); ?>">
			<?php if ( $site_icon_url ) : ?>
				<amp-img src="<?php echo esc_url( $site_icon_url ); ?>" width="32" height="32" class="amp-wp-site-icon"></amp-img>
			<?php endif; ?>

			<?php echo esc_html( $this->get( 'blog_name' ) ); ?>
		</a>
	</div>
</nav>
PK.3YU\1���5bunyad-amp/back-compat/templates-v0-3/meta-author.php<?php
/**
 * Legacy template for the AMP author byline.
 *
 * @package AMP
 */

$post_author = $this->get( 'post_author' );
$avatar_url  = get_avatar_url(
	$post_author->user_email,
	[
		'size' => 24,
	]
);
?>
<li class="amp-wp-byline">
	<?php if ( function_exists( 'get_avatar_url' ) ) : ?>
	<amp-img src="<?php echo esc_url( $avatar_url ); ?>" width="24" height="24" layout="fixed"></amp-img>
	<?php endif; ?>
	<span class="amp-wp-author"><?php echo esc_html( $post_author->display_name ); ?></span>
</li>
PK.3Y!DM**7bunyad-amp/back-compat/templates-v0-3/meta-taxonomy.php<?php
/**
 * Legacy template for the AMP post taxonomy term lists.
 *
 * @package AMP
 */

$categories = get_the_category_list( _x( ', ', 'Used between list items, there is a space after the comma.', 'amp' ) );
?>
<?php if ( $categories ) : ?>
	<li class="amp-wp-tax-category">
		<span class="screen-reader-text">Categories:</span>
		<?php echo $categories; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
	</li>
<?php endif; ?>

<?php $tags = get_the_tag_list( '', _x( ', ', 'Used between list items, there is a space after the comma.', 'amp' ) ); ?>
<?php if ( $tags && ! is_wp_error( $tags ) ) : ?>
	<li class="amp-wp-tax-tag">
		<span class="screen-reader-text">Tags:</span>
		<?php echo $tags; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
	</li>
<?php endif; ?>
PK.3Y�
^(��3bunyad-amp/back-compat/templates-v0-3/meta-time.php<?php
/**
 * Legacy template for the AMP post date.
 *
 * @package AMP
 */

/**
 * Context.
 *
 * @var AMP_Post_Template $this
 */

?>
<li class="amp-wp-posted-on">
	<time datetime="<?php echo esc_attr( gmdate( 'c', $this->get( 'post_publish_timestamp' ) ) ); ?>">
		<?php
		echo esc_html(
			sprintf(
				/* translators: %s: the human-readable time difference. */
				__( '%s ago', 'amp' ),
				human_time_diff( $this->get( 'post_publish_timestamp' ), time() )
			)
		);
		?>
	</time>
</li>
PK.3Y�z��0bunyad-amp/back-compat/templates-v0-3/single.php<?php
/**
 * Legacy template for the AMP post.
 *
 * @package AMP
 */

/**
 * Context.
 *
 * @var AMP_Post_Template $this
 */

?>
<!doctype html>
<html amp <?php language_attributes(); ?>>
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1">
	<?php
	/** This action is documented in templates/html-start.php */
	do_action( 'amp_post_template_head', $this );
	?>

	<style amp-custom>
	<?php $this->load_parts( [ 'style' ] ); ?>
	<?php
	/** This action is documented in templates/html-start.php */
	do_action( 'amp_post_template_css', $this );
	?>
	</style>
</head>
<body>
<?php $this->load_parts( [ 'header-bar' ] ); ?>
<div class="amp-wp-content">
	<h1 class="amp-wp-title"><?php echo wp_kses_data( $this->get( 'post_title' ) ); ?></h1>
	<ul class="amp-wp-meta">
		<?php
		/**
		 * Filters the template parts to load in the meta area of the AMP legacy post template from before v0.4.
		 *
		 * @since 0.2
		 * @deprecated
		 *
		 * @param string[] Templates to load.
		 */
		$this->load_parts( apply_filters( 'amp_post_template_meta_parts', [ 'meta-author', 'meta-time', 'meta-taxonomy' ] ) );
		?>
	</ul>
	<?php echo $this->get( 'post_amp_content' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
</div>
<?php
/** This action is documented in templates/html-start.php */
do_action( 'amp_post_template_footer', $this );
?>
</body>
</html>
PK.3Y��sQ

/bunyad-amp/back-compat/templates-v0-3/style.php<?php
/**
 * Legacy template for the AMP stylesheet.
 *
 * @package AMP
 */

// phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped

?>
/* Merriweather fonts */
@font-face {
	font-family:'Merriweather';
	src:url('https://s1.wp.com/i/fonts/merriweather/merriweather-regular-webfont.woff2') format('woff2'),
		url('https://s1.wp.com/i/fonts/merriweather/merriweather-regular-webfont.woff') format('woff'),
		url('https://s1.wp.com/i/fonts/merriweather/merriweather-regular-webfont.ttf') format('truetype'),
		url('https://s1.wp.com/i/fonts/merriweather/merriweather-regular-webfont.svg#merriweatherregular') format('svg');
	font-weight:400;
	font-style:normal;
}

@font-face {
	font-family:'Merriweather';
	src:url('https://s1.wp.com/i/fonts/merriweather/merriweather-italic-webfont.woff2') format('woff2'),
		url('https://s1.wp.com/i/fonts/merriweather/merriweather-italic-webfont.woff') format('woff'),
		url('https://s1.wp.com/i/fonts/merriweather/merriweather-italic-webfont.ttf') format('truetype'),
		url('https://s1.wp.com/i/fonts/merriweather/merriweather-italic-webfont.svg#merriweatheritalic') format('svg');
	font-weight:400;
	font-style:italic;
}

@font-face {
	font-family:'Merriweather';
	src:url('https://s1.wp.com/i/fonts/merriweather/merriweather-bold-webfont.woff2') format('woff2'),
		url('https://s1.wp.com/i/fonts/merriweather/merriweather-bold-webfont.woff') format('woff'),
		url('https://s1.wp.com/i/fonts/merriweather/merriweather-bold-webfont.ttf') format('truetype'),
		url('https://s1.wp.com/i/fonts/merriweather/merriweather-bold-webfont.svg#merriweatherbold') format('svg');
	font-weight:700;
	font-style:normal;
}

@font-face {
	font-family:'Merriweather';
	src:url('https://s1.wp.com/i/fonts/merriweather/merriweather-bolditalic-webfont.woff2') format('woff2'),
		url('https://s1.wp.com/i/fonts/merriweather/merriweather-bolditalic-webfont.woff') format('woff'),
		url('https://s1.wp.com/i/fonts/merriweather/merriweather-bolditalic-webfont.ttf') format('truetype'),
		url('https://s1.wp.com/i/fonts/merriweather/merriweather-bolditalic-webfont.svg#merriweatherbold_italic') format('svg');
	font-weight:700;
	font-style:italic;
}

/* Generic WP styling */
amp-img.alignright { float: right; margin: 0 0 1em 1em; }
amp-img.alignleft { float: left; margin: 0 1em 1em 0; }
amp-img.aligncenter { display: block; margin-left: auto; margin-right: auto; }
.alignright { float: right; }
.alignleft { float: left; }
.aligncenter { display: block; margin-left: auto; margin-right: auto; }

.wp-caption.alignleft { margin-right: 1em; }
.wp-caption.alignright { margin-left: 1em; }

.amp-wp-enforced-sizes {
	/** Our sizes fallback is 100vw, and we have a padding on the container; the max-width here prevents the element from overflowing. **/
	max-width: 100%;
}

.amp-wp-unknown-size img {
	/** Worst case scenario when we can't figure out dimensions for an image. **/
	/** Force the image into a box of fixed dimensions and use object-fit to scale. **/
	object-fit: contain;
}

/* Template Styles */
.amp-wp-content, .amp-wp-title-bar div {
	<?php $content_max_width = absint( $this->get( 'content_max_width' ) ); ?>
	<?php if ( $content_max_width > 0 ) : ?>
	max-width: <?php echo sprintf( '%dpx', $content_max_width ); ?>;
	margin: 0 auto;
	<?php endif; ?>
}

body {
	font-family: 'Merriweather', Serif;
	font-size: 16px;
	line-height: 1.8;
	background: #fff;
	color: #3d596d;
	padding-bottom: 100px;
}

.amp-wp-content {
	padding: 16px;
	overflow-wrap: break-word;
	word-wrap: break-word;
	font-weight: 400;
	color: #3d596d;
}

.amp-wp-title {
	margin: 36px 0 0 0;
	font-size: 36px;
	line-height: 1.258;
	font-weight: 700;
	color: #2e4453;
}

.amp-wp-meta {
	margin-bottom: 16px;
}

p,
ol,
ul,
figure {
	margin: 0 0 24px 0;
}

a,
a:visited {
	color: #0087be;
}

a:hover,
a:active,
a:focus {
	color: #33bbe3;
}


/* UI Fonts */
.amp-wp-meta,
nav.amp-wp-title-bar,
.wp-caption-text {
	font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen-Sans", "Ubuntu", "Cantarell", "Helvetica Neue", sans-serif;
	font-size: 15px;
}


/* Meta */
ul.amp-wp-meta {
	padding: 24px 0 0 0;
	margin: 0 0 24px 0;
}

ul.amp-wp-meta li {
	list-style: none;
	display: inline-block;
	margin: 0;
	line-height: 24px;
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
	max-width: 300px;
}

ul.amp-wp-meta li:before {
	content: "\2022";
	margin: 0 8px;
}

ul.amp-wp-meta li:first-child:before {
	display: none;
}

.amp-wp-meta,
.amp-wp-meta a {
	color: #4f748e;
}

.amp-wp-meta .screen-reader-text {
	/* from twentyfifteen */
	clip: rect(1px, 1px, 1px, 1px);
	height: 1px;
	overflow: hidden;
	position: absolute;
	width: 1px;
}

.amp-wp-byline amp-img {
	border-radius: 50%;
	border: 0;
	background: #f3f6f8;
	position: relative;
	top: 6px;
	margin-right: 6px;
}

/* Titlebar */
nav.amp-wp-title-bar {
	background: <?php echo esc_html( $this->get_customizer_setting( 'navbar_background', self::DEFAULT_NAVBAR_BACKGROUND ) ); // not ideal for escaping here, but better than nothing? ?>;
	padding: 0 16px;
}

nav.amp-wp-title-bar div {
	line-height: 54px;
	color: <?php echo esc_html( $this->get_customizer_setting( 'navbar_color', self::DEFAULT_NAVBAR_COLOR ) ); ?>;
}

nav.amp-wp-title-bar a {
	color: <?php echo esc_html( $this->get_customizer_setting( 'navbar_color', self::DEFAULT_NAVBAR_COLOR ) ); ?>;
	text-decoration: none;
}

nav.amp-wp-title-bar .amp-wp-site-icon {
	/** site icon is 32px **/
	float: left;
	margin: 11px 8px 0 0;
	border-radius: 50%;
}

/* Captions */
.wp-caption-text {
	padding: 8px 16px;
	font-style: italic;
}


/* Quotes */
blockquote {
	padding: 16px;
	margin: 8px 0 24px 0;
	border-left: 2px solid #87a6bc;
	color: #4f748e;
	background: #e9eff3;
}

blockquote p:last-child {
	margin-bottom: 0;
}

/* Other Elements */
amp-carousel {
	background: #000;
}

amp-iframe,
amp-youtube,
amp-instagram,
amp-vine {
	background: #f3f6f8;
}

amp-carousel > amp-img > img {
	object-fit: contain;
}

.amp-wp-iframe-placeholder {
	background: #f3f6f8 url( <?php echo esc_url( $this->get( 'placeholder_image_url' ) ); ?> ) no-repeat center 40%;
	background-size: 48px 48px;
	min-height: 48px;
}
PK.3Y�T,bunyad-amp/includes/amp-frontend-actions.php<?php
/**
 * Callbacks for adding AMP-related things to the main theme.
 *
 * @codeCoverageIgnore
 * @deprecated Function in this file has been moved to amp-helper-functions.php.
 * @package AMP
 */

_deprecated_file(
	__FILE__,
	'1.0',
	null,
	sprintf(
		/* translators: 1: amp_add_amphtml_link(). 2: amp-helper-functions.php */
		esc_html__( 'Use %1$s function which is already included from %2$s', 'amp' ),
		'amp_add_amphtml_link()',
		'amp-helper-functions.php'
	)
);

/**
 * Add amphtml link to frontend.
 *
 * @deprecated Use amp_add_amphtml_link() instead.
 *
 * @since 0.2
 * @since 1.0 Deprecated
 * @see amp_add_amphtml_link()
 */
function amp_frontend_add_canonical() {
	_deprecated_function( __FUNCTION__, '1.0', 'amp_add_amphtml_link' );
	amp_add_amphtml_link();
}
PK.3Y��&��,bunyad-amp/includes/amp-helper-functions.php<?php
/**
 * AMP Helper Functions
 *
 * @package AMP
 */

use AmpProject\AmpWP\Admin\ReaderThemes;
use AmpProject\AmpWP\AmpSlugCustomizationWatcher;
use AmpProject\AmpWP\AmpWpPluginFactory;
use AmpProject\AmpWP\Exception\InvalidService;
use AmpProject\AmpWP\Icon;
use AmpProject\AmpWP\Option;
use AmpProject\AmpWP\QueryVar;
use AmpProject\AmpWP\Services;

/**
 * Determine whether AMP is enabled on the current site.
 *
 * @since 2.1.1
 * @internal
 *
 * @return bool Whether enabled.
 */
function amp_is_enabled() {
	/**
	 * Filters whether AMP is enabled on the current site.
	 *
	 * Useful if the plugin is network activated and you want to turn it off on select sites.
	 *
	 * @since 0.2
	 * @since 2.0 Filter now runs earlier at plugins_loaded (with earliest priority) rather than at the after_setup_theme action.
	 *
	 * @param bool $enabled Whether the AMP plugin's functionality should be enabled.
	 */
	return (bool) apply_filters( 'amp_is_enabled', true );
}

/**
 * Handle activation of plugin.
 *
 * @since 0.2
 * @internal
 *
 * @param bool $network_wide Whether the activation was done network-wide.
 */
function amp_activate( $network_wide = false ) {
	if ( amp_is_enabled() ) {
		AmpWpPluginFactory::create()->activate( $network_wide );
	}
}

/**
 * Handle deactivation of plugin.
 *
 * @since 0.2
 * @internal
 *
 * @param bool $network_wide Whether the activation was done network-wide.
 */
function amp_deactivate( $network_wide = false ) {
	if ( amp_is_enabled() ) {
		AmpWpPluginFactory::create()->deactivate( $network_wide );
	}
}

/**
 * Bootstrap plugin.
 *
 * @since 1.5
 * @internal
 */
function amp_bootstrap_plugin() {
	if ( ! amp_is_enabled() ) {
		return;
	}

	AmpWpPluginFactory::create()->register();

	// The amp_bootstrap_plugin() function is called at the plugins_loaded action with the earliest priority. This is
	// the earliest we can run this since that is when pluggable.php has been required and wp_hash() is available.
	AMP_Validation_Manager::init_validate_request();

	/*
	 * Register AMP scripts regardless of whether AMP is enabled or it is the AMP endpoint
	 * for the sake of being able to use AMP components on non-AMP documents ("dirty AMP").
	 */
	add_action( 'wp_default_scripts', 'amp_register_default_scripts' );

	add_action( 'wp_default_styles', 'amp_register_default_styles' );

	// Ensure async and custom-element/custom-template attributes are present on script tags.
	add_filter( 'script_loader_tag', 'amp_filter_script_loader_tag', PHP_INT_MAX, 2 );

	// Ensure ID attribute is present in WP<5.5.
	if ( version_compare( get_bloginfo( 'version' ), '5.5', '<' ) ) {
		add_filter( 'script_loader_tag', 'amp_ensure_id_attribute_on_script_loader_tag', ~PHP_INT_MAX, 2 );
	}

	// Ensure crossorigin=anonymous is added to font links.
	add_filter( 'style_loader_tag', 'amp_filter_font_style_loader_tag_with_crossorigin_anonymous', 10, 4 );

	add_action( 'after_setup_theme', 'amp_after_setup_theme', 5 );

	add_action( 'plugins_loaded', '_amp_bootstrap_customizer', 9 ); // Should be hooked before priority 10 on 'plugins_loaded' to properly unhook core panels.

	// @todo Eliminate this once https://core.trac.wordpress.org/ticket/20578 has finally landed.
	add_filter( 'all_plugins', 'amp_modify_plugin_description' );
}

/**
 * Init AMP.
 *
 * @since 0.1
 * @internal
 */
function amp_init() {

	/**
	 * Triggers on init when AMP plugin is active.
	 *
	 * @since 0.3
	 */
	do_action( 'amp_init' );

	add_filter( 'allowed_redirect_hosts', [ AMP_HTTP::class, 'filter_allowed_redirect_hosts' ] );
	AMP_HTTP::purge_amp_query_vars();
	AMP_HTTP::send_cors_headers();
	AMP_HTTP::handle_xhr_request();
	AMP_Theme_Support::init();
	AMP_Validation_Manager::init();
	AMP_Service_Worker::init();
	add_action( 'admin_init', 'AMP_Options_Manager::init' );
	add_action( 'admin_init', 'AMP_Options_Manager::register_settings' );
	add_action( 'rest_api_init', 'AMP_Options_Manager::register_settings' );
	add_action( 'wp_loaded', 'amp_bootstrap_admin' );

	add_action( 'admin_bar_menu', 'amp_add_admin_bar_view_link', 100 );

	add_action(
		'admin_bar_init',
		function () {
			$handle = 'amp-icons';
			if ( ! is_admin() && wp_style_is( $handle, 'registered' ) ) {
				wp_styles()->registered[ $handle ]->deps[] = 'admin-bar'; // Ensure included in dev mode.
				wp_enqueue_style( $handle );
			}
		}
	);

	add_action( 'wp_loaded', 'amp_editor_core_blocks' );
	add_filter( 'request', 'amp_force_query_var_value' );

	/*
	 * Broadcast plugin updates.
	 * Note that AMP_Options_Manager::get_option( Option::VERSION, '0.0' ) cannot be used because
	 * version was new option added, and in that case default would never be used for a site
	 * upgrading from a version prior to 1.0. So this is why get_option() is currently used.
	 */
	$options     = get_option( AMP_Options_Manager::OPTION_NAME, [] );
	$old_version = isset( $options[ Option::VERSION ] ) ? $options[ Option::VERSION ] : '0.0';

	if ( AMP__VERSION !== $old_version && is_admin() && current_user_can( 'manage_options' ) ) {
		// This waits to happen until the very end of admin_init to ensure that amp theme support and amp post type
		// support have all been added, and that the settings have been registered.
		add_action(
			'admin_init',
			static function () use ( $old_version ) {
				/**
				 * Triggers when after amp_init when the plugin version has updated.
				 *
				 * @param string $old_version Old version.
				 */
				do_action( 'amp_plugin_update', $old_version );
				AMP_Options_Manager::update_option( Option::VERSION, AMP__VERSION );
			},
			PHP_INT_MAX
		);
	}

	add_action(
		'rest_api_init',
		static function () {
			$reader_themes = new ReaderThemes();

			$reader_theme_controller = new AMP_Reader_Theme_REST_Controller( $reader_themes );
			$reader_theme_controller->register_routes();
		}
	);

	/*
	 * Hide admin bar if the window is inside the setup wizard iframe.
	 *
	 * Detects whether the current window is in an iframe with the specified `name` attribute. The iframe is created
	 * by Preview component located in <assets/src/setup/pages/save/index.js>.
	 */
	add_action( 'wp_head', 'amp_remove_admin_bar_in_phone_preview' );
	add_action( 'amp_post_template_head', 'amp_remove_admin_bar_in_phone_preview' );
}

/**
 * Remove the admin bar in phone preview of the site in AMP Onboarding Wizard.
 *
 * @since 2.2.2
 * @internal
 */
function amp_remove_admin_bar_in_phone_preview() {
	if ( ! amp_is_dev_mode() || ! is_admin_bar_showing() ) {
		return;
	}
	?>
	<script data-ampdevmode>
		( () => {
			if ( 'amp-wizard-completion-preview' !== window.name ) {
				return;
			}

			/** @type {HTMLStyleElement} */
			const style = document.createElement( 'style' );
			style.setAttribute( 'type', 'text/css' );
			style.appendChild( document.createTextNode( 'html:not(#_) { margin-top: 0 !important; } #wpadminbar { display: none !important; }' ) );
			document.head.appendChild( style );

			document.addEventListener( 'DOMContentLoaded', function() {
				const adminBar = document.getElementById( 'wpadminbar' );
				if ( adminBar ) {
					document.body.classList.remove( 'admin-bar' );
					adminBar.remove();
				}
			});
		} )();
	</script>
	<?php
}

/**
 * When AMP plugin is active remove instruction of plugin data removal steps.
 *
 * @since 2.2
 * @internal
 *
 * @param array $meta An array of plugins to display in the list table.
 * @return array An array of plugins to display in the list table.
 */
function amp_modify_plugin_description( $meta ) {

	if ( isset( $meta['amp/amp.php']['Description'] ) ) {
		$meta['amp/amp.php']['Description'] = preg_replace(
			':\s*<em class=\"amp-deletion-notice\">.+?</em>:',
			'',
			$meta['amp/amp.php']['Description']
		);
	}

	return $meta;
}

/**
 * Set up AMP.
 *
 * This function must be invoked through the 'after_setup_theme' action to allow
 * the AMP setting to declare the post types support earlier than plugins/theme.
 *
 * @since 0.6
 * @internal
 */
function amp_after_setup_theme() {
	// Ensure AMP_QUERY_VAR is set since some plugins still try reading it instead of using amp_get_slug().
	if ( ! defined( 'AMP_QUERY_VAR' ) ) {
		define( 'AMP_QUERY_VAR', amp_get_slug() );
	}

	/** This filter is documented in includes/amp-helper-functions.php */
	if ( false === apply_filters( 'amp_is_enabled', true ) ) {
		_doing_it_wrong(
			'add_filter',
			esc_html(
				sprintf(
					/* translators: 1: amp_is_enabled filter name, 2: plugins_loaded action */
					__( 'Filter for "%1$s" added too late. To disable AMP, this filter must be added before the "%2$s" action.', 'amp' ),
					'amp_is_enabled',
					'plugins_loaded'
				)
			),
			'2.0'
		);
	}

	add_action( 'init', 'amp_init', 0 ); // Must be 0 because widgets_init happens at init priority 1.
}

/**
 * Make sure the `amp` query var has an explicit value.
 *
 * This avoids issues when filtering the deprecated `query_string` hook.
 *
 * @since 0.3.3
 * @internal
 *
 * @param array $query_vars Query vars.
 * @return array Query vars.
 */
function amp_force_query_var_value( $query_vars ) {
	if ( isset( $query_vars[ amp_get_slug() ] ) && '' === $query_vars[ amp_get_slug() ] ) {
		$query_vars[ amp_get_slug() ] = 1;
	}
	return $query_vars;
}

/**
 * Whether this is in 'canonical mode'.
 *
 * Themes can register support for this with `add_theme_support( AMP_Theme_Support::SLUG )`:
 *
 * ```php
 * add_theme_support( AMP_Theme_Support::SLUG );
 * ```
 *
 * This will serve templates in AMP-first, allowing you to use AMP components in your theme templates.
 * If you want to make available in transitional mode, where templates are served in AMP or non-AMP documents, do:
 *
 * ```php
 * add_theme_support( AMP_Theme_Support::SLUG, array(
 *     'paired' => true,
 * ) );
 * ```
 *
 * Transitional mode is also implied if you define a `template_dir`:
 *
 * ```php
 * add_theme_support( AMP_Theme_Support::SLUG, array(
 *     'template_dir' => 'amp',
 * ) );
 * ```
 *
 * If you want to have AMP-specific templates in addition to serving AMP-first, do:
 *
 * ```php
 * add_theme_support( AMP_Theme_Support::SLUG, array(
 *     'paired'       => false,
 *     'template_dir' => 'amp',
 * ) );
 * ```
 *
 * @see AMP_Theme_Support::read_theme_support()
 * @return boolean Whether this is in AMP 'canonical' mode, that is whether it is AMP-first and there is not a separate (paired) AMP URL.
 */
function amp_is_canonical() {
	return AMP_Theme_Support::STANDARD_MODE_SLUG === AMP_Options_Manager::get_option( Option::THEME_SUPPORT );
}

/**
 * Determines whether the legacy AMP post templates are being used.
 *
 * @since 2.0
 * @return bool
 */
function amp_is_legacy() {
	if ( AMP_Theme_Support::READER_MODE_SLUG !== AMP_Options_Manager::get_option( Option::THEME_SUPPORT ) ) {
		return false;
	}

	$reader_theme = AMP_Options_Manager::get_option( Option::READER_THEME );
	if ( ReaderThemes::DEFAULT_READER_THEME === $reader_theme ) {
		return true;
	}

	return ! wp_get_theme( $reader_theme )->exists();
}

/**
 * Determine whether AMP is available for the current URL.
 *
 * @since 2.0
 *
 * @return bool Whether there is an AMP version for the provided URL.
 * @global string $pagenow
 * @global WP_Query $wp_query
 */
function amp_is_available() {
	global $pagenow, $wp_query;

	// Short-circuit for cron, CLI, admin requests or requests to non-frontend pages.
	if ( wp_doing_cron() || ( defined( 'WP_CLI' ) && WP_CLI ) || is_admin() || in_array( $pagenow, [ 'wp-login.php', 'wp-signup.php', 'wp-activate.php', 'repair.php' ], true ) ) {
		return false;
	}

	$warn = static function () {
		static $already_warned_sources = [];

		try {
			$likely_culprit_detector = Services::get( 'dev_tools.likely_culprit_detector' );
			$closest_source          = $likely_culprit_detector->analyze_backtrace();
		} catch ( InvalidService $e ) {
			$closest_source = [
				'type' => 'exception',
				'name' => 'invalid_service',
			];
		}

		$closest_source_identifier = $closest_source['type'] . ':' . $closest_source['name'];
		if ( in_array( $closest_source_identifier, $already_warned_sources, true ) ) {
			return;
		}

		$message = sprintf(
			/* translators: 1: amp_is_available function, 2: amp_is_request function, 3: is_amp_endpoint function */
			__( '%1$s (or %2$s, formerly %3$s) was called too early and so it will not work properly.', 'amp' ),
			'`amp_is_available()`',
			'`amp_is_request()`',
			'`is_amp_endpoint()`'
		);

		$current_hook = current_action();
		if ( $current_hook ) {
			/* translators: placeholder is the current hook */
			$message .= ' ' . sprintf(
				'WordPress is currently doing the %s hook.',
				'`' . $current_hook . '`'
			);
		} else {
			$message .= ' ' . __( 'WordPress is not currently doing any hook.', 'amp' );
		}

		$message .= ' ' . sprintf(
			/* translators: 1: the wp action, 2: the WP_Query class, 3: the amp_skip_post() function */
			__( 'Calling this function before the %1$s action means it will not have access to %2$s and the queried object to determine if it is an AMP response, thus neither the %3$s filter nor the AMP enabled toggle will be considered.', 'amp' ),
			'`wp`',
			'`WP_Query`',
			'`amp_skip_post()`'
		);

		if ( ! empty( $closest_source['type'] ) && ! empty( $closest_source['name'] ) ) {
			$translated_string = false;

			switch ( $closest_source['type'] ) {
				case 'plugin':
					/* translators: placeholder is the slug of the plugin */
					$translated_string = __( 'It appears the plugin with slug %s is responsible; please contact the author.', 'amp' );
					break;
				case 'mu-plugin':
					/* translators: placeholder is the slug of the must-use plugin */
					$translated_string = __( 'It appears the must-use plugin with slug %s is responsible; please contact the author.', 'amp' );
					break;
				case 'theme':
					/* translators: placeholder is the slug of the theme */
					$translated_string = __( 'It appears the theme with slug %s is responsible; please contact the author.', 'amp' );
					break;
				case 'exception':
					$translated_string = __( 'The function was called too early (before the plugins_loaded action) to determine the plugin source.', 'amp' );
					break;
			}

			if ( $translated_string ) {
				$message .= ' ' . sprintf( $translated_string, '`' . $closest_source['name'] . '`' );
			}
		}

		_doing_it_wrong( 'amp_is_available', esc_html( $message ), '2.0.0' );
		$already_warned_sources[] = $closest_source_identifier;
	};

	// Make sure the parse_request action has triggered before trying to read from the REST_REQUEST constant, which is set during rest_api_loaded().
	if ( ! did_action( 'parse_request' ) ) {
		$warn();
	} elseif ( defined( 'REST_REQUEST' ) && REST_REQUEST ) {
		return false;
	}

	// Make sure that the parse_query action has triggered, as this is required to initially populate the global WP_Query.
	if ( ! ( $wp_query instanceof WP_Query || did_action( 'parse_query' ) ) ) {
		$warn();
	}

	// Always return false when requesting the service worker.
	// Note this is no longer strictly required because AMP_Theme_Support::prepare_response() will abort for non-HTML responses.
	// But it is still good to do so because it avoids needlessly output-buffering the response.
	if ( class_exists( 'WP_Service_Workers' ) && $wp_query instanceof WP_Query && defined( 'WP_Service_Workers::QUERY_VAR' ) && $wp_query->get( WP_Service_Workers::QUERY_VAR ) ) {
		return false;
	}

	// Short-circuit queries that can never have AMP responses (e.g. post embeds and feeds).
	// Note that these conditionals only require the parse_query action to have been run. They don't depend on the wp action having been fired.
	if (
		$wp_query instanceof WP_Query
		&&
		(
			$wp_query->is_embed()
			||
			$wp_query->is_feed()
			||
			$wp_query->is_comment_feed()
			||
			$wp_query->is_trackback()
			||
			$wp_query->is_robots()
			||
			( method_exists( $wp_query, 'is_favicon' ) && $wp_query->is_favicon() )
		)
	) {
		return false;
	}

	// Ensure that all templates can be accessed in AMP when a Reader theme is selected.
	$has_reader_theme = (
		AMP_Theme_Support::READER_MODE_SLUG === AMP_Options_Manager::get_option( Option::THEME_SUPPORT )
		&&
		ReaderThemes::DEFAULT_READER_THEME !== AMP_Options_Manager::get_option( Option::READER_THEME )
	);
	if ( $has_reader_theme && is_customize_preview() ) {
		return true;
	}

	$is_legacy = amp_is_legacy();

	// If the query has not been initialized, we can only assume AMP is available if theme support is present and all templates are supported.
	if ( ! $wp_query instanceof WP_Query || ! did_action( 'wp' ) ) {
		$warn();
		return ! $is_legacy && AMP_Options_Manager::get_option( Option::ALL_TEMPLATES_SUPPORTED );
	}

	// If redirected to this page because AMP is not available due to validation errors, prevent AMP from being available (if not AMP-first).
	if (
		( ! amp_is_canonical() || AMP_Validation_Manager::has_cap() )
		&&
		( isset( $_GET[ QueryVar::NOAMP ] ) && QueryVar::NOAMP_AVAILABLE === $_GET[ QueryVar::NOAMP ] ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended
	) {
		return false;
	}

	$queried_object = get_queried_object();
	if ( ! $is_legacy ) {
		// Abort if in Transitional mode and AMP is not available for the URL.
		$availability = AMP_Theme_Support::get_template_availability( $wp_query );

		if ( ! $availability['supported'] ) {
			return false;
		}

		// If not in an AMP-first mode, check if there are any validation errors with kept invalid markup for this URL.
		// And if so, and if the user cannot do validation (since they can always get fresh validation results), then
		// AMP is not available.
		if ( ! amp_is_canonical() && ! AMP_Validation_Manager::has_cap() ) {
			$validation_errors = AMP_Validated_URL_Post_Type::get_invalid_url_validation_errors(
				amp_get_current_url(),
				[ 'ignore_accepted' => true ]
			);
			if ( count( $validation_errors ) > 0 ) {
				return false;
			}
		}
	} elseif ( ! (
		$queried_object instanceof WP_Post &&
		( $wp_query->is_singular() || $wp_query->is_posts_page ) &&
		amp_is_post_supported( $queried_object ) )
	) {
		// Abort if in legacy Reader mode and the post doesn't support AMP.
		return false;
	}

	return true;
}

/**
 * Bootstraps the AMP customizer.
 *
 * Uses the priority of 12 for the 'after_setup_theme' action.
 * Many themes run `add_theme_support()` on the 'after_setup_theme' hook, at the default priority of 10.
 * And that function's documentation suggests adding it to that action.
 * So this enables themes to `add_theme_support( AMP_Theme_Support::SLUG )`.
 * And `amp_init_customizer()` will be able to recognize theme support by calling `amp_is_canonical()`.
 *
 * @since 0.4
 * @internal
 */
function _amp_bootstrap_customizer() {
	add_action( 'after_setup_theme', 'amp_init_customizer', 12 );
}

/**
 * Get the slug used in AMP for the query var, endpoint, and post type support.
 *
 * The return value can be overridden by previously defining a AMP_QUERY_VAR
 * constant or by adding a 'amp_query_var' filter, but *warning* this ability
 * may be deprecated in the future. Normally the slug should be just 'amp'.
 *
 * @since 0.7
 * @since 2.1 Added $ignore_late_defined_slug argument.
 *
 * @param bool $ignore_late_defined_slug Whether to ignore the late defined slug.
 * @return string Slug used for query var, endpoint, and post type support.
 */
function amp_get_slug( $ignore_late_defined_slug = false ) {

	// When a slug was defined late according to AmpSlugCustomizationWatcher, the slug will be stored in the
	// LATE_DEFINED_SLUG option by the PairedRouting service so that it can be used early. This is only needed until
	// the after_setup_theme action fires, because at that time the late-defined slug will have been established.
	if ( ! $ignore_late_defined_slug && ! did_action( AmpSlugCustomizationWatcher::LATE_DETERMINATION_ACTION ) ) {
		$slug = AMP_Options_Manager::get_option( Option::LATE_DEFINED_SLUG );
		if ( ! empty( $slug ) && is_string( $slug ) ) {
			return $slug;
		}
	}

	/**
	 * Filter the AMP query variable.
	 *
	 * Warning: This filter may become deprecated.
	 *
	 * @since 0.3.2
	 *
	 * @param string $query_var The AMP query variable.
	 */
	return apply_filters( 'amp_query_var', defined( 'AMP_QUERY_VAR' ) ? AMP_QUERY_VAR : QueryVar::AMP );
}

/**
 * Get the URL for the current request.
 *
 * This is essentially the REQUEST_URI prefixed by the scheme and host for the home URL.
 * This is needed in particular due to subdirectory installs.
 *
 * @since 1.0
 * @internal
 *
 * @return string Current URL.
 */
function amp_get_current_url() {
	$parsed_url = wp_parse_url( home_url() );

	if ( ! is_array( $parsed_url ) ) {
		$parsed_url = [];
	}

	if ( empty( $parsed_url['scheme'] ) ) {
		$parsed_url['scheme'] = is_ssl() ? 'https' : 'http';
	}
	if ( ! isset( $parsed_url['host'] ) ) {
		// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
		$parsed_url['host'] = isset( $_SERVER['HTTP_HOST'] ) ? wp_unslash( $_SERVER['HTTP_HOST'] ) : 'localhost';
	}

	$current_url = $parsed_url['scheme'] . '://';
	if ( isset( $parsed_url['user'] ) ) {
		$current_url .= $parsed_url['user'];
		if ( isset( $parsed_url['pass'] ) ) {
			$current_url .= ':' . $parsed_url['pass'];
		}
		$current_url .= '@';
	}
	$current_url .= $parsed_url['host'];
	if ( isset( $parsed_url['port'] ) ) {
		$current_url .= ':' . $parsed_url['port'];
	}
	$current_url .= '/';

	if ( isset( $_SERVER['REQUEST_URI'] ) ) {
		// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
		$current_url .= ltrim( wp_unslash( $_SERVER['REQUEST_URI'] ), '/' );
	}
	return esc_url_raw( $current_url );
}

/**
 * Retrieves the full AMP-specific permalink for the given post ID.
 *
 * On a site in Standard mode, this is the same as `get_permalink()`.
 *
 * @since 0.1
 *
 * @param int $post_id Post ID.
 * @return string AMP permalink.
 */
function amp_get_permalink( $post_id ) {
	if ( amp_is_canonical() ) {
		return get_permalink( $post_id );
	}
	return amp_add_paired_endpoint( get_permalink( $post_id ) );
}

/**
 * Remove the AMP endpoint (and query var) from a given URL.
 *
 * @since 0.7
 * @since 2.1 Deprecated.
 * @deprecated Use amp_remove_paired_endpoint() instead.
 *
 * @param string $url URL.
 * @return string URL with AMP stripped.
 */
function amp_remove_endpoint( $url ) {
	return amp_remove_paired_endpoint( $url );
}

/**
 * Add amphtml link.
 *
 * If there are known validation errors for the current URL then do not output anything.
 *
 * @since 1.0
 */
function amp_add_amphtml_link() {
	if (
		amp_is_canonical()
		||
		/**
		 * Filters whether to show the amphtml link on the frontend.
		 *
		 * This is deprecated since the name was wrong and the use case is not clear. To remove this from being printed,
		 * instead of using the filter you can rather do:
		 *
		 *     add_action( 'template_redirect', static function () {
		 *         remove_action( 'wp_head', 'amp_add_amphtml_link' );
		 *     } );
		 *
		 * @since 0.2
		 * @deprecated Remove amp_add_amphtml_link() call on wp_head action instead.
		 */
		false === apply_filters_deprecated(
			'amp_frontend_show_canonical',
			[ true ],
			'2.0',
			'',
			sprintf(
				/* translators: 1: amphtml, 2: amp_add_amphtml_link(), 3: wp_head, 4: template_redirect */
				esc_html__( 'Removal of %1$s link should be done by removing %2$s from the %3$s action at %4$s.', 'amp' ),
				'amphtml',
				__FUNCTION__ . '()',
				'wp_head',
				'template_redirect'
			)
		)
	) {
		return;
	}

	if ( ! amp_is_available() ) {
		printf( '<!-- %s -->', esc_html__( 'There is no amphtml version available for this URL.', 'amp' ) );
		return;
	}

	$amp_url = amp_add_paired_endpoint( amp_get_current_url() );

	if ( $amp_url ) {
		$amp_url          = remove_query_arg( QueryVar::NOAMP, $amp_url );
		$sandboxing_level = amp_get_sandboxing_level();

		if ( 0 === $sandboxing_level || 3 === $sandboxing_level ) {
			printf( '<link rel="amphtml" href="%s">', esc_url( $amp_url ) );
		}
	}
}

/**
 * Determine whether a given post supports AMP.
 *
 * @since 2.0 Formerly known as post_supports_amp().
 * @see AMP_Post_Type_Support::get_support_errors()
 *
 * @param WP_Post|int $post Post.
 * @return bool Whether the post supports AMP.
 */
function amp_is_post_supported( $post ) {
	return 0 === count( AMP_Post_Type_Support::get_support_errors( $post ) );
}

/**
 * Determine whether a given post supports AMP.
 *
 * @since 0.1
 * @since 0.6 Returns false when post has meta to disable AMP.
 * @since 2.0 Renamed to AMP-prefixed version, amp_is_post_supported().
 * @deprecated Use amp_is_post_supported() instead.
 *
 * @param WP_Post $post Post.
 * @return bool Whether the post supports AMP.
 */
function post_supports_amp( $post ) {
	return amp_is_post_supported( $post );
}

/**
 * Determine whether the current request is for an AMP page.
 *
 * This function cannot be called before the parse_query action because it needs to be able
 * to determine the queried object is able to be served as AMP. If 'amp' theme support is not
 * present, this function returns true just if the query var is present. If theme support is
 * present, then it returns true in transitional mode if an AMP template is available and the query
 * var is present, or else in standard mode if just the template is available.
 *
 * @since 2.0 Formerly known as is_amp_endpoint().
 *
 * @return bool Whether it is the AMP endpoint.
 * @global WP_Query $wp_query
 */
function amp_is_request() {
	global $wp_query;

	$is_amp_url = (
		amp_is_canonical()
		||
		amp_has_paired_endpoint()
	);

	// If AMP is not available, then it's definitely not an AMP endpoint.
	if ( ! amp_is_available() ) {
		// But, if WP_Query was not available yet, then we will just assume the query is supported since at this point we do
		// know either that the site is in Standard mode or the URL was requested with the AMP query var. This can still
		// produce an undesired result when a Standard mode site has a post that opts out of AMP, but this issue will
		// have been flagged via _doing_it_wrong() in amp_is_available() above.
		if ( ! did_action( 'wp' ) || ! $wp_query instanceof WP_Query ) {
			return $is_amp_url && AMP_Options_Manager::get_option( Option::ALL_TEMPLATES_SUPPORTED );
		}

		return false;
	}

	return $is_amp_url;
}

/**
 * Determine whether the current response being served as AMP.
 *
 * This function cannot be called before the parse_query action because it needs to be able
 * to determine the queried object is able to be served as AMP. If 'amp' theme support is not
 * present, this function returns true just if the query var is present. If theme support is
 * present, then it returns true in transitional mode if an AMP template is available and the query
 * var is present, or else in standard mode if just the template is available.
 *
 * @since 0.1
 * @since 2.0 Renamed to AMP-prefixed version, amp_is_request().
 * @deprecated Use amp_is_request() instead.
 *
 * @return bool Whether it is the AMP endpoint.
 */
function is_amp_endpoint() {
	return amp_is_request();
}

/**
 * Get AMP asset URL.
 *
 * @since 0.1
 * @internal
 *
 * @param string $file Relative path to file in assets directory.
 * @return string URL.
 */
function amp_get_asset_url( $file ) {
	return plugins_url( sprintf( 'assets/%s', $file ), AMP__FILE__ );
}

/**
 * Get AMP boilerplate code.
 *
 * @since 0.7
 * @internal
 * @link https://www.ampproject.org/docs/reference/spec#boilerplate
 *
 * @return string Boilerplate code.
 */
function amp_get_boilerplate_code() {
	$stylesheets = amp_get_boilerplate_stylesheets();
	return sprintf( '<style amp-boilerplate>%s</style><noscript><style amp-boilerplate>%s</style></noscript>', $stylesheets[0], $stylesheets[1] );
}

/**
 * Get AMP boilerplate stylesheets.
 *
 * @since 1.3
 * @internal
 * @link https://www.ampproject.org/docs/reference/spec#boilerplate
 *
 * @return string[] Stylesheets, where first is contained in style[amp-boilerplate] and the second in noscript>style[amp-boilerplate].
 */
function amp_get_boilerplate_stylesheets() {
	return [
		'body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}',
		'body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}',
	];
}

/**
 * Add generator metadata.
 *
 * @since 0.6
 * @since 1.0 Add template mode.
 * @since 2.0 Add reader theme.
 * @internal
 */
function amp_add_generator_metadata() {
	$template_mode = AMP_Options_Manager::get_option( Option::THEME_SUPPORT );
	$reader_theme  = AMP_Options_Manager::get_option( Option::READER_THEME );

	// Account for case where the active theme has been switched to be the same as the reader theme.
	// In this case, the behavior of the plugin is the same as transitional mode.
	if (
		AMP_Theme_Support::READER_MODE_SLUG === $template_mode
		&&
		get_stylesheet() === $reader_theme
		&&
		! Services::get( 'reader_theme_loader' )->is_enabled()
	) {
		$template_mode = AMP_Theme_Support::TRANSITIONAL_MODE_SLUG;
	}

	$content  = sprintf( 'AMP Plugin v%s', AMP__VERSION );
	$content .= sprintf( '; mode=%s', $template_mode );
	if ( AMP_Theme_Support::READER_MODE_SLUG === $template_mode ) {
		$content .= sprintf( '; theme=%s', $reader_theme );
	}

	printf( '<meta name="generator" content="%s">', esc_attr( $content ) );
}

/**
 * Register default scripts for AMP components.
 *
 * @internal
 *
 * @param WP_Scripts $wp_scripts Scripts.
 */
function amp_register_default_scripts( $wp_scripts ) {
	// AMP Runtime.
	$handle = 'amp-runtime';
	$wp_scripts->add(
		$handle,
		'https://cdn.ampproject.org/v0.js',
		[],
		null
	);
	$wp_scripts->add_data(
		$handle,
		'amp_script_attributes',
		[
			'async' => true,
		]
	);

	// Shadow AMP API.
	$handle = 'amp-shadow';
	$wp_scripts->add(
		$handle,
		'https://cdn.ampproject.org/shadow-v0.js',
		[],
		null
	);
	$wp_scripts->add_data(
		$handle,
		'amp_script_attributes',
		[
			'async' => true,
		]
	);

	// Register all AMP components as defined in the spec.
	$extension_specs = AMP_Allowed_Tags_Generated::get_extension_specs();
	if ( isset( $extension_specs['amp-carousel'] ) && '0.1' === $extension_specs['amp-carousel']['latest'] ) {
		/*
		 * The latestVersion of amp-carousel is 0.1 in https://github.com/ampproject/amphtml/blob/main/build-system/compile/bundles.config.extensions.json
		 * But we have been using 0.2 since https://github.com/ampproject/amp-wp/pull/3115
		 * Therefore, we override the latest version to also be 0.2 since it has been shown to be stable.
		 */
		$extension_specs['amp-carousel']['latest'] = '0.2';
	}

	foreach ( $extension_specs as $extension_name => $extension_spec ) {
		$version = $extension_spec['latest'];

		// Skip registering the amp-gfycat extension, as gfycat have been sunset.
		// @TODO: Remove this once the amp-gfycat extension is removed from spec.
		if ( 'amp-gfycat' === $extension_name ) {
			continue;
		}

		$src = sprintf(
			'https://cdn.ampproject.org/v0/%s-%s.js',
			$extension_name,
			$version
		);

		$wp_scripts->add(
			$extension_name,
			$src,
			[ 'amp-runtime' ],
			null
		);
	}
}

/**
 * Register default styles.
 *
 * @since 2.0
 * @internal
 *
 * @param WP_Styles $styles Styles.
 */
function amp_register_default_styles( WP_Styles $styles ) {
	$styles->add(
		'amp-default',
		amp_get_asset_url( 'css/amp-default.css' ),
		[],
		AMP__VERSION
	);
	$styles->add_data( 'amp-default', 'rtl', 'replace' );

	$styles->add(
		'amp-icons',
		amp_get_asset_url( 'css/amp-icons.css' ),
		[ 'dashicons' ],
		AMP__VERSION
	);
	$styles->add_data( 'amp-icons', 'rtl', 'replace' );
}

/**
 * Generate HTML for AMP scripts that have not yet been printed.
 *
 * This is adapted from `wp_scripts()->do_items()`, but it runs only the bare minimum required to output
 * the missing scripts, without allowing other filters to apply which may cause an invalid AMP response.
 * The HTML for the scripts is returned instead of being printed.
 *
 * @since 0.7.2
 * @see WP_Scripts::do_items()
 * @see AMP_Base_Embed_Handler::get_scripts()
 * @see AMP_Base_Sanitizer::get_scripts()
 * @internal
 *
 * @param array $scripts Script handles mapped to URLs or true.
 * @return string HTML for scripts tags that have not yet been done.
 */
function amp_render_scripts( $scripts ) {
	$script_tags = '';

	/*
	 * Make sure the src is up to date. This allows for embed handlers to override the
	 * default extension version by defining a different URL.
	 */
	foreach ( $scripts as $handle => $src ) {
		if ( is_string( $src ) && wp_script_is( $handle, 'registered' ) ) {
			wp_scripts()->registered[ $handle ]->src = $src;
		}
	}

	foreach ( array_diff( array_keys( $scripts ), wp_scripts()->done ) as $handle ) {
		if ( ! wp_script_is( $handle, 'registered' ) ) {
			continue;
		}

		$script_dep   = wp_scripts()->registered[ $handle ];
		$script_tags .= amp_filter_script_loader_tag(
			sprintf(
				"<script type='text/javascript' src='%s'></script>\n", // phpcs:ignore WordPress.WP.EnqueuedResources.NonEnqueuedScript
				esc_url( $script_dep->src )
			),
			$handle
		);

		wp_scripts()->done[] = $handle;
	}
	return $script_tags;
}

/**
 * Add AMP script attributes to enqueued scripts.
 *
 * @link https://core.trac.wordpress.org/ticket/12009
 * @since 0.7
 * @internal
 *
 * @param string $tag    The script tag.
 * @param string $handle The script handle.
 * @return string Script loader tag.
 */
function amp_filter_script_loader_tag( $tag, $handle ) {
	$prefix = 'https://cdn.ampproject.org/';
	$src    = wp_scripts()->registered[ $handle ]->src;
	if ( 0 !== strpos( $src, $prefix ) ) {
		return $tag;
	}

	/*
	 * All scripts from AMP CDN should be loaded async.
	 * See <https://www.ampproject.org/docs/integration/pwa-amp/amp-in-pwa#include-"shadow-amp"-in-your-progressive-web-app>.
	 */
	$attributes = [
		'async' => true,
	];

	// Add custom-template and custom-element attributes. All component scripts look like https://cdn.ampproject.org/v0/:name-:version.js.
	if ( 'v0' === strtok( substr( $src, strlen( $prefix ) ), '/' ) ) {
		/*
		 * Per the spec, "Most extensions are custom-elements." In fact, there is only one custom template. So we hard-code it here.
		 *
		 * This could also be derived by looking at the extension_type in the extension_spec.
		 *
		 * @link https://github.com/ampproject/amphtml/blob/cd685d4e62153557519553ffa2183aedf8c93d62/validator/validator.proto#L326-L328
		 * @link https://github.com/ampproject/amphtml/blob/cd685d4e62153557519553ffa2183aedf8c93d62/extensions/amp-mustache/validator-amp-mustache.protoascii#L27
		 */
		if ( 'amp-mustache' === $handle ) {
			$attributes['custom-template'] = $handle;
		} else {
			$attributes['custom-element'] = $handle;
		}
	}

	// Add each attribute (if it hasn't already been added).
	foreach ( $attributes as $key => $value ) {
		if ( ! preg_match( ":\s$key(=|>|\s):", $tag ) ) {
			if ( true === $value ) {
				$attribute_string = sprintf( ' %s', esc_attr( $key ) );
			} else {
				$attribute_string = sprintf( ' %s="%s"', esc_attr( $key ), esc_attr( $value ) );
			}
			$tag = preg_replace(
				':(?=></script>):',
				$attribute_string,
				$tag,
				1
			);
		}
	}

	return $tag;
}

/**
 * Ensure ID attribute is added to printed scripts.
 *
 * Core started adding the ID attribute in WP 5.5. This attribute is used both by validation logic for sourcing
 * attribution as well as in the script and comments sanitizers.
 *
 * @link https://core.trac.wordpress.org/changeset/48295
 * @since 2.2
 * @internal
 *
 * @param string $tag    The script tag for the enqueued script.
 * @param string $handle The script's registered handle.
 * @return string Filtered script.
 */
function amp_ensure_id_attribute_on_script_loader_tag( $tag, $handle ) {
	$tag = preg_replace_callback(
		'/(<script[^>]*?\ssrc=(["\']).*?\2)([^>]*?>)/',
		static function ( $matches ) use ( $handle ) {
			if ( false === strpos( $matches[0], 'id=' ) ) {
				return $matches[1] . sprintf( ' id="%s"', esc_attr( "$handle-js" ) ) . $matches[3];
			}
			return $matches[0];
		},
		$tag,
		1
	);
	return $tag;
}

/**
 * Explicitly opt-in to CORS mode by adding the crossorigin attribute to font stylesheet links.
 *
 * This explicitly triggers a CORS request, and gets back a non-opaque response, ensuring that a service
 * worker caching the external stylesheet will not inflate the storage quota. This must be done in AMP
 * and non-AMP alike because in transitional mode the service worker could cache the font stylesheets in a
 * non-AMP document without CORS (crossorigin="anonymous") in which case the service worker could then
 * fail to serve the cached font resources in an AMP document with the warning:
 *
 * > The FetchEvent resulted in a network error response: an "opaque" response was used for a request whose type is not no-cors
 *
 * @since 1.0
 * @link https://developers.google.com/web/tools/workbox/guides/storage-quota#beware_of_opaque_responses
 * @link https://developers.google.com/web/tools/workbox/guides/handle-third-party-requests#cross-origin_requests_and_opaque_responses
 * @todo This should be proposed for WordPress core.
 * @internal
 *
 * @param string $tag    Link tag HTML.
 * @param string $handle Dependency handle.
 * @param string $href   Link URL.
 * @return string Link tag HTML.
 */
function amp_filter_font_style_loader_tag_with_crossorigin_anonymous( $tag, $handle, $href ) {
	static $allowed_font_src_regex = null;
	if ( ! $allowed_font_src_regex ) {
		$spec_name = 'link rel=stylesheet for fonts'; // phpcs:ignore WordPress.WP.EnqueuedResources.NonEnqueuedStylesheet
		foreach ( AMP_Allowed_Tags_Generated::get_allowed_tag( 'link' ) as $spec_rule ) {
			if ( isset( $spec_rule[ AMP_Rule_Spec::TAG_SPEC ]['spec_name'] ) && $spec_name === $spec_rule[ AMP_Rule_Spec::TAG_SPEC ]['spec_name'] ) {
				$allowed_font_src_regex = '@^(' . $spec_rule[ AMP_Rule_Spec::ATTR_SPEC_LIST ]['href']['value_regex'] . ')$@';
				break;
			}
		}
	}

	$href = preg_replace( '#^(http:)?(?=//)#', 'https:', $href );

	if ( preg_match( $allowed_font_src_regex, $href ) && false === strpos( $tag, 'crossorigin=' ) ) {
		$tag = preg_replace( '/(?<=<link\s)/', 'crossorigin="anonymous" ', $tag );
	}

	return $tag;
}

/**
 * Retrieve analytics data added in backend.
 *
 * @since 0.7
 * @internal
 *
 * @param array $analytics Analytics entries.
 * @return array Analytics.
 */
function amp_get_analytics( $analytics = [] ) {
	$analytics_entries = AMP_Options_Manager::get_option( Option::ANALYTICS, [] );

	/**
	 * Add amp-analytics tags.
	 *
	 * This filter allows you to easily insert any amp-analytics tags without needing much heavy lifting.
	 * This filter should be used to alter entries for transitional mode.
	 *
	 * @since 0.7
	 *
	 * @param array $analytics_entries An associative array of the analytics entries we want to output. Each array entry must have a unique key, and the value should be an array with the following keys: `type`, `attributes`, `config_data`. See readme for more details.
	 */
	$analytics_entries = apply_filters( 'amp_analytics_entries', $analytics_entries );

	if ( ! $analytics_entries ) {
		return $analytics;
	}

	foreach ( $analytics_entries as $entry_id => $entry ) {
		if ( ! isset( $entry['attributes'] ) ) {
			$entry['attributes'] = [];
		}
		if ( ! isset( $entry['config_data'] ) && isset( $entry['config'] ) && is_string( $entry['config'] ) ) {
			$entry['config_data'] = json_decode( $entry['config'] );
		}
		$analytics[ $entry_id ] = $entry;
	}

	return $analytics;
}

/**
 * Print analytics data.
 *
 * @since 0.7
 * @internal
 *
 * @param array|string $analytics Analytics entries, or empty string when called via wp_footer action.
 */
function amp_print_analytics( $analytics ) {
	if ( '' === $analytics ) {
		$analytics = [];
	}

	$analytics_entries = amp_get_analytics( $analytics );

	/**
	 * Triggers before analytics entries are printed as amp-analytics tags.
	 *
	 * This is useful for printing additional `amp-analytics` tags to the page without having to refactor any existing
	 * markup generation logic to use the data structure mutated by the `amp_analytics_entries` filter. For such cases,
	 * this action should be used for printing `amp-analytics` tags as opposed to using the `wp_footer` and
	 * `amp_post_template_footer` actions.
	 *
	 * @since 1.3
	 * @param array $analytics_entries Analytics entries, already potentially modified by the amp_analytics_entries filter.
	 */
	do_action( 'amp_print_analytics', $analytics_entries );

	if ( empty( $analytics_entries ) ) {
		return;
	}

	// Can enter multiple configs within backend.
	foreach ( $analytics_entries as $id => $analytics_entry ) {
		if ( ! isset( $analytics_entry['attributes'], $analytics_entry['config_data'] ) ) {
			_doing_it_wrong(
				__FUNCTION__,
				sprintf(
					/* translators: 1: the analytics entry ID. 2: type. 3: attributes. 4: config_data. 5: comma-separated list of the actual entry keys. */
					esc_html__( 'Analytics entry for %1$s is missing one of the following keys: `%2$s` or `%3$s` (array keys: %4$s)', 'amp' ),
					esc_html( $id ),
					'attributes',
					'config_data',
					esc_html( implode( ', ', array_keys( $analytics_entry ) ) )
				),
				'0.3.2'
			);
			continue;
		}
		$script_element = AMP_HTML_Utils::build_tag(
			'script',
			[
				'type' => 'application/json',
			],
			wp_json_encode( $analytics_entry['config_data'] )
		);

		$amp_analytics_attr = array_merge(
			compact( 'id' ),
			$analytics_entry['attributes']
		);

		if ( ! empty( $analytics_entry['type'] ) ) {
			$amp_analytics_attr['type'] = $analytics_entry['type'];
		}

		echo AMP_HTML_Utils::build_tag( 'amp-analytics', $amp_analytics_attr, $script_element ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
	}
}

/**
 * Get content embed handlers.
 *
 * @since 0.7
 * @internal
 *
 * @param WP_Post $post Post that the content belongs to. Deprecated when theme supports AMP, as embeds may apply
 *                      to non-post data (e.g. Text widget).
 * @return array Embed handlers.
 */
function amp_get_content_embed_handlers( $post = null ) {
	if ( ! amp_is_legacy() && $post ) {
		_deprecated_argument(
			__FUNCTION__,
			'0.7',
			sprintf(
				/* translators: %s: $post */
				esc_html__( 'The %s argument is deprecated when theme supports AMP.', 'amp' ),
				'$post'
			)
		);
		$post = null;
	}

	/**
	 * Filters the content embed handlers.
	 *
	 * @since 0.2
	 * @since 0.7 Deprecated $post parameter.
	 *
	 * @param array   $handlers Handlers.
	 * @param WP_Post $post     Post. Deprecated. It will be null when `amp_is_canonical()`.
	 */
	return apply_filters(
		'amp_content_embed_handlers',
		[
			AMP_Core_Block_Handler::class         => [],
			AMP_Twitter_Embed_Handler::class      => [],
			AMP_YouTube_Embed_Handler::class      => [],
			AMP_Crowdsignal_Embed_Handler::class  => [],
			AMP_DailyMotion_Embed_Handler::class  => [],
			AMP_Vimeo_Embed_Handler::class        => [],
			AMP_SoundCloud_Embed_Handler::class   => [],
			AMP_Instagram_Embed_Handler::class    => [],
			AMP_Issuu_Embed_Handler::class        => [],
			AMP_Meetup_Embed_Handler::class       => [],
			AMP_Facebook_Embed_Handler::class     => [],
			AMP_Pinterest_Embed_Handler::class    => [],
			AMP_Playlist_Embed_Handler::class     => [],
			AMP_Reddit_Embed_Handler::class       => [],
			AMP_TikTok_Embed_Handler::class       => [],
			AMP_Tumblr_Embed_Handler::class       => [],
			AMP_Gallery_Embed_Handler::class      => [],
			AMP_Imgur_Embed_Handler::class        => [],
			AMP_Scribd_Embed_Handler::class       => [],
			AMP_WordPress_Embed_Handler::class    => [],
			AMP_WordPress_TV_Embed_Handler::class => [],
		],
		$post
	);
}

/**
 * Determine whether AMP dev mode is enabled.
 *
 * When enabled, the `<html>` element will get the data-ampdevmode attribute and the plugin will add the same attribute
 * to elements associated with the admin bar and other elements that are provided by the `amp_dev_mode_element_xpaths`
 * filter.
 *
 * @since 1.3
 *
 * @return bool Whether AMP dev mode is enabled.
 */
function amp_is_dev_mode() {

	/**
	 * Filters whether AMP mode is enabled.
	 *
	 * When enabled, the data-ampdevmode attribute will be added to the document element and it will allow the
	 * attributes to be added to the admin bar. It will also add the attribute to all elements which match the
	 * queries for the expressions returned by the 'amp_dev_mode_element_xpaths' filter.
	 *
	 * @since 1.3
	 * @param bool $is_dev_mode_enabled Whether AMP dev mode is enabled.
	 */
	return apply_filters(
		'amp_dev_mode_enabled',
		(
			// For the few sites that forcibly show the admin bar even when the user is logged out, only enable dev
			// mode if the user is actually logged in. This prevents the dev mode from being served to crawlers
			// when they index the AMP version. The theme support check disables dev mode in Reader mode.
			( is_admin_bar_showing() && is_user_logged_in() )
			||
			is_customize_preview()
			||
			(
				! is_ssl()
				&&
				function_exists( 'wp_get_environment_type' )
				&&
				'local' === wp_get_environment_type()
				&&
				'localhost' === wp_parse_url( home_url(), PHP_URL_HOST )
			)
		)
	);
}

/**
 * Determine whether native `img` should be used instead of converting to `amp-img`.
 *
 * @since 2.2
 *
 * @return bool Whether to use `img`.
 */
function amp_is_native_img_used() {
	$use_native_img_tag = AMP_Options_Manager::get_option( Option::USE_NATIVE_IMG_TAG );

	/**
	 * Filters whether to use the native `img` element rather than convert to `amp-img`.
	 *
	 * This filter is a feature flag to opt-in to discontinue using `amp-img` (and `amp-anim`) which will be deprecated
	 * in AMP in the near future. Once this lands in AMP, this filter will switch to defaulting to true instead of false.
	 *
	 * @since 2.2
	 * @link https://github.com/ampproject/amphtml/issues/30442
	 *
	 * @param bool $use_native Whether to use `img`.
	 */
	return (bool) apply_filters( 'amp_native_img_used', $use_native_img_tag );
}

/**
 * Get content sanitizers.
 *
 * @since 0.7
 * @since 1.1 Added AMP_Nav_Menu_Toggle_Sanitizer and AMP_Nav_Menu_Dropdown_Sanitizer.
 * @internal
 *
 * @param WP_Post $post Post that the content belongs to. Deprecated when theme supports AMP, as sanitizers apply
 *                      to non-post data (e.g. Text widget).
 * @return array Embed handlers.
 */
function amp_get_content_sanitizers( $post = null ) {
	$theme_support_args = AMP_Theme_Support::get_theme_support_args();

	if ( $post && ! amp_is_legacy() ) {
		_deprecated_argument(
			__FUNCTION__,
			'0.7',
			sprintf(
				/* translators: %s: $post */
				esc_html__( 'The %s argument is deprecated.', 'amp' ),
				'$post'
			)
		);
		$post = null;
	}

	$parsed_home_url = wp_parse_url( get_home_url() );
	$current_origin  = $parsed_home_url['scheme'] . '://' . $parsed_home_url['host'];
	if ( isset( $parsed_home_url['port'] ) ) {
		$current_origin .= ':' . $parsed_home_url['port'];
	}

	/**
	 * Filters whether AMP-to-AMP linking should be enabled.
	 *
	 * @since 1.4.0
	 * @param bool $amp_to_amp_linking_enabled Whether AMP-to-AMP linking should be enabled.
	 */
	$amp_to_amp_linking_enabled = (bool) apply_filters(
		'amp_to_amp_linking_enabled',
		AMP_Theme_Support::TRANSITIONAL_MODE_SLUG === AMP_Options_Manager::get_option( Option::THEME_SUPPORT )
	);

	$is_dev_mode     = amp_is_dev_mode();
	$native_img_used = amp_is_native_img_used();

	$sanitizers = [
		// Embed sanitization must come first because it strips out custom scripts associated with embeds.
		AMP_Embed_Sanitizer::class                 => [
			'amp_to_amp_linking_enabled' => $amp_to_amp_linking_enabled,
		],
		AMP_O2_Player_Sanitizer::class             => [],
		AMP_Playbuzz_Sanitizer::class              => [],
		AMP_Core_Theme_Sanitizer::class            => [
			'template'        => get_template(),
			'stylesheet'      => get_stylesheet(),
			'theme_features'  => [
				'force_svg_support' => [], // Always replace 'no-svg' class with 'svg' if it exists.
			],
			'native_img_used' => $native_img_used,
		],

		AMP_Comments_Sanitizer::class              => [
			'comments_live_list' => ! empty( $theme_support_args['comments_live_list'] ),
		],

		// The AMP_PWA_Script_Sanitizer run before AMP_Script_Sanitizer, to prevent the script tags
		// from getting removed in PWA plugin offline/500 templates.
		AMP_PWA_Script_Sanitizer::class            => [],

		// The AMP_GTag_Script_Sanitizer runs before AMP_Script_Sanitizer to mark the the Google Analytics script tags as being PX-verified.
		AMP_GTag_Script_Sanitizer::class           => [],

		// The AMP_Script_Sanitizer runs here because based on whether it allows custom scripts
		// to be kept, it may impact the behavior of other sanitizers. For example, if custom
		// scripts are kept then this is a signal that tree shaking in AMP_Style_Sanitizer cannot be
		// performed.
		AMP_Script_Sanitizer::class                => [],

		AMP_Srcset_Sanitizer::class                => [],
		AMP_Img_Sanitizer::class                   => [
			'align_wide_support' => current_theme_supports( 'align-wide' ),
			'native_img_used'    => $native_img_used,
		],
		AMP_Form_Sanitizer::class                  => [],
		AMP_Video_Sanitizer::class                 => [],
		AMP_Audio_Sanitizer::class                 => [],
		AMP_Object_Sanitizer::class                => [],
		AMP_Iframe_Sanitizer::class                => [
			'add_placeholder'    => true,
			'current_origin'     => $current_origin,
			'align_wide_support' => current_theme_supports( 'align-wide' ),
		],
		AMP_Gallery_Block_Sanitizer::class         => [ // Note: Gallery block sanitizer must come after image sanitizers since itś logic is using the already sanitized images.
			'carousel_required' => ! is_array( $theme_support_args ), // For back-compat.
			'native_img_used'   => $native_img_used,
		],
		AMP_Native_Img_Attributes_Sanitizer::class => [ // Note: Native img attributes sanitizer must come after image sanitizers since its logic is sanitizing the already sanitized images attributes.
			'native_img_used' => $native_img_used,
		],
		AMP_Block_Sanitizer::class                 => [], // Note: Block sanitizer must come after embed / media sanitizers since its logic is using the already sanitized content.
		AMP_Style_Sanitizer::class                 => [
			'skip_tree_shaking'   => is_customize_preview(),
			'allow_excessive_css' => is_customize_preview(),
		],
		AMP_Meta_Sanitizer::class                  => [],
		AMP_Layout_Sanitizer::class                => [],
		AMP_Accessibility_Sanitizer::class         => [],
		// Note: This validating sanitizer must come at the end to clean up any remaining issues the other sanitizers didn't catch.
		AMP_Tag_And_Attribute_Sanitizer::class     => [
			'allow_localhost_http_protocol' => $is_dev_mode,
		],
	];

	if ( ! empty( $theme_support_args['nav_menu_toggle'] ) ) {
		$sanitizers[ AMP_Nav_Menu_Toggle_Sanitizer::class ] = $theme_support_args['nav_menu_toggle'];
	}

	if ( ! empty( $theme_support_args['nav_menu_dropdown'] ) ) {
		$sanitizers[ AMP_Nav_Menu_Dropdown_Sanitizer::class ] = $theme_support_args['nav_menu_dropdown'];
	}

	if ( $amp_to_amp_linking_enabled && AMP_Theme_Support::STANDARD_MODE_SLUG !== AMP_Options_Manager::get_option( Option::THEME_SUPPORT ) ) {

		/**
		 * Filters the list of URLs which are excluded from being included in AMP-to-AMP linking.
		 *
		 * This only applies when the amp_to_amp_linking_enabled filter returns true,
		 * which it does by default in Transitional mode. This filter can be used to opt-in
		 * when in Reader mode. This does not apply in Standard mode.
		 * Only frontend URLs on the frontend need be excluded, as all other URLs are never made into AMP links.
		 *
		 * @since 1.5.0
		 *
		 * @param string[] $excluded_urls The URLs to exclude from having AMP-to-AMP links.
		 */
		$excluded_urls = apply_filters( 'amp_to_amp_excluded_urls', [] );

		$sanitizers[ AMP_Link_Sanitizer::class ] = array_merge(
			[ 'paired' => ! amp_is_canonical() ],
			compact( 'excluded_urls' )
		);
	}

	/**
	 * Filters whether AMP auto-lightbox is disabled.
	 *
	 * When disabled, the data-amp-auto-lightbox-disable attribute is added to the body.
	 *
	 * @since 2.2.2
	 * @link https://github.com/ampproject/amphtml/blob/420bc3987f69f6d9cd36e31c013fc9eea4f1b245/docs/spec/auto-lightbox.md#disabling-treatment-explicitly
	 *
	 * @param bool $disabled Whether disabled.
	 */
	$is_auto_lightbox_disabled = apply_filters( 'amp_auto_lightbox_disabled', true );

	if ( $is_auto_lightbox_disabled ) {
		$sanitizers[ AMP_Auto_Lightbox_Disable_Sanitizer::class ] = [];
	}

	/**
	 * Filters the content sanitizers.
	 *
	 * @since 0.2
	 * @since 0.7 Deprecated $post parameter. It will be null when `amp_is_canonical()`.
	 *
	 * @param array   $handlers Handlers.
	 * @param WP_Post $post     Post. Deprecated.
	 */
	$sanitizers = apply_filters( 'amp_content_sanitizers', $sanitizers, $post );

	if ( $is_dev_mode ) {
		/**
		 * Filters the XPath queries for elements that should be enabled for dev mode.
		 *
		 * By supplying XPath queries to this filter, the data-ampdevmode attribute will automatically be added to the
		 * root HTML element as well as to any elements that match the expressions. The attribute is added to the
		 * elements prior to running any of the sanitizers.
		 *
		 * @since 1.3
		 * @param string[] $element_xpaths XPath element queries. Context is the root element.
		 */
		$dev_mode_xpaths = (array) apply_filters( 'amp_dev_mode_element_xpaths', [] );

		if ( is_admin_bar_showing() ) {
			$dev_mode_xpaths[] = '//*[ @id = "wpadminbar" ]';
			$dev_mode_xpaths[] = '//*[ @id = "wpadminbar" ]//*';
			$dev_mode_xpaths[] = '//style[ @id = "admin-bar-inline-css" ]';
		}

		if ( is_customize_preview() ) {
			// Scripts are always needed to inject changeset UUID.
			$dev_mode_xpaths[] = '//script[ @src ]';
			$dev_mode_xpaths[] = '//script[ not( @type ) or @type = "text/javascript" ]';

			// Style needed for Additional CSS to work as intended.
			$dev_mode_xpaths[] = '//style[ @id = "wp-custom-css" ]';

			// Styles needed for Colors customization.
			$dev_mode_xpaths[] = '//style[ @id = "custom-background-css" ]';
			$dev_mode_xpaths[] = '//style[ @id = "custom-theme-colors" ]';
		}

		// Mark the script output by wp_comment_form_unfiltered_html_nonce() as being in dev mode.
		if ( current_user_can( 'unfiltered_html' ) ) {
			$dev_mode_xpaths[] = '//script[ not( @src ) and preceding-sibling::input[ @name = "_wp_unfiltered_html_comment_disabled" ] and contains( text(), "_wp_unfiltered_html_comment_disabled" ) ]';
		}

		// Mark the script output by wp_post_preview_js() as being in dev mode.
		if ( is_preview() && get_queried_object() instanceof WP_Post ) {
			$dev_mode_xpaths[] = sprintf(
				'//script[ not( @src ) and contains( text(), "document.location.search" ) and contains( text(), "preview=true" ) and contains( text(), "unload" ) and contains( text(), "window.name" ) and contains( text(), "wp-preview-%d" ) ]',
				get_queried_object_id()
			);
		}

		// Mark the manifest output by PWA plugin as being in dev mode.
		if ( ! is_ssl() && 'localhost' === $parsed_home_url['host'] ) {
			$dev_mode_xpaths[] = '//link[@rel="manifest" and contains(@href, "web-app-manifest")]';
		}

		$sanitizers = array_merge(
			[
				AMP_Dev_Mode_Sanitizer::class => [
					'element_xpaths' => $dev_mode_xpaths,
				],
			],
			$sanitizers
		);
	}

	/**
	 * Filters whether parsed CSS is allowed to be cached in transients.
	 *
	 * When this is filtered to be false, parsed CSS will not be stored in transients. This is important when there is
	 * highly-variable CSS content in order to prevent filling up the wp_options table with an endless number of entries.
	 *
	 * @since 1.5.0
	 * @param bool $transient_caching_allowed Transient caching allowed.
	 */
	$sanitizers[ AMP_Style_Sanitizer::class ]['allow_transient_caching'] = apply_filters( 'amp_parsed_css_transient_caching_allowed', true );

	// Force core essential sanitizers to appear at the end at the end, with non-essential and third-party sanitizers appearing before.
	$expected_final_sanitizer_order = [
		AMP_Auto_Lightbox_Disable_Sanitizer::class,
		AMP_Core_Theme_Sanitizer::class, // Must come before script sanitizer since onclick attributes are removed.
		AMP_PWA_Script_Sanitizer::class, // Must come before script sanitizer since PWA offline page scripts are removed.
		AMP_GTag_Script_Sanitizer::class, // Must come before script sanitizer since gtag.js is removed.
		AMP_Script_Sanitizer::class, // Must come before sanitizers for images, videos, audios, comments, forms, and styles.
		AMP_Form_Sanitizer::class, // Must come before comments sanitizer.
		AMP_Comments_Sanitizer::class, // Also must come after the form sanitizer.
		AMP_Srcset_Sanitizer::class,
		AMP_Img_Sanitizer::class,
		AMP_Video_Sanitizer::class,
		AMP_Audio_Sanitizer::class,
		AMP_Object_Sanitizer::class,
		AMP_Iframe_Sanitizer::class,
		AMP_Gallery_Block_Sanitizer::class,
		AMP_Native_Img_Attributes_Sanitizer::class, // Must come after gallery block sanitizer since it sanitizes img attributes.
		AMP_Block_Sanitizer::class,
		AMP_Accessibility_Sanitizer::class,
		AMP_Layout_Sanitizer::class,
		AMP_Style_Sanitizer::class,
		AMP_Meta_Sanitizer::class,
		AMP_Tag_And_Attribute_Sanitizer::class,
	];
	foreach ( $expected_final_sanitizer_order as $class_name ) {
		if ( isset( $sanitizers[ $class_name ] ) ) {
			$sanitizer = $sanitizers[ $class_name ];
			unset( $sanitizers[ $class_name ] );
			$sanitizers[ $class_name ] = $sanitizer;
		}
	}

	return $sanitizers;
}

/**
 * Grabs featured image or the first attached image for the post.
 *
 * @since 0.7 This originally was located in the private method AMP_Post_Template::get_post_image_metadata().
 * @internal
 *
 * @param WP_Post|int $post Post or post ID.
 * @return array|false $post_image_meta Post image metadata, or false if not found.
 */
function amp_get_post_image_metadata( $post = null ) {
	$post = get_post( $post );
	if ( ! $post ) {
		return false;
	}

	$post_image_meta = null;
	$post_image_id   = false;

	if ( has_post_thumbnail( $post->ID ) ) {
		$post_image_id = get_post_thumbnail_id( $post->ID );
	} elseif ( ( 'attachment' === $post->post_type ) && wp_attachment_is( 'image', $post ) ) {
		$post_image_id = $post->ID;
	} else {
		$attached_image_ids = get_posts(
			[
				'post_parent'      => $post->ID,
				'post_type'        => 'attachment',
				'post_mime_type'   => 'image',
				'posts_per_page'   => 1,
				'orderby'          => 'menu_order',
				'order'            => 'ASC',
				'fields'           => 'ids',
				'suppress_filters' => false,
			]
		);

		if ( ! empty( $attached_image_ids ) ) {
			$post_image_id = array_shift( $attached_image_ids );
		}
	}

	if ( ! $post_image_id ) {
		return false;
	}

	$post_image_src = wp_get_attachment_image_src( $post_image_id, 'full' );

	if ( is_array( $post_image_src ) ) {
		$post_image_meta = [
			'@type'  => 'ImageObject',
			'url'    => $post_image_src[0],
			'width'  => $post_image_src[1],
			'height' => $post_image_src[2],
		];
	}

	return $post_image_meta;
}

/**
 * Get the publisher logo.
 *
 * The following guidelines apply to logos used for general AMP pages.
 *
 * "The logo should be a rectangle, not a square. The logo should fit in a 60x600px rectangle.,
 * and either be exactly 60px high (preferred), or exactly 600px wide. For example, 450x45px
 * would not be acceptable, even though it fits in the 600x60px rectangle."
 *
 * @since 1.2.1
 * @link https://developers.google.com/search/docs/data-types/article#logo-guidelines
 * @internal
 *
 * @return string Publisher logo image URL. WordPress logo if no site icon or custom logo defined, and no logo provided via 'amp_site_icon_url' filter.
 */
function amp_get_publisher_logo() {
	$logo_image_url = null;

	/*
	 * This should be 60x600px rectangle. It *can* be larger than this, contrary to the current documentation.
	 * Only minimum size and ratio matters. So height should be at least 60px and width a minimum of 200px.
	 * An aspect ratio between 200/60 (10/3) and 600:60 (10/1) should be used. A square image still be used,
	 * but it is not preferred; a landscape logo should be provided if possible.
	 */
	$logo_width  = 600;
	$logo_height = 60;

	// Use the Custom Logo if set.
	$custom_logo_id = get_theme_mod( 'custom_logo' );
	if ( has_custom_logo() && $custom_logo_id ) {
		$custom_logo_img = wp_get_attachment_image_src( $custom_logo_id, [ $logo_width, $logo_height ], false );
		if ( ! empty( $custom_logo_img[0] ) ) {
			$logo_image_url = $custom_logo_img[0];
		}
	}

	// Try Site Icon if a custom logo is not set.
	$site_icon_id = get_option( 'site_icon' );
	if ( empty( $logo_image_url ) && $site_icon_id ) {
		$site_icon_src = wp_get_attachment_image_src( $site_icon_id, [ $logo_width, $logo_height ], false );
		if ( ! empty( $site_icon_src ) ) {
			$logo_image_url = $site_icon_src[0];
		}
	}

	/**
	 * Filters the publisher logo URL in the schema.org data.
	 *
	 * Previously, this only filtered the Site Icon, as that was the only possible schema.org publisher logo.
	 * But the Custom Logo is now the preferred publisher logo, if it exists and its dimensions aren't too big.
	 *
	 * @since 0.3
	 *
	 * @param string $schema_img_url URL of the publisher logo, either the Custom Logo or the Site Icon.
	 */
	$logo_image_url = apply_filters( 'amp_site_icon_url', $logo_image_url );

	// Fallback to serving the WordPress logo.
	if ( empty( $logo_image_url ) ) {
		$logo_image_url = amp_get_asset_url( 'images/amp-page-fallback-wordpress-publisher-logo.png' );
	}

	return $logo_image_url;
}

/**
 * Get schema.org metadata for the current query.
 *
 * @since 0.7
 * @see AMP_Post_Template::build_post_data() Where the logic in this function originally existed.
 * @internal
 *
 * @return array $metadata All schema.org metadata for the post.
 */
function amp_get_schemaorg_metadata() {
	$metadata = [
		'@context'  => 'http://schema.org',
		'publisher' => [
			'@type' => 'Organization',
			'name'  => get_bloginfo( 'name' ),
		],
	];

	$publisher_logo = amp_get_publisher_logo();
	if ( $publisher_logo ) {
		$metadata['publisher']['logo'] = [
			'@type' => 'ImageObject',
			'url'   => $publisher_logo,
		];
	}

	$queried_object = get_queried_object();
	if ( $queried_object instanceof WP_Post ) {
		$date_published = mysql2date( 'c', $queried_object->post_date, false );
		$date_modified  = mysql2date( 'c', $queried_object->post_modified, false );

		$metadata = array_merge(
			$metadata,
			[
				'@type'            => is_page() ? 'WebPage' : 'BlogPosting',
				'mainEntityOfPage' => get_permalink(),
				'headline'         => get_the_title(),
				'datePublished'    => $date_published,
				'dateModified'     => $date_modified,
			]
		);

		$post_author = get_userdata( $queried_object->post_author );
		if ( $post_author ) {
			$metadata['author'] = [
				'@type' => 'Person',
				'name'  => html_entity_decode( $post_author->display_name, ENT_QUOTES, get_bloginfo( 'charset' ) ),
			];
		}

		$image_metadata = amp_get_post_image_metadata( $queried_object );
		if ( $image_metadata ) {
			$metadata['image'] = $image_metadata['url'];
		}

		/**
		 * Filters Schema.org metadata for a post.
		 *
		 * The 'post_template' in the filter name here is due to this filter originally being introduced in `AMP_Post_Template`.
		 * In general the `amp_schemaorg_metadata` filter should be used instead.
		 *
		 * @since 0.3
		 *
		 * @param array   $metadata       Metadata.
		 * @param WP_Post $queried_object Post.
		 */
		$metadata = apply_filters( 'amp_post_template_metadata', $metadata, $queried_object );
	} elseif ( is_archive() ) {
		$metadata['@type'] = 'CollectionPage';
	}

	/**
	 * Filters Schema.org metadata for a query.
	 *
	 * Check the the main query for the context for which metadata should be added.
	 *
	 * @since 0.7
	 *
	 * @param array   $metadata Metadata.
	 */
	$metadata = apply_filters( 'amp_schemaorg_metadata', $metadata );

	return $metadata;
}

/**
 * Output schema.org metadata.
 *
 * @since 0.7
 * @since 1.1 we pass `JSON_UNESCAPED_UNICODE` to `wp_json_encode`.
 * @see https://github.com/ampproject/amp-wp/issues/1969
 * @internal
 */
function amp_print_schemaorg_metadata() {
	$metadata = amp_get_schemaorg_metadata();
	if ( empty( $metadata ) ) {
		return;
	}
	?>
	<script type="application/ld+json"><?php echo wp_json_encode( $metadata, JSON_UNESCAPED_UNICODE ); ?></script>
	<?php
}

/**
 * Filters content and keeps only allowable HTML elements by amp-mustache.
 *
 * @see wp_kses()
 * @since 1.0
 * @internal
 *
 * @param string $markup Markup to sanitize.
 * @return string HTML markup with tags allowed by amp-mustache.
 */
function amp_wp_kses_mustache( $markup ) {
	$amp_mustache_allowed_html_tags = [ 'strong', 'b', 'em', 'i', 'u', 's', 'small', 'mark', 'del', 'ins', 'sup', 'sub' ];
	return wp_kses( $markup, array_fill_keys( $amp_mustache_allowed_html_tags, [] ) );
}

/**
 * Add "View AMP" admin bar item for Transitional/Reader mode.
 *
 * Note that when theme support is present (in Native/Transitional modes), the admin bar item will be further amended by
 * the `AMP_Validation_Manager::add_admin_bar_menu_items()` method.
 *
 * @see \AMP_Validation_Manager::add_admin_bar_menu_items()
 * @internal
 *
 * @param WP_Admin_Bar $wp_admin_bar Admin bar.
 */
function amp_add_admin_bar_view_link( $wp_admin_bar ) {
	if ( is_admin() || amp_is_canonical() || ! amp_is_available() ) {
		return;
	}

	$is_amp_request = amp_is_request();

	$current_url = remove_query_arg( array_merge( wp_removable_query_args(), [ QueryVar::NOAMP ] ), amp_get_current_url() );
	if ( $is_amp_request ) {
		$amp_url     = $current_url;
		$non_amp_url = amp_remove_paired_endpoint( $current_url );
	} else {
		$amp_url     = amp_add_paired_endpoint( $current_url );
		$non_amp_url = $current_url;
	}

	$icon = $is_amp_request ? Icon::logo() : Icon::link();
	$attr = [
		'id'    => 'amp-admin-bar-item-status-icon',
		'class' => 'ab-icon',
	];

	$non_amp_view_title = __( 'View non-AMP version', 'amp' );
	$amp_view_title     = __( 'View AMP version', 'amp' );

	$wp_admin_bar->add_node(
		[
			'id'    => 'amp',
			'title' => $icon->to_html( $attr ) . ' ' . esc_html__( 'AMP', 'amp' ),
			'href'  => esc_url( $is_amp_request ? $non_amp_url : $amp_url ),
			'meta'  => [
				'title' => esc_attr( $is_amp_request ? $non_amp_view_title : $amp_view_title ),
			],
		]
	);

	$wp_admin_bar->add_node(
		[
			'parent' => 'amp',
			'id'     => 'amp-view',
			'title'  => esc_html( $is_amp_request ? $non_amp_view_title : $amp_view_title ),
			'href'   => esc_url( $is_amp_request ? $non_amp_url : $amp_url ),
		]
	);

	// Make sure the Customizer opens with AMP enabled.
	$customize_node = $wp_admin_bar->get_node( 'customize' );
	if ( $customize_node && $is_amp_request && AMP_Theme_Support::READER_MODE_SLUG === AMP_Options_Manager::get_option( Option::THEME_SUPPORT ) ) {
		$args = get_object_vars( $customize_node );
		if ( amp_is_legacy() ) {
			$args['href'] = add_query_arg( 'autofocus[panel]', AMP_Template_Customizer::PANEL_ID, $args['href'] );
		} else {
			$args['href'] = add_query_arg( amp_get_slug(), '1', $args['href'] );
		}
		$wp_admin_bar->add_node( $args );
	}
}

/**
 * Generate hash for inline amp-script.
 *
 * The sha384 hash used by amp-script is represented not as hexadecimal but as base64url, which is defined in RFC 4648
 * under section 5, "Base 64 Encoding with URL and Filename Safe Alphabet". It is sometimes referred to as "web safe".
 *
 * @since 1.4.0
 * @link https://amp.dev/documentation/components/amp-script/#security-features
 * @link https://github.com/ampproject/amphtml/blob/e8707858895c2af25903af25d396e144e64690ba/extensions/amp-script/0.1/amp-script.js#L401-L425
 * @link https://github.com/ampproject/amphtml/blob/27b46b9c8c0fb3711a00376668d808f413d798ed/src/service/crypto-impl.js#L67-L124
 * @link https://github.com/ampproject/amphtml/blob/c4a663d0ba13d0488c6fe73c55dc8c971ac6ec0d/src/utils/base64.js#L52-L61
 * @link https://tools.ietf.org/html/rfc4648#section-5
 *
 * @param string $script Script.
 * @return string|null Script hash or null if the sha384 algorithm is not supported.
 */
function amp_generate_script_hash( $script ) {
	try {
		$sha384 = hash( 'sha384', $script, true );
	} catch ( ValueError $e ) {
		$sha384 = false;
	}
	if ( false === $sha384 ) {
		return null;
	}
	$hash = str_replace(
		[ '+', '/', '=' ],
		[ '-', '_', '.' ],
		base64_encode( $sha384 ) // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_encode
	);
	return 'sha384-' . $hash;
}

/**
 * Turn a given URL into a paired AMP URL.
 *
 * @since 2.1
 *
 * @param string $url URL.
 * @return string AMP URL.
 */
function amp_add_paired_endpoint( $url ) {
	try {
		return Services::get( 'paired_routing' )->add_endpoint( $url );
	} catch ( InvalidService $e ) {
		if ( ! amp_is_enabled() ) {
			$reason = __( 'Function called while AMP is disabled via `amp_is_enabled` filter.', 'amp' );
		} else {
			$reason = __( 'Function cannot be called before services are registered.', 'amp' );
		}
		_doing_it_wrong( __FUNCTION__, esc_html( $reason ) . ' ' . esc_html( $e->getMessage() ), '2.1.1' );
		return $url;
	}
}

/**
 * Determine a given URL is for a paired AMP request.
 *
 * @since 2.1
 *
 * @param string $url URL to examine. If empty, will use the current URL.
 * @return bool True if the AMP query parameter is set with the required value, false if not.
 */
function amp_has_paired_endpoint( $url = '' ) {
	try {
		return Services::get( 'paired_routing' )->has_endpoint( $url );
	} catch ( InvalidService $e ) {
		if ( ! amp_is_enabled() ) {
			$reason = __( 'Function called while AMP is disabled via `amp_is_enabled` filter.', 'amp' );
		} else {
			$reason = __( 'Function cannot be called before services are registered.', 'amp' );
		}
		_doing_it_wrong( __FUNCTION__, esc_html( $reason ) . ' ' . esc_html( $e->getMessage() ), '2.1.1' );
		return false;
	}
}

/**
 * Remove the paired AMP endpoint from a given URL.
 *
 * @since 2.1
 *
 * @param string $url URL.
 * @return string URL with AMP stripped.
 */
function amp_remove_paired_endpoint( $url ) {
	try {
		return Services::get( 'paired_routing' )->remove_endpoint( $url );
	} catch ( InvalidService $e ) {
		if ( ! amp_is_enabled() ) {
			$reason = __( 'Function called while AMP is disabled via `amp_is_enabled` filter.', 'amp' );
		} else {
			$reason = __( 'Function cannot be called before services are registered.', 'amp' );
		}
		_doing_it_wrong( __FUNCTION__, esc_html( $reason ) . ' ' . esc_html( $e->getMessage() ), '2.1.1' );
		return $url;
	}
}

/**
 * Determine sandboxing level if enabled.
 *
 * @since 2.4.0
 *
 * @return int Following values are possible:
 *             0: Sandbox is disabled.
 *             1: Sandboxing level: Loose.
 *             2: Sandboxing level: Moderate.
 *             3: Sandboxing level: Strict.
 */
function amp_get_sandboxing_level() {
	if ( ! AMP_Options_Manager::get_option( Option::SANDBOXING_ENABLED ) ) {
		return 0;
	}
	return AMP_Options_Manager::get_option( Option::SANDBOXING_LEVEL );
}
PK.3YK�Ԩ��3bunyad-amp/includes/amp-post-template-functions.php<?php
/**
 * Callbacks for adding content to an AMP template.
 *
 * @package AMP
 */

/**
 * Register hooks.
 *
 * @internal
 */
function amp_post_template_init_hooks() {
	if ( version_compare( strtok( get_bloginfo( 'version' ), '-' ), '5.7', '>=' ) ) {
		add_action( 'amp_post_template_head', 'wp_robots' );
	} else {
		add_action( 'amp_post_template_head', 'noindex' );
	}
	add_action( 'amp_post_template_head', 'amp_post_template_add_title' );
	add_action( 'amp_post_template_head', 'amp_post_template_add_canonical' );
	add_action( 'amp_post_template_head', 'amp_post_template_add_fonts' );
	add_action( 'amp_post_template_head', 'amp_add_generator_metadata' );
	add_action( 'amp_post_template_head', 'wp_generator' );
	add_action( 'amp_post_template_head', 'amp_post_template_add_block_styles' );
	add_action( 'amp_post_template_head', 'amp_post_template_add_default_styles' );
	add_action( 'amp_post_template_css', 'amp_post_template_add_styles', 99 );
	add_action( 'amp_post_template_footer', 'amp_post_template_add_analytics_data' );

	add_action( 'admin_bar_init', [ AMP_Theme_Support::class, 'init_admin_bar' ] );
	add_action( 'amp_post_template_footer', 'wp_admin_bar_render' );

	// Printing scripts here is done primarily for the benefit of the admin bar. Note that wp_enqueue_scripts() is not called.
	add_action( 'amp_post_template_head', 'wp_print_head_scripts' );
	add_action( 'amp_post_template_footer', 'wp_print_footer_scripts' );
}

/**
 * Add title.
 *
 * @internal
 *
 * @param AMP_Post_Template $amp_template template.
 */
function amp_post_template_add_title( $amp_template ) {
	?>
	<title><?php echo esc_html( $amp_template->get( 'document_title' ) ); ?></title>
	<?php
}

/**
 * Add canonical link.
 *
 * @internal
 *
 * @param AMP_Post_Template $amp_template Template.
 */
function amp_post_template_add_canonical( $amp_template ) {
	?>
	<link rel="canonical" href="<?php echo esc_url( $amp_template->get( 'canonical_url' ) ); ?>" />
	<?php
}

/**
 * Print fonts.
 *
 * @internal
 *
 * @param AMP_Post_Template $amp_template Template.
 */
function amp_post_template_add_fonts( $amp_template ) {
	$font_urls = $amp_template->get( 'font_urls', [] );
	foreach ( $font_urls as $url ) {
		printf( '<link rel="stylesheet" href="%s">', esc_url( esc_url( $url ) ) ); // phpcs:ignore WordPress.WP.EnqueuedResources.NonEnqueuedStylesheet
	}
}

/**
 * Add block styles for core blocks and third-party blocks.
 *
 * @internal
 *
 * @since 1.5.0
 */
function amp_post_template_add_block_styles() {
	add_theme_support( 'wp-block-styles' );
	if ( function_exists( 'wp_common_block_scripts_and_styles' ) ) {
		wp_common_block_scripts_and_styles();
	}

	// Note that this will also print the admin-bar styles since WP_Admin_Bar::initialize() has been called.
	wp_styles()->do_items();
}

/**
 * Print default styles.
 *
 * @since 2.0.1
 * @internal
 */
function amp_post_template_add_default_styles() {
	wp_print_styles( 'amp-default' );
}

/**
 * Print styles.
 *
 * @internal
 *
 * @param AMP_Post_Template $amp_template Template.
 */
function amp_post_template_add_styles( $amp_template ) {
	$stylesheets = $amp_template->get( 'post_amp_stylesheets' );
	if ( ! empty( $stylesheets ) ) {
		echo '/* Inline stylesheets */' . PHP_EOL; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
		echo implode( '', $stylesheets ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
	}

	$styles = $amp_template->get( 'post_amp_styles' );
	if ( ! empty( $styles ) ) {
		echo '/* Inline styles */' . PHP_EOL; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
		foreach ( $styles as $selector => $declarations ) {
			$declarations = implode( ';', $declarations ) . ';';
			printf( '%1$s{%2$s}', $selector, $declarations ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
		}
	}
}

/**
 * Add custom analytics.
 *
 * This is currently only used for legacy AMP post templates.
 *
 * @since 0.5
 * @see amp_get_analytics()
 * @internal
 *
 * @param array $analytics Analytics.
 * @return array Analytics.
 */
function amp_add_custom_analytics( $analytics = [] ) {
	$analytics = amp_get_analytics( $analytics );

	/**
	 * Add amp-analytics tags.
	 *
	 * This filter allows you to easily insert any amp-analytics tags without needing much heavy lifting.
	 * This filter should be used to alter entries for legacy AMP templates.
	 *
	 * @since 0.4
	 *
	 * @param array   $analytics An associative array of the analytics entries we want to output. Each array entry must have a unique key, and the value should be an array with the following keys: `type`, `attributes`, `script_data`. See readme for more details.
	 * @param WP_Post $post      The current post.
	 */
	$analytics = apply_filters( 'amp_post_template_analytics', $analytics, get_queried_object() );

	return $analytics;
}

/**
 * Print analytics data.
 *
 * @internal
 *
 * @since 0.3.2
 */
function amp_post_template_add_analytics_data() {
	$analytics = amp_add_custom_analytics();
	amp_print_analytics( $analytics );
}
PK.3Yu$��88!bunyad-amp/includes/bootstrap.php<?php
/**
 * Central bootstrapping entry point for all non-autoloaded files.
 *
 * This file is mainly used for taking direct control of included files off from Composer's
 * "files" directive, as that one can easily include the files multiple times, leading to
 * redeclaration fatal errors.
 *
 * @package AmpProject/AmpWP
 */

$files_to_include = [
	__DIR__ . '/../back-compat/back-compat.php'       => 'amp_backcompat_use_v03_templates',
	__DIR__ . '/../includes/amp-helper-functions.php' => 'amp_activate',
	__DIR__ . '/../includes/admin/functions.php'      => 'amp_init_customizer',
	__DIR__ . '/../includes/deprecated.php'           => 'amp_load_classes',
];

foreach ( $files_to_include as $file_to_include => $function_to_check ) {
	if ( ! function_exists( $function_to_check ) ) {
		include $file_to_include;
	}
}
PK.3Y{���,bunyad-amp/includes/class-amp-autoloader.php<?php
/**
 * Class AMP_Autoloader
 *
 * @package AMP
 */

/**
 * Autoload the classes used by the AMP plugin.
 *
 * Class AMP_Autoloader
 *
 * @deprecated Use Composer autoloading instead.
 * @internal
 */
class AMP_Autoloader {
	/**
	 * Is registered.
	 *
	 * @var bool
	 */
	public static $is_registered = false;

	/**
	 * Registers this autoloader to PHP.
	 *
	 * @since 0.6
	 *
	 * Called at the end of this file; calling a second time has no effect.
	 */
	public static function register() {
		_deprecated_function( 'AMP_Autoloader::register', '1.5', 'Autoloading is done through Composer.' );
	}

	/**
	 * Allows an extensions plugin to register a class and its file for autoloading
	 *
	 * phpcs:disable VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
	 *
	 * @since 0.6
	 *
	 * @deprecated Autoloading works via Composer. Extensions need to use their own mechanism.
	 *
	 * @param string $class_name Full classname (include namespace if applicable).
	 * @param string $filepath   Absolute filepath to class file, including .php extension.
	 */
	public static function register_autoload_class( $class_name, $filepath ) {
		_deprecated_function( 'AMP_Autoloader::register_autoload_class', '1.5', 'Use Composer or custom autoloader in extensions.' );
	}
}
PK.3Ys��0bunyad-amp/includes/class-amp-comment-walker.php<?php
/**
 * Class AMP_Comment_Walker
 *
 * @codeCoverageIgnore
 * @deprecated 1.1.0 This functionality was moved to AMP_Comments_Sanitizer
 * @package AMP
 */

/* translators: 1: AMP_Comment_Walker. 2: AMP_Comments_Sanitizer. */
_deprecated_file( __FILE__, '1.1', null, esc_html( sprintf( __( '%1$s functionality has been moved to %2$s.', 'amp' ), AMP_Comment_Walker::class, AMP_Comments_Sanitizer::class ) ) );

/**
 * Class AMP_Comment_Walker
 *
 * Walker to wrap comments in mustache tags for amp-template.
 *
 * @deprecated 1.1.0 This functionality was moved to AMP_Comments_Sanitizer
 * @internal
 */
class AMP_Comment_Walker extends Walker_Comment {

	/**
	 * The original comments arguments.
	 *
	 * @since 0.7
	 * @var array
	 */
	public $args;

	/**
	 * Holds the timestamp of the most recent comment in a thread.
	 *
	 * @since 0.7
	 * @var array
	 */
	private $comment_thread_age = [];

	/**
	 * Starts the element output.
	 *
	 * @since 0.7.0
	 *
	 * @see Walker::start_el()
	 * @see wp_list_comments()
	 * @global int        $comment_depth
	 * @global WP_Comment $comment
	 *
	 * @param string     $output Used to append additional content. Passed by reference.
	 * @param WP_Comment $comment Comment data object.
	 * @param int        $depth Optional. Depth of the current comment in reference to parents. Default 0.
	 * @param array      $args Optional. An array of arguments. Default empty array.
	 * @param int        $id Optional. ID of the current comment. Default 0 (unused).
	 */
	public function start_el( &$output, $comment, $depth = 0, $args = [], $id = 0 ) {

		$new_out = '';
		parent::start_el( $new_out, $comment, $depth, $args, $id );

		if ( 'div' === $args['style'] ) {
			$tag = '<div';
		} else {
			$tag = '<li';
		}
		$new_tag = $tag . ' data-sort-time="' . esc_attr( strtotime( $comment->comment_date ) ) . '"';

		if ( ! empty( $this->comment_thread_age[ $comment->comment_ID ] ) ) {
			$new_tag .= ' data-update-time="' . esc_attr( $this->comment_thread_age[ $comment->comment_ID ] ) . '"';
		}

		$output .= $new_tag . substr( ltrim( $new_out ), strlen( $tag ) );

	}

	/**
	 * Output amp-list template code and place holder for comments.
	 *
	 * @since 0.7
	 * @see Walker::paged_walk()
	 *
	 * @param WP_Comment[] $elements List of comment Elements.
	 * @param int          $max_depth The maximum hierarchical depth.
	 * @param int          $page_num The specific page number, beginning with 1.
	 * @param int          $per_page Per page counter.
	 * @param mixed        ...$args  Optional additional arguments.
	 *
	 * @return string XHTML of the specified page of elements.
	 */
	public function paged_walk( $elements, $max_depth, $page_num, $per_page, ...$args ) {
		if ( empty( $elements ) || $max_depth < -1 ) {
			return '';
		}

		$this->build_thread_latest_date( $elements );

		$args = array_slice( func_get_args(), 4 );

		return parent::paged_walk( $elements, $max_depth, $page_num, $per_page, $args[0] );
	}

	/**
	 * Find the timestamp of the latest child comment of a thread to set the updated time.
	 *
	 * @since 0.7
	 *
	 * @param WP_Comment[] $elements The list of comments to get thread times for.
	 * @param int          $time $the timestamp to check against.
	 * @param bool         $is_child Flag used to set the the value or return the time.
	 * @return int Latest time.
	 */
	protected function build_thread_latest_date( $elements, $time = 0, $is_child = false ) {

		foreach ( $elements as $element ) {

			$children  = $element->get_children();
			$this_time = strtotime( $element->comment_date );
			if ( ! empty( $children ) ) {
				$this_time = $this->build_thread_latest_date( $children, $this_time, true );
			}
			if ( $this_time > $time ) {
				$time = $this_time;
			}
			if ( false === $is_child ) {
				$this->comment_thread_age[ $element->comment_ID ] = $time;
			}
		}

		return $time;
	}
}
PK.3Y��+��I�I&bunyad-amp/includes/class-amp-http.php<?php
/**
 * Class AMP_HTTP
 *
 * @since 1.0
 * @package AMP
 */

/**
 * Class AMP_HTTP
 *
 * @internal
 */
class AMP_HTTP {

	/**
	 * Query var which is submitted with a form which had an action attribute which was automatically converted into action-xhr.
	 *
	 * @see \AMP_Form_Sanitizer::sanitize()
	 * @var string
	 */
	const ACTION_XHR_CONVERTED_QUERY_VAR = '_wp_amp_action_xhr_converted';

	/**
	 * Headers sent (or attempted to be sent).
	 *
	 * This is used primarily for the benefit of unit testing. Otherwise, `headers_list()` should be used.
	 *
	 * @since 1.0
	 * @see AMP_HTTP::send_header()
	 * @var array[]
	 */
	public static $headers_sent = [];

	/**
	 * Whether Server-Timing headers are sent.
	 *
	 * By default this is false to prevent breaking some web servers with an unexpected number of response headers. To
	 * enable in `WP_DEBUG` mode, consider the following plugin code:
	 *
	 *     add_action( 'amp_init', function () {
	 *         AMP_HTTP::$server_timing = ( ( defined( 'WP_DEBUG' ) && WP_DEBUG ) || current_user_can( 'manage_options' ) );
	 *     } );
	 *
	 * @link https://gist.github.com/westonruter/053f8f47c21df51f1a081fc41b47f547
	 * @var bool
	 */
	public static $server_timing = false;

	/**
	 * AMP-specific query vars that were purged.
	 *
	 * @since 0.7
	 * @since 1.0 Moved to AMP_HTTP class.
	 * @see AMP_HTTP::purge_amp_query_vars()
	 * @var string[]
	 */
	public static $purged_amp_query_vars = [];

	/**
	 * Send an HTTP response header.
	 *
	 * This largely exists to facilitate unit testing but it also provides a better interface for sending headers.
	 *
	 * @since 0.7.0
	 * @since 1.0 Moved to AMP_HTTP class.
	 *
	 * @param string $name  Header name.
	 * @param string $value Header value.
	 * @param array  $args {
	 *     Args to header().
	 *
	 *     @type bool $replace     Whether to replace a header previously sent. Default true.
	 *     @type int  $status_code Status code to send with the sent header.
	 * }
	 * @return bool Whether the header was sent.
	 */
	public static function send_header( $name, $value, $args = [] ) {
		$args = array_merge(
			[
				'replace'     => true,
				'status_code' => 0,
			],
			$args
		);

		self::$headers_sent[] = array_merge( compact( 'name', 'value' ), $args );
		if ( headers_sent() ) {
			return false;
		}

		header(
			sprintf( '%s: %s', $name, $value ),
			$args['replace'],
			empty( $args['status_code'] ) ? 0 : (int) $args['status_code']
		);
		return true;
	}

	/**
	 * Send Server-Timing header.
	 *
	 * If WP_DEBUG is not enabled and an admin user (who can manage_options) is not logged-in, the Server-Header will not be sent.
	 *
	 * @since 1.0
	 *
	 * @deprecated Use the `ServerTiming` service or its associated actions instead.
	 * @internal
	 *
	 * @param string $name        Name.
	 * @param float  $duration    Duration. If negative, will be added to microtime( true ). Optional.
	 * @param string $description Description. Optional.
	 * @return bool Return value of send_header call. If WP_DEBUG is not enabled or admin user (who can manage_options) is not logged-in, this will always return false.
	 */
	public static function send_server_timing( $name, $duration = null, $description = null ) {
		_deprecated_function( __METHOD__, '2.0.0', 'Use the AmpProject\AmpWp\Instrumentation\ServerTiming service or its associated actions instead.' );

		if ( ! self::$server_timing ) {
			return false;
		}
		$value = $name;
		if ( isset( $description ) ) {
			$value .= sprintf( ';desc="%s"', str_replace( [ '\\', '"' ], '', substr( $description, 0, 100 ) ) );
		}
		if ( isset( $duration ) ) {
			if ( $duration < 0 ) {
				$duration = microtime( true ) + $duration;
			}
			$value .= sprintf( ';dur=%f', $duration * 1000 );
		}
		return self::send_header( 'Server-Timing', $value, [ 'replace' => false ] );
	}

	/**
	 * Remove query vars that come in requests such as for amp-live-list.
	 *
	 * WordPress should generally not respond differently to requests when these parameters
	 * are present. In some cases, when a query param such as __amp_source_origin is present
	 * then it would normally get included into pagination links generated by get_pagenum_link().
	 * The validating sanitizer empties out links that contain this string as it matches the
	 * disallowed_value_regex. So by preemptively scrubbing any reference to these query vars
	 * we can ensure that WordPress won't end up referencing them in any way.
	 *
	 * @since 0.7
	 * @since 1.0 Moved to AMP_HTTP class.
	 */
	public static function purge_amp_query_vars() {
		$query_vars = [
			'__amp_source_origin',
			self::ACTION_XHR_CONVERTED_QUERY_VAR,
			'amp_latest_update_time',
			'amp_last_check_time',
		];

		// Scrub input vars.
		foreach ( $query_vars as $query_var ) {
			if ( ! isset( $_GET[ $query_var ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
				continue;
			}
			self::$purged_amp_query_vars[ $query_var ] = wp_unslash( $_GET[ $query_var ] ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
			unset( $_REQUEST[ $query_var ], $_GET[ $query_var ] ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			$scrubbed = true;
		}

		if ( isset( $scrubbed ) ) {
			$build_query = static function ( $query ) use ( $query_vars ) {
				$pattern = '/^(' . implode( '|', $query_vars ) . ')(?==|$)/';
				$pairs   = [];
				foreach ( explode( '&', $query ) as $pair ) {
					if ( ! preg_match( $pattern, $pair ) ) {
						$pairs[] = $pair;
					}
				}

				return implode( '&', $pairs );
			};

			// Scrub QUERY_STRING.
			if ( ! empty( $_SERVER['QUERY_STRING'] ) ) {
				$_SERVER['QUERY_STRING'] = $build_query( $_SERVER['QUERY_STRING'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
			}

			// Scrub REQUEST_URI.
			if ( ! empty( $_SERVER['REQUEST_URI'] ) ) {
				list( $path, $query ) = explode( '?', $_SERVER['REQUEST_URI'], 2 ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized

				$pairs                  = $build_query( $query );
				$_SERVER['REQUEST_URI'] = $path;
				if ( ! empty( $pairs ) ) {
					$_SERVER['REQUEST_URI'] .= "?{$pairs}";
				}
			}
		}
	}

	/**
	 * Filter the allowed redirect hosts to include AMP caches.
	 *
	 * @since 1.0
	 *
	 * @param array $allowed_hosts Allowed hosts.
	 * @return array Allowed redirect hosts.
	 */
	public static function filter_allowed_redirect_hosts( $allowed_hosts ) {
		return array_merge( $allowed_hosts, self::get_amp_cache_hosts() );
	}

	/**
	 * Get list of AMP cache hosts (that is, CORS origins).
	 *
	 * @since 1.0
	 * @link https://www.ampproject.org/docs/fundamentals/amp-cors-requests#1)-allow-requests-for-specific-cors-origins
	 *
	 * @return array AMP cache hosts.
	 */
	public static function get_amp_cache_hosts() {
		$hosts = [];

		// Google AMP Cache (legacy).
		$hosts[] = 'cdn.ampproject.org';

		// From the publisher’s own origins.
		$domains = array_unique(
			[
				wp_parse_url( site_url(), PHP_URL_HOST ),
				wp_parse_url( home_url(), PHP_URL_HOST ),
			]
		);

		if ( defined( 'INTL_IDNA_VARIANT_UTS46' ) ) {
			$intl_idna_variant = INTL_IDNA_VARIANT_UTS46;
		} elseif ( defined( 'INTL_IDNA_VARIANT_2003' ) ) {
			$intl_idna_variant = INTL_IDNA_VARIANT_2003; // phpcs:ignore PHPCompatibility.Constants.RemovedConstants.intl_idna_variant_2003Deprecated
		} else {
			$intl_idna_variant = 0;
		}

		/*
		 * From AMP docs:
		 * "When possible, the Google AMP Cache will create a subdomain for each AMP document's domain by first converting it
		 * from IDN (punycode) to UTF-8. The caches replaces every - (dash) with -- (2 dashes) and replace every . (dot) with
		 * - (dash). For example, pub.com will map to pub-com.cdn.ampproject.org."
		 */
		foreach ( $domains as $domain ) {
			if ( function_exists( 'idn_to_utf8' ) && $intl_idna_variant ) {
				// The third parameter is set explicitly to prevent issues with newer PHP versions compiled with an old ICU version.
				$domain = idn_to_utf8( $domain, IDNA_DEFAULT, $intl_idna_variant );
			}
			$subdomain = str_replace( [ '-', '.' ], [ '--', '-' ], $domain );

			// Google AMP Cache subdomain.
			$hosts[] = sprintf( '%s.cdn.ampproject.org', $subdomain );

			// Bing AMP Cache.
			$hosts[] = sprintf( '%s.bing-amp.com', $subdomain );
		}

		return $hosts;
	}

	/**
	 * Send cors headers.
	 *
	 * From the AMP docs:
	 * Restrict requests to source origins
	 * In all fetch requests, the AMP Runtime passes the "__amp_source_origin" query parameter, which contains
	 * the value of the source origin (for example, "https://publisher1.com").
	 *
	 * To restrict requests to only source origins, check that the value of the "__amp_source_origin" parameter
	 * is within a set of the Publisher's own origins.
	 *
	 * Access-Control-Allow-Origin: <origin>
	 * This header is a W3 CORS Spec requirement, where origin refers to the requesting origin that was allowed
	 * via the CORS Origin request header (for example, "https://<publisher's subdomain>.cdn.ampproject.org").
	 *
	 * Although the W3 CORS spec allows the value of * to be returned in the response, for improved security, you should:
	 *
	 * - If the Origin header is present, validate and echo the value of the Origin header.
	 * - If the Origin header isn't present, validate and echo the value of the "__amp_source_origin".
	 *
	 * (Otherwise, no Access-Control-Allow-Origin header is sent.)
	 *
	 * AMP-Access-Control-Allow-Source-Origin: <source-origin>
	 * This header allows the specified source-origin to read the authorization response. The source-origin is
	 * the value specified and verified in the "__amp_source_origin" URL parameter (for example, "https://publisher1.com").
	 *
	 * Access-Control-Expose-Headers: AMP-Access-Control-Allow-Source-Origin
	 * This header simply allows the CORS response to contain the AMP-Access-Control-Allow-Source-Origin header.
	 *
	 * @link https://www.ampproject.org/docs/fundamentals/amp-cors-requests
	 * @since 1.0
	 */
	public static function send_cors_headers() {
		$origin        = null;
		$source_origin = null;
		if ( isset( $_SERVER['HTTP_ORIGIN'] ) ) {
			$origin = wp_validate_redirect( wp_sanitize_redirect( esc_url_raw( wp_unslash( $_SERVER['HTTP_ORIGIN'] ) ) ) );
		}
		if ( isset( self::$purged_amp_query_vars['__amp_source_origin'] ) ) {
			$source_origin = wp_validate_redirect( wp_sanitize_redirect( esc_url_raw( self::$purged_amp_query_vars['__amp_source_origin'] ) ) );
		}
		if ( ! $origin ) {
			$origin = $source_origin;
		}

		if ( $origin ) {
			self::send_header( 'Access-Control-Allow-Origin', $origin, [ 'replace' => false ] );
			self::send_header( 'Access-Control-Allow-Credentials', 'true' );
			self::send_header( 'Vary', 'Origin', [ 'replace' => false ] );
		}
		if ( $source_origin ) {
			self::send_header( 'AMP-Access-Control-Allow-Source-Origin', $source_origin );
			self::send_header( 'Access-Control-Expose-Headers', 'AMP-Access-Control-Allow-Source-Origin', [ 'replace' => false ] );
		}
	}

	/**
	 * Hook into a POST form submissions, such as the comment form or some other form submission.
	 *
	 * @since 0.7.0
	 * @since 1.0 Moved to AMP_HTTP class. Extracted some logic to send_cors_headers method.
	 */
	public static function handle_xhr_request() {
		$is_amp_xhr = (
			! empty( self::$purged_amp_query_vars[ self::ACTION_XHR_CONVERTED_QUERY_VAR ] )
			&&
			( ! empty( $_SERVER['REQUEST_METHOD'] ) && 'POST' === $_SERVER['REQUEST_METHOD'] )
		);
		if ( ! $is_amp_xhr ) {
			return;
		}

		// Intercept POST requests which redirect.
		add_filter( 'wp_redirect', [ __CLASS__, 'intercept_post_request_redirect' ], PHP_INT_MAX );

		// Add special handling for redirecting after comment submission.
		add_filter( 'comment_post_redirect', [ __CLASS__, 'filter_comment_post_redirect' ], PHP_INT_MAX, 2 );

		// Add die handler for AMP error display, most likely due to problem with comment.
		$handle_wp_die = static function () {
			return [ __CLASS__, 'handle_wp_die' ];
		};
		add_filter( 'wp_die_json_handler', $handle_wp_die );
		add_filter( 'wp_die_handler', $handle_wp_die ); // Needed for WP<5.1.
	}

	/**
	 * Intercept the response to a POST request.
	 *
	 * @since 0.7.0
	 * @since 1.0 Moved to AMP_HTTP class.
	 * @see wp_redirect()
	 * @see amp_get_current_url()
	 * @see AMP_Form_Sanitizer::get_action_url()
	 *
	 * @param string $location The location to redirect to.
	 */
	public static function intercept_post_request_redirect( $location ) { // phpcs:ignore WordPressVIPMinimum.Hooks.AlwaysReturnInFilter.MissingReturnStatement -- It dies.

		// Make sure relative redirects get made absolute.
		$parsed_home_url = wp_parse_url( get_home_url() );
		$parsed_location = wp_parse_url( $location );
		if ( isset( $parsed_location['host'] ) ) {
			// Make sure the home port is not accidentally applied to the redirect location URL.
			unset( $parsed_home_url['port'] );
		}

		$parsed_location = array_merge(
			wp_array_slice_assoc( $parsed_home_url, [ 'host', 'port' ] ),
			[
				'scheme' => 'https',
				'path'   => isset( $_SERVER['REQUEST_URI'] ) ? strtok( wp_unslash( $_SERVER['REQUEST_URI'] ), '?' ) : '/', // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
			],
			$parsed_location
		);

		$absolute_location = '';
		if ( 'https' === $parsed_location['scheme'] ) {
			$absolute_location .= $parsed_location['scheme'] . ':';
		}
		$absolute_location .= '//' . $parsed_location['host'];
		if ( isset( $parsed_location['port'] ) ) {
			$absolute_location .= ':' . $parsed_location['port'];
		}
		$absolute_location .= $parsed_location['path'];
		if ( isset( $parsed_location['query'] ) ) {
			$absolute_location .= '?' . $parsed_location['query'];
		}
		if ( isset( $parsed_location['fragment'] ) ) {
			$absolute_location .= '#' . $parsed_location['fragment'];
		}

		self::send_header( 'AMP-Redirect-To', $absolute_location );
		self::send_header( 'Access-Control-Expose-Headers', 'AMP-Redirect-To', [ 'replace' => false ] );

		wp_send_json(
			[
				'message'     => __( 'Redirecting…', 'amp' ),
				'redirecting' => true, // Make sure that the submit-success doesn't get styled as success since redirection _could_ be to error page.
			],
			200
		);
	}

	/**
	 * New error handler for AMP form submission.
	 *
	 * @since 0.7.0
	 * @since 1.0 Moved to AMP_HTTP class.
	 * @see wp_die()
	 *
	 * @param WP_Error|string  $error The error to handle.
	 * @param string|int       $title Optional. Error title. If `$message` is a `WP_Error` object,
	 *                                error data with the key 'title' may be used to specify the title.
	 *                                If `$title` is an integer, then it is treated as the response
	 *                                code. Default empty.
	 * @param string|array|int $args {
	 *     Optional. Arguments to control behavior. If `$args` is an integer, then it is treated
	 *     as the response code. Default empty array.
	 *
	 *     @type int $response The HTTP response code. Default 200 for Ajax requests, 500 otherwise.
	 * }
	 * @global string $pagenow
	 */
	public static function handle_wp_die( $error, $title = '', $args = [] ) {
		global $pagenow;
		if ( is_int( $title ) ) {
			$status_code = $title;
		} elseif ( is_int( $args ) ) {
			$status_code = $args;
		} elseif ( is_array( $args ) && isset( $args['response'] ) ) {
			$status_code = $args['response'];
		} else {
			$status_code = 500;
		}

		/*
		 * Handle apparent defect in core where invalid comment form submissions return with a 200 status code.
		 * Successful requests to wp-comments-post.php should always end up doing a redirect after applying the
		 * comment_post_redirect filter, and as such the \AMP_HTTP::filter_comment_post_redirect() method will
		 * ensure that redirect works in AMP. When there is no comment_post_redirect then the alternative is a wp_die()
		 * scenario which should always be considered an error. This workaround is important because otherwise an error
		 * case will get rendered unexpectedly in the div[submit-success] element, when it should be rendered in the
		 * div[submit-error] element. For a fix to the core defect which will make this unnecessary,
		 * see <https://core.trac.wordpress.org/ticket/47393>.
		 */
		if ( 200 === $status_code && isset( $pagenow ) && 'wp-comments-post.php' === $pagenow ) {
			$status_code = 400;
		}

		if ( is_wp_error( $error ) ) {
			$error = $error->get_error_message();
		}

		// Message will be shown in template defined by AMP_Theme_Support::amend_comment_form().
		wp_send_json(
			[
				'message' => amp_wp_kses_mustache( $error ),
			],
			$status_code
		);
	}

	/**
	 * Handle comment_post_redirect to ensure page reload is done when comments_live_list is not supported, while sending back a success message when it is.
	 *
	 * @since 0.7.0
	 * @since 1.0 Moved to AMP_HTTP class.
	 *
	 * @param string     $url     Comment permalink to redirect to.
	 * @param WP_Comment $comment Posted comment.
	 *
	 * @return string|null URL if redirect to be done; otherwise function will exist.
	 */
	public static function filter_comment_post_redirect( $url, $comment ) {
		$theme_support = AMP_Theme_Support::get_theme_support_args();

		// Cause a page refresh if amp-live-list is not implemented for comments via add_theme_support( AMP_Theme_Support::SLUG, array( 'comments_live_list' => true ) ).
		if ( empty( $theme_support['comments_live_list'] ) ) {
			/*
			 * Add the comment ID to the URL to force AMP to refresh the page.
			 * This is ideally a temporary workaround to deal with https://github.com/ampproject/amphtml/issues/14170
			 */
			$url = add_query_arg( 'comment', $comment->comment_ID, $url );

			// Pass URL along to wp_redirect().
			return $url;
		}

		// Create a success message to display to the user.
		if ( '1' === (string) $comment->comment_approved ) {
			$message = __( 'Your comment has been posted.', 'amp' );
		} else {
			$message = __( 'Your comment is awaiting moderation.', 'amp' );
		}

		/**
		 * Filters the message when comment submitted success message when
		 *
		 * @since 0.7
		 */
		$message = apply_filters( 'amp_comment_posted_message', $message, $comment );

		// Message will be shown in template defined by AMP_Theme_Support::amend_comment_form().
		wp_send_json(
			[
				'message' => amp_wp_kses_mustache( $message ),
			],
			200
		);

		return null;
	}

	/**
	 * Get the Content-Type for the response.
	 *
	 * @since 1.2
	 *
	 * @return string Content type.
	 */
	public static function get_response_content_type() {
		$content_type = ini_get( 'default_mimetype' );
		foreach ( headers_list() as $header ) {
			list( $name, $value ) = explode( ':', $header, 2 );
			if ( 'content-type' === strtolower( $name ) ) {
				$content_type = trim( $value );
				break;
			}
		}
		return $content_type;
	}
}
PK.3Y
����3bunyad-amp/includes/class-amp-post-type-support.php<?php
/**
 * AMP Post type support.
 *
 * @package AMP
 * @since 0.6
 */

use AmpProject\AmpWP\Option;

/**
 * Class AMP_Post_Type_Support.
 *
 * @internal
 */
class AMP_Post_Type_Support {

	/**
	 * Post type support slug.
	 *
	 * @var string
	 */
	const SLUG = 'amp';

	/**
	 * Get post types that plugin supports out of the box (which cannot be disabled).
	 *
	 * @deprecated
	 * @internal
	 * @codeCoverageIgnore
	 * @return string[] Post types.
	 */
	public static function get_builtin_supported_post_types() {
		_deprecated_function( __METHOD__, '1.0' );
		return array_filter( [ 'post' ], 'post_type_exists' );
	}

	/**
	 * Get post types that are eligible for AMP support.
	 *
	 * @since 0.6
	 * @return string[] Post types eligible for AMP.
	 */
	public static function get_eligible_post_types() {
		$post_types = get_post_types( [], 'names' );
		$post_types = array_filter( $post_types, 'is_post_type_viewable' );
		$post_types = array_values( $post_types );

		/**
		 * Filters the list of post types which may be supported for AMP.
		 *
		 * By default the list includes those which are public.
		 *
		 * @since 2.0
		 *
		 * @param string[] $post_types Post types.
		 */
		return array_values( (array) apply_filters( 'amp_supportable_post_types', $post_types ) );
	}

	/**
	 * Get post types that can be shown in the REST API and supports AMP.
	 *
	 * @since 2.0
	 *
	 * @return string[] Post types.
	 */
	public static function get_post_types_for_rest_api() {
		return array_intersect(
			self::get_supported_post_types(),
			get_post_types(
				[
					'show_in_rest' => true,
				]
			)
		);
	}

	/**
	 * Get supported post types.
	 *
	 * @return string[] List of post types that support AMP.
	 */
	public static function get_supported_post_types() {
		return array_intersect(
			AMP_Options_Manager::get_option( Option::SUPPORTED_POST_TYPES, [] ),
			self::get_eligible_post_types()
		);
	}

	/**
	 * Declare support for post types.
	 *
	 * This function should only be invoked through the 'after_setup_theme' action to
	 * allow plugins/theme to overwrite the post types support.
	 *
	 * @codeCoverageIgnore
	 * @since 0.6
	 * @deprecated The 'amp' post type support is no longer used at runtime to determine whether AMP is supported.
	 */
	public static function add_post_type_support() {
		_deprecated_function( __METHOD__, '2.0.0' );
		foreach ( self::get_supported_post_types() as $post_type ) {
			add_post_type_support( $post_type, self::SLUG );
		}
	}

	/**
	 * Return error codes for why a given post does not have AMP support.
	 *
	 * @since 0.6
	 *
	 * @param WP_Post|int $post Post.
	 * @return array Error codes for why a given post does not have AMP support.
	 */
	public static function get_support_errors( $post ) {
		if ( ! $post instanceof WP_Post ) {
			$post = get_post( $post );
		}

		// If there's still not a valid post, then we have to abort.
		if ( ! $post instanceof WP_Post ) {
			return [ 'invalid-post' ];
		}

		$errors = [];

		if ( ! in_array( $post->post_type, self::get_supported_post_types(), true ) ) {
			$errors[] = 'post-type-support';
		}

		/**
		 * Filters whether to skip the post from AMP.
		 *
		 * @since 0.3
		 *
		 * @param bool    $skipped Skipped.
		 * @param int     $post_id Post ID.
		 * @param WP_Post $post    Post.
		 */
		if ( ! empty( $post->ID ) && true === apply_filters( 'amp_skip_post', false, $post->ID, $post ) ) {
			$errors[] = 'skip-post';
		}

		$status = get_post_meta( $post->ID, AMP_Post_Meta_Box::STATUS_POST_META_KEY, true );
		if ( $status ) {
			if ( AMP_Post_Meta_Box::DISABLED_STATUS === $status ) {
				$errors[] = 'post-status-disabled';
			}
		} else {
			/*
			 * Disabled by default for custom page templates, page on front and page for posts, unless not using legacy
			 * Reader mode. In legacy Reader mode, there is no UI to enable AMP for various templates whereas in the new
			 * Reader mode there is the ability to enable AMP for the various templates, including the front page or
			 * else to enable AMP for all templates. Therefore, we do not need to disable AMP by default for the new
			 * Reader mode. Otherwise, in legacy Reader mode we disable AMP by default for special template pages
			 * because we can't make assumptions about whether the legacy template will be suitable for rendering the
			 * content.
			 */
			$enabled = (
				! amp_is_legacy()
				||
				(
					! (bool) get_page_template_slug( $post )
					&&
					! (
						'page' === $post->post_type
						&&
						'page' === get_option( 'show_on_front' )
						&&
						in_array(
							(int) $post->ID,
							[
								(int) get_option( 'page_on_front' ),
								(int) get_option( 'page_for_posts' ),
							],
							true
						)
					)
				)
			);

			/**
			 * Filters whether default AMP status should be enabled or not.
			 *
			 * @since 0.6
			 *
			 * @param string  $status Status.
			 * @param WP_Post $post   Post.
			 */
			$enabled = apply_filters( 'amp_post_status_default_enabled', $enabled, $post );
			if ( ! $enabled ) {
				$errors[] = 'post-status-disabled';
			}
		}
		return $errors;
	}
}
PK.3Y���^�0�00bunyad-amp/includes/class-amp-service-worker.php<?php
/**
 * AMP Service Workers.
 *
 * @package AMP
 * @since 1.1
 */

/**
 * Class AMP_Service_Worker.
 *
 * @internal
 */
class AMP_Service_Worker {

	/**
	 * Query var that is used to signal a request to install the service worker in an iframe.
	 *
	 * @link https://www.ampproject.org/docs/reference/components/amp-install-serviceworker#data-iframe-src-(optional)
	 */
	const INSTALL_SERVICE_WORKER_IFRAME_QUERY_VAR = 'amp_install_service_worker_iframe';

	/**
	 * Init.
	 */
	public static function init() {
		if ( ! class_exists( 'WP_Service_Workers' ) ) {
			return;
		}

		// Shim support for service worker installation from PWA feature plugin.
		add_filter( 'query_vars', [ __CLASS__, 'add_query_var' ] );
		add_action( 'parse_request', [ __CLASS__, 'handle_service_worker_iframe_install' ] );
		add_action( 'wp', [ __CLASS__, 'add_install_hooks' ] );

		$theme_support = AMP_Theme_Support::get_theme_support_args();
		if ( isset( $theme_support['service_worker'] ) && false === $theme_support['service_worker'] ) {
			return;
		}

		/*
		 * The default-enabled options reflect which features are not commented-out in the AMP-by-Example service worker.
		 * See <https://github.com/ampproject/amp-by-example/blob/e093edb401b1617859b5365e80b639d81b06f058/boilerplate-generator/templates/files/serviceworkerJs.js>.
		 */
		$enabled_options = [
			'cdn_script_caching'   => true,
			'image_caching'        => false,
			'google_fonts_caching' => false,
		];
		if ( isset( $theme_support['service_worker'] ) && is_array( $theme_support['service_worker'] ) ) {
			$enabled_options = array_merge(
				$enabled_options,
				$theme_support['service_worker']
			);
		}

		if ( $enabled_options['cdn_script_caching'] ) {
			add_action( 'wp_front_service_worker', [ __CLASS__, 'add_cdn_script_caching' ] );
		}
		if ( $enabled_options['image_caching'] ) {
			add_action( 'wp_front_service_worker', [ __CLASS__, 'add_image_caching' ] );
		}
		if ( $enabled_options['google_fonts_caching'] ) {
			add_action( 'wp_front_service_worker', [ __CLASS__, 'add_google_fonts_caching' ] );
		}
	}

	/**
	 * Register a caching route.
	 *
	 * @param WP_Service_Worker_Scripts $service_workers Service workers.
	 * @param string                    $route           Route.
	 * @param string                    $strategy        Strategy name.
	 * @param array                     $args            Strategy args.
	 * @param array                     $plugins         Plugins.
	 */
	private static function register_caching_route( WP_Service_Worker_Scripts $service_workers, $route, $strategy, $args = [], $plugins = [] ) {
		$caching_routes = $service_workers->caching_routes();
		if ( defined( 'PWA_VERSION' ) && version_compare( PWA_VERSION, '0.6', '<' ) ) {
			$args['strategy'] = $strategy;
			$args['plugins']  = $plugins;
			$caching_routes->register( $route, $args );
		} else {
			$args = array_merge( $args, $plugins );
			$caching_routes->register( $route, $strategy, $args );
		}
	}

	/**
	 * Add query var for iframe service worker request.
	 *
	 * @param array $vars Query vars.
	 * @return array Amended query vars.
	 */
	public static function add_query_var( $vars ) {
		$vars[] = self::INSTALL_SERVICE_WORKER_IFRAME_QUERY_VAR;
		return $vars;
	}

	/**
	 * Add runtime caching for scripts loaded from the AMP CDN with a stale-while-revalidate strategy.
	 *
	 * @link https://github.com/ampproject/amp-by-example/blob/4593af61609898043302a101826ddafe7206bfd9/boilerplate-generator/templates/files/serviceworkerJs.js
	 *
	 * @param WP_Service_Worker_Scripts $service_workers Service worker registry.
	 */
	public static function add_cdn_script_caching( $service_workers ) {
		if ( ! ( $service_workers instanceof WP_Service_Worker_Scripts ) ) {
			/* translators: %s: WP_Service_Worker_Cache_Registry. */
			_doing_it_wrong( __METHOD__, sprintf( esc_html__( 'Please update to PWA v0.2. Expected argument to be %s.', 'amp' ), 'WP_Service_Worker_Cache_Registry' ), '1.1' );
			return;
		}

		// Add AMP scripts to runtime cache which will then get stale-while-revalidate strategy.
		$service_workers->register(
			'amp-cdn-runtime-caching',
			static function() {
				$urls = AMP_Service_Worker::get_precached_script_cdn_urls();
				if ( empty( $urls ) ) {
					return '';
				}

				$js = file_get_contents( AMP__DIR__ . '/assets/js/amp-service-worker-runtime-precaching.js' ); // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents, WordPress.WP.AlternativeFunctions.file_system_read_file_get_contents
				$js = preg_replace( '#/\*\s*global.+?\*/#', '', $js );
				$js = str_replace(
					'URLS',
					wp_json_encode( $urls ),
					$js
				);
				return $js;
			}
		);

		// Serve the AMP Runtime from cache and check for an updated version in the background. See <https://github.com/ampproject/amp-by-example/blob/4593af61609898043302a101826ddafe7206bfd9/boilerplate-generator/templates/files/serviceworkerJs.js#L54-L58>.
		self::register_caching_route(
			$service_workers,
			'^https:\/\/cdn\.ampproject\.org\/.*',
			WP_Service_Worker_Caching_Routes::STRATEGY_STALE_WHILE_REVALIDATE
		);
	}

	/**
	 * Add runtime image caching from the origin with a cache-first strategy.
	 *
	 * @link https://github.com/ampproject/amp-by-example/blob/4593af61609898043302a101826ddafe7206bfd9/boilerplate-generator/templates/files/serviceworkerJs.js#L60-L74
	 *
	 * @param WP_Service_Worker_Scripts $service_workers Service workers.
	 */
	public static function add_image_caching( $service_workers ) {
		if ( ! ( $service_workers instanceof WP_Service_Worker_Scripts ) ) {
			_doing_it_wrong( __METHOD__, esc_html__( 'Please update to PWA v0.2. Expected argument to be WP_Service_Worker_Scripts.', 'amp' ), '1.1' );
			return;
		}

		self::register_caching_route(
			$service_workers,
			'^' . preg_quote( set_url_scheme( content_url( '/' ), 'https' ), '/' ) . '[^\?]+?\.(?:png|gif|jpg|jpeg|svg|webp)(\?.*)?$',
			WP_Service_Worker_Caching_Routes::STRATEGY_CACHE_FIRST,
			[
				'cacheName' => 'images',
			],
			[
				'cacheableResponse' => [
					'statuses' => [ 0, 200 ],
				],
				'expiration'        => [
					'maxEntries'    => 60,
					'maxAgeSeconds' => MONTH_IN_SECONDS,
				],
			]
		);
	}

	/**
	 * Add runtime caching of Google Fonts with stale-while-revalidate strategy for stylesheets and cache-first strategy for webfont files.
	 *
	 * @link https://developers.google.com/web/tools/workbox/guides/common-recipes#google_fonts
	 * @link https://github.com/ampproject/amp-by-example/blob/4593af61609898043302a101826ddafe7206bfd9/boilerplate-generator/templates/files/serviceworkerJs.js#L76-L103
	 * @link https://github.com/GoogleChromeLabs/pwa-wp/blob/d0eb52a2f348259123f39941093813f1351c0e21/integrations/class-wp-service-worker-fonts-integration.php
	 *
	 * @param WP_Service_Worker_Scripts $service_workers Service workers.
	 */
	public static function add_google_fonts_caching( $service_workers ) {
		if ( ! ( $service_workers instanceof WP_Service_Worker_Scripts ) ) {
			_doing_it_wrong( __METHOD__, esc_html__( 'Please update to PWA v0.2. Expected argument to be WP_Service_Worker_Scripts.', 'amp' ), '1.1' );
			return;
		}

		// The PWA plugin also automatically adds runtime caching for Google Fonts when WP_SERVICE_WORKER_INTEGRATIONS_ENABLED is set.
		if ( class_exists( 'WP_Service_Worker_Fonts_Integration' ) ) {
			return;
		}

		// Cache the Google Fonts stylesheets with a stale while revalidate strategy.
		self::register_caching_route(
			$service_workers,
			'^https:\/\/fonts\.googleapis\.com',
			WP_Service_Worker_Caching_Routes::STRATEGY_STALE_WHILE_REVALIDATE,
			[
				'cacheName' => 'google-fonts-stylesheets',
			]
		);

		// Cache the Google Fonts webfont files with a cache first strategy for 1 year.
		self::register_caching_route(
			$service_workers,
			'^https:\/\/fonts\.gstatic\.com',
			WP_Service_Worker_Caching_Routes::STRATEGY_CACHE_FIRST,
			[
				'cacheName' => 'google-fonts-webfonts',
			],
			[
				'cacheableResponse' => [
					'statuses' => [ 0, 200 ],
				],
				'expiration'        => [
					'maxAgeSeconds' => YEAR_IN_SECONDS,
					'maxEntries'    => 30,
				],
			]
		);
	}

	/**
	 * Register URLs that will be precached in the runtime cache. (Yes, this sounds somewhat strange.)
	 *
	 * Note that the PWA plugin handles the precaching of custom logo, custom header,
	 * and custom background. The PWA plugin also handles precaching & serving of the
	 * offline/500 error pages and enabling navigation preload.
	 *
	 * @link https://github.com/ampproject/amp-by-example/blob/4593af61609898043302a101826ddafe7206bfd9/boilerplate-generator/templates/files/serviceworkerJs.js#L9-L22
	 * @see AMP_Service_Worker::add_cdn_script_caching()
	 *
	 * @return array Runtime pre-cached URLs.
	 */
	public static function get_precached_script_cdn_urls() {

		// List of AMP scripts that we know will be used in WordPress always.
		$precached_handles = [
			'amp-runtime',
			'amp-bind', // Used by comments.
			'amp-form', // Used by comments.
			'amp-install-serviceworker',
		];

		$theme_support = AMP_Theme_Support::get_theme_support_args();
		if ( ! empty( $theme_support['comments_live_list'] ) ) {
			$precached_handles[] = 'amp-live-list';
		}

		if ( amp_get_analytics() ) {
			$precached_handles[] = 'amp-analytics';
		}

		$urls = [];
		foreach ( $precached_handles as $handle ) {
			if ( wp_script_is( $handle, 'registered' ) ) {
				$urls[] = wp_scripts()->registered[ $handle ]->src;
			}
		}

		return $urls;
	}

	/**
	 * Add hooks to install the service worker from AMP page.
	 */
	public static function add_install_hooks() {
		if ( ! amp_is_request() ) {
			return;
		}

		// Prevent validation error due to the script that installs the service worker on non-AMP pages.
		foreach ( [ 'wp_print_scripts', 'wp_print_footer_scripts' ] as $action ) {
			$priority = has_action( $action, 'wp_print_service_workers' );
			if ( false !== $priority ) {
				remove_action( $action, 'wp_print_service_workers', $priority );
			}
		}

		add_action( 'wp_footer', [ __CLASS__, 'install_service_worker' ] );
		add_action( 'amp_post_template_footer', [ __CLASS__, 'install_service_worker' ] );
	}

	/**
	 * Install service worker(s).
	 *
	 * @since 1.1
	 * @see wp_print_service_workers()
	 * @link https://github.com/xwp/pwa-wp
	 */
	public static function install_service_worker() {
		if ( ! function_exists( 'wp_service_workers' ) || ! function_exists( 'wp_get_service_worker_url' ) ) {
			return;
		}

		$src        = wp_get_service_worker_url( WP_Service_Workers::SCOPE_FRONT );
		$iframe_src = add_query_arg(
			self::INSTALL_SERVICE_WORKER_IFRAME_QUERY_VAR,
			WP_Service_Workers::SCOPE_FRONT,
			home_url( '/', 'https' )
		);
		?>
		<amp-install-serviceworker
			src="<?php echo esc_url( $src ); ?>"
			data-iframe-src="<?php echo esc_url( $iframe_src ); ?>"
			layout="nodisplay"
		>
		</amp-install-serviceworker>
		<?php
	}

	/**
	 * Handle request to install service worker via iframe.
	 *
	 * @see wp_print_service_workers()
	 * @link https://www.ampproject.org/docs/reference/components/amp-install-serviceworker#data-iframe-src-(optional)
	 */
	public static function handle_service_worker_iframe_install() {
		if ( ! isset( $GLOBALS['wp']->query_vars[ self::INSTALL_SERVICE_WORKER_IFRAME_QUERY_VAR ] ) ) {
			return;
		}

		$scope = (int) $GLOBALS['wp']->query_vars[ self::INSTALL_SERVICE_WORKER_IFRAME_QUERY_VAR ];
		if ( WP_Service_Workers::SCOPE_ADMIN !== $scope && WP_Service_Workers::SCOPE_FRONT !== $scope ) {
			wp_die(
				esc_html__( 'No service workers registered for the requested scope.', 'amp' ),
				esc_html__( 'Service Worker Installation', 'amp' ),
				[ 'response' => 404 ]
			);
		}

		$front_scope = home_url( '/', 'relative' );

		?>
		<!DOCTYPE html>
		<html>
			<head>
				<meta charset="utf-8">
				<title><?php esc_html_e( 'Service Worker Installation', 'amp' ); ?></title>
				<meta name="robots" content="noindex">
			</head>
			<body>
				<?php esc_html_e( 'Installing service worker...', 'amp' ); ?>
				<?php
				printf(
					'<script>navigator.serviceWorker.register( %s, %s );</script>',
					wp_json_encode( wp_get_service_worker_url( $scope ) ),
					wp_json_encode( [ 'scope' => $front_scope ] )
				);
				?>
			</body>
		</html>
		<?php

		// Die in a way that can be unit tested.
		add_filter(
			'wp_die_handler',
			static function() {
				return static function() {
					die();
				};
			},
			1
		);
		wp_die();
	}
}
PK.3Yq�s
�B�B/bunyad-amp/includes/class-amp-theme-support.php<?php
/**
 * Class AMP_Theme_Support
 *
 * @package AMP
 */

use AmpProject\Amp;
use AmpProject\AmpWP\ConfigurationArgument;
use AmpProject\AmpWP\Dom\Options;
use AmpProject\AmpWP\ExtraThemeAndPluginHeaders;
use AmpProject\AmpWP\Optimizer\OptimizerService;
use AmpProject\AmpWP\Optimizer\Transformer\AmpSchemaOrgMetadata;
use AmpProject\AmpWP\Optimizer\Transformer\AmpSchemaOrgMetadataConfiguration;
use AmpProject\AmpWP\Option;
use AmpProject\AmpWP\QueryVar;
use AmpProject\AmpWP\Sandboxing;
use AmpProject\AmpWP\Services;
use AmpProject\AmpWP\ValidationExemption;
use AmpProject\DevMode;
use AmpProject\Dom\Document;
use AmpProject\Extension;
use AmpProject\Html\Attribute;
use AmpProject\Html\RequestDestination;
use AmpProject\Html\Tag;
use AmpProject\Optimizer;
use AmpProject\Optimizer\Configuration\TransformedIdentifierConfiguration;
use AmpProject\Optimizer\Transformer\TransformedIdentifier;

/**
 * Class AMP_Theme_Support
 *
 * Callbacks for adding AMP-related things when theme support is added.
 *
 * @internal
 */
class AMP_Theme_Support {

	/**
	 * Theme support slug.
	 *
	 * @var string
	 */
	const SLUG = 'amp';

	/**
	 * Slug identifying standard website mode.
	 *
	 * @since 1.2
	 * @var string
	 */
	const STANDARD_MODE_SLUG = 'standard';

	/**
	 * Slug identifying transitional website mode.
	 *
	 * @since 1.2
	 * @var string
	 */
	const TRANSITIONAL_MODE_SLUG = 'transitional';

	/**
	 * Slug identifying reader website mode.
	 *
	 * @since 1.2
	 * @var string
	 */
	const READER_MODE_SLUG = 'reader';

	/**
	 * Flag used in args passed to add_theme_support('amp') to indicate transitional mode supported.
	 *
	 * @since 1.2
	 * @var string
	 */
	const PAIRED_FLAG = 'paired';

	/**
	 * The directory name in a theme where Reader Mode templates can be.
	 *
	 * For example, this could be at your-theme-name/amp.
	 *
	 * @var string
	 */
	const READER_MODE_TEMPLATE_DIRECTORY = 'amp';

	/**
	 * Sanitizers, with keys as class names and values as arguments.
	 *
	 * @var array[]
	 */
	protected static $sanitizer_classes = [];

	/**
	 * Embed handlers.
	 *
	 * @var AMP_Base_Embed_Handler[]
	 */
	protected static $embed_handlers = [];

	/**
	 * Template types.
	 *
	 * @var array
	 */
	protected static $template_types = [
		'paged', // Deprecated.
		'index',
		'404',
		'archive',
		'author',
		'category',
		'tag',
		'taxonomy',
		'date',
		'home',
		'front_page',
		'page',
		'search',
		'single',
		'embed',
		'singular',
		'attachment',
	];

	/**
	 * Whether output buffering has started.
	 *
	 * @since 0.7
	 * @var bool
	 */
	protected static $is_output_buffering = false;

	/**
	 * Schema.org metadata
	 *
	 * @var array
	 */
	protected static $metadata;

	/**
	 * Initialize.
	 *
	 * @since 0.7
	 */
	public static function init() {
		/**
		 * Starts the server-timing measurement for the entire output buffer capture.
		 *
		 * @since 2.0
		 * @internal
		 *
		 * @param string      $event_name        Name of the event to record.
		 * @param string|null $event_description Optional. Description of the event
		 *                                       to record. Defaults to null.
		 * @param string[]    $properties        Optional. Additional properties to add
		 *                                       to the logged record.
		 * @param bool        $verbose_only      Optional. Whether to only show the
		 *                                       event in verbose mode. Defaults to
		 *                                       false.
		 */
		do_action( 'amp_server_timing_start', 'amp_output_buffer' );

		// Ensure extra theme support for core themes is in place.
		AMP_Core_Theme_Sanitizer::extend_theme_support();

		/*
		 * Note that wp action is use instead of template_redirect because some themes/plugins output
		 * the response at this action and then short-circuit with exit. So this is why the the preceding
		 * action to template_redirect--the wp action--is used instead.
		 */
		if ( ! is_admin() ) {
			add_action( 'wp', [ __CLASS__, 'finish_init' ], PHP_INT_MAX );
		}
	}

	/**
	 * Determine whether theme support was added via admin option.
	 *
	 * @since 1.0
	 * @see AMP_Theme_Support::read_theme_support()
	 * @see AMP_Theme_Support::get_support_mode()
	 * @codeCoverageIgnore
	 * @deprecated Support is always determined by the option.
	 *
	 * @return bool Support added via option.
	 */
	public static function is_support_added_via_option() {
		_deprecated_function( __METHOD__, '2.0.0' );
		return true;
	}

	/**
	 * Get the theme support mode added via admin option.
	 *
	 * @return null|string Support added via option, with null meaning Reader, and otherwise being 'standard' or 'transitional'.
	 * @see AMP_Theme_Support::read_theme_support()
	 * @see AMP_Theme_Support::TRANSITIONAL_MODE_SLUG
	 * @see AMP_Theme_Support::STANDARD_MODE_SLUG
	 *
	 * @since 1.2
	 * @deprecated
	 * @codeCoverageIgnore
	 */
	public static function get_support_mode_added_via_option() {
		_deprecated_function( __METHOD__, '2.0.0', 'AMP_Options_Manager::get_option' );
		$value = AMP_Options_Manager::get_option( Option::THEME_SUPPORT );
		if ( self::READER_MODE_SLUG === $value ) {
			$value = null;
		}
		return $value;
	}

	/**
	 * Get the theme support mode added via theme.
	 *
	 * @return null|string Support added via theme, with null meaning Reader, and otherwise being 'standard' or 'transitional'.
	 * @see AMP_Theme_Support::read_theme_support()
	 * @see AMP_Theme_Support::TRANSITIONAL_MODE_SLUG
	 * @see AMP_Theme_Support::STANDARD_MODE_SLUG
	 *
	 * @since 1.2
	 * @deprecated
	 * @codeCoverageIgnore
	 */
	public static function get_support_mode_added_via_theme() {
		_deprecated_function( __METHOD__, '2.0.0', 'current_theme_supports' );
		$theme_support_args = self::get_theme_support_args();
		if ( ! $theme_support_args ) {
			return null;
		}
		return empty( $theme_support_args[ self::PAIRED_FLAG ] ) ? self::STANDARD_MODE_SLUG : self::TRANSITIONAL_MODE_SLUG;
	}

	/**
	 * Get theme support mode.
	 *
	 * @return string Theme support mode.
	 * @see AMP_Theme_Support::read_theme_support()
	 * @see AMP_Theme_Support::TRANSITIONAL_MODE_SLUG
	 * @see AMP_Theme_Support::STANDARD_MODE_SLUG
	 *
	 * @since 1.2
	 * @deprecated
	 * @codeCoverageIgnore
	 */
	public static function get_support_mode() {
		_deprecated_function( __METHOD__, '2.0.0', 'AMP_Options_Manager::get_option' );
		return AMP_Options_Manager::get_option( Option::THEME_SUPPORT );
	}

	/**
	 * Check theme support args or add theme support if option is set in the admin.
	 *
	 * In older versions of the plugin, the DB option was only considered if the theme does not already explicitly support AMP.
	 * This is no longer the case. The DB option is the only value that is considered.
	 *
	 * @see AMP_Post_Type_Support::add_post_type_support() For where post type support is added, since it is irrespective of theme support.
	 * @deprecated
	 * @codeCoverageIgnore
	 */
	public static function read_theme_support() {
		_deprecated_function( __METHOD__, '2.0.0' );
	}

	/**
	 * Get the theme support args.
	 *
	 * This avoids having to repeatedly call `get_theme_support()`, check the args, shift an item off the array, and so on.
	 * Note that if the theme's `style.css` has the `AMP` header with a value that when converted to a boolean evaluates to `true`, then this function will return the same
	 * as if the theme had done `add_theme_support('amp')`.
	 *
	 * @since 1.0
	 *
	 * @return array|false Theme support args, or false if theme support is not present.
	 */
	public static function get_theme_support_args() {
		if ( ! current_theme_supports( self::SLUG ) ) {
			$theme_header = wp_get_theme()->get( ExtraThemeAndPluginHeaders::AMP_HEADER );
			if ( rest_sanitize_boolean( $theme_header ) && ExtraThemeAndPluginHeaders::AMP_HEADER_LEGACY !== $theme_header ) {
				return [
					self::PAIRED_FLAG => true,
				];
			}
			return false;
		}
		$support = get_theme_support( self::SLUG );
		if ( isset( $support[0] ) && is_array( $support[0] ) ) {
			$args = $support[0];
		} else {
			$args = [];
		}
		if ( ! isset( $args[ self::PAIRED_FLAG ] ) ) {
			// Formerly when paired was not supplied it defaulted to be false. However, the reality is that
			// the vast majority of themes should be built to work in AMP and non-AMP because AMP can be
			// disabled for any URL just by disabling AMP for the post.
			$args[ self::PAIRED_FLAG ] = true;
		}
		return $args;
	}

	/**
	 * Gets whether the parent or child theme supports Reader Mode.
	 *
	 * True if the theme does not call add_theme_support( 'amp' ) at all,
	 * and it has an amp/ directory for templates.
	 *
	 * @return bool Whether the theme supports Reader Mode.
	 */
	public static function supports_reader_mode() {
		return (
			! current_theme_supports( self::SLUG )
			&&
			(
				is_dir( trailingslashit( get_template_directory() ) . self::READER_MODE_TEMPLATE_DIRECTORY )
				||
				is_dir( trailingslashit( get_stylesheet_directory() ) . self::READER_MODE_TEMPLATE_DIRECTORY )
			)
		);
	}

	/**
	 * Finish initialization once query vars are set.
	 *
	 * @since 0.7
	 */
	public static function finish_init() {
		if ( ! amp_is_request() ) {
			return;
		}

		if ( amp_is_legacy() ) {
			// Make sure there is no confusion when serving the legacy Reader template that the normal theme hooks should not be used.
			remove_theme_support( self::SLUG );

			add_filter(
				'template_include',
				static function() {
					return AMP__DIR__ . '/includes/templates/reader-template-loader.php';
				},
				PHP_INT_MAX
			);
		} else {
			$theme_support = self::get_theme_support_args();
			if ( false === $theme_support ) {
				// Make sure that 'amp' theme support is present for plugins can use `current_theme_supports('amp')` as
				// a signal for whether to use standard template hooks instead of legacy Reader AMP post template hooks.
				add_theme_support( self::SLUG );
			} elseif ( ! empty( $theme_support['template_dir'] ) ) {
				self::add_amp_template_filters();
			}
		}

		self::add_hooks();
		self::$sanitizer_classes = amp_get_content_sanitizers();
		self::$sanitizer_classes = AMP_Validation_Manager::filter_sanitizer_args( self::$sanitizer_classes );
		self::$embed_handlers    = self::register_content_embed_handlers();
		self::$sanitizer_classes[ AMP_Embed_Sanitizer::class ]['embed_handlers'] = self::$embed_handlers;

		foreach ( self::$sanitizer_classes as $sanitizer_class => $args ) {
			if ( method_exists( $sanitizer_class, 'add_buffering_hooks' ) ) {
				call_user_func( [ $sanitizer_class, 'add_buffering_hooks' ], $args );
			}
		}
	}

	/**
	 * Determines whether transitional mode is available.
	 *
	 * When 'amp' theme support has not been added or canonical mode is enabled, then this returns false.
	 *
	 * @since 0.7
	 * @deprecated No longer used. Consider instead `! amp_is_canonical() && amp_is_available()`.
	 * @todo There are ecosystem plugins which are still using this method. See <https://wpdirectory.net/search/01EPD9M5CKWHJ7NMQ1WE0YGPJ5>.
	 *
	 * @see amp_is_canonical()
	 * @see amp_is_available()
	 * @return bool Whether available.
	 */
	public static function is_paired_available() {
		if ( amp_is_legacy() ) {
			return false;
		}

		if ( amp_is_canonical() ) {
			return false;
		}

		$availability = self::get_template_availability();
		return $availability['supported'];
	}

	/**
	 * Determine whether the user is in the Customizer preview iframe.
	 *
	 * @since 0.7
	 *
	 * @return bool Whether in Customizer preview iframe.
	 */
	public static function is_customize_preview_iframe() {
		global $wp_customize;
		return is_customize_preview() && $wp_customize->get_messenger_channel();
	}

	/**
	 * Register filters for loading AMP-specific templates.
	 */
	public static function add_amp_template_filters() {
		foreach ( self::$template_types as $template_type ) {
			// See get_query_template().
			$template_type = preg_replace( '|[^a-z0-9-]+|', '', $template_type );

			add_filter( "{$template_type}_template_hierarchy", [ __CLASS__, 'filter_amp_template_hierarchy' ] );
		}
	}

	/**
	 * Determine template availability of AMP for the given query.
	 *
	 * This is not intended to return whether AMP is available for a _specific_ post. For that, use `amp_is_post_supported()`.
	 *
	 * @since 1.0
	 * @global WP_Query $wp_query
	 * @see amp_is_post_supported()
	 *
	 * @param WP_Query|WP_Post|null $query Query or queried post. If null then the global query will be used.
	 * @return array {
	 *     Template availability.
	 *
	 *     @type bool        $supported Whether the template is supported in AMP.
	 *     @type string|null $template  The ID of the matched template (conditional), such as 'is_singular', or null if nothing was matched.
	 *     @type string[]    $errors    List of the errors or reasons for why the template is not available.
	 * }
	 */
	public static function get_template_availability( $query = null ) {
		global $wp_query;
		if ( ! $query ) {
			$query = $wp_query;
		} elseif ( $query instanceof WP_Post ) {
			$post  = $query;
			$query = new WP_Query();
			if ( 'page' === $post->post_type ) {
				$query->set( 'page_id', $post->ID );
			} else {
				$query->set( 'p', $post->ID );
			}
			$query->queried_object    = $post;
			$query->queried_object_id = $post->ID;
			$query->parse_query_vars();
		}

		$default_response = [
			'errors'    => [],
			'supported' => false,
			'immutable' => false, // Obsolete.
			'template'  => null,
		];

		if ( amp_is_legacy() ) {
			return array_merge(
				$default_response,
				[ 'errors' => [ 'legacy_reader_mode' ] ]
			);
		}

		if ( ! ( $query instanceof WP_Query ) ) {
			_doing_it_wrong( __METHOD__, esc_html__( 'No WP_Query available.', 'amp' ), '1.0' );
			return array_merge(
				$default_response,
				[ 'errors' => [ 'no_query_available' ] ]
			);
		}

		$all_templates_supported = AMP_Options_Manager::get_option( Option::ALL_TEMPLATES_SUPPORTED );

		// Make sure global $wp_query is set in case of conditionals that unfortunately look at global scope.
		$prev_query = $wp_query;
		$wp_query   = $query; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited

		$matching_templates    = [];
		$supportable_templates = self::get_supportable_templates();
		foreach ( $supportable_templates as $id => $supportable_template ) {
			if ( empty( $supportable_template['callback'] ) ) {
				$callback = $id;
			} else {
				$callback = $supportable_template['callback'];
			}

			// If the callback is a method on the query, then call the method on the query itself.
			if ( is_string( $callback ) && 'is_' === substr( $callback, 0, 3 ) && method_exists( $query, $callback ) ) {
				$is_match = call_user_func( [ $query, $callback ] );
			} elseif ( is_callable( $callback ) ) {
				$is_match = $callback( $query );
			} else {
				/* translators: %s: the supportable template ID. */
				_doing_it_wrong( __FUNCTION__, esc_html( sprintf( __( 'Supportable template "%s" does not have a callable callback.', 'amp' ), $id ) ), '1.0' );
				$is_match = false;
			}

			if ( $is_match ) {
				$matching_templates[ $id ] = [
					'template'  => $id,
					'supported' => ! empty( $supportable_template['supported'] ),
				];
			}
		}

		// Restore previous $wp_query (if any).
		$wp_query = $prev_query; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited

		// Make sure children override their parents.
		$matching_template_ids = array_keys( $matching_templates );
		foreach ( array_diff( array_keys( $supportable_templates ), $matching_template_ids ) as $template_id ) {
			unset( $supportable_templates[ $template_id ] );
		}
		foreach ( $matching_template_ids as $id ) {
			$has_children = false;
			foreach ( $supportable_templates as $other_id => $supportable_template ) {
				if ( $other_id === $id ) {
					continue;
				}
				if ( isset( $supportable_template['parent'] ) && $id === $supportable_template['parent'] ) {
					$has_children = true;
					break;
				}
			}

			// Delete all matching parent templates since the child will override them.
			if ( ! $has_children ) {
				$supportable_template = $supportable_templates[ $id ];
				while ( ! empty( $supportable_template['parent'] ) ) {
					$parent = $supportable_template['parent'];

					/*
					 * If the parent is not amongst the supportable templates, then something is off in terms of hierarchy.
					 * Either the matching is off-track, or the template is badly configured.
					 */
					if ( ! array_key_exists( $parent, $supportable_templates ) ) {
						_doing_it_wrong(
							__METHOD__,
							esc_html(
								sprintf(
									/* translators: %s: amp_supportable_templates */
									__( 'An expected parent was not found. Did you filter %s to not honor the template hierarchy?', 'amp' ),
									'amp_supportable_templates'
								)
							),
							'1.4'
						);
						break;
					}

					$supportable_template = $supportable_templates[ $parent ];

					// Let the child supported status override the parent's supported status.
					unset( $matching_templates[ $parent ] );
				}
			}
		}

		// If there is more than 1 matching template, the is_home() condition is the default so discard it if there are other matching templates.
		if ( count( $matching_templates ) > 1 && isset( $matching_templates['is_home'] ) ) {
			unset( $matching_templates['is_home'] );
		}

		/*
		 * When there is still more than one matching template, account for ambiguous cases, informed by the order in template-loader.php.
		 * See <https://github.com/WordPress/wordpress-develop/blob/5.1.0/src/wp-includes/template-loader.php#L49-L68>.
		 */
		if ( count( $matching_templates ) > 1 ) {
			$template_conditional_priority_order = [
				'is_embed',
				'is_404',
				'is_search',
				'is_front_page',
				'is_home',
				'is_post_type_archive',
				'is_tax',
				'is_attachment',
				'is_single',
				'is_page',
				'is_singular',
				'is_category',
				'is_tag',
				'is_author',
				'is_date',
				'is_archive',
			];

			// Obtain the template conditionals for each matching template ID (e.g. 'is_post_type_archive[product]' => 'is_post_type_archive').
			$template_conditional_id_mapping = [];
			foreach ( array_keys( $matching_templates ) as $template_id ) {
				$template_conditional_id_mapping[ strtok( $template_id, '[' ) ] = $template_id;
			}

			// If there are any custom supportable templates, only consider them since they would override the conditional logic in core.
			$custom_template_conditions = array_diff(
				array_keys( $template_conditional_id_mapping ),
				$template_conditional_priority_order
			);
			if ( ! empty( $custom_template_conditions ) ) {
				$matching_templates = wp_array_slice_assoc(
					$matching_templates,
					array_values( wp_array_slice_assoc( $template_conditional_id_mapping, $custom_template_conditions ) )
				);
			} else {
				/*
				 * Otherwise, iterate over the template conditionals in the order they occur in the if/elseif/else conditional chain.
				 * to then populate $matching_templates with just this one entry.
				 */
				foreach ( $template_conditional_priority_order as $template_conditional ) {
					if ( isset( $template_conditional_id_mapping[ $template_conditional ] ) ) {
						$template_id        = $template_conditional_id_mapping[ $template_conditional ];
						$matching_templates = [
							$template_id => $matching_templates[ $template_id ],
						];
						break;
					}
				}
			}
		}

		/*
		 * If there are more than one matching templates, then something is probably not right.
		 * Template conditions need to be set up properly to prevent this from happening.
		 */
		if ( count( $matching_templates ) > 1 ) {
			_doing_it_wrong(
				__METHOD__,
				esc_html(
					sprintf(
						/* translators: %s: amp_supportable_templates */
						__( 'Did not expect there to be more than one matching template. Did you filter %s to not honor the template hierarchy?', 'amp' ),
						'amp_supportable_templates'
					)
				),
				'1.0'
			);
		}

		$matching_template = array_shift( $matching_templates );

		// If there aren't any matching templates left that are supported, then we consider it to not be available.
		if ( ! $matching_template ) {
			if ( $all_templates_supported ) {
				return array_merge(
					$default_response,
					[
						'supported' => true,
					]
				);
			}

			return array_merge(
				$default_response,
				[ 'errors' => [ 'no_matching_template' ] ]
			);
		}
		$matching_template = array_merge( $default_response, $matching_template );

		// If there aren't any matching templates left that are supported, then we consider it to not be available.
		if ( empty( $matching_template['supported'] ) ) {
			$matching_template['errors'][] = 'template_unsupported';
		}

		// For singular queries, amp_is_post_supported() is given the final say.
		if ( $query->is_singular() || $query->is_posts_page ) {
			/**
			 * Queried object.
			 *
			 * @var WP_Post $queried_object
			 */
			$queried_object = $query->get_queried_object();
			if ( $queried_object instanceof WP_Post ) {
				$support_errors = AMP_Post_Type_Support::get_support_errors( $queried_object );
				if ( ! empty( $support_errors ) ) {
					$matching_template['errors']    = array_merge( $matching_template['errors'], $support_errors );
					$matching_template['supported'] = false;
				}
			}
		}

		return $matching_template;
	}

	/**
	 * Get the templates which can be supported.
	 *
	 * @param array $options Optional AMP options to override what has been saved.
	 * @return array Supportable templates.
	 */
	public static function get_supportable_templates( $options = [] ) {
		$options = array_merge(
			AMP_Options_Manager::get_options(),
			$options
		);

		$templates = [
			'is_singular' => [
				'label' => __( 'Singular', 'amp' ),
			],
		];
		if ( 'page' === get_option( 'show_on_front' ) ) {
			$templates['is_front_page'] = [
				'label'  => __( 'Homepage', 'amp' ),
				'parent' => 'is_singular',
			];
			if ( AMP_Post_Meta_Box::DISABLED_STATUS === get_post_meta( get_option( 'page_on_front' ), AMP_Post_Meta_Box::STATUS_POST_META_KEY, true ) ) {
				/* translators: %s: the URL to the edit post screen. */
				$templates['is_front_page']['description'] = sprintf( __( 'Currently disabled at the <a href="%s">page level</a>.', 'amp' ), esc_url( get_edit_post_link( get_option( 'page_on_front' ) ) ) );
			}

			// In other words, same as is_posts_page, *but* it not is_singular.
			$templates['is_home'] = [
				'label' => __( 'Blog', 'amp' ),
			];
			if ( AMP_Post_Meta_Box::DISABLED_STATUS === get_post_meta( get_option( 'page_for_posts' ), AMP_Post_Meta_Box::STATUS_POST_META_KEY, true ) ) {
				/* translators: %s: the URL to the edit post screen. */
				$templates['is_home']['description'] = sprintf( __( 'Currently disabled at the <a href="%s">page level</a>.', 'amp' ), esc_url( get_edit_post_link( get_option( 'page_for_posts' ) ) ) );
			}
		} else {
			$templates['is_home'] = [
				'label' => __( 'Homepage', 'amp' ),
			];
		}

		$templates = array_merge(
			$templates,
			[
				'is_archive' => [
					'label' => __( 'Archives', 'amp' ),
				],
				'is_author'  => [
					'label'  => __( 'Author', 'amp' ),
					'parent' => 'is_archive',
				],
				'is_date'    => [
					'label'  => __( 'Date', 'amp' ),
					'parent' => 'is_archive',
				],
				'is_search'  => [
					'label' => __( 'Search', 'amp' ),
				],
				'is_404'     => [
					'label' => __( 'Not Found (404)', 'amp' ),
				],
			]
		);

		if ( taxonomy_exists( 'category' ) ) {
			$templates['is_category'] = [
				'label'  => get_taxonomy( 'category' )->labels->name,
				'parent' => 'is_archive',
			];
		}
		if ( taxonomy_exists( 'post_tag' ) ) {
			$templates['is_tag'] = [
				'label'  => get_taxonomy( 'post_tag' )->labels->name,
				'parent' => 'is_archive',
			];
		}

		$taxonomy_args = [
			'_builtin' => false,
			'public'   => true,
		];
		foreach ( get_taxonomies( $taxonomy_args, 'objects' ) as $taxonomy ) {
			$templates[ sprintf( 'is_tax[%s]', $taxonomy->name ) ] = [
				'label'    => $taxonomy->labels->name,
				'parent'   => 'is_archive',
				'callback' => static function ( WP_Query $query ) use ( $taxonomy ) {
					return $query->is_tax( $taxonomy->name );
				},
			];
		}

		$post_type_args = [
			'has_archive' => true,
			'public'      => true,
		];
		foreach ( get_post_types( $post_type_args, 'objects' ) as $post_type ) {
			$templates[ sprintf( 'is_post_type_archive[%s]', $post_type->name ) ] = [
				'label'    => $post_type->labels->archives,
				'parent'   => 'is_archive',
				'callback' => static function ( WP_Query $query ) use ( $post_type ) {
					return $query->is_post_type_archive( $post_type->name );
				},
			];
		}

		/**
		 * Filters list of supportable templates.
		 *
		 * Each array item should have a key that corresponds to a template conditional function.
		 * If the key is such a function, then the key is used to evaluate whether the given template
		 * entry is a match. Otherwise, a supportable template item can include a callback value which
		 * is used instead. Each item needs a 'label' value. Additionally, if the supportable template
		 * is a subset of another condition (e.g. is_singular > is_single) then this relationship needs
		 * to be indicated via the 'parent' value.
		 *
		 * @since 1.0
		 *
		 * @param array $templates Supportable templates.
		 */
		$templates = apply_filters( 'amp_supportable_templates', $templates );

		$supported_templates = $options[ Option::SUPPORTED_TEMPLATES ];
		$are_all_supported   = $options[ Option::ALL_TEMPLATES_SUPPORTED ];

		$did_filter_supply_supported = false;
		$did_filter_supply_immutable = false;
		foreach ( $templates as $id => &$template ) {
			if ( isset( $template['supported'] ) ) {
				$did_filter_supply_supported = true;
			}
			if ( isset( $template['immutable'] ) ) {
				$did_filter_supply_immutable = true;
			}

			$template['supported']      = $are_all_supported || in_array( $id, $supported_templates, true );
			$template['user_supported'] = $template['supported']; // Obsolete.
			$template['immutable']      = false; // Obsolete.
		}

		if ( $did_filter_supply_supported ) {
			_doing_it_wrong(
				'add_filter',
				esc_html__( 'The AMP plugin no longer allows `amp_supportable_templates` filters to specify a template as being `supported`. This is now managed only in AMP Settings.', 'amp' ),
				'2.0.0'
			);
		}
		if ( $did_filter_supply_immutable ) {
			_doing_it_wrong(
				'add_filter',
				esc_html__( 'The AMP plugin no longer allows `amp_supportable_templates` filters to specify a template\'s support as being `immutable`. This is now managed only in AMP Settings.', 'amp' ),
				'2.0.0'
			);
		}

		return $templates;
	}

	/**
	 * Register hooks.
	 */
	public static function add_hooks() {

		// Prevent emoji detection and emoji loading since platforms/browsers now support emoji natively (and Twemoji is not AMP-compatible).
		add_filter( 'wp_resource_hints', [ __CLASS__, 'filter_resource_hints_to_remove_emoji_dns_prefetch' ], 10, 2 );
		remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
		remove_action( 'wp_print_styles', 'print_emoji_styles' );

		// The AMP version of the skip link is implemented by AMP_Accessibility_Sanitizer::add_skip_link().
		remove_action( 'wp_footer', 'gutenberg_the_skip_link' );
		remove_action( 'wp_footer', 'the_block_template_skip_link' );

		// @todo The wp_mediaelement_fallback() should still run to be injected inside of the audio/video generated by wp_audio_shortcode()/wp_video_shortcode() respectively.
		// @todo When custom scripts appear on the page, this logic should be skipped. So the removal of MediaElement.js script & styles should perhaps be done by the script sanitizer instead.
		// Prevent MediaElement.js scripts/styles from being enqueued.
		add_filter(
			'wp_video_shortcode_library',
			static function() {
				return 'amp';
			}
		);
		add_filter(
			'wp_audio_shortcode_library',
			static function() {
				return 'amp';
			}
		);

		// Don't show loading indicator on custom logo since it makes most sense for larger images.
		add_filter(
			'get_custom_logo',
			static function( $html ) {
				return preg_replace( '/(?<=<img\s)/', ' data-amp-noloading="" ', $html );
			},
			1
		);

		add_action( 'admin_bar_init', [ __CLASS__, 'init_admin_bar' ] );
		add_action( 'wp_head', 'amp_add_generator_metadata', 20 );
		add_action( 'wp_enqueue_scripts', [ __CLASS__, 'enqueue_assets' ], 0 ); // Enqueue before theme's styles.
		add_action( 'wp_enqueue_scripts', [ __CLASS__, 'dequeue_customize_preview_scripts' ], 1000 ); // @todo Not really needed anymore since all Customizer assets get dev mode exemptions.
		add_filter( 'customize_partial_render', [ __CLASS__, 'filter_customize_partial_render' ] );
		if ( is_customize_preview() ) {
			add_filter( 'style_loader_tag', [ __CLASS__, 'filter_customize_preview_style_loader_tag' ], 10, 2 );
		}

		add_action( 'wp_footer', 'amp_print_analytics' );

		/*
		 * Start output buffering at very low priority for sake of plugins and themes that use template_redirect
		 * instead of template_include.
		 */
		$priority = defined( 'PHP_INT_MIN' ) ? PHP_INT_MIN : ~PHP_INT_MAX; // phpcs:ignore PHPCompatibility.Constants.NewConstants.php_int_minFound
		add_action( 'template_redirect', [ __CLASS__, 'start_output_buffering' ], $priority );

		add_filter( 'get_header_image_tag', [ __CLASS__, 'amend_header_image_with_video_header' ], PHP_INT_MAX );
		add_action(
			'wp_print_footer_scripts',
			static function() {
				wp_dequeue_script( 'wp-custom-header' );
			},
			0
		);

		// Prevent Interactivity API scripts from being enqueued.
		// TODO: This will need to be updated once Interactivity API is merged from Gutenberg into core.
		remove_action( 'wp_enqueue_scripts', 'gutenberg_register_interactivity_module' );

		if ( class_exists( 'Gutenberg_Modules' ) ) {
			remove_action( 'wp_head', [ 'Gutenberg_Modules', 'print_import_map' ] );
			remove_action( 'wp_footer', [ 'Gutenberg_Modules', 'print_import_map' ] );
			remove_action( 'wp_head', [ 'Gutenberg_Modules', 'print_enqueued_modules' ] );
			remove_action( 'wp_footer', [ 'Gutenberg_Modules', 'print_enqueued_modules' ] );
			remove_action( 'wp_head', [ 'Gutenberg_Modules', 'print_module_preloads' ] );
			remove_action( 'wp_footer', [ 'Gutenberg_Modules', 'print_module_preloads' ] );
			remove_action( 'wp_footer', [ 'Gutenberg_Modules', 'print_import_map_polyfill' ], 11 );
		}
	}

	/**
	 * Filter resource hints to remove the emoji CDN (s.w.org).
	 *
	 * @since 2.2
	 * @see wp_resource_hints()
	 *
	 * @param string[] $urls URLs.
	 * @param string   $type Resource hint relation.
	 * @return string[] Filtered URLs.
	 */
	public static function filter_resource_hints_to_remove_emoji_dns_prefetch( $urls, $type ) {
		if ( 'dns-prefetch' === $type ) {
			$urls = array_filter(
				$urls,
				static function ( $url ) {
					return 's.w.org' !== wp_parse_url( $url, PHP_URL_HOST );
				}
			);
		}
		return $urls;
	}

	/**
	 * Register/override widgets.
	 *
	 * @deprecated As of 2.0 the AMP_Core_Block_Handler will sanitize the core widgets instead.
	 * @global WP_Widget_Factory
	 * @return void
	 */
	public static function register_widgets() {
		_deprecated_function( __METHOD__, '2.0.0' );
		global $wp_widget_factory;
		foreach ( $wp_widget_factory->widgets as $registered_widget ) {
			$registered_widget_class_name = get_class( $registered_widget );
			if ( ! preg_match( '/^WP_Widget_(.+)$/', $registered_widget_class_name, $matches ) ) {
				continue;
			}
			$amp_class_name = 'AMP_Widget_' . $matches[1];
			if ( ! class_exists( $amp_class_name ) || is_a( $amp_class_name, $registered_widget_class_name ) ) {
				continue;
			}

			unregister_widget( $registered_widget_class_name );
			register_widget( $amp_class_name );
		}
	}

	/**
	 * Register content embed handlers.
	 *
	 * This was copied from `AMP_Content::register_embed_handlers()` due to being a private method
	 * and due to `AMP_Content` not being well suited for use in AMP canonical.
	 *
	 * @see AMP_Content::register_embed_handlers()
	 * @global int $content_width
	 * @return AMP_Base_Embed_Handler[] Handlers.
	 */
	public static function register_content_embed_handlers() {
		global $content_width;

		$embed_handlers = [];
		foreach ( amp_get_content_embed_handlers() as $embed_handler_class => $args ) {

			/**
			 * Embed handler.
			 *
			 * @type AMP_Base_Embed_Handler $embed_handler
			 */
			$embed_handler = new $embed_handler_class(
				array_merge(
					[
						'content_max_width' => ! empty( $content_width ) ? $content_width : AMP_Post_Template::CONTENT_MAX_WIDTH, // Back-compat.
					],
					$args
				)
			);

			if ( ! $embed_handler instanceof AMP_Base_Embed_Handler ) {
				_doing_it_wrong(
					__METHOD__,
					esc_html(
						sprintf(
							/* translators: 1: embed handler. 2: AMP_Base_Embed_Handler */
							__( 'Embed Handler (%1$s) must extend `%2$s`', 'amp' ),
							esc_html( $embed_handler_class ),
							AMP_Base_Embed_Handler::class
						)
					),
					'0.1'
				);
				continue;
			}

			$embed_handler->register_embed();
			$embed_handlers[] = $embed_handler;
		}

		return $embed_handlers;
	}

	/**
	 * Add the comments template placeholder marker
	 *
	 * @codeCoverageIgnore
	 * @deprecated 1.1.0 This functionality was moved to AMP_Comments_Sanitizer
	 *
	 * @param array $args the args for the comments list.
	 * @return array Args to return.
	 */
	public static function set_comments_walker( $args ) {
		_deprecated_function( __METHOD__, '1.1' );
		$amp_walker     = new AMP_Comment_Walker();
		$args['walker'] = $amp_walker;
		return $args;
	}

	/**
	 * Prepends template hierarchy with template_dir for AMP transitional mode templates.
	 *
	 * @param array $templates Template hierarchy.
	 * @return array Templates.
	 */
	public static function filter_amp_template_hierarchy( $templates ) {
		$args = self::get_theme_support_args();
		if ( isset( $args['template_dir'] ) ) {
			$amp_templates = [];
			foreach ( $templates as $template ) {
				$amp_templates[] = $args['template_dir'] . '/' . $template; // Let template_dir have precedence.
				$amp_templates[] = $template;
			}
			$templates = $amp_templates;
		}
		return $templates;
	}

	/**
	 * Get the canonical/self (non-paired) URL for current request.
	 *
	 * For paired AMP sites, this is not the actual "canonical" URL but rather just the non-amphtml version of the current
	 * paired URL. For AMP-first sites, this returns just the current self URL. If desiring to have an actual semantically
	 * canonical URL, then a plugin should be added which adds the desired link to the page. As it stands, this method
	 * is only used to add canonical links when a page lacks it in the first place.
	 *
	 * @link https://www.ampproject.org/docs/reference/spec#canon.
	 *
	 * @return string Canonical/self URL.
	 */
	public static function get_current_canonical_url() {
		$current_url = amp_get_current_url();
		if ( ! amp_is_canonical() ) {
			$current_url = amp_remove_paired_endpoint( $current_url );
		}
		return $current_url;
	}

	/**
	 * Get the ID for the amp-state.
	 *
	 * @since 0.7
	 * @deprecated Logic moved to AMP_Comments_Sanitizer.
	 *
	 * @param int $post_id Post ID.
	 * @return string ID for amp-state.
	 */
	public static function get_comment_form_state_id( $post_id ) {
		_deprecated_function( __METHOD__, '2.2' );
		return sprintf( 'commentform_post_%d', $post_id );
	}

	/**
	 * Filter comment form args to an element with [text] AMP binding wrap the title reply.
	 *
	 * @since 0.7
	 * @see comment_form()
	 * @deprecated Logic moved to AMP_Comments_Sanitizer.
	 *
	 * @param array $default_args Comment form arg defaults.
	 * @return array Filtered comment form args.
	 */
	public static function filter_comment_form_defaults( $default_args ) {
		_deprecated_function( __METHOD__, '2.2' );

		// Obtain the actual args provided to the comment_form() function since it is not available in the filter.
		$args      = [];
		$backtrace = debug_backtrace(); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_debug_backtrace -- Due to limitation in WordPress core.
		foreach ( $backtrace as $call ) {
			if ( 'comment_form' === $call['function'] ) {
				$args = isset( $call['args'][0] ) ? $call['args'][0] : [];
				break;
			}
		}

		// Abort if the comment_form() was called with arguments which we cannot override the defaults for.
		// @todo This and the debug_backtrace() call above would be unnecessary if WordPress had a comment_form_args filter.
		$overridden_keys = [ 'cancel_reply_before', 'title_reply', 'title_reply_before', 'title_reply_to' ];
		foreach ( $overridden_keys as $key ) {
			if ( array_key_exists( $key, $args ) && array_key_exists( $key, $default_args ) && $default_args[ $key ] !== $args[ $key ] ) {
				return $default_args;
			}
		}

		$state_id     = self::get_comment_form_state_id( get_the_ID() );
		$text_binding = sprintf(
			'%s.replyToName ? %s : %s',
			$state_id,
			str_replace(
				'%s',
				sprintf( '" + %s.replyToName + "', $state_id ),
				wp_json_encode( $default_args['title_reply_to'], JSON_UNESCAPED_UNICODE )
			),
			wp_json_encode( $default_args['title_reply'], JSON_UNESCAPED_UNICODE )
		);

		$default_args['title_reply_before'] .= sprintf(
			'<span [text]="%s">',
			esc_attr( $text_binding )
		);
		$default_args['cancel_reply_before'] = '</span>' . $default_args['cancel_reply_before'];
		return $default_args;
	}

	/**
	 * Modify the comment reply link for AMP.
	 *
	 * @since 0.7
	 * @see get_comment_reply_link()
	 * @deprecated Logic moved to AMP_Comments_Sanitizer.
	 *
	 * @param string     $link    The HTML markup for the comment reply link.
	 * @param array      $args    An array of arguments overriding the defaults.
	 * @param WP_Comment $comment The object of the comment being replied.
	 * @return string Comment reply link.
	 */
	public static function filter_comment_reply_link( $link, $args, $comment ) {
		_deprecated_function( __METHOD__, '2.2' );

		// Continue to show default link to wp-login when user is not logged-in.
		if ( get_option( 'comment_registration' ) && ! is_user_logged_in() ) {
			return $args['before'] . $link . $args['after'];
		}

		$state_id  = self::get_comment_form_state_id( get_the_ID() );
		$tap_state = [
			$state_id => [
				'replyToName' => $comment->comment_author,
				'values'      => [
					'comment_parent' => (string) $comment->comment_ID,
				],
			],
		];

		// @todo Figure out how to support add_below. Instead of moving the form, what about letting the form get a fixed position?
		$link = sprintf(
			'<a rel="nofollow" class="comment-reply-link" href="%s" on="%s" aria-label="%s">%s</a>',
			esc_attr( '#' . $args['respond_id'] ),
			esc_attr( sprintf( 'tap:AMP.setState( %s )', wp_json_encode( $tap_state, JSON_UNESCAPED_UNICODE ) ) ),
			esc_attr( sprintf( $args['reply_to_text'], $comment->comment_author ) ),
			$args['reply_text']
		);
		return $args['before'] . $link . $args['after'];
	}

	/**
	 * Filters the cancel comment reply link HTML.
	 *
	 * @since 0.7
	 * @see get_cancel_comment_reply_link()
	 * @deprecated Logic moved to AMP_Comments_Sanitizer.
	 *
	 * @param string $formatted_link The HTML-formatted cancel comment reply link.
	 * @param string $link           Cancel comment reply link URL.
	 * @param string $text           Cancel comment reply link text.
	 * @return string Cancel reply link.
	 */
	public static function filter_cancel_comment_reply_link( $formatted_link, $link, $text ) {
		_deprecated_function( __METHOD__, '2.2' );

		if ( empty( $text ) ) {
			$text = __( 'Click here to cancel reply.', 'default' );
		}

		$state_id  = self::get_comment_form_state_id( get_the_ID() );
		$tap_state = [
			$state_id => [
				'replyToName' => '',
				'values'      => [
					'comment_parent' => '0',
				],
			],
		];

		$respond_id = 'respond'; // Hard-coded in comment_form() and default value in get_comment_reply_link().
		return sprintf(
			'<a id="cancel-comment-reply-link" href="%s" %s [hidden]="%s" on="%s">%s</a>',
			esc_url( remove_query_arg( 'replytocom' ) . '#' . $respond_id ),
			isset( $_GET['replytocom'] ) ? '' : ' hidden', // phpcs:ignore
			esc_attr( sprintf( '%s.values.comment_parent == "0"', self::get_comment_form_state_id( get_the_ID() ) ) ),
			esc_attr( sprintf( 'tap:AMP.setState( %s )', wp_json_encode( $tap_state, JSON_UNESCAPED_UNICODE ) ) ),
			esc_html( $text )
		);
	}

	/**
	 * Configure the admin bar for AMP.
	 *
	 * @since 1.0
	 */
	public static function init_admin_bar() {
		add_filter( 'style_loader_tag', [ __CLASS__, 'filter_admin_bar_style_loader_tag' ], 10, 2 );
		add_filter( 'script_loader_tag', [ __CLASS__, 'filter_admin_bar_script_loader_tag' ], 10, 2 );

		// Inject the data-ampdevmode attribute into the admin bar bump style. See \WP_Admin_Bar::initialize().
		if ( current_theme_supports( 'admin-bar' ) ) {
			$admin_bar_args  = get_theme_support( 'admin-bar' );
			$header_callback = $admin_bar_args[0]['callback'];
		} else {
			$header_callback = '_admin_bar_bump_cb';
		}

		// @see <https://core.trac.wordpress.org/ticket/58775>.
		if ( ! function_exists( 'wp_enqueue_admin_bar_header_styles' ) ) {
			remove_action( 'wp_head', $header_callback );
		}

		if ( '__return_false' !== $header_callback ) {
			if ( ! function_exists( 'wp_enqueue_admin_bar_header_styles' ) ) {
				ob_start();
				$header_callback();
				$style = ob_get_clean();
				$data  = trim( preg_replace( '#<style[^>]*>(.*)</style>#is', '$1', $style ) ); // See wp_add_inline_style().
			} else {
				$data = '';
			}

			// Override AMP's position:relative on the body for the sake of the AMP viewer, which is not relevant an an Admin Bar context.
			if ( amp_is_dev_mode() ) {
				$data .= 'html:not(#_) > body { position:unset !important; }';
			}

			wp_add_inline_style( 'admin-bar', $data );
		}

		// Emulate customize support script in PHP, to assume Customizer.
		add_action(
			'admin_bar_menu',
			static function() {
				remove_action( 'wp_before_admin_bar_render', 'wp_customize_support_script' );
			},
			41
		);
		add_filter(
			'body_class',
			static function( $body_classes ) {
				return array_merge(
					array_diff(
						$body_classes,
						[ 'no-customize-support' ]
					),
					[ 'customize-support' ]
				);
			}
		);
	}

	/**
	 * Recursively determine if a given dependency depends on another.
	 *
	 * @since 1.3
	 *
	 * @param WP_Dependencies $dependencies      Dependencies.
	 * @param string          $current_handle    Current handle.
	 * @param string          $dependency_handle Dependency handle.
	 * @return bool Whether the current handle is a dependency of the dependency handle.
	 */
	protected static function has_dependency( WP_Dependencies $dependencies, $current_handle, $dependency_handle ) {
		if ( $current_handle === $dependency_handle ) {
			return true;
		}
		if ( ! isset( $dependencies->registered[ $current_handle ] ) ) {
			return false;
		}
		foreach ( $dependencies->registered[ $current_handle ]->deps as $handle ) {
			if ( self::has_dependency( $dependencies, $handle, $dependency_handle ) ) {
				return true;
			}
		}
		return false;
	}

	/**
	 * Check if a handle is exclusively a dependency of another handle.
	 *
	 * For example, check if dashicons is being added exclusively because it is a dependency of admin-bar, as opposed
	 * to being added because it was directly enqueued by a theme or a dependency of some other style.
	 *
	 * @since 1.4.2
	 *
	 * @param WP_Dependencies $dependencies      Dependencies.
	 * @param string          $dependency_handle Dependency handle.
	 * @param string          $dependent_handle  Dependent handle.
	 * @return bool Whether the $handle is exclusively a handle of the $exclusive_dependency handle.
	 */
	protected static function is_exclusively_dependent( WP_Dependencies $dependencies, $dependency_handle, $dependent_handle ) {

		// If a dependency handle is the same as the dependent handle, then this self-referential relationship is exclusive.
		if ( $dependency_handle === $dependent_handle ) {
			return true;
		}

		// Short-circuit if there is no dependency relationship up front.
		if ( ! self::has_dependency( $dependencies, $dependent_handle, $dependency_handle ) ) {
			return false;
		}

		// Check whether any enqueued handle depends on the dependency.
		foreach ( $dependencies->queue as $queued_handle ) {
			// Skip considering the dependent handle.
			if ( $dependent_handle === $queued_handle ) {
				continue;
			}

			// If the dependency handle was directly enqueued, then it is not exclusively dependent.
			if ( $dependency_handle === $queued_handle ) {
				return false;
			}

			// Otherwise, if the dependency handle is depended on by the queued handle while at the same time the queued
			// handle _does_ have a dependency on the supplied dependent handle, then the dependency handle is not
			// exclusively dependent on the dependent handle.
			if (
				self::has_dependency( $dependencies, $queued_handle, $dependency_handle )
				&&
				! self::has_dependency( $dependencies, $queued_handle, $dependent_handle )
			) {
				return false;
			}
		}
		return true;
	}

	/**
	 * Add data-ampdevmode attribute to any enqueued style that depends on the admin-bar.
	 *
	 * @since 1.3
	 *
	 * @param string $tag    The link tag for the enqueued style.
	 * @param string $handle The style's registered handle.
	 * @return string Tag.
	 */
	public static function filter_admin_bar_style_loader_tag( $tag, $handle ) {
		if (
			is_array( wp_styles()->registered['admin-bar']->deps ) && in_array( $handle, wp_styles()->registered['admin-bar']->deps, true ) ?
				self::is_exclusively_dependent( wp_styles(), $handle, 'admin-bar' ) :
				self::has_dependency( wp_styles(), $handle, 'admin-bar' )
		) {
			$tag = preg_replace( '/(?<=<link)(?=\s|>)/i', ' ' . AMP_Rule_Spec::DEV_MODE_ATTRIBUTE, $tag );
		}
		return $tag;
	}

	/**
	 * Add data-ampdevmode attribute to any enqueued style that depends on the `customizer-preview` handle.
	 *
	 * @since 2.0
	 *
	 * @param string $tag    The link tag for the enqueued style.
	 * @param string $handle The style's registered handle.
	 * @return string Tag.
	 */
	public static function filter_customize_preview_style_loader_tag( $tag, $handle ) {
		$customize_preview = 'customize-preview';
		if (
			is_array( wp_styles()->registered[ $customize_preview ]->deps ) && in_array( $handle, wp_styles()->registered[ $customize_preview ]->deps, true )
				? self::is_exclusively_dependent( wp_styles(), $handle, $customize_preview )
				: self::has_dependency( wp_styles(), $handle, $customize_preview )
		) {
			$tag = preg_replace( '/(?<=<link)(?=\s|>)/i', ' ' . AMP_Rule_Spec::DEV_MODE_ATTRIBUTE, $tag );
		}

		return $tag;
	}

	/**
	 * Add data-ampdevmode attribute to any enqueued script that depends on the admin-bar.
	 *
	 * @since 1.3
	 *
	 * @param string $tag    The `<script>` tag for the enqueued script.
	 * @param string $handle The script's registered handle.
	 * @return string Tag.
	 */
	public static function filter_admin_bar_script_loader_tag( $tag, $handle ) {
		if (
			is_array( wp_scripts()->registered['admin-bar']->deps ) && in_array( $handle, wp_scripts()->registered['admin-bar']->deps, true ) ?
				self::is_exclusively_dependent( wp_scripts(), $handle, 'admin-bar' ) :
				self::has_dependency( wp_scripts(), $handle, 'admin-bar' )
		) {
			$tag = preg_replace( '/(?<=<script)(?=\s|>)/i', ' ' . AMP_Rule_Spec::DEV_MODE_ATTRIBUTE, $tag );
		}
		return $tag;
	}

	/**
	 * Ensure the markup exists as required by AMP and elements are in the optimal loading order.
	 *
	 * Ensure meta[charset], meta[name=viewport], and link[rel=canonical] exist, as the validating sanitizer
	 * may have removed an illegal meta[http-equiv] or meta[name=viewport]. For a singular post, core only outputs a
	 * canonical URL by default. Adds the preload links.
	 *
	 * @since 0.7
	 * @link https://www.ampproject.org/docs/reference/spec#required-markup
	 * @link https://amp.dev/documentation/guides-and-tutorials/optimize-and-measure/optimize_amp/
	 * @todo All of this might be better placed inside of a sanitizer.
	 *
	 * @param Document             $dom            Document.
	 * @param string[]             $script_handles AMP script handles for components identified during output buffering.
	 * @param AMP_Base_Sanitizer[] $sanitizers     Sanitizers.
	 */
	public static function ensure_required_markup( Document $dom, $script_handles = [], $sanitizers = [] ) {
		// Gather all links.
		$links = [
			Attribute::REL_PRECONNECT => [
				// Include preconnect link for AMP CDN for browsers that don't support preload.
				AMP_DOM_Utils::create_node(
					$dom,
					Tag::LINK,
					[
						Attribute::REL  => Attribute::REL_PRECONNECT,
						Attribute::HREF => 'https://cdn.ampproject.org',
					]
				),
			],
		];

		$link_elements = $dom->head->getElementsByTagName( Tag::LINK );

		/**
		 * Link element.
		 *
		 * @var DOMElement $link
		 */
		foreach ( $link_elements as $link ) {
			if ( $link->hasAttribute( Attribute::REL ) ) {
				$links[ $link->getAttribute( Attribute::REL ) ][] = $link;
			}
		}

		// Ensure rel=canonical link.
		if ( empty( $links['canonical'] ) ) {
			$rel_canonical = AMP_DOM_Utils::create_node(
				$dom,
				Tag::LINK,
				[
					Attribute::REL  => Attribute::REL_CANONICAL,
					Attribute::HREF => self::get_current_canonical_url(),
				]
			);
			$dom->head->appendChild( $rel_canonical );
		}

		// Store the last meta tag as the previous node to append to.
		$meta_tags     = $dom->head->getElementsByTagName( Tag::META );
		$previous_node = $meta_tags->length > 0 ? $meta_tags->item( $meta_tags->length - 1 ) : $dom->head->firstChild;

		// Handle the title.
		$title = $dom->head->getElementsByTagName( Tag::TITLE )->item( 0 );
		if ( $title ) {
			$title->parentNode->removeChild( $title ); // So we can move it.
			$dom->head->insertBefore( $title, $previous_node->nextSibling );
			$previous_node = $title;
		}

		// Obtain the existing AMP scripts.
		$amp_scripts     = [];
		$ordered_scripts = [];
		$head_scripts    = [];
		$runtime_src     = wp_scripts()->registered[ Amp::RUNTIME ]->src;

		/**
		 * Script element.
		 *
		 * @var DOMElement $script
		 */
		foreach ( $dom->head->getElementsByTagName( Tag::SCRIPT ) as $script ) { // Note that prepare_response() already moved body scripts to head.
			$head_scripts[] = $script;
		}
		foreach ( $head_scripts as $script ) {
			$src = $script->getAttribute( Attribute::SRC );
			if ( ! $src || 'https://cdn.ampproject.org/' !== substr( $src, 0, 27 ) ) {
				continue;
			}
			if ( $runtime_src === $src ) {
				$amp_scripts[ Amp::RUNTIME ] = $script;
			} elseif ( $script->hasAttribute( Attribute::CUSTOM_ELEMENT ) ) {
				$amp_scripts[ $script->getAttribute( Attribute::CUSTOM_ELEMENT ) ] = $script;
			} elseif ( $script->hasAttribute( Attribute::CUSTOM_TEMPLATE ) ) {
				$amp_scripts[ $script->getAttribute( Attribute::CUSTOM_TEMPLATE ) ] = $script;
			} else {
				continue;
			}
			$script->parentNode->removeChild( $script ); // So we can move it.
		}

		// Create scripts for any components discovered from output buffering that are missing.
		foreach ( array_diff( $script_handles, array_keys( $amp_scripts ) ) as $missing_script_handle ) {
			if ( ! wp_script_is( $missing_script_handle, 'registered' ) ) {
				continue;
			}
			$attrs = [
				Attribute::SRC   => wp_scripts()->registered[ $missing_script_handle ]->src,
				Attribute::ASYNC => '',
			];
			if ( Extension::MUSTACHE === $missing_script_handle ) {
				$attrs[ Attribute::CUSTOM_TEMPLATE ] = $missing_script_handle;
			} else {
				$attrs[ Attribute::CUSTOM_ELEMENT ] = $missing_script_handle;
			}

			$amp_scripts[ $missing_script_handle ] = AMP_DOM_Utils::create_node( $dom, Tag::SCRIPT, $attrs );
		}

		// Remove scripts that had already been added but couldn't be detected from output buffering.
		$extension_specs            = AMP_Allowed_Tags_Generated::get_extension_specs();
		$superfluous_script_handles = array_diff(
			array_keys( $amp_scripts ),
			array_merge( $script_handles, [ Amp::RUNTIME ] )
		);

		// Allow the amp-carousel script as a special case to be on the page when there is no <amp-carousel> since the
		// amp-lightbox-gallery component will lazy-load the amp-carousel script when a lightbox is opened, and since
		// amp-carousel v0.1 is still the 'latest' version, this can mean that fixes needed with the 0.2 version won't
		// be present on the page. Adding the amp-carousel v0.2 script is a stated workaround suggested in an AMP core
		// issue: <https://github.com/ampproject/amphtml/issues/35402#issuecomment-887837815>.
		if ( in_array( 'amp-lightbox-gallery', $script_handles, true ) ) {
			$superfluous_script_handles = array_diff( $superfluous_script_handles, [ 'amp-carousel' ] );
		}

		// When opting-in to POST forms, omit the amp-form component entirely since it blocks submission.
		if (
			in_array( Extension::FORM, $script_handles, true )
			&&
			$dom->xpath->query( '//form[ @action and @method and translate( @method, "POST", "post" ) = "post" ]' )->length > 0
		) {
			$superfluous_script_handles[] = Extension::FORM;
		}

		foreach ( $superfluous_script_handles as $superfluous_script_handle ) {
			if ( ! empty( $extension_specs[ $superfluous_script_handle ]['requires_usage'] ) ) {
				unset( $amp_scripts[ $superfluous_script_handle ] );
			}
		}

		/*
		 * "3. If your page includes render-delaying extensions (e.g., amp-experiment, amp-dynamic-css-classes, amp-story),
		 * preload those extensions as they're required by the AMP runtime for rendering the page."
		 * @TODO: Move into RewriteAmpUrls transformer, as that will support self-hosting as well.
		 */
		$prioritized_preloads = [];
		if ( ! isset( $links[ Attribute::REL_PRELOAD ] ) ) {
			$links[ Attribute::REL_PRELOAD ] = [];
		}

		$amp_script_handles = array_keys( $amp_scripts );
		foreach ( array_intersect( Amp::RENDER_DELAYING_EXTENSIONS, $amp_script_handles ) as $script_handle ) {
			if ( ! in_array( $script_handle, Amp::RENDER_DELAYING_EXTENSIONS, true ) ) {
				continue;
			}
			$prioritized_preloads[] = AMP_DOM_Utils::create_node(
				$dom,
				Tag::LINK,
				[
					Attribute::REL  => Attribute::REL_PRELOAD,
					Attribute::AS_  => RequestDestination::SCRIPT,
					Attribute::HREF => $amp_scripts[ $script_handle ]->getAttribute( Attribute::SRC ),
				]
			);
		}
		$links[ Attribute::REL_PRELOAD ] = array_merge( $prioritized_preloads, $links[ Attribute::REL_PRELOAD ] );

		/*
		 * "4. Use preconnect to speedup the connection to other origin where the full resource URL is not known ahead of time,
		 * for example, when using Google Fonts."
		 *
		 * Note that \AMP_Style_Sanitizer::process_link_element() will ensure preconnect links for Google Fonts are present.
		 */
		$link_relations = [ Attribute::REL_PRECONNECT, Attribute::REL_DNS_PREFETCH, Attribute::REL_PRELOAD, Attribute::REL_PRERENDER, Attribute::REL_PREFETCH ];
		foreach ( $link_relations as $rel ) {
			if ( ! isset( $links[ $rel ] ) ) {
				continue;
			}
			foreach ( $links[ $rel ] as $link ) {
				if ( $link->parentNode ) {
					$link->parentNode->removeChild( $link ); // So we can move it.
				}
				$dom->head->insertBefore( $link, $previous_node->nextSibling );
				$previous_node = $link;
			}
		}

		// "5. Load the AMP runtime."
		if ( isset( $amp_scripts[ Amp::RUNTIME ] ) ) {
			$ordered_scripts[ Amp::RUNTIME ] = $amp_scripts[ Amp::RUNTIME ];
			unset( $amp_scripts[ Amp::RUNTIME ] );
		} else {
			$script = $dom->createElement( Tag::SCRIPT );
			$script->setAttribute( Attribute::ASYNC, '' );
			$script->setAttribute( Attribute::SRC, $runtime_src );
			$ordered_scripts[ Amp::RUNTIME ] = $script;
		}

		/*
		 * "6. Specify the <script> tags for render-delaying extensions (e.g., amp-experiment amp-dynamic-css-classes and amp-story"
		 *
		 * {@link https://amp.dev/documentation/guides-and-tutorials/optimize-and-measure/optimize_amp/ AMP Hosting Guide}
		 */
		foreach ( Amp::RENDER_DELAYING_EXTENSIONS as $extension ) {
			if ( isset( $amp_scripts[ $extension ] ) ) {
				$ordered_scripts[ $extension ] = $amp_scripts[ $extension ];
				unset( $amp_scripts[ $extension ] );
			}
		}

		/*
		 * "7. Specify the <script> tags for remaining extensions (e.g., amp-bind ...). These extensions are not render-delaying
		 * and therefore should not be preloaded as they might take away important bandwidth for the initial render."
		 */
		ksort( $amp_scripts );
		$ordered_scripts = array_merge( $ordered_scripts, $amp_scripts );
		foreach ( $ordered_scripts as $ordered_script ) {
			$dom->head->insertBefore( $ordered_script, $previous_node->nextSibling );
			$previous_node = $ordered_script;
		}

		unset( $previous_node );
	}

	/**
	 * Dequeue Customizer assets which are not necessary outside the preview iframe.
	 *
	 * Prevent enqueueing customize-preview styles if not in customizer preview iframe.
	 * These are only needed for when there is live editing of content, such as selective refresh.
	 *
	 * @since 0.7
	 */
	public static function dequeue_customize_preview_scripts() {

		// Dequeue styles unnecessary unless in customizer preview iframe when editing (such as for edit shortcuts).
		if ( ! self::is_customize_preview_iframe() ) {
			wp_dequeue_style( 'customize-preview' );
			foreach ( wp_styles()->registered as $handle => $dependency ) {
				if ( in_array( 'customize-preview', $dependency->deps, true ) ) {
					wp_dequeue_style( $handle );
				}
			}
		}
	}

	/**
	 * Start output buffering.
	 *
	 * @since 0.7
	 * @see AMP_Theme_Support::finish_output_buffering()
	 */
	public static function start_output_buffering() {
		/*
		 * Disable the New Relic Browser agent on AMP responses.
		 * This prevents the New Relic from causing invalid AMP responses due the NREUM script it injects after the meta charset:
		 * https://docs.newrelic.com/docs/browser/new-relic-browser/troubleshooting/google-amp-validator-fails-due-3rd-party-script
		 * Sites with New Relic will need to specially configure New Relic for AMP:
		 * https://docs.newrelic.com/docs/browser/new-relic-browser/installation/monitor-amp-pages-new-relic-browser
		 */
		if ( function_exists( 'newrelic_disable_autorum' ) ) {
			newrelic_disable_autorum();
		}

		// Obtain Schema.org metadata so that it will be available.
		self::$metadata = (array) amp_get_schemaorg_metadata();

		ob_start( [ __CLASS__, 'finish_output_buffering' ] );
		self::$is_output_buffering = true;
	}

	/**
	 * Determine whether output buffering has started.
	 *
	 * @since 0.7
	 * @see AMP_Theme_Support::start_output_buffering()
	 * @see AMP_Theme_Support::finish_output_buffering()
	 *
	 * @return bool Whether output buffering has started.
	 */
	public static function is_output_buffering() {
		return self::$is_output_buffering;
	}

	/**
	 * Finish output buffering.
	 *
	 * @since 0.7
	 * @see AMP_Theme_Support::start_output_buffering()
	 *
	 * @param string $response Buffered Response.
	 * @return string Processed Response.
	 */
	public static function finish_output_buffering( $response ) {
		self::$is_output_buffering = false;

		try {
			$response = self::prepare_response( $response );
		} catch ( Error $error ) { // Only PHP 7+.
			$response = self::render_error_page( $error );
		} catch ( Exception $exception ) {
			$response = self::render_error_page( $exception );
		}

		/**
		 * Fires when server timings should be sent.
		 *
		 * This is immediately before the processed output buffer is sent to the client.
		 *
		 * @since 2.0
		 * @internal
		 */
		do_action( 'amp_server_timing_send' );
		return $response;
	}

	/**
	 * Render error page.
	 *
	 * @param Throwable $throwable Exception or (as of PHP7) Error.
	 */
	private static function render_error_page( $throwable ) {
		$title   = __( 'Failed to prepare AMP page', 'amp' );
		$message = __( 'A PHP error occurred while trying to prepare the AMP response. This may not be caused by the AMP plugin but by some other active plugin or the current theme. You will need to review the error details to determine the source of the error.', 'amp' );

		$error_page = Services::get( 'dev_tools.error_page' );

		$error_page
			->with_title( $title )
			->with_message( $message )
			->with_throwable( $throwable )
			->with_response_code( 500 );

		// Add link to non-AMP version if not canonical.
		if ( ! amp_is_canonical() ) {
			$non_amp_url = amp_remove_paired_endpoint( amp_get_current_url() );

			// Prevent user from being redirected back to AMP version.
			if ( true === AMP_Options_Manager::get_option( Option::MOBILE_REDIRECT ) ) {
				$non_amp_url = add_query_arg( QueryVar::NOAMP, QueryVar::NOAMP_MOBILE, $non_amp_url );
			}

			$error_page->with_back_link(
				$non_amp_url,
				__( 'Go to non-AMP version', 'amp' )
			);
		}

		return $error_page->render();
	}

	/**
	 * Filter rendered partial to convert to AMP.
	 *
	 * @see WP_Customize_Partial::render()
	 *
	 * @param string|mixed $partial Rendered partial.
	 * @return string|mixed Filtered partial.
	 * @global int $content_width
	 */
	public static function filter_customize_partial_render( $partial ) {
		global $content_width;
		if ( is_string( $partial ) && preg_match( '/<\w/', $partial ) ) {
			$dom  = AMP_DOM_Utils::get_dom_from_content( $partial );
			$args = [
				'content_max_width'    => ! empty( $content_width ) ? $content_width : AMP_Post_Template::CONTENT_MAX_WIDTH, // Back-compat.
				'use_document_element' => true,
			];
			AMP_Content_Sanitizer::sanitize_document( $dom, self::$sanitizer_classes, $args ); // @todo Include script assets in response?

			// Move any amp-custom to include in the partial response.
			$amp_custom_style = $dom->xpath->query( '//style[ @amp-custom ]' )->item( 0 );
			if ( $amp_custom_style instanceof DOMElement ) {
				$amp_custom_style->removeAttribute( Attribute::AMP_CUSTOM );
				$amp_custom_style->setAttribute( 'amp-custom-partial', '' );
				$amp_custom_style->textContent = str_replace(
					'/*# sourceURL=amp-custom.css */',
					'/*# sourceURL=amp-custom-partial.css */',
					$amp_custom_style->textContent
				);
				$dom->body->appendChild( $amp_custom_style ); // @todo This could cause layout problems. It may be preferable to move to the head.
			}

			$partial = AMP_DOM_Utils::get_content_from_dom( $dom );
		}
		return $partial;
	}

	/**
	 * Process response to ensure AMP validity.
	 *
	 * @since 0.7
	 *
	 * @param string $response HTML document response. By default it expects a complete document.
	 * @param array  $args     Args to send to the preprocessor/sanitizer/optimizer.
	 * @return string AMP document response.
	 * @global int $content_width
	 */
	public static function prepare_response( $response, $args = [] ) {
		global $content_width;
		$last_error = error_get_last();

		if ( isset( $args['validation_error_callback'] ) ) {
			_doing_it_wrong( __METHOD__, 'Do not supply validation_error_callback arg.', '1.0' );
			unset( $args['validation_error_callback'] );
		}

		$status_code = http_response_code();

		/*
		 * Send a JSON response when the site is failing to handle AMP form submissions with a JSON response as required
		 * or an AMP-Redirect-To response header was not sent. This is a common scenario for plugins that handle form
		 * submissions and show the success page via the POST request's response body instead of invoking wp_redirect(),
		 * in which case AMP_HTTP::intercept_post_request_redirect() will automatically send the AMP-Redirect-To header.
		 * If the POST response is an HTML document then the form submission will appear to not have worked since there
		 * is no success or failure message shown. By catching the case where HTML is sent in the response, we can
		 * automatically send a generic success message when a 200 status is returned or a failure message when a 400+
		 * response code is sent.
		 */
		$is_form_submission = (
			isset( AMP_HTTP::$purged_amp_query_vars[ AMP_HTTP::ACTION_XHR_CONVERTED_QUERY_VAR ] ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			&&
			isset( $_SERVER['REQUEST_METHOD'] )
			&&
			'POST' === $_SERVER['REQUEST_METHOD']
		);
		if ( $is_form_submission && null === json_decode( $response ) && json_last_error() && ( is_bool( $status_code ) || ( $status_code >= 200 && $status_code < 300 ) || $status_code >= 400 ) ) {
			if ( is_bool( $status_code ) ) {
				$status_code = 200; // Not a web server environment.
			}
			if ( ! headers_sent() ) {
				header( 'Content-Type: application/json; charset=utf-8' );
			}
			return wp_json_encode(
				[
					'status_code' => $status_code,
					'status_text' => get_status_header_desc( $status_code ),
				]
			);
		}

		// Abort if response type is not HTML.
		if ( Attribute::TYPE_HTML !== substr( AMP_HTTP::get_response_content_type(), 0, 9 ) ) {
			return $response;
		}

		// Abort if an expected template action didn't fire or if the HTML tag does not have the AMP attribute.
		if ( ! (
			did_action( 'wp_head' )
			||
			did_action( 'wp_footer' )
			||
			did_action( 'amp_post_template_head' )
			||
			did_action( 'amp_post_template_footer' )
			||
			preg_match(
				sprintf(
					'#^(?:<!.*?>|\s+)*+<html(?=\s)[^>]*?\s(%1$s|%2$s|%3$s)(\s|=|>)#is',
					preg_quote( Attribute::AMP, '#' ),
					preg_quote( Attribute::AMP_EMOJI, '#' ),
					preg_quote( Attribute::AMP_EMOJI_ALT, '#' )
				),
				$response
			)
		) ) {
			// Detect whether redirect happened and prevent failing a validation request when that happens,
			// since \AMP_Validation_Manager::validate_url() follows redirects.
			$sent_location_header = false;
			foreach ( headers_list() as $sent_header ) {
				if ( preg_match( '#^location:#i', $sent_header ) ) {
					$sent_location_header = true;
					break;
				}
			}
			$did_redirect = $status_code >= 300 && $status_code < 400 && $sent_location_header;

			if ( AMP_Validation_Manager::is_validate_request() && ! $did_redirect ) {
				if ( ! headers_sent() ) {
					status_header( 400 );
					header( 'Content-Type: application/json; charset=utf-8' );
				}
				return wp_json_encode(
					[
						'code'    => 'RENDERED_PAGE_NOT_AMP',
						'message' => __( 'The requested URL did not result in an AMP page being rendered.', 'amp' ),
					]
				);
			}

			return $response;
		}

		// Enforce UTF-8 encoding as it is a requirement for AMP.
		if ( ! headers_sent() ) {
			header( 'Content-Type: text/html; charset=utf-8' );
		}

		$args = array_merge(
			[
				'content_max_width'    => ! empty( $content_width ) ? $content_width : AMP_Post_Template::CONTENT_MAX_WIDTH, // Back-compat.
				'use_document_element' => true,
				'user_can_validate'    => AMP_Validation_Manager::has_cap(),
			],
			$args
		);

		/**
		 * Stops the server-timing measurement for the entire output buffer capture.
		 *
		 * @since 2.0
		 * @internal
		 *
		 * @param string $event_name Name of the event to stop.
		 */
		do_action( 'amp_server_timing_stop', 'amp_output_buffer' );

		/**
		 * Starts the server-timing measurement for the dom parsing subsystem.
		 *
		 * @since 2.0
		 * @internal
		 *
		 * @param string      $event_name        Name of the event to record.
		 * @param string|null $event_description Optional. Description of the event
		 *                                       to record. Defaults to null.
		 * @param string[]    $properties        Optional. Additional properties to add
		 *                                       to the logged record.
		 * @param bool        $verbose_only      Optional. Whether to only show the
		 *                                       event in verbose mode. Defaults to
		 *                                       false.
		 */
		do_action( 'amp_server_timing_start', 'amp_dom_parse', '', [], true );

		$dom = Document::fromHtml( $response, Options::DEFAULTS );

		if ( AMP_Validation_Manager::is_validate_request() ) {
			AMP_Validation_Manager::remove_illegal_source_stack_comments( $dom );
		}

		/**
		 * Stops the server-timing measurement for the dom parsing subsystem.
		 *
		 * @since 2.0
		 * @internal
		 *
		 * @param string $event_name Name of the event to stop.
		 */
		do_action( 'amp_server_timing_stop', 'amp_dom_parse' );

		/**
		 * Starts the server-timing measurement for the AMP Sanitizer subsystem.
		 *
		 * @since 2.0
		 * @internal
		 *
		 * @param string      $event_name        Name of the event to record.
		 * @param string|null $event_description Optional. Description of the event
		 *                                       to record. Defaults to null.
		 * @param string[]    $properties        Optional. Additional properties to add
		 *                                       to the logged record.
		 * @param bool        $verbose_only      Optional. Whether to only show the
		 *                                       event in verbose mode. Defaults to
		 *                                       false.
		 */
		do_action( 'amp_server_timing_start', 'amp_sanitizer' );

		// Make sure scripts from the body get moved to the head.
		foreach ( $dom->xpath->query( '//body//script[ @custom-element or @custom-template or @src = "https://cdn.ampproject.org/v0.js" ]' ) as $script ) {
			$dom->head->appendChild( $script->parentNode->removeChild( $script ) );
		}

		// Ensure the mandatory amp attribute is present on the html element.
		if ( ! $dom->documentElement->hasAttribute( Attribute::AMP )
			&& ! $dom->documentElement->hasAttribute( Attribute::AMP_EMOJI )
			&& ! $dom->documentElement->hasAttribute( Attribute::AMP_EMOJI_ALT ) ) {
			$dom->documentElement->setAttribute( Attribute::AMP, '' );
		}

		$sanitization_results = AMP_Content_Sanitizer::sanitize_document( $dom, self::$sanitizer_classes, $args );

		/**
		 * Stops the server-timing measurement for the AMP Sanitizer subsystem.
		 *
		 * @since 2.0
		 * @internal
		 *
		 * @param string $event_name Name of the event to stop.
		 */
		do_action( 'amp_server_timing_stop', 'amp_sanitizer' );

		// Respond early with results if performing a validate request.
		if ( AMP_Validation_Manager::is_validate_request() ) {
			return AMP_Validation_Manager::send_validate_response(
				$sanitization_results,
				$status_code,
				$last_error
			);
		}

		/**
		 * Starts the server-timing measurement for the AMP DOM serialization.
		 *
		 * @since 2.0
		 * @internal
		 *
		 * @param string      $event_name        Name of the event to record.
		 * @param string|null $event_description Optional. Description of the event
		 *                                       to record. Defaults to null.
		 * @param string[]    $properties        Optional. Additional properties to add
		 *                                       to the logged record.
		 * @param bool        $verbose_only      Optional. Whether to only show the
		 *                                       event in verbose mode. Defaults to
		 *                                       false.
		 */
		do_action( 'amp_server_timing_start', 'amp_dom_serialize', '', [], true );

		// Gather all component scripts that are used in the document and then render any not already printed.
		$amp_scripts = $sanitization_results['scripts'];
		foreach ( self::$embed_handlers as $embed_handler ) {
			$amp_scripts = array_merge(
				$amp_scripts,
				$embed_handler->get_scripts()
			);
		}
		foreach ( $amp_scripts as $handle => $src ) {
			/*
			 * Make sure the src is up-to-date. This allows for embed handlers to override the
			 * default extension version by defining a different URL.
			 */
			if ( is_string( $src ) && wp_script_is( $handle, 'registered' ) ) {
				wp_scripts()->registered[ $handle ]->src = $src;
			}
		}

		self::ensure_required_markup( $dom, array_keys( $amp_scripts ), $sanitization_results['sanitizers'] );

		$effective_sandboxing_level = Sandboxing::get_effective_level( $dom );
		$has_validation_exemptions  = 3 !== $effective_sandboxing_level;

		$enable_optimizer = array_key_exists( ConfigurationArgument::ENABLE_OPTIMIZER, $args )
			? $args[ ConfigurationArgument::ENABLE_OPTIMIZER ]
			: true;

		/**
		 * Filter whether the generated HTML output should be run through the AMP Optimizer or not.
		 *
		 * @since 1.5.0
		 *
		 * @param bool $enable_optimizer Whether the generated HTML output should be run through the AMP Optimizer or not.
		 */
		$enable_optimizer = apply_filters( 'amp_enable_optimizer', $enable_optimizer );

		if ( $enable_optimizer ) {
			/**
			 * Starts the server-timing measurement for the AMP Optimizer subsystem.
			 *
			 * @since 2.0
			 * @internal
			 *
			 * @param string      $event_name        Name of the event to record.
			 * @param string|null $event_description Optional. Description of the event
			 *                                       to record. Defaults to null.
			 * @param string[]    $properties        Optional. Additional properties to add
			 *                                       to the logged record.
			 * @param bool        $verbose_only      Optional. Whether to only show the
			 *                                       event in verbose mode. Defaults to
			 *                                       false.
			 */
			do_action( 'amp_server_timing_start', 'amp_optimizer' );

			$errors = new Optimizer\ErrorCollection();

			$args['skip_css_max_byte_count_enforcement'] = (
				$has_validation_exemptions
				||
				DevMode::isActiveForDocument( $dom )
			);
			self::get_optimizer( $args )->optimizeDom( $dom, $errors );

			if ( count( $errors ) > 0 ) {
				$error_messages = array_map(
					static function( Optimizer\Error $error ) {
						return ' - ' . $error->getCode() . ': ' . $error->getMessage();
					},
					iterator_to_array( $errors )
				);
				$dom->head->appendChild(
					$dom->createComment( "\n" . __( 'AMP optimization could not be completed due to the following:', 'amp' ) . "\n" . implode( "\n", $error_messages ) . "\n" )
				);
				// @todo Include errors elsewhere than HTML comment?
			}

			/**
			 * Stops the server-timing measurement for the AMP Optimizer subsystem.
			 *
			 * @since 2.0
			 * @internal
			 *
			 * @param string $event_name Name of the event to stop.
			 */
			do_action( 'amp_server_timing_stop', 'amp_optimizer' );
		}

		$can_serve = AMP_Validation_Manager::finalize_validation( $dom );

		// Redirect to the non-AMP version if not on an AMP-first site.
		if ( ! $can_serve && ! amp_is_canonical() ) {
			$non_amp_url = amp_remove_paired_endpoint( amp_get_current_url() );

			// Redirect to include query var to preventing AMP from even being considered available.
			$non_amp_url = add_query_arg( QueryVar::NOAMP, QueryVar::NOAMP_AVAILABLE, $non_amp_url );

			wp_safe_redirect( $non_amp_url, 302 ); // phpcs:ignore WordPressVIPMinimum.Security.ExitAfterRedirect.NoExit -- This is in an output buffer callback handler.
			return esc_html__( 'Redirecting since AMP version not available.', 'amp' );
		}

		// Prevent serving a page as AMP if it is explicitly not valid as otherwise Google Search Console will complain.
		if (
			$has_validation_exemptions
			||
			( $dom->documentElement->hasAttribute( DevMode::DEV_MODE_ATTRIBUTE ) && ! is_user_logged_in() )
		) {
			$dom->documentElement->removeAttribute( Attribute::AMP );
			$dom->documentElement->removeAttribute( Attribute::AMP_EMOJI );
			$dom->documentElement->removeAttribute( Attribute::AMP_EMOJI_ALT );

			/*
			 * Make sure that document.write() is disabled to prevent dynamically-added content (such as added
			 * via amp-live-list) from wiping out the page by introducing any scripts that call this function.
			 */
			if ( array_key_exists( Extension::LIVE_LIST, $amp_scripts ) ) {
				$script = $dom->createElement( Tag::SCRIPT );
				$script->appendChild( $dom->createTextNode( 'document.addEventListener( "DOMContentLoaded", function() { document.write = function( text ) { throw new Error( "[AMP-WP] Prevented document.write() call with: "  + text ); }; } );' ) );
				ValidationExemption::mark_node_as_px_verified( $script );
				$script->setAttributeNode( $dom->createAttribute( DevMode::DEV_MODE_ATTRIBUTE ) );
				$dom->head->appendChild( $script );
			}
		}

		/**
		 * Fires immediately before the DOM is serialized to send as the response body.
		 *
		 * @since 2.2
		 * @internal
		 *
		 * @param Document $dom                        Document prior to serialization.
		 * @param int      $effective_sandboxing_level Effective sandboxing level.
		 */
		do_action( 'amp_finalize_dom', $dom, $effective_sandboxing_level );

		$response = $dom->saveHTML();

		/**
		 * Stops the server-timing measurement for the AMP DOM serialization.
		 *
		 * @since 2.0
		 * @internal
		 *
		 * @param string $event_name Name of the event to stop.
		 */
		do_action( 'amp_server_timing_stop', 'amp_dom_serialize' );

		return $response;
	}

	/**
	 * Optimizer instance to use.
	 *
	 * @param array $args Associative array of arguments to pass into the transformation engine.
	 * @return OptimizerService Optimizer transformation engine to use.
	 */
	private static function get_optimizer( $args ) {
		add_filter(
			'amp_enable_ssr',
			static function () use ( $args ) {
				return array_key_exists( ConfigurationArgument::ENABLE_SSR, $args )
					? $args[ ConfigurationArgument::ENABLE_SSR ]
					: true;
			},
			defined( 'PHP_INT_MIN' ) ? PHP_INT_MIN : ~PHP_INT_MAX // phpcs:ignore PHPCompatibility.Constants.NewConstants.php_int_minFound
		);

		// Supply the Schema.org metadata, previously obtained just before output buffering began, to the AmpSchemaOrgMetadataConfiguration.
		add_filter(
			'amp_optimizer_config',
			function ( $config ) use ( $args ) {
				if ( is_array( self::$metadata ) ) {
					$config[ AmpSchemaOrgMetadata::class ][ AmpSchemaOrgMetadataConfiguration::METADATA ] = self::$metadata;
				}
				if ( ! empty( $args['skip_css_max_byte_count_enforcement'] ) ) {
					$config[ TransformedIdentifier::class ][ TransformedIdentifierConfiguration::ENFORCED_CSS_MAX_BYTE_COUNT ] = false;
				}
				return $config;
			},
			defined( 'PHP_INT_MIN' ) ? PHP_INT_MIN : ~PHP_INT_MAX // phpcs:ignore PHPCompatibility.Constants.NewConstants.php_int_minFound
		);

		return Services::get( 'injector' )->make( OptimizerService::class );
	}

	/**
	 * Enqueue AMP assets if this is an AMP endpoint.
	 *
	 * @since 0.7
	 *
	 * @return void
	 */
	public static function enqueue_assets() {
		// Enqueue default styles expected by sanitizer.
		wp_enqueue_style( 'amp-default' );
	}

	/**
	 * Print the important emoji-related styles.
	 *
	 * @deprecated No longer used since platforms/browsers now support emoji natively. See <https://core.trac.wordpress.org/ticket/35498#comment:7>.
	 * @codeCoverageIgnore
	 * @see print_emoji_styles()
	 * @staticvar bool $printed
	 */
	public static function print_emoji_styles() {
		_deprecated_function( __FUNCTION__, '2.2.0' );
		static $printed = false;

		if ( $printed ) {
			return;
		}

		$printed = true;
		?>
		<style type="text/css">
			img.wp-smiley,
			img.emoji {
				display: inline-block !important; /* Patched from core, which had display:inline */
				border: none !important;
				box-shadow: none !important;
				height: 1em !important;
				width: 1em !important;
				margin: 0 .07em !important;
				vertical-align: -0.1em !important;
				background: none !important;
				padding: 0 !important;
			}
		</style>
		<?php
	}

	/**
	 * Conditionally replace the header image markup with a header video or image.
	 *
	 * This is JS-driven in Core themes like Twenty Sixteen and Twenty Seventeen.
	 * So in order for the header video to display, this replaces the markup of the header image.
	 *
	 * @since 1.0
	 * @link https://github.com/WordPress/wordpress-develop/blob/d002fde80e5e3a083e5f950313163f566561517f/src/wp-includes/js/wp-custom-header.js#L54
	 * @link https://github.com/WordPress/wordpress-develop/blob/d002fde80e5e3a083e5f950313163f566561517f/src/wp-includes/js/wp-custom-header.js#L78
	 * @todo If custom scripts are included on the page, this logic should likely not be performed and a regular <video> should appear.
	 *
	 * @param string $image_markup The image markup to filter.
	 * @return string $html Filtered markup.
	 */
	public static function amend_header_image_with_video_header( $image_markup ) {

		// If there is no video, just pass the image through.
		if ( ! has_header_video() || ! is_header_video_active() ) {
			return $image_markup;
		}

		$video_settings   = get_header_video_settings();
		$parsed_url       = wp_parse_url( $video_settings['videoUrl'] );
		$query            = isset( $parsed_url['query'] ) ? wp_parse_args( $parsed_url['query'] ) : [];
		$video_attributes = [
			Attribute::MEDIA    => '(min-width: ' . $video_settings['minWidth'] . 'px)',
			Attribute::WIDTH    => $video_settings[ Attribute::WIDTH ],
			Attribute::HEIGHT   => $video_settings[ Attribute::HEIGHT ],
			Attribute::LAYOUT   => 'responsive',
			Attribute::AUTOPLAY => '',
			Attribute::LOOP     => '',
			Attribute::ID       => 'wp-custom-header-video',
		];

		$youtube_id = null;
		if ( isset( $parsed_url['host'] ) && preg_match( '/(^|\.)(youtube\.com|youtu\.be)$/', $parsed_url['host'] ) ) {
			if ( 'youtu.be' === $parsed_url['host'] && ! empty( $parsed_url['path'] ) ) {
				$youtube_id = trim( $parsed_url['path'], '/' );
			} elseif ( isset( $query['v'] ) ) {
				$youtube_id = $query['v'];
			}
		}

		// If the video URL is for YouTube, return an <amp-youtube> element.
		if ( ! empty( $youtube_id ) ) {
			$video_markup = AMP_HTML_Utils::build_tag(
				Extension::YOUTUBE,
				array_merge(
					$video_attributes,
					[
						'data-videoid'              => $youtube_id,

						// For documentation on the params, see <https://developers.google.com/youtube/player_parameters>.
						'data-param-rel'            => '0', // Don't show related videos.
						'data-param-showinfo'       => '0', // Don't show video title at the top.
						'data-param-controls'       => '0', // Don't show video controls.
						'data-param-iv_load_policy' => '3', // Suppress annotations.
						'data-param-modestbranding' => '1', // Show modest branding.
						'data-param-playsinline'    => '1', // Prevent fullscreen playback on iOS.
						'data-param-disablekb'      => '1', // Disable keyboard conttrols.
						'data-param-fs'             => '0', // Suppress full screen button.
					]
				)
			);

			// Hide equalizer video animation.
			$video_markup .= '<style>#wp-custom-header-video .amp-video-eq { display:none; }</style>';
		} else {
			$video_markup = AMP_HTML_Utils::build_tag(
				Extension::VIDEO,
				array_merge(
					$video_attributes,
					[
						Attribute::SRC => $video_settings['videoUrl'],
					]
				)
			);
		}

		return $image_markup . $video_markup;
	}
}
PK.3Y���)�)"bunyad-amp/includes/deprecated.php<?php
/**
 * Deprecated functions.
 *
 * @package AMP
 */

use AmpProject\AmpWP\Services;

/**
 * Load classes.
 *
 * @since 0.2
 * @codeCoverageIgnore
 * @deprecated As of 0.6 since autoloading is now employed.
 * @internal
 */
function amp_load_classes() {
	_deprecated_function( __FUNCTION__, '0.6' );
}

/**
 * Conditionally add AMP actions or render the transitional mode template(s).
 *
 * If the request is for an AMP page and this is in 'canonical mode,' redirect to the non-AMP page.
 * It won't need this plugin's template system, nor the frontend actions like the 'rel' link.
 *
 * @codeCoverageIgnore
 * @deprecated This function is not used when 'amp' theme support is added.
 * @global WP_Query $wp_query
 * @since 0.2
 * @return void
 */
function amp_maybe_add_actions() {
	_deprecated_function( __FUNCTION__, '1.5' );

	// Short-circuit when theme supports AMP, as everything is handled by AMP_Theme_Support.
	if ( current_theme_supports( AMP_Theme_Support::SLUG ) ) {
		return;
	}

	// The remaining logic here is for transitional mode running in themes that don't support AMP, the template system in AMP<=0.6.
	global $wp_query;
	if ( ! ( is_singular() || $wp_query->is_posts_page ) || is_feed() ) {
		return;
	}

	$is_amp_request = amp_is_request();

	/**
	 * Queried post object.
	 *
	 * @var WP_Post $post
	 */
	$post = get_queried_object();
	if ( ! amp_is_post_supported( $post ) ) {
		if ( $is_amp_request ) {
			/*
			 * Temporary redirect is used for admin users because reader mode and AMP support can be enabled by user at any time,
			 * so they will be able to make AMP available for this URL and see the change without wrestling with the redirect cache.
			 */
			wp_safe_redirect( get_permalink( $post->ID ), current_user_can( 'manage_options' ) ? 302 : 301 );
			exit;
		}
		return;
	}

	if ( $is_amp_request ) {

		// Prevent infinite URL space under /amp/ endpoint.
		global $wp;
		$path_args = [];
		wp_parse_str( $wp->matched_query, $path_args );
		if ( isset( $path_args[ amp_get_slug() ] ) && '' !== $path_args[ amp_get_slug() ] ) {
			wp_safe_redirect( amp_get_permalink( $post->ID ), 301 );
			exit;
		}

		amp_prepare_render();
	} else {
		amp_add_frontend_actions();
	}
}

/**
 * Add post template actions.
 *
 * @since 0.2
 * @codeCoverageIgnore
 * @deprecated This function is not used when 'amp' theme support is added.
 */
function amp_add_post_template_actions() {
	_deprecated_function( __FUNCTION__, '1.5' );
	require_once AMP__DIR__ . '/includes/amp-post-template-functions.php';
	amp_post_template_init_hooks();
}

/**
 * Add action to do post template rendering at template_redirect action.
 *
 * @since 0.2
 * @since 1.0 The amp_render() function is called at template_redirect action priority 11 instead of priority 10.
 * @codeCoverageIgnore
 * @deprecated This function is not used when 'amp' theme support is added.
 */
function amp_prepare_render() {
	_deprecated_function( __FUNCTION__, '1.5' );
	add_action( 'template_redirect', 'amp_render', 11 );
}

/**
 * Render AMP for queried post.
 *
 * @since 0.1
 * @codeCoverageIgnore
 * @deprecated This function is not used when 'amp' theme support is added.
 */
function amp_render() {
	_deprecated_function( __FUNCTION__, '1.5' );

	// Note that queried object is used instead of the ID so that the_preview for the queried post can apply.
	$post = get_queried_object();
	if ( $post instanceof WP_Post ) {
		amp_render_post( $post );
		exit;
	}
}

/**
 * Render AMP post template.
 *
 * @since 0.5
 * @codeCoverageIgnore
 * @deprecated Rendering a post is now handled by AMP_Theme_Support.
 *
 * @param WP_Post|int $post Post.
 * @global WP_Query $wp_query
 */
function amp_render_post( $post ) {
	_deprecated_function( __FUNCTION__, '1.5' );
	global $wp_query;

	if ( ! ( $post instanceof WP_Post ) ) {
		$post = get_post( $post );
		if ( ! $post ) {
			return;
		}
	}
	$post_id = $post->ID;

	/*
	 * If amp_render_post is called directly outside of the standard endpoint, amp_is_request() will return false,
	 * which is not ideal for any code that expects to run in an AMP context.
	 * Let's force the value to be true while we render AMP.
	 */
	$was_set = isset( $wp_query->query_vars[ amp_get_slug() ] );
	if ( ! $was_set ) {
		$wp_query->query_vars[ amp_get_slug() ] = true;
	}

	// Prevent New Relic from causing invalid AMP responses due the NREUM script it injects after the meta charset.
	if ( extension_loaded( 'newrelic' ) ) {
		newrelic_disable_autorum();
	}

	/**
	 * Fires before rendering a post in AMP.
	 *
	 * This action is not triggered when 'amp' theme support is present. Instead, you should use 'template_redirect' action and check if `amp_is_request()`.
	 *
	 * @since 0.2
	 * @deprecated Check amp_is_request() on the template_redirect action instead.
	 *
	 * @param int $post_id Post ID.
	 */
	do_action( 'pre_amp_render_post', $post_id );

	amp_add_post_template_actions();
	$template = new AMP_Post_Template( $post );
	$template->load();

	if ( ! $was_set ) {
		unset( $wp_query->query_vars[ amp_get_slug() ] );
	}
}

/**
 * Print scripts.
 *
 * @codeCoverageIgnore
 * @deprecated Scripts are now automatically added.
 * @internal
 * @see amp_register_default_scripts()
 * @see amp_filter_script_loader_tag()
 * @param AMP_Post_Template $amp_template Template.
 */
function amp_post_template_add_scripts( $amp_template ) {
	_deprecated_function( __FUNCTION__, '1.5' );
	// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
	echo amp_render_scripts(
		array_merge(
			[
				// Just in case the runtime has been overridden by amp_post_template_data filter.
				'amp-runtime' => $amp_template->get( 'amp_runtime_script' ),
			],
			$amp_template->get( 'amp_component_scripts', [] )
		)
	);
}

/**
 * Print boilerplate CSS.
 *
 * @codeCoverageIgnore
 * @deprecated Boilerplate is now automatically added via the ampproject/amp-toolbox library.
 * @internal
 * @since 0.3
 * @see amp_get_boilerplate_code()
 */
function amp_post_template_add_boilerplate_css() {
	_deprecated_function( __FUNCTION__, '1.5' );
	echo amp_get_boilerplate_code(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
}

/**
 * Print Schema.org metadata.
 *
 * @codeCoverageIgnore
 * @deprecated Since 0.7
 * @internal
 */
function amp_post_template_add_schemaorg_metadata() {
	_deprecated_function( __FUNCTION__, '0.7', 'amp_print_schemaorg_metadata' );
	amp_print_schemaorg_metadata();
}

/**
 * Bootstrap AMP post meta box.
 *
 * This function must be invoked only once through the 'wp_loaded' action.
 *
 * @since 0.6
 * @codeCoverageIgnore
 * @deprecated Since 1.5.0, as admin class bootstrapping is moved to amp_bootstrap_admin().
 * @internal
 */
function amp_post_meta_box() {
	_deprecated_function( __FUNCTION__, '1.5.0' );
}

/**
 * Bootstrap the AMP admin pointer class.
 *
 * @since 1.0
 * @codeCoverageIgnore
 * @deprecated Since 1.5.0, as admin class bootstrapping is moved to amp_bootstrap_admin().
 * @internal
 */
function amp_admin_pointer() {
	_deprecated_function( __FUNCTION__, '1.5.0' );
}

/**
 * Print admin notice if the Xdebug extension is loaded.
 *
 * @since 1.3
 * @deprecated 1.5.0 Warning moved to Site Health.
 * @codeCoverageIgnore
 * @internal
 * @see AmpProject\AmpWP\Admin\SiteHealth::xdebug_extension()
 */
function _amp_xdebug_admin_notice() {
	_deprecated_function( __FUNCTION__, '1.5.0' );

	?>
	<div class="notice notice-warning">
		<p>
			<?php
			esc_html_e(
				'Your server currently has the Xdebug PHP extension loaded. This can cause some of the AMP plugin\'s processes to timeout depending on your system resources and configuration. Please deactivate Xdebug for the best experience.',
				'amp'
			);
			?>
		</p>
	</div>
	<?php
}

/**
 * Redirects the old AMP URL to the new AMP URL.
 *
 * If post slug is updated the amp page with old post slug will be redirected to the updated url.
 *
 * @since 0.5
 * @internal
 * @deprecated
 *
 * @param string $link New URL of the post.
 * @return string URL to be redirected.
 */
function amp_redirect_old_slug_to_new_url( $link ) {
	_deprecated_function( __FUNCTION__, '2.1' );
	return Services::get( 'paired_routing' )->maybe_add_paired_endpoint( $link );
}

/**
 * Fix up WP_Query for front page when amp query var is present.
 *
 * Normally the front page would not get served if a query var is present other than preview, page, paged, and cpage.
 *
 * @since 0.6
 * @internal
 * @see WP_Query::parse_query()
 * @link https://github.com/WordPress/wordpress-develop/blob/0baa8ae85c670d338e78e408f8d6e301c6410c86/src/wp-includes/class-wp-query.php#L951-L971
 * @deprecated
 *
 * @param WP_Query $query Query.
 */
function amp_correct_query_when_is_front_page( WP_Query $query ) {
	_deprecated_function( __FUNCTION__, '2.1' );
	Services::get( 'paired_routing' )->correct_query_when_is_front_page( $query );
}

/**
 * Add frontend actions.
 *
 * @since 0.2
 * @deprecated Since 2.1, moved to PairedRouting.
 * @internal
 */
function amp_add_frontend_actions() {
	_deprecated_function( __FUNCTION__, '2.1' );
	add_action( 'wp_head', 'amp_add_amphtml_link' );
}

/**
 * Add analytics scripts.
 *
 * @internal
 * @deprecated 2.1 This is no longer necessary since amp-analytics is added automatically to the page during post-processing.
 * @codeCoverageIgnore
 *
 * @param array $data Data.
 * @return array Data.
 */
function amp_post_template_add_analytics_script( $data ) {
	_deprecated_function( __FUNCTION__, '2.1' );

	if ( ! empty( $data['amp_analytics'] ) ) {
		$data['amp_component_scripts']['amp-analytics'] = 'https://cdn.ampproject.org/v0/amp-analytics-0.1.js';
	}
	return $data;
}

/**
 * Determine whether the use of Bento components is enabled.
 *
 * When Bento is enabled, newer experimental versions of AMP components are used which incorporate the next generation
 * of the component framework.
 *
 * @since 2.2
 * @link https://blog.amp.dev/2021/01/28/bento/
 *
 * @deprecated 2.5.0 Bento support has been removed.
 * @codeCoverageIgnore
 * @return bool Whether Bento components are enabled.
 */
function amp_is_bento_enabled() {
	_deprecated_function( __FUNCTION__, 'AMP 2.5.0' );

	/**
	 * Filters whether the use of Bento components is enabled.
	 *
	 * When Bento is enabled, newer experimental versions of AMP components are used which incorporate the next generation
	 * of the component framework.
	 *
	 * @since 2.2
	 * @link https://blog.amp.dev/2021/01/28/bento/
	 *
	 * @deprecated 2.5.0 Bento support has been removed.
	 *
	 * @param bool $enabled Enabled.
	 */
	return apply_filters_deprecated( 'amp_bento_enabled', [ false ], 'AMP 2.5.0', 'Remove bento support', 'Bento support has been removed.' );
}
PK.3Y5���+bunyad-amp/includes/uninstall-functions.php<?php
/**
 * Helper function for removing plugin data during uninstalling.
 *
 * @package AMP
 */

namespace AmpProject\AmpWP;

/**
 * Delete data from option table.
 *
 * @return void
 * @internal
 */
function delete_options() {
	$options = get_option( 'amp-options' );

	delete_option( 'amp-options' );
	delete_option( 'amp_css_transient_monitor_time_series' );
	delete_option( 'amp_url_validation_queue' ); // See Validation\URLValidationCron::OPTION_KEY.

	$theme_mod_name = 'amp_customize_setting_modified_timestamps';
	remove_theme_mod( $theme_mod_name );
	if ( ! empty( $options['reader_theme'] ) && 'legacy' !== $options['reader_theme'] ) {
		$reader_theme_mods_option_name = sprintf( 'theme_mods_%s', $options['reader_theme'] );
		$reader_theme_mods             = get_option( $reader_theme_mods_option_name );
		if ( is_array( $reader_theme_mods ) && isset( $reader_theme_mods[ $theme_mod_name ] ) ) {
			unset( $reader_theme_mods[ $theme_mod_name ] );
			update_option( $reader_theme_mods_option_name, $reader_theme_mods );
		}
	}
}

/**
 * Delete AMP user meta.
 *
 * @return void
 * @internal
 */
function delete_user_metadata() {
	$keys = [
		'amp_dev_tools_enabled',
		'amp_review_panel_dismissed_for_template_mode',
	];
	foreach ( $keys as $key ) {
		delete_metadata( 'user', 0, $key, '', true );
	}
}

/**
 * Delete AMP Validated URL posts.
 *
 * @return void
 * @internal
 */
function delete_posts() {

	/** @var \wpdb */
	global $wpdb;

	$post_type = 'amp_validated_url';
	// phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching

	// Delete all post meta data related to "amp_validated_url" post_type.
	$wpdb->query(
		$wpdb->prepare(
			"
			DELETE meta
			FROM $wpdb->postmeta AS meta
				INNER JOIN $wpdb->posts AS posts
					ON posts.ID = meta.post_id
			WHERE posts.post_type = %s;
			",
			$post_type
		)
	);

	// Delete all amp_validated_url posts.
	$wpdb->delete(
		$wpdb->posts,
		compact( 'post_type' )
	);

	// phpcs:enable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
}

/**
 * Delete AMP validation error terms.
 *
 * @return void
 * @internal
 */
function delete_terms() {

	// Abort if term splitting has not been done. This is done by WooCommerce so it's
	// it's also done here for good measure, even though we require WP 4.9+.
	if ( version_compare( get_bloginfo( 'version' ), '4.2', '<' ) ) {
		return;
	}

	/** @var \wpdb */
	global $wpdb;

	$taxonomy = 'amp_validation_error';
	// phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching

	// Delete term meta (added in WP 4.4).
	if ( ! empty( $wpdb->termmeta ) ) {
		$wpdb->query(
			$wpdb->prepare(
				"
				DELETE tm
				FROM $wpdb->termmeta AS tm
					INNER JOIN $wpdb->term_taxonomy AS tt
						ON tm.term_id = tt.term_id
				WHERE tt.taxonomy = %s;
				",
				$taxonomy
			)
		);
	}

	// Delete term relationship.
	$wpdb->query(
		$wpdb->prepare(
			"
			DELETE tr
			FROM $wpdb->term_relationships AS tr
				INNER JOIN $wpdb->term_taxonomy AS tt
					ON tr.term_taxonomy_id = tt.term_taxonomy_id
			WHERE tt.taxonomy = %s;
			",
			$taxonomy
		)
	);

	// Delete terms.
	$wpdb->query(
		$wpdb->prepare(
			"
			DELETE terms
			FROM $wpdb->terms AS terms
				INNER JOIN $wpdb->term_taxonomy AS tt
					ON terms.term_id = tt.term_id
			WHERE tt.taxonomy = %s;
			",
			$taxonomy
		)
	);

	// Delete term taxonomy.
	$wpdb->delete(
		$wpdb->term_taxonomy,
		compact( 'taxonomy' )
	);
	// phpcs:enable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
}

/**
 * Delete transient data from option table if object cache is not available.
 *
 * @return void
 * @internal
 */
function delete_transients() {

	// Transients are not stored in the options table if an external object cache is used,
	// in which case they cannot be queried for deletion.
	if ( wp_using_ext_object_cache() ) {
		return;
	}

	/** @var \wpdb */
	global $wpdb;

	$transient_groups = [
		'AmpProject\AmpWP\DevTools\BlockSourcesamp_block_sources',
		'amp-parsed-stylesheet-v%',
		'amp_error_index_counts',
		'amp_has_page_caching',
		'amp_img_%',
		'amp_lock_%',
		'amp_new_validation_error_urls_count',
		'amp_plugin_activation_validation_errors',
		'amp_remote_request_%',
		'amp_themes_wporg',
	];

	$where_clause = [];

	foreach ( $transient_groups as $transient_group ) {
		if ( false !== strpos( $transient_group, '%' ) ) {
			$where_clause[] = $wpdb->prepare(
				' option_name LIKE %s OR option_name LIKE %s ',
				"_transient_$transient_group",
				"_transient_timeout_$transient_group"
			);
		} else {
			$where_clause[] = $wpdb->prepare(
				' option_name = %s OR option_name = %s ',
				"_transient_$transient_group",
				"_transient_timeout_$transient_group"
			);
		}
	}

	// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Cannot cache result since we're deleting the records.
	$wpdb->query(
		// phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared -- See use of prepare in foreach loop above.
		"DELETE FROM $wpdb->options WHERE " . implode( ' OR ', $where_clause )
	);
}

/**
 * Remove plugin data.
 *
 * @return void
 * @internal
 */
function remove_plugin_data() {
	$options = get_option( 'amp-options' );

	if (
		is_array( $options ) && array_key_exists( 'delete_data_at_uninstall', $options )
			? $options['delete_data_at_uninstall']
			: true
	) {
		delete_options();
		delete_user_metadata();
		delete_posts();
		delete_terms();
		delete_transients();

		// Clear any cached data that has been removed.
		wp_cache_flush();
	}
}
PK.3Y�Q���5bunyad-amp/includes/admin/class-amp-admin-pointer.php<?php
/**
 * Class AMP_Admin_Pointer
 *
 * @package AMP
 * @since 1.2
 */

/**
 * Class representing a single admin pointer.
 *
 * @since 1.2
 * @internal
 */
class AMP_Admin_Pointer {

	/**
	 * Unique pointer slug.
	 *
	 * @since 1.2
	 * @var string
	 */
	private $slug;

	/**
	 * Pointer arguments.
	 *
	 * @since 1.2
	 * @var array
	 */
	private $args;

	/**
	 * Internal storage for dismissed pointers, to prevent repeated parsing.
	 *
	 * @since 1.2
	 * @static
	 * @var array|null
	 */
	private static $dismissed_pointers;

	/**
	 * Constructor.
	 *
	 * @since 1.2
	 *
	 * @param string $slug Unique pointer slug.
	 * @param array  $args {
	 *     Associative array of pointer arguments.
	 *
	 *     @type string   $selector        Required DOM selector for the element to point at.
	 *     @type string   $description     Required pointer description. May contain inline HTML tags.
	 *     @type string   $heading         Pointer heading. May contain inline HTML tags. Default empty string.
	 *     @type string   $subheading      Pointer subheading. May contain inline HTML tags. Default empty string.
	 *     @type array    $position        Position information for the pointer. Must be an array with keys
	 *                                     'edge' and 'align'. Default is 'edge' set to 'left' and 'align' set
	 *                                     to 'bottom'.
	 *     @type string   $class           Additional CSS class for the pointer. Default empty string.
	 *     @type callable $active_callback Callback function to determine whether the pointer is active in the
	 *                                     current context. The current admin screen's hook suffix is passed to
	 *                                     the callback. Default is that the pointer is active unconditionally.
	 * }
	 */
	public function __construct( $slug, array $args ) {
		$default_position = [
			'edge'  => is_rtl() ? 'right' : 'left',
			'align' => 'bottom',
		];

		if ( isset( $args['position'] ) ) {
			$args['position'] = wp_parse_args( (array) $args['position'], $default_position );
		}

		$this->slug = $slug;
		$this->args = wp_parse_args(
			$args,
			[
				'selector'        => '',
				'description'     => '',
				'heading'         => '',
				'subheading'      => '',
				'position'        => $default_position,
				'class'           => '',
				'active_callback' => null,
			]
		);
	}

	/**
	 * Gets the pointer slug.
	 *
	 * @since 1.2
	 *
	 * @return string Unique pointer slug.
	 */
	public function get_slug() {
		return $this->slug;
	}

	/**
	 * Checks whether the pointer is active.
	 *
	 * This method executes the active callback and looks at whether the pointer has been dismissed in order to
	 * determine whether the pointer should be active or not.
	 *
	 * @since 1.2
	 *
	 * @param string $hook_suffix The current admin screen hook suffix.
	 * @return bool True if the pointer is active, false otherwise.
	 */
	public function is_active( $hook_suffix ) {
		if ( ! $this->args['selector'] || ! $this->args['description'] ) {
			return false;
		}

		if ( ! $this->args['active_callback'] ) {
			return true;
		}

		if ( ! call_user_func( $this->args['active_callback'], $hook_suffix ) ) {
			return false;
		}

		// Populate dismissed pointers list only once.
		if ( null === self::$dismissed_pointers ) {
			// Use array_flip() for more performant lookup.
			self::$dismissed_pointers = array_flip( explode( ',', (string) get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ) ) );
		}

		return ! isset( self::$dismissed_pointers[ $this->slug ] );
	}

	/**
	 * Enqueues the script for the pointer.
	 *
	 * @since 1.2
	 */
	public function enqueue() {
		wp_enqueue_style( 'wp-pointer' );
		wp_enqueue_script( 'wp-pointer' );

		wp_enqueue_style(
			'amp-validation-tooltips',
			amp_get_asset_url( 'css/amp-validation-tooltips.css' ),
			[ 'wp-pointer' ],
			AMP__VERSION
		);

		wp_styles()->add_data( 'amp-validation-tooltips', 'rtl', 'replace' );

		add_action(
			'admin_print_footer_scripts',
			function() {
				$this->print_js();
			}
		);
	}

	/**
	 * Prints the script for the pointer inline.
	 *
	 * Requires the 'wp-pointer' script to be loaded.
	 *
	 * @since 1.2
	 */
	private function print_js() {
		$content = '<p>' . wp_kses( $this->args['description'], 'amp_admin_pointer' ) . '</p>';
		if ( $this->args['subheading'] ) {
			$content = '<p><strong>' . wp_kses( $this->args['subheading'], 'amp_admin_pointer' ) . '</strong></p>' . $content;
		}
		if ( $this->args['heading'] ) {
			$content = '<h3>' . wp_kses( $this->args['heading'], 'amp_admin_pointer' ) . '</h3>' . $content;
		}

		$args = [
			'content'      => $content,
			'position'     => $this->args['position'],
			'pointerClass' => 'wp-pointer wp-amp-pointer' . ( ! empty( $this->args['class'] ) ? ' ' . $this->args['class'] : '' ),
		];

		?>
		<script type="text/javascript">
			( function( $ ) {
				var options = <?php echo wp_json_encode( $args ); ?>;

				if ( ! options ) {
					return;
				}

				options = $.extend( options, {
					close: function() {
						$.post( ajaxurl, {
							pointer: '<?php echo esc_js( $this->slug ); ?>',
							action: 'dismiss-wp-pointer'
						});
					}
				});

				function setup() {
					$( '<?php echo esc_js( $this->args['selector'] ); ?>' ).first().pointer( options ).pointer( 'open' );
				}
				if ( options.position && options.position.defer_loading ) {
					$( window ).bind( 'load.wp-pointers', setup );
				} else {
					$( document ).ready( setup );
				}

			} )( jQuery );
		</script>
		<?php
	}
}
PK.3Y,����6bunyad-amp/includes/admin/class-amp-admin-pointers.php<?php
/**
 * Class AMP_Admin_Pointers
 *
 * @package AMP
 * @since 1.2
 */

/**
 * Class managing admin pointers to enhance discoverability.
 *
 * @since 1.2
 * @internal
 */
class AMP_Admin_Pointers {

	/**
	 * Registers functionality through WordPress hooks.
	 *
	 * @since 1.2
	 */
	public function init() {
		add_action(
			'admin_enqueue_scripts',
			[ $this, 'enqueue_scripts' ]
		);
	}

	/**
	 * Initializes admin pointers by enqueuing necessary scripts.
	 *
	 * @since 1.2
	 *
	 * @param string $hook_suffix The current admin screen hook suffix.
	 */
	public function enqueue_scripts( $hook_suffix ) {
		$pointers = $this->get_pointers();
		if ( empty( $pointers ) ) {
			return;
		}

		// Only enqueue one pointer at a time to prevent them overlaying each other.
		foreach ( $pointers as $pointer ) {
			if ( ! $pointer->is_active( $hook_suffix ) ) {
				continue;
			}

			$pointer->enqueue();
			return;
		}
	}

	/**
	 * Gets available admin pointers.
	 *
	 * @since 1.2
	 *
	 * @return array List of AMP_Admin_Pointer instances.
	 */
	private function get_pointers() {
		return [
			new AMP_Admin_Pointer(
				'amp_template_mode_pointer_10',
				[
					'selector'        => '#toplevel_page_amp-options',
					'heading'         => esc_html__( 'AMP', 'amp' ),
					'subheading'      => esc_html__( 'New AMP Template Modes', 'amp' ),
					'description'     => esc_html__( 'You can now reuse your theme\'s templates and styles in AMP responses, in both &#8220;Transitional&#8221; and &#8220;Standard&#8221; modes.', 'amp' ),
					'position'        => [
						'align' => 'middle',
					],
					'active_callback' => static function() {
						return version_compare( strtok( AMP__VERSION, '-' ), '1.1', '<' );
					},
				]
			),
		];
	}
}
PK.3Y���ii5bunyad-amp/includes/admin/class-amp-editor-blocks.php<?php
/**
 * AMP Editor Blocks extending.
 *
 * @package AMP
 * @since 1.0
 */

/**
 * Class AMP_Editor_Blocks
 *
 * @todo Remove this when AMP-specific blocks are removed. They have been deprecated as of <https://github.com/ampproject/amp-wp/issues/4556>.
 * @internal
 */
class AMP_Editor_Blocks {

	/**
	 * List of AMP scripts that need to be printed when AMP components are used in non-AMP document context ("dirty AMP").
	 *
	 * @var array
	 */
	public $content_required_amp_scripts = [];

	/**
	 * AMP components that have blocks.
	 *
	 * @var string[]
	 */
	const AMP_BLOCKS = [
		'amp-mathml',
		'amp-timeago',
		'amp-o2-player',
		'amp-ooyala-player',
		'amp-reach-player',
		'amp-springboard-player',
		'amp-jwplayer',
		'amp-brid-player',
		'amp-ima-video',
	];

	/**
	 * Init.
	 */
	public function init() {
		if ( function_exists( 'register_block_type' ) ) {
			add_filter( 'wp_kses_allowed_html', [ $this, 'include_block_atts_in_wp_kses_allowed_html' ], 10, 2 );

			/*
			 * Dirty AMP is required when a site is in AMP-first mode but not all templates are being served
			 * as AMP. In particular, if a single post is using AMP-specific Gutenberg Blocks which make
			 * use of AMP components, and the singular template is served as AMP but the blog page is not,
			 * then the non-AMP blog page need to load the AMP runtime scripts so that the AMP components
			 * in the posts displayed there will be rendered properly. This is only relevant on AMP-first
			 * sites because the AMP Gutenberg blocks are only made available in that mode; they are not
			 * presented in the Gutenberg inserter in transitional mode. In general, using AMP components in
			 * non-AMP documents is still not officially supported, so it's occurrence is being minimized
			 * as much as possible. For more, see <https://github.com/ampproject/amp-wp/issues/1192>.
			 */
			if ( amp_is_canonical() ) {
				add_filter( 'the_content', [ $this, 'tally_content_requiring_amp_scripts' ] );
				add_action( 'wp_print_footer_scripts', [ $this, 'print_dirty_amp_scripts' ] );
			}
		}
	}

	/**
	 * Allowlist elements and attributes used for AMP.
	 *
	 * This prevents AMP markup from being deleted when the user doesn't have the `unfiltered_html` capability.
	 *
	 * @param array  $tags    Array of allowed post tags.
	 * @param string $context Context.
	 * @return mixed Modified array.
	 */
	public function include_block_atts_in_wp_kses_allowed_html( $tags, $context ) {
		if ( 'post' !== $context ) {
			return $tags;
		}

		foreach ( self::AMP_BLOCKS as $amp_block ) {
			if ( ! isset( $tags[ $amp_block ] ) ) {
				$tags[ $amp_block ] = [];
			}

			// @todo The global attributes included here should be matched up with what is actually used by each block.
			$tags[ $amp_block ] = array_merge(
				array_fill_keys(
					[
						'layout',
						'width',
						'height',
						'class',
					],
					true
				),
				$tags[ $amp_block ]
			);

			$amp_tag_specs = AMP_Allowed_Tags_Generated::get_allowed_tag( $amp_block );
			foreach ( $amp_tag_specs as $amp_tag_spec ) {
				if ( ! isset( $amp_tag_spec[ AMP_Rule_Spec::ATTR_SPEC_LIST ] ) ) {
					continue;
				}
				$tags[ $amp_block ] = array_merge(
					$tags[ $amp_block ],
					array_fill_keys( array_keys( $amp_tag_spec[ AMP_Rule_Spec::ATTR_SPEC_LIST ] ), true )
				);
			}
		}

		return $tags;
	}

	/**
	 * Tally the AMP component scripts that are needed in a dirty AMP document.
	 *
	 * @param string $content Content.
	 * @return string Content (unmodified).
	 */
	public function tally_content_requiring_amp_scripts( $content ) {
		if ( ! amp_is_request() ) {
			$pattern = sprintf( '/<(%s)\b.*?>/s', implode( '|', self::AMP_BLOCKS ) );
			if ( preg_match_all( $pattern, $content, $matches ) ) {
				$this->content_required_amp_scripts = array_merge(
					$this->content_required_amp_scripts,
					$matches[1]
				);
			}
		}
		return $content;
	}

	/**
	 * Print AMP scripts required for AMP components used in a non-AMP document (dirty AMP).
	 */
	public function print_dirty_amp_scripts() {
		if ( ! amp_is_request() && ! empty( $this->content_required_amp_scripts ) ) {
			wp_scripts()->do_items( $this->content_required_amp_scripts );
		}
	}
}
PK.3Yҟ��,F,F5bunyad-amp/includes/admin/class-amp-post-meta-box.php<?php
/**
 * AMP meta box settings.
 *
 * @package AMP
 * @since 0.6
 */

use AmpProject\AmpWP\Services;

/**
 * Post meta box class.
 *
 * @since 0.6
 * @internal
 */
class AMP_Post_Meta_Box {

	/**
	 * Assets handle.
	 *
	 * @since 0.6
	 * @var string
	 */
	const ASSETS_HANDLE = 'amp-post-meta-box';

	/**
	 * Block asset handle.
	 *
	 * @since 1.0
	 * @var string
	 */
	const BLOCK_ASSET_HANDLE = 'amp-block-editor';

	/**
	 * The enabled status post meta value.
	 *
	 * @since 0.6
	 * @var string
	 */
	const ENABLED_STATUS = 'enabled';

	/**
	 * The disabled status post meta value.
	 *
	 * @since 0.6
	 * @var string
	 */
	const DISABLED_STATUS = 'disabled';

	/**
	 * The status post meta key.
	 *
	 * @since 0.6
	 * @var string
	 */
	const STATUS_POST_META_KEY = 'amp_status';

	/**
	 * The field name for the enabled/disabled radio buttons.
	 *
	 * @since 0.6
	 * @var string
	 */
	const STATUS_INPUT_NAME = 'amp_status';

	/**
	 * The nonce name.
	 *
	 * @since 0.6
	 * @var string
	 */
	const NONCE_NAME = 'amp-status-nonce';

	/**
	 * The nonce action.
	 *
	 * @since 0.6
	 * @var string
	 */
	const NONCE_ACTION = 'amp-update-status';

	/**
	 * The name for the REST API field containing whether AMP is enabled for a post.
	 *
	 * @since 2.0
	 * @var string
	 */
	const REST_ATTRIBUTE_NAME = 'amp_enabled';

	/**
	 * Initialize.
	 *
	 * @since 0.6
	 */
	public function init() {
		register_meta(
			'post',
			self::STATUS_POST_META_KEY,
			[
				'sanitize_callback' => [ $this, 'sanitize_status' ],
				'auth_callback'     => '__return_false',
				'type'              => 'string',
				'description'       => __( 'AMP status.', 'amp' ),
				'show_in_rest'      => false,
				'single'            => true,
			]
		);

		add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_admin_assets' ] );
		add_action( 'enqueue_block_editor_assets', [ $this, 'enqueue_block_assets' ] );
		add_action( 'post_submitbox_misc_actions', [ $this, 'render_status' ] );
		add_action( 'save_post', [ $this, 'save_amp_status' ] );
		add_action( 'rest_api_init', [ $this, 'add_rest_api_fields' ] );
		add_filter( 'preview_post_link', [ $this, 'preview_post_link' ] );
	}

	/**
	 * Sanitize status.
	 *
	 * @param string $status Status.
	 * @return string Sanitized status. Empty string when invalid.
	 */
	public function sanitize_status( $status ) {
		$status = strtolower( trim( $status ) );
		if ( ! in_array( $status, [ self::ENABLED_STATUS, self::DISABLED_STATUS ], true ) ) {
			/*
			 * In lieu of actual validation being available, clear the status entirely
			 * so that the underlying default status will be used instead.
			 * In the future it would be ideal if register_meta() accepted a
			 * validate_callback as well which the REST API could leverage.
			 */
			$status = '';
		}
		return $status;
	}

	/**
	 * Enqueue admin assets.
	 *
	 * @since 0.6
	 */
	public function enqueue_admin_assets() {
		$post     = get_post();
		$screen   = get_current_screen();
		$validate = (
			isset( $screen->base ) &&
			'post' === $screen->base &&
			empty( $screen->is_block_editor ) &&
			in_array( $post->post_type, AMP_Post_Type_Support::get_supported_post_types(), true )
		);

		if ( ! $validate ) {
			return;
		}

		wp_enqueue_style(
			self::ASSETS_HANDLE,
			amp_get_asset_url( 'css/amp-post-meta-box.css' ),
			false,
			AMP__VERSION
		);

		wp_styles()->add_data( self::ASSETS_HANDLE, 'rtl', 'replace' );

		// Abort if version of WordPress is too old.
		if ( ! Services::get( 'dependency_support' )->has_support_from_core() ) {
			return;
		}

		$asset_file   = AMP__DIR__ . '/assets/js/' . self::ASSETS_HANDLE . '.asset.php';
		$asset        = require $asset_file;
		$dependencies = $asset['dependencies'];
		$version      = $asset['version'];

		// phpcs:ignore WordPress.WP.EnqueuedResourceParameters.NotInFooter
		wp_enqueue_script(
			self::ASSETS_HANDLE,
			amp_get_asset_url( 'js/' . self::ASSETS_HANDLE . '.js' ),
			$dependencies,
			$version,
			false
		);

		if ( ! amp_is_legacy() ) {
			$availability   = AMP_Theme_Support::get_template_availability( $post );
			$support_errors = $availability['errors'];
		} else {
			$support_errors = AMP_Post_Type_Support::get_support_errors( $post );
		}

		wp_add_inline_script(
			self::ASSETS_HANDLE,
			sprintf(
				'ampPostMetaBox.boot( %s );',
				wp_json_encode(
					[
						'previewLink'     => esc_url_raw( amp_add_paired_endpoint( get_preview_post_link( $post ) ) ),
						'canonical'       => amp_is_canonical(),
						'enabled'         => empty( $support_errors ),
						'canSupport'      => 0 === count( array_diff( $support_errors, [ 'post-status-disabled' ] ) ),
						'statusInputName' => self::STATUS_INPUT_NAME,
						'l10n'            => [
							'ampPreviewBtnLabel' => __( 'Preview changes in AMP (opens in new window)', 'amp' ),
						],
					]
				)
			)
		);
	}

	/**
	 * Enqueues block assets.
	 *
	 * @since 1.0
	 */
	public function enqueue_block_assets() {
		$post = get_post();

		// Block validation script uses features only available beginning with WP 5.6.
		$dependency_support = Services::get( 'dependency_support' );
		if ( ! $dependency_support->has_support() ) {
			return; // @codeCoverageIgnore
		}

		// Only enqueue scripts on the block editor for AMP-enabled posts.
		$editor_support = Services::get( 'editor.editor_support' );
		if ( ! $editor_support->is_current_screen_block_editor_for_amp_enabled_post_type() ) {
			return;
		}

		$status_and_errors = self::get_status_and_errors( $post );

		// Skip proceeding if there are errors blocking AMP and the user can't do anything about it.
		if ( ! empty( $status_and_errors['errors'] ) && ! current_user_can( 'manage_options' ) ) {
			return;
		}

		wp_enqueue_style(
			self::BLOCK_ASSET_HANDLE,
			amp_get_asset_url( 'css/' . self::BLOCK_ASSET_HANDLE . '.css' ),
			[],
			AMP__VERSION
		);

		wp_styles()->add_data( self::BLOCK_ASSET_HANDLE, 'rtl', 'replace' );

		$asset_file   = AMP__DIR__ . '/assets/js/' . self::BLOCK_ASSET_HANDLE . '.asset.php';
		$asset        = require $asset_file;
		$dependencies = $asset['dependencies'];
		$version      = $asset['version'];

		wp_enqueue_script(
			self::BLOCK_ASSET_HANDLE,
			amp_get_asset_url( 'js/' . self::BLOCK_ASSET_HANDLE . '.js' ),
			$dependencies,
			$version,
			true
		);

		$is_standard_mode = amp_is_canonical();

		list( $featured_image_minimum_width, $featured_image_minimum_height ) = self::get_featured_image_dimensions();

		$data = [
			'ampUrl'                     => $is_standard_mode ? null : amp_add_paired_endpoint( get_permalink( $post ) ),
			'ampPreviewLink'             => $is_standard_mode ? null : amp_add_paired_endpoint( get_preview_post_link( $post ) ),
			'errorMessages'              => $this->get_error_messages( $status_and_errors['errors'] ),
			'hasThemeSupport'            => ! amp_is_legacy(),
			'isDevToolsEnabled'          => Services::get( 'dev_tools.user_access' )->is_user_enabled(),
			'isStandardMode'             => $is_standard_mode,
			'featuredImageMinimumWidth'  => $featured_image_minimum_width,
			'featuredImageMinimumHeight' => $featured_image_minimum_height,
			'ampBlocksInUse'             => $is_standard_mode ? $this->get_amp_blocks_in_use() : [],
		];

		wp_add_inline_script(
			self::BLOCK_ASSET_HANDLE,
			sprintf( 'var ampBlockEditor = %s;', wp_json_encode( $data ) ),
			'before'
		);

		if ( function_exists( 'wp_set_script_translations' ) ) {
			wp_set_script_translations( self::BLOCK_ASSET_HANDLE, 'amp' );
		} elseif ( function_exists( 'wp_get_jed_locale_data' ) || function_exists( 'gutenberg_get_jed_locale_data' ) ) {
			$locale_data  = function_exists( 'wp_get_jed_locale_data' ) ? wp_get_jed_locale_data( 'amp' ) : gutenberg_get_jed_locale_data( 'amp' );
			$translations = wp_json_encode( $locale_data );

			wp_add_inline_script(
				self::BLOCK_ASSET_HANDLE,
				'wp.i18n.setLocaleData( ' . $translations . ', "amp" );',
				'after'
			);
		}
	}

	/**
	 * Returns a tuple of width and height featured image dimensions after filtering.
	 *
	 * @return int[] {
	 *     Minimum dimensions.
	 *
	 *     @type int $0 Image width in pixels. May be zero to disable the dimension constraint.
	 *     @type int $1 Image height in pixels. May be zero to disable the dimension constraint.
	 * }
	 */
	public static function get_featured_image_dimensions() {
		$default_width  = 1200;
		$default_height = 675;

		/**
		 * Filters the minimum height required for a featured image.
		 *
		 * @since 2.0.9
		 *
		 * @param int $featured_image_minimum_height The minimum height of the image, defaults to 675.
		 *                                           Returning a number less than or equal to zero disables the minimum constraint.
		 */
		$featured_image_minimum_height = (int) apply_filters( 'amp_featured_image_minimum_height', $default_height );

		/**
		 * Filters the minimum width required for a featured image.
		 *
		 * @since 2.0.9
		 *
		 * @param int $featured_image_minimum_width The minimum width of the image, defaults to 1200.
		 *                                          Returning a number less than or equal to zero disables the minimum constraint.
		 */
		$featured_image_minimum_width = (int) apply_filters( 'amp_featured_image_minimum_width', $default_width );

		return [
			max( $featured_image_minimum_width, 0 ),
			max( $featured_image_minimum_height, 0 ),
		];
	}

	/**
	 * Render AMP status.
	 *
	 * @since 0.6
	 * @param WP_Post $post Post.
	 */
	public function render_status( $post ) {
		$verify = (
			! empty( $post->ID )
			&&
			in_array( $post->post_type, AMP_Post_Type_Support::get_supported_post_types(), true )
			&&
			current_user_can( 'edit_post', $post->ID )
		);

		if ( true !== $verify ) {
			return;
		}

		$status_and_errors = self::get_status_and_errors( $post );
		$status            = $status_and_errors['status']; // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable -- Used in amp-enabled-classic-editor-toggle.php.
		$errors            = $status_and_errors['errors'];

		// Skip showing any error message if the user doesn't have the ability to do anything about it.
		if ( ! empty( $errors ) && ! current_user_can( 'manage_options' ) ) {
			return;
		}

		// phpcs:disable VariableAnalysis.CodeAnalysis.VariableAnalysis
		$error_messages = $this->get_error_messages( $errors );

		$labels = [
			'enabled'  => __( 'Enabled', 'amp' ),
			'disabled' => __( 'Disabled', 'amp' ),
		];
		// phpcs:enable VariableAnalysis.CodeAnalysis.VariableAnalysis

		// The preceding variables are used inside the following amp-status.php template.
		include AMP__DIR__ . '/includes/templates/amp-enabled-classic-editor-toggle.php';
	}

	/**
	 * Gets the AMP enabled status and errors.
	 *
	 * @since 1.0
	 * @param WP_Post $post The post to check.
	 * @return array {
	 *     The status and errors.
	 *
	 *     @type string    $status The AMP enabled status.
	 *     @type string[]  $errors AMP errors.
	 * }
	 */
	public static function get_status_and_errors( $post ) {
		/*
		 * When theme support is present then theme templates can be served in AMP and we check first if the template is available.
		 * Checking for template availability will include a check for get_support_errors. Otherwise, if theme support is not present
		 * then we just check get_support_errors.
		 */
		if ( ! amp_is_legacy() ) {
			$availability = AMP_Theme_Support::get_template_availability( $post );
			$status       = $availability['supported'] ? self::ENABLED_STATUS : self::DISABLED_STATUS;
			$errors       = array_diff( $availability['errors'], [ 'post-status-disabled' ] ); // Subtract the status which the metabox will allow to be toggled.
		} else {
			$errors = AMP_Post_Type_Support::get_support_errors( $post );
			$status = empty( $errors ) ? self::ENABLED_STATUS : self::DISABLED_STATUS;
			$errors = array_diff( $errors, [ 'post-status-disabled' ] ); // Subtract the status which the metabox will allow to be toggled.
		}

		return compact( 'status', 'errors' );
	}

	/**
	 * Gets the AMP enabled error message(s).
	 *
	 * @since 1.0
	 * @see AMP_Post_Type_Support::get_support_errors()
	 *
	 * @param string[] $errors The AMP enabled errors.
	 * @return array $error_messages The error messages, as an array of strings.
	 */
	public function get_error_messages( $errors ) {
		$settings_screen_url = admin_url( 'admin.php?page=' . AMP_Options_Manager::OPTION_NAME );

		$error_messages = [];
		if ( in_array( 'template_unsupported', $errors, true ) || in_array( 'no_matching_template', $errors, true ) ) {
			$error_messages[] = sprintf(
				/* translators: %s is a link to the AMP settings screen */
				__( 'There are no <a href="%s" target="_blank">supported templates</a>.', 'amp' ),
				esc_url( $settings_screen_url )
			);
		}
		if ( in_array( 'post-type-support', $errors, true ) ) {
			$error_messages[] = sprintf(
				/* translators: %s is a link to the AMP settings screen */
				__( 'This post type is not <a href="%s" target="_blank">enabled</a>.', 'amp' ),
				esc_url( $settings_screen_url )
			);
		}
		if ( in_array( 'skip-post', $errors, true ) ) {
			$error_messages[] = __( 'A plugin or theme has disabled AMP support.', 'amp' );
		}
		if ( in_array( 'invalid-post', $errors, true ) ) {
			$error_messages[] = __( 'The post data could not be successfully retrieved.', 'amp' );
		}
		if ( count( array_diff( $errors, [ 'post-type-support', 'skip-post', 'template_unsupported', 'no_matching_template', 'invalid-post' ] ) ) > 0 ) {
			$error_messages[] = __( 'Unavailable for an unknown reason.', 'amp' );
		}

		return $error_messages;
	}

	/**
	 * Save AMP Status.
	 *
	 * @since 0.6
	 * @param int $post_id The Post ID.
	 */
	public function save_amp_status( $post_id ) {
		$verify = (
			isset( $_POST[ self::NONCE_NAME ], $_POST[ self::STATUS_INPUT_NAME ] )
			&&
			wp_verify_nonce( sanitize_key( wp_unslash( $_POST[ self::NONCE_NAME ] ) ), self::NONCE_ACTION )
			&&
			current_user_can( 'edit_post', $post_id )
			&&
			! wp_is_post_revision( $post_id )
			&&
			! wp_is_post_autosave( $post_id )
		);

		if ( true === $verify ) {
			update_post_meta(
				$post_id,
				self::STATUS_POST_META_KEY,
				$_POST[ self::STATUS_INPUT_NAME ] // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- The sanitize_callback has been supplied in the register_meta() call above.
			);
		}
	}

	/**
	 * Modify post preview link.
	 *
	 * Add the AMP query var if the amp-preview flag is set.
	 *
	 * @since 0.6
	 *
	 * @param string $link The post preview link.
	 * @return string Preview URL.
	 */
	public function preview_post_link( $link ) {
		$is_amp = (
			isset( $_POST['amp-preview'] ) // phpcs:ignore WordPress.Security.NonceVerification.Missing
			&&
			'do-preview' === sanitize_key( wp_unslash( $_POST['amp-preview'] ) ) // phpcs:ignore WordPress.Security.NonceVerification.Missing
		);

		if ( $is_amp ) {
			$link = amp_add_paired_endpoint( $link );
		}

		return $link;
	}

	/**
	 * Add a REST API field to display whether AMP is enabled on supported post types.
	 *
	 * @since 2.0
	 *
	 * @return void
	 */
	public function add_rest_api_fields() {
		register_rest_field(
			AMP_Post_Type_Support::get_post_types_for_rest_api(),
			self::REST_ATTRIBUTE_NAME,
			[
				'get_callback'    => [ $this, 'get_amp_enabled_rest_field' ],
				'update_callback' => [ $this, 'update_amp_enabled_rest_field' ],
				'schema'          => [
					'description' => __( 'AMP enabled', 'amp' ),
					'type'        => 'boolean',
				],
			]
		);
	}

	/**
	 * Get the value of whether AMP is enabled for a REST API request.
	 *
	 * @since 2.0
	 *
	 * @param array $post_data Post data.
	 * @return bool Whether AMP is enabled on post.
	 */
	public function get_amp_enabled_rest_field( $post_data ) {
		$status = $this->sanitize_status( get_post_meta( $post_data['id'], self::STATUS_POST_META_KEY, true ) );

		if ( '' === $status ) {
			$post              = get_post( $post_data['id'] );
			$status_and_errors = self::get_status_and_errors( $post );

			if ( isset( $status_and_errors['status'] ) ) {
				$status = $status_and_errors['status'];
			}
		}

		return self::ENABLED_STATUS === $status;
	}

	/**
	 * Update whether AMP is enabled for a REST API request.
	 *
	 * @since 2.0
	 *
	 * @param bool    $is_enabled Whether AMP is enabled.
	 * @param WP_Post $post       Post being updated.
	 * @return null|WP_Error Null on success, WP_Error object on failure.
	 */
	public function update_amp_enabled_rest_field( $is_enabled, $post ) {
		if ( ! in_array( $post->post_type, AMP_Post_Type_Support::get_post_types_for_rest_api(), true ) ) {
			return new WP_Error(
				'rest_invalid_post_type',
				sprintf(
					/* translators: %s: The name of the post type. */
					__( 'AMP is not supported for the "%s" post type.', 'amp' ),
					$post->post_type
				),
				[ 'status' => 400 ]
			);
		}

		if ( ! current_user_can( 'edit_post', $post->ID ) ) {
			return new WP_Error(
				'rest_insufficient_permission',
				__( 'Insufficient permissions to change whether AMP is enabled.', 'amp' ),
				[ 'status' => 403 ]
			);
		}

		$status = $is_enabled ? self::ENABLED_STATUS : self::DISABLED_STATUS;

		// Note: The sanitize_callback has been supplied in the register_meta() call above.
		$updated = update_post_meta(
			$post->ID,
			self::STATUS_POST_META_KEY,
			$status
		);

		if ( false === $updated ) {
			return new WP_Error(
				'rest_update_failed',
				__( 'The AMP enabled status failed to be updated.', 'amp' ),
				[ 'status' => 500 ]
			);
		}

		return null;
	}

	/**
	 * Get the list of AMP block names used in the current post.
	 *
	 * @since 2.1
	 *
	 * @return string[]
	 */
	public function get_amp_blocks_in_use() {
		// Normalize the AMP block names to include the `amp/` namespace.
		$amp_blocks        = substr_replace( AMP_Editor_Blocks::AMP_BLOCKS, 'amp/', 0, 0 );
		$amp_blocks_in_use = array_filter( $amp_blocks, 'has_block' );

		return array_values( $amp_blocks_in_use );
	}
}
PK.3YX��f�f;bunyad-amp/includes/admin/class-amp-template-customizer.php<?php
/**
 * Class AMP_Template_Customizer
 *
 * @package AMP
 */

use AmpProject\AmpWP\Admin\ReaderThemes;
use AmpProject\AmpWP\Option;
use AmpProject\AmpWP\QueryVar;
use AmpProject\AmpWP\ReaderThemeLoader;
use AmpProject\AmpWP\Services;

/**
 * AMP class that implements a template style editor in the Customizer.
 *
 * A direct, formed link to the AMP editor in the Customizer is added via
 * {@see amp_customizer_editor_link()} as a submenu to the Appearance menu.
 *
 * @since 0.4
 * @internal
 */
class AMP_Template_Customizer {

	/**
	 * AMP template editor panel ID.
	 *
	 * @since 0.4
	 * @var string
	 */
	const PANEL_ID = 'amp_panel';

	/**
	 * Theme mod name to contain timestamps for when theme mods were last modified.
	 *
	 * @since 2.0
	 * @var string
	 */
	const THEME_MOD_TIMESTAMPS_KEY = 'amp_customize_setting_modified_timestamps';

	/**
	 * Customizer instance.
	 *
	 * @since 0.4
	 * @var WP_Customize_Manager $wp_customize
	 */
	protected $wp_customize;

	/**
	 * Reader theme loader.
	 *
	 * @since 2.0
	 * @var ReaderThemeLoader
	 */
	protected $reader_theme_loader;

	/**
	 * AMP_Template_Customizer constructor.
	 *
	 * @param WP_Customize_Manager $wp_customize        Customize manager.
	 * @param ReaderThemeLoader    $reader_theme_loader Reader theme loader instance.
	 */
	protected function __construct( WP_Customize_Manager $wp_customize, ReaderThemeLoader $reader_theme_loader ) {
		$this->wp_customize        = $wp_customize;
		$this->reader_theme_loader = $reader_theme_loader;
	}

	/**
	 * Initialize the template Customizer feature class.
	 *
	 * @static
	 * @since 0.4
	 * @access public
	 *
	 * @param WP_Customize_Manager   $wp_customize        Customizer instance.
	 * @param ReaderThemeLoader|null $reader_theme_loader Reader theme loader.
	 * @return AMP_Template_Customizer Instance.
	 */
	public static function init( WP_Customize_Manager $wp_customize, ReaderThemeLoader $reader_theme_loader = null ) {
		if ( null === $reader_theme_loader ) {
			$reader_theme_loader = Services::get( 'reader_theme_loader' );
		}
		$self = new self( $wp_customize, $reader_theme_loader );

		$is_reader_mode   = ( AMP_Theme_Support::READER_MODE_SLUG === AMP_Options_Manager::get_option( Option::THEME_SUPPORT ) );
		$has_reader_theme = ( ReaderThemes::DEFAULT_READER_THEME !== AMP_Options_Manager::get_option( Option::READER_THEME ) ); // @todo Verify that the theme actually exists.

		if ( $is_reader_mode ) {
			add_action( 'customize_controls_init', [ $self, 'set_reader_preview_url' ] );

			if ( $has_reader_theme ) {
				add_action( 'customize_save_after', [ $self, 'store_modified_theme_mod_setting_timestamps' ] );
			}

			if ( $reader_theme_loader->is_theme_overridden() ) {
				add_action( 'customize_controls_enqueue_scripts', [ $self, 'add_customizer_scripts' ] );
				add_action( 'customize_controls_print_footer_scripts', [ $self, 'render_setting_import_section_template' ] );
			} elseif ( ! $has_reader_theme ) {
				/**
				 * Fires when the AMP Template Customizer initializes.
				 *
				 * In practice the `customize_register` hook should be used instead.
				 *
				 * @param AMP_Template_Customizer $self Instance.
				 *
				 * @since 0.4
				 */
				do_action( 'amp_customizer_init', $self );

				$self->register_legacy_settings();
				$self->register_legacy_ui();

				add_action( 'customize_controls_print_footer_scripts', [ $self, 'print_legacy_controls_templates' ] );
				add_action( 'customize_preview_init', [ $self, 'init_legacy_preview' ] );

				add_action( 'customize_controls_enqueue_scripts', [ $self, 'add_legacy_customizer_scripts' ] );
			}
		}

		$self->set_refresh_setting_transport();
		$self->remove_cover_template_section();
		$self->remove_homepage_settings_section();
		return $self;
	}

	/**
	 * Set the preview URL when using a Reader theme if the AMP preview permalink was requested and no URL was provided.
	 */
	public function set_reader_preview_url() {
		if ( isset( $_GET[ QueryVar::AMP_PREVIEW ] ) && ! isset( $_GET['url'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			$url = amp_admin_get_preview_permalink();
			if ( $url ) {
				$this->wp_customize->set_preview_url( $url );
			}
		}
	}

	/**
	 * Force changes to header video to cause refresh since there are various JS dependencies that prevent selective refresh from working properly.
	 *
	 * In the AMP Customizer preview, selective refresh partial for `custom_header` will render <amp-video> or <amp-youtube> elements.
	 * Nevertheless, custom-header.js in core is not expecting AMP components. Therefore the `wp-custom-header-video-loaded` event never
	 * fires. This prevents themes from toggling the `has-header-video` class on the body.
	 *
	 * Additionally, the Twenty Seventeen core theme (the only which supports header videos) has two separate scripts
	 * `twentyseventeen-global` and `twentyseventeen-skip-link-focus-fix` which are depended on for displaying the
	 * video, for example toggling the 'has-header-video' class when the video is added or removed.
	 *
	 * This applies whenever AMP is being served in the Customizer preview, that is, in Standard mode or Reader mode with a Reader theme.
	 */
	protected function set_refresh_setting_transport() {
		if ( ! amp_is_canonical() && ! $this->reader_theme_loader->is_theme_overridden() ) {
			return;
		}

		$setting_ids = [
			'header_video',
			'external_header_video',
		];
		foreach ( $setting_ids as $setting_id ) {
			$setting = $this->wp_customize->get_setting( $setting_id );
			if ( $setting ) {
				$setting->transport = 'refresh';
			}
		}
	}

	/**
	 * Remove the Cover Template section if needed.
	 *
	 * Prevent showing the "Cover Template" section if the active (non-Reader) theme does not have the same template
	 * as Twenty Twenty, as otherwise the user would be shown a section that would never reflect any preview change.
	 */
	protected function remove_cover_template_section() {
		if ( ! $this->reader_theme_loader->is_theme_overridden() ) {
			return;
		}

		$active_theme = $this->reader_theme_loader->get_active_theme();
		$reader_theme = $this->reader_theme_loader->get_reader_theme();
		if ( ! $active_theme instanceof WP_Theme || ! $reader_theme instanceof WP_Theme ) {
			return;
		}

		// This only applies to Twenty Twenty.
		if ( $reader_theme->get_template() !== 'twentytwenty' ) {
			return;
		}

		// Prevent deactivating the cover template if the active theme and reader theme both have a cover template.
		$cover_template_name = 'templates/template-cover.php';
		if (
			array_key_exists( $cover_template_name, $active_theme->get_page_templates() )
			&&
			array_key_exists( $cover_template_name, $reader_theme->get_page_templates() )
		) {
			return;
		}

		$this->wp_customize->remove_section( 'cover_template_options' );
	}

	/**
	 * Remove the Homepage Settings section in the AMP Customizer for a Reader theme if needed.
	 *
	 * The Homepage Settings section exclusively contains controls for options which apply to both AMP and non-AMP.
	 * If this is the case and there are no other controls added to it, then remove the section. Otherwise, the controls
	 * will all get the same notice added to them.
	 */
	protected function remove_homepage_settings_section() {
		if ( ! $this->reader_theme_loader->is_theme_overridden() ) {
			return;
		}

		$section_id  = 'static_front_page';
		$control_ids = [];
		foreach ( $this->wp_customize->controls() as $control ) {
			/** @var WP_Customize_Control $control */
			if ( $section_id === $control->section ) {
				$control_ids[] = $control->id;
			}
		}

		$static_front_page_control_ids = [
			'show_on_front',
			'page_on_front',
			'page_for_posts',
		];

		if ( count( array_diff( $control_ids, $static_front_page_control_ids ) ) === 0 ) {
			$this->wp_customize->remove_section( $section_id );
		}
	}

	/**
	 * Init Customizer preview for legacy.
	 *
	 * @since 0.4
	 */
	public function init_legacy_preview() {
		// This is only needed in WP<5.7 because in 5.7 the `wp_robots()` function runs at the `amp_post_template_head`
		// action and in `WP_Customize_Manager::customize_preview_init()` the `wp_robots_no_robots()` function is added
		// to the `wp_robots` filter.
		if ( version_compare( strtok( get_bloginfo( 'version' ), '-' ), '5.7', '<' ) ) {
			// There is code coverage for this, but code coverage is only collected for the latest WP version.
			add_action( 'amp_post_template_head', 'wp_no_robots' ); // @codeCoverageIgnore
		}

		add_action( 'wp_enqueue_scripts', [ $this, 'enqueue_legacy_preview_scripts' ] );
		add_action( 'amp_customizer_enqueue_preview_scripts', [ $this, 'enqueue_legacy_preview_scripts' ] );

		// Output scripts and styles which will break AMP validation only when preview is opened with controls for manipulation.
		if ( $this->wp_customize->get_messenger_channel() ) {
			add_action( 'amp_post_template_head', [ $this->wp_customize, 'customize_preview_loading_style' ] );
			add_action( 'amp_post_template_css', [ $this, 'add_legacy_customize_preview_styles' ] );
			add_action( 'amp_post_template_head', [ $this->wp_customize, 'remove_frameless_preview_messenger_channel' ] );
			add_action( 'amp_post_template_footer', [ $this, 'add_legacy_preview_scripts' ] );
		}
	}

	/**
	 * Sets up the AMP Customizer preview.
	 */
	public function register_legacy_ui() {
		$this->wp_customize->add_panel(
			self::PANEL_ID,
			[
				'type'        => 'amp',
				'title'       => __( 'AMP', 'amp' ),
				'description' => $this->get_amp_panel_description(),
			]
		);

		/**
		 * Fires after the AMP panel has been registered for plugins to add additional controls.
		 *
		 * In practice the `customize_register` hook should be used instead.
		 *
		 * @since 0.4
		 * @param WP_Customize_Manager $manager Manager.
		 */
		do_action( 'amp_customizer_register_ui', $this->wp_customize );
	}

	/**
	 * Get AMP panel description.
	 *
	 * This is also added to the root panel description in the AMP Customizer when a Reader theme is being customized.
	 *
	 * @return string Description, with markup.
	 */
	protected function get_amp_panel_description() {
		return wp_kses_post(
			sprintf(
				/* translators: 1: URL to AMP project, 2: URL to admin settings screen */
				__( 'While <a href="%1$s" target="_blank">AMP</a> works well on both desktop and mobile pages, your site is <a href="%2$s" target="_blank">currently configured</a> in Reader mode to serve AMP pages to mobile visitors. These settings customize the experience for these users.', 'amp' ),
				'https://amp.dev',
				admin_url( 'admin.php?page=amp-options' )
			)
		);
	}

	/**
	 * Registers settings for customizing Legacy Reader AMP templates.
	 *
	 * @since 0.4
	 */
	public function register_legacy_settings() {

		/**
		 * Fires when plugins should register settings for AMP.
		 *
		 * In practice the `customize_register` hook should be used instead.
		 *
		 * @since 0.4
		 * @param WP_Customize_Manager $manager Manager.
		 */
		do_action( 'amp_customizer_register_settings', $this->wp_customize );
	}

	/**
	 * Load up AMP scripts needed for Customizer integrations when a Reader theme has been selected.
	 *
	 * @since 2.0
	 */
	public function add_customizer_scripts() {
		$handle       = 'amp-customize-controls';
		$asset_file   = AMP__DIR__ . '/assets/js/amp-customize-controls.asset.php';
		$asset        = require $asset_file;
		$dependencies = $asset['dependencies'];
		$version      = $asset['version'];

		wp_enqueue_script(
			$handle,
			amp_get_asset_url( 'js/amp-customize-controls.js' ),
			array_merge( $dependencies, [ 'jquery', 'customize-controls' ] ),
			$version,
			true
		);
		if ( function_exists( 'wp_set_script_translations' ) ) {
			wp_set_script_translations( $handle, 'amp' );
		} elseif ( function_exists( 'wp_get_jed_locale_data' ) || function_exists( 'gutenberg_get_jed_locale_data' ) ) {
			$locale_data = function_exists( 'wp_get_jed_locale_data' ) ? wp_get_jed_locale_data( 'amp' ) : gutenberg_get_jed_locale_data( 'amp' );
			wp_add_inline_script(
				$handle,
				sprintf( 'wp.i18n.setLocaleData( %s, "amp" );', wp_json_encode( $locale_data ) ),
				'after'
			);
		}

		$option_settings = [];
		foreach ( $this->wp_customize->settings() as $setting ) {
			/** @var WP_Customize_Setting $setting */
			if ( 'option' === $setting->type ) {
				$option_settings[] = $setting->id;
			}
		}

		wp_add_inline_script(
			$handle,
			sprintf(
				'ampCustomizeControls.boot( %s );',
				wp_json_encode(
					[
						'queryVar'                  => amp_get_slug(),
						'optionSettings'            => $option_settings,
						'activeThemeSettingImports' => $this->get_active_theme_import_settings(),
						'mimeTypeIcons'             => [
							'image'    => wp_mime_type_icon( 'image' ),
							'document' => wp_mime_type_icon( 'document' ),
						],
						'l10n'                      => [
							/* translators: placeholder is URL to non-AMP Customizer. */
							'ampVersionNotice'     => wp_kses_post( sprintf( __( 'You are customizing the AMP version of your site. <a href="%s">Customize non-AMP version</a>.', 'amp' ), esc_url( admin_url( 'customize.php' ) ) ) ),
							'rootPanelDescription' => $this->get_amp_panel_description(),
						],
					]
				)
			)
		);

		wp_enqueue_style(
			'amp-customizer',
			amp_get_asset_url( 'css/amp-customizer.css' ),
			[],
			AMP__VERSION
		);

		wp_styles()->add_data( 'amp-customizer', 'rtl', 'replace' );
	}

	/**
	 * Store the timestamps for modified theme settings.
	 *
	 * This is used to determine which settings from the Active theme should be presented for importing into the Reader
	 * theme. If a setting has been modified more recently in the Reader theme, then it doesn't make much sense to offer
	 * for the user to re-import a customization they already made.
	 */
	public function store_modified_theme_mod_setting_timestamps() {
		$modified_setting_ids = [];
		foreach ( array_keys( $this->wp_customize->unsanitized_post_values() ) as $setting_id ) {
			$setting = $this->wp_customize->get_setting( $setting_id );
			if ( ! ( $setting instanceof WP_Customize_Setting ) || $setting instanceof WP_Customize_Filter_Setting ) {
				continue;
			}

			if ( $setting instanceof WP_Customize_Custom_CSS_Setting ) {
				$modified_setting_ids[] = $setting->id_data()['base']; // Remove theme slug from ID.
			} elseif ( 'theme_mod' === $setting->type ) {
				$modified_setting_ids[] = $setting->id;
			}
		}

		if ( empty( $modified_setting_ids ) ) {
			return;
		}

		$theme_mod_timestamps = get_theme_mod( self::THEME_MOD_TIMESTAMPS_KEY, [] );
		foreach ( $modified_setting_ids as $modified_setting_id ) {
			$theme_mod_timestamps[ $modified_setting_id ] = time();
		}
		set_theme_mod( self::THEME_MOD_TIMESTAMPS_KEY, $theme_mod_timestamps );
	}

	/**
	 * Get settings to import from the active theme.
	 *
	 * @return array Map of setting IDs to setting values.
	 */
	protected function get_active_theme_import_settings() {
		$active_theme = $this->reader_theme_loader->get_active_theme();
		if ( ! $active_theme instanceof WP_Theme ) {
			return [];
		}

		$active_theme_mods = get_option( 'theme_mods_' . $active_theme->get_stylesheet(), [] );
		$import_settings   = [];

		$active_setting_timestamps = isset( $active_theme_mods[ self::THEME_MOD_TIMESTAMPS_KEY ] ) ? $active_theme_mods[ self::THEME_MOD_TIMESTAMPS_KEY ] : [];
		$reader_setting_timestamps = get_theme_mod( self::THEME_MOD_TIMESTAMPS_KEY, [] );

		// Remove theme mods which will not be imported directly.
		unset(
			$active_theme_mods['sidebars_widgets'],
			$active_theme_mods['custom_css_post_id'],
			$active_theme_mods['background_preset'], // Since a meta setting. When importing a background setting, will be set to 'custom'.
			$active_theme_mods[ self::THEME_MOD_TIMESTAMPS_KEY ]
		);

		// Avoid offering to import background image settings if no background image is set.
		if ( empty( $active_theme_mods['background_image'] ) ) {
			foreach ( [ 'background_position_x', 'background_position_y', 'background_size', 'background_repeat', 'background_attachment' ] as $setting_id ) {
				unset( $active_theme_mods[ $setting_id ] );
			}
		}

		// Map nav menus for importing.
		if ( isset( $active_theme_mods['nav_menu_locations'] ) ) {
			$nav_menu_locations = wp_map_nav_menu_locations(
				get_theme_mod( 'nav_menu_locations', [] ),
				$active_theme_mods['nav_menu_locations']
			);
			foreach ( $nav_menu_locations as $nav_menu_location => $menu_id ) {
				$setting = $this->wp_customize->get_setting( "nav_menu_locations[$nav_menu_location]" );
				if (
					$setting instanceof WP_Customize_Setting
					&&
					// Skip presenting settings which have been more recently updated in the Reader theme.
					(
						! isset( $active_setting_timestamps[ $setting->id ], $reader_setting_timestamps[ $setting->id ] )
						||
						$active_setting_timestamps[ $setting->id ] > $reader_setting_timestamps[ $setting->id ]
					)
				) {
					/** This filter is documented in wp-includes/class-wp-customize-manager.php */
					$value = apply_filters( "customize_sanitize_js_{$setting->id}", $menu_id, $setting );

					$import_settings[ $setting->id ] = $value;
				}
			}
			unset( $active_theme_mods['nav_menu_locations'] );
		}

		foreach ( $this->wp_customize->settings() as $setting ) {
			/** @var WP_Customize_Setting $setting */
			if (
				'theme_mod' !== $setting->type
				||
				// Skip presenting settings which have been more recently updated in the Reader theme.
				(
					isset( $active_setting_timestamps[ $setting->id ], $reader_setting_timestamps[ $setting->id ] )
					&&
					$reader_setting_timestamps[ $setting->id ] > $active_setting_timestamps[ $setting->id ]
				)
			) {
				continue;
			}

			$id_data = $setting->id_data();
			if ( ! array_key_exists( $id_data['base'], $active_theme_mods ) ) {
				continue;
			}
			$value   = $active_theme_mods[ $id_data['base'] ];
			$subkeys = $id_data['keys'];
			while ( ! empty( $subkeys ) ) {
				$subkey = array_shift( $subkeys );
				if ( ! is_array( $value ) || ! array_key_exists( $subkey, $value ) ) {
					// Move on to the next setting.
					continue 2;
				}
				$value = $value[ $subkey ];
			}

			/** This filter is documented in wp-includes/class-wp-customize-manager.php */
			$value = apply_filters( "customize_sanitize_js_{$setting->id}", $value, $setting );

			$import_settings[ $setting->id ] = $value;
		}

		// Import Custom CSS if it has not been more recently updated in the Reader theme.
		if (
			! isset( $active_setting_timestamps['custom_css'], $reader_setting_timestamps['custom_css'] )
			||
			$active_setting_timestamps['custom_css'] > $reader_setting_timestamps['custom_css']
		) {
			$custom_css_setting = $this->wp_customize->get_setting( sprintf( 'custom_css[%s]', get_stylesheet() ) );
			$custom_css_post    = wp_get_custom_css_post( $active_theme->get_stylesheet() );
			if ( $custom_css_setting instanceof WP_Customize_Custom_CSS_Setting && $custom_css_post instanceof WP_Post ) {
				$value = $custom_css_post->post_content;

				/** This filter is documented in wp-includes/class-wp-customize-setting.php */
				$value = apply_filters( 'customize_value_custom_css', $value, $custom_css_setting );

				/** This filter is documented in wp-includes/class-wp-customize-manager.php */
				$value = apply_filters( "customize_sanitize_js_{$custom_css_setting->id}", $value, $custom_css_setting );

				$import_settings[ $custom_css_setting->id ] = $value;
			}
		}

		return $import_settings;
	}

	/**
	 * Render template for the setting import "section".
	 *
	 * This section only has a menu item and it is not intended to expand.
	 */
	public function render_setting_import_section_template() {
		?>
		<script type="text/html" id="tmpl-customize-section-amp_active_theme_settings_import">
			<li id="accordion-section-{{ data.id }}" class="accordion-section control-section control-section-{{ data.type }}">
				<h3 class="accordion-section-title">
					<button type="button" class="button button-secondary" aria-label="<?php esc_attr_e( 'Import settings', 'amp' ); ?>">
						<?php echo esc_html( _x( 'Import', 'theme', 'amp' ) ); ?>
					</button>
					<details>
						<summary>{{ data.title }}</summary>
						<div>
							<p>
								<?php esc_html_e( 'You can import some settings from the primary Active theme into the corresponding Reader theme settings.', 'amp' ); ?>
							</p>
							<dl></dl>
						</div>
					</details>
				</h3>
				<ul class="accordion-section-content"></ul>
			</li>
		</script>
		<?php
	}

	/**
	 * Load up AMP scripts needed for Customizer integrations in Legacy Reader mode.
	 *
	 * @since 0.6 Originally called add_customizer_scripts.
	 * @since 2.0
	 */
	public function add_legacy_customizer_scripts() {
		$asset_file   = AMP__DIR__ . '/assets/js/amp-customize-controls-legacy.asset.php';
		$asset        = require $asset_file;
		$dependencies = $asset['dependencies'];
		$version      = $asset['version'];

		wp_enqueue_script(
			'amp-customize-controls', // Note: This is not 'amp-customize-controls-legacy' to not break existing scripts that have this dependency.
			amp_get_asset_url( 'js/amp-customize-controls-legacy.js' ),
			array_merge( $dependencies, [ 'jquery', 'customize-controls' ] ),
			$version,
			true
		);

		wp_add_inline_script(
			'amp-customize-controls',
			sprintf(
				'ampCustomizeControls.boot( %s );',
				wp_json_encode(
					[
						'queryVar' => amp_get_slug(),
						'panelId'  => self::PANEL_ID,
						'ampUrl'   => amp_admin_get_preview_permalink(),
						'l10n'     => [
							'unavailableMessage'  => __( 'AMP is not available for the page currently being previewed.', 'amp' ),
							'unavailableLinkText' => __( 'Navigate to an AMP compatible page', 'amp' ),
						],
					]
				)
			)
		);

		wp_enqueue_style(
			'amp-customizer',
			amp_get_asset_url( 'css/amp-customizer-legacy.css' ),
			[],
			AMP__VERSION
		);

		wp_styles()->add_data( 'amp-customizer', 'rtl', 'replace' );

		/**
		 * Fires when plugins should register settings for AMP.
		 *
		 * In practice the `customize_controls_enqueue_scripts` hook should be used instead.
		 *
		 * @since 0.4
		 * @param WP_Customize_Manager $manager Manager.
		 */
		do_action( 'amp_customizer_enqueue_scripts', $this->wp_customize );
	}

	/**
	 * Enqueues scripts used in both the AMP and non-AMP Customizer preview (only applies to Legacy Reader mode).
	 *
	 * @since 0.6
	 */
	public function enqueue_legacy_preview_scripts() {
		// Bail if user can't customize anyway.
		if ( ! current_user_can( 'customize' ) ) {
			return;
		}

		$asset_file   = AMP__DIR__ . '/assets/js/amp-customize-preview-legacy.asset.php';
		$asset        = require $asset_file;
		$dependencies = $asset['dependencies'];
		$version      = $asset['version'];

		wp_enqueue_script(
			'amp-customize-preview',
			amp_get_asset_url( 'js/amp-customize-preview-legacy.js' ),
			array_merge( $dependencies, [ 'jquery', 'customize-preview' ] ),
			$version,
			true
		);

		wp_add_inline_script(
			'amp-customize-preview',
			sprintf(
				'ampCustomizePreview.boot( %s );',
				wp_json_encode(
					[
						'available' => amp_is_available(),
						'enabled'   => amp_is_request(),
					]
				)
			)
		);
	}

	/**
	 * Add AMP Customizer preview styles for Legacy Reader mode.
	 */
	public function add_legacy_customize_preview_styles() {
		?>
		/* Text meant only for screen readers; this is needed for wp.a11y.speak() */
		.screen-reader-text {
			border: 0;
			clip: rect(1px, 1px, 1px, 1px);
			-webkit-clip-path: inset(50%);
			clip-path: inset(50%);
			height: 1px;
			margin: -1px;
			overflow: hidden;
			padding: 0;
			position: absolute;
			width: 1px;
			word-wrap: normal !important;
		}
		body.wp-customizer-unloading {
			opacity: 0.25 !important; /* Because AMP sets body to opacity:1 once layout complete. */
		}
		<?php
	}

	/**
	 * Enqueues Legacy Reader scripts and does wp_print_footer_scripts() so we can output customizer scripts.
	 *
	 * This breaks AMP validation in the customizer but is necessary for the live preview.
	 *
	 * @since 0.6
	 */
	public function add_legacy_preview_scripts() {

		// Bail if user can't customize anyway.
		if ( ! current_user_can( 'customize' ) ) {
			return;
		}

		wp_enqueue_script( 'customize-selective-refresh' );

		/**
		 * Fires when plugins should enqueue their own scripts for the AMP Customizer preview.
		 *
		 * @since 0.4
		 * @param WP_Customize_Manager $wp_customize Manager.
		 */
		do_action( 'amp_customizer_enqueue_preview_scripts', $this->wp_customize );

		$this->wp_customize->customize_preview_settings();
		$this->wp_customize->selective_refresh->export_preview_data();

		wp_print_footer_scripts();
	}

	/**
	 * Print templates needed for AMP in Customizer (for Legacy Reader mode).
	 *
	 * @since 0.6
	 */
	public function print_legacy_controls_templates() {
		?>
		<script type="text/html" id="tmpl-customize-amp-enabled-toggle">
			<div class="amp-toggle">
				<# var elementIdPrefix = _.uniqueId( 'customize-amp-enabled-toggle' ); #>
				<div id="{{ elementIdPrefix }}tooltip" aria-hidden="true" class="tooltip" role="tooltip">
					{{ data.message }}
					<# if ( data.url ) { #>
						<a href="{{ data.url }}">{{ data.linkText }}</a>
					<# } #>
				</div>
				<input id="{{ elementIdPrefix }}checkbox" type="checkbox" class="disabled" aria-describedby="{{ elementIdPrefix }}tooltip">
				<span class="slider"></span>
				<label for="{{ elementIdPrefix }}checkbox" class="screen-reader-text"><?php esc_html_e( 'AMP preview enabled', 'amp' ); ?></label>
			</div>
		</script>
		<script type="text/html" id="tmpl-customize-amp-unavailable-notification">
			<li class="notice notice-{{ data.type || 'info' }} {{ data.alt ? 'notice-alt' : '' }} {{ data.containerClasses || '' }}" data-code="{{ data.code }}" data-type="{{ data.type }}">
				<div class="notification-message">
					{{ data.message }}
					<# if ( data.url ) { #>
						<a href="{{ data.url }}">{{ data.linkText }}</a>
					<# } #>
				</div>
			</li>
		</script>
		<?php
	}

	/**
	 * Whether the Customizer is AMP. This is always true since the AMP Customizer has been merged with the main Customizer.
	 *
	 * @codeCoverageIgnore
	 * @deprecated 0.6
	 * @return bool
	 */
	public static function is_amp_customizer() {
		_deprecated_function( __METHOD__, '0.6' );
		return true;
	}
}
PK.3Y�$�'bunyad-amp/includes/admin/functions.php<?php
/**
 * Callbacks for adding AMP-related things to the admin.
 *
 * @package AMP
 */

use AmpProject\AmpWP\DependencySupport;
use AmpProject\AmpWP\Option;
use AmpProject\AmpWP\QueryVar;
use AmpProject\AmpWP\Services;

/**
 * Sets up the AMP template editor for the Customizer.
 *
 * @internal
 */
function amp_init_customizer() {
	if ( ! Services::get( 'dependency_support' )->has_support() ) {
		return; // @codeCoverageIgnore
	}

	// Fire up the AMP Customizer.
	add_action( 'customize_register', [ AMP_Template_Customizer::class, 'init' ], 500 );

	if ( amp_is_legacy() ) {
		// Add some basic design settings + controls to the Customizer.
		add_action( 'amp_init', [ AMP_Customizer_Design_Settings::class, 'init' ] );
	}

	// Add a link to the AMP Customizer in Reader mode.
	if ( AMP_Theme_Support::READER_MODE_SLUG === AMP_Options_Manager::get_option( Option::THEME_SUPPORT ) ) {
		add_action( 'admin_menu', 'amp_add_customizer_link' );
	}
}

/**
 * Get permalink for the first AMP-eligible post.
 *
 * @todo Eliminate this in favor of ScannableURLProvider::get_posts_by_type().
 * @see \AmpProject\AmpWP\Validation\ScannableURLProvider::get_posts_by_type()
 *
 * @internal
 * @return string|null URL on success, null if none found.
 */
function amp_admin_get_preview_permalink() {
	/**
	 * Filter the post type to retrieve the latest for use in the AMP template customizer.
	 *
	 * @todo This filter doesn't actually do anything at present. Instead of array_unique() below, an array_intersect() should have been used.
	 * @param string $post_type Post type slug. Default 'post'.
	 */
	$post_type = (string) apply_filters( 'amp_customizer_post_type', 'post' );

	// Make sure the desired post type is actually supported, and if so, prefer it.
	$supported_post_types = AMP_Post_Type_Support::get_supported_post_types();
	if ( in_array( $post_type, $supported_post_types, true ) ) {
		$supported_post_types = array_values( array_unique( array_merge( [ $post_type ], $supported_post_types ) ) );
	}

	// Bail if there are no supported post types.
	if ( empty( $supported_post_types ) ) {
		return null;
	}

	// If theme support is present, then bail if the singular template is not supported.
	if ( ! amp_is_legacy() ) {
		$supported_templates = AMP_Theme_Support::get_supportable_templates();
		if ( empty( $supported_templates['is_singular']['supported'] ) ) {
			return null;
		}
	}

	$post_ids = get_posts(
		[
			'no_found_rows'    => true,
			'suppress_filters' => false,
			'post_status'      => 'publish',
			'post_type'        => $supported_post_types,
			'posts_per_page'   => 1,
			'fields'           => 'ids',
			// @todo This should eventually do a meta_query to make sure there are none that have AMP_Post_Meta_Box::STATUS_POST_META_KEY = DISABLED_STATUS.
		]
	);

	if ( empty( $post_ids ) ) {
		return null;
	}

	$post_id = $post_ids[0];

	return amp_get_permalink( $post_id );
}

/**
 * Provides a URL to the customizer.
 *
 * @internal
 * @return string
 */
function amp_get_customizer_url() {
	$is_legacy = amp_is_legacy();
	$mode      = AMP_Options_Manager::get_option( Option::THEME_SUPPORT );

	/** This filter is documented in includes/settings/class-amp-customizer-design-settings.php */
	if ( 'reader' !== $mode || ( $is_legacy && ! apply_filters( 'amp_customizer_is_enabled', true ) ) ) {
		return '';
	}

	$args = [
		QueryVar::AMP_PREVIEW => '1',
	];
	if ( $is_legacy ) {
		$args['autofocus[panel]'] = AMP_Template_Customizer::PANEL_ID;
	} else {
		$args[ amp_get_slug() ] = '1';
	}

	return add_query_arg( urlencode_deep( $args ), 'customize.php' );
}

/**
 * Registers a submenu page to access the AMP template editor panel in the Customizer.
 *
 * @internal
 */
function amp_add_customizer_link() {
	$customizer_url = amp_get_customizer_url();

	if ( ! $customizer_url ) {
		return;
	}

	// Add the theme page.
	add_theme_page(
		__( 'AMP', 'amp' ),
		__( 'AMP', 'amp' ),
		'edit_theme_options',
		$customizer_url
	);
}

/**
 * Bootstrap AMP Editor core blocks.
 *
 * @internal
 */
function amp_editor_core_blocks() {
	$editor_blocks = new AMP_Editor_Blocks();
	$editor_blocks->init();
}

/**
 * Bootstraps AMP admin classes.
 *
 * @since 1.5.0
 * @internal
 */
function amp_bootstrap_admin() {
	$admin_pointers = new AMP_Admin_Pointers();
	$admin_pointers->init();

	$post_meta_box = new AMP_Post_Meta_Box();
	$post_meta_box->init();
}
PK.3Y�w�6F F 8bunyad-amp/includes/ecosystem-data/analytics-vendors.php<?php // phpcs:disable Squiz.Commenting.FileComment.Missing
// phpcs:disable WordPress.Arrays.ArrayIndentation
// phpcs:disable WordPress.WhiteSpace.PrecisionAlignment
// phpcs:disable WordPress.Arrays.ArrayDeclarationSpacing
// phpcs:disable Generic.WhiteSpace.DisallowSpaceIndent
// phpcs:disable Generic.Arrays.DisallowLongArraySyntax
// phpcs:disable Squiz.Commenting.FileComment.Missing
// phpcs:disable Generic.Files.EndFileNewline
// phpcs:disable WordPress.Arrays.MultipleStatementAlignment

// NOTICE: This file was auto-generated with: npm run update-analytics-vendors.
return array (
  0 => 
  array (
    'value' => 'acquialift',
    'label' => 'Acquia Lift',
  ),
  1 => 
  array (
    'value' => 'adobeanalytics',
    'label' => 'Adobe Analytics',
  ),
  2 => 
  array (
    'value' => 'adobeanalytics_nativeConfig',
    'label' => 'Adobe Analytics (native config)',
  ),
  3 => 
  array (
    'value' => 'afsanalytics',
    'label' => 'AFS Analytics',
  ),
  4 => 
  array (
    'value' => 'alexametrics',
    'label' => 'Alexa Internet',
  ),
  5 => 
  array (
    'value' => 'amplitude',
    'label' => 'Amplitude',
  ),
  6 => 
  array (
    'value' => 'appsflyer',
    'label' => 'AppsFlyer',
  ),
  7 => 
  array (
    'value' => 'atinternet',
    'label' => 'AT Internet',
  ),
  8 => 
  array (
    'value' => 'baiduanalytics',
    'label' => 'Baidu Analytics',
  ),
  9 => 
  array (
    'value' => 'blackcrowai',
    'label' => 'Black Crow AI',
  ),
  10 => 
  array (
    'value' => 'bluetriangle',
    'label' => 'Blue Triangle',
  ),
  11 => 
  array (
    'value' => 'blueconic',
    'label' => 'BlueConic',
  ),
  12 => 
  array (
    'value' => 'browsi',
    'label' => 'Browsi',
  ),
  13 => 
  array (
    'value' => 'burt',
    'label' => 'Burt',
  ),
  14 => 
  array (
    'value' => 'byside',
    'label' => 'BySide',
  ),
  15 => 
  array (
    'value' => 'captainmetrics',
    'label' => 'Captain Metrics',
  ),
  16 => 
  array (
    'value' => 'chartbeat',
    'label' => 'Chartbeat',
  ),
  17 => 
  array (
    'value' => 'clicky',
    'label' => 'Clicky Web Analytics',
  ),
  18 => 
  array (
    'value' => 'colanalytics',
    'label' => 'colanalytics',
  ),
  19 => 
  array (
    'value' => 'comscore',
    'label' => 'comScore',
  ),
  20 => 
  array (
    'value' => 'cxense',
    'label' => 'Cxense',
  ),
  21 => 
  array (
    'value' => 'deepbi',
    'label' => 'Deep.BI',
  ),
  22 => 
  array (
    'value' => 'dynatrace',
    'label' => 'Dynatrace',
  ),
  23 => 
  array (
    'value' => 'epica',
    'label' => 'EPICA',
  ),
  24 => 
  array (
    'value' => 'euleriananalytics',
    'label' => 'Eulerian Analytics',
  ),
  25 => 
  array (
    'value' => 'facebookpixel',
    'label' => 'Facebook Pixel',
  ),
  26 => 
  array (
    'value' => 'gemius',
    'label' => 'Gemius',
  ),
  27 => 
  array (
    'value' => 'gfksensic',
    'label' => 'GfK Sensic',
  ),
  28 => 
  array (
    'value' => 'googleadwords',
    'label' => 'Google Ads',
  ),
  29 => 
  array (
    'value' => 'googleanalytics',
    'label' => 'Google Analytics (Legacy)',
  ),
  30 => 
  array (
    'value' => 'gtag',
    'label' => 'gtag',
  ),
  31 => 
  array (
    'value' => 'ibeatanalytics',
    'label' => 'Ibeat Analytics',
  ),
  32 => 
  array (
    'value' => 'infonline',
    'label' => 'INFOnline / IVW',
  ),
  33 => 
  array (
    'value' => 'infonline_anonymous',
    'label' => 'INFOnline anonymous',
  ),
  34 => 
  array (
    'value' => 'infonline_base',
    'label' => 'INFOnline base',
  ),
  35 => 
  array (
    'value' => 'iplabel',
    'label' => 'ip-label',
  ),
  36 => 
  array (
    'value' => 'keen',
    'label' => 'Keen',
  ),
  37 => 
  array (
    'value' => 'kenshoo',
    'label' => 'Kenshoo',
  ),
  38 => 
  array (
    'value' => 'krux',
    'label' => 'Krux',
  ),
  39 => 
  array (
    'value' => 'linkpulse',
    'label' => 'Linkpulse',
  ),
  40 => 
  array (
    'value' => 'lotame',
    'label' => 'Lotame',
  ),
  41 => 
  array (
    'value' => 'mapp_intelligence',
    'label' => 'Mapp Intelligence',
  ),
  42 => 
  array (
    'value' => 'marinsoftware',
    'label' => 'Marin Software',
  ),
  43 => 
  array (
    'value' => 'mediametrie',
    'label' => 'Médiamétrie',
  ),
  44 => 
  array (
    'value' => 'mediarithmics',
    'label' => 'mediarithmics',
  ),
  45 => 
  array (
    'value' => 'mediator',
    'label' => 'mediator',
  ),
  46 => 
  array (
    'value' => 'memo',
    'label' => 'Memo',
  ),
  47 => 
  array (
    'value' => 'moat',
    'label' => 'Moat Analytics',
  ),
  48 => 
  array (
    'value' => 'mobify',
    'label' => 'Mobify',
  ),
  49 => 
  array (
    'value' => 'moengage',
    'label' => 'MoEngage',
  ),
  50 => 
  array (
    'value' => 'mparticle',
    'label' => 'mParticle',
  ),
  51 => 
  array (
    'value' => 'navegg',
    'label' => 'Navegg',
  ),
  52 => 
  array (
    'value' => 'neodata',
    'label' => 'Neodata',
  ),
  53 => 
  array (
    'value' => 'newrelic',
    'label' => 'New Relic',
  ),
  54 => 
  array (
    'value' => 'nielsen',
    'label' => 'Nielsen',
  ),
  55 => 
  array (
    'value' => 'nielsen-marketing-cloud',
    'label' => 'Nielsen Marketing Cloud',
  ),
  56 => 
  array (
    'value' => 'oewa',
    'label' => 'OEWA',
  ),
  57 => 
  array (
    'value' => 'oewadirect',
    'label' => 'oewadirect',
  ),
  58 => 
  array (
    'value' => 'oracleInfinityAnalytics',
    'label' => 'Oracle Infinity Analytics',
  ),
  59 => 
  array (
    'value' => 'parsely',
    'label' => 'Parsely',
  ),
  60 => 
  array (
    'value' => 'permutive',
    'label' => 'Permutive',
  ),
  61 => 
  array (
    'value' => 'permutive-ampscript',
    'label' => 'Permutive-ampscript',
  ),
  62 => 
  array (
    'value' => 'piano',
    'label' => 'Piano',
  ),
  63 => 
  array (
    'value' => 'pinpoll',
    'label' => 'Pinpoll',
  ),
  64 => 
  array (
    'value' => 'piStats',
    'label' => 'Pistats',
  ),
  65 => 
  array (
    'value' => 'ppasanalytics',
    'label' => 'Piwik PRO Analytics Suite',
  ),
  66 => 
  array (
    'value' => 'pressboard',
    'label' => 'Pressboard',
  ),
  67 => 
  array (
    'value' => 'quantcast',
    'label' => 'Quantcast Measurement',
  ),
  68 => 
  array (
    'value' => 'rakam',
    'label' => 'Rakam',
  ),
  69 => 
  array (
    'value' => 'top100',
    'label' => 'Rambler/TOP-100',
  ),
  70 => 
  array (
    'value' => 'reppublika',
    'label' => 'reppublika',
  ),
  71 => 
  array (
    'value' => 'retargetly',
    'label' => 'Retargetly',
  ),
  72 => 
  array (
    'value' => 'rudderstack',
    'label' => 'RudderStack',
  ),
  73 => 
  array (
    'value' => 'segment',
    'label' => 'Segment',
  ),
  74 => 
  array (
    'value' => 'sensorsanalytics',
    'label' => 'SensorsData',
  ),
  75 => 
  array (
    'value' => 'shinystat',
    'label' => 'ShinyStat',
  ),
  76 => 
  array (
    'value' => 'snowplow',
    'label' => 'Snowplow Analytics',
  ),
  77 => 
  array (
    'value' => 'snowplow_v2',
    'label' => 'Snowplow Analytics (v2)',
  ),
  78 => 
  array (
    'value' => 'mpulse',
    'label' => 'SOASTA mPulse',
  ),
  79 => 
  array (
    'value' => 'subscriptions-propensity',
    'label' => 'subscriptions-propensity',
  ),
  80 => 
  array (
    'value' => 'taboola',
    'label' => 'Taboola',
  ),
  81 => 
  array (
    'value' => 'tail',
    'label' => 'Tail',
  ),
  82 => 
  array (
    'value' => 'teaanalytics',
    'label' => 'TEA Analytics',
  ),
  83 => 
  array (
    'value' => 'tealiumcollect',
    'label' => 'Tealium Collect',
  ),
  84 => 
  array (
    'value' => 'topmailru',
    'label' => 'Top.Mail.Ru',
  ),
  85 => 
  array (
    'value' => 'treasuredata',
    'label' => 'Treasure Data',
  ),
  86 => 
  array (
    'value' => 'umenganalytics',
    'label' => 'Umeng+ Analytics',
  ),
  87 => 
  array (
    'value' => 'upscore',
    'label' => 'Upscore',
  ),
  88 => 
  array (
    'value' => 'vponanalytics',
    'label' => 'Vpon Analytics',
  ),
  89 => 
  array (
    'value' => 'webengage',
    'label' => 'Webengage',
  ),
  90 => 
  array (
    'value' => 'webtrekk_v2',
    'label' => 'Webtrekk',
  ),
  91 => 
  array (
    'value' => 'metrika',
    'label' => 'Yandex Metrica',
  ),
);PK.3Y��}����.bunyad-amp/includes/ecosystem-data/plugins.php<?php // phpcs:disable Squiz.Commenting.FileComment.Missing
// phpcs:disable WordPress.Arrays.ArrayIndentation
// phpcs:disable WordPress.WhiteSpace.PrecisionAlignment
// phpcs:disable WordPress.Arrays.ArrayDeclarationSpacing
// phpcs:disable Generic.WhiteSpace.DisallowSpaceIndent
// phpcs:disable Generic.Arrays.DisallowLongArraySyntax
// phpcs:disable Squiz.Commenting.FileComment.Missing
// phpcs:disable Generic.Files.EndFileNewline
// phpcs:disable WordPress.Arrays.MultipleStatementAlignment

// NOTICE: This file was auto-generated with: npm run update-ecosystem-files.
return array (
  0 => 
  array (
    'name' => 'oEmbed Infogram',
    'slug' => 'oembed-infogram',
    'homepage' => 'https://github.com/android-com-pl/oembed-infogram',
    'short_description' => 'A simple plugin that adds support for embedding Infogram.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/oembed-infogram/assets/icon.svg?rev=2831317',
      'svg' => 'https://ps.w.org/oembed-infogram/assets/icon.svg?rev=2831317',
    ),
    'wporg' => true,
  ),
  1 => 
  array (
    'name' => 'SEOPress &#8211; On-site SEO',
    'slug' => 'wp-seopress',
    'homepage' => 'https://www.seopress.org/',
    'short_description' => 'SEOPress, a simple, fast and powerful all in one SEO plugin for WordPress. Rank higher in search engines, fully white label. Now with AI.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/wp-seopress/assets/icon.svg?rev=2606872',
      'svg' => 'https://ps.w.org/wp-seopress/assets/icon.svg?rev=2606872',
    ),
    'wporg' => true,
  ),
  2 => 
  array (
    'name' => 'Super Web Share',
    'slug' => 'super-web-share',
    'homepage' => 'https://www.superwebshare.com',
    'short_description' => 'Super Web Share helps to easily add native share prompt to your website for easy page/post sharing in less than a minute.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/super-web-share/assets/icon-128x128.png?rev=2896325',
    ),
    'wporg' => true,
  ),
  3 => 
  array (
    'name' => 'Scriptless Social Sharing',
    'slug' => 'scriptless-social-sharing',
    'homepage' => 'https://github.com/robincornett/scriptless-social-sharing',
    'short_description' => 'This plugin adds super simple social sharing buttons to your content.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/scriptless-social-sharing/assets/icon-128x128.jpg?rev=1361689',
      '2x' => 'https://ps.w.org/scriptless-social-sharing/assets/icon-256x256.jpg?rev=1361689',
    ),
    'wporg' => true,
  ),
  4 => 
  array (
    'name' => 'Meks Easy Social Share',
    'slug' => 'meks-easy-social-share',
    'homepage' => '',
    'short_description' => 'Easily display social share buttons for your posts, pages and custom post types. Supports Facebook, Twitter, Reddit, Pinterest, Email, Google+, Linked &hellip;',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/meks-easy-social-share/assets/icon-128x128.png?rev=2092911',
      '2x' => 'https://ps.w.org/meks-easy-social-share/assets/icon-256x256.png?rev=2092911',
    ),
    'wporg' => true,
  ),
  5 => 
  array (
    'name' => 'Simple Social Icons',
    'slug' => 'simple-social-icons',
    'homepage' => 'https://wordpress.org/plugins/simple-social-icons/',
    'short_description' => 'This plugin allows you to insert social icons in any widget area.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/simple-social-icons/assets/icon.svg?rev=2917674',
      'svg' => 'https://ps.w.org/simple-social-icons/assets/icon.svg?rev=2917674',
    ),
    'wporg' => true,
  ),
  6 => 
  array (
    'name' => 'OneSignal &#8211; Web Push Notifications',
    'slug' => 'onesignal-free-web-push-notifications',
    'homepage' => 'https://onesignal.com/',
    'short_description' => 'Increase engagement and drive more repeat traffic to your WordPress site with push notifications. Now a Wordpress VIP Gold Partner.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/onesignal-free-web-push-notifications/assets/icon.svg?rev=1669089',
      'svg' => 'https://ps.w.org/onesignal-free-web-push-notifications/assets/icon.svg?rev=1669089',
    ),
    'wporg' => true,
  ),
  7 => 
  array (
    'name' => 'Rate my Post &#8211; WP Rating System',
    'slug' => 'rate-my-post',
    'homepage' => 'https://wordpress.org/plugins/rate-my-post/',
    'short_description' => 'Rate my Post - WP Rating System allows you to easily add rating functionality to your WordPress website. Visitors can rate your posts/pages and send y &hellip;',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/rate-my-post/assets/icon-128x128.png?rev=2045796',
    ),
    'wporg' => true,
  ),
  8 => 
  array (
    'name' => 'Fonts Plugin | Google Fonts Typography',
    'slug' => 'olympus-google-fonts',
    'homepage' => 'https://wordpress.org/plugins/olympus-google-fonts/',
    'short_description' => 'The easiest to use Google Fonts Plugin. No coding required. Optimized for Speed. 1000+ font choices.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/olympus-google-fonts/assets/icon-128x128.jpg?rev=2812012',
      '2x' => 'https://ps.w.org/olympus-google-fonts/assets/icon-256x256.jpg?rev=2812012',
    ),
    'wporg' => true,
  ),
  9 => 
  array (
    'name' => 'Jetpack Boost &#8211; Website Speed, Performance and Critical CSS',
    'slug' => 'jetpack-boost',
    'homepage' => 'https://jetpack.com/boost',
    'short_description' => 'Speed up your WordPress site by optimizing page performance with Jetpack Boost. Easily activate one-click optimizations to boost your Core Web Vitals.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/jetpack-boost/assets/icon.svg?rev=2818794',
      'svg' => 'https://ps.w.org/jetpack-boost/assets/icon.svg?rev=2818794',
    ),
    'wporg' => true,
  ),
  10 => 
  array (
    'name' => 'Podcast Player &#8211; Your Podcasting Companion',
    'slug' => 'podcast-player',
    'homepage' => 'https://easypodcastpro.com',
    'short_description' => 'Showcase your podcast only using podcasting feed url. Use widget, shortcode or editor block to display podcast player anywhere on your site.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/podcast-player/assets/icon-256x256.png?rev=2622629',
      '2x' => 'https://ps.w.org/podcast-player/assets/icon-256x256.png?rev=2622629',
    ),
    'wporg' => true,
  ),
  11 => 
  array (
    'name' => 'WPSSO Schema JSON-LD Markup',
    'slug' => 'wpsso-schema-json-ld-markup',
    'homepage' => 'https://wordpress.org/plugins/wpsso-schema-json-ld/',
    'short_description' => '<p>Google Rich Results with JSON-LD structured data for Articles, Carousels (aka Item Lists), Claim Reviews, Events, FAQ pages, How-Tos, Images, Local Business / Local SEO, Organizations, Products, Ratings, Recipes, Restaurants, Reviews, Video Objects, and much more.</p>
',
    'icons' => 
    array (
      '1x' => 'https://amp-wp.org/wp-content/uploads/2021/08/wpsso2-285x160.jpg',
      '2x' => 'https://amp-wp.org/wp-content/uploads/2021/08/wpsso2-372x209.jpg',
      'svg' => '',
    ),
    'wporg' => false,
  ),
  12 => 
  array (
    'name' => 'ShortPixel Image Optimizer &#8211; Optimize Images, Convert WebP &amp; AVIF',
    'slug' => 'shortpixel-image-optimiser',
    'homepage' => 'https://shortpixel.com/',
    'short_description' => 'Optimize images &amp; PDFs smartly. Create and compress next-gen WebP and AVIF formats. Smart crop and resize.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/shortpixel-image-optimiser/assets/icon-128x128.png?rev=1038819',
      '2x' => 'https://ps.w.org/shortpixel-image-optimiser/assets/icon-256x256.png?rev=1038819',
    ),
    'wporg' => true,
  ),
  13 => 
  array (
    'name' => 'Toolkit for Block Theme (Gutenberg Blocks, Templates, Patterns, Google Fonts) – Twentig',
    'slug' => 'twentig',
    'homepage' => 'https://twentig.com',
    'short_description' => 'Create your website with enhanced Gutenberg blocks, templates, patterns &amp; Google Fonts. Boost Twenty Twenty-Three, Twenty-Two or any block theme.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/twentig/assets/icon.svg?rev=2569439',
      'svg' => 'https://ps.w.org/twentig/assets/icon.svg?rev=2569439',
    ),
    'wporg' => true,
  ),
  14 => 
  array (
    'name' => 'Custom Post Type UI',
    'slug' => 'custom-post-type-ui',
    'homepage' => 'https://github.com/WebDevStudios/custom-post-type-ui/',
    'short_description' => 'Admin UI for creating custom content types like post types and taxonomies',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/custom-post-type-ui/assets/icon-128x128.png?rev=2744389',
      '2x' => 'https://ps.w.org/custom-post-type-ui/assets/icon-256x256.png?rev=2744389',
    ),
    'wporg' => true,
  ),
  15 => 
  array (
    'name' => 'Flex Posts &#8211; Widget and Gutenberg Block',
    'slug' => 'flex-posts',
    'homepage' => 'https://tajam.id/flex-posts/',
    'short_description' => 'A widget to display posts with thumbnails in various layouts. Fits nicely in any widget area size.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/flex-posts/assets/icon-128x128.png?rev=1871802',
    ),
    'wporg' => true,
  ),
  16 => 
  array (
    'name' => 'YARPP &#8211; Yet Another Related Posts Plugin',
    'slug' => 'yet-another-related-posts-plugin',
    'homepage' => 'https://yarpp.com/',
    'short_description' => 'The best WordPress plugin for displaying related posts. Simple and flexible, with a powerful proven algorithm and inbuilt caching.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/yet-another-related-posts-plugin/assets/icon-128x128.png?rev=2549977',
      '2x' => 'https://ps.w.org/yet-another-related-posts-plugin/assets/icon-256x256.png?rev=2549977',
    ),
    'wporg' => true,
  ),
  17 => 
  array (
    'name' => 'Superb WordPress Table (SEO Optimized Tables With Schema)',
    'slug' => 'superb-tables',
    'homepage' => 'https://superbthemes.com/plugins/superb-tables/',
    'short_description' => 'Responsive &amp; SEO Optimized tables. Get your Google Featured Snippets. Different table designs, table shortcodes &amp; lightweight code.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/superb-tables/assets/icon-256x256.png?rev=2044672',
      '2x' => 'https://ps.w.org/superb-tables/assets/icon-256x256.png?rev=2044672',
    ),
    'wporg' => true,
  ),
  18 => 
  array (
    'name' => 'Floating Button',
    'slug' => 'floating-button',
    'homepage' => 'https://wordpress.org/plugins/floating-button/',
    'short_description' => 'Easily create a custom sticky floating buttons.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/floating-button/assets/icon-128x128.png?rev=2533016',
      '2x' => 'https://ps.w.org/floating-button/assets/icon-256x256.png?rev=2533016',
    ),
    'wporg' => true,
  ),
  19 => 
  array (
    'name' => 'Breadcrumb NavXT',
    'slug' => 'breadcrumb-navxt',
    'homepage' => 'http://mtekk.us/code/breadcrumb-navxt/',
    'short_description' => 'Adds breadcrumb navigation showing the visitor&#039;s path to their current location.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/breadcrumb-navxt/assets/icon.svg?rev=1927103',
      'svg' => 'https://ps.w.org/breadcrumb-navxt/assets/icon.svg?rev=1927103',
    ),
    'wporg' => true,
  ),
  20 => 
  array (
    'name' => 'WP Recipe Maker',
    'slug' => 'wp-recipe-maker',
    'homepage' => 'http://bootstrapped.ventures/wp-recipe-maker/',
    'short_description' => 'The easy and user-friendly recipe plugin for everyone. Automatic JSON-LD metadata for food AND how-to recipes will improve your SEO!',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/wp-recipe-maker/assets/icon-128x128.png?rev=2967063',
      '2x' => 'https://ps.w.org/wp-recipe-maker/assets/icon-256x256.png?rev=2967063',
    ),
    'wporg' => true,
  ),
  21 => 
  array (
    'name' => 'Slim SEO &#8211; Fast &amp; Automated WordPress SEO Plugin',
    'slug' => 'slim-seo',
    'homepage' => 'https://wpslimseo.com',
    'short_description' => 'A full-featured SEO plugin for WordPress that&#039;s lightweight, blazing fast with minimum configuration. No bloats and just works!',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/slim-seo/assets/icon.svg?rev=2005049',
      'svg' => 'https://ps.w.org/slim-seo/assets/icon.svg?rev=2005049',
    ),
    'wporg' => true,
  ),
  22 => 
  array (
    'name' => 'Schema &amp; Structured Data for WP &amp; AMP',
    'slug' => 'schema-and-structured-data-for-wp',
    'homepage' => '',
    'short_description' => 'Schema &amp; Structured Data for WP &amp; AMP adds Google Rich Snippets markup according to Schema.org guidelines to structure your site for SEO.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/schema-and-structured-data-for-wp/assets/icon-128x128.png?rev=1922284',
      '2x' => 'https://ps.w.org/schema-and-structured-data-for-wp/assets/icon-256x256.png?rev=1922284',
    ),
    'wporg' => true,
  ),
  23 => 
  array (
    'name' => 'GenerateBlocks',
    'slug' => 'generateblocks',
    'homepage' => 'https://generateblocks.com',
    'short_description' => 'A small collection of lightweight WordPress blocks that can accomplish nearly anything.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/generateblocks/assets/icon-128x128.png?rev=2336822',
      '2x' => 'https://ps.w.org/generateblocks/assets/icon-256x256.png?rev=2336822',
    ),
    'wporg' => true,
  ),
  24 => 
  array (
    'name' => 'Blackhole for Bad Bots',
    'slug' => 'blackhole-bad-bots',
    'homepage' => 'https://perishablepress.com/blackhole-bad-bots/',
    'short_description' => 'Blackhole is a WordPress security plugin that detects and traps bad bots in a virtual black hole, where they are denied access to your entire site.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/blackhole-bad-bots/assets/icon-128x128.png?rev=1471215',
      '2x' => 'https://ps.w.org/blackhole-bad-bots/assets/icon-256x256.png?rev=1471215',
    ),
    'wporg' => true,
  ),
  25 => 
  array (
    'name' => 'Page View Count',
    'slug' => 'page-views-count',
    'homepage' => '',
    'short_description' => 'Places an icon, all time views count and views today count at the bottom of posts, pages and custom post types on any WordPress website.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/page-views-count/assets/icon.svg?rev=986301',
      'svg' => 'https://ps.w.org/page-views-count/assets/icon.svg?rev=986301',
    ),
    'wporg' => true,
  ),
  26 => 
  array (
    'name' => 'Newspack Listings',
    'slug' => 'newspack-listings',
    'homepage' => 'https://github.com/Automattic/newspack-listings/releases',
    'short_description' => '<p>Create reusable content as listings and add them to lists wherever core blocks can be used</p>
',
    'icons' => 
    array (
      '1x' => 'https://amp-wp.org/wp-content/uploads/2021/02/listings2-285x160.jpg',
      '2x' => 'https://amp-wp.org/wp-content/uploads/2021/02/listings2-372x209.jpg',
      'svg' => '',
    ),
    'wporg' => false,
  ),
  27 => 
  array (
    'name' => 'Newspack Newsletters',
    'slug' => 'newspack-newsletters',
    'homepage' => 'https://newspack.com',
    'short_description' => 'Create email newsletters with the Gutenberg editor and distribute them with your ActiveCampaign, Campaign Monitor, Constant Contact, or Mailchimp mail &hellip;',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/newspack-newsletters/assets/icon.svg?rev=2475195',
      'svg' => 'https://ps.w.org/newspack-newsletters/assets/icon.svg?rev=2475195',
    ),
    'wporg' => true,
  ),
  28 => 
  array (
    'name' => 'Web Stories',
    'slug' => 'web-stories',
    'homepage' => 'https://wp.stories.google/',
    'short_description' => 'Web Stories are a visual storytelling format for the open web which immerses your readers in fast-loading, full-screen, and visually rich experiences.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/web-stories/assets/icon.svg?rev=2386543',
      'svg' => 'https://ps.w.org/web-stories/assets/icon.svg?rev=2386543',
    ),
    'wporg' => true,
  ),
  29 => 
  array (
    'name' => 'Jetpack &#8211; WP Security, Backup, Speed, &amp; Growth',
    'slug' => 'jetpack',
    'homepage' => 'https://jetpack.com',
    'short_description' => 'Improve your WP security with powerful one-click tools like backup, WAF, and malware scan. Get essential free tools including stats, CDN and social sh &hellip;',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/jetpack/assets/icon.svg?rev=2819237',
      'svg' => 'https://ps.w.org/jetpack/assets/icon.svg?rev=2819237',
    ),
    'wporg' => true,
  ),
  30 => 
  array (
    'name' => 'Easy Notification Bar',
    'slug' => 'easy-notification-bar',
    'homepage' => 'https://wordpress.org/plugins/easy-notification-bar/',
    'short_description' => 'Easily add a custom top bar notification message to on your site with live customization options via the WordPress customizer.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/easy-notification-bar/assets/icon-128x128.png?rev=2515988',
      '2x' => 'https://ps.w.org/easy-notification-bar/assets/icon-256x256.png?rev=2515988',
    ),
    'wporg' => true,
  ),
  31 => 
  array (
    'name' => 'Antispam Bee',
    'slug' => 'antispam-bee',
    'homepage' => 'https://antispambee.pluginkollektiv.org/',
    'short_description' => 'Antispam plugin with a sophisticated tool set for effective day to day comment and trackback spam-fighting. Build with data protection and privacy in  &hellip;',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/antispam-bee/assets/icon-128x128.png?rev=2898402',
      '2x' => 'https://ps.w.org/antispam-bee/assets/icon-256x256.png?rev=2898402',
    ),
    'wporg' => true,
  ),
  32 => 
  array (
    'name' => 'SimpleTOC &#8211; Table of Contents Block',
    'slug' => 'simpletoc',
    'homepage' => 'https://marc.tv/simpletoc-wordpress-inhaltsverzeichnis-plugin-gutenberg/',
    'short_description' => 'SEO-friendly Table of Contents Gutenberg block. No JavaScript and no CSS means faster loading.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/simpletoc/assets/icon.svg?rev=2796116',
      'svg' => 'https://ps.w.org/simpletoc/assets/icon.svg?rev=2796116',
    ),
    'wporg' => true,
  ),
  33 => 
  array (
    'name' => 'Log in with Google',
    'slug' => 'login-with-google',
    'homepage' => '',
    'short_description' => 'Minimal plugin that allows WordPress users to log in using Google.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/login-with-google/assets/icon-128x128.png?rev=2687701',
      '2x' => 'https://ps.w.org/login-with-google/assets/icon-256x256.png?rev=2687701',
    ),
    'wporg' => true,
  ),
  34 => 
  array (
    'name' => 'Search with Google',
    'slug' => 'search-with-google',
    'homepage' => '',
    'short_description' => 'Replace WordPress default search with server-side rendered Google Custom Search results.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/search-with-google/assets/icon-128x128.png?rev=2402707',
      '2x' => 'https://ps.w.org/search-with-google/assets/icon-256x256.png?rev=2402707',
    ),
    'wporg' => true,
  ),
  35 => 
  array (
    'name' => 'Page Builder Gutenberg Blocks – CoBlocks',
    'slug' => 'coblocks',
    'homepage' => '',
    'short_description' => 'CoBlocks is a suite of page builder WordPress blocks for Gutenberg, with 10+ new blocks and a true page builder experience with rows and columns.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/coblocks/assets/icon-128x128.jpg?rev=2243972',
      '2x' => 'https://ps.w.org/coblocks/assets/icon-256x256.jpg?rev=2243972',
    ),
    'wporg' => true,
  ),
  36 => 
  array (
    'name' => 'Simple Author Box',
    'slug' => 'simple-author-box',
    'homepage' => 'https://wpauthorbox.com/',
    'short_description' => 'Add a responsive author box with social icons to any post. Great author box for any site!',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/simple-author-box/assets/icon-128x128.jpg?rev=1821054',
    ),
    'wporg' => true,
  ),
  37 => 
  array (
    'name' => 'Genesis Blocks',
    'slug' => 'genesis-blocks',
    'homepage' => 'https://studiopress.com/genesis-pro/',
    'short_description' => 'A collection of content blocks, sections, &amp; full-page layouts for the block editor.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/genesis-blocks/assets/icon-128x128.png?rev=2368839',
      '2x' => 'https://ps.w.org/genesis-blocks/assets/icon-256x256.png?rev=2368840',
    ),
    'wporg' => true,
  ),
  38 => 
  array (
    'name' => 'MathML Block',
    'slug' => 'mathml-block',
    'homepage' => '',
    'short_description' => 'A MathML block for the WordPress block editor (Gutenberg).',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/mathml-block/assets/icon-128x128.png?rev=2002452',
      '2x' => 'https://ps.w.org/mathml-block/assets/icon-256x256.png?rev=2002452',
    ),
    'wporg' => true,
  ),
  39 => 
  array (
    'name' => 'Calculated Fields Form',
    'slug' => 'calculated-fields-form',
    'homepage' => 'https://cff.dwbooster.com',
    'short_description' => 'Calculated Fields Form allows you to create both simple and rich forms, quickly like a professional. It includes a form builder with dynamic calculate &hellip;',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/calculated-fields-form/assets/icon-128x128.jpg?rev=1734377',
      '2x' => 'https://ps.w.org/calculated-fields-form/assets/icon-256x256.jpg?rev=1734377',
    ),
    'wporg' => true,
  ),
  40 => 
  array (
    'name' => 'All in One SEO – Best WordPress SEO Plugin – Easily Improve SEO Rankings &amp; Increase Traffic',
    'slug' => 'all-in-one-seo-pack',
    'homepage' => 'https://aioseo.com/',
    'short_description' => 'The original WordPress SEO plugin. Improve your WordPress SEO rankings and traffic with our comprehensive SEO tools and smart SEO optimizations!',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/all-in-one-seo-pack/assets/icon.svg?rev=2443290',
      'svg' => 'https://ps.w.org/all-in-one-seo-pack/assets/icon.svg?rev=2443290',
    ),
    'wporg' => true,
  ),
  41 => 
  array (
    'name' => 'Weglot Translate &#8211; Translate your WordPress website and go multilingual',
    'slug' => 'weglot',
    'homepage' => 'http://wordpress.org/plugins/weglot/',
    'short_description' => 'Translate your WordPress website in 110+ languages within minutes with Weglot Translate, without any coding.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/weglot/assets/icon.svg?rev=2814196',
      'svg' => 'https://ps.w.org/weglot/assets/icon.svg?rev=2814196',
    ),
    'wporg' => true,
  ),
  42 => 
  array (
    'name' => 'Rank Math SEO',
    'slug' => 'seo-by-rank-math',
    'homepage' => 'https://rankmath.com/',
    'short_description' => 'Rank Math SEO is the Best WordPress SEO plugin combines the features of many SEO tools in a single package &amp; helps you multiply your SEO traffic.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/seo-by-rank-math/assets/icon.svg?rev=2848340',
      'svg' => 'https://ps.w.org/seo-by-rank-math/assets/icon.svg?rev=2848340',
    ),
    'wporg' => true,
  ),
  43 => 
  array (
    'name' => 'Head, Footer and Post Injections',
    'slug' => 'header-footer',
    'homepage' => 'https://www.satollo.net/plugins/header-footer',
    'short_description' => 'Header and Footer plugin let you to add html code to the head and footer sections of your blog page, inside posts... and more!',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/header-footer/assets/icon-256x256.png?rev=1064219',
      '2x' => 'https://ps.w.org/header-footer/assets/icon-256x256.png?rev=1064219',
    ),
    'wporg' => true,
  ),
  44 => 
  array (
    'name' => 'WP Rocket',
    'slug' => 'wp-rocket',
    'homepage' => 'https://wp-rocket.me/',
    'short_description' => '<p>Powerful caching to speed up your WordPress website in a few clicks. No coding required.</p>
',
    'icons' => 
    array (
      '1x' => 'https://amp-wp.org/wp-content/uploads/2020/06/WP-Rocket-285x160.png',
      '2x' => 'https://amp-wp.org/wp-content/uploads/2020/06/WP-Rocket-372x209.png',
      'svg' => '',
    ),
    'wporg' => false,
  ),
  45 => 
  array (
    'name' => 'Statify',
    'slug' => 'statify',
    'homepage' => 'https://statify.pluginkollektiv.org/',
    'short_description' => 'Visitor statistics for WordPress with focus on data protection, transparency and clarity. Perfect as a widget in your WordPress Dashboard.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/statify/assets/icon-128x128.png?rev=2355063',
      '2x' => 'https://ps.w.org/statify/assets/icon-256x256.png?rev=2355063',
    ),
    'wporg' => true,
  ),
  46 => 
  array (
    'name' => 'LIQUID BLOCKS GALLERY 37+ Free Designs',
    'slug' => 'liquid-blocks',
    'homepage' => 'https://lqd.jp/wp/plugin.html',
    'short_description' => 'If you’re looking to create block page sections that look great give LIQUID BLOCKS a try.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/liquid-blocks/assets/icon-128x128.png?rev=2175390',
    ),
    'wporg' => true,
  ),
  47 => 
  array (
    'name' => 'Schema',
    'slug' => 'schema',
    'homepage' => 'https://schema.press',
    'short_description' => 'Get the next generation of Schema Structured Data to enhance your WordPress site presentation in Google search results.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/schema/assets/icon-128x128.png?rev=1750172',
      '2x' => 'https://ps.w.org/schema/assets/icon-256x256.png?rev=1750173',
    ),
    'wporg' => true,
  ),
  48 => 
  array (
    'name' => 'Iframely – WP media embeds, cards and blocks',
    'slug' => 'iframely',
    'homepage' => 'https://iframely.com/wordpress',
    'short_description' => 'Iframely cloud extends WordPress embeds with customizable embed blocks for over 1900 rich media publishers. For the rest of the Internet, Iframely sho &hellip;',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/iframely/assets/icon.svg?rev=2686906',
      'svg' => 'https://ps.w.org/iframely/assets/icon.svg?rev=2686906',
    ),
    'wporg' => true,
  ),
  49 => 
  array (
    'name' => 'Pym.js Embeds',
    'slug' => 'pym-shortcode',
    'homepage' => 'https://github.com/INN/pym-shortcode',
    'short_description' => 'A WordPress block and shortcode for embedding iframes that are responsive horizontally and vertically, using the NPR Visuals Team&#039;s Pym.js.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/pym-shortcode/assets/icon.svg?rev=1944461',
      'svg' => 'https://ps.w.org/pym-shortcode/assets/icon.svg?rev=1944461',
    ),
    'wporg' => true,
  ),
  50 => 
  array (
    'name' => 'PWA',
    'slug' => 'pwa',
    'homepage' => 'https://github.com/GoogleChromeLabs/pwa-wp',
    'short_description' => 'WordPress feature plugin to bring Progressive Web App (PWA) capabilities to Core',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/pwa/assets/icon.svg?rev=1908485',
      'svg' => 'https://ps.w.org/pwa/assets/icon.svg?rev=1908485',
    ),
    'wporg' => true,
  ),
  51 => 
  array (
    'name' => 'MC4WP: Mailchimp for WordPress',
    'slug' => 'mailchimp-for-wp',
    'homepage' => 'https://www.mc4wp.com/#utm_source=wp-plugin&utm_medium=mailchimp-for-wp&utm_campaign=plugins-page',
    'short_description' => 'The #1 Mailchimp plugin for WordPress. Allows you to add a multitude of newsletter sign-up methods to your site.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/mailchimp-for-wp/assets/icon-128x128.png?rev=1224577',
      '2x' => 'https://ps.w.org/mailchimp-for-wp/assets/icon-256x256.png?rev=1224577',
    ),
    'wporg' => true,
  ),
  52 => 
  array (
    'name' => 'Site Kit by Google &#8211; Analytics, Search Console, AdSense, Speed',
    'slug' => 'google-site-kit',
    'homepage' => 'https://sitekit.withgoogle.com',
    'short_description' => 'Site Kit is a one-stop solution for WordPress users to use everything Google has to offer to make them successful on the web.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/google-site-kit/assets/icon-128x128.png?rev=2181376',
      '2x' => 'https://ps.w.org/google-site-kit/assets/icon-256x256.png?rev=2181376',
    ),
    'wporg' => true,
  ),
  53 => 
  array (
    'name' => 'Newspack Blocks',
    'slug' => 'newspack-blocks',
    'homepage' => 'https://github.com/Automattic/newspack-blocks',
    'short_description' => '<p>A collection of useful and easy to use Gutenberg based blocks, developed primarily for the Newspack project.</p>
',
    'icons' => 
    array (
      '1x' => 'https://amp-wp.org/wp-content/uploads/2019/11/newspack_blocks-285x160.jpg',
      '2x' => 'https://amp-wp.org/wp-content/uploads/2019/11/newspack_blocks-372x209.jpg',
      'svg' => '',
    ),
    'wporg' => false,
  ),
  54 => 
  array (
    'name' => 'Advanced Ads – Ad Manager &amp; AdSense',
    'slug' => 'advanced-ads',
    'homepage' => 'https://wpadvancedads.com',
    'short_description' => 'Manage and optimize all ad types. Support for Google AdSense Auto ads, Amazon, image banners, HTML, page builder, ad widget, ad rotations, ads.txt',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/advanced-ads/assets/icon-128x128.gif?rev=2773443',
      '2x' => 'https://ps.w.org/advanced-ads/assets/icon-256x256.gif?rev=2773443',
    ),
    'wporg' => true,
  ),
  55 => 
  array (
    'name' => 'Syntax-highlighting Code Block (with Server-side Rendering)',
    'slug' => 'syntax-highlighting-code-block',
    'homepage' => 'https://github.com/westonruter/syntax-highlighting-code-block',
    'short_description' => 'Extending the Code block with syntax highlighting rendered on the server, thus being AMP-compatible and having faster frontend performance.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/syntax-highlighting-code-block/assets/icon.svg?rev=2131108',
      'svg' => 'https://ps.w.org/syntax-highlighting-code-block/assets/icon.svg?rev=2131108',
    ),
    'wporg' => true,
  ),
  56 => 
  array (
    'name' => 'Contact Form by WPForms &#8211; Drag &amp; Drop Form Builder for WordPress',
    'slug' => 'wpforms-lite',
    'homepage' => 'https://wpforms.com',
    'short_description' => 'The best WordPress contact form plugin. Drag &amp; Drop online form builder to create beautiful contact forms, payment forms, &amp; other custom forms &hellip;',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/wpforms-lite/assets/icon.svg?rev=2574198',
      'svg' => 'https://ps.w.org/wpforms-lite/assets/icon.svg?rev=2574198',
    ),
    'wporg' => true,
  ),
  57 => 
  array (
    'name' => 'MonsterInsights &#8211; Google Analytics Dashboard for WordPress (Website Stats Made Easy)',
    'slug' => 'google-analytics-for-wordpress',
    'homepage' => 'https://www.monsterinsights.com/?utm_source=liteplugin&utm_medium=pluginheader&utm_campaign=pluginurl&utm_content=7%2E0%2E0',
    'short_description' => 'The best free Google Analytics plugin for WordPress. See how visitors find and use your website, so you can grow your business.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/google-analytics-for-wordpress/assets/icon.svg?rev=2976619',
      'svg' => 'https://ps.w.org/google-analytics-for-wordpress/assets/icon.svg?rev=2976619',
    ),
    'wporg' => true,
  ),
  58 => 
  array (
    'name' => 'Atomic Blocks &#8211; Gutenberg Blocks Collection',
    'slug' => 'atomic-blocks',
    'homepage' => 'https://atomicblocks.com',
    'short_description' => 'A collection of beautiful, customizable Gutenberg blocks for the new block editor.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/atomic-blocks/assets/icon-128x128.jpg?rev=1914920',
      '2x' => 'https://ps.w.org/atomic-blocks/assets/icon-256x256.jpg?rev=1914921',
    ),
    'wporg' => true,
  ),
  59 => 
  array (
    'name' => 'Akismet Anti-spam: Spam Protection',
    'slug' => 'akismet',
    'homepage' => 'https://akismet.com/',
    'short_description' => 'The best anti-spam protection to block spam comments and spam in a contact form. The most trusted antispam solution for WordPress and WooCommerce.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/akismet/assets/icon-128x128.png?rev=2818463',
      '2x' => 'https://ps.w.org/akismet/assets/icon-256x256.png?rev=2818463',
    ),
    'wporg' => true,
  ),
  60 => 
  array (
    'name' => 'WP GDPR Cookie Notice',
    'slug' => 'wp-gdpr-cookie-notice',
    'homepage' => 'https://wordpress.org/plugins/wp-gdpr-cookie-notice/',
    'short_description' => 'Simple performant cookie consent notice that supports AMP, Web Stories, granular cookie control and live preview customization.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/wp-gdpr-cookie-notice/assets/icon-128x128.png?rev=2042024',
      '2x' => 'https://ps.w.org/wp-gdpr-cookie-notice/assets/icon-256x256.png?rev=2042024',
    ),
    'wporg' => true,
  ),
  61 => 
  array (
    'name' => 'AddThis Social Sharing',
    'slug' => 'addthis-social-sharing',
    'homepage' => 'https://wordpress.org/plugins/addthis/',
    'short_description' => '<p>AddThis is known for a full suite of website tools including beautifully crafted and simple share buttons.</p>
',
    'icons' => 
    array (
      '1x' => 'https://amp-wp.org/wp-content/uploads/2018/12/AddThis-banner-285x160.jpg',
      '2x' => 'https://amp-wp.org/wp-content/uploads/2018/12/AddThis-banner-372x209.jpg',
      'svg' => '',
    ),
    'wporg' => false,
  ),
  62 => 
  array (
    'name' => 'BigCommerce For WordPress',
    'slug' => 'bigcommerce',
    'homepage' => '',
    'short_description' => 'Scale your ecommerce business with WordPress on the front-end and BigCommerce on the back end. Free up server resources from things like catalog manag &hellip;',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/bigcommerce/assets/icon-256x256.png?rev=2860929',
      '2x' => 'https://ps.w.org/bigcommerce/assets/icon-256x256.png?rev=2860929',
    ),
    'wporg' => true,
  ),
  63 => 
  array (
    'name' => 'Yoast SEO',
    'slug' => 'wordpress-seo',
    'homepage' => 'https://yoa.st/1uj',
    'short_description' => 'Improve your WordPress SEO: Write better content and have a fully optimized WordPress site using the Yoast SEO plugin.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/wordpress-seo/assets/icon.svg?rev=2363699',
      'svg' => 'https://ps.w.org/wordpress-seo/assets/icon.svg?rev=2363699',
    ),
    'wporg' => true,
  ),
  64 => 
  array (
    'name' => 'Gutenberg',
    'slug' => 'gutenberg',
    'homepage' => 'https://github.com/WordPress/gutenberg',
    'short_description' => 'The Gutenberg plugin provides editing, customization, and site building features to WordPress. This beta plugin allows you to test bleeding-edge featu &hellip;',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/gutenberg/assets/icon-128x128.jpg?rev=1776042',
      '2x' => 'https://ps.w.org/gutenberg/assets/icon-256x256.jpg?rev=1776042',
    ),
    'wporg' => true,
  ),
  65 => 
  array (
    'name' => 'A no-code page builder for beautiful performance-based content',
    'slug' => 'setka-editor',
    'homepage' => 'https://editor.setka.io/',
    'short_description' => 'A&nbsp;WordPress plugin to&nbsp;design beautiful performance-based content. Rated as&nbsp;a&nbsp;Top-10 solution for Content Experience and Content Creation on&nbsp;G2 Crowd.',
    'icons' => 
    array (
      '1x' => 'https://ps.w.org/setka-editor/assets/icon.svg?rev=2408232',
      'svg' => 'https://ps.w.org/setka-editor/assets/icon.svg?rev=2408232',
    ),
    'wporg' => true,
  ),
);PK.3Y+��k����-bunyad-amp/includes/ecosystem-data/themes.php<?php // phpcs:disable Squiz.Commenting.FileComment.Missing
// phpcs:disable WordPress.Arrays.ArrayIndentation
// phpcs:disable WordPress.WhiteSpace.PrecisionAlignment
// phpcs:disable WordPress.Arrays.ArrayDeclarationSpacing
// phpcs:disable Generic.WhiteSpace.DisallowSpaceIndent
// phpcs:disable Generic.Arrays.DisallowLongArraySyntax
// phpcs:disable Squiz.Commenting.FileComment.Missing
// phpcs:disable Generic.Files.EndFileNewline
// phpcs:disable WordPress.Arrays.MultipleStatementAlignment

// NOTICE: This file was auto-generated with: npm run update-ecosystem-files.
return array (
  0 => 
  array (
    'name' => 'Veen',
    'slug' => 'veen',
    'preview_url' => 'https://estudiopatagon.com/projects/veen-for-wordpress/',
    'screenshot_url' => 'https://amp-wp.org/wp-content/uploads/2022/12/veen-preview.jpeg',
    'homepage' => 'https://estudiopatagon.com/projects/veen-for-wordpress/',
    'description' => '


<p><strong>Veen</strong> is a super modern Blog focused on <strong>high speed</strong> and nice effects, the theme fits perfectly any kind of blog specially personal, photography, travel or biography blogs.</p>
',
    'wporg' => false,
  ),
  1 => 
  array (
    'name' => 'Maktub',
    'slug' => 'maktub',
    'preview_url' => 'https://estudiopatagon.com/projects/maktub-for-wordpress/',
    'screenshot_url' => 'https://amp-wp.org/wp-content/uploads/2022/10/maktub-theme.jpeg',
    'homepage' => 'https://estudiopatagon.com/projects/maktub-for-wordpress/',
    'description' => '


<p><strong>Maktub</strong> is a super modern Blog highly focused on <strong>Speed</strong> and <strong>Typography</strong>. This text-centric theme includes one unique mode “text-mode” which can dramatically increase the rendering time of your website.</p>
',
    'wporg' => false,
  ),
  2 => 
  array (
    'name' => 'Viral News',
    'slug' => 'viral-news',
    'preview_url' => 'https://wp-themes.com/viral-news/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/viral-news/screenshot.jpg?ver=1.4.78',
    'homepage' => 'https://wordpress.org/themes/viral-news/',
    'description' => 'Viral News is a Magazine, News WordPress theme focused on a news portal, magazine, newspaper, blog, publishing website. The theme has a clean and minimal design that can be suited for any kind of magazine or blogging website. The theme offers multiple ways to design your website - either from the Elementor Page Builder plugin or Customizer. The theme has 20+ magazine based elements for Elementor that you can drag &amp; drop and play with to create the website of your imagination. Or you can even create your website from the customizer panel with a live preview. The theme has a repeatable drag and drop news/magazine modules in the customizer as well. So it’s upon you to either user Elementor or Customizer. There are 5 widgets that are specially built for news/magazine websites that you can add in the widget areas in the sidebar or footer. Viral News is AMP Compatible, translation ready, SEO optimized, highly customizable, and is compatible with all the major WordPress Plugin. The theme has everything needed to build a complete news, magazine, blog website. Moreover, the theme provides 12+ ready-made demo that you can import with just one click. View our multiple demos - http://demo.hashthemes.com/viral-news',
    'wporg' => true,
  ),
  3 => 
  array (
    'name' => 'mcms Lite',
    'slug' => 'mcms-lite',
    'preview_url' => 'https://wp-themes.com/mcms-lite/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/mcms-lite/screenshot.png?ver=1.1.8',
    'homepage' => 'https://wordpress.org/themes/mcms-lite/',
    'description' => 'mcms is a lightweight block based Gutenberg, FSE and AMP compatible WordPress theme.',
    'wporg' => true,
  ),
  4 => 
  array (
    'name' => 'Palm Beach',
    'slug' => 'palm-beach',
    'preview_url' => 'https://wp-themes.com/palm-beach/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/palm-beach/screenshot.jpg?ver=2.0.9',
    'homepage' => 'https://wordpress.org/themes/palm-beach/',
    'description' => 'Palm Beach is a professional WordPress theme perfectly suited for a travel magazine. It features a stunning fullscreen slider, beautiful typography and a three-column grid-layout for posts. Head off on vacation now!',
    'wporg' => true,
  ),
  5 => 
  array (
    'name' => 'Short News',
    'slug' => 'short-news',
    'preview_url' => 'https://wp-themes.com/short-news/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/short-news/screenshot.png?ver=1.1.4',
    'homepage' => 'https://wordpress.org/themes/short-news/',
    'description' => 'Short News is perfect for a news, newspaper, magazine or publishing site. We built Short News with performance, usability, and SEO in mind. It’s fast, lightweight, and fully AMP-compatible. Well documented and easy to use even for WordPress beginners. Share your news, stories, ideas and engage your users with a clean reading experience on all devices.',
    'wporg' => true,
  ),
  6 => 
  array (
    'name' => 'Dynamico',
    'slug' => 'dynamico',
    'preview_url' => 'https://wp-themes.com/dynamico/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/dynamico/screenshot.jpg?ver=1.1.3',
    'homepage' => 'https://wordpress.org/themes/dynamico/',
    'description' => 'A responsive, multipurpose Blogging and Magazine WordPress theme with bold colors and fonts. It comes with a featured content area, various blog layouts and extensive post settings. Dynamico is the successor of the popular Dynamic News theme.',
    'wporg' => true,
  ),
  7 => 
  array (
    'name' => 'Gambit',
    'slug' => 'gambit',
    'preview_url' => 'https://wp-themes.com/gambit/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/gambit/screenshot.jpg?ver=2.0.9',
    'homepage' => 'https://wordpress.org/themes/gambit/',
    'description' => 'Gambit is a complex and highly flexible WordPress theme perfectly suited for any news, magazine or blog website. It features several different layout options, two sidebars and a stunning featured post slider. The easy to use Magazine Homepage template allows you to create a powerful online magazine in just a few minutes.',
    'wporg' => true,
  ),
  8 => 
  array (
    'name' => 'Xmag',
    'slug' => 'xmag',
    'preview_url' => 'https://wp-themes.com/xmag/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/xmag/screenshot.png?ver=1.3.3',
    'homepage' => 'https://wordpress.org/themes/xmag/',
    'description' => 'Xmag is a simple and easy-to-use Magazine WordPress theme. It features a simple and minimal design. We built Xmag with performance, usability, and SEO in mind. It’s fast, lightweight, and fully AMP-compatible. With Xmag your website will look amazing on all devices to provide a great user experience.',
    'wporg' => true,
  ),
  9 => 
  array (
    'name' => 'Type',
    'slug' => 'type',
    'preview_url' => 'https://wp-themes.com/type/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/type/screenshot.png?ver=1.1.5',
    'homepage' => 'https://wordpress.org/themes/type/',
    'description' => 'Build a professional blog, an online store or a magazine style website with Type WordPress Theme. We built Type with performance, usability, and SEO in mind. It’s fast, lightweight, and fully AMP-compatible. With Type your website will look amazing on all devices to provide a great user experience. It comes with several options to quickly customize your site: quickly upload your Logo, easily combine 4 Header Styles, create an impressive Header Image, showcase your Featured Posts, and more. The Theme includes also a basic support for WooCommerce plugin.',
    'wporg' => true,
  ),
  10 => 
  array (
    'name' => 'ExS',
    'slug' => 'exs',
    'preview_url' => 'https://wp-themes.com/exs/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/exs/screenshot.png?ver=2.4.2',
    'homepage' => 'https://wordpress.org/themes/exs/',
    'description' => 'ExS theme is a fastest and smallest multipurpose Gutenberg compatible highly customizable theme without 3rd party dependencies. It is designed to have 100% Google Page and LightHouse speed. It has an extra small size of CSS (70kB) and JS (3kB) assets, 100% SEO optimised and valid code and it is 100% mobile friendly. It also has a WooCommerce and Easy Digital Downloads (EDD) plugin support so it will be perfect solution for your online store and e-commerce business. bbPress extended support makes ExS theme perfect for your forum. BuddyPress and Ultimate member support will help to create your social network with ExS theme. WP Job manager and Simple Job Board support will help you to create your job board. The Events Calendar advanced support will help you to create your events site. LearnPress plugin advanced support will help you to create a online courses and online school site. It has unlimited color options, headers and footers layouts, 15+ blog layouts, separate layouts for each category and many more super useful features that you can set up directly in your Customizer with live preview. ExS theme has builtin multiple page templates to perfectly work with any page builder such as Elementor, Beaver Builder, WPBackery, Brizy etc. ExS uses WordPress starter content feature so you can setup your pages immediately after WordPress and theme installation by simply going to Customizer and publish your changes. Theme Demo: https://exsthemewp.com/demo/.',
    'wporg' => true,
  ),
  11 => 
  array (
    'name' => 'Sydney',
    'slug' => 'sydney',
    'preview_url' => 'https://wp-themes.com/sydney/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/sydney/screenshot.png?ver=2.30',
    'homepage' => 'https://wordpress.org/themes/sydney/',
    'description' => 'Sydney is a powerful business theme that provides a fast way for companies or freelancers to create an awesome online presence. As well as being fully compatible with Elementor, Sydney brings plenty of customization possibilities like access to all Google Fonts, full color control, layout control, logo upload, full screen slider, header image, sticky navigation and much more. Also, Sydney provides all the construction blocks you need to rapidly create an engaging front page. Looking for a quick start with Sydney? With just a few clicks, you can import one of our existing demos (https://athemes.com/sydney-demos/)',
    'wporg' => true,
  ),
  12 => 
  array (
    'name' => 'Really Simple',
    'slug' => 'really-simple',
    'preview_url' => 'https://wp-themes.com/really-simple/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/really-simple/screenshot.png?ver=1.3.0',
    'homepage' => 'https://wordpress.org/themes/really-simple/',
    'description' => 'Really Simple is a theme for bloggers and writers who need a ultra light and fast theme. The theme focuses on simplicity and loading speed. Yes, Really Simple Theme is also fully AMP compatible. Check the &gt;&gt; readme.txt &lt;&lt; file and leave the sidebar perfect after WordPress 5.8 update.',
    'wporg' => true,
  ),
  13 => 
  array (
    'name' => 'Artpop',
    'slug' => 'artpop',
    'preview_url' => 'https://wp-themes.com/artpop/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/artpop/screenshot.png?ver=1.1.1',
    'homepage' => 'https://wordpress.org/themes/artpop/',
    'description' => 'Artpop is a beautiful Gutenberg-first WordPress theme, carefully designed to help you build your online brand. We built Artpop with performance, usability, and SEO in mind. It’s fast, lightweight, and fully AMP-compatible. Well documented and easy to use even for WordPress beginners, Artpop is perfect for a blog, personal portfolio, small business website, and WooCommerce storefront. Easily set your logo, change colors, and create awesome layouts to give your website a truly unique look.',
    'wporg' => true,
  ),
  14 => 
  array (
    'name' => 'Michelle',
    'slug' => 'michelle',
    'preview_url' => 'https://wp-themes.com/michelle/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/michelle/screenshot.png?ver=1.5.0',
    'homepage' => 'https://wordpress.org/themes/michelle/',
    'description' => 'Michelle is accessibility ready WordPress theme for creating inclusive websites easily and with fun using block editor. Useful block patterns, block styles, templates and featured posts functionality allow you to build an eyecatching website in no time. Customize site footer and error 404 page content with block editor! The theme also works with Beaver Builder, Elementor, or any other page builder. It also supports theme builders! Michelle elevates your business, eCommerce, portfolio, or blog website. Check out the demo at https://themedemos.webmandesign.eu/michelle/ and documentation at https://webmandesign.github.io/docs/michelle/',
    'wporg' => true,
  ),
  15 => 
  array (
    'name' => 'Miniva',
    'slug' => 'miniva',
    'preview_url' => 'https://wp-themes.com/miniva/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/miniva/screenshot.png?ver=1.7.0',
    'homepage' => 'https://wordpress.org/themes/miniva/',
    'description' => 'A fast, lightweight, and mobile-friendly WordPress theme for bloggers. Miniva is built with simplicity, accessibility and performance in mind. The clean and minimal design helps readers focus on your content. It supports AMP and several Jetpack modules including featured content, infinite scroll, content options and social menu. See the theme demo at https://tajam.id/miniva-demo/',
    'wporg' => true,
  ),
  16 => 
  array (
    'name' => 'Iknow',
    'slug' => 'iknow',
    'preview_url' => 'https://wp-themes.com/iknow/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/iknow/screenshot.png?ver=1.2.7',
    'homepage' => 'https://wordpress.org/themes/iknow/',
    'description' => 'Introducing the Iknow WordPress Theme - the epitome of minimalism and mobile-friendly design. This lightweight and speedy theme is tailor-made for Knowledge Bases, Helpdesks, Wikis, and FAQ platforms. Personalize your website with custom icons for categories and tags. Organize how categories appear on your homepage with ease. Engage users with our integrated post rating system, VoteUp/VoteDown. Breadcrumbs ensure seamless navigation. Plus, our custom widget keeps users oriented whether they\'re in a category or an individual post. Experience the theme\'s aesthetics and functionalities firsthand at [theme demo website](https://wow-company.com/wp-theme-iknow/). For guidance, consult our comprehensive [documentation](https://wow-company.com/faq/category/wow-themes/iknow/).',
    'wporg' => true,
  ),
  17 => 
  array (
    'name' => 'Kadence',
    'slug' => 'kadence',
    'preview_url' => 'https://wp-themes.com/kadence/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/kadence/screenshot.png?ver=1.1.48',
    'homepage' => 'https://wordpress.org/themes/kadence/',
    'description' => 'Kadence Theme is a lightweight yet full featured WordPress theme for creating beautiful fast loading and accessible websites, easier than ever. It features an easy to use drag and drop header and footer builder to build any type of header in minutes. It features a full library of gorgeous starter templates that are easy to modify with our intelligent global font and color controls. With extensive integration with the most popular 3rd party plugins, you can quickly build impressive ecommerce websites, course websites, business websites, and more.',
    'wporg' => true,
  ),
  18 => 
  array (
    'name' => 'Izo',
    'slug' => 'izo',
    'preview_url' => 'https://wp-themes.com/izo/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/izo/screenshot.png?ver=1.0.13',
    'homepage' => 'https://wordpress.org/themes/izo/',
    'description' => 'Izo a fast, lightweight, native AMP and fully customizable multipurpose WordPress theme. Features include compatibility with many popular plugins like Elementor and other page builders, WooCommerce, WPML, LifterLMS and more. There is also full support for the new WordPress block editor. Izo is fully responsive and our users can take advantage of the many customizer options to easily change styles. Also, if you\'re looking for a quick start, we\'re offering a bunch of free starter sites, ready to easily import.',
    'wporg' => true,
  ),
  19 => 
  array (
    'name' => 'OceanWP',
    'slug' => 'oceanwp',
    'preview_url' => 'https://wp-themes.com/oceanwp/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/oceanwp/screenshot.png?ver=3.5.0',
    'homepage' => 'https://wordpress.org/themes/oceanwp/',
    'description' => 'OceanWP is the perfect theme for your project. Lightweight and highly extendable, it will enable you to create almost any type of website such a blog, portfolio, business website and WooCommerce storefront with a beautiful &amp; professional design. Very fast, responsive, RTL &amp; translation ready, best SEO practices, unique WooCommerce features to increase conversion and much more. You can even edit the settings on tablet &amp; mobile so your site looks good on every device. Work with the most popular page builders as Elementor, Beaver Builder, Brizy, Visual Composer, Divi, SiteOrigin, etc... Developers will love his extensible codebase making it a joy to customize and extend. Best friend of Elementor &amp; WooCommerce. Looking for a Multi-Purpose theme? Look no further! Check the demos to realize that it\'s the only theme you will ever need: https://oceanwp.org/demos/',
    'wporg' => true,
  ),
  20 => 
  array (
    'name' => 'Twenty Twenty-One',
    'slug' => 'twentytwentyone',
    'preview_url' => 'https://wp-themes.com/twentytwentyone/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/twentytwentyone/screenshot.png?ver=1.9',
    'homepage' => 'https://wordpress.org/themes/twentytwentyone/',
    'description' => 'Twenty Twenty-One is a blank canvas for your ideas and it makes the block editor your best brush. With new block patterns, which allow you to create a beautiful layout in a matter of seconds, this theme’s soft colors and eye-catching — yet timeless — design will let your work shine. Take it for a spin! See how Twenty Twenty-One elevates your portfolio, business website, or personal blog.',
    'wporg' => true,
  ),
  21 => 
  array (
    'name' => 'Occasio',
    'slug' => 'occasio',
    'preview_url' => 'https://wp-themes.com/occasio/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/occasio/screenshot.jpg?ver=1.1.2',
    'homepage' => 'https://wordpress.org/themes/occasio/',
    'description' => 'Occasio is a sleek and modern Blogging &amp; Magazine WordPress Theme, carefully designed for writers using the Gutenberg Block Editor. The theme supports several blog layouts, extensive post settings and various page templates. It is also AMP-ready and accessible. Start your blog now!',
    'wporg' => true,
  ),
  22 => 
  array (
    'name' => 'Tortuga',
    'slug' => 'tortuga',
    'preview_url' => 'https://wp-themes.com/tortuga/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/tortuga/screenshot.jpg?ver=2.3.8',
    'homepage' => 'https://wordpress.org/themes/tortuga/',
    'description' => 'Tortuga is a highly flexible and adventurous WordPress theme for your pirate magazine or any news related website. It supports three different post layouts, two sidebar schemes and a Magazine Homepage template based on widgets. Other highlights of Tortuga are the beautiful post slider and header widgets area. Arrr!',
    'wporg' => true,
  ),
  23 => 
  array (
    'name' => 'Treville',
    'slug' => 'treville',
    'preview_url' => 'https://wp-themes.com/treville/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/treville/screenshot.jpg?ver=2.1.8',
    'homepage' => 'https://wordpress.org/themes/treville/',
    'description' => 'An elegant Blogging &amp; Magazine WordPress Theme with subtle colors and great typography. Treville supports two navigation menus, advanced post settings and a post slider with fullscreen images!',
    'wporg' => true,
  ),
  24 => 
  array (
    'name' => 'Wellington',
    'slug' => 'wellington',
    'preview_url' => 'https://wp-themes.com/wellington/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/wellington/screenshot.jpg?ver=2.1.8',
    'homepage' => 'https://wordpress.org/themes/wellington/',
    'description' => 'Wellington is a clean and simple Magazine WordPress theme with beautiful typography and subtle colors. The theme includes two different post layouts, a featured post slider and thoughtful theme settings in the Customizer.',
    'wporg' => true,
  ),
  25 => 
  array (
    'name' => 'Poseidon',
    'slug' => 'poseidon',
    'preview_url' => 'https://wp-themes.com/poseidon/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/poseidon/screenshot.jpg?ver=2.3.9',
    'homepage' => 'https://wordpress.org/themes/poseidon/',
    'description' => 'Poseidon is an elegant designed WordPress theme featuring a splendid fullscreen image slideshow. The clean typography and spacious white layout makes it great to share your stories. You can use the theme as simple blog or easily create a news website with the widget-based Magazine Homepage template.',
    'wporg' => true,
  ),
  26 => 
  array (
    'name' => 'Napoli',
    'slug' => 'napoli',
    'preview_url' => 'https://wp-themes.com/napoli/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/napoli/screenshot.jpg?ver=2.2.9',
    'homepage' => 'https://wordpress.org/themes/napoli/',
    'description' => 'Napoli is a beautiful WordPress theme perfectly suited for a food magazine. It features a great featured post slider, smooth typography and a grid-layout for posts. Bon appetit!',
    'wporg' => true,
  ),
  27 => 
  array (
    'name' => 'Mercia',
    'slug' => 'mercia',
    'preview_url' => 'https://wp-themes.com/mercia/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/mercia/screenshot.jpg?ver=2.0.3',
    'homepage' => 'https://wordpress.org/themes/mercia/',
    'description' => 'Mercia is a flexible and versatile theme perfect for lifestyle, travel, or fashion magazines. It features a modern and minimalist design with great typropaphy. Of course it works on all screen sizes. With multiple blog layouts and powerful Magazine widgets, you can easily create a stunning and dynamic news website in just a few minutes.',
    'wporg' => true,
  ),
  28 => 
  array (
    'name' => 'Maxwell',
    'slug' => 'maxwell',
    'preview_url' => 'https://wp-themes.com/maxwell/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/maxwell/screenshot.jpg?ver=2.3.9',
    'homepage' => 'https://wordpress.org/themes/maxwell/',
    'description' => 'Maxwell is a minimalistic and elegant WordPress theme featuring an ultra clean magazine layout. With a beautiful typography, various post layouts and a gorgeous featured posts slideshow Maxwell truly helps you to stand out.',
    'wporg' => true,
  ),
  29 => 
  array (
    'name' => 'Harrison',
    'slug' => 'harrison',
    'preview_url' => 'https://wp-themes.com/harrison/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/harrison/screenshot.jpg?ver=1.4',
    'homepage' => 'https://wordpress.org/themes/harrison/',
    'description' => 'Harrison is a highly versatile WordPress Theme and was specially designed for use with the new WordPress Block Editor. The theme supports the latest Gutenberg features and provides different blog layouts and extensive post settings. The clean and elegant design is perfect to create all kinds of websites. You should really try it!',
    'wporg' => true,
  ),
  30 => 
  array (
    'name' => 'Gridbox',
    'slug' => 'gridbox',
    'preview_url' => 'https://wp-themes.com/gridbox/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/gridbox/screenshot.jpg?ver=2.3.9',
    'homepage' => 'https://wordpress.org/themes/gridbox/',
    'description' => 'Gridbox is a clean and solid WordPress theme featuring a three-column grid-layout for posts. The theme works out of the box and does not require any complicated setup. It is perfectly suited for a simple magazine, blog or portfolio website.',
    'wporg' => true,
  ),
  31 => 
  array (
    'name' => 'Chronus',
    'slug' => 'chronus',
    'preview_url' => 'https://wp-themes.com/chronus/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/chronus/screenshot.jpg?ver=2.1.1',
    'homepage' => 'https://wordpress.org/themes/chronus/',
    'description' => 'Chronus is a fast and lightweight WordPress Theme created for magazines, news websites and personal blogs. The Featured Content section and flexible Magazine Widgets give you the ability to highlight your most important posts on the home page. The minimalistic and responsive design focuses on your content and looks great on any screen size.',
    'wporg' => true,
  ),
  32 => 
  array (
    'name' => 'Donovan',
    'slug' => 'donovan',
    'preview_url' => 'https://wp-themes.com/donovan/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/donovan/screenshot.jpg?ver=1.9',
    'homepage' => 'https://wordpress.org/themes/donovan/',
    'description' => 'Donovan is a flexible, yet easy-to-use blogging theme with a clean and modern design. It features an elegant mobile-first design, three different blog layouts and extensive post settings. Donovan is perfect for your personal blog or for any content-focused website.',
    'wporg' => true,
  ),
  33 => 
  array (
    'name' => 'Yosemite Lite',
    'slug' => 'yosemite-lite',
    'preview_url' => 'https://wp-themes.com/yosemite-lite/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/yosemite-lite/screenshot.jpg?ver=1.2.2',
    'homepage' => 'https://wordpress.org/themes/yosemite-lite/',
    'description' => 'Yosemite is a beautiful WordPress blog theme for personal blogs. Yosemite has a modern, clean and elegant look and lots of customization for bloggers. Built on the latest technology of WordPress, Yosemite is lightweight, fast and optimized for all mobile phones.',
    'wporg' => true,
  ),
  34 => 
  array (
    'name' => 'Justread',
    'slug' => 'justread',
    'preview_url' => 'https://wp-themes.com/justread/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/justread/screenshot.jpg?ver=1.4.1',
    'homepage' => 'https://wordpress.org/themes/justread/',
    'description' => 'Justread is a clean and modern WordPress theme that focuses on reading experience. Justread has a grid layout with single column content. The theme uses system fonts and SVG for fast loading. Enjoy reading long content with comfortability.',
    'wporg' => true,
  ),
  35 => 
  array (
    'name' => 'Floral Lite',
    'slug' => 'floral-lite',
    'preview_url' => 'https://wp-themes.com/floral-lite/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/floral-lite/screenshot.jpg?ver=1.4.1',
    'homepage' => 'https://wordpress.org/themes/floral-lite/',
    'description' => 'Floral is a beautiful WordPress blog theme for personal blogs. Floral has a modern, clean and elegant look and lots of customization for bloggers. Built on the latest technology of WordPress, Floral is lightweight, fast and optimized for all mobile phones.',
    'wporg' => true,
  ),
  36 => 
  array (
    'name' => 'EightyDays Lite',
    'slug' => 'eightydays-lite',
    'preview_url' => 'https://wp-themes.com/eightydays-lite/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/eightydays-lite/screenshot.png?ver=2.2.8',
    'homepage' => 'https://wordpress.org/themes/eightydays-lite/',
    'description' => 'EightyDays is a beautiful WordPress travel theme for travel blogs or magazines. EightyDays has a modern, clean and elegant look and lots of customization for bloggers. Built on the latest technology of WordPress, EightyDays is lightweight, fast and optimized for all mobile phones.',
    'wporg' => true,
  ),
  37 => 
  array (
    'name' => 'eStar',
    'slug' => 'estar',
    'preview_url' => 'https://wp-themes.com/estar/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/estar/screenshot.png?ver=1.3.6',
    'homepage' => 'https://wordpress.org/themes/estar/',
    'description' => 'eStar is a super fast, lightweight (less than 10KB on the front end), responsive and highly customizable WordPress theme suitable for blog, personal portfolio and business websites. It works perfectly with Gutenberg and all WordPress blocks. You can also pair it with any page builder plugin like Elementor, Beaver Builder, Visual Composer, SiteOrigin, Divi, Thrive Architect, Brizy and more. eStar is written from scratch with performance, extensibility, usability and SEO in mind. The theme follows best practices, well-coded and follows the latest web standards (HTML5, SVG, JavaScript). Some of the other features: microdata integration, widget areas, sidebar layouts, custom colors, custom Google fonts, translation ready. Looking for a perfect base theme? Look no further. eStar is fast, fully customizable WordPress theme that you can use for building any kind of website like business agencies, corporate, portfolio, education, university portal, consulting, church, restaurant, medical and so on. Learn more about the theme at https://gretathemes.com/wordpress-themes/estar/',
    'wporg' => true,
  ),
  38 => 
  array (
    'name' => 'Stow',
    'slug' => 'stow',
    'preview_url' => 'https://wordpress.com/theme/stow',
    'screenshot_url' => 'https://amp-wp.org/wp-content/uploads/2020/08/stow.jpg',
    'homepage' => 'https://wordpress.com/theme/stow',
    'description' => '


<p>A bold and clean theme with lots of space for large images, it’s the ideal choice for creating an online presence for your business. A <a href="https://wordpress.com/theme/varia" target="_blank" rel="noreferrer noopener">Varia</a> child theme.</p>
',
    'wporg' => false,
  ),
  39 => 
  array (
    'name' => 'Shawburn',
    'slug' => 'shawburn',
    'preview_url' => 'https://wordpress.com/theme/shawburn',
    'screenshot_url' => 'https://amp-wp.org/wp-content/uploads/2020/08/shawborn.jpg',
    'homepage' => 'https://wordpress.com/theme/shawburn',
    'description' => '


<p><em>Shawburn</em> is the ideal choice for creating an online presence for your business. A <a href="https://wordpress.com/theme/varia" target="_blank" rel="noreferrer noopener">Varia</a> child theme.</p>
',
    'wporg' => false,
  ),
  40 => 
  array (
    'name' => 'Rivington',
    'slug' => 'rivington',
    'preview_url' => 'https://wordpress.com/theme/rivington',
    'screenshot_url' => 'https://amp-wp.org/wp-content/uploads/2020/08/rivington.jpg',
    'homepage' => 'https://wordpress.com/theme/rivington',
    'description' => '


<p><em>Rivington</em>&nbsp;was designed as a&nbsp;website template for realtors. A <a href="https://wordpress.com/theme/varia" target="_blank" rel="noreferrer noopener">Varia</a> child theme.</p>
',
    'wporg' => false,
  ),
  41 => 
  array (
    'name' => 'Redhill',
    'slug' => 'redhill',
    'preview_url' => 'https://wordpress.com/theme/redhill',
    'screenshot_url' => 'https://amp-wp.org/wp-content/uploads/2020/08/redhill.jpg',
    'homepage' => 'https://wordpress.com/theme/redhill',
    'description' => '


<p><em>Redhill</em> is a simple theme with clean typography, created with entrepreneurs and small business owners in mind. A <a href="https://wordpress.com/theme/varia" target="_blank" rel="noreferrer noopener">Varia</a> child theme. </p>
',
    'wporg' => false,
  ),
  42 => 
  array (
    'name' => 'Morden',
    'slug' => 'morden',
    'preview_url' => 'https://wordpress.com/theme/morden',
    'screenshot_url' => 'https://amp-wp.org/wp-content/uploads/2020/08/morden.jpg',
    'homepage' => 'https://wordpress.com/theme/morden',
    'description' => '


<p><em>Morden</em> is a functional and responsive multi-purpose theme that is the perfect solution for your business’s online presence. A <a href="https://wordpress.com/theme/varia" target="_blank" rel="noreferrer noopener">Varia</a> child theme.</p>
',
    'wporg' => false,
  ),
  43 => 
  array (
    'name' => 'Maywood',
    'slug' => 'maywood',
    'preview_url' => 'https://wordpress.com/theme/maywood',
    'screenshot_url' => 'https://amp-wp.org/wp-content/uploads/2020/08/maywood.jpg',
    'homepage' => 'https://wordpress.com/theme/maywood',
    'description' => '


<p>Modern, clean, sophisticated: Make your online presence as striking and stylish as your business with&nbsp;<em>Maywood</em>.&nbsp;A <a href="https://wordpress.com/theme/varia" target="_blank" rel="noreferrer noopener">Varia</a> child theme.</p>
',
    'wporg' => false,
  ),
  44 => 
  array (
    'name' => 'Mayland',
    'slug' => 'mayland',
    'preview_url' => 'https://wordpress.com/theme/mayland',
    'screenshot_url' => 'https://amp-wp.org/wp-content/uploads/2020/08/mmayland.jpg',
    'homepage' => 'https://wordpress.com/theme/mayland',
    'description' => '


<p><em>Mayland&nbsp;</em>is a free WordPress theme. The clean, tasteful design highlights all your writing and photography projects. A <a href="https://wordpress.com/theme/varia" target="_blank" rel="noreferrer noopener">Varia</a> child theme.</p>
',
    'wporg' => false,
  ),
  45 => 
  array (
    'name' => 'Leven',
    'slug' => 'leven',
    'preview_url' => 'https://wordpress.com/theme/leven',
    'screenshot_url' => 'https://amp-wp.org/wp-content/uploads/2020/08/leven.jpg',
    'homepage' => 'https://wordpress.com/theme/leven',
    'description' => '


<p><em>Leven</em>&nbsp;is a colorful, typography driven theme meant to grab the attention of potential customers and market or sell products to them. A <a href="https://wordpress.com/theme/varia" target="_blank" rel="noreferrer noopener">Varia</a> child theme.</p>
',
    'wporg' => false,
  ),
  46 => 
  array (
    'name' => 'Hever',
    'slug' => 'hever',
    'preview_url' => 'https://wordpress.com/theme/hever',
    'screenshot_url' => 'https://amp-wp.org/wp-content/uploads/2020/08/hever.jpg',
    'homepage' => 'https://wordpress.com/theme/hever',
    'description' => '


<p>Hever is a fun and friendly free WordPress theme that works particularly well for creative and crafty businesses. A <a href="https://wordpress.com/theme/varia" target="_blank" rel="noreferrer noopener">Varia</a> child theme.</p>
',
    'wporg' => false,
  ),
  47 => 
  array (
    'name' => 'Exford',
    'slug' => 'exford',
    'preview_url' => 'https://wordpress.com/theme/exford',
    'screenshot_url' => 'https://amp-wp.org/wp-content/uploads/2020/08/exford.jpg',
    'homepage' => 'https://wordpress.com/theme/exford',
    'description' => '


<p>A classic typography and clean design lend a sophisticated air to your website’s content. A <a href="https://wordpress.com/theme/varia" target="_blank" rel="noreferrer noopener">Varia</a> child theme.</p>
',
    'wporg' => false,
  ),
  48 => 
  array (
    'name' => 'Brompton',
    'slug' => 'brompton',
    'preview_url' => 'https://wordpress.com/theme/brompton',
    'screenshot_url' => 'https://amp-wp.org/wp-content/uploads/2020/08/brompton.jpg',
    'homepage' => 'https://wordpress.com/theme/brompton',
    'description' => '


<p>A a simple yet powerful website theme for small-business owners and entrepreneurs. A <a href="https://wordpress.com/theme/varia/test275209033.wordpress.com" target="_blank" rel="noreferrer noopener">Varia</a> child theme.</p>
',
    'wporg' => false,
  ),
  49 => 
  array (
    'name' => 'Barnsbury',
    'slug' => 'barnsbury',
    'preview_url' => 'https://wordpress.com/theme/barnsbury',
    'screenshot_url' => 'https://amp-wp.org/wp-content/uploads/2020/08/Barnsbury.jpg',
    'homepage' => 'https://wordpress.com/theme/barnsbury',
    'description' => '


<p><em>Barnsbury </em>is an earthy, friendly theme made with farming and agriculture businesses in mind — but versatile enough for a personal site, too. A <a href="https://wordpress.com/theme/varia/test275209033.wordpress.com" target="_blank" rel="noreferrer noopener">Varia</a> child theme.</p>
',
    'wporg' => false,
  ),
  50 => 
  array (
    'name' => 'Balasana',
    'slug' => 'balasana',
    'preview_url' => 'https://wordpress.com/theme/balasana',
    'screenshot_url' => 'https://amp-wp.org/wp-content/uploads/2020/08/Balasana.jpg',
    'homepage' => 'https://wordpress.com/theme/balasana',
    'description' => '


<p><em>Balasana</em> is a clean and minimalist business theme designed with health and wellness-focused sites in mind. A <a href="https://wordpress.com/theme/varia/test275209033.wordpress.com" target="_blank" rel="noreferrer noopener">Varia</a> child theme.</p>
',
    'wporg' => false,
  ),
  51 => 
  array (
    'name' => 'Alves',
    'slug' => 'alves',
    'preview_url' => 'https://wordpress.com/theme/alves',
    'screenshot_url' => 'https://amp-wp.org/wp-content/uploads/2020/08/Alves.jpg',
    'homepage' => 'https://wordpress.com/theme/alves',
    'description' => '


<p>Convincing design for your charity or organization’s online presence. Highlight your actions, causes and projects, Alves is versatile enough to be your personal site too. A <a href="https://wordpress.com/theme/varia/test275209033.wordpress.com" target="_blank" rel="noreferrer noopener">Varia</a> child theme.</p>
',
    'wporg' => false,
  ),
  52 => 
  array (
    'name' => 'Varia',
    'slug' => 'varia',
    'preview_url' => 'https://wordpress.com/theme/varia',
    'screenshot_url' => 'https://amp-wp.org/wp-content/uploads/2020/08/varia.jpg',
    'homepage' => 'https://wordpress.com/theme/varia',
    'description' => '


<p>A variable-based design system for WordPress sites built with Gutenberg. Parent theme of multiple AMP compatible themes. </p>
',
    'wporg' => false,
  ),
  53 => 
  array (
    'name' => 'Activation',
    'slug' => 'activation',
    'preview_url' => 'https://wordpress.org/themes/activation/',
    'screenshot_url' => 'https://amp-wp.org/wp-content/uploads/2020/04/Activation.jpg',
    'homepage' => 'https://wordpress.org/themes/activation/',
    'description' => '


<p>Activation is a Primer child theme with a colorful, fitness-focused design.</p>
',
    'wporg' => false,
  ),
  54 => 
  array (
    'name' => 'Velux',
    'slug' => 'velux',
    'preview_url' => 'https://wordpress.org/themes/velux/',
    'screenshot_url' => 'https://amp-wp.org/wp-content/uploads/2020/04/Velux.jpg',
    'homepage' => 'https://wordpress.org/themes/velux/',
    'description' => '


<p>Velux is a Primer child theme with a clean, professional, and upscale design.</p>
',
    'wporg' => false,
  ),
  55 => 
  array (
    'name' => 'Scribbles',
    'slug' => 'scribbles',
    'preview_url' => 'https://wordpress.org/themes/scribbles/',
    'screenshot_url' => 'https://amp-wp.org/wp-content/uploads/2020/04/Scribbles.jpg',
    'homepage' => 'https://wordpress.org/themes/scribbles/',
    'description' => '


<p>Scribbles is a Primer child theme with a playful and fun mood.</p>
',
    'wporg' => false,
  ),
  56 => 
  array (
    'name' => 'Ascension',
    'slug' => 'ascension',
    'preview_url' => 'https://wordpress.org/themes/ascension/',
    'screenshot_url' => 'https://amp-wp.org/wp-content/uploads/2020/03/ascension.jpg',
    'homepage' => 'https://wordpress.org/themes/ascension/',
    'description' => '


<p>If you&#8217;re looking for an AMP ready business-oriented design checkout Ascension. a Primer child theme.</p>
',
    'wporg' => false,
  ),
  57 => 
  array (
    'name' => 'Uptown Style',
    'slug' => 'uptown-style',
    'preview_url' => 'https://wordpress.org/themes/uptown-style/',
    'screenshot_url' => 'https://amp-wp.org/wp-content/uploads/2020/03/uptownstyle.jpg',
    'homepage' => 'https://wordpress.org/themes/uptown-style/',
    'description' => '


<p>Uptown Style is a Primer child theme with elegance and class. </p>
',
    'wporg' => false,
  ),
  58 => 
  array (
    'name' => 'Go',
    'slug' => 'go',
    'preview_url' => 'https://wp-themes.com/go/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/go/screenshot.png?ver=1.8.6',
    'homepage' => 'https://wordpress.org/themes/go/',
    'description' => 'Go is an innovative, Gutenberg-first WordPress theme, hyper-focused on empowering makers to build beautifully rich websites with WordPress.',
    'wporg' => true,
  ),
  59 => 
  array (
    'name' => 'Navigation Pro',
    'slug' => 'navigation-pro',
    'preview_url' => 'https://my.studiopress.com/themes/navigation/',
    'screenshot_url' => 'https://amp-wp.org/wp-content/uploads/2020/02/navigationPro.jpg',
    'homepage' => 'https://my.studiopress.com/themes/navigation/',
    'description' => '


<p>A Genesis framework theme that cuts through the haze with bright colors, bold images and versatile layouts to steer your site to success.</p>
',
    'wporg' => false,
  ),
  60 => 
  array (
    'name' => 'Memory',
    'slug' => 'memory',
    'preview_url' => 'https://wp-themes.com/memory/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/memory/screenshot.png?ver=2.0.2',
    'homepage' => 'https://wordpress.org/themes/memory/',
    'description' => 'Clean and beautiful personal blog theme.',
    'wporg' => true,
  ),
  61 => 
  array (
    'name' => 'Sacha',
    'slug' => 'sacha',
    'preview_url' => 'https://github.com/Automattic/newspack-theme/releases',
    'screenshot_url' => 'https://amp-wp.org/wp-content/uploads/2020/01/sacha9.jpg',
    'homepage' => 'https://github.com/Automattic/newspack-theme/releases',
    'description' => '


<p>Sacha is a Newspack child theme. You&#8217;ll find the latest version on the Newspack release page. </p>
',
    'wporg' => false,
  ),
  62 => 
  array (
    'name' => 'Scott',
    'slug' => 'scott',
    'preview_url' => 'https://github.com/Automattic/newspack-theme/releases',
    'screenshot_url' => 'https://amp-wp.org/wp-content/uploads/2020/01/scott.jpg',
    'homepage' => 'https://github.com/Automattic/newspack-theme/releases',
    'description' => '


<p>Scott is a Newspack child theme. You&#8217;ll find the latest version on the Newspack release page. </p>
',
    'wporg' => false,
  ),
  63 => 
  array (
    'name' => 'Katharine',
    'slug' => 'katharine',
    'preview_url' => 'https://github.com/Automattic/newspack-theme/releases',
    'screenshot_url' => 'https://amp-wp.org/wp-content/uploads/2020/01/katharine.jpg',
    'homepage' => 'https://github.com/Automattic/newspack-theme/releases',
    'description' => '


<p>Katharine is a Newspack child theme. You&#8217;ll find the latest version on the Newspack release page. </p>
',
    'wporg' => false,
  ),
  64 => 
  array (
    'name' => 'Joseph',
    'slug' => 'joseph',
    'preview_url' => 'https://github.com/Automattic/newspack-theme/releases',
    'screenshot_url' => 'https://amp-wp.org/wp-content/uploads/2020/01/joseph-1.jpg',
    'homepage' => 'https://github.com/Automattic/newspack-theme/releases',
    'description' => '


<p>Joseph is a Newspack child theme. You&#8217;ll find the latest version on the Newspack release page. </p>
',
    'wporg' => false,
  ),
  65 => 
  array (
    'name' => 'Nelson',
    'slug' => 'nelson',
    'preview_url' => 'https://github.com/Automattic/newspack-theme/releases',
    'screenshot_url' => 'https://amp-wp.org/wp-content/uploads/2020/01/nelson.jpg',
    'homepage' => 'https://github.com/Automattic/newspack-theme/releases',
    'description' => '


<p>Nelson is a Newspack child theme. You&#8217;ll find the latest version on the Newspack release page. </p>
',
    'wporg' => false,
  ),
  66 => 
  array (
    'name' => 'Newspack',
    'slug' => 'newspack',
    'preview_url' => 'https://github.com/Automattic/newspack-theme',
    'screenshot_url' => 'https://amp-wp.org/wp-content/uploads/2019/11/newspack.jpg',
    'homepage' => 'https://github.com/Automattic/newspack-theme',
    'description' => '


<p>The Newspack theme is a forward-looking news theme designed and developed to be highly customizable with the WordPress block editor.</p>
',
    'wporg' => false,
  ),
  67 => 
  array (
    'name' => 'Twenty Twenty',
    'slug' => 'twentytwenty',
    'preview_url' => 'https://wp-themes.com/twentytwenty/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/twentytwenty/screenshot.png?ver=2.3',
    'homepage' => 'https://wordpress.org/themes/twentytwenty/',
    'description' => 'Our default theme for 2020 is designed to take full advantage of the flexibility of the block editor. Organizations and businesses have the ability to create dynamic landing pages with endless layouts using the group and column blocks. The centered content column and fine-tuned typography also makes it perfect for traditional blogs. Complete editor styles give you a good idea of what your content will look like, even before you publish. You can give your site a personal touch by changing the background colors and the accent color in the Customizer. The colors of all elements on your site are automatically calculated based on the colors you pick, ensuring a high, accessible color contrast for your visitors.',
    'wporg' => true,
  ),
  68 => 
  array (
    'name' => 'Primer',
    'slug' => 'primer',
    'preview_url' => 'https://wordpress.org/themes/primer/',
    'screenshot_url' => 'https://amp-wp.org/wp-content/uploads/2019/07/primer-1024x768-1.png',
    'homepage' => 'https://wordpress.org/themes/primer/',
    'description' => '


<p>Primer is a powerful theme that brings clarity to your content in a fresh design.<br></p>
',
    'wporg' => false,
  ),
  69 => 
  array (
    'name' => 'Essence Pro',
    'slug' => 'essence-pro-theme',
    'preview_url' => 'https://my.studiopress.com/themes/essence/',
    'screenshot_url' => 'https://amp-wp.org/wp-content/uploads/2019/07/cropped-Essence-Pro.png',
    'homepage' => 'https://my.studiopress.com/themes/essence/',
    'description' => '


<p>Essence Pro is a beautiful, clutter-free theme for sites in the health, wellness, and lifestyle niches. </p>
',
    'wporg' => false,
  ),
  70 => 
  array (
    'name' => 'Genesis Framework',
    'slug' => 'genesis-theme-framework',
    'preview_url' => 'https://my.studiopress.com/themes/genesis/',
    'screenshot_url' => 'https://amp-wp.org/wp-content/uploads/2019/07/cropped-Genesis.png',
    'homepage' => 'https://my.studiopress.com/themes/genesis/',
    'description' => '


<p>The Genesis Framework empowers webmasters to quickly and easily build websites with WordPress.</p>
',
    'wporg' => false,
  ),
  71 => 
  array (
    'name' => 'Twenty Fourteen',
    'slug' => 'twentyfourteen',
    'preview_url' => 'https://wp-themes.com/twentyfourteen/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/twentyfourteen/screenshot.png?ver=3.7',
    'homepage' => 'https://wordpress.org/themes/twentyfourteen/',
    'description' => 'In 2014, our default theme lets you create a responsive magazine website with a sleek, modern design. Feature your favorite homepage content in either a grid or a slider. Use the three widget areas to customize your website, and change your content\'s layout with a full-width page template and a contributor page to show off your authors. Creating a magazine website with WordPress has never been easier.',
    'wporg' => true,
  ),
  72 => 
  array (
    'name' => 'Twenty Thirteen',
    'slug' => 'twentythirteen',
    'preview_url' => 'https://wp-themes.com/twentythirteen/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/twentythirteen/screenshot.png?ver=3.9',
    'homepage' => 'https://wordpress.org/themes/twentythirteen/',
    'description' => 'The 2013 theme for WordPress takes us back to the blog, featuring a full range of post formats, each displayed beautifully in their own unique way. Design details abound, starting with a vibrant color scheme and matching header images, beautiful typography and icons, and a flexible layout that looks great on any device, big or small.',
    'wporg' => true,
  ),
  73 => 
  array (
    'name' => 'Twenty Eleven',
    'slug' => 'twentyeleven',
    'preview_url' => 'https://wp-themes.com/twentyeleven/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/twentyeleven/screenshot.png?ver=4.4',
    'homepage' => 'https://wordpress.org/themes/twentyeleven/',
    'description' => 'The 2011 theme for WordPress is sophisticated, lightweight, and adaptable. Make it yours with a custom menu, header image, and background -- then go further with available theme options for light or dark color scheme, custom link colors, and three layout choices. Twenty Eleven comes equipped with a Showcase page template that transforms your front page into a showcase to show off your best content, widget support galore (sidebar, three footer areas, and a Showcase page widget area), and a custom "Ephemera" widget to display your Aside, Link, Quote, or Status posts. Included are styles for print and for the admin editor, support for featured images (as custom header images on posts and pages and as large images on featured "sticky" posts), and special styles for six different post formats.',
    'wporg' => true,
  ),
  74 => 
  array (
    'name' => 'Twenty Ten',
    'slug' => 'twentyten',
    'preview_url' => 'https://wp-themes.com/twentyten/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/twentyten/screenshot.png?ver=3.9',
    'homepage' => 'https://wordpress.org/themes/twentyten/',
    'description' => 'The 2010 theme for WordPress is stylish, customizable, simple, and readable -- make it yours with a custom menu, header image, and background. Twenty Ten supports six widgetized areas (two in the sidebar, four in the footer) and featured images (thumbnails for gallery posts and custom header images for posts and pages). It includes stylesheets for print and the admin Visual Editor, special styles for posts in the "Asides" and "Gallery" categories, and has an optional one-column page template that removes the sidebar.',
    'wporg' => true,
  ),
  75 => 
  array (
    'name' => 'Zakra',
    'slug' => 'zakra',
    'preview_url' => 'https://wp-themes.com/zakra/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/zakra/screenshot.jpg?ver=3.0.4',
    'homepage' => 'https://wordpress.org/themes/zakra/',
    'description' => 'Zakra is a powerful and versatile multipurpose theme that makes it easy to create beautiful and professional websites. With over free 40 pre-designed starter demo sites to choose from, you can quickly build a unique and functional site that fits your specific needs. Whether you\'re launching a blog, news site, e-commerce store, showcasing your portfolio, building a business site, LMS, or niche-specific site (such as a cafe, spa, charity, yoga studio, wedding venue, dental practice, photography, restaurant, or educational institution), Zakra has everything you need to succeed. The theme integrates seamlessly with popular page builders like Elementor, Brizy, BlockArt, and the Gutenberg editor, giving you complete freedom to create any layout you can imagine. Importantly, Zakra is optimized for speed, features a mobile-first responsive design, is built with block-based technology, and is optimized for search engines. It is also compatible with a wide range of popular WordPress plugins, allowing you to extend its functionality as needed. Build your next project with Zakra today and see the difference for yourself. Check out all the starter sites at https://zakratheme.com/demos!',
    'wporg' => true,
  ),
  76 => 
  array (
    'name' => 'Neve',
    'slug' => 'neve',
    'preview_url' => 'https://wp-themes.com/neve/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/neve/screenshot.png?ver=3.7.3',
    'homepage' => 'https://wordpress.org/themes/neve/',
    'description' => 'Neve is a super fast, easily customizable, multi-purpose theme. It’s perfect for blogs, small business, startups, agencies, firms, e-commerce shops (WooCommerce storefront) as well as personal portfolio sites and most types of projects. A fully AMP optimized and responsive theme, Neve will load in mere seconds and adapt perfectly on any viewing device. While it is lightweight and has a minimalist design, the theme is highly extendable, it has a highly SEO optimized code, resulting in top rankings in Google search results. Neve works perfectly with Gutenberg and the most popular page builders (Elementor, Brizy, Beaver Builder, Visual Composer, SiteOrigin, Divi). Neve is also WooCommerce ready, responsive, RTL &amp; translation ready. Look no further. Neve is the perfect theme for you!',
    'wporg' => true,
  ),
  77 => 
  array (
    'name' => 'Astra',
    'slug' => 'astra',
    'preview_url' => 'https://wp-themes.com/astra/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/astra/screenshot.jpg?ver=4.4.0',
    'homepage' => 'https://wordpress.org/themes/astra/',
    'description' => 'Astra is fast, fully customizable &amp; beautiful WordPress theme suitable for blog, personal portfolio, business website and WooCommerce storefront. It is very lightweight (less than 50KB on frontend) and offers unparalleled speed. Built with SEO in mind, Astra comes with Schema.org code integrated and is Native AMP ready so search engines will love your site. It offers special features and templates so it works perfectly with all page builders like Elementor, Beaver Builder, Visual Composer, SiteOrigin, Divi, etc. Some of the other features: # WooCommerce Ready # Responsive # RTL &amp; Translation Ready # Extendible with premium addons # Regularly updated # Designed, Developed, Maintained &amp; Supported by Brainstorm Force. Looking for a perfect base theme? Look no further. Astra is fast, fully customizable and WooCommerce ready theme that you can use for building any kind of website!',
    'wporg' => true,
  ),
  78 => 
  array (
    'name' => 'Twenty Twelve',
    'slug' => 'twentytwelve',
    'preview_url' => 'https://wp-themes.com/twentytwelve/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/twentytwelve/screenshot.png?ver=4.0',
    'homepage' => 'https://wordpress.org/themes/twentytwelve/',
    'description' => 'The 2012 theme for WordPress is a fully responsive theme that looks great on any device. Features include a front page template with its own widgets, an optional display font, styling for post formats on both index and single views, and an optional no-sidebar page template. Make it yours with a custom menu, header image, and background.',
    'wporg' => true,
  ),
  79 => 
  array (
    'name' => 'Twenty Nineteen',
    'slug' => 'twentynineteen',
    'preview_url' => 'https://wp-themes.com/twentynineteen/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/twentynineteen/screenshot.png?ver=2.6',
    'homepage' => 'https://wordpress.org/themes/twentynineteen/',
    'description' => 'Our 2019 default theme is designed to show off the power of the block editor. It features custom styles for all the default blocks, and is built so that what you see in the editor looks like what you\'ll see on your website. Twenty Nineteen is designed to be adaptable to a wide range of websites, whether you’re running a photo blog, launching a new business, or supporting a non-profit. Featuring ample whitespace and modern sans-serif headlines paired with classic serif body text, it\'s built to be beautiful on all screen sizes.',
    'wporg' => true,
  ),
  80 => 
  array (
    'name' => 'Twenty Seventeen',
    'slug' => 'twentyseventeen',
    'preview_url' => 'https://wp-themes.com/twentyseventeen/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/twentyseventeen/screenshot.png?ver=3.3',
    'homepage' => 'https://wordpress.org/themes/twentyseventeen/',
    'description' => 'Twenty Seventeen brings your site to life with header video and immersive featured images. With a focus on business sites, it features multiple sections on the front page as well as widgets, navigation and social menus, a logo, and more. Personalize its asymmetrical grid with a custom color scheme and showcase your multimedia content with post formats. Our default theme for 2017 works great in many languages, for any abilities, and on any device.',
    'wporg' => true,
  ),
  81 => 
  array (
    'name' => 'Twenty Sixteen',
    'slug' => 'twentysixteen',
    'preview_url' => 'https://wp-themes.com/twentysixteen/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/twentysixteen/screenshot.png?ver=3.0',
    'homepage' => 'https://wordpress.org/themes/twentysixteen/',
    'description' => 'Twenty Sixteen is a modernized take on an ever-popular WordPress layout — the horizontal masthead with an optional right sidebar that works perfectly for blogs and websites. It has custom color options with beautiful default color schemes, a harmonious fluid grid using a mobile-first approach, and impeccable polish in every detail. Twenty Sixteen will make your WordPress look beautiful everywhere.',
    'wporg' => true,
  ),
  82 => 
  array (
    'name' => 'Twenty Fifteen',
    'slug' => 'twentyfifteen',
    'preview_url' => 'https://wp-themes.com/twentyfifteen/',
    'screenshot_url' => '//ts.w.org/wp-content/themes/twentyfifteen/screenshot.png?ver=3.5',
    'homepage' => 'https://wordpress.org/themes/twentyfifteen/',
    'description' => 'Our 2015 default theme is clean, blog-focused, and designed for clarity. Twenty Fifteen\'s simple, straightforward typography is readable on a wide variety of screen sizes, and suitable for multiple languages. We designed it using a mobile-first approach, meaning your content takes center-stage, regardless of whether your visitors arrive by smartphone, tablet, laptop, or desktop computer.',
    'wporg' => true,
  ),
);PK.3Y{Td���;bunyad-amp/includes/embeds/class-amp-base-embed-handler.php<?php
/**
 * Class AMP_Base_Embed_Handler
 *
 * Used by some children.
 *
 * @package  AMP
 */

use AmpProject\Dom\Document;
use AmpProject\Dom\Element;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag;

/**
 * Class AMP_Base_Embed_Handler
 *
 * @since 0.2
 */
abstract class AMP_Base_Embed_Handler {
	/**
	 * Default width.
	 *
	 * In some cases, this may be the string 'auto' when a fixed-height layout is used.
	 *
	 * @var int|string
	 */
	protected $DEFAULT_WIDTH = 600;

	/**
	 * Default height.
	 *
	 * @var int
	 */
	protected $DEFAULT_HEIGHT = 480;

	/**
	 * Default arguments.
	 *
	 * @var array
	 */
	protected $args = [];

	/**
	 * Whether or not conversion was completed.
	 *
	 * @var boolean
	 */
	protected $did_convert_elements = false;

	/**
	 * Registers embed.
	 */
	abstract public function register_embed();

	/**
	 * Unregisters embed.
	 */
	abstract public function unregister_embed();

	/**
	 * Constructor.
	 *
	 * @param array $args Height and width for embed.
	 */
	public function __construct( $args = [] ) {
		$this->args = wp_parse_args(
			$args,
			[
				'width'  => $this->DEFAULT_WIDTH,
				'height' => $this->DEFAULT_HEIGHT,
			]
		);
	}

	/**
	 * Get mapping of AMP component names to AMP script URLs.
	 *
	 * This is normally no longer needed because the validating
	 * sanitizer will automatically detect the need for them via
	 * the spec.
	 *
	 * @see AMP_Tag_And_Attribute_Sanitizer::get_scripts()
	 * @return array Scripts.
	 */
	public function get_scripts() {
		return [];
	}

	/**
	 * Get regex pattern for matching HTML attributes from a given tag name.
	 *
	 * @since 1.5.0
	 * @todo This does not currently work with single-quoted attribute values or non-quoted attributes.
	 *
	 * @param string   $html            HTML source haystack.
	 * @param string   $tag_name        Tag name.
	 * @param string[] $attribute_names Attribute names.
	 * @return string[]|null Matched attributes, or null if the element was not matched at all.
	 */
	protected function match_element_attributes( $html, $tag_name, $attribute_names ) {
		$pattern = sprintf(
			'/<%s%s/',
			preg_quote( $tag_name, '/' ),
			implode(
				'',
				array_map(
					static function ( $attr_name ) {
						return sprintf( '(?=[^>]*?%1$s="(?P<%1$s>[^"]+)")?', preg_quote( $attr_name, '/' ) );
					},
					$attribute_names
				)
			)
		);
		if ( ! preg_match( $pattern, $html, $matches ) ) {
			return null;
		}
		return wp_array_slice_assoc( $matches, $attribute_names );
	}

	/**
	 * Get all child elements of the specified element.
	 *
	 * @since 2.0.6
	 *
	 * @param DOMElement $node Element.
	 * @return DOMElement[] Array of child elements for specified element.
	 */
	protected function get_child_elements( DOMElement $node ) {
		return array_filter(
			iterator_to_array( $node->childNodes ),
			static function ( DOMNode $child ) {
				return $child instanceof DOMElement;
			}
		);
	}

	/**
	 * Replace an element's parent with itself if the parent is a <p> tag which has no attributes and has no other children.
	 *
	 * This usually happens while `wpautop()` processes the element.
	 *
	 * @since 2.0.6
	 * @see AMP_Tag_And_Attribute_Sanitizer::remove_node()
	 *
	 * @param DOMElement $node Node.
	 */
	protected function unwrap_p_element( DOMElement $node ) {
		$parent_node = $node->parentNode;
		if (
			$parent_node instanceof DOMElement
			&&
			'p' === $parent_node->tagName
			&&
			false === $parent_node->hasAttributes()
			&&
			1 === count( $this->get_child_elements( $parent_node ) )
		) {
			$parent_node->parentNode->replaceChild( $node, $parent_node );
		}
	}

	/**
	 * Removes the node's nearest `<script>` sibling with a `src` attribute containing the base `src` URL provided.
	 *
	 * @since 2.1
	 *
	 * @param DOMElement $node           The DOMNode to whose sibling is the script to be removed.
	 * @param callable   $match_callback Callback which is passed the script element to determine if it is a match.
	 */
	protected function maybe_remove_script_sibling( DOMElement $node, callable $match_callback ) {
		$next_element_sibling = $node->nextSibling;
		while ( $next_element_sibling && ! $next_element_sibling instanceof DOMElement ) {
			$next_element_sibling = $next_element_sibling->nextSibling;
		}
		if ( ! $next_element_sibling instanceof DOMElement ) {
			return;
		}

		// Handle case where script is immediately following.
		if ( Tag::SCRIPT === $next_element_sibling->tagName && $match_callback( $next_element_sibling ) ) {
			$next_element_sibling->parentNode->removeChild( $next_element_sibling );
			return;
		}

		// Handle case where script is wrapped in paragraph by wpautop.
		if ( 'p' === $next_element_sibling->tagName ) {
			/** @var DOMElement[] $children_elements */
			$children_elements = array_values(
				array_filter(
					iterator_to_array( $next_element_sibling->childNodes ),
					static function ( DOMNode $child ) {
						return $child instanceof DOMElement;
					}
				)
			);

			if (
				1 === count( $children_elements )
				&&
				Tag::SCRIPT === $children_elements[0]->tagName
				&&
				$match_callback( $children_elements[0] )
			) {
				$next_element_sibling->parentNode->removeChild( $next_element_sibling );
			}
		}
	}

	/**
	 * Create overflow button element.
	 *
	 * @param Document $dom  Document.
	 * @param string   $text Button text (optional).
	 * @return Element Button element.
	 */
	protected function create_overflow_button_element( Document $dom, $text = null ) {
		if ( ! $text ) {
			$text = __( 'See more', 'amp' );
		}
		$overflow = $dom->createElement( Tag::BUTTON );
		$overflow->setAttributeNode( $dom->createAttribute( Attribute::OVERFLOW ) );
		$overflow->setAttribute( Attribute::TYPE, 'button' );
		$overflow->textContent = $text;
		return $overflow;
	}

	/**
	 * Create overflow button markup.
	 *
	 * @param string $text Button text (optional).
	 * @return string Button markup.
	 */
	protected function create_overflow_button_markup( $text = null ) {
		if ( ! $text ) {
			$text = __( 'See more', 'amp' );
		}
		return sprintf( '<button overflow type="button">%s</button>', esc_html( $text ) );
	}
}
PK.3Y�IF�Q�Q;bunyad-amp/includes/embeds/class-amp-core-block-handler.php<?php
/**
 * Class AMP_Core_Block_Handler
 *
 * @package AMP
 */

use AmpProject\Dom\Document;
use AmpProject\Html\Attribute;

/**
 * Class AMP_Core_Block_Handler
 *
 * @since 1.0
 * @internal
 */
class AMP_Core_Block_Handler extends AMP_Base_Embed_Handler {

	/**
	 * Attribute to store the original width on a video or iframe just before WordPress removes it.
	 *
	 * @see AMP_Core_Block_Handler::preserve_widget_text_element_dimensions()
	 * @see AMP_Core_Block_Handler::process_text_widgets()
	 * @var string
	 */
	const AMP_PRESERVED_WIDTH_ATTRIBUTE_NAME = 'amp-preserved-width';

	/**
	 * Attribute to store the original height on a video or iframe just before WordPress removes it.
	 *
	 * @see AMP_Core_Block_Handler::preserve_widget_text_element_dimensions()
	 * @see AMP_Core_Block_Handler::process_text_widgets()
	 * @var string
	 */
	const AMP_PRESERVED_HEIGHT_ATTRIBUTE_NAME = 'amp-preserved-height';

	/**
	 * Count of the category widgets encountered.
	 *
	 * @var int
	 */
	private $category_widget_count = 0;

	/**
	 * Count of the navigation blocks encountered.
	 *
	 * @var int
	 */
	private $navigation_block_count = 0;

	/**
	 * Methods to ampify blocks.
	 *
	 * @var array
	 */
	protected $block_ampify_methods = [
		'core/categories' => 'ampify_categories_block',
		'core/archives'   => 'ampify_archives_block',
		'core/video'      => 'ampify_video_block',
		'core/file'       => 'ampify_file_block',
		'core/gallery'    => 'ampify_gallery_block',
		'core/navigation' => 'ampify_navigation_block',
	];

	/**
	 * Register embed.
	 */
	public function register_embed() {
		/*
		 * Disable interactivity API on core/navigation block.
		 * Currently this support is added by Gutenberg plugin, but it will be a part of WP 6.3 as well.
		 *
		 * @TODO: Need to revisit once Interactivity API is landed in WP Core.
		*/
		add_filter( 'gutenberg_should_block_use_interactivity_api', '__return_false' );

		add_filter( 'render_block', [ $this, 'filter_rendered_block' ], 0, 2 );
		add_filter( 'widget_text_content', [ $this, 'preserve_widget_text_element_dimensions' ], PHP_INT_MAX );
	}

	/**
	 * Unregister embed.
	 */
	public function unregister_embed() {
		remove_filter( 'gutenberg_should_block_use_interactivity_api', '__return_false' );
		remove_filter( 'render_block', [ $this, 'filter_rendered_block' ], 0 );
		remove_filter( 'widget_text_content', [ $this, 'preserve_widget_text_element_dimensions' ], PHP_INT_MAX );
	}

	/**
	 * Filters the content of a single block to make it AMP valid.
	 *
	 * @param string $block_content The block content about to be appended.
	 * @param array  $block         The full block, including name and attributes.
	 * @return string Filtered block content.
	 */
	public function filter_rendered_block( $block_content, $block ) {
		if ( ! isset( $block['blockName'] ) ) {
			return $block_content; // @codeCoverageIgnore
		}

		if ( isset( $block['attrs'] ) && 'core/shortcode' !== $block['blockName'] ) {
			$injected_attributes    = '';
			$prop_attribute_mapping = [
				'ampCarousel' => 'data-amp-carousel',
				'ampLightbox' => 'data-amp-lightbox',
			];
			foreach ( $prop_attribute_mapping as $prop => $attr ) {
				if ( isset( $block['attrs'][ $prop ] ) ) {
					$property_value = $block['attrs'][ $prop ];
					if ( is_bool( $property_value ) ) {
						$property_value = $property_value ? 'true' : 'false';
					}

					$injected_attributes .= sprintf( ' %s="%s"', $attr, esc_attr( $property_value ) );
				}
			}
			if ( $injected_attributes ) {
				$block_content = preg_replace( '/(<\w+)/', '$1' . $injected_attributes, $block_content, 1 );
			}
		}

		if ( isset( $this->block_ampify_methods[ $block['blockName'] ] ) ) {
			$method_name   = $this->block_ampify_methods[ $block['blockName'] ];
			$block_content = $this->{$method_name}( $block_content, $block );
		} elseif ( 'core/image' === $block['blockName'] || 'core/audio' === $block['blockName'] ) {
			/*
			 * While the video block placeholder just outputs an empty video element, the placeholders for image and
			 * audio blocks output empty <img> and <audio> respectively. These will result in AMP validation errors,
			 * so we need to empty out the block content to prevent this from happening. Note that <source> is used
			 * for <img> because eventually the image block could use <picture>.
			 */
			if ( ! preg_match( '/src=|<source/', $block_content ) ) {
				$block_content = '';
			}
		}
		return $block_content;
	}

	/**
	 * Fix rendering of categories block when displayAsDropdown.
	 *
	 * This excludes the disallowed JS scrips, adds <form> tags, and uses on:change for <select>.
	 *
	 * @see render_block_core_categories()
	 *
	 * @param string $block_content Block content.
	 * @return string Rendered.
	 */
	public function ampify_categories_block( $block_content ) {
		static $block_id = 0;
		$block_id++;

		$form_id = "wp-block-categories-dropdown-{$block_id}-form";

		// Remove output of build_dropdown_script_block_core_categories().
		$block_content = preg_replace( '#<script.+?</script>#s', '', $block_content );

		$form = sprintf(
			'<form action="%s" method="get" target="_top" id="%s">',
			esc_url( home_url() ),
			esc_attr( $form_id )
		);

		$block_content = preg_replace(
			'#(<select)(.+</select>)#s',
			$form . '$1' . sprintf( ' on="change:%1$s.submit"', esc_attr( $form_id ) ) . '$2</form>',
			$block_content,
			1
		);

		return $block_content;
	}

	/**
	 * Fix rendering of archives block when displayAsDropdown.
	 *
	 * This replaces disallowed script with the use of on:change for <select>.
	 *
	 * @see render_block_core_archives()
	 *
	 * @param string $block_content Block content.
	 * @return string Rendered.
	 */
	public function ampify_archives_block( $block_content ) {

		// Eliminate use of uniqid(). Core should be using wp_unique_id() here.
		static $block_id = 0;
		$block_id++;
		$block_content = preg_replace( '/(?<="wp-block-archives-)\w+(?=")/', $block_id, $block_content );

		// Replace onchange with on attribute.
		$block_content = preg_replace(
			'/onchange=".+?"/',
			'on="change:AMP.navigateTo(url=event.value)"',
			$block_content
		);

		return $block_content;
	}

	/**
	 * Ampify video block.
	 *
	 * Inject the video attachment's dimensions if available. This prevents having to try to look up the attachment
	 * post by the video URL in `\AMP_Video_Sanitizer::filter_video_dimensions()`.
	 *
	 * @see \AMP_Video_Sanitizer::filter_video_dimensions()
	 *
	 * @param string $block_content The block content about to be appended.
	 * @param array  $block         The full block, including name and attributes.
	 * @return string Filtered block content.
	 */
	public function ampify_video_block( $block_content, $block ) {
		if ( empty( $block['attrs']['id'] ) || 'attachment' !== get_post_type( $block['attrs']['id'] ) ) {
			return $block_content;
		}

		$meta_data = wp_get_attachment_metadata( $block['attrs']['id'] );
		if ( ! isset( $meta_data['width'], $meta_data['height'] ) ) {
			return $block_content;
		}

		$block_content = preg_replace_callback(
			'/(?<=<video)\s[^>]+/',
			static function ( $matches ) use ( $meta_data ) {
				$attrs = $matches[0];
				if ( ! preg_match( '/\s(width|height|style)=/', $attrs ) ) {
					$attrs .= sprintf(
						' width="%1$d" height="%2$d" style="aspect-ratio:%1$d/%2$d"',
						$meta_data['width'],
						$meta_data['height']
					);
				}
				return $attrs;
			},
			$block_content,
			1
		);

		return $block_content;
	}

	/**
	 * Ampify file block.
	 *
	 * Fix handling of PDF previews by dequeuing wp-block-library-file and ensuring preview element has 100% width.
	 *
	 * @see \AMP_Object_Sanitizer::sanitize_pdf()
	 *
	 * @param string $block_content The block content about to be appended.
	 * @param array  $block         The full block, including name and attributes.
	 * @return string Filtered block content.
	 */
	public function ampify_file_block( $block_content, $block ) {
		if (
			empty( $block['attrs']['displayPreview'] )
			||
			empty( $block['attrs']['href'] )
			||
			'.pdf' !== substr( wp_parse_url( $block['attrs']['href'], PHP_URL_PATH ), -4 )
		) {
			return $block_content;
		}

		add_action( 'wp_print_scripts', [ $this, 'dequeue_block_library_file_script' ], 0 );
		add_action( 'wp_print_footer_scripts', [ $this, 'dequeue_block_library_file_script' ], 0 );

		// In Twenty Twenty the PDF embed fails to render due to the parent of the embed having
		// the style rule `display: flex`. Ensuring the element has 100% width fixes that issue.
		$block_content = preg_replace(
			':(?=</div>):',
			'<style id="amp-wp-file-block">.wp-block-file > .wp-block-file__embed { width:100% }</style>',
			$block_content,
			1
		);

		return $block_content;
	}

	/**
	 * Ampify gallery block.
	 *
	 * Apply data-amp-lightbox attribute only to descendant image blocks.
	 *
	 * @since 2.2.1
	 *
	 * @param string $block_content The block content about to be appended.
	 * @param array  $block         The full block, including name and attributes.
	 * @return string Filtered block content.
	 */
	public function ampify_gallery_block( $block_content, $block ) {
		// Skip legacy gallery blocks.
		if ( ! empty( $block['attrs']['ids'] ) ) {
			return $block_content;
		}

		$block_content = preg_replace( '/\sdata-amp-lightbox="\w+"/', '', $block_content );

		// Bail out early if there are no images in the gallery or the lightbox feature is not enabled.
		if ( empty( $block['innerBlocks'] ) || empty( $block['attrs']['ampLightbox'] ) ) {
			return $block_content;
		}

		// Add data attributes to figure elements that are nested in the gallery block.
		// Note that the first match is the gallery block itself which doesn't need the data-amp-lightbox attribute.
		$figure_count  = 0;
		$block_content = preg_replace_callback(
			'/(?<=<figure\s)/',
			static function () use ( &$figure_count ) {
				return 0 < $figure_count++ ? 'data-amp-lightbox="true" ' : '';
			},
			$block_content
		);

		return $block_content;
	}

	/**
	 * Dequeue wp-block-library-file script.
	 */
	public function dequeue_block_library_file_script() {
		wp_dequeue_script( 'wp-block-library-file' );
	}

	/**
	 * Ampify navigation block contained by <nav> element.
	 *
	 * @since 2.2.1
	 *
	 * @param string $block_content The block content about to be appended.
	 * @param array  $block         The full block, including name and attributes.
	 *
	 * @return string Filtered block content.
	 */
	public function ampify_navigation_block( $block_content, $block ) {
		if ( 0 === $this->navigation_block_count ) {
			add_action( 'wp_print_scripts', [ $this, 'dequeue_block_navigation_view_script' ], 0 );
			add_action( 'wp_print_footer_scripts', [ $this, 'dequeue_block_navigation_view_script' ], 0 );
		}

		$is_interactive_block = str_contains(
			preg_match( '/(?<=<nav)\s[^>]+/', $block_content, $matches ) ? $matches[0] : '',
			'data-wp-interactive'
		);

		$this->navigation_block_count++;
		$modal_state_property = "modal_{$this->navigation_block_count}_expanded";

		// Set `aria-expanded` value of submenus whenever AMP state changes.
		$submenu_toggles_count = 0;
		$block_content         = preg_replace_callback(
			'/(?<=<button)\s[^>]+/',
			static function ( $matches ) use ( $modal_state_property, &$submenu_toggles_count ) {
				$new_block_content = $matches[0];

				if ( false === strpos( $new_block_content, 'wp-block-navigation-submenu__toggle' ) ) {
					return $new_block_content;
				}

				$submenu_toggles_count++;

				$submenu_state_property = str_replace(
					'expanded',
					'submenu_' . $submenu_toggles_count . '_expanded',
					$modal_state_property
				);

				// Set `aria-expanded` value of submenus whenever AMP state changes.
				return str_replace(
					' aria-expanded',
					sprintf(
						' on="tap:AMP.setState({ %1$s: !%1$s })" [aria-expanded]="%1$s ? \'true\' : \'false\'" aria-expanded',
						esc_attr( $submenu_state_property )
					),
					$new_block_content
				);
			},
			$block_content
		);

		// In case of the "Mobile" option value, the `overlayMenu` attribute is not set at all.
		if ( ! empty( $block['attrs']['overlayMenu'] ) && 'never' === $block['attrs']['overlayMenu'] ) {
			return $block_content;
		}

		$block_content = preg_replace_callback(
			'/(?<=<button)\s[^>]+/',
			static function ( $matches ) use ( $modal_state_property, $is_interactive_block ) {
				$new_block_content = $matches[0];

				// Skip submenu toggles.
				if ( false !== strpos( $new_block_content, 'wp-block-navigation-submenu__toggle' ) ) {
					return $new_block_content;
				}

				if ( $is_interactive_block ) {
					// Replace `data-wp-on--click` with AMP state on submenu open button.
					if ( false !== strpos( $new_block_content, 'wp-block-navigation__responsive-container-open' ) ) {
						$new_block_content = preg_replace(
							'/\sdata-wp-on--click="[^"]+"/',
							sprintf( ' on="tap:AMP.setState({ %1$s: !%1$s })"', esc_attr( $modal_state_property ) ),
							$new_block_content
						);
					}

					// Replace `data-wp-on--click` with AMP state on submenu close button.
					if ( false !== strpos( $new_block_content, 'wp-block-navigation__responsive-container-close' ) ) {
						$new_block_content = preg_replace(
							'/\sdata-wp-on--click="[^"]+"/',
							sprintf( ' on="tap:AMP.setState({ %1$s: !%1$s })"', esc_attr( $modal_state_property ) ),
							$new_block_content
						);
					}
				} else {
					// Replace micromodal toggle logic bound with buttons with AMP state to open the modal.
					$new_block_content = preg_replace(
						'/\sdata-micromodal-trigger="modal-\w+"/',
						sprintf( ' on="tap:AMP.setState({ %1$s: !%1$s })"', esc_attr( $modal_state_property ) ),
						$new_block_content
					);

					// Replace micromodal toggle logic bound with buttons with AMP state to close the modal.
					$new_block_content = str_replace(
						' data-micromodal-close',
						sprintf( ' on="tap:AMP.setState({ %1$s: !%1$s })"', esc_attr( $modal_state_property ) ),
						$new_block_content
					);
				}

				// Set `aria-expanded` value whenever AMP state changes.
				return str_replace(
					' aria-expanded',
					sprintf(
						' [aria-expanded]="%s ? \'true\' : \'false\'" aria-expanded',
						esc_attr( $modal_state_property )
					),
					$new_block_content
				);
			},
			$block_content
		);

		// Change a responsive container class name and aria-hidden value based on the AMP state.
		$block_content = preg_replace_callback(
			'/(?><.+\sclass="([^"]*wp-block-navigation__responsive-container(?>\s[^"]*)?)"[^>]*>)/',
			static function ( $matches ) use ( $modal_state_property ) {
				$new_block_content = str_replace(
					' class=',
					sprintf(
						' [aria-hidden]="%1$s ? \'false\' : \'true\'" aria-hidden="true" [class]="%1$s ? \'%2$s is-menu-open has-modal-open\' : \'%2$s\'" class=',
						esc_attr( $modal_state_property ),
						esc_attr( $matches[1] )
					),
					$matches[0]
				);

				return $new_block_content;
			},
			$block_content
		);

		return $block_content;
	}

	/**
	 * Dequeue wp-block-navigation-view script.
	 *
	 * @since 2.2.1
	 */
	public function dequeue_block_navigation_view_script() {
		wp_dequeue_script( 'wp-block-navigation-view' );
		wp_dequeue_script( 'wp-block-navigation-view-2' );
	}

	/**
	 * Sanitize widgets that are not added via Gutenberg.
	 *
	 * @param Document $dom  Document.
	 * @param array    $args Args passed to sanitizer.
	 */
	public function sanitize_raw_embeds( Document $dom, $args = [] ) {
		$this->process_categories_widgets( $dom );
		$this->process_archives_widgets( $dom, $args );
		$this->process_text_widgets( $dom );
	}

	/**
	 * Process "Categories" widgets.
	 *
	 * @since 2.0
	 *
	 * @param Document $dom Document.
	 */
	private function process_categories_widgets( Document $dom ) {
		$selects = $dom->xpath->query( '//form/select[ @name = "cat" ]' );
		foreach ( $selects as $select ) {
			if ( ! $select instanceof DOMElement ) {
				continue; // @codeCoverageIgnore
			}
			$form = $select->parentNode;
			if ( ! $form instanceof DOMElement || ! $form->parentNode instanceof DOMElement ) {
				continue; // @codeCoverageIgnore
			}
			$script = $dom->xpath->query( './/script[ contains( text(), "onCatChange" ) ]', $form->parentNode )->item( 0 );
			if ( ! $script instanceof DOMElement ) {
				continue; // @codeCoverageIgnore
			}

			$this->category_widget_count++;
			$id = sprintf( 'amp-wp-widget-categories-%d', $this->category_widget_count );

			$form->setAttribute( 'id', $id );

			AMP_DOM_Utils::add_amp_action( $select, 'change', sprintf( '%s.submit', $id ) );
			$script->parentNode->removeChild( $script );
		}
	}

	/**
	 * Process "Archives" widgets.
	 *
	 * @since 2.0
	 *
	 * @param Document $dom  Select node retrieved from the widget.
	 * @param array    $args Args passed to sanitizer.
	 */
	private function process_archives_widgets( Document $dom, $args = [] ) {
		$selects = $dom->xpath->query( '//select[ @name = "archive-dropdown" and starts-with( @id, "archives-dropdown-" ) ]' );
		foreach ( $selects as $select ) {
			if ( ! $select instanceof DOMElement ) {
				continue; // @codeCoverageIgnore
			}

			$script = $dom->xpath->query( './/script[ contains( text(), "onSelectChange" ) ]', $select->parentNode )->item( 0 );
			if ( $script ) {
				$script->parentNode->removeChild( $script );
			} elseif ( $select->hasAttribute( 'onchange' ) ) {
				// Special condition for WordPress<=5.1.
				$select->removeAttribute( 'onchange' );
			} else {
				continue;
			}

			AMP_DOM_Utils::add_amp_action( $select, 'change', 'AMP.navigateTo(url=event.value)' );

			// When AMP-to-AMP linking is enabled, ensure links go to the AMP version.
			if ( ! empty( $args['amp_to_amp_linking_enabled'] ) ) {
				foreach ( $dom->xpath->query( '//option[ @value != "" ]', $select ) as $option ) {
					/**
					 * Option element.
					 *
					 * @var DOMElement $option
					 */
					$option->setAttribute( 'value', amp_add_paired_endpoint( $option->getAttribute( 'value' ) ) );
				}
			}
		}
	}

	/**
	 * Preserve dimensions of elements in a Text widget to later restore to circumvent WordPress core stripping them out.
	 *
	 * Core strips out the dimensions to prevent the element being made too wide for the sidebar. This is not a concern
	 * in AMP because of responsive sizing. So this logic is here to undo what core is doing.
	 *
	 * @since 2.0
	 * @see WP_Widget_Text::inject_video_max_width_style()
	 * @see AMP_Core_Block_Handler::process_text_widgets()
	 *
	 * @param string $content Content.
	 * @return string Content.
	 */
	public function preserve_widget_text_element_dimensions( $content ) {
		$content = preg_replace_callback(
			'#<(video|iframe|object|embed)\s[^>]*>#si',
			static function ( $matches ) {
				$html = $matches[0];
				$html = preg_replace( '/(?=\sheight="(\d+)")/', ' ' . self::AMP_PRESERVED_HEIGHT_ATTRIBUTE_NAME . '="$1" ', $html );
				$html = preg_replace( '/(?=\swidth="(\d+)")/', ' ' . self::AMP_PRESERVED_WIDTH_ATTRIBUTE_NAME . '="$1" ', $html );
				return $html;
			},
			$content
		);

		return $content;
	}

	/**
	 * Process "Text" widgets.
	 *
	 * @since 2.0
	 * @see AMP_Core_Block_Handler::preserve_widget_text_element_dimensions()
	 *
	 * @param Document $dom Select node retrieved from the widget.
	 */
	private function process_text_widgets( Document $dom ) {
		foreach ( $dom->xpath->query( '//div[ @class = "textwidget" ]' ) as $text_widget ) {
			// Restore the width/height attributes which were preserved in preserve_widget_text_element_dimensions.
			foreach ( $dom->xpath->query( sprintf( './/*[ @%s or @%s ]', self::AMP_PRESERVED_WIDTH_ATTRIBUTE_NAME, self::AMP_PRESERVED_HEIGHT_ATTRIBUTE_NAME ), $text_widget ) as $element ) {
				/** @var DOMElement $element */
				if ( $element->hasAttribute( self::AMP_PRESERVED_WIDTH_ATTRIBUTE_NAME ) ) {
					$element->setAttribute( Attribute::WIDTH, $element->getAttribute( self::AMP_PRESERVED_WIDTH_ATTRIBUTE_NAME ) );
					$element->removeAttribute( self::AMP_PRESERVED_WIDTH_ATTRIBUTE_NAME );
				}
				if ( $element->hasAttribute( self::AMP_PRESERVED_HEIGHT_ATTRIBUTE_NAME ) ) {
					$element->setAttribute( Attribute::HEIGHT, $element->getAttribute( self::AMP_PRESERVED_HEIGHT_ATTRIBUTE_NAME ) );
					$element->removeAttribute( self::AMP_PRESERVED_HEIGHT_ATTRIBUTE_NAME );
				}
			}

			/*
			 * Remove inline width style which is added to video shortcode but which overruns the container.
			 * Normally this width gets overridden by wp-mediaelement.css to be max-width: 100%, but since
			 * MediaElement.js is not used in AMP this stylesheet is not included. In any case, videos in AMP are
			 * responsive so this is built-in. Note also the style rule for .wp-video in amp-default.css.
			 */
			foreach ( $dom->xpath->query( './/div[ @class = "wp-video" and @style ]', $text_widget ) as $element ) {
				/** @var DOMElement $element */
				$element->removeAttribute( 'style' );
			}
		}
	}
}
PK.3Y��''Bbunyad-amp/includes/embeds/class-amp-crowdsignal-embed-handler.php<?php
/**
 * Class AMP_Crowdsignal_Embed_Handler
 *
 * Handle making polls and surveys from Crowdsignal (formerly Polldaddy) AMP-compatible.
 *
 * @package AMP
 * @since 1.2
 */

/**
 * Class AMP_Crowdsignal_Embed_Handler
 *
 * @internal
 */
class AMP_Crowdsignal_Embed_Handler extends AMP_Base_Embed_Handler {

	/**
	 * Register embed.
	 */
	public function register_embed() {
		add_filter( 'embed_oembed_html', [ $this, 'filter_embed_oembed_html' ], 10, 3 );
	}

	/**
	 * Unregister embed.
	 */
	public function unregister_embed() {
		remove_filter( 'embed_oembed_html', [ $this, 'filter_embed_oembed_html' ], 10 );
	}

	/**
	 * Filter oEmbed HTML for Crowdsignal for AMP output.
	 *
	 * @param string $cache Cache for oEmbed.
	 * @param string $url   Embed URL.
	 * @param array  $attr  Shortcode attributes.
	 * @return string Embed.
	 */
	public function filter_embed_oembed_html( $cache, $url, $attr ) {
		$parsed_url = wp_parse_url( $url );
		if ( empty( $parsed_url['host'] ) || empty( $parsed_url['path'] ) || ! preg_match( '#(^|\.)(?P<host>polldaddy\.com|crowdsignal\.com|survey\.fm|poll\.fm)#', $parsed_url['host'], $matches ) ) {
			return $cache;
		}

		$parsed_url['host'] = $matches['host'];

		$output = '';

		// Poll oEmbed responses include noscript which can be used as the AMP response.
		if ( preg_match( '#<noscript>(.+?)</noscript>#s', $cache, $matches ) ) {
			$output = $matches[1];
		}

		if ( empty( $output ) ) {
			if ( ! empty( $attr['title'] ) ) {
				$name = $attr['title'];
			} elseif ( 'survey.fm' === $parsed_url['host'] || preg_match( '#^/s/#', $parsed_url['path'] ) ) {
				$name = __( 'View Survey', 'amp' );
			} else {
				$name = __( 'View Poll', 'amp' );
			}
			$output = sprintf( '<a href="%s" target="_blank">%s</a>', esc_url( $url ), esc_html( $name ) );
		}

		return $output;
	}
}
PK.3Y��d��
�
Bbunyad-amp/includes/embeds/class-amp-dailymotion-embed-handler.php<?php
/**
 * Class AMP_DailyMotion_Embed_Handler
 *
 * @package AMP
 */

/**
 * Class AMP_DailyMotion_Embed_Handler
 *
 * Much of this class is borrowed from Jetpack embeds
 *
 * @internal
 */
class AMP_DailyMotion_Embed_Handler extends AMP_Base_Embed_Handler {

	const URL_PATTERN = '#https?:\/\/(www\.)?dailymotion\.com\/video\/.*#i';
	const RATIO       = 0.5625;

	/**
	 * Default width.
	 *
	 * @var int
	 */
	protected $DEFAULT_WIDTH = 600;

	/**
	 * Default height.
	 *
	 * @var int
	 */
	protected $DEFAULT_HEIGHT = 338;

	/**
	 * AMP_DailyMotion_Embed_Handler constructor.
	 *
	 * @param array $args Height, width and maximum width for embed.
	 */
	public function __construct( $args = [] ) {
		parent::__construct( $args );

		if ( isset( $this->args['content_max_width'] ) ) {
			$max_width            = $this->args['content_max_width'];
			$this->args['width']  = $max_width;
			$this->args['height'] = round( $max_width * self::RATIO );
		}
	}

	/**
	 * Register embed.
	 */
	public function register_embed() {
		wp_embed_register_handler( 'amp-dailymotion', self::URL_PATTERN, [ $this, 'oembed' ], -1 );
	}

	/**
	 * Unregister embed.
	 */
	public function unregister_embed() {
		wp_embed_unregister_handler( 'amp-dailymotion', -1 );
	}

	/**
	 * Render oEmbed.
	 *
	 * @see \WP_Embed::shortcode()
	 *
	 * @param array  $matches URL pattern matches.
	 * @param array  $attr    Shortcode attributes.
	 * @param string $url     URL.
	 * @return string Rendered oEmbed.
	 */
	public function oembed( $matches, $attr, $url ) {
		$video_id = $this->get_video_id_from_url( $url );
		return $this->render(
			[
				'video_id' => $video_id,
			]
		);
	}

	/**
	 * Render.
	 *
	 * @param array $args Args.
	 * @return string Rendered.
	 */
	public function render( $args ) {
		$args = wp_parse_args(
			$args,
			[
				'video_id' => false,
			]
		);

		if ( empty( $args['video_id'] ) ) {
			return AMP_HTML_Utils::build_tag(
				'a',
				[
					'href'  => esc_url_raw( $args['url'] ),
					'class' => 'amp-wp-embed-fallback',
				],
				esc_html( $args['url'] )
			);
		}

		$this->did_convert_elements = true;

		return AMP_HTML_Utils::build_tag(
			'amp-dailymotion',
			[
				'data-videoid' => $args['video_id'],
				'layout'       => 'responsive',
				'width'        => $this->args['width'],
				'height'       => $this->args['height'],
			]
		);
	}

	/**
	 * Determine the video ID from the URL.
	 *
	 * @param string $url URL.
	 * @return string Video ID.
	 */
	private function get_video_id_from_url( $url ) {
		$parsed_url = wp_parse_url( $url );
		parse_str( $parsed_url['path'], $path );
		$tok = explode( '/', $parsed_url['path'] );
		$tok = explode( '_', $tok[2] );

		return $tok[0];
	}
}
PK.3Y�C�9��?bunyad-amp/includes/embeds/class-amp-facebook-embed-handler.php<?php
/**
 * Class AMP_Facebook_Embed_Handler
 *
 * @package AMP
 */

use AmpProject\Dom\Document;

/**
 * Class AMP_Facebook_Embed_Handler
 *
 * @internal
 */
class AMP_Facebook_Embed_Handler extends AMP_Base_Embed_Handler {

	/**
	 * URL pattern.
	 *
	 * @var string
	 */
	const URL_PATTERN = '#https?://(www\.)?facebook\.com/.*#i';

	/**
	 * Default width.
	 *
	 * @var int
	 */
	protected $DEFAULT_WIDTH = 600;

	/**
	 * Default height.
	 *
	 * @var int
	 */
	protected $DEFAULT_HEIGHT = 400;

	/**
	 * Tag.
	 *
	 * @var string embed HTML blockquote tag to identify and replace with AMP version.
	 */
	protected $sanitize_tag = 'div';

	/**
	 * Tag.
	 *
	 * @var string AMP amp-facebook tag
	 */
	private $amp_tag = 'amp-facebook';

	/**
	 * Registers embed.
	 */
	public function register_embed() {
		wp_embed_register_handler( $this->amp_tag, self::URL_PATTERN, [ $this, 'oembed' ], -1 );
	}

	/**
	 * Unregisters embed.
	 */
	public function unregister_embed() {
		wp_embed_unregister_handler( $this->amp_tag, -1 );
	}

	/**
	 * WordPress oEmbed rendering callback.
	 *
	 * @param array  $matches URL pattern matches.
	 * @param array  $attr    Matched attributes.
	 * @param string $url     Matched URL.
	 * @return string HTML markup for rendered embed.
	 */
	public function oembed( $matches, $attr, $url ) {
		return $this->render( [ 'url' => $url ] );
	}

	/**
	 * Gets the rendered embed markup.
	 *
	 * @param array $args Embed rendering arguments.
	 * @return string HTML markup for rendered embed.
	 */
	public function render( $args ) {
		$args = wp_parse_args(
			$args,
			[
				'url' => false,
			]
		);

		if ( empty( $args['url'] ) ) {
			return '';
		}

		$this->did_convert_elements = true;

		return AMP_HTML_Utils::build_tag(
			$this->amp_tag,
			[
				'data-href' => $args['url'],
				'layout'    => 'responsive',
				'width'     => $this->args['width'],
				'height'    => $this->args['height'],
			],
			$this->create_overflow_button_markup()
		);
	}

	/**
	 * Sanitized <div class="fb-video" data-href=> tags to <amp-facebook>.
	 *
	 * @param Document $dom DOM.
	 */
	public function sanitize_raw_embeds( Document $dom ) {
		// If there were any previous embeds in the DOM that were wrapped by `wpautop()`, unwrap them.
		$embed_nodes = $dom->xpath->query( "//p/{$this->amp_tag}" );
		if ( $embed_nodes->length ) {
			foreach ( $embed_nodes as $embed_node ) {
				$this->unwrap_p_element( $embed_node );
			}
		}

		$nodes     = $dom->getElementsByTagName( $this->sanitize_tag );
		$num_nodes = $nodes->length;

		if ( 0 === $num_nodes ) {
			return;
		}

		for ( $i = $num_nodes - 1; $i >= 0; $i-- ) {
			$node = $nodes->item( $i );
			if ( ! $node instanceof DOMElement ) {
				continue;
			}

			$embed_type = $this->get_embed_type( $node );

			if ( null !== $embed_type ) {
				$this->create_amp_facebook_and_replace_node( $dom, $node, $embed_type );
			}
		}

		/*
		 * Remove the fb-root div and the Facebook Connect JS script since irrelevant.
		 * <div id="fb-root"></div>
		 * <script async defer crossorigin="anonymous" src="https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v3.2"></script>
		 */
		$fb_root = $dom->getElementById( 'fb-root' );
		if ( $fb_root ) {
			$script_elements = $dom->xpath->query( '//script[ starts-with( @src, "https://connect.facebook.net" ) and contains( @src, "sdk.js" ) ]' );
			foreach ( $script_elements as $script ) {
				$parent_node = $script->parentNode;
				$parent_node->removeChild( $script );

				// Remove parent node if it is an empty <p> tag.
				if ( 'p' === $parent_node->nodeName && null === $parent_node->firstChild ) {
					$parent_node->parentNode->removeChild( $parent_node );
				}
			}

			// Remove other instances of <div id="fb-root">.
			$fb_root_elements = $dom->xpath->query( '//div[ @id = "fb-root" ]' );
			foreach ( $fb_root_elements as $fb_root ) {
				$fb_root->parentNode->removeChild( $fb_root );
			}
		}
	}

	/**
	 * Get embed type.
	 *
	 * @param DOMElement $node The DOMNode to adjust and replace.
	 * @return string|null Embed type or null if not detected.
	 */
	private function get_embed_type( DOMElement $node ) {
		$class_attr = $node->getAttribute( 'class' );
		if ( empty( $class_attr ) || ! $node->hasAttribute( 'data-href' ) ) {
			return null;
		}

		if ( false !== strpos( $class_attr, 'fb-post' ) ) {
			return 'post';
		}

		if ( false !== strpos( $class_attr, 'fb-video' ) ) {
			return 'video';
		}

		if ( false !== strpos( $class_attr, 'fb-page' ) ) {
			return 'page';
		}

		if ( false !== strpos( $class_attr, 'fb-like' ) ) {
			return 'like';
		}

		if ( false !== strpos( $class_attr, 'fb-comments' ) ) {
			return 'comments';
		}

		if ( false !== strpos( $class_attr, 'fb-comment-embed' ) ) {
			return 'comment';
		}

		return null;
	}

	/**
	 * Create amp-facebook and replace node.
	 *
	 * @param Document   $dom        The HTML Document.
	 * @param DOMElement $node       The DOMNode to adjust and replace.
	 * @param string     $embed_type Embed type.
	 */
	private function create_amp_facebook_and_replace_node( Document $dom, DOMElement $node, $embed_type ) {

		$attributes = [
			// The layout sanitizer will convert this to `layout` when being sanitized.
			// The data attribute needs to be used so that the layout sanitizer will process it.
			'data-amp-layout' => 'responsive',
			'width'           => $node->hasAttribute( 'data-width' ) ? $node->getAttribute( 'data-width' ) : $this->DEFAULT_WIDTH,
			'height'          => $node->hasAttribute( 'data-height' ) ? $node->getAttribute( 'data-height' ) : $this->DEFAULT_HEIGHT,
		];

		$node->removeAttribute( 'data-width' );
		$node->removeAttribute( 'data-height' );

		foreach ( $node->attributes as $attribute ) {
			if ( 'data-' === substr( $attribute->nodeName, 0, 5 ) ) {
				$attributes[ $attribute->nodeName ] = $attribute->nodeValue;
			}
		}

		if ( 'page' === $embed_type ) {
			$amp_tag = 'amp-facebook-page';
		} elseif ( 'like' === $embed_type ) {
			$amp_tag = 'amp-facebook-like';
		} elseif ( 'comments' === $embed_type ) {
			$amp_tag = 'amp-facebook-comments';
		} else {
			$amp_tag = $this->amp_tag;

			$attributes['data-embed-as'] = $embed_type;
		}

		$amp_facebook_node = AMP_DOM_Utils::create_node(
			$dom,
			$amp_tag,
			$attributes
		);

		$amp_facebook_node->appendChild( $this->create_overflow_button_element( $dom ) );

		$fallback = null;
		foreach ( $node->childNodes as $child_node ) {
			if ( $child_node instanceof DOMElement && false !== strpos( $child_node->getAttribute( 'class' ), 'fb-xfbml-parse-ignore' ) ) {
				$fallback = $child_node;
				$child_node->parentNode->removeChild( $child_node );
				$fallback->setAttribute( 'fallback', '' );
				break;
			}
		}

		$node->parentNode->replaceChild( $amp_facebook_node, $node );
		if ( $fallback ) {
			$amp_facebook_node->appendChild( $fallback );
		}

		$this->did_convert_elements = true;
	}
}
PK.3Y�����>bunyad-amp/includes/embeds/class-amp-gallery-embed-handler.php<?php
/**
 * Class AMP_Gallery_Embed_Handler
 *
 * @package AMP
 */

use AmpProject\AmpWP\Embed\HandlesGalleryEmbed;
use AmpProject\Dom\Document;
use AmpProject\Html\Tag;

/**
 * Class AMP_Gallery_Embed_Handler
 *
 * @since 0.2
 * @internal
 */
class AMP_Gallery_Embed_Handler extends AMP_Base_Embed_Handler {

	use HandlesGalleryEmbed;

	/**
	 * Register embed.
	 */
	public function register_embed() {
		add_filter( 'post_gallery', [ $this, 'generate_gallery_markup' ], 10, 2 );
	}

	/**
	 * Override the output of gallery_shortcode().
	 *
	 * @param string $html  Markup to filter.
	 * @param array  $attrs Shortcode attributes.
	 * @return string Markup for the gallery.
	 */
	public function generate_gallery_markup( $html, $attrs ) {
		static $recursing = false;
		if ( ! $recursing ) {
			$recursing = true;
			$html      = $this->filter_post_gallery_markup( $html, $attrs );
			$recursing = false;
		}
		return $html;
	}

	/**
	 * Filter the output of gallery_shortcode().
	 *
	 * @param string       $html  Markup to filter.
	 * @param array|string $attrs Shortcode attributes, or empty string if there were no shortcode attributes.
	 * @return string Markup for the gallery.
	 */
	protected function filter_post_gallery_markup( $html, $attrs ) {
		if ( ! is_array( $attrs ) ) {
			$attrs = [];
		}

		// Use <amp-carousel> for the gallery if requested via amp-carousel shortcode attribute, or use by default if in legacy Reader mode.
		// In AMP_Gallery_Block_Sanitizer, this is referred to as carousel_required.
		$is_carousel = isset( $attrs['amp-carousel'] )
			? rest_sanitize_boolean( $attrs['amp-carousel'] )
			: amp_is_legacy();

		$is_lightbox = isset( $attrs['amp-lightbox'] ) && rest_sanitize_boolean( $attrs['amp-lightbox'] );

		if ( ! $is_carousel && ! $is_lightbox ) {
			return $html;
		}

		if ( $is_carousel ) {
			$gallery_size = isset( $attrs['size'] ) ? $attrs['size'] : null;

			if ( $gallery_size && 'thumbnail' === $gallery_size ) {
				/*
				 * If the 'gallery' shortcode has a `size` attribute of `thumbnail`, prevent outputting an <amp-carousel>.
				 * That will often get thumbnail images around 150 x 150,
				 * while the <amp-carousel> usually has a width of 600 and a height of 480.
				 * That often means very low-resolution images.
				 * So fall back to the normal 'gallery' shortcode callback, gallery_shortcode().
				 */
				return $html;
			}

			if ( ! $gallery_size ) {
				// Default to `large` if no `size` attribute is specified.
				$attrs['size'] = 'large';
			}
		}

		if ( $is_lightbox ) {
			// Prevent wrapping the images in anchor tags if a lightbox is specified. If that is done the link will get
			// preference over the lightbox when the image is clicked.
			$attrs['link'] = 'none';
		}

		// Use `data` attributes to indicate which options are configured for the embed. These indications are later
		// processed during sanitization of the embed in `::sanitize_raw_embeds`.
		$filter_gallery_style = static function ( $style ) use ( $is_carousel, $is_lightbox ) {
			$data_attrs = [];

			if ( $is_lightbox ) {
				$data_attrs[] = 'data-amp-lightbox="true"';
			}

			if ( $is_carousel ) {
				$data_attrs[] = 'data-amp-carousel="true"';
			}

			return preg_replace(
				'/(?<=<div\b)/',
				' ' . implode( ' ', $data_attrs ),
				$style,
				1
			);
		};

		add_filter( 'gallery_style', $filter_gallery_style );
		$gallery_html = gallery_shortcode( $attrs );
		remove_filter( 'gallery_style', $filter_gallery_style );

		return $gallery_html;
	}

	/**
	 * Unregister embed.
	 */
	public function unregister_embed() {
		remove_filter( 'post_gallery', [ $this, 'generate_gallery_markup' ] );
	}

	/**
	 * Sanitizes gallery raw embeds to become an amp-carousel and/or amp-image-lightbox, depending on configuration options.
	 *
	 * @param Document $dom DOM.
	 */
	public function sanitize_raw_embeds( Document $dom ) {
		$nodes = $dom->xpath->query( '//div[ contains( concat( " ", normalize-space( @class ), " " ), " gallery " ) and ( @data-amp-carousel or @data-amp-lightbox ) ]' );

		/** @var DOMElement $node */
		foreach ( $nodes as $node ) {
			$is_carousel  = $node->hasAttribute( 'data-amp-carousel' ) && rest_sanitize_boolean( $node->getAttribute( 'data-amp-carousel' ) );
			$is_lightbox  = $node->hasAttribute( 'data-amp-lightbox' ) && rest_sanitize_boolean( $node->getAttribute( 'data-amp-lightbox' ) );
			$img_elements = $node->getElementsByTagName( 'img' );

			$this->process_gallery_embed( $is_carousel, $is_lightbox, $node, $img_elements );
		}
	}

	/**
	 * Get the caption element for the specified image element.
	 *
	 * @param DOMElement $img_element Image element.
	 * @return DOMElement|null The caption element, otherwise `null` if it could not be found.
	 */
	protected function get_caption_element( DOMElement $img_element ) {
		$parent_element = $this->get_parent_container_for_image( $img_element );

		if ( ! $parent_element instanceof DOMElement ) {
			return null;
		}

		// The caption should be next immediate element located next to the parent container of the image.
		$caption_element = $parent_element->nextSibling;

		while (
			$caption_element
			&& ( ! $caption_element instanceof DOMElement || ! AMP_DOM_Utils::has_class( $caption_element, 'wp-caption-text' ) )
		) {
			$caption_element = $caption_element->nextSibling;
		}

		if ( $caption_element instanceof DOMElement && Tag::FIGCAPTION !== $caption_element->nodeName ) {
			// Transform the caption element into a `figcaption`. This not only allows the `amp-lightbox` to correctly
			// detect and display the caption, but it is also semantically correct as the parent element will be a `figure`.
			$figcaption_element = AMP_DOM_Utils::create_node( Document::fromNode( $caption_element ), Tag::FIGCAPTION, [] );

			while ( $caption_element->firstChild ) {
				$figcaption_element->appendChild( $caption_element->firstChild );
			}

			$caption_element = $figcaption_element;
		}

		return $caption_element instanceof DOMElement ? $caption_element : null;
	}

	/**
	 * Get the parent container for the specified image element.
	 *
	 * @param DOMElement $image_element Image element.
	 * @return DOMElement|null The parent container, otherwise `null` if it could not be found.
	 */
	protected function get_parent_container_for_image( DOMElement $image_element ) {
		$parent_element = $image_element->parentNode;

		while (
			$parent_element
			&& ( ! $parent_element instanceof DOMElement || ! AMP_DOM_Utils::has_class( $parent_element, 'gallery-icon' ) )
		) {
			$parent_element = $parent_element->parentNode;
		}

		return $parent_element;
	}
}
PK.3Y1K��<bunyad-amp/includes/embeds/class-amp-imgur-embed-handler.php<?php
/**
 * Class AMP_Imgur_Embed_Handler
 *
 * @package AMP
 * @since 1.0
 */

/**
 * Class AMP_Imgur_Embed_Handler
 *
 * @internal
 */
class AMP_Imgur_Embed_Handler extends AMP_Base_Embed_Handler {
	/**
	 * Regex matched to produce output amp-imgur.
	 *
	 * @var string
	 */
	const URL_PATTERN = '#https?://(www\.)?imgur\.com/.*#i';

	/**
	 * Register embed.
	 */
	public function register_embed() {
		add_filter( 'embed_oembed_html', [ $this, 'filter_embed_oembed_html' ], 10, 3 );
	}

	/**
	 * Unregister embed.
	 */
	public function unregister_embed() {
		remove_filter( 'embed_oembed_html', [ $this, 'filter_embed_oembed_html' ], 10 );
	}

	/**
	 * Filter oEmbed HTML for Imgur to prepare it for AMP.
	 *
	 * @param mixed  $return The oEmbed HTML.
	 * @param string $url    The attempted embed URL.
	 * @param array  $attr   Attributes.
	 * @return string Embed.
	 */
	public function filter_embed_oembed_html( $return, $url, $attr ) {
		$parsed_url = wp_parse_url( $url );

		if ( ! isset( $parsed_url['host'], $parsed_url['path'] ) ) {
			return $return;
		}

		if ( false !== strpos( $parsed_url['host'], 'imgur.com' ) ) {
			if ( empty( $attr['height'] ) ) {
				return $return;
			}

			$attributes = wp_array_slice_assoc( $attr, [ 'width', 'height' ] );

			if ( empty( $attr['width'] ) ) {
				$attributes['layout'] = 'fixed-height';
				$attributes['width']  = 'auto';
			}

			$attributes['data-imgur-id'] = $this->get_imgur_id_from_url( $parsed_url );
			if ( false === $attributes['data-imgur-id'] ) {
				return $return;
			}

			$return = AMP_HTML_Utils::build_tag(
				'amp-imgur',
				$attributes
			);
		}
		return $return;
	}

	/**
	 * Get Imgur ID from URL.
	 *
	 * @param array $parsed_url Parsed URL.
	 * @return bool|string ID / false.
	 */
	protected function get_imgur_id_from_url( $parsed_url ) {

		if ( ! preg_match( '#^(?:/(a|gallery))?/([A-Za-z0-9]+)#', $parsed_url['path'], $matches ) ) {
			return false;
		}

		return ! empty( $matches[1] ) ? "a/{$matches[2]}" : $matches[2];
	}
}
PK.3Y��X��@bunyad-amp/includes/embeds/class-amp-instagram-embed-handler.php<?php
/**
 * Class AMP_Instagram_Embed_Handler
 *
 * @package AMP
 */

use AmpProject\Dom\Document;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag;

/**
 * Class AMP_Instagram_Embed_Handler
 *
 * Much of this class is borrowed from Jetpack embeds
 *
 * @internal
 */
class AMP_Instagram_Embed_Handler extends AMP_Base_Embed_Handler {
	const SHORT_URL_HOST = 'instagr.am';
	const URL_PATTERN    = '#https?:\/\/(www\.)?instagr(\.am|am\.com)\/(p|tv|reel)\/([A-Za-z0-9-_]+)#i';

	/**
	 * Default width.
	 *
	 * @var int
	 */
	protected $DEFAULT_WIDTH = 600;

	/**
	 * Default height.
	 *
	 * @var int
	 */
	protected $DEFAULT_HEIGHT = 600;

	/**
	 * Tag.
	 *
	 * @var string embed HTML blockquote tag to identify and replace with AMP version.
	 */
	protected $sanitize_tag = 'blockquote';

	/**
	 * Tag.
	 *
	 * @var string AMP amp-instagram tag.
	 */
	private $amp_tag = 'amp-instagram';

	/**
	 * Registers embed.
	 */
	public function register_embed() {
		wp_embed_register_handler( $this->amp_tag, self::URL_PATTERN, [ $this, 'oembed' ], -1 );
	}

	/**
	 * Unregisters embed.
	 */
	public function unregister_embed() {
		wp_embed_unregister_handler( $this->amp_tag, -1 );
	}

	/**
	 * WordPress OEmbed rendering callback.
	 *
	 * @param array  $matches URL pattern matches.
	 * @param array  $attr    Matched attributes.
	 * @param string $url     Matched URL.
	 * @return string HTML markup for rendered embed.
	 */
	public function oembed( $matches, $attr, $url ) {
		return $this->render(
			[
				'url'          => $url,
				'instagram_id' => end( $matches ),
			]
		);
	}

	/**
	 * Gets the rendered embed markup.
	 *
	 * @param array $args Embed rendering arguments.
	 * @return string HTML markup for rendered embed.
	 */
	public function render( $args ) {
		$args = wp_parse_args(
			$args,
			[
				'url'          => false,
				'instagram_id' => false,
			]
		);

		if ( empty( $args['instagram_id'] ) ) {
			return AMP_HTML_Utils::build_tag(
				'a',
				[
					'href'  => esc_url_raw( $args['url'] ),
					'class' => 'amp-wp-embed-fallback',
				],
				esc_html( $args['url'] )
			);
		}

		$this->did_convert_elements = true;

		return AMP_HTML_Utils::build_tag(
			$this->amp_tag,
			[
				'data-shortcode' => $args['instagram_id'],
				'data-captioned' => '',
				'layout'         => 'responsive',
				'width'          => $this->args['width'],
				'height'         => $this->args['height'],
			],
			$this->create_overflow_button_markup()
		);
	}

	/**
	 * Get Instagram ID from URL.
	 *
	 * @param string $url URL.
	 * @return string|false The ID parsed from the URL or false if not found.
	 */
	private function get_instagram_id_from_url( $url ) {
		$found = preg_match( self::URL_PATTERN, $url, $matches );

		if ( ! $found ) {
			return false;
		}

		return end( $matches );
	}

	/**
	 * Sanitized <blockquote class="instagram-media"> tags to <amp-instagram>
	 *
	 * @param Document $dom DOM.
	 */
	public function sanitize_raw_embeds( Document $dom ) {
		/**
		 * Node list.
		 *
		 * @var DOMNodeList $nodes
		 */
		$nodes     = $dom->getElementsByTagName( $this->sanitize_tag );
		$num_nodes = $nodes->length;

		if ( 0 === $num_nodes ) {
			return;
		}

		for ( $i = $num_nodes - 1; $i >= 0; $i-- ) {
			$node = $nodes->item( $i );
			if ( ! $node instanceof DOMElement ) {
				continue;
			}

			if ( $node->hasAttribute( 'data-instgrm-permalink' ) ) {
				$this->create_amp_instagram_and_replace_node( $dom, $node );
			}
		}
	}

	/**
	 * Make final modifications to DOMNode
	 *
	 * @param Document   $dom The HTML Document.
	 * @param DOMElement $node The DOMNode to adjust and replace.
	 */
	private function create_amp_instagram_and_replace_node( $dom, $node ) {
		$permalink    = $node->getAttribute( 'data-instgrm-permalink' );
		$instagram_id = $this->get_instagram_id_from_url( $permalink );

		if ( $instagram_id ) {
			$node_args = [
				'data-shortcode' => $instagram_id,
				'layout'         => 'responsive',
				'width'          => $this->DEFAULT_WIDTH,
				'height'         => $this->DEFAULT_HEIGHT,
			];

			if ( true === $node->hasAttribute( 'data-instgrm-captioned' ) ) {
				$node_args['data-captioned'] = '';
			}

			$new_node = AMP_DOM_Utils::create_node( $dom, $this->amp_tag, $node_args );
			$new_node->appendChild( $this->create_overflow_button_element( $dom ) );
		} else {
			$new_node = AMP_DOM_Utils::create_node(
				$dom,
				Tag::A,
				[
					Attribute::HREF   => esc_url_raw( $permalink ),
					Attribute::CLASS_ => 'amp-wp-embed-fallback',
				]
			);

			$new_node->textContent = __( 'View on Instagram', 'amp' );
		}

		$this->sanitize_embed_script( $node );

		$node->parentNode->replaceChild( $new_node, $node );

		$this->did_convert_elements = true;
	}

	/**
	 * Removes Instagram's embed <script> tag.
	 *
	 * @param DOMElement $node The DOMNode to whose sibling is the instagram script.
	 */
	private function sanitize_embed_script( $node ) {
		$next_element_sibling = $node->nextSibling;
		while ( $next_element_sibling && ! ( $next_element_sibling instanceof DOMElement ) ) {
			$next_element_sibling = $next_element_sibling->nextSibling;
		}

		$script_src = 'instagram.com/embed.js';

		// Handle case where script is wrapped in paragraph by wpautop.
		if ( $next_element_sibling instanceof DOMElement && 'p' === $next_element_sibling->nodeName ) {
			$children = $next_element_sibling->getElementsByTagName( '*' );
			if ( 1 === $children->length && 'script' === $children->item( 0 )->nodeName && false !== strpos( $children->item( 0 )->getAttribute( 'src' ), $script_src ) ) {
				$next_element_sibling->parentNode->removeChild( $next_element_sibling );
				return;
			}
		}

		// Handle case where script is immediately following.
		$is_embed_script = (
			$next_element_sibling instanceof DOMElement
			&&
			'script' === strtolower( $next_element_sibling->nodeName )
			&&
			false !== strpos( $next_element_sibling->getAttribute( 'src' ), $script_src )
		);
		if ( $is_embed_script ) {
			$next_element_sibling->parentNode->removeChild( $next_element_sibling );
		}
	}
}
PK.3Y�o���<bunyad-amp/includes/embeds/class-amp-issuu-embed-handler.php<?php
/**
 * Class AMP_Issuu_Embed_Handler
 *
 * @package AMP
 * @since 0.7
 */

/**
 * Class AMP_Issuu_Embed_Handler
 *
 * @internal
 */
class AMP_Issuu_Embed_Handler extends AMP_Base_Embed_Handler {
	/**
	 * Regex matched to produce output amp-iframe.
	 *
	 * @const string
	 */
	const URL_PATTERN = '#https?://(www\.)?issuu\.com/.+/docs/.+#i';

	/**
	 * Register embed.
	 */
	public function register_embed() {
		add_filter( 'embed_oembed_html', [ $this, 'filter_embed_oembed_html' ], 10, 3 );
	}

	/**
	 * Unregister embed.
	 */
	public function unregister_embed() {
		remove_filter( 'embed_oembed_html', [ $this, 'filter_embed_oembed_html' ], 10 );
	}

	/**
	 * Filter oEmbed HTML for Meetup to prepare it for AMP.
	 *
	 * @param mixed  $return The oEmbed HTML.
	 * @param string $url    The attempted embed URL.
	 * @param array  $attr   Attributes.
	 * @return string Embed.
	 */
	public function filter_embed_oembed_html( $return, $url, $attr ) {
		$parsed_url = wp_parse_url( $url );
		if ( false !== strpos( $parsed_url['host'], 'issuu.com' ) ) {
			if ( preg_match( '/width\s*:\s*(\d+)px/', $return, $matches ) ) {
				$attr['width'] = $matches[1];
			}
			if ( preg_match( '/height\s*:\s*(\d+)px/', $return, $matches ) ) {
				$attr['height'] = $matches[1];
			}

			$return = AMP_HTML_Utils::build_tag(
				'amp-iframe',
				[
					'width'   => $attr['width'],
					'height'  => $attr['height'],
					'src'     => $url,
					'sandbox' => 'allow-scripts allow-same-origin',
				]
			);
		}
		return $return;
	}
}

PK.3Y���K=bunyad-amp/includes/embeds/class-amp-meetup-embed-handler.php<?php
/**
 * Class AMP_Meetup_Embed_Handler
 *
 * @package AMP
 * @since 0.7
 */

/**
 * Class AMP_Meetup_Embed_Handler
 *
 * @internal
 */
class AMP_Meetup_Embed_Handler extends AMP_Base_Embed_Handler {

	/**
	 * Register embed.
	 */
	public function register_embed() {
		add_filter( 'embed_oembed_html', [ $this, 'filter_embed_oembed_html' ], 10, 2 );
	}

	/**
	 * Unregister embed.
	 */
	public function unregister_embed() {
		remove_filter( 'embed_oembed_html', [ $this, 'filter_embed_oembed_html' ], 10 );
	}

	/**
	 * Filter oEmbed HTML for Meetup to prepare it for AMP.
	 *
	 * @param string $cache Cache for oEmbed.
	 * @param string $url   Embed URL.
	 * @return string Embed.
	 */
	public function filter_embed_oembed_html( $cache, $url ) {
		$parsed_url = wp_parse_url( $url );
		if ( false !== strpos( $parsed_url['host'], 'meetup.com' ) ) {

			// Supply the width/height so that we don't have to make requests to look them up later.
			$cache = str_replace( '<img ', '<img width="50" height="50" ', $cache );
		}
		return $cache;
	}
}

PK.3Y
��Q��@bunyad-amp/includes/embeds/class-amp-pinterest-embed-handler.php<?php
/**
 * Class AMP_Pinterest_Embed_Handler
 *
 * @package AMP
 */

/**
 * Class AMP_Pinterest_Embed_Handler
 *
 * @internal
 */
class AMP_Pinterest_Embed_Handler extends AMP_Base_Embed_Handler {

	const URL_PATTERN = '#https?://(?:www\.)?(?:[a-z]{2}\.)?pinterest\.[a-z.]+/pin/[^/]+/?#i';

	/**
	 * Default width.
	 *
	 * @var int
	 */
	protected $DEFAULT_WIDTH = 450;

	/**
	 * Default height.
	 *
	 * @var int
	 */
	protected $DEFAULT_HEIGHT = 750;

	/**
	 * Registers embed.
	 */
	public function register_embed() {
		wp_embed_register_handler(
			'amp-pinterest',
			self::URL_PATTERN,
			[ $this, 'oembed' ],
			-1
		);
	}

	/**
	 * Unregisters embed.
	 */
	public function unregister_embed() {
		wp_embed_unregister_handler( 'amp-pinterest', -1 );
	}

	/**
	 * WordPress OEmbed rendering callback.
	 *
	 * @param array  $matches URL pattern matches.
	 * @param array  $attr    Matched attributes.
	 * @param string $url     Matched URL.
	 * @return string HTML markup for rendered embed.
	 */
	public function oembed( $matches, $attr, $url ) {
		return $this->render( [ 'url' => $url ] );
	}

	/**
	 * Gets the rendered embed markup.
	 *
	 * @param array $args Embed rendering arguments.
	 * @return string HTML markup for rendered embed.
	 */
	public function render( $args ) {
		$args = wp_parse_args(
			$args,
			[
				'url' => false,
			]
		);

		if ( empty( $args['url'] ) ) {
			return '';
		}

		$this->did_convert_elements = true;

		return AMP_HTML_Utils::build_tag(
			'amp-pinterest',
			[
				'width'    => $this->args['width'],
				'height'   => $this->args['height'],
				'data-do'  => 'embedPin',
				'data-url' => $args['url'],
			]
		);
	}
}
PK.3Y��/)2'2'?bunyad-amp/includes/embeds/class-amp-playlist-embed-handler.php<?php
/**
 * Class AMP_Playlist_Embed_Handler
 *
 * @package AMP
 * @since 0.7
 */

/**
 * Class AMP_Playlist_Embed_Handler
 *
 * Creates AMP-compatible markup for the WordPress 'playlist' shortcode.
 *
 * @package AMP
 * @internal
 */
class AMP_Playlist_Embed_Handler extends AMP_Base_Embed_Handler {

	/**
	 * The tag of the shortcode.
	 *
	 * @var string
	 */
	const SHORTCODE = 'playlist';

	/**
	 * The default height of the thumbnail image for 'audio' playlist tracks.
	 *
	 * @var int
	 */
	const DEFAULT_THUMB_HEIGHT = 64;

	/**
	 * The default width of the thumbnail image for 'audio' playlist tracks.
	 *
	 * @var int
	 */
	const DEFAULT_THUMB_WIDTH = 48;

	/**
	 * The max width of the audio thumbnail image.
	 *
	 * This corresponds to the max-width in wp-mediaelement.css:
	 * .wp-playlist .wp-playlist-current-item img
	 *
	 * @var int
	 */
	const THUMB_MAX_WIDTH = 60;

	/**
	 * The height of the carousel.
	 *
	 * @var int
	 */
	const CAROUSEL_HEIGHT = 160;

	/**
	 * The pattern to get the playlist data.
	 *
	 * @var string
	 */
	const PLAYLIST_REGEX = ':<script type="application/json" class="wp-playlist-script">(.+?)</script>:s';

	/**
	 * The ID of individual playlist.
	 *
	 * @var int
	 */
	public static $playlist_id = 0;

	/**
	 * The removed shortcode callback.
	 *
	 * @var callable|null
	 */
	public $removed_shortcode_callback;

	/**
	 * Registers the playlist shortcode.
	 *
	 * @global array $shortcode_tags
	 * @return void
	 */
	public function register_embed() {
		global $shortcode_tags;
		if ( shortcode_exists( self::SHORTCODE ) ) {
			$this->removed_shortcode_callback = $shortcode_tags[ self::SHORTCODE ];
		}
		add_shortcode( self::SHORTCODE, [ $this, 'shortcode' ] );
		remove_action( 'wp_playlist_scripts', 'wp_playlist_scripts' );
	}

	/**
	 * Unregisters the playlist shortcode.
	 *
	 * @return void
	 */
	public function unregister_embed() {
		if ( isset( $this->removed_shortcode_callback ) ) {
			add_shortcode( self::SHORTCODE, $this->removed_shortcode_callback );
			unset( $this->removed_shortcode_callback );
		}
		add_action( 'wp_playlist_scripts', 'wp_playlist_scripts' );
	}

	/**
	 * Enqueues the playlist styling.
	 *
	 * @return void
	 */
	public function enqueue_styles() {
		wp_enqueue_style(
			'amp-playlist-shortcode',
			amp_get_asset_url( 'css/amp-playlist-shortcode.css' ),
			[ 'wp-mediaelement' ],
			AMP__VERSION
		);

		wp_styles()->add_data( 'amp-playlist-shortcode', 'rtl', 'replace' );
	}

	/**
	 * Gets AMP-compliant markup for the playlist shortcode.
	 *
	 * Uses the JSON that wp_playlist_shortcode() produces.
	 * Gets the markup, based on the type of playlist.
	 *
	 * @param array $attr The playlist attributes.
	 * @return string Playlist shortcode markup.
	 */
	public function shortcode( $attr ) {
		$data = $this->get_data( $attr );

		if ( isset( $data['type'] ) && ( 'audio' === $data['type'] ) ) {
			return $this->audio_playlist( $data );
		}

		if ( isset( $data['type'] ) && ( 'video' === $data['type'] ) ) {
			return $this->video_playlist( $data );
		}

		return '';
	}

	/**
	 * Gets an AMP-compliant audio playlist.
	 *
	 * @param array $data Data.
	 * @return string Playlist shortcode markup, or an empty string.
	 */
	public function audio_playlist( $data ) {
		if ( ! isset( $data['tracks'] ) ) {
			return '';
		}
		self::$playlist_id++;
		$container_id = 'wpPlaylist' . self::$playlist_id . 'Carousel';
		$state_id     = 'wpPlaylist' . self::$playlist_id;
		$amp_state    = [
			'selectedIndex' => 0,
		];

		$this->enqueue_styles();
		ob_start();
		?>
		<div class="wp-playlist wp-audio-playlist wp-playlist-light">
			<amp-state id="<?php echo esc_attr( $state_id ); ?>">
				<script type="application/json"><?php echo wp_json_encode( $amp_state ); ?></script>
			</amp-state>
			<amp-carousel id="<?php echo esc_attr( $container_id ); ?>" [slide]="<?php echo esc_attr( $state_id . '.selectedIndex' ); ?>" height="<?php echo esc_attr( self::CAROUSEL_HEIGHT ); ?>" width="auto" type="slides">
				<?php
				foreach ( $data['tracks'] as $track ) :
					$title      = $this->get_title( $track );
					$image_url  = isset( $track['thumb']['src'] ) ? $track['thumb']['src'] : '';
					$dimensions = $this->get_thumb_dimensions( $track );
					?>
					<div>
						<div class="wp-playlist-current-item">
							<?php if ( $image_url ) : ?>
								<img src="<?php echo esc_url( $image_url ); ?>" height="<?php echo esc_attr( $dimensions['height'] ); ?>" width="<?php echo esc_attr( $dimensions['width'] ); ?>">
							<?php endif; ?>
							<div class="wp-playlist-caption">
								<span class="wp-playlist-item-meta wp-playlist-item-title"><?php echo esc_html( $title ); ?></span>
							</div>
						</div>
						<amp-audio width="auto" height="50" src="<?php echo esc_url( $track['src'] ); ?>"></amp-audio>
					</div>
				<?php endforeach; ?>
			</amp-carousel>
			<?php $this->print_tracks( $state_id, $data['tracks'] ); ?>
		</div>
		<?php
		return ob_get_clean();
	}

	/**
	 * Gets an AMP-compliant video playlist.
	 *
	 * This uses similar markup to the native playlist shortcode output.
	 * So the styles from wp-mediaelement.min.css will apply to it.
	 *
	 * @global int $content_width
	 * @param array $data Data.
	 * @return string $video_playlist Markup for the video playlist.
	 */
	public function video_playlist( $data ) {
		global $content_width;
		if ( ! isset( $data['tracks'][0]['src'] ) ) {
			return '';
		}
		self::$playlist_id++;
		$state_id  = 'wpPlaylist' . self::$playlist_id;
		$amp_state = [
			'selectedIndex' => 0,
		];
		foreach ( $data['tracks'] as $index => $track ) {
			$amp_state[ $index ] = [
				'videoUrl' => $track['src'],
				'thumb'    => isset( $track['thumb']['src'] ) ? $track['thumb']['src'] : '',
			];
		}

		$dimensions = isset( $data['tracks'][0]['dimensions']['resized'] ) ? $data['tracks'][0]['dimensions']['resized'] : null;
		$width      = isset( $dimensions['width'] ) ? $dimensions['width'] : $content_width;
		$height     = isset( $dimensions['height'] ) ? $dimensions['height'] : null;
		$src_bound  = sprintf( '%s[%s.selectedIndex].videoUrl', $state_id, $state_id );

		$this->enqueue_styles();
		ob_start();
		?>
		<div class="wp-playlist wp-video-playlist wp-playlist-light">
			<amp-state id="<?php echo esc_attr( $state_id ); ?>">
				<script type="application/json"><?php echo wp_json_encode( $amp_state ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?></script>
			</amp-state>
			<amp-video id="amp-video" src="<?php echo esc_url( $data['tracks'][0]['src'] ); ?>" [src]="<?php echo esc_attr( $src_bound ); ?>" width="<?php echo esc_attr( $width ); ?>" height="<?php echo esc_attr( $height ); ?>" controls></amp-video>
			<?php $this->print_tracks( $state_id, $data['tracks'] ); ?>
		</div>
		<?php
		return ob_get_clean(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
	}

	/**
	 * Gets the thumbnail image dimensions, including height and width.
	 *
	 * If the width is higher than the maximum width,
	 * reduces it to the maximum width.
	 * And it proportionally reduces the height.
	 *
	 * @param array $track The data for the track.
	 * @return array {
	 *     Dimensions.
	 *
	 *     @type int $height Image height.
	 *     @type int $width  Image width.
	 * }
	 */
	public function get_thumb_dimensions( $track ) {
		$original_height = isset( $track['thumb']['height'] ) ? (int) $track['thumb']['height'] : self::DEFAULT_THUMB_HEIGHT;
		$original_width  = isset( $track['thumb']['width'] ) ? (int) $track['thumb']['width'] : self::DEFAULT_THUMB_WIDTH;
		if ( $original_width > self::THUMB_MAX_WIDTH ) {
			$ratio  = $original_width / self::THUMB_MAX_WIDTH;
			$height = (int) ( $original_height / $ratio );
		} else {
			$height = $original_height;
		}
		$width = min( self::THUMB_MAX_WIDTH, $original_width );
		return compact( 'height', 'width' );
	}

	/**
	 * Outputs the playlist tracks, based on the type of playlist.
	 *
	 * These typically appear below the player.
	 * Clicking a track triggers the player to appear with its src.
	 *
	 * @param string $state_id The ID of the container.
	 * @param array  $tracks   Tracks.
	 * @return void
	 */
	public function print_tracks( $state_id, $tracks ) {
		?>
		<div class="wp-playlist-tracks">
			<?php foreach ( $tracks as $index => $track ) : ?>
				<?php
				$on            = 'tap:AMP.setState(' . wp_json_encode( [ $state_id => [ 'selectedIndex' => $index ] ] ) . ')';
				$initial_class = 0 === $index ? 'wp-playlist-item wp-playlist-playing' : 'wp-playlist-item';
				$bound_class   = sprintf( '%d == %s.selectedIndex ? "wp-playlist-item wp-playlist-playing" : "wp-playlist-item"', $index, $state_id );
				?>
				<div class="<?php echo esc_attr( $initial_class ); ?>" [class]="<?php echo esc_attr( $bound_class ); ?>" >
					<a class="wp-playlist-caption" on="<?php echo esc_attr( $on ); ?>">
						<?php echo esc_html( ( $index + 1 ) . '.' ); ?> <span class="wp-playlist-item-title"><?php echo esc_html( $this->get_title( $track ) ); ?></span>
					</a>
					<?php if ( isset( $track['meta']['length_formatted'] ) ) : ?>
						<div class="wp-playlist-item-length"><?php echo esc_html( $track['meta']['length_formatted'] ); ?></div>
					<?php endif; ?>
				</div>
			<?php endforeach; ?>
		</div>
		<?php
	}

	/**
	 * Gets the data for the playlist.
	 *
	 * @see wp_playlist_shortcode()
	 * @param array $attr The shortcode attributes.
	 * @return array $data The data for the playlist.
	 */
	public function get_data( $attr ) {
		$markup = wp_playlist_shortcode( $attr );
		preg_match( self::PLAYLIST_REGEX, $markup, $matches );
		if ( empty( $matches[1] ) ) {
			return [];
		}
		return json_decode( $matches[1], true );
	}

	/**
	 * Gets the title for the track.
	 *
	 * @param array $track The track data.
	 * @return string $title The title of the track.
	 */
	public function get_title( $track ) {
		if ( ! empty( $track['caption'] ) ) {
			return $track['caption'];
		}

		if ( ! empty( $track['title'] ) ) {
			return $track['title'];
		}

		return '';
	}
}
PK.3YR=�Σ�=bunyad-amp/includes/embeds/class-amp-reddit-embed-handler.php<?php
/**
 * Class AMP_Reddit_Embed_Handler
 *
 * @package AMP
 * @since 0.7
 */

/**
 * Class AMP_Reddit_Embed_Handler
 *
 * @internal
 */
class AMP_Reddit_Embed_Handler extends AMP_Base_Embed_Handler {
	/**
	 * Regex matched to produce output amp-reddit.
	 *
	 * @const string
	 */
	const URL_PATTERN = '#https?://(www\.)?reddit\.com/r/[^/]+/comments/.*#i';

	/**
	 * Register embed.
	 */
	public function register_embed() {
		wp_embed_register_handler( 'amp-reddit', self::URL_PATTERN, [ $this, 'oembed' ], -1 );
	}

	/**
	 * Unregister embed.
	 */
	public function unregister_embed() {
		wp_embed_unregister_handler( 'amp-reddit', -1 );
	}

	/**
	 * Embed found with matching URL callback.
	 *
	 * @param array $matches URL regex matches.
	 * @param array $attr    Additional parameters.
	 * @param array $url     URL.
	 * @return string Embed.
	 */
	public function oembed( $matches, $attr, $url ) {
		return $this->render( [ 'url' => $url ] );
	}

	/**
	 * Output the Reddit amp element.
	 *
	 * @param array $args parameters used for output.
	 * @return string Rendered content.
	 */
	public function render( $args ) {
		$args = wp_parse_args(
			$args,
			[
				'url' => false,
			]
		);

		if ( empty( $args['url'] ) ) {
			return '';
		}

		return AMP_HTML_Utils::build_tag(
			'amp-embedly-card',
			[
				'layout'   => 'responsive',
				'width'    => '100',
				'height'   => '100',
				'data-url' => $args['url'],
			]
		);
	}
}

PK.3Y4e���=bunyad-amp/includes/embeds/class-amp-scribd-embed-handler.php<?php
/**
 * Class AMP_Scribd_Embed_Handler
 *
 * @package AMP
 * @since 1.4
 */

/**
 * Class AMP_Scribd_Embed_Handler
 *
 * @internal
 */
class AMP_Scribd_Embed_Handler extends AMP_Base_Embed_Handler {

	/**
	 * Registers embed.
	 */
	public function register_embed() {
		add_filter( 'embed_oembed_html', [ $this, 'filter_embed_oembed_html' ], 10, 2 );
	}

	/**
	 * Unregisters embed.
	 */
	public function unregister_embed() {
		remove_filter( 'embed_oembed_html', [ $this, 'filter_embed_oembed_html' ] );
	}

	/**
	 * Filter oEmbed HTML for Scribd to be AMP compatible.
	 *
	 * @param string $cache Cache for oEmbed.
	 * @param string $url   Embed URL.
	 * @return string Embed.
	 */
	public function filter_embed_oembed_html( $cache, $url ) {
		if ( ! in_array( wp_parse_url( $url, PHP_URL_HOST ), [ 'scribd.com', 'www.scribd.com' ], true ) ) {
			return $cache;
		}

		return $this->sanitize_iframe( $cache );
	}

	/**
	 * Retrieves iframe element from HTML string and amends or appends the correct sandbox permissions.
	 *
	 * @param string $html HTML string.
	 * @return string iframe with correct sandbox permissions.
	 */
	private function sanitize_iframe( $html ) {
		return preg_replace_callback(
			'#^.*<iframe(?P<iframe_attributes>[^>]+?)></iframe>.*$#s',
			function ( $matches ) {
				$attrs = $matches['iframe_attributes'];

				// Amend the required keywords to the iframe's sandbox.
				$sandbox  = 'allow-popups allow-scripts';
				$replaced = 0;
				$attrs    = preg_replace(
					'#(?<=\ssandbox=["\'])#',
					"{$sandbox} ", // whitespace is necessary to separate prior permissions.
					$attrs,
					1,
					$replaced
				);

				// If no sandbox attribute was found, then add the attribute.
				if ( 0 === $replaced ) {
					$attrs .= sprintf( ' sandbox="%s"', $sandbox );
				}

				// The iframe sanitizer will convert this into an amp-iframe.
				return "<iframe{$attrs}></iframe>";
			},
			$html
		);
	}
}
PK.3Y�zN��Abunyad-amp/includes/embeds/class-amp-soundcloud-embed-handler.php<?php
/**
 * Class AMP_SoundCloud_Embed_Handler
 *
 * @package AMP
 */

/**
 * Class AMP_SoundCloud_Embed_Handler
 *
 * @since 0.5
 * @internal
 */
class AMP_SoundCloud_Embed_Handler extends AMP_Base_Embed_Handler {

	/**
	 * Default height.
	 *
	 * @var int
	 */
	protected $DEFAULT_HEIGHT = 200;

	/**
	 * Register embed.
	 */
	public function register_embed() {
		add_filter( 'embed_oembed_html', [ $this, 'filter_embed_oembed_html' ], 10, 2 );
	}

	/**
	 * Unregister embed.
	 */
	public function unregister_embed() {
		remove_filter( 'embed_oembed_html', [ $this, 'filter_embed_oembed_html' ], 10 );
	}

	/**
	 * Render oEmbed.
	 *
	 * @see \WP_Embed::shortcode()
	 *
	 * @codeCoverageIgnore
	 * @deprecated Core's oEmbed handler is now used instead, with embed_oembed_html filter used to convert to AMP.
	 * @param array  $matches URL pattern matches.
	 * @param array  $attr    Shortcode attributes.
	 * @param string $url     URL.
	 * @return string Rendered oEmbed.
	 */
	public function oembed( $matches, $attr, $url ) {
		_deprecated_function( __METHOD__, '0.6' );
		return $this->render( $this->extract_params_from_iframe_src( $url ), $url );
	}

	/**
	 * Filter oEmbed HTML for SoundCloud to convert to AMP.
	 *
	 * @param string $cache Cache for oEmbed.
	 * @param string $url   Embed URL.
	 * @return string Embed.
	 */
	public function filter_embed_oembed_html( $cache, $url ) {
		if ( false === strpos( wp_parse_url( $url, PHP_URL_HOST ), 'soundcloud.com' ) ) {
			return $cache;
		}
		return $this->parse_amp_component_from_iframe( $cache, $url );
	}

	/**
	 * Parse AMP component from iframe.
	 *
	 * @param string      $html HTML.
	 * @param string|null $url  Embed URL, for fallback purposes.
	 * @return string AMP component or empty if unable to determine SoundCloud ID.
	 */
	private function parse_amp_component_from_iframe( $html, $url = null ) {
		$props = $this->match_element_attributes( $html, 'iframe', [ 'src', 'title', 'width', 'height' ] );
		if ( ! isset( $props ) || empty( $props['src'] ) ) {
			return $html;
		}

		$src   = html_entity_decode( $props['src'], ENT_QUOTES );
		$query = [];
		parse_str( wp_parse_url( $src, PHP_URL_QUERY ), $query );

		if ( empty( $query['url'] ) ) {
			return $html;
		}

		$props = array_merge(
			$props,
			$this->extract_params_from_iframe_src( $query['url'] )
		);
		if ( isset( $query['visual'] ) ) {
			$props['visual'] = $query['visual'];
		}

		if ( $url && ! empty( $props['title'] ) ) {
			$props['fallback'] = sprintf(
				'<a fallback href="%s">%s</a>',
				esc_url( $url ),
				esc_html( $props['title'] )
			);
		}

		return $this->render( $props, $url );
	}

	/**
	 * Render embed.
	 *
	 * @param array  $args Args.
	 * @param string $url  Embed URL for fallback purposes. Optional.
	 * @return string Rendered embed.
	 */
	public function render( $args, $url ) {
		$args = wp_parse_args(
			$args,
			[
				'track_id'    => false,
				'playlist_id' => false,
				'height'      => null,
				'width'       => null,
				'visual'      => null,
				'fallback'    => '',
			]
		);

		$this->did_convert_elements = true;

		$attributes = [];
		if ( ! empty( $args['track_id'] ) ) {
			$attributes['data-trackid'] = $args['track_id'];
		} elseif ( ! empty( $args['playlist_id'] ) ) {
			$attributes['data-playlistid'] = $args['playlist_id'];
		} elseif ( $url ) {
			return $this->render_embed_fallback( $url );
		} else {
			return '';
		}

		if ( isset( $args['visual'] ) ) {
			$attributes['data-visual'] = rest_sanitize_boolean( $args['visual'] ) ? 'true' : 'false';
		}

		$attributes['height'] = $args['height'] ?: $this->args['height'];
		if ( $args['width'] ) {
			$attributes['width']  = $args['width'];
			$attributes['layout'] = 'responsive';
		} else {
			$attributes['layout'] = 'fixed-height';
		}

		return AMP_HTML_Utils::build_tag(
			'amp-soundcloud',
			$attributes,
			$args['fallback']
		);
	}

	/**
	 * Render embed fallback.
	 *
	 * @param string $url URL.
	 * @return string Fallback link.
	 */
	private function render_embed_fallback( $url ) {
		return AMP_HTML_Utils::build_tag(
			'a',
			[
				'href'  => esc_url_raw( $url ),
				'class' => 'amp-wp-embed-fallback',
			],
			esc_html( $url )
		);
	}

	/**
	 * Get params from Soundcloud iframe src.
	 *
	 * @param string $url URL.
	 * @return array Params extracted from URL.
	 */
	private function extract_params_from_iframe_src( $url ) {
		$parsed_url = wp_parse_url( $url );
		if ( preg_match( '#tracks/(?P<track_id>\d+)#', $parsed_url['path'], $matches ) ) {
			return [
				'track_id' => $matches['track_id'],
			];
		}
		if ( preg_match( '#playlists/(?P<playlist_id>\d+)#', $parsed_url['path'], $matches ) ) {
			return [
				'playlist_id' => $matches['playlist_id'],
			];
		}
		return [];
	}
}
PK.3Y9��
''=bunyad-amp/includes/embeds/class-amp-tiktok-embed-handler.php<?php
/**
 * Class AMP_TikTok_Embed_Handler
 *
 * @package AMP
 */

use AmpProject\Dom\Document;
use AmpProject\Dom\Element;
use AmpProject\Extension;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag;
use AmpProject\Layout;

/**
 * Class AMP_TikTok_Embed_Handler
 *
 * @internal
 */
class AMP_TikTok_Embed_Handler extends AMP_Base_Embed_Handler {

	/**
	 * Registers embed.
	 */
	public function register_embed() {
		// Not implemented.
	}

	/**
	 * Unregisters embed.
	 */
	public function unregister_embed() {
		// Not implemented.
	}

	/**
	 * Sanitize TikTok embeds to be AMP compatible.
	 *
	 * @param Document $dom DOM.
	 */
	public function sanitize_raw_embeds( Document $dom ) {
		$nodes = $dom->xpath->query(
			sprintf( '//blockquote[ @cite and @data-video-id and contains( @class, "tiktok-embed" ) and not( parent::%s ) ]', Extension::TIKTOK )
		);

		foreach ( $nodes as $node ) {
			$this->make_embed_amp_compatible( $node );
		}
	}

	/**
	 * Make TikTok embed AMP compatible.
	 *
	 * @param Element $blockquote The <blockquote> node to make AMP compatible.
	 */
	protected function make_embed_amp_compatible( Element $blockquote ) {
		$dom       = $blockquote->ownerDocument;
		$video_url = $blockquote->getAttribute( Attribute::CITE );

		// If there is no video ID, stop here as its needed for the `data-src` parameter.
		if ( empty( $video_url ) ) {
			return;
		}

		$this->remove_embed_script( $blockquote );

		// Initial height of video (most of them anyway).
		$height = 575;

		// Add the height of the metadata card with the CTA, username, and audio source.
		$height += 118;

		// Estimate the lines of text in the paragraph description (150-character limit).
		$p = $blockquote->getElementsByTagName( Tag::P )->item( 0 );
		if ( $p instanceof Element ) {
			$height += 8; // Top margin.

			// Add height for the lines of text, where there are approx. 39 chars fit on
			// a line, and a line's height is 18px.
			$height += ceil( strlen( trim( $p->textContent ) ) / 39 ) * 18;
		}

		$amp_tiktok = AMP_DOM_Utils::create_node(
			Document::fromNode( $dom ),
			Extension::TIKTOK,
			[
				Attribute::LAYOUT   => Layout::FIXED_HEIGHT,
				Attribute::HEIGHT   => $height,
				Attribute::WIDTH    => 'auto',
				Attribute::DATA_SRC => $video_url,
			]
		);

		$blockquote->parentNode->replaceChild( $amp_tiktok, $blockquote );
		$amp_tiktok->appendChild( $blockquote );
		$blockquote->setAttributeNode( $dom->createAttribute( Attribute::PLACEHOLDER ) );
		$blockquote->removeAttribute( Attribute::STYLE );
	}

	/**
	 * Remove the TikTok embed script if it exists.
	 *
	 * @param Element $blockquote The blockquote element being made AMP-compatible.
	 */
	protected function remove_embed_script( Element $blockquote ) {
		$next_element_sibling = $blockquote->nextSibling;
		while ( $next_element_sibling && ! ( $next_element_sibling instanceof Element ) ) {
			$next_element_sibling = $next_element_sibling->nextSibling;
		}

		$script_src = 'tiktok.com/embed.js';

		// Handle case where script is wrapped in paragraph by wpautop.
		if ( $next_element_sibling instanceof Element && Tag::P === $next_element_sibling->nodeName ) {
			$script = $next_element_sibling->getElementsByTagName( Tag::SCRIPT )->item( 0 );
			if (
				$script instanceof Element
				&&
				false !== strpos( $script->getAttribute( Attribute::SRC ), $script_src )
			) {
				$next_element_sibling->parentNode->removeChild( $next_element_sibling );
				return;
			}
		}

		// Handle case where script is immediately following.
		$is_embed_script = (
			$next_element_sibling instanceof Element
			&&
			Tag::SCRIPT === strtolower( $next_element_sibling->nodeName )
			&&
			false !== strpos( $next_element_sibling->getAttribute( Attribute::SRC ), $script_src )
		);
		if ( $is_embed_script ) {
			$next_element_sibling->parentNode->removeChild( $next_element_sibling );
		}
	}
}
PK.3Y���;�
�
=bunyad-amp/includes/embeds/class-amp-tumblr-embed-handler.php<?php
/**
 * Class AMP_Tumblr_Embed_Handler
 *
 * @package AMP
 * @since 0.7
 */

use AmpProject\Dom\Document;
use AmpProject\Html\Attribute;

/**
 * Class AMP_Tumblr_Embed_Handler
 *
 * @internal
 */
class AMP_Tumblr_Embed_Handler extends AMP_Base_Embed_Handler {

	/**
	 * Default width.
	 *
	 * Tumblr embeds for web have a fixed width of 540px.
	 *
	 * @link https://tumblr.zendesk.com/hc/en-us/articles/226261028-Embed-pro-tips
	 * @var int
	 */
	protected $DEFAULT_WIDTH = 540;

	/**
	 * Register embed.
	 */
	public function register_embed() {
		// Not implemented.
	}

	/**
	 * Unregister embed.
	 */
	public function unregister_embed() {
		// Not implemented.
	}

	/**
	 * Sanitizes Tumblr raw embeds to make them AMP compatible.
	 *
	 * @param Document $dom DOM.
	 */
	public function sanitize_raw_embeds( Document $dom ) {
		$placeholders = $dom->xpath->query(
			'//div[ @class and @data-href and contains( concat( " ", normalize-space( @class ), " " ), " tumblr-post " ) and starts-with( @data-href, "https://embed.tumblr.com/embed/post/" ) ]/a[ @href ]'
		);

		if ( 0 === $placeholders->length ) {
			return;
		}

		foreach ( $placeholders as $placeholder ) {
			$div = $placeholder->parentNode;
			if ( ! $div instanceof DOMElement ) {
				continue; // @codeCoverageIgnore
			}

			$attributes = [
				'src'       => $div->getAttribute( 'data-href' ),
				'layout'    => 'responsive',
				'width'     => $this->args['width'],
				'height'    => $this->args['height'],
				'resizable' => '',
				'sandbox'   => 'allow-scripts allow-popups allow-same-origin',
			];

			$amp_element = AMP_DOM_Utils::create_node(
				$dom,
				'amp-iframe',
				$attributes
			);

			// Add an overflow element to allow the amp-iframe to be manually resized.
			$overflow_element              = AMP_DOM_Utils::create_node(
				$dom,
				'button',
				[
					'overflow' => '',
					'type'     => 'button',
				]
			);
			$overflow_element->textContent = __( 'See more', 'amp' );
			$amp_element->appendChild( $overflow_element );

			/** @var DOMElement $placeholder */
			$placeholder->setAttribute( Attribute::PLACEHOLDER, '' );
			$amp_element->appendChild( $placeholder );

			$this->maybe_remove_script_sibling(
				$div,
				static function ( DOMElement $script ) {
					if ( ! $script->hasAttribute( Attribute::SRC ) ) {
						return false;
					}

					$parsed_url = wp_parse_url( $script->getAttribute( Attribute::SRC ) );

					return (
						isset( $parsed_url['host'], $parsed_url['path'] )
						&&
						'assets.tumblr.com' === $parsed_url['host']
						&&
						'/post.js' === $parsed_url['path']
					);
				}
			);

			$div->parentNode->replaceChild( $amp_element, $div );
		}
	}
}
PK.3Y�Et((>bunyad-amp/includes/embeds/class-amp-twitter-embed-handler.php<?php
/**
 * Class AMP_Twitter_Embed_Handler
 *
 * @package AMP
 */

use AmpProject\Dom\Document;

/**
 * Class AMP_Twitter_Embed_Handler
 *
 * Much of this class is borrowed from Jetpack embeds
 *
 * @internal
 */
class AMP_Twitter_Embed_Handler extends AMP_Base_Embed_Handler {

	/**
	 * Default width.
	 *
	 * @var int|string
	 */
	protected $DEFAULT_WIDTH = 'auto';

	/**
	 * Default height.
	 *
	 * This is the minimum height for a tweet, with just a single line of text.
	 *
	 * @var int
	 */
	protected $DEFAULT_HEIGHT = 197;

	/**
	 * URL pattern for a Tweet URL.
	 *
	 * @since 0.2
	 * @var string
	 */
	const URL_PATTERN = '#https?:\/\/twitter\.com(?:\/\#\!\/|\/)(?P<username>[a-zA-Z0-9_]{1,20})\/status(?:es)?\/(?P<tweet>\d+)#i';

	/**
	 * URL pattern for a Twitter timeline.
	 *
	 * @since 1.0
	 * @var string
	 */
	const URL_PATTERN_TIMELINE = '#https?:\/\/twitter\.com(?:\/\#\!\/|\/)(?P<username>[a-zA-Z0-9_]{1,20})(?:$|\/(?P<type>likes|lists)(\/(?P<id>[a-zA-Z0-9_-]+))?)#i';

	/**
	 * Tag.
	 *
	 * @var string embed HTML blockquote tag to identify and replace with AMP version.
	 */
	protected $sanitize_tag = 'blockquote';

	/**
	 * Tag.
	 *
	 * @var string AMP amp-facebook tag
	 */
	private $amp_tag = 'amp-twitter';

	/**
	 * Registers embed.
	 */
	public function register_embed() {
		wp_embed_register_handler( 'amp-twitter-timeline', self::URL_PATTERN_TIMELINE, [ $this, 'oembed_timeline' ], -1 );
	}

	/**
	 * Unregisters embed.
	 */
	public function unregister_embed() {
		wp_embed_unregister_handler( 'amp-twitter-timeline', -1 );
	}

	/**
	 * Render oEmbed for a timeline.
	 *
	 * @since 1.0
	 *
	 * @param array $matches URL pattern matches.
	 * @return string Rendered oEmbed.
	 */
	public function oembed_timeline( $matches ) {
		if ( ! isset( $matches['username'] ) ) {
			return '';
		}

		$attributes = [
			'data-timeline-source-type' => 'profile',
			'data-timeline-screen-name' => $matches['username'],
		];

		if ( isset( $matches['type'] ) ) {
			switch ( $matches['type'] ) {
				case 'likes':
					$attributes['data-timeline-source-type'] = 'likes';
					break;
				case 'lists':
					if ( ! isset( $matches['id'] ) ) {
						return '';
					}
					$attributes['data-timeline-source-type']       = 'list';
					$attributes['data-timeline-slug']              = $matches['id'];
					$attributes['data-timeline-owner-screen-name'] = $attributes['data-timeline-screen-name'];
					unset( $attributes['data-timeline-screen-name'] );
					break;
				default:
					return '';
			}
		}

		if ( ! empty( $this->args['width'] ) ) {
			$attributes['width'] = $this->args['width'];
		}
		$attributes['height'] = $this->args['height'];
		if ( empty( $attributes['width'] ) || 'auto' === $attributes['width'] ) {
			$attributes['layout'] = 'fixed-height';
		} else {
			$attributes['layout'] = 'responsive';
		}

		$this->did_convert_elements = true;

		return AMP_HTML_Utils::build_tag( $this->amp_tag, $attributes, $this->create_overflow_button_markup() );
	}

	/**
	 * Sanitized <blockquote class="twitter-tweet"> tags to <amp-twitter>.
	 *
	 * @param Document $dom DOM.
	 */
	public function sanitize_raw_embeds( Document $dom ) {
		$nodes     = $dom->getElementsByTagName( $this->sanitize_tag );
		$num_nodes = $nodes->length;

		if ( 0 === $num_nodes ) {
			return;
		}

		for ( $i = $num_nodes - 1; $i >= 0; $i-- ) {
			$node = $nodes->item( $i );
			if ( ! $node instanceof DOMElement ) {
				continue;
			}

			if ( $this->is_tweet_raw_embed( $node ) ) {
				$this->create_amp_twitter_and_replace_node( $dom, $node );
			}
		}
	}

	/**
	 * Checks whether it's a twitter blockquote or not.
	 *
	 * @param DOMElement $node The DOMNode to adjust and replace.
	 * @return bool Whether node is for raw embed.
	 */
	private function is_tweet_raw_embed( $node ) {
		// Skip processing blockquotes that have already been passed through while being wrapped with <amp-twitter>.
		if ( $node->parentNode && 'amp-twitter' === $node->parentNode->nodeName ) {
			return false;
		}

		$class_attr = $node->getAttribute( 'class' );

		return null !== $class_attr && false !== strpos( $class_attr, 'twitter-tweet' );
	}

	/**
	 * Make final modifications to DOMNode
	 *
	 * @param Document   $dom The HTML Document.
	 * @param DOMElement $node The DOMNode to adjust and replace.
	 */
	private function create_amp_twitter_and_replace_node( Document $dom, DOMElement $node ) {
		$tweet_id = $this->get_tweet_id( $node );
		if ( empty( $tweet_id ) ) {
			return;
		}

		$attributes = [];
		if ( ! empty( $this->args['width'] ) ) {
			$attributes['width'] = $this->args['width'];
		}
		$attributes['height'] = $this->args['height'];
		if ( empty( $attributes['width'] ) || 'auto' === $attributes['width'] ) {
			$attributes['layout'] = 'fixed-height';
		} else {
			$attributes['layout'] = 'responsive';
		}
		$attributes['data-tweetid'] = $tweet_id;

		if ( $node->hasAttributes() ) {
			foreach ( $node->attributes as $attr ) {
				$attributes[ $attr->nodeName ] = $attr->nodeValue;
			}
		}

		$new_node = AMP_DOM_Utils::create_node(
			$dom,
			$this->amp_tag,
			$attributes
		);

		$new_node->appendChild( $this->create_overflow_button_element( $dom ) );

		/**
		 * Placeholder element to append to the new node.
		 *
		 * @var DOMElement $placeholder
		 */
		$placeholder = $node->cloneNode( true );
		$placeholder->setAttribute( 'placeholder', '' );

		$new_node->appendChild( $placeholder );

		$this->sanitize_embed_script( $node );

		$node->parentNode->replaceChild( $new_node, $node );

		$this->did_convert_elements = true;
	}

	/**
	 * Extracts Tweet id.
	 *
	 * @param DOMElement $node The DOMNode to adjust and replace.
	 * @return string Tweet ID, or an empty string if not found.
	 */
	private function get_tweet_id( $node ) {
		/**
		 * DOMNode
		 *
		 * @var DOMNodeList $anchors
		 */
		$anchors = $node->getElementsByTagName( 'a' );

		/**
		 * Anchor.
		 *
		 * @var DOMElement $anchor
		 */
		foreach ( $anchors as $anchor ) {
			$found = preg_match( self::URL_PATTERN, $anchor->getAttribute( 'href' ), $matches );
			if ( $found ) {
				return $matches['tweet'];
			}
		}

		return '';
	}

	/**
	 * Removes Twitter's embed <script> tag.
	 *
	 * @param DOMElement $node The DOMNode to whose sibling is the Twitter script.
	 */
	private function sanitize_embed_script( $node ) {
		$next_element_sibling = $node->nextSibling;
		while ( $next_element_sibling && ! ( $next_element_sibling instanceof DOMElement ) ) {
			$next_element_sibling = $next_element_sibling->nextSibling;
		}

		$script_src = 'platform.twitter.com/widgets.js';

		// Handle case where script is wrapped in paragraph by wpautop.
		if ( $next_element_sibling instanceof DOMElement && 'p' === $next_element_sibling->nodeName ) {
			$children = $next_element_sibling->getElementsByTagName( '*' );
			if ( 1 === $children->length && 'script' === $children->item( 0 )->nodeName && false !== strpos( $children->item( 0 )->getAttribute( 'src' ), $script_src ) ) {
				$next_element_sibling->parentNode->removeChild( $next_element_sibling );
				return;
			}
		}

		// Handle case where script is immediately following.
		$is_embed_script = (
			$next_element_sibling instanceof DOMElement
			&&
			'script' === strtolower( $next_element_sibling->nodeName )
			&&
			false !== strpos( $next_element_sibling->getAttribute( 'src' ), $script_src )
		);
		if ( $is_embed_script ) {
			$next_element_sibling->parentNode->removeChild( $next_element_sibling );
		}
	}
}
PK.3Y��u��<bunyad-amp/includes/embeds/class-amp-vimeo-embed-handler.php<?php
/**
 * Class AMP_Vimeo_Embed_Handler
 *
 * @package AMP
 */

/**
 * Class AMP_Vimeo_Embed_Handler
 *
 * Much of this class is borrowed from Jetpack embeds
 *
 * @internal
 */
class AMP_Vimeo_Embed_Handler extends AMP_Base_Embed_Handler {

	/**
	 * The embed URL pattern.
	 *
	 * @var string
	 */
	const URL_PATTERN = '#https?:\/\/(.+\.)?vimeo\.com\/.*#i';

	/**
	 * The aspect ratio.
	 *
	 * @var float
	 */
	const RATIO = 0.5625;

	/**
	 * Default width.
	 *
	 * @var int
	 */
	protected $DEFAULT_WIDTH = 600;

	/**
	 * Default height.
	 *
	 * @var int
	 */
	protected $DEFAULT_HEIGHT = 338;

	/**
	 * AMP_Vimeo_Embed_Handler constructor.
	 *
	 * @param array $args Height, width and maximum width for embed.
	 */
	public function __construct( $args = [] ) {
		parent::__construct( $args );

		if ( isset( $this->args['content_max_width'] ) ) {
			$max_width            = $this->args['content_max_width'];
			$this->args['width']  = $max_width;
			$this->args['height'] = round( $max_width * self::RATIO );
		}
	}

	/**
	 * Register embed.
	 */
	public function register_embed() {
		wp_embed_register_handler( 'amp-vimeo', self::URL_PATTERN, [ $this, 'oembed' ], -1 );
		add_filter( 'wp_video_shortcode_override', [ $this, 'video_override' ], 10, 2 );
	}

	/**
	 * Unregister embed.
	 */
	public function unregister_embed() {
		wp_embed_unregister_handler( 'amp-vimeo', -1 );
	}

	/**
	 * Render oEmbed.
	 *
	 * @see \WP_Embed::shortcode()
	 *
	 * @param array  $matches URL pattern matches.
	 * @param array  $attr    Shortcode attribues.
	 * @param string $url     URL.
	 * @return string Rendered oEmbed.
	 */
	public function oembed( $matches, $attr, $url ) {
		$video_id = $this->get_video_id_from_url( $url );

		return $this->render(
			[
				'url'      => $url,
				'video_id' => $video_id,
			]
		);
	}

	/**
	 * Render.
	 *
	 * @param array $args Args.
	 * @return string Rendered.
	 */
	public function render( $args ) {
		$args = wp_parse_args(
			$args,
			[
				'video_id' => false,
			]
		);

		if ( empty( $args['video_id'] ) ) {
			return AMP_HTML_Utils::build_tag(
				'a',
				[
					'href'  => esc_url_raw( $args['url'] ),
					'class' => 'amp-wp-embed-fallback',
				],
				esc_html( $args['url'] )
			);
		}

		$this->did_convert_elements = true;

		return AMP_HTML_Utils::build_tag(
			'amp-vimeo',
			[
				'data-videoid' => $args['video_id'],
				'layout'       => 'responsive',
				'width'        => $this->args['width'],
				'height'       => $this->args['height'],
			]
		);
	}

	/**
	 * Determine the video ID from the URL.
	 *
	 * @param string $url URL.
	 * @return int Video ID.
	 */
	private function get_video_id_from_url( $url ) {
		$path = wp_parse_url( $url, PHP_URL_PATH );

		// @todo This will not get the private key for unlisted videos (which look like https://vimeo.com/123456789/abcdef0123), but amp-vimeo doesn't support them currently anyway.
		$video_id = '';
		if ( $path && preg_match( ':/(\d+):', $path, $matches ) ) {
			$video_id = $matches[1];
		}

		return (int) $video_id;
	}

	/**
	 * Override the output of Vimeo videos.
	 *
	 * This overrides the value in wp_video_shortcode().
	 * The pattern matching is copied from WP_Widget_Media_Video::render().
	 *
	 * @param string $html Empty variable to be replaced with shortcode markup.
	 * @param array  $attr The shortcode attributes.
	 * @return string|null $markup The markup to output.
	 */
	public function video_override( $html, $attr ) {
		if ( ! isset( $attr['src'] ) ) {
			return $html;
		}
		$src           = $attr['src'];
		$vimeo_pattern = '#^https?://(.+\.)?vimeo\.com/.*#';
		if ( 1 !== preg_match( $vimeo_pattern, $src ) ) {
			return $html;
		}

		$video_id = $this->get_video_id_from_url( $src );
		if ( empty( $video_id ) ) {
			return '';
		}

		return $this->render( compact( 'video_id' ) );
	}
}
PK.3Y A���@bunyad-amp/includes/embeds/class-amp-wordpress-embed-handler.php<?php
/**
 * Class AMP_WordPress_Embed_Handler
 *
 * @package AMP
 */

use AmpProject\Extension;
use AmpProject\Dom\Document;
use AmpProject\Dom\Element;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag;
use AmpProject\Layout;

/**
 * Class AMP_WordPress_Embed_Handler
 *
 * @since 2.2.2
 */
class AMP_WordPress_Embed_Handler extends AMP_Base_Embed_Handler {

	/**
	 * Default height.
	 *
	 * Note that 200px is the minimum that WordPress allows for a post embed. This minimum height is enforced by
	 * WordPress in the wp.receiveEmbedMessage() function, and the <amp-wordpress-embed> also enforces that same
	 * minimum height. It is important for the minimum height to be initially used because if the actual post embed
	 * window is _less_ than the initial, then no overflow button will be presented to resize the iframe to be
	 * _smaller_. So this ensures that the iframe will only ever overflow to grow in height.
	 *
	 * @var int
	 */
	protected $DEFAULT_HEIGHT = 200;

	/**
	 * Tag.
	 *
	 * @var string AMP amp-wordpress-embed tag
	 */
	private $amp_tag = Extension::WORDPRESS_EMBED;

	/**
	 * Register embed.
	 */
	public function register_embed() {
		remove_action( 'wp_head', 'wp_oembed_add_host_js' );
	}

	/**
	 * Unregister embed.
	 */
	public function unregister_embed() {
		add_action( 'wp_head', 'wp_oembed_add_host_js' );
	}

	/**
	 * Sanitize WordPress embed raw embeds.
	 *
	 * @param Document $dom Document.
	 *
	 * @return void
	 */
	public function sanitize_raw_embeds( Document $dom ) {

		$embed_iframes = $dom->xpath->query( '//iframe[ @src and contains( concat( " ", normalize-space( @class ), " " ), " wp-embedded-content " ) ]', $dom->body );
		foreach ( $embed_iframes as $embed_iframe ) {
			/** @var Element $embed_iframe */

			// Remove embed script included when user copies HTML Embed code, per get_post_embed_html().
			$embed_script = $dom->xpath->query( './following-sibling::script[ contains( text(), "wp.receiveEmbedMessage" ) ]', $embed_iframe )->item( 0 );
			if ( $embed_script instanceof Element ) {
				$embed_script->parentNode->removeChild( $embed_script );
			}

			// If the post embed iframe got wrapped in a paragraph by `wpautop()`, unwrap it. This happens not with
			// the Embed block but it does with the [embed] shortcode.
			$is_wrapped_in_paragraph = (
				$embed_iframe->parentNode instanceof Element
				&&
				Tag::P === $embed_iframe->parentNode->tagName
			);

			// If the iframe is wrapped in a paragraph, but it's not the only node, then abort.
			if ( $is_wrapped_in_paragraph && 1 !== $embed_iframe->parentNode->childNodes->length ) {
				continue;
			}

			$embed_blockquote = $dom->xpath->query(
				'./preceding-sibling::blockquote[ contains( concat( " ", normalize-space( @class ), " " ), " wp-embedded-content " ) ]',
				$is_wrapped_in_paragraph ? $embed_iframe->parentNode : $embed_iframe
			)->item( 0 );
			if ( $embed_blockquote instanceof Element ) {

				// Note that unwrap_p_element() is not being used here because it will do nothing if the paragraph
				// happens to have an attribute on it, which is possible with the_content filters.
				if ( $is_wrapped_in_paragraph && $embed_iframe->parentNode->parentNode instanceof Element ) {
					$embed_iframe->parentNode->parentNode->replaceChild( $embed_iframe, $embed_iframe->parentNode );
				}

				$this->create_amp_wordpress_embed_and_replace_node( $dom, $embed_blockquote, $embed_iframe );
			}
		}
	}

	/**
	 * Make final modifications to DOMNode
	 *
	 * @param Document $dom        The HTML Document.
	 * @param Element  $blockquote The blockquote to be moved inside <amp-wordpress-embed>.
	 * @param Element  $iframe     The iframe to be replaced with <amp-wordpress-embed>.
	 */
	private function create_amp_wordpress_embed_and_replace_node( Document $dom, Element $blockquote, Element $iframe ) {

		$attributes = [
			Attribute::HEIGHT => $this->args['height'],
			Attribute::LAYOUT => Layout::FIXED_HEIGHT,
		];
		if ( $iframe->hasAttribute( Attribute::TITLE ) ) {
			$attributes[ Attribute::TITLE ] = $iframe->getAttribute( Attribute::TITLE );
		}

		$src = $iframe->getAttribute( Attribute::SRC );

		// Remove the secret which will be handled by amp-wordpress-embed.
		$src = preg_replace( '/#\?secret=.+/', '', $src );
		$blockquote->removeAttribute( 'data-secret' );

		$attributes[ Attribute::DATA_URL ] = $src;

		$amp_wordpress_embed_node = AMP_DOM_Utils::create_node(
			$dom,
			$this->amp_tag,
			$attributes
		);

		$blockquote->setAttributeNode( $dom->createAttribute( Attribute::PLACEHOLDER ) );
		$amp_wordpress_embed_node->appendChild( $blockquote );
		$amp_wordpress_embed_node->appendChild( $this->create_overflow_button_element( $dom ) );

		$iframe->parentNode->replaceChild( $amp_wordpress_embed_node, $iframe );

		$this->did_convert_elements = true;
	}
}
PK.3Y�r��Cbunyad-amp/includes/embeds/class-amp-wordpress-tv-embed-handler.php<?php
/**
 * Class AMP_WordPress_TV_Embed_Handler
 *
 * @package AMP
 * @since 1.4
 */

/**
 * Class AMP_WordPress_TV_Embed_Handler
 *
 * @since 1.4
 * @internal
 */
class AMP_WordPress_TV_Embed_Handler extends AMP_Base_Embed_Handler {

	/**
	 * The URL pattern to determine if an embed URL is for this type, copied from WP_oEmbed.
	 *
	 * @see https://github.com/WordPress/wordpress-develop/blob/e13480/src/wp-includes/class-wp-oembed.php#L64
	 */
	const URL_PATTERN = '#https?://wordpress\.tv/.*#i';

	/**
	 * Register embed.
	 */
	public function register_embed() {
		add_filter( 'embed_oembed_html', [ $this, 'filter_oembed_html' ], 10, 2 );
	}

	/**
	 * Unregister embed.
	 */
	public function unregister_embed() {
		remove_filter( 'embed_oembed_html', [ $this, 'filter_oembed_html' ], 10 );
	}

	/**
	 * Filters the oembed HTML to make it valid AMP.
	 *
	 * @param mixed  $cache The cached rendered markup.
	 * @param string $url   The embed URL.
	 * @return string The filtered embed markup.
	 */
	public function filter_oembed_html( $cache, $url ) {
		if ( ! preg_match( self::URL_PATTERN, $url ) ) {
			return $cache;
		}

		$modified_block_content = preg_replace( '#<script(?:\s.*?)?>.*?</script>#s', '', $cache );
		return null !== $modified_block_content ? $modified_block_content : $cache;
	}
}
PK.3Y�o0=6=6>bunyad-amp/includes/embeds/class-amp-youtube-embed-handler.php<?php
/**
 * Class AMP_YouTube_Embed_Handler
 *
 * @package AMP
 */

use AmpProject\CssLength;
use AmpProject\Dom\Document;
use AmpProject\Dom\Element;
use AmpProject\Extension;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag;
use AmpProject\Layout;

/**
 * Class AMP_YouTube_Embed_Handler
 *
 * Much of this class is borrowed from Jetpack embeds.
 *
 * @internal
 */
class AMP_YouTube_Embed_Handler extends AMP_Base_Embed_Handler {

	/**
	 * URL pattern to match YouTube videos.
	 *
	 * Only handling single videos. Playlists are handled elsewhere.
	 *
	 * @deprecated No longer used.
	 * @internal
	 * @var string
	 */
	const URL_PATTERN = '#https?://(?:www\.)?(?:youtube.com/(?:v/|e/|embed/|watch[/\#?])|youtu\.be/).*#i';

	/**
	 * Ratio for calculating the default height from the content width.
	 *
	 * @var float
	 */
	const RATIO = 0.5625;

	/**
	 * Default width.
	 *
	 * @var int
	 */
	protected $DEFAULT_WIDTH = 600;

	/**
	 * Default height.
	 *
	 * @var int
	 */
	protected $DEFAULT_HEIGHT = 338;

	/**
	 * List of domains that are applicable for this embed.
	 *
	 * @var string[]
	 */
	const APPLICABLE_DOMAINS = [ 'youtu.be', 'youtube.com', 'youtube-nocookie.com' ];

	/**
	 * Attributes from iframe which are copied to amp-youtube.
	 *
	 * @var string[]
	 */
	const IFRAME_ATTRIBUTES = [
		Attribute::TITLE,
		Attribute::HEIGHT,
		Attribute::WIDTH,
	];

	/**
	 * AMP_YouTube_Embed_Handler constructor.
	 *
	 * @param array $args Height, width and maximum width for embed.
	 */
	public function __construct( $args = [] ) {
		parent::__construct( $args );

		if ( isset( $this->args['content_max_width'] ) ) {
			// Set default width/height; these will be overridden by whatever YouTube specifies.
			$max_width            = $this->args['content_max_width'];
			$this->args['width']  = $max_width;
			$this->args['height'] = round( $max_width * self::RATIO );
		}
	}

	/**
	 * Register embed.
	 */
	public function register_embed() {
		add_filter( 'embed_oembed_html', [ $this, 'filter_embed_oembed_html' ], 10, 2 );
		add_filter( 'wp_video_shortcode_override', [ $this, 'video_override' ], PHP_INT_MAX, 2 );
	}

	/**
	 * Unregister embed.
	 */
	public function unregister_embed() {
		remove_filter( 'embed_oembed_html', [ $this, 'filter_embed_oembed_html' ], 10 );
		remove_filter( 'wp_video_shortcode_override', [ $this, 'video_override' ], PHP_INT_MAX );
	}

	/**
	 * Filter oEmbed HTML for YouTube to convert to AMP.
	 *
	 * @param string $cache Cache for oEmbed.
	 * @param string $url   Embed URL.
	 *
	 * @return string Embed.
	 */
	public function filter_embed_oembed_html( $cache, $url ) {

		if ( empty( $cache ) || empty( $url ) ) {
			return $cache;
		}

		$video_id = $this->get_video_id_from_url( $url );

		if ( ! $video_id ) {
			return $cache;
		}

		return $this->render( $cache, $url, $video_id );
	}

	/**
	 * Convert YouTube iframe into AMP YouTube component.
	 *
	 * @param string $html     HTML markup of YouTube iframe.
	 * @param string $url      YouTube URL.
	 * @param string $video_id YouTube video ID.
	 *
	 * @return string HTML markup of AMP YouTube component.
	 */
	public function render( $html, $url, $video_id ) {

		$attributes = $this->prepare_attributes( $url, $video_id );

		$props = $this->match_element_attributes( $html, Tag::IFRAME, self::IFRAME_ATTRIBUTES );
		foreach ( self::IFRAME_ATTRIBUTES as $iframe_prop ) {
			if ( ! empty( $props[ $iframe_prop ] ) ) {
				$attributes[ $iframe_prop ] = $props[ $iframe_prop ];
			}
		}
		$attributes = $this->amend_fixed_height_layout( $attributes );

		$placeholder = $this->get_placeholder_markup( $url, $video_id, $attributes );

		return AMP_HTML_Utils::build_tag( Extension::YOUTUBE, $attributes, $placeholder );
	}

	/**
	 * Sanitize YouTube raw embeds.
	 *
	 * @param Document $dom Document.
	 *
	 * @return void
	 */
	public function sanitize_raw_embeds( Document $dom ) {

		$query_segments = array_map(
			static function ( $domain ) {
				return sprintf(
					'starts-with( @src, "https://www.%1$s/" ) or starts-with( @src, "https://%1$s/" ) or starts-with( @src, "http://www.%1$s/" ) or starts-with( @src, "http://%1$s/" )',
					$domain
				);
			},
			self::APPLICABLE_DOMAINS
		);

		$query = implode( ' or ', $query_segments );

		$nodes = $dom->xpath->query( sprintf( '//iframe[ %s ]', $query ) );

		/** @var Element $node */
		foreach ( $nodes as $node ) {

			$amp_youtube_component = $this->get_amp_component( $dom, $node );

			if ( ! empty( $amp_youtube_component ) ) {
				$node->parentNode->replaceChild( $amp_youtube_component, $node );
			}
		}
	}

	/**
	 * Parse YouTube iframe element and return an AMP YouTube component.
	 *
	 * @param Document $dom  Document DOM.
	 * @param Element  $node YouTube iframe element.
	 *
	 * @return Element|false AMP component, otherwise `false`.
	 */
	private function get_amp_component( Document $dom, Element $node ) {

		$url        = $node->getAttribute( Attribute::SRC );
		$video_id   = $this->get_video_id_from_url( $url );
		$attributes = $this->prepare_attributes( $url, $video_id );

		foreach ( self::IFRAME_ATTRIBUTES as $iframe_prop ) {
			if ( ! empty( $node->getAttribute( $iframe_prop ) ) ) {
				$attributes[ $iframe_prop ] = $node->getAttribute( $iframe_prop );
			}
		}

		if ( empty( $attributes[ Attribute::DATA_VIDEOID ] ) && empty( $attributes[ Attribute::DATA_LIVE_CHANNELID ] ) ) {
			return false;
		}

		$attributes = $this->amend_fixed_height_layout( $attributes );

		$amp_node = AMP_DOM_Utils::create_node(
			$dom,
			Extension::YOUTUBE,
			$attributes
		);

		if ( $video_id && $amp_node instanceof Element ) {
			$amp_node->appendChild(
				$this->get_placeholder_element( $amp_node, $video_id, $attributes )
			);
		}

		return $amp_node;
	}

	/**
	 * Amend attributes with fixed-height layout if there is a 100% width present.
	 *
	 * @param array $attributes Attributes.
	 * @return array Amended attributes.
	 */
	private function amend_fixed_height_layout( $attributes ) {
		if (
			isset( $attributes[ Attribute::WIDTH ] )
			&&
			( '100%' === $attributes[ Attribute::WIDTH ] || CssLength::AUTO === $attributes[ Attribute::WIDTH ] )
		) {
			$attributes[ Attribute::LAYOUT ] = Layout::FIXED_HEIGHT;
			$attributes[ Attribute::WIDTH ]  = CssLength::AUTO;
		}
		return $attributes;
	}

	/**
	 * Prepare attributes for amp-youtube component.
	 *
	 * @param string $url      YouTube video URL.
	 * @param string $video_id YouTube video ID.
	 *
	 * @return array prepared arguments for amp-youtube component.
	 */
	private function prepare_attributes( $url, $video_id = '' ) {

		$attributes = [
			Attribute::LAYOUT => Layout::RESPONSIVE,
			Attribute::WIDTH  => $this->args['width'],
			Attribute::HEIGHT => $this->args['height'],
		];

		if ( ! empty( $video_id ) ) {
			$attributes[ Attribute::DATA_VIDEOID ] = $video_id;
		}

		// Find start time of video.
		$start_time = $this->get_start_time_from_url( $url );
		if ( ! empty( $start_time ) && 0 < (int) $start_time ) {
			$attributes['data-param-start'] = (int) $start_time;
		}

		$query_vars  = [];
		$query_param = wp_parse_url( $url, PHP_URL_QUERY );
		wp_parse_str( $query_param, $query_vars );
		$query_vars = ( is_array( $query_vars ) ) ? $query_vars : [];

		$excluded_param = [ 'start', 'v', 'vi', 'w', 'h' ];

		foreach ( $query_vars as $key => $value ) {

			if ( in_array( $key, $excluded_param, true ) ) {
				continue;
			}

			if ( in_array( $key, [ Attribute::AUTOPLAY, Attribute::LOOP ], true ) ) {
				$attributes[ $key ] = $value;
				continue;
			}

			if ( 'channel' === $key ) {
				$attributes[ Attribute::DATA_LIVE_CHANNELID ] = $value;
				continue;
			}

			$attributes[ sanitize_key( "data-param-$key" ) ] = $value;
		}

		return $attributes;
	}

	/**
	 * Placeholder element for AMP YouTube component in the DOM.
	 *
	 * @param Element $amp_component AMP component element.
	 * @param string  $video_id      Video ID.
	 * @param array   $attributes    YouTube attributes.
	 *
	 * @return Element Placeholder.
	 */
	private function get_placeholder_element( Element $amp_component, $video_id, $attributes ) {
		$dom = Document::fromNode( $amp_component );

		$img_attributes = [
			Attribute::SRC        => esc_url_raw( sprintf( 'https://i.ytimg.com/vi/%s/hqdefault.jpg', $video_id ) ),
			Attribute::LAYOUT     => Layout::FILL,
			Attribute::OBJECT_FIT => 'cover',
		];

		if ( ! empty( $attributes[ Attribute::TITLE ] ) ) {
			$img_attributes[ Attribute::ALT ] = $attributes[ Attribute::TITLE ];
		}

		$img_node = AMP_DOM_Utils::create_node(
			$dom,
			Tag::IMG,
			$img_attributes
		);

		$video_url = esc_url_raw( sprintf( 'https://www.youtube.com/watch?v=%s', $video_id ) );
		if ( array_key_exists( 'data-param-start', $attributes ) ) {
			$video_url .= '#t=' . $attributes['data-param-start'];
		}

		$placeholder = AMP_DOM_Utils::create_node(
			$dom,
			Tag::A,
			[
				Attribute::PLACEHOLDER => '',
				Attribute::HREF        => $video_url,
			]
		);

		$placeholder->appendChild( $img_node );

		return $placeholder;
	}

	/**
	 * To get placeholder for AMP component as constructed HTML string.
	 *
	 * @param string $url        YouTube URL.
	 * @param string $video_id   Video ID.
	 * @param array  $attributes YouTube attributes.
	 *
	 * @return string HTML string.
	 */
	private function get_placeholder_markup( $url, $video_id, $attributes ) {

		$img_attributes = [
			Attribute::SRC        => esc_url_raw( sprintf( 'https://i.ytimg.com/vi/%s/hqdefault.jpg', $video_id ) ),
			Attribute::LAYOUT     => Layout::FILL,
			Attribute::OBJECT_FIT => 'cover',
		];

		if ( ! empty( $attributes[ Attribute::TITLE ] ) ) {
			$img_attributes[ Attribute::ALT ] = $attributes[ Attribute::TITLE ];
		}

		$img = '<img ' . AMP_HTML_Utils::build_attributes_string( $img_attributes ) . '>';

		return AMP_HTML_Utils::build_tag(
			Tag::A,
			[
				Attribute::PLACEHOLDER => '',
				Attribute::HREF        => esc_url_raw( $url ),
			],
			$img
		);
	}

	/**
	 * Determine the video ID from the URL.
	 *
	 * @param string $url URL.
	 *
	 * @return string|false Video ID, or false if none could be retrieved.
	 */
	private function get_video_id_from_url( $url ) {

		$parsed_url = wp_parse_url( $url );

		if ( ! isset( $parsed_url['host'] ) ) {
			return false;
		}

		$domain = implode( '.', array_slice( explode( '.', $parsed_url['host'] ), - 2 ) );
		if ( ! in_array( $domain, self::APPLICABLE_DOMAINS, true ) ) {
			return false;
		}

		if ( ! isset( $parsed_url['path'] ) ) {
			return false;
		}

		$segments = explode( '/', trim( $parsed_url['path'], '/' ) );

		$query_vars = [];
		if ( isset( $parsed_url['query'] ) ) {
			wp_parse_str( $parsed_url['query'], $query_vars );

			// Handle video ID in v query param, e.g. <https://www.youtube.com/watch?v=XOY3ZUO6P0k>.
			// Support is also included for other query params which don't appear to be supported by YouTube anymore.
			if ( isset( $query_vars['v'] ) ) {
				return $query_vars['v'];
			} elseif ( isset( $query_vars['vi'] ) ) {
				return $query_vars['vi'];
			}
		}

		if ( empty( $segments[0] ) ) {
			return false;
		}

		// For shortened URLs like <http://youtu.be/XOY3ZUO6P0k>, the slug is the first path segment.
		if ( 'youtu.be' === $parsed_url['host'] ) {
			return $segments[0];
		}

		// For non-shortened URLs, the video ID is in the second path segment. For example:
		// * https://www.youtube.com/watch/XOY3ZUO6P0k
		// * https://www.youtube.com/embed/XOY3ZUO6P0k
		// Other top-level segments indicate non-video URLs. There are examples of URLs having segments including
		// 'v', 'vi', and 'e' but these do not work anymore. In any case, they are added here for completeness.
		if ( ! empty( $segments[1] ) && in_array( $segments[0], [ 'embed', 'watch', 'v', 'vi', 'e' ], true ) ) {

			/**
			 * Ignore live streaming channel URLs. For example:
			 * * https://www.youtube.com/embed/live_stream?channel=UCkaNo2FUEWips2z4BkOHl6Q
			 */
			if ( 'embed' === $segments[0] && 'live_stream' === $segments[1] && isset( $query_vars['channel'] ) ) {
				return false;
			}

			return $segments[1];
		}

		return false;
	}

	/**
	 * Get the start time of the YouTube video in seconds.
	 *
	 * @param string $url YouTube URL.
	 *
	 * @return int Start time in seconds.
	 */
	private function get_start_time_from_url( $url ) {

		$start_time = 0;
		$parsed_url = wp_parse_url( $url );

		if ( ! empty( $parsed_url['query'] ) ) {
			$query_vars = [];
			wp_parse_str( $parsed_url['query'], $query_vars );

			if ( ! empty( $query_vars['start'] ) && 0 < (int) $query_vars['start'] ) {
				return (int) $query_vars['start'];
			}
		}

		if ( ! empty( $parsed_url['fragment'] ) ) {
			$regex = '/^t=(?:(?<minutes>\d+)m)?(?:(?<seconds>\d+)s?)?$/';

			preg_match( $regex, $parsed_url['fragment'], $matches );

			if ( is_array( $matches ) ) {
				$matches    = wp_parse_args(
					$matches,
					[
						'minutes' => 0,
						'seconds' => 0,
					]
				);
				$start_time = ( (int) $matches['seconds'] + ( (int) $matches['minutes'] * 60 ) );
			}
		}

		return $start_time;
	}

	/**
	 * Override the output of YouTube videos.
	 *
	 * This overrides the value in wp_video_shortcode().
	 * The pattern matching is copied from WP_Widget_Media_Video::render().
	 *
	 * @param string $html Empty variable to be replaced with shortcode markup.
	 * @param array  $attr The shortcode attributes.
	 *
	 * @return string|null $markup The markup to output.
	 */
	public function video_override( $html, $attr ) {

		if ( ! isset( $attr[ Attribute::SRC ] ) ) {
			return $html;
		}

		$src      = $attr[ Attribute::SRC ];
		$video_id = $this->get_video_id_from_url( $src );

		if ( ! $video_id ) {
			return $html;
		}

		// Construct a tag so that any width/height attributes will be passed along.
		if ( ! $html ) {
			$html = AMP_HTML_Utils::build_tag( Tag::IFRAME, $attr );
		}

		return $this->render( $html, $src, $video_id );
	}
}
PK.3Y���E�E9bunyad-amp/includes/options/class-amp-options-manager.php<?php
/**
 * Class AMP_Options_Manager.
 *
 * @package AMP
 */

use AmpProject\AmpWP\Admin\ReaderThemes;
use AmpProject\AmpWP\Option;

/**
 * Class AMP_Options_Manager
 *
 * @internal
 */
class AMP_Options_Manager {

	/**
	 * Option name.
	 *
	 * @var string
	 */
	const OPTION_NAME = 'amp-options';

	/**
	 * Default option values.
	 *
	 * @var array
	 */
	protected static $defaults = [
		Option::THEME_SUPPORT            => AMP_Theme_Support::READER_MODE_SLUG,
		Option::SUPPORTED_POST_TYPES     => [ 'post', 'page' ],
		Option::ANALYTICS                => [],
		Option::ALL_TEMPLATES_SUPPORTED  => true,
		Option::SUPPORTED_TEMPLATES      => [ 'is_singular' ],
		Option::VERSION                  => AMP__VERSION,
		Option::READER_THEME             => ReaderThemes::DEFAULT_READER_THEME,
		Option::PAIRED_URL_STRUCTURE     => Option::PAIRED_URL_STRUCTURE_QUERY_VAR,
		Option::PLUGIN_CONFIGURED        => false,
		Option::DELETE_DATA_AT_UNINSTALL => true,
		Option::USE_NATIVE_IMG_TAG       => false,
	];

	/**
	 * Sets up hooks.
	 */
	public static function init() {
		add_action( 'admin_notices', [ __CLASS__, 'render_php_css_parser_conflict_notice' ] );
		add_action( 'admin_notices', [ __CLASS__, 'insecure_connection_notice' ] );
		add_action( 'admin_notices', [ __CLASS__, 'reader_theme_fallback_notice' ] );
	}

	/**
	 * Register settings.
	 */
	public static function register_settings() {
		register_setting(
			self::OPTION_NAME,
			self::OPTION_NAME,
			[
				'type'              => 'array',
				'sanitize_callback' => [ __CLASS__, 'validate_options' ],
			]
		);
	}

	/**
	 * Get plugin options.
	 *
	 * @return array Options.
	 */
	public static function get_options() {
		$options = get_option( self::OPTION_NAME, [] );
		if ( empty( $options ) ) {
			$options = []; // Ensure empty string becomes array.
		}

		$defaults      = self::$defaults;
		$theme_support = AMP_Theme_Support::get_theme_support_args();

		// Make sure the plugin is marked as being already configured if there saved options.
		if ( ! empty( $options ) ) {
			$defaults[ Option::PLUGIN_CONFIGURED ] = true;
		}

		// Migrate legacy method of specifying the mode.
		if ( ! isset( $options[ Option::THEME_SUPPORT ] ) && $theme_support ) {
			$template   = get_template();
			$stylesheet = get_stylesheet();
			if (
				// If theme support was probably explicitly added by the theme (since not core).
				! in_array( $template, AMP_Core_Theme_Sanitizer::get_supported_themes(), true )
				||
				// If it is a core theme no child theme is being used (which likely won't be AMP-compatible by default).
				$template === $stylesheet
			) {
				if ( empty( $theme_support[ AMP_Theme_Support::PAIRED_FLAG ] ) ) {
					$defaults[ Option::THEME_SUPPORT ] = AMP_Theme_Support::STANDARD_MODE_SLUG;
				} else {
					$defaults[ Option::THEME_SUPPORT ] = AMP_Theme_Support::TRANSITIONAL_MODE_SLUG;
				}
			}
		}

		// Migrate legacy amp post type support to be reflected in the default supported_post_types value.
		if ( ! isset( $options[ Option::SUPPORTED_POST_TYPES ] ) ) {
			$defaults[ Option::SUPPORTED_POST_TYPES ] = array_merge(
				$defaults[ Option::SUPPORTED_POST_TYPES ],
				(array) get_post_types_by_support( 'amp' )
			);
		}

		// Migrate legacy method of specifying all_templates_supported.
		if ( ! isset( $options[ Option::ALL_TEMPLATES_SUPPORTED ] ) && isset( $theme_support['templates_supported'] ) ) {
			$defaults[ Option::ALL_TEMPLATES_SUPPORTED ] = ( 'all' === $theme_support['templates_supported'] );
		}

		// Migrate legacy amp theme support to be reflected in the default supported_templates value.
		if ( ! isset( $options[ Option::SUPPORTED_TEMPLATES ] ) && isset( $theme_support['templates_supported'] ) && is_array( $theme_support['templates_supported'] ) ) {
			$defaults[ Option::SUPPORTED_TEMPLATES ] = array_merge(
				$defaults[ Option::SUPPORTED_TEMPLATES ],
				array_keys( array_filter( $theme_support['templates_supported'] ) )
			);
			$defaults[ Option::SUPPORTED_TEMPLATES ] = array_diff(
				$defaults[ Option::SUPPORTED_TEMPLATES ],
				array_keys(
					array_filter(
						$theme_support['templates_supported'],
						static function ( $supported ) {
							return ! $supported;
						}
					)
				)
			);
		}

		$options = array_merge(
			$defaults,
			/**
			 * Filters default options.
			 *
			 * @internal
			 * @param array $defaults        Default options.
			 * @param array $current_options Current options.
			 */
			(array) apply_filters( 'amp_default_options', $defaults, $options ),
			$options
		);

		// Ensure current template mode.
		if ( 'native' === $options[ Option::THEME_SUPPORT ] ) {
			// The slug 'native' is the old term for 'standard'.
			$options[ Option::THEME_SUPPORT ] = AMP_Theme_Support::STANDARD_MODE_SLUG;
		} elseif ( 'paired' === $options[ Option::THEME_SUPPORT ] ) {
			// The slug 'paired' is the old term for 'transitional.
			$options[ Option::THEME_SUPPORT ] = AMP_Theme_Support::TRANSITIONAL_MODE_SLUG;
		} elseif ( 'disabled' === $options[ Option::THEME_SUPPORT ] ) {
			/*
			 * Prior to 1.2, the theme support slug for Reader mode was 'disabled'. This would be saved in options for
			 * themes that had 'amp' theme support defined. Also prior to 1.2, the user could not switch between modes
			 * when the theme had 'amp' theme support. The result is that a site running 1.1 could be AMP-first and then
			 * upon upgrading to 1.2, be switched to Reader mode. So when migrating the old 'disabled' slug to the new
			 * value, we need to make sure we use the default theme support slug as it has been determined above. If the
			 * site has non-paired 'amp' theme support and the theme support slug is 'disabled' then it should here be
			 * set to 'standard' as opposed to 'reader', and the same goes for paired 'amp' theme support, as it should
			 * become 'transitional'. Otherwise, if the theme lacks 'amp' theme support, then this will become the
			 * default 'reader' mode.
			 */
			$options[ Option::THEME_SUPPORT ] = $defaults[ Option::THEME_SUPPORT ];
		}

		// Migrate options from 1.5 to 2.0.
		if ( isset( $options['version'] ) && version_compare( $options['version'], '2.0', '<' ) ) {

			// It used to be that the themes_supported flag overrode the options, so make sure the option gets updated to reflect the theme support.
			if ( isset( $theme_support['templates_supported'] ) ) {
				if ( 'all' === $theme_support['templates_supported'] ) {
					$options[ Option::ALL_TEMPLATES_SUPPORTED ] = true;
				} elseif ( is_array( $theme_support['templates_supported'] ) ) {
					$options[ Option::ALL_TEMPLATES_SUPPORTED ] = false;

					$options[ Option::SUPPORTED_TEMPLATES ] = array_merge(
						$options[ Option::SUPPORTED_TEMPLATES ],
						array_keys( array_filter( $theme_support['templates_supported'] ) )
					);

					$options[ Option::SUPPORTED_TEMPLATES ] = array_diff(
						$options[ Option::SUPPORTED_TEMPLATES ],
						array_keys(
							array_filter(
								$theme_support['templates_supported'],
								static function ( $supported ) {
									return ! $supported;
								}
							)
						)
					);
				}
			}

			// Make sure programmatic post type support is persisted in the DB, as from now on the DB option is the source of truth.
			$options[ Option::SUPPORTED_POST_TYPES ] = array_merge(
				$options[ Option::SUPPORTED_POST_TYPES ],
				(array) get_post_types_by_support( AMP_Post_Type_Support::SLUG )
			);

			// Make sure that all post types get enabled if all templates were supported since they are now independently controlled. This only applies to non-Reader mode.
			if ( ! empty( $options[ Option::ALL_TEMPLATES_SUPPORTED ] ) && AMP_Theme_Support::READER_MODE_SLUG !== $options[ Option::THEME_SUPPORT ] ) {
				$options[ Option::SUPPORTED_POST_TYPES ] = array_merge(
					$options[ Option::SUPPORTED_POST_TYPES ],
					AMP_Post_Type_Support::get_eligible_post_types()
				);
			}
		}

		unset(
			/**
			 * Remove 'auto_accept_sanitization' option.
			 *
			 * @since 1.4.0
			 */
			$options[ Option::AUTO_ACCEPT_SANITIZATION ],
			/**
			 * Remove Story related options.
			 *
			 * Option::ENABLE_AMP_STORIES was added in 1.2-beta and later migrated into the `experiences` option.
			 *
			 * @since 1.5.0
			 */
			$options[ Option::STORY_TEMPLATES_VERSION ],
			$options[ Option::STORY_EXPORT_BASE_URL ],
			$options[ Option::STORY_SETTINGS ],
			$options[ Option::ENABLE_AMP_STORIES ],
			/**
			 * Remove 'experiences' option.
			 *
			 * @since 1.5.0
			 */
			$options[ Option::EXPERIENCES ],
			/**
			 * Remove 'enable_response_caching' option.
			 *
			 * @since 1.5.0
			 */
			$options[ Option::ENABLE_RESPONSE_CACHING ]
		);

		return $options;
	}

	/**
	 * Get plugin option.
	 *
	 * @param string $option  Plugin option name.
	 * @param bool   $default Default value.
	 *
	 * @return mixed Option value.
	 */
	public static function get_option( $option, $default = false ) {
		$amp_options = self::get_options();

		if ( ! array_key_exists( $option, $amp_options ) ) {
			return $default;
		}

		return $amp_options[ $option ];
	}

	/**
	 * Validate options.
	 *
	 * @param array $new_options Plugin options.
	 * @return array Options.
	 */
	public static function validate_options( $new_options ) {
		$options = self::get_options();

		if ( ! current_user_can( 'manage_options' ) ) {
			return $options;
		}

		// Theme support.
		$recognized_theme_supports = [
			AMP_Theme_Support::READER_MODE_SLUG,
			AMP_Theme_Support::TRANSITIONAL_MODE_SLUG,
			AMP_Theme_Support::STANDARD_MODE_SLUG,
		];
		if ( isset( $new_options[ Option::THEME_SUPPORT ] ) && in_array( $new_options[ Option::THEME_SUPPORT ], $recognized_theme_supports, true ) ) {
			$options[ Option::THEME_SUPPORT ] = $new_options[ Option::THEME_SUPPORT ];
		}

		// Validate post type support.
		if ( isset( $new_options[ Option::SUPPORTED_POST_TYPES ] ) && is_array( $new_options[ Option::SUPPORTED_POST_TYPES ] ) ) {
			$options[ Option::SUPPORTED_POST_TYPES ] = [];
			foreach ( $new_options[ Option::SUPPORTED_POST_TYPES ] as $post_type ) {
				if ( post_type_exists( $post_type ) ) {
					$options[ Option::SUPPORTED_POST_TYPES ][] = $post_type;
				}
			}
			$options[ Option::SUPPORTED_POST_TYPES ] = array_values( array_unique( $options[ Option::SUPPORTED_POST_TYPES ] ) );
		}

		// Update all_templates_supported.
		if ( isset( $new_options[ Option::ALL_TEMPLATES_SUPPORTED ] ) ) {
			$options[ Option::ALL_TEMPLATES_SUPPORTED ] = rest_sanitize_boolean( $new_options[ Option::ALL_TEMPLATES_SUPPORTED ] );
		}

		// Validate supported templates.
		if ( isset( $new_options[ Option::SUPPORTED_TEMPLATES ] ) && is_array( $new_options[ Option::SUPPORTED_TEMPLATES ] ) ) {
			$supportable_templates                  = AMP_Theme_Support::get_supportable_templates();
			$options[ Option::SUPPORTED_TEMPLATES ] = [];
			foreach ( $new_options[ Option::SUPPORTED_TEMPLATES ] as $template_id ) {
				if ( array_key_exists( $template_id, $supportable_templates ) ) {
					$options[ Option::SUPPORTED_TEMPLATES ][] = $template_id;
				}
			}
			$options[ Option::SUPPORTED_TEMPLATES ] = array_values( array_unique( $options[ Option::SUPPORTED_TEMPLATES ] ) );
		}

		// Validate wizard completion.
		if ( isset( $new_options[ Option::PLUGIN_CONFIGURED ] ) ) {
			$options[ Option::PLUGIN_CONFIGURED ] = (bool) $new_options[ OPTION::PLUGIN_CONFIGURED ];
		}

		if ( isset( $new_options[ Option::DELETE_DATA_AT_UNINSTALL ] ) ) {
			$options[ Option::DELETE_DATA_AT_UNINSTALL ] = (bool) $new_options[ OPTION::DELETE_DATA_AT_UNINSTALL ];
		}

		if ( isset( $new_options[ Option::USE_NATIVE_IMG_TAG ] ) ) {
			$options[ Option::USE_NATIVE_IMG_TAG ] = (bool) $new_options[ OPTION::USE_NATIVE_IMG_TAG ];
		}

		// Validate analytics.
		if ( isset( $new_options[ Option::ANALYTICS ] ) && $new_options[ Option::ANALYTICS ] !== $options[ Option::ANALYTICS ] ) {
			$new_analytics_option = [];

			foreach ( $new_options[ Option::ANALYTICS ] as $id => $data ) {
				if ( empty( $data['config'] ) || ! AMP_HTML_Utils::is_valid_json( $data['config'] ) ) {
					// Bad JSON or missing config.
					continue;
				}

				$new_analytics_option[ sanitize_key( $id ) ] = [
					'type'   => ! empty( $data['type'] ) ? preg_replace( '/[^a-zA-Z0-9_\-]/', '', $data['type'] ) : '',
					'config' => trim( $data['config'] ),
				];
			}

			$options[ OPTION::ANALYTICS ] = $new_analytics_option;
		}

		if ( isset( $new_options[ Option::READER_THEME ] ) && $new_options[ Option::READER_THEME ] !== $options[ Option::READER_THEME ] ) {
			$reader_theme_slugs = wp_list_pluck( ( new ReaderThemes() )->get_themes(), 'slug' );
			if ( in_array( $new_options[ Option::READER_THEME ], $reader_theme_slugs, true ) ) {
				$options[ Option::READER_THEME ] = $new_options[ Option::READER_THEME ];
			}
		}

		/**
		 * Filter the options being updated, so services can handle the sanitization and validation of
		 * their respective options.
		 *
		 * @internal
		 *
		 * @param array $options     Existing options with already-sanitized values for updating.
		 * @param array $new_options Unsanitized options being submitted for updating.
		 */
		$options = apply_filters( 'amp_options_updating', $options, $new_options );

		// Store the current version with the options so we know the format.
		$options[ Option::VERSION ] = AMP__VERSION;

		return $options;
	}

	/**
	 * Update plugin option.
	 *
	 * @param string $option Plugin option name.
	 * @param mixed  $value  Plugin option value.
	 *
	 * @return bool Whether update succeeded.
	 */
	public static function update_option( $option, $value ) {
		$amp_options = self::get_options();

		$amp_options[ $option ] = $value;
		return update_option( self::OPTION_NAME, $amp_options, false );
	}

	/**
	 * Update plugin options.
	 *
	 * @param array $options Plugin option name.
	 * @return bool Whether update succeeded.
	 */
	public static function update_options( $options ) {
		$amp_options = array_merge(
			self::get_options(),
			$options
		);

		return update_option( self::OPTION_NAME, $amp_options, false );
	}

	/**
	 * Render PHP-CSS-Parser conflict notice.
	 *
	 * @return void
	 */
	public static function render_php_css_parser_conflict_notice() {
		$current_screen = get_current_screen();
		if ( ! ( $current_screen instanceof WP_Screen ) || 'toplevel_page_' . self::OPTION_NAME !== $current_screen->id ) {
			return;
		}

		if ( AMP_Style_Sanitizer::has_required_php_css_parser() ) {
			return;
		}

		try {
			$reflection = new ReflectionClass( 'Sabberworm\CSS\CSSList\CSSList' );
			$source_dir = str_replace(
				trailingslashit( WP_CONTENT_DIR ),
				'',
				preg_replace( '#/vendor/sabberworm/.+#', '', $reflection->getFileName() )
			);

			printf(
				'<div class="notice notice-warning"><p>%s</p></div>',
				wp_kses(
					sprintf(
						/* translators: %s: path to the conflicting library */
						__( 'A conflicting version of PHP-CSS-Parser appears to be installed by another plugin or theme (located in %s). Because of this, CSS processing will be limited, and tree shaking will not be available.', 'amp' ),
						'<code>' . esc_html( $source_dir ) . '</code>'
					),
					[ 'code' => [] ]
				)
			);
		} catch ( ReflectionException $e ) {
			printf(
				'<div class="notice notice-warning"><p>%s</p></div>',
				esc_html__( 'PHP-CSS-Parser is not available so CSS processing will not be available.', 'amp' )
			);
		}
	}

	/**
	 * Outputs an admin notice if the site is not served over HTTPS.
	 *
	 * @since 1.3
	 *
	 * @return void
	 */
	public static function insecure_connection_notice() {
		$current_screen = get_current_screen();

		// is_ssl() only tells us whether the admin backend uses HTTPS here, so we add a few more sanity checks.
		$uses_ssl = (
			is_ssl()
			&&
			( strpos( get_bloginfo( 'wpurl' ), 'https' ) === 0 )
			&&
			( strpos( get_bloginfo( 'url' ), 'https' ) === 0 )
		);

		if ( ! $uses_ssl && $current_screen instanceof WP_Screen && 'toplevel_page_' . self::OPTION_NAME === $current_screen->id ) {
			printf(
				'<div class="notice notice-warning"><p>%s</p></div>',
				wp_kses(
					sprintf(
						/* translators: %s: "Why should I use HTTPS" support URL */
						__( 'Your site is not being fully served over a secure connection (using HTTPS).<br>As some AMP functionality requires a secure connection, you might experience degraded performance or broken components.<br><a href="%s">More details</a>', 'amp' ),
						esc_url( __( 'https://wordpress.org/support/article/why-should-i-use-https/', 'amp' ) )
					),
					[
						'br' => [],
						'a'  => [ 'href' => true ],
					]
				)
			);
		}
	}

	/**
	 * Outputs an admin notice if the AMP Legacy Reader theme is used as a fallback.
	 */
	public static function reader_theme_fallback_notice() {
		$current_screen = get_current_screen();

		if ( ! ( $current_screen instanceof WP_Screen ) || ! in_array( $current_screen->id, [ 'themes', 'toplevel_page_' . self::OPTION_NAME ], true ) ) {
			return;
		}

		$reader_themes = new ReaderThemes();

		if ( $reader_themes->using_fallback_theme() && current_user_can( 'manage_options' ) ) {
			$selected_theme = self::get_option( Option::READER_THEME );
			$error_message  = sprintf(
				/* translators: 1: slug of the Reader theme, 2: the URL for the reader theme selection UI */
				__( 'The AMP Reader theme %1$s cannot be found. Your site is currently falling back to using the Legacy templates for AMP pages. Please <a href="%2$s">re-select</a> the desired Reader theme.', 'amp' ),
				"<code>{$selected_theme}</code>",
				esc_url( add_query_arg( 'page', self::OPTION_NAME, admin_url( 'admin.php' ) ) . '#reader-themes' )
			);
			?>
			<div class="notice notice-warning">
				<p>
					<?php
					echo wp_kses(
						$error_message,
						[
							'code' => [],
							'a'    => [
								'href' => true,
							],
						]
					);
					?>
				</p>
			</div>
			<?php
		}
	}
}
PK.3Y�q�N	N	Fbunyad-amp/includes/options/class-amp-reader-theme-rest-controller.php<?php
/**
 * Reader theme controller.
 *
 * @package AMP
 * @since 2.0
 */

use AmpProject\AmpWP\Admin\ReaderThemes;

/**
 * AMP reader theme REST controller.
 *
 * @since 2.0
 * @internal
 */
final class AMP_Reader_Theme_REST_Controller extends WP_REST_Controller {

	/**
	 * Reader themes provider class.
	 *
	 * @var ReaderThemes
	 */
	private $reader_themes;

	/**
	 * Constructor.
	 *
	 * @param ReaderThemes $reader_themes ReaderThemes instance to provide theme data.
	 */
	public function __construct( ReaderThemes $reader_themes ) {
		$this->reader_themes = $reader_themes;
		$this->namespace     = 'amp/v1';
		$this->rest_base     = 'reader-themes';
	}

	/**
	 * Registers routes for the controller.
	 *
	 * @since 2.0
	 */
	public function register_routes() {
		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base,
			[
				[
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => [ $this, 'get_items' ],
					'permission_callback' => [ $this, 'get_items_permissions_check' ],
					'args'                => [],
				],
			]
		);
	}

	/**
	 * Checks whether the current user has permission to manage options.
	 *
	 * @param  WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has permission; WP_Error object otherwise.
	 */
	public function get_items_permissions_check( $request ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
		if ( ! current_user_can( 'manage_options' ) ) {
			return new WP_Error(
				'amp_rest_cannot_manage_options',
				__( 'Sorry, you are not allowed to manage options for the AMP plugin for WordPress.', 'amp' ),
				[ 'status' => rest_authorization_required_code() ]
			);
		}

		return true;
	}

	/**
	 * Retrieves all available reader themes.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response Response object.
	 */
	public function get_items( $request ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
		$themes = $this->reader_themes->get_themes();

		$response = rest_ensure_response( $themes );

		$themes_api_error = $this->reader_themes->get_themes_api_error();
		if ( is_wp_error( $themes_api_error ) ) {
			$response->header( 'X-AMP-Theme-API-Error', $themes_api_error->get_error_message() );
		}

		return $response;
	}
}
PK.3YO�,::Dbunyad-amp/includes/sanitizers/class-amp-accessibility-sanitizer.php<?php
/**
 * Class AMP_Accessibility_Sanitizer.
 *
 * @package AmpProject\AmpWP
 */

use AmpProject\Dom\Element;
use AmpProject\Html\Attribute;
use AmpProject\Html\Role;
use AmpProject\Html\Tag;

/**
 * Sanitizes attributes required for AMP accessibility requirements.
 *
 * @since 1.5.3
 * @internal
 */
class AMP_Accessibility_Sanitizer extends AMP_Base_Sanitizer {

	/**
	 * Sanitize.
	 */
	public function sanitize() {
		$this->add_role_and_tabindex_to_on_tap_actors();
		$this->add_skip_link();
	}

	/**
	 * Adds the role and tabindex attributes to all elements that use a tap action via AMP's "on" event.
	 */
	public function add_role_and_tabindex_to_on_tap_actors() {
		$predicates = [
			'@on',
			'contains( @on, "tap:" )',
			'not( @tabindex ) or not( @role )',
			'not( self::button )',
			'not( self::a[ @href ] )',
		];

		$expression = sprintf(
			'//*[ %s ]',
			implode(
				' and ',
				array_map(
					static function ( $predicate ) {
						return "( $predicate )";
					},
					$predicates
				)
			)
		);

		$attributes = [
			Attribute::ROLE     => Role::BUTTON,
			Attribute::TABINDEX => '0',
		];

		/**
		 * Element.
		 *
		 * @var DOMElement $element
		 */
		foreach ( $this->dom->xpath->query( $expression ) as $element ) {
			foreach ( $attributes as $attribute_name => $attribute_value ) {
				if ( ! $element->hasAttribute( $attribute_name ) ) {
					$element->setAttribute( $attribute_name, $attribute_value );
				}
			}
		}
	}

	/**
	 * Add skip link markup and style.
	 *
	 * This is the implementation of the non-AMP logic in `the_block_template_skip_link()` which is unhooked in
	 * `AMP_Theme_Support::add_hooks()` to prevent validation errors from being raised.
	 *
	 * @see AMP_Theme_Support::add_hooks()
	 * @see the_block_template_skip_link()
	 * @return void
	 */
	public function add_skip_link() {

		// Early exit if not a block theme.
		if ( ! current_theme_supports( 'block-templates' ) ) {
			return;
		}

		// Early exit if not a block template.
		global $_wp_current_template_content;
		if ( ! $_wp_current_template_content ) {
			return;
		}

		$main_tag = $this->dom->getElementsByTagName( Tag::MAIN )->item( 0 );
		if ( ! $main_tag instanceof Element ) {
			return;
		}

		$skip_link_target = $this->dom->getElementId( $main_tag, 'wp--skip-link--target' );

		// Style for skip link.
		$style_content = '
			.skip-link.screen-reader-text {
				border: 0;
				clip: rect(1px,1px,1px,1px);
				clip-path: inset(50%);
				height: 1px;
				margin: -1px;
				overflow: hidden;
				padding: 0;
				position: absolute !important;
				width: 1px;
				word-wrap: normal !important;
			}

			.skip-link.screen-reader-text:focus {
				background-color: #eee;
				clip: auto !important;
				clip-path: none;
				color: #444;
				display: block;
				font-size: 1em;
				height: auto;
				left: 5px;
				line-height: normal;
				padding: 15px 23px 14px;
				text-decoration: none;
				top: 5px;
				width: auto;
				z-index: 100000;
			}
		';

		$style_node = AMP_DOM_Utils::create_node(
			$this->dom,
			Tag::STYLE,
			[
				Attribute::ID => 'amp-skip-link-styles',
			]
		);

		$style_node->appendChild( $this->dom->createTextNode( $style_content ) );

		// Skip link node.
		$skip_link = AMP_DOM_Utils::create_node(
			$this->dom,
			Tag::A,
			[
				Attribute::CLASS_ => 'skip-link screen-reader-text',
				Attribute::HREF   => "#$skip_link_target",
			]
		);

		$skip_link->appendChild( $this->dom->createTextNode( __( 'Skip to content', 'amp' ) ) );

		$body = $this->dom->body;
		$body->insertBefore( $skip_link, $body->firstChild );
		$body->insertBefore( $style_node, $body->firstChild );
	}
}
PK.3YP��%	�%	Cbunyad-amp/includes/sanitizers/class-amp-allowed-tags-generated.php<?php
/**
 * Generated by amphtml-update.py - do not edit.
 *
 * This is a list of HTML tags and attributes that are allowed by the
 * AMP specification. Note that tag names have been converted to lowercase.
 *
 * Note: This file only contains tags that are relevant to the `body` of
 * an AMP page. To include additional elements modify the variable
 * `mandatory_parent_denylist` in the amp_wp_build.py script.
 *
 * phpcs:ignoreFile
 *
 * @internal
 */
class AMP_Allowed_Tags_Generated {

	private static $spec_file_revision = 1188;
	private static $minimum_validator_revision_required = 475;

	private static $descendant_tag_lists = array(
		'amp-mega-menu-allowed-descendants' => array(
			'a',
			'amp-ad',
			'amp-carousel',
			'amp-embed',
			'amp-img',
			'amp-lightbox',
			'amp-list',
			'amp-video',
			'b',
			'br',
			'button',
			'col',
			'colgroup',
			'div',
			'em',
			'fieldset',
			'form',
			'h1',
			'h2',
			'h3',
			'h4',
			'h5',
			'h6',
			'i',
			'img',
			'input',
			'label',
			'li',
			'mark',
			'nav',
			'noscript',
			'ol',
			'option',
			'p',
			'path',
			'section',
			'select',
			'span',
			'strike',
			'strong',
			'sub',
			'sup',
			'svg',
			'table',
			'tbody',
			'td',
			'template',
			'th',
			'time',
			'title',
			'tr',
			'u',
			'ul',
			'use',
		),
		'amp-nested-menu-allowed-descendants' => array(
			'a',
			'amp-accordion',
			'amp-img',
			'amp-list',
			'b',
			'br',
			'button',
			'circle',
			'col',
			'colgroup',
			'div',
			'ellipse',
			'em',
			'fieldset',
			'form',
			'h1',
			'h2',
			'h3',
			'h4',
			'h5',
			'h6',
			'i',
			'input',
			'label',
			'li',
			'line',
			'mark',
			'nav',
			'ol',
			'option',
			'p',
			'path',
			'polygon',
			'polyline',
			'rect',
			'section',
			'select',
			'span',
			'strike',
			'strong',
			'sub',
			'sup',
			'svg',
			'table',
			'tbody',
			'td',
			'template',
			'th',
			'time',
			'title',
			'tr',
			'u',
			'ul',
			'use',
		),
		'amp-story-audio-sticker-allowed-descendants' => array(
			'amp-img',
			'div',
			'span',
		),
		'amp-story-bookend-allowed-descendants' => array(
			'script',
		),
		'amp-story-cta-layer-allowed-descendants' => array(
			'a',
			'abbr',
			'address',
			'amp-call-tracking',
			'amp-date-countdown',
			'amp-date-display',
			'amp-fit-text',
			'amp-font',
			'amp-img',
			'amp-timeago',
			'b',
			'bdi',
			'bdo',
			'blockquote',
			'br',
			'button',
			'caption',
			'cite',
			'circle',
			'clippath',
			'code',
			'data',
			'defs',
			'del',
			'desc',
			'dfn',
			'div',
			'ellipse',
			'em',
			'fecolormatrix',
			'fecomposite',
			'feblend',
			'feflood',
			'fegaussianblur',
			'femerge',
			'femergenode',
			'feoffset',
			'figcaption',
			'figure',
			'filter',
			'footer',
			'g',
			'glyph',
			'glyphref',
			'h1',
			'h2',
			'h3',
			'h4',
			'h5',
			'h6',
			'header',
			'hgroup',
			'hkern',
			'hr',
			'i',
			'image',
			'ins',
			'kbd',
			'li',
			'line',
			'lineargradient',
			'main',
			'marker',
			'mark',
			'mask',
			'metadata',
			'nav',
			'noscript',
			'ol',
			'p',
			'path',
			'pattern',
			'pre',
			'polygon',
			'polyline',
			'radialgradient',
			'q',
			'rect',
			'rp',
			'rt',
			'rtc',
			'ruby',
			's',
			'samp',
			'section',
			'small',
			'solidcolor',
			'span',
			'stop',
			'strong',
			'sub',
			'sup',
			'svg',
			'switch',
			'symbol',
			'text',
			'textpath',
			'tref',
			'tspan',
			'title',
			'time',
			'tr',
			'u',
			'ul',
			'use',
			'var',
			'view',
			'vkern',
			'wbr',
		),
		'amp-story-grid-layer-allowed-descendants' => array(
			'a',
			'abbr',
			'address',
			'amp-analytics',
			'amp-audio',
			'amp-bodymovin-animation',
			'amp-date-countdown',
			'amp-date-display',
			'amp-experiment',
			'amp-fit-text',
			'amp-font',
			'amp-gist',
			'amp-img',
			'amp-install-serviceworker',
			'amp-list',
			'amp-live-list',
			'amp-pixel',
			'amp-render',
			'amp-state',
			'amp-story-360',
			'amp-story-audio-sticker',
			'amp-story-audio-sticker-pretap',
			'amp-story-audio-sticker-posttap',
			'amp-story-auto-analytics',
			'amp-story-captions',
			'amp-story-interactive-binary-poll',
			'amp-story-interactive-img-poll',
			'amp-story-interactive-img-quiz',
			'amp-story-interactive-poll',
			'amp-story-interactive-quiz',
			'amp-story-interactive-results',
			'amp-story-interactive-slider',
			'amp-story-panning-media',
			'amp-story-shopping-tag',
			'amp-timeago',
			'amp-twitter',
			'amp-video',
			'article',
			'aside',
			'b',
			'bdi',
			'bdo',
			'blockquote',
			'br',
			'caption',
			'circle',
			'cite',
			'clippath',
			'code',
			'col',
			'colgroup',
			'data',
			'dd',
			'defs',
			'del',
			'desc',
			'dfn',
			'div',
			'dl',
			'dt',
			'ellipse',
			'em',
			'fecolormatrix',
			'fecomposite',
			'feblend',
			'feflood',
			'fegaussianblur',
			'femerge',
			'femergenode',
			'feoffset',
			'figcaption',
			'figure',
			'filter',
			'footer',
			'g',
			'glyph',
			'glyphref',
			'h1',
			'h2',
			'h3',
			'h4',
			'h5',
			'h6',
			'header',
			'hgroup',
			'hkern',
			'hr',
			'i',
			'image',
			'ins',
			'kbd',
			'li',
			'line',
			'lineargradient',
			'main',
			'mark',
			'marker',
			'mask',
			'metadata',
			'nav',
			'noscript',
			'ol',
			'p',
			'path',
			'pattern',
			'polygon',
			'polyline',
			'pre',
			'q',
			'radialgradient',
			'rect',
			'rp',
			'rt',
			'rtc',
			'ruby',
			's',
			'samp',
			'script',
			'section',
			'small',
			'solidcolor',
			'source',
			'span',
			'stop',
			'strong',
			'sub',
			'sup',
			'svg',
			'switch',
			'symbol',
			'table',
			'tbody',
			'td',
			'template',
			'text',
			'textpath',
			'tfoot',
			'th',
			'thead',
			'time',
			'title',
			'tr',
			'track',
			'tref',
			'tspan',
			'u',
			'ul',
			'use',
			'var',
			'view',
			'vkern',
			'wbr',
		),
		'amp-story-page-attachment-allowed-descendants' => array(
			'a',
			'abbr',
			'address',
			'amp-3d-gltf',
			'amp-3q-player',
			'amp-accordion',
			'amp-audio',
			'amp-beopinion',
			'amp-bodymovin-animation',
			'amp-brid-player',
			'amp-brightcove',
			'amp-byside-content',
			'amp-call-tracking',
			'amp-carousel',
			'amp-dailymotion',
			'amp-date-countdown',
			'amp-date-display',
			'amp-embedly-card',
			'amp-facebook',
			'amp-facebook-comments',
			'amp-facebook-like',
			'amp-facebook-page',
			'amp-fit-text',
			'amp-fx-collection',
			'amp-fx-flying-carpet',
			'amp-gfycat',
			'amp-gist',
			'amp-google-document-embed',
			'amp-hulu',
			'amp-ima-video',
			'amp-image-slider',
			'amp-img',
			'amp-imgur',
			'amp-instagram',
			'amp-izlesene',
			'amp-jwplayer',
			'amp-kaltura-player',
			'amp-list',
			'amp-live-list',
			'amp-mathml',
			'amp-megaphone',
			'amp-mowplayer',
			'amp-nexxtv-player',
			'amp-o2-player',
			'amp-ooyala-player',
			'amp-pan-zoom',
			'amp-pinterest',
			'amp-playbuzz',
			'amp-powr-player',
			'amp-reach-player',
			'amp-reddit',
			'amp-render',
			'amp-riddle-quiz',
			'amp-soundcloud',
			'amp-selector',
			'amp-springboard-player',
			'amp-timeago',
			'amp-twitter',
			'amp-video',
			'amp-video-iframe',
			'amp-vimeo',
			'amp-vine',
			'amp-viqeo-player',
			'amp-vk',
			'amp-wistia-player',
			'amp-yotpo',
			'amp-youtube',
			'article',
			'aside',
			'b',
			'bdi',
			'bdo',
			'blockquote',
			'br',
			'button',
			'caption',
			'circle',
			'cite',
			'clippath',
			'code',
			'col',
			'colgroup',
			'data',
			'datalist',
			'dd',
			'defs',
			'del',
			'desc',
			'dfn',
			'div',
			'dl',
			'dt',
			'ellipse',
			'em',
			'fecolormatrix',
			'fecomposite',
			'feblend',
			'feflood',
			'fegaussianblur',
			'femerge',
			'femergenode',
			'feoffset',
			'figcaption',
			'fieldset',
			'figure',
			'filter',
			'form',
			'footer',
			'g',
			'glyph',
			'glyphref',
			'h1',
			'h2',
			'h3',
			'h4',
			'h5',
			'h6',
			'header',
			'hgroup',
			'hkern',
			'hr',
			'i',
			'image',
			'input',
			'ins',
			'kbd',
			'label',
			'legend',
			'li',
			'line',
			'lineargradient',
			'main',
			'mark',
			'marker',
			'mask',
			'metadata',
			'meter',
			'nav',
			'ol',
			'optgroup',
			'option',
			'output',
			'p',
			'path',
			'pattern',
			'polygon',
			'polyline',
			'pre',
			'progress',
			'q',
			'radialgradient',
			'rect',
			'rp',
			'rt',
			'rtc',
			'ruby',
			's',
			'samp',
			'section',
			'select',
			'small',
			'solidcolor',
			'source',
			'span',
			'stop',
			'strong',
			'sub',
			'sup',
			'svg',
			'switch',
			'symbol',
			'table',
			'tbody',
			'td',
			'template',
			'text',
			'textarea',
			'textpath',
			'tfoot',
			'th',
			'thead',
			'time',
			'title',
			'tr',
			'track',
			'tref',
			'tspan',
			'u',
			'ul',
			'use',
			'var',
			'view',
			'vkern',
			'wbr',
		),
		'amp-story-player-allowed-descendants' => array(
			'a',
			'span',
			'img',
		),
		'amp-story-social-share-allowed-descendants' => array(
			'script',
		),
	);

	private static $allowed_tags = array(
		'a' => array(
			array(
				'attr_spec_list' => array(
					'attributiondestination' => array(),
					'attributionexpiry' => array(),
					'attributionreportto' => array(),
					'attributionsourceeventid' => array(),
					'attributionsourceid' => array(),
					'attributionsrc' => array(
						'value_url' => array(
							'allow_empty' => true,
							'protocol' => array(
								'https',
							),
						),
					),
					'border' => array(),
					'conversiondestination' => array(),
					'data-amp-bind-href' => array(),
					'download' => array(),
					'href' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_empty' => true,
							'protocol' => array(
								'ftp',
								'geo',
								'http',
								'https',
								'mailto',
								'maps',
								'bip',
								'bbmi',
								'chrome',
								'itms-services',
								'facetime',
								'fb-me',
								'fb-messenger',
								'feed',
								'intent',
								'line',
								'microsoft-edge',
								'skype',
								'sms',
								'snapchat',
								'tel',
								'tg',
								'threema',
								'twitter',
								'viber',
								'webcal',
								'web+mastodon',
								'wh',
								'whatsapp',
							),
						),
					),
					'hreflang' => array(),
					'impressiondata' => array(),
					'impressionexpiry' => array(),
					'media' => array(),
					'name' => array(
						'disallowed_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)',
					),
					'referrerpolicy' => array(),
					'rel' => array(
						'disallowed_value_regex' => '(^|\\s)(components|dns-prefetch|import|manifest|preconnect|prefetch|preload|prerender|serviceworker|stylesheet|subresource)(\\s|$)',
					),
					'reportingorigin' => array(),
					'role' => array(),
					'show-tooltip' => array(
						'value' => array(
							'auto',
							'true',
						),
					),
					'tabindex' => array(),
					'target' => array(
						'value' => array(
							'_blank',
							'_self',
							'_top',
						),
					),
					'type' => array(
						'value_casei' => array(
							'text/html',
							'application/rss+xml',
						),
					),
				),
				'tag_spec' => array(
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#links',
				),
			),
		),
		'abbr' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'acronym' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'address' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'amp-3d-gltf' => array(
			array(
				'attr_spec_list' => array(
					'alpha' => array(
						'value' => array(
							'false',
							'true',
						),
					),
					'antialiasing' => array(
						'value' => array(
							'false',
							'true',
						),
					),
					'autorotate' => array(
						'value' => array(
							'false',
							'true',
						),
					),
					'clearcolor' => array(),
					'enablezoom' => array(
						'value' => array(
							'false',
							'true',
						),
					),
					'maxpixelratio' => array(
						'value_regex' => '[+-]?(\\d*\\.)?\\d+',
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'src' => array(
						'mandatory' => true,
						'value_url' => array(
							'protocol' => array(
								'https',
							),
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							4,
						),
					),
					'requires_extension' => array(
						'amp-3d-gltf',
					),
				),
			),
		),
		'amp-3q-player' => array(
			array(
				'attr_spec_list' => array(
					'autoplay' => array(
						'value' => array(
							'',
						),
					),
					'data-id' => array(
						'mandatory' => true,
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							7,
							4,
						),
					),
					'requires_extension' => array(
						'amp-3q-player',
					),
				),
			),
		),
		'amp-accordion' => array(
			array(
				'attr_spec_list' => array(
					'animate' => array(
						'value' => array(
							'',
						),
					),
					'disable-session-states' => array(
						'value' => array(
							'',
						),
					),
					'expand-single-section' => array(
						'value' => array(
							'',
						),
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							5,
						),
					),
					'child_tags' => array(
						'child_tag_name_oneof' => array(
							'section',
						),
					),
					'requires_extension' => array(
						'amp-accordion',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-accordion/',
				),
			),
		),
		'amp-action-macro' => array(
			array(
				'attr_spec_list' => array(
					'arguments' => array(),
					'execute' => array(
						'mandatory' => true,
					),
					'id' => array(
						'disallowed_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|AMP|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|i-amphtml-\\S*|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)',
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'requires_extension' => array(
						'amp-action-macro',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-action-macro/',
				),
			),
		),
		'amp-ad' => array(
			array(
				'attr_spec_list' => array(
					'alt' => array(),
					'always-serve-npa' => array(),
					'block-rtc' => array(),
					'json' => array(),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'rtc-config' => array(),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_relative' => true,
							'protocol' => array(
								'https',
							),
						),
					),
					'sticky' => array(
						'value' => array(
							'',
							'bottom',
							'bottom-right',
							'left',
							'right',
							'top',
						),
					),
					'template' => array(),
					'type' => array(
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							8,
							9,
							1,
							4,
						),
					),
					'disallowed_ancestor' => array(
						'amp-app-banner',
					),
					'requires_extension' => array(
						'amp-ad',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-ad/',
				),
			),
			array(
				'attr_spec_list' => array(
					'data-url' => array(
						'mandatory' => true,
						'value_url' => array(
							'protocol' => array(
								'https',
							),
						),
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'template' => array(),
					'type' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value' => array(
							'custom',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							8,
							9,
							1,
							4,
						),
					),
					'disallowed_ancestor' => array(
						'amp-app-banner',
					),
					'requires_extension' => array(
						'amp-ad',
					),
					'spec_name' => 'amp-ad with type=custom',
					'spec_url' => 'https://github.com/ampproject/amphtml/blob/main/ads/vendors/custom.md',
				),
			),
			array(
				'attr_spec_list' => array(
					'alt' => array(),
					'always-serve-npa' => array(),
					'block-rtc' => array(),
					'data-multi-size' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'json' => array(),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'rtc-config' => array(),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_relative' => true,
							'protocol' => array(
								'https',
							),
						),
					),
					'type' => array(
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							8,
							9,
							1,
							4,
						),
					),
					'disallowed_ancestor' => array(
						'amp-app-banner',
						'amp-carousel',
						'amp-fx-flying-carpet',
						'amp-lightbox',
						'amp-sticky-ad',
					),
					'requires_extension' => array(
						'amp-ad',
					),
					'spec_name' => 'amp-ad with data-multi-size attribute',
					'spec_url' => 'https://amp.dev/documentation/components/amp-ad/',
				),
			),
			array(
				'attr_spec_list' => array(
					'alt' => array(),
					'data-enable-refresh' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'json' => array(),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_relative' => true,
							'protocol' => array(
								'https',
							),
						),
					),
					'type' => array(
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							8,
							9,
							1,
							4,
						),
					),
					'disallowed_ancestor' => array(
						'amp-app-banner',
						'amp-fx-flying-carpet',
						'amp-lightbox',
					),
					'requires_extension' => array(
						'amp-ad',
					),
					'spec_name' => 'amp-ad with data-enable-refresh attribute',
					'spec_url' => 'https://amp.dev/documentation/components/amp-ad/',
				),
			),
		),
		'amp-ad-custom' => array(
			array(
				'attr_spec_list' => array(
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'mandatory' => true,
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							8,
							9,
							1,
							4,
						),
					),
					'disallowed_ancestor' => array(
						'amp-app-banner',
					),
					'requires_extension' => array(
						'amp-ad-custom',
					),
				),
			),
		),
		'amp-addthis' => array(
			array(
				'attr_spec_list' => array(
					'data-product-code' => array(),
					'data-share-media' => array(
						'value_url' => array(
							'allow_empty' => true,
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'data-share-url' => array(
						'value_url' => array(
							'allow_empty' => true,
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'data-widget-id' => array(),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							1,
							4,
						),
					),
					'mandatory_oneof' => array(
						'data-product-code',
						'data-widget-id',
					),
					'requires_extension' => array(
						'amp-addthis',
					),
				),
			),
		),
		'amp-analytics' => array(
			array(
				'attr_spec_list' => array(
					'config' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_empty' => true,
							'allow_relative' => true,
							'protocol' => array(
								'https',
							),
						),
					),
					'type' => array(),
				),
				'tag_spec' => array(
					'requires_extension' => array(
						'amp-analytics',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-analytics/',
				),
			),
		),
		'amp-anim' => array(
			array(
				'attr_spec_list' => array(
					'alt' => array(),
					'attribution' => array(),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'object-fit' => array(),
					'object-position' => array(),
					'src' => array(
						'alternative_names' => array(
							'srcset',
						),
						'disallowed_value_regex' => '__amp_source_origin',
						'mandatory' => true,
						'value_url' => array(
							'protocol' => array(
								'data',
								'http',
								'https',
							),
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							9,
							1,
							4,
						),
					),
					'requires_extension' => array(
						'amp-anim',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-anim/',
				),
			),
		),
		'amp-animation' => array(
			array(
				'attr_spec_list' => array(
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'trigger' => array(
						'value' => array(
							'visibility',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							1,
						),
					),
					'child_tags' => array(
						'child_tag_name_oneof' => array(
							'script',
						),
						'mandatory_num_child_tags' => 1,
					),
					'requires_extension' => array(
						'amp-animation',
					),
				),
			),
		),
		'amp-apester-media' => array(
			array(
				'attr_spec_list' => array(
					'data-apester-channel-token' => array(
						'value_regex' => '[0-9a-zA-Z]+',
					),
					'data-apester-media-id' => array(
						'value_regex' => '[0-9a-zA-Z]+',
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							1,
							4,
						),
					),
					'mandatory_oneof' => array(
						'data-apester-channel-token',
						'data-apester-media-id',
					),
					'requires_extension' => array(
						'amp-apester-media',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-apester-media/',
				),
			),
		),
		'amp-app-banner' => array(
			array(
				'attr_spec_list' => array(
					'id' => array(
						'disallowed_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|AMP|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|i-amphtml-\\S*|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)',
						'mandatory' => true,
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							1,
						),
					),
					'mandatory_parent' => 'body',
					'requires_extension' => array(
						'amp-app-banner',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-app-banner/',
					'unique' => true,
				),
			),
		),
		'amp-audio' => array(
			array(
				'attr_spec_list' => array(
					'album' => array(),
					'artist' => array(),
					'artwork' => array(),
					'autoplay' => array(
						'value' => array(
							'',
						),
					),
					'controls' => array(),
					'controlslist' => array(),
					'data-amp-bind-album' => array(),
					'data-amp-bind-artist' => array(),
					'data-amp-bind-artwork' => array(),
					'data-amp-bind-controlslist' => array(),
					'data-amp-bind-loop' => array(),
					'data-amp-bind-src' => array(),
					'data-amp-bind-title' => array(),
					'loop' => array(
						'value' => array(
							'',
						),
					),
					'media' => array(),
					'muted' => array(
						'value' => array(
							'',
						),
					),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'preload' => array(
						'value_casei' => array(
							'auto',
							'metadata',
							'none',
						),
					),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_relative' => true,
							'protocol' => array(
								'https',
							),
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'defines_default_height' => true,
						'defines_default_width' => true,
						'supported_layouts' => array(
							2,
							3,
							5,
							1,
						),
					),
					'disallowed_ancestor' => array(
						'amp-story',
					),
					'requires_extension' => array(
						'amp-audio',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-audio/',
				),
			),
			array(
				'attr_spec_list' => array(
					'album' => array(),
					'artist' => array(),
					'artwork' => array(),
					'autoplay' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'controls' => array(),
					'controlslist' => array(),
					'data-amp-bind-album' => array(),
					'data-amp-bind-artist' => array(),
					'data-amp-bind-artwork' => array(),
					'data-amp-bind-controlslist' => array(),
					'data-amp-bind-loop' => array(),
					'data-amp-bind-src' => array(),
					'data-amp-bind-title' => array(),
					'loop' => array(
						'value' => array(
							'',
						),
					),
					'media' => array(),
					'muted' => array(
						'value' => array(
							'',
						),
					),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_relative' => true,
							'protocol' => array(
								'https',
							),
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							1,
						),
					),
					'mandatory_ancestor' => 'amp-story',
					'requires_extension' => array(
						'amp-audio',
					),
					'spec_name' => 'amp-story >> amp-audio',
					'spec_url' => 'https://amp.dev/documentation/components/amp-audio/',
				),
			),
		),
		'amp-auto-ads' => array(
			array(
				'attr_spec_list' => array(
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'type' => array(
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'disallowed_ancestor' => array(
						'amp-auto-ads',
					),
					'requires_extension' => array(
						'amp-auto-ads',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-auto-ads/',
				),
			),
		),
		'amp-autocomplete' => array(
			array(
				'attr_spec_list' => array(
					'data-amp-bind-src' => array(),
					'filter' => array(
						'mandatory' => true,
						'value_casei' => array(
							'custom',
							'fuzzy',
							'none',
							'prefix',
							'substring',
							'token-prefix',
						),
					),
					'filter-expr' => array(
						'requires_extension' => array(
							'amp-bind',
						),
					),
					'filter-value' => array(),
					'highlight-user-entry' => array(),
					'inline' => array(),
					'items' => array(),
					'max-entries' => array(),
					'max-items' => array(),
					'media' => array(),
					'min-characters' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'prefetch' => array(),
					'query' => array(),
					'src' => array(
						'value_url' => array(
							'allow_relative' => true,
							'protocol' => array(
								'https',
							),
						),
					),
					'submit-on-enter' => array(),
					'suggest-first' => array(),
					'template' => array(),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							5,
						),
					),
					'requires_extension' => array(
						'amp-autocomplete',
					),
					'spec_name' => 'amp-autocomplete',
					'spec_url' => 'https://amp.dev/documentation/components/amp-autocomplete/',
				),
			),
		),
		'amp-base-carousel' => array(
			array(
				'attr_spec_list' => array(
					'advance-count' => array(
						'value_regex' => '([^,]+\\s+(-?\\d+),\\s*)*(-?\\d+)',
					),
					'auto-advance' => array(
						'value_regex' => '([^,]+\\s+(true|false),\\s*)*(true|false)',
					),
					'auto-advance-count' => array(
						'value_regex' => '([^,]+\\s+(-?\\d+),\\s*)*(-?\\d+)',
					),
					'auto-advance-interval' => array(
						'value_regex' => '([^,]+\\s+(\\d+),\\s*)*(\\d+)',
					),
					'auto-advance-loops' => array(
						'value_regex' => '([^,]+\\s+(\\d+),\\s*)*(\\d+)',
					),
					'controls' => array(
						'value_regex' => '([^,]+\\s+(always|auto|never),\\s*)*(always|auto|never)',
					),
					'data-amp-bind-advance-count' => array(),
					'data-amp-bind-auto-advance' => array(),
					'data-amp-bind-auto-advance-count' => array(),
					'data-amp-bind-auto-advance-interval' => array(),
					'data-amp-bind-auto-advance-loops' => array(),
					'data-amp-bind-horizontal' => array(),
					'data-amp-bind-loop' => array(),
					'data-amp-bind-mixed-length' => array(),
					'data-amp-bind-orientation' => array(),
					'data-amp-bind-slide' => array(),
					'data-amp-bind-snap' => array(),
					'data-amp-bind-snap-align' => array(),
					'data-amp-bind-snap-by' => array(),
					'data-amp-bind-visible-count' => array(),
					'horizontal' => array(
						'value_regex' => '([^,]+\\s+(true|false),\\s*)*(true|false)',
					),
					'loop' => array(
						'value_regex' => '([^,]+\\s+(true|false),\\s*)*(true|false|^$)',
					),
					'media' => array(),
					'mixed-length' => array(
						'value_regex' => '([^,]+\\s+(true|false),\\s*)*(true|false)',
					),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'orientation' => array(
						'value_regex' => '([^,]+\\s+(horizontal|vertical),\\s*)*(horizontal|vertical)',
					),
					'slide' => array(
						'value_regex' => '([^,]+\\s+(\\d+),\\s*)*(\\d+)',
					),
					'snap' => array(
						'value_regex' => '([^,]+\\s+(true|false),\\s*)*(true|false)',
					),
					'snap-align' => array(
						'value_regex' => '([^,]+\\s+(start|center),\\s*)*(start|center)',
					),
					'snap-by' => array(
						'value_regex' => '([^,]+\\s+(\\d+),\\s*)*(\\d+)',
					),
					'visible-count' => array(
						'value_regex' => '([^,]+\\s+(\\d+(\\.\\d+)?),\\s*)*(\\d+(\\.\\d+)?)',
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							9,
							1,
							4,
						),
					),
					'requires_extension' => array(
						'amp-base-carousel',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-base-carousel/',
				),
			),
			array(
				'attr_spec_list' => array(
					'advance-count' => array(
						'value_regex' => '([^,]+\\s+(-?\\d+),\\s*)*(-?\\d+)',
					),
					'auto-advance' => array(
						'value_regex' => '([^,]+\\s+(true|false),\\s*)*(true|false)',
					),
					'auto-advance-count' => array(
						'value_regex' => '([^,]+\\s+(-?\\d+),\\s*)*(-?\\d+)',
					),
					'auto-advance-interval' => array(
						'value_regex' => '([^,]+\\s+(\\d+),\\s*)*(\\d+)',
					),
					'auto-advance-loops' => array(
						'value_regex' => '([^,]+\\s+(\\d+),\\s*)*(\\d+)',
					),
					'controls' => array(
						'value_regex' => '([^,]+\\s+(always|auto|never),\\s*)*(always|auto|never)',
					),
					'data-amp-bind-advance-count' => array(),
					'data-amp-bind-auto-advance' => array(),
					'data-amp-bind-auto-advance-count' => array(),
					'data-amp-bind-auto-advance-interval' => array(),
					'data-amp-bind-auto-advance-loops' => array(),
					'data-amp-bind-horizontal' => array(),
					'data-amp-bind-loop' => array(),
					'data-amp-bind-mixed-length' => array(),
					'data-amp-bind-orientation' => array(),
					'data-amp-bind-slide' => array(),
					'data-amp-bind-snap' => array(),
					'data-amp-bind-snap-align' => array(),
					'data-amp-bind-snap-by' => array(),
					'data-amp-bind-visible-count' => array(),
					'horizontal' => array(
						'value_regex' => '([^,]+\\s+(true|false),\\s*)*(true|false)',
					),
					'lightbox' => array(
						'mandatory' => true,
					),
					'loop' => array(
						'value_regex' => '([^,]+\\s+(true|false),\\s*)*(true|false|^$)',
					),
					'media' => array(),
					'mixed-length' => array(
						'value_regex' => '([^,]+\\s+(true|false),\\s*)*(true|false)',
					),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'orientation' => array(
						'value_regex' => '([^,]+\\s+(horizontal|vertical),\\s*)*(horizontal|vertical)',
					),
					'slide' => array(
						'value_regex' => '([^,]+\\s+(\\d+),\\s*)*(\\d+)',
					),
					'snap' => array(
						'value_regex' => '([^,]+\\s+(true|false),\\s*)*(true|false)',
					),
					'snap-align' => array(
						'value_regex' => '([^,]+\\s+(start|center),\\s*)*(start|center)',
					),
					'snap-by' => array(
						'value_regex' => '([^,]+\\s+(\\d+),\\s*)*(\\d+)',
					),
					'visible-count' => array(
						'value_regex' => '([^,]+\\s+(\\d+(\\.\\d+)?),\\s*)*(\\d+(\\.\\d+)?)',
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							9,
							1,
							4,
						),
					),
					'reference_points' => array(
						'AMP-BASE-CAROUSEL lightbox [child]' => array(
							'mandatory' => false,
							'unique' => false,
						),
						'AMP-BASE-CAROUSEL lightbox [lightbox-exclude]' => array(
							'mandatory' => false,
							'unique' => false,
						),
					),
					'requires_extension' => array(
						'amp-base-carousel',
						'amp-lightbox-gallery',
					),
					'spec_name' => 'AMP-BASE-CAROUSEL [lightbox]',
					'spec_url' => 'https://amp.dev/documentation/components/amp-base-carousel/',
				),
			),
		),
		'amp-beopinion' => array(
			array(
				'attr_spec_list' => array(
					'data-account' => array(
						'mandatory' => true,
						'value_regex_casei' => '[0-9a-f]{24}',
					),
					'data-content' => array(
						'value_regex_casei' => '[0-9a-f]{24}',
					),
					'data-my-content' => array(
						'value' => array(
							'0',
							'1',
						),
					),
					'data-name' => array(),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							9,
							1,
							4,
						),
					),
					'requires_extension' => array(
						'amp-beopinion',
					),
				),
			),
		),
		'amp-bind-macro' => array(
			array(
				'attr_spec_list' => array(
					'arguments' => array(),
					'expression' => array(
						'mandatory' => true,
					),
					'id' => array(
						'disallowed_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|AMP|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|i-amphtml-\\S*|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)',
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'requires_extension' => array(
						'amp-bind',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-bind/',
				),
			),
		),
		'amp-bodymovin-animation' => array(
			array(
				'attr_spec_list' => array(
					'loop' => array(
						'value_regex_casei' => '[1-9][0-9]*|false|true',
					),
					'noautoplay' => array(
						'value' => array(
							'',
						),
					),
					'renderer' => array(
						'value_casei' => array(
							'canvas',
							'html',
							'svg',
						),
					),
					'src' => array(
						'mandatory' => true,
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							1,
							4,
						),
					),
					'requires_extension' => array(
						'amp-bodymovin-animation',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-bodymovin-animation/',
				),
			),
		),
		'amp-brid-player' => array(
			array(
				'attr_spec_list' => array(
					'autoplay' => array(),
					'data-carousel' => array(
						'value_regex' => '[0-9]+',
					),
					'data-dynamic' => array(
						'value_regex' => '[a-z]+',
					),
					'data-outstream' => array(
						'value_regex' => '[0-9]+',
					),
					'data-partner' => array(
						'mandatory' => true,
						'value_regex' => '[0-9]+',
					),
					'data-player' => array(
						'mandatory' => true,
						'value_regex' => '[0-9]+',
					),
					'data-playlist' => array(
						'value_regex' => '.+',
					),
					'data-video' => array(
						'value_regex' => '[0-9]+',
					),
					'dock' => array(
						'requires_extension' => array(
							'amp-video-docking',
						),
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							1,
							4,
						),
					),
					'mandatory_oneof' => array(
						'data-carousel',
						'data-outstream',
						'data-playlist',
						'data-video',
					),
					'requires_extension' => array(
						'amp-brid-player',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-brid-player/',
				),
			),
		),
		'amp-brightcove' => array(
			array(
				'attr_spec_list' => array(
					'autoplay' => array(
						'value' => array(
							'',
						),
					),
					'data-account' => array(
						'mandatory' => true,
					),
					'data-amp-bind-data-account' => array(),
					'data-amp-bind-data-embed' => array(),
					'data-amp-bind-data-player' => array(),
					'data-amp-bind-data-player-id' => array(),
					'data-amp-bind-data-playlist-id' => array(),
					'data-amp-bind-data-referrer' => array(),
					'data-amp-bind-data-video-id' => array(),
					'dock' => array(
						'requires_extension' => array(
							'amp-video-docking',
						),
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							1,
							4,
						),
					),
					'requires_extension' => array(
						'amp-brightcove',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-brightcove/',
				),
			),
		),
		'amp-byside-content' => array(
			array(
				'attr_spec_list' => array(
					'data-label' => array(
						'mandatory' => true,
					),
					'data-webcare-id' => array(
						'mandatory' => true,
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							1,
							4,
						),
					),
					'requires_extension' => array(
						'amp-byside-content',
					),
				),
			),
		),
		'amp-call-tracking' => array(
			array(
				'attr_spec_list' => array(
					'config' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'mandatory' => true,
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							5,
							6,
							2,
							3,
							7,
							4,
						),
					),
					'child_tags' => array(
						'child_tag_name_oneof' => array(
							'a',
						),
						'mandatory_num_child_tags' => 1,
					),
					'requires_extension' => array(
						'amp-call-tracking',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-call-tracking/',
				),
			),
		),
		'amp-carousel' => array(
			array(
				'attr_spec_list' => array(
					'arrows' => array(
						'value' => array(
							'',
						),
					),
					'autoplay' => array(
						'value_regex' => '(|[0-9]+)',
					),
					'controls' => array(),
					'data-amp-bind-slide' => array(),
					'delay' => array(
						'value_regex' => '[0-9]+',
					),
					'dots' => array(
						'value' => array(
							'',
						),
					),
					'loop' => array(
						'value' => array(
							'',
						),
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'slide' => array(
						'value_regex' => '[0-9]+',
					),
					'type' => array(
						'value' => array(
							'carousel',
							'slides',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							9,
							1,
							4,
						),
					),
					'requires_extension' => array(
						'amp-carousel',
					),
					'spec_name' => 'AMP-CAROUSEL',
					'spec_url' => 'https://amp.dev/documentation/components/amp-carousel/',
				),
			),
			array(
				'attr_spec_list' => array(
					'arrows' => array(
						'value' => array(
							'',
						),
					),
					'autoplay' => array(
						'value_regex' => '(|[0-9]+)',
					),
					'controls' => array(),
					'data-amp-bind-slide' => array(),
					'delay' => array(
						'value_regex' => '[0-9]+',
					),
					'dots' => array(
						'value' => array(
							'',
						),
					),
					'lightbox' => array(
						'mandatory' => true,
					),
					'loop' => array(
						'value' => array(
							'',
						),
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'slide' => array(
						'value_regex' => '[0-9]+',
					),
					'type' => array(
						'value' => array(
							'carousel',
							'slides',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							9,
							1,
							4,
						),
					),
					'reference_points' => array(
						'AMP-CAROUSEL lightbox [child]' => array(
							'mandatory' => false,
							'unique' => false,
						),
						'AMP-CAROUSEL lightbox [lightbox-exclude]' => array(
							'mandatory' => false,
							'unique' => false,
						),
					),
					'requires_extension' => array(
						'amp-carousel',
						'amp-lightbox-gallery',
					),
					'spec_name' => 'AMP-CAROUSEL lightbox',
					'spec_url' => 'https://amp.dev/documentation/components/amp-carousel/',
				),
			),
		),
		'amp-connatix-player' => array(
			array(
				'attr_spec_list' => array(
					'data-player-id' => array(
						'mandatory' => true,
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							1,
							4,
						),
					),
					'requires_extension' => array(
						'amp-connatix-player',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-connatix-player/',
				),
			),
		),
		'amp-consent' => array(
			array(
				'attr_spec_list' => array(
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							1,
						),
					),
					'requires_extension' => array(
						'amp-consent',
					),
					'unique' => true,
				),
			),
			array(
				'attr_spec_list' => array(
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'type' => array(
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							1,
						),
					),
					'requires_extension' => array(
						'amp-consent',
					),
					'spec_name' => 'amp-consent [type]',
					'unique' => true,
				),
			),
		),
		'amp-dailymotion' => array(
			array(
				'attr_spec_list' => array(
					'autoplay' => array(),
					'data-endscreen-enable' => array(
						'value' => array(
							'false',
							'true',
						),
					),
					'data-info' => array(
						'value' => array(
							'false',
							'true',
						),
					),
					'data-mute' => array(
						'value' => array(
							'false',
							'true',
						),
					),
					'data-sharing-enable' => array(
						'value' => array(
							'false',
							'true',
						),
					),
					'data-start' => array(
						'value_regex' => '[0-9]+',
					),
					'data-ui-highlight' => array(
						'value_regex_casei' => '([0-9a-f]{3}){1,2}',
					),
					'data-ui-logo' => array(
						'value' => array(
							'false',
							'true',
						),
					),
					'data-videoid' => array(
						'mandatory' => true,
						'value_regex_casei' => '[a-z0-9]+',
					),
					'dock' => array(
						'requires_extension' => array(
							'amp-video-docking',
						),
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							4,
						),
					),
					'requires_extension' => array(
						'amp-dailymotion',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-dailymotion/',
				),
			),
		),
		'amp-date-countdown' => array(
			array(
				'attr_spec_list' => array(
					'biggest-unit' => array(
						'value_casei' => array(
							'days',
							'hours',
							'minutes',
							'seconds',
						),
					),
					'count-up' => array(
						'value' => array(
							'',
						),
					),
					'data-count-up' => array(
						'value' => array(
							'',
						),
					),
					'end-date' => array(
						'value_regex' => '\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d(:[0-5]\\d(\\.\\d+)?)?(Z|[+-][0-1][0-9]:[0-5][0-9])',
					),
					'locale' => array(
						'value_casei' => array(
							'de',
							'en',
							'es',
							'fr',
							'id',
							'it',
							'ja',
							'ko',
							'nl',
							'pt',
							'ru',
							'th',
							'tr',
							'vi',
							'zh-cn',
							'zh-tw',
						),
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'offset-seconds' => array(
						'value_regex' => '-?\\d+',
					),
					'template' => array(),
					'timeleft-ms' => array(
						'value_regex' => '\\d+',
					),
					'timestamp-ms' => array(
						'value_regex' => '\\d{13}',
					),
					'timestamp-seconds' => array(
						'value_regex' => '\\d{10}',
					),
					'when-ended' => array(
						'value_casei' => array(
							'continue',
							'stop',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							1,
							4,
						),
					),
					'mandatory_oneof' => array(
						'end-date',
						'timeleft-ms',
						'timestamp-ms',
						'timestamp-seconds',
					),
					'requires_extension' => array(
						'amp-date-countdown',
					),
				),
			),
		),
		'amp-date-display' => array(
			array(
				'attr_spec_list' => array(
					'datetime' => array(
						'value_regex' => 'now|(\\d{4}-[01]\\d-[0-3]\\d(T[0-2]\\d:[0-5]\\d(:[0-6]\\d(\\.\\d\\d?\\d?)?)?(Z|[+-][0-1]\\d:[0-5]\\d)?)?)',
					),
					'display-in' => array(
						'value_casei' => array(
							'utc',
						),
					),
					'locale' => array(),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'offset-seconds' => array(
						'value_regex' => '-?\\d+',
					),
					'template' => array(),
					'timestamp-ms' => array(
						'value_regex' => '\\d+',
					),
					'timestamp-seconds' => array(
						'value_regex' => '\\d+',
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							1,
							4,
						),
					),
					'mandatory_oneof' => array(
						'datetime',
						'timestamp-ms',
						'timestamp-seconds',
					),
					'requires_extension' => array(
						'amp-date-display',
					),
				),
			),
		),
		'amp-date-picker' => array(
			array(
				'attr_spec_list' => array(
					'allow-blocked-end-date' => array(
						'value' => array(
							'',
						),
					),
					'allow-blocked-ranges' => array(
						'value' => array(
							'',
						),
					),
					'blocked' => array(),
					'data-amp-bind-max' => array(),
					'data-amp-bind-min' => array(),
					'data-amp-bind-src' => array(),
					'date' => array(),
					'day-size' => array(
						'value_regex' => '[0-9]+',
					),
					'first-day-of-week' => array(
						'value_regex' => '[0-6]',
					),
					'format' => array(),
					'fullscreen' => array(
						'value' => array(
							'',
						),
					),
					'hide-keyboard-shortcuts-panel' => array(
						'value' => array(
							'',
						),
					),
					'highlighted' => array(),
					'input-selector' => array(),
					'locale' => array(),
					'max' => array(),
					'media' => array(),
					'min' => array(),
					'mode' => array(
						'value_casei' => array(
							'static',
						),
					),
					'month-format' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'number-of-months' => array(
						'value_regex' => '[0-9]+',
					),
					'open-after-clear' => array(
						'value' => array(
							'',
						),
					),
					'open-after-select' => array(
						'value' => array(
							'',
						),
					),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
					'type' => array(
						'value_casei' => array(
							'single',
						),
					),
					'week-day-format' => array(),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							9,
							1,
							4,
						),
					),
					'requires_extension' => array(
						'amp-date-picker',
					),
					'spec_name' => 'amp-date-picker[type=single][mode=static]',
				),
			),
			array(
				'attr_spec_list' => array(
					'allow-blocked-end-date' => array(
						'value' => array(
							'',
						),
					),
					'allow-blocked-ranges' => array(
						'value' => array(
							'',
						),
					),
					'blocked' => array(),
					'data-amp-bind-max' => array(),
					'data-amp-bind-min' => array(),
					'data-amp-bind-src' => array(),
					'date' => array(),
					'day-size' => array(
						'value_regex' => '[0-9]+',
					),
					'first-day-of-week' => array(
						'value_regex' => '[0-6]',
					),
					'format' => array(),
					'hide-keyboard-shortcuts-panel' => array(
						'value' => array(
							'',
						),
					),
					'highlighted' => array(),
					'input-selector' => array(),
					'locale' => array(),
					'max' => array(),
					'media' => array(),
					'min' => array(),
					'mode' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'overlay',
						),
					),
					'month-format' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'number-of-months' => array(
						'value_regex' => '[0-9]+',
					),
					'open-after-clear' => array(
						'value' => array(
							'',
						),
					),
					'open-after-select' => array(
						'value' => array(
							'',
						),
					),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
					'touch-keyboard-editable' => array(
						'value' => array(
							'',
						),
					),
					'type' => array(
						'value_casei' => array(
							'single',
						),
					),
					'week-day-format' => array(),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							5,
							1,
						),
					),
					'requires_extension' => array(
						'amp-date-picker',
					),
					'spec_name' => 'amp-date-picker[type=single][mode=overlay]',
				),
			),
			array(
				'attr_spec_list' => array(
					'allow-blocked-end-date' => array(
						'value' => array(
							'',
						),
					),
					'allow-blocked-ranges' => array(
						'value' => array(
							'',
						),
					),
					'blocked' => array(),
					'data-amp-bind-max' => array(),
					'data-amp-bind-min' => array(),
					'data-amp-bind-src' => array(),
					'day-size' => array(
						'value_regex' => '[0-9]+',
					),
					'end-date' => array(),
					'end-input-selector' => array(),
					'first-day-of-week' => array(
						'value_regex' => '[0-6]',
					),
					'format' => array(),
					'fullscreen' => array(
						'value' => array(
							'',
						),
					),
					'hide-keyboard-shortcuts-panel' => array(
						'value' => array(
							'',
						),
					),
					'highlighted' => array(),
					'locale' => array(),
					'max' => array(),
					'maximum-nights' => array(
						'value_regex' => '[0-9]+',
					),
					'media' => array(),
					'min' => array(),
					'minimum-nights' => array(
						'value_regex' => '[0-9]+',
					),
					'mode' => array(
						'value_casei' => array(
							'static',
						),
					),
					'month-format' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'number-of-months' => array(
						'value_regex' => '[0-9]+',
					),
					'open-after-clear' => array(
						'value' => array(
							'',
						),
					),
					'open-after-select' => array(
						'value' => array(
							'',
						),
					),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
					'start-date' => array(),
					'start-input-selector' => array(),
					'type' => array(
						'mandatory' => true,
						'value_casei' => array(
							'range',
						),
					),
					'week-day-format' => array(),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							9,
							1,
							4,
						),
					),
					'requires_extension' => array(
						'amp-date-picker',
					),
					'spec_name' => 'amp-date-picker[type=range][mode=static]',
				),
			),
			array(
				'attr_spec_list' => array(
					'allow-blocked-end-date' => array(
						'value' => array(
							'',
						),
					),
					'allow-blocked-ranges' => array(
						'value' => array(
							'',
						),
					),
					'blocked' => array(),
					'data-amp-bind-max' => array(),
					'data-amp-bind-min' => array(),
					'data-amp-bind-src' => array(),
					'day-size' => array(
						'value_regex' => '[0-9]+',
					),
					'end-date' => array(),
					'end-input-selector' => array(),
					'first-day-of-week' => array(
						'value_regex' => '[0-6]',
					),
					'format' => array(),
					'hide-keyboard-shortcuts-panel' => array(
						'value' => array(
							'',
						),
					),
					'highlighted' => array(),
					'locale' => array(),
					'max' => array(),
					'maximum-nights' => array(
						'value_regex' => '[0-9]+',
					),
					'media' => array(),
					'min' => array(),
					'minimum-nights' => array(
						'value_regex' => '[0-9]+',
					),
					'mode' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'overlay',
						),
					),
					'month-format' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'number-of-months' => array(
						'value_regex' => '[0-9]+',
					),
					'open-after-clear' => array(
						'value' => array(
							'',
						),
					),
					'open-after-select' => array(
						'value' => array(
							'',
						),
					),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
					'start-date' => array(),
					'start-input-selector' => array(),
					'touch-keyboard-editable' => array(
						'value' => array(
							'',
						),
					),
					'type' => array(
						'mandatory' => true,
						'value_casei' => array(
							'range',
						),
					),
					'week-day-format' => array(),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							5,
							1,
						),
					),
					'requires_extension' => array(
						'amp-date-picker',
					),
					'spec_name' => 'amp-date-picker[type=range][mode=overlay]',
				),
			),
		),
		'amp-delight-player' => array(
			array(
				'attr_spec_list' => array(
					'data-content-id' => array(
						'mandatory' => true,
					),
					'dock' => array(
						'requires_extension' => array(
							'amp-video-docking',
						),
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							1,
							4,
						),
					),
					'requires_extension' => array(
						'amp-delight-player',
					),
				),
			),
		),
		'amp-embed' => array(
			array(
				'attr_spec_list' => array(
					'alt' => array(),
					'always-serve-npa' => array(),
					'block-rtc' => array(),
					'json' => array(),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'rtc-config' => array(),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_relative' => true,
							'protocol' => array(
								'https',
							),
						),
					),
					'type' => array(
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							8,
							9,
							1,
							4,
						),
					),
					'disallowed_ancestor' => array(
						'amp-app-banner',
					),
					'requires_extension' => array(
						'amp-ad',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-ad/',
				),
			),
			array(
				'attr_spec_list' => array(
					'alt' => array(),
					'always-serve-npa' => array(),
					'block-rtc' => array(),
					'data-multi-size' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'json' => array(),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'rtc-config' => array(),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_relative' => true,
							'protocol' => array(
								'https',
							),
						),
					),
					'type' => array(
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							8,
							9,
							1,
							4,
						),
					),
					'disallowed_ancestor' => array(
						'amp-app-banner',
						'amp-carousel',
						'amp-fx-flying-carpet',
						'amp-lightbox',
						'amp-sticky-ad',
					),
					'requires_extension' => array(
						'amp-ad',
					),
					'spec_name' => 'amp-embed with data-multi-size attribute',
					'spec_url' => 'https://amp.dev/documentation/components/amp-ad/',
				),
			),
		),
		'amp-embedly-card' => array(
			array(
				'attr_spec_list' => array(
					'data-url' => array(
						'mandatory' => true,
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							4,
						),
					),
					'requires_extension' => array(
						'amp-embedly-card',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-embedly-card/',
				),
			),
		),
		'amp-embedly-key' => array(
			array(
				'attr_spec_list' => array(
					'value' => array(
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							1,
						),
					),
					'requires_extension' => array(
						'amp-embedly-card',
					),
					'unique' => true,
				),
			),
		),
		'amp-experiment' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(
					'requires_extension' => array(
						'amp-experiment',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-experiment/',
					'unique' => true,
				),
			),
		),
		'amp-facebook' => array(
			array(
				'attr_spec_list' => array(
					'data-href' => array(
						'mandatory' => true,
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							1,
							4,
						),
					),
					'requires_extension' => array(
						'amp-facebook',
					),
				),
			),
		),
		'amp-facebook-comments' => array(
			array(
				'attr_spec_list' => array(
					'data-href' => array(
						'mandatory' => true,
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							1,
							4,
						),
					),
					'requires_extension' => array(
						'amp-facebook-comments',
					),
				),
			),
		),
		'amp-facebook-like' => array(
			array(
				'attr_spec_list' => array(
					'data-href' => array(
						'mandatory' => true,
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							1,
							4,
						),
					),
					'requires_extension' => array(
						'amp-facebook-like',
					),
				),
			),
		),
		'amp-facebook-page' => array(
			array(
				'attr_spec_list' => array(
					'data-href' => array(
						'mandatory' => true,
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							1,
							4,
						),
					),
					'requires_extension' => array(
						'amp-facebook-page',
					),
				),
			),
		),
		'amp-fit-text' => array(
			array(
				'attr_spec_list' => array(
					'max-font-size' => array(),
					'media' => array(),
					'min-font-size' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							9,
							1,
							4,
						),
					),
					'requires_extension' => array(
						'amp-fit-text',
					),
				),
			),
		),
		'amp-font' => array(
			array(
				'attr_spec_list' => array(
					'font-family' => array(
						'mandatory' => true,
					),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'on-error-add-class' => array(),
					'on-error-remove-class' => array(),
					'on-load-add-class' => array(),
					'on-load-remove-class' => array(),
					'timeout' => array(
						'value_regex' => '[0-9]+',
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							1,
						),
					),
					'requires_extension' => array(
						'amp-font',
					),
				),
			),
		),
		'amp-fx-flying-carpet' => array(
			array(
				'attr_spec_list' => array(
					'height' => array(
						'mandatory' => true,
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'requires_extension' => array(
						'amp-fx-flying-carpet',
					),
				),
			),
		),
		'amp-geo' => array(
			array(
				'attr_spec_list' => array(
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							1,
						),
					),
					'child_tags' => array(
						'first_child_tag_name_oneof' => array(
							'script',
						),
					),
					'requires_extension' => array(
						'amp-geo',
					),
					'unique' => true,
				),
			),
		),
		'amp-gfycat' => array(
			array(
				'attr_spec_list' => array(
					'data-gfyid' => array(
						'mandatory' => true,
					),
					'media' => array(),
					'noautoplay' => array(
						'value' => array(
							'',
						),
					),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							4,
						),
					),
					'requires_extension' => array(
						'amp-gfycat',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-gfycat/',
				),
			),
		),
		'amp-gist' => array(
			array(
				'attr_spec_list' => array(
					'data-gistid' => array(
						'mandatory' => true,
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							3,
						),
					),
					'requires_extension' => array(
						'amp-gist',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-gist/',
				),
			),
		),
		'amp-google-document-embed' => array(
			array(
				'attr_spec_list' => array(
					'data-amp-bind-src' => array(),
					'data-amp-bind-title' => array(),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'mandatory' => true,
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							9,
							1,
							4,
						),
					),
					'requires_extension' => array(
						'amp-google-document-embed',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-google-document-embed/',
				),
			),
		),
		'amp-google-read-aloud-player' => array(
			array(
				'attr_spec_list' => array(
					'data-ad-tag-url' => array(
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
					'data-api-key' => array(
						'mandatory' => true,
					),
					'data-call-to-action-label' => array(),
					'data-intro' => array(
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
					'data-locale' => array(
						'value_regex_casei' => '[a-z]{2}',
					),
					'data-outro' => array(
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
					'data-speakable' => array(
						'value' => array(
							'',
						),
					),
					'data-tracking-ids' => array(
						'mandatory' => true,
						'value_regex_casei' => '^UA-\\d+-\\d+(\\s*,\\s*UA-\\d+-\\d+)*$',
					),
					'data-url' => array(
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
					'data-voice' => array(
						'mandatory' => true,
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							2,
							3,
						),
					),
					'requires_extension' => array(
						'amp-google-read-aloud-player',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-google-read-aloud-player',
				),
			),
		),
		'amp-hulu' => array(
			array(
				'attr_spec_list' => array(
					'data-eid' => array(
						'mandatory' => true,
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							4,
						),
					),
					'requires_extension' => array(
						'amp-hulu',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-hulu/',
				),
			),
		),
		'amp-iframe' => array(
			array(
				'attr_spec_list' => array(
					'allow' => array(),
					'allowfullscreen' => array(
						'value' => array(
							'',
						),
					),
					'allowpaymentrequest' => array(
						'value' => array(
							'',
						),
					),
					'allowtransparency' => array(
						'value' => array(
							'',
						),
					),
					'data-amp-bind-src' => array(),
					'frameborder' => array(
						'value' => array(
							'0',
							'1',
						),
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'referrerpolicy' => array(),
					'resizable' => array(
						'value' => array(
							'',
						),
					),
					'sandbox' => array(),
					'scrolling' => array(
						'value' => array(
							'auto',
							'no',
							'yes',
						),
					),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_relative' => true,
							'protocol' => array(
								'data',
								'https',
							),
						),
					),
					'srcdoc' => array(),
					'tabindex' => array(
						'value_regex' => '-?\\d+',
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							9,
							1,
							4,
						),
					),
					'mandatory_oneof' => array(
						'src',
						'srcdoc',
					),
					'requires_extension' => array(
						'amp-iframe',
					),
				),
			),
		),
		'amp-iframely' => array(
			array(
				'attr_spec_list' => array(
					'data-border' => array(
						'value_regex' => '(\\d+)',
					),
					'data-domain' => array(
						'value_regex' => '^((?:[^\\.\\/]+\\.)?iframe\\.ly|if\\-cdn\\.com|iframely\\.net|oembed\\.vice\\.com|iframe\\.nbcnews\\.com)$',
					),
					'data-id' => array(),
					'data-img' => array(
						'value' => array(
							'',
						),
					),
					'data-key' => array(),
					'data-url' => array(),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'resizable' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							4,
							9,
						),
					),
					'mandatory_oneof' => array(
						'data-id',
						'data-url',
					),
					'requires_extension' => array(
						'amp-iframely',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-iframely',
				),
			),
		),
		'amp-ima-video' => array(
			array(
				'attr_spec_list' => array(
					'autoplay' => array(
						'value' => array(
							'',
						),
					),
					'data-src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_relative' => true,
							'protocol' => array(
								'https',
							),
						),
					),
					'data-tag' => array(
						'mandatory' => true,
						'value_url' => array(
							'allow_relative' => true,
							'protocol' => array(
								'https',
							),
						),
					),
					'dock' => array(
						'requires_extension' => array(
							'amp-video-docking',
						),
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'rotate-to-fullscreen' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							1,
							4,
						),
					),
					'requires_extension' => array(
						'amp-ima-video',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-ima-video/',
				),
			),
		),
		'amp-image-lightbox' => array(
			array(
				'attr_spec_list' => array(
					'controls' => array(),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							1,
						),
					),
					'requires_extension' => array(
						'amp-image-lightbox',
					),
				),
			),
		),
		'amp-image-slider' => array(
			array(
				'attr_spec_list' => array(
					'disable-hint-reappear' => array(),
					'initial-slider-position' => array(
						'value_regex' => '0(\\.[0-9]+)?|1(\\.0+)?',
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'step-size' => array(
						'value_regex' => '0(\\.[0-9]+)?|1(\\.0+)?',
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							2,
							9,
							1,
							4,
						),
					),
					'child_tags' => array(
						'child_tag_name_oneof' => array(
							'amp-img',
							'div',
						),
						'mandatory_min_num_child_tags' => 2,
					),
					'requires_extension' => array(
						'amp-image-slider',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-image-slider/',
				),
			),
		),
		'amp-img' => array(
			array(
				'attr_spec_list' => array(
					'alt' => array(),
					'attribution' => array(),
					'crossorigin' => array(),
					'data-amp-bind-alt' => array(),
					'data-amp-bind-attribution' => array(),
					'data-amp-bind-src' => array(),
					'data-amp-bind-srcset' => array(),
					'importance' => array(
						'value_casei' => array(
							'high',
							'low',
							'auto',
						),
					),
					'lightbox' => array(),
					'lightbox-thumbnail-id' => array(
						'value_regex_casei' => '^[a-z][a-z\\d_-]*',
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'object-fit' => array(),
					'object-position' => array(),
					'placeholder' => array(),
					'referrerpolicy' => array(),
					'src' => array(
						'alternative_names' => array(
							'srcset',
						),
						'disallowed_value_regex' => '__amp_source_origin',
						'mandatory' => true,
						'value_url' => array(
							'protocol' => array(
								'data',
								'http',
								'https',
							),
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							9,
							1,
							4,
						),
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-img/',
				),
			),
		),
		'amp-imgur' => array(
			array(
				'attr_spec_list' => array(
					'data-imgur-id' => array(
						'mandatory' => true,
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							1,
							4,
						),
					),
					'requires_extension' => array(
						'amp-imgur',
					),
				),
			),
		),
		'amp-inline-gallery' => array(
			array(
				'attr_spec_list' => array(
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							5,
						),
					),
					'requires_extension' => array(
						'amp-inline-gallery',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-inline-gallery/',
				),
			),
		),
		'amp-inline-gallery-pagination' => array(
			array(
				'attr_spec_list' => array(
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							9,
							1,
							4,
						),
					),
					'mandatory_ancestor' => 'amp-inline-gallery',
					'requires_extension' => array(
						'amp-inline-gallery',
					),
					'spec_name' => 'amp-inline-gallery-pagination',
					'spec_url' => 'https://amp.dev/documentation/components/amp-inline-gallery/',
				),
			),
			array(
				'attr_spec_list' => array(
					'inset' => array(
						'mandatory' => true,
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							1,
						),
					),
					'mandatory_ancestor' => 'amp-inline-gallery',
					'requires_extension' => array(
						'amp-inline-gallery',
					),
					'spec_name' => 'amp-inline-gallery-pagination [inset]',
					'spec_url' => 'https://amp.dev/documentation/components/amp-inline-gallery/',
				),
			),
		),
		'amp-inline-gallery-thumbnails' => array(
			array(
				'attr_spec_list' => array(
					'aspect-ratio' => array(
						'disallowed_value_regex' => '^0+(\\.0+)?$',
						'value_regex' => '\\d+(\\.\\d+)?',
					),
					'aspect-ratio-height' => array(
						'disallowed_value_regex' => '^0+(\\.0+)?$',
						'value_regex' => '\\d+(\\.\\d+)?',
					),
					'aspect-ratio-width' => array(
						'disallowed_value_regex' => '^0+(\\.0+)?$',
						'value_regex' => '\\d+(\\.\\d+)?',
					),
					'loop' => array(
						'value' => array(
							'true',
							'false',
							'',
						),
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							9,
							1,
							4,
						),
					),
					'mandatory_ancestor' => 'amp-inline-gallery',
					'requires_extension' => array(
						'amp-inline-gallery',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-inline-gallery/',
				),
			),
		),
		'amp-instagram' => array(
			array(
				'attr_spec_list' => array(
					'alt' => array(),
					'data-shortcode' => array(
						'mandatory' => true,
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							1,
							4,
						),
					),
					'requires_extension' => array(
						'amp-instagram',
					),
				),
			),
		),
		'amp-install-serviceworker' => array(
			array(
				'attr_spec_list' => array(
					'data-iframe-src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_relative' => true,
							'protocol' => array(
								'https',
							),
						),
					),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'mandatory' => true,
						'value_url' => array(
							'allow_relative' => true,
							'protocol' => array(
								'https',
							),
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							1,
						),
					),
					'requires_extension' => array(
						'amp-install-serviceworker',
					),
				),
			),
		),
		'amp-izlesene' => array(
			array(
				'attr_spec_list' => array(
					'data-videoid' => array(
						'mandatory' => true,
						'value_regex' => '[0-9]+',
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							4,
						),
					),
					'requires_extension' => array(
						'amp-izlesene',
					),
				),
			),
		),
		'amp-jwplayer' => array(
			array(
				'attr_spec_list' => array(
					'autoplay' => array(
						'value' => array(
							'',
						),
					),
					'data-media-id' => array(
						'value_regex_casei' => '[0-9a-z]{8}|outstream',
					),
					'data-player-id' => array(
						'mandatory' => true,
						'value_regex_casei' => '[0-9a-z]{8}',
					),
					'data-playlist-id' => array(
						'value_regex_casei' => '[0-9a-z]{8}',
					),
					'dock' => array(
						'requires_extension' => array(
							'amp-video-docking',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							1,
							4,
						),
					),
					'mandatory_oneof' => array(
						'data-media-id',
						'data-playlist-id',
					),
					'requires_extension' => array(
						'amp-jwplayer',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-jwplayer/',
				),
			),
		),
		'amp-kaltura-player' => array(
			array(
				'attr_spec_list' => array(
					'data-partner' => array(
						'mandatory' => true,
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							1,
							4,
						),
					),
					'requires_extension' => array(
						'amp-kaltura-player',
					),
				),
			),
		),
		'amp-layout' => array(
			array(
				'attr_spec_list' => array(
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							9,
							1,
							4,
							5,
						),
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-layout/',
				),
			),
		),
		'amp-lightbox' => array(
			array(
				'attr_spec_list' => array(
					'animate-in' => array(
						'value_casei' => array(
							'fade-in',
							'fly-in-bottom',
							'fly-in-top',
						),
					),
					'animation' => array(
						'value_casei' => array(
							'fade-in',
							'fly-in-bottom',
							'fly-in-top',
						),
					),
					'controls' => array(),
					'data-amp-bind-open' => array(),
					'from' => array(),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'scrollable' => array(),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							1,
						),
					),
					'requires_extension' => array(
						'amp-lightbox',
					),
				),
			),
		),
		'amp-link-rewriter' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							1,
						),
					),
					'child_tags' => array(
						'first_child_tag_name_oneof' => array(
							'script',
						),
						'mandatory_num_child_tags' => 1,
					),
					'requires_extension' => array(
						'amp-link-rewriter',
					),
					'unique' => true,
				),
			),
		),
		'amp-list' => array(
			array(
				'attr_spec_list' => array(
					'auto-resize' => array(
						'value' => array(
							'',
						),
					),
					'binding' => array(
						'value' => array(
							'always',
							'no',
							'refresh',
						),
					),
					'credentials' => array(),
					'data-amp-bind-is-layout-container' => array(),
					'data-amp-bind-src' => array(),
					'diffable' => array(
						'value' => array(
							'',
						),
					),
					'items' => array(),
					'load-more' => array(
						'value' => array(
							'auto',
							'manual',
						),
					),
					'load-more-bookmark' => array(),
					'max-items' => array(),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'reset-on-refresh' => array(
						'value' => array(
							'',
							'always',
							'fetch',
						),
					),
					'single-item' => array(),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_relative' => true,
							'protocol' => array(
								'https',
								'amp-state',
								'amp-script',
							),
						),
					),
					'template' => array(),
					'xssi-prefix' => array(),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							1,
							4,
						),
					),
					'mandatory_anyof' => array(
						'data-amp-bind-src',
						'src',
					),
					'requires_extension' => array(
						'amp-list',
					),
				),
			),
		),
		'amp-list-load-more' => array(
			array(
				'attr_spec_list' => array(
					'load-more-button' => array(
						'value' => array(
							'',
						),
					),
					'load-more-end' => array(
						'value' => array(
							'',
						),
					),
					'load-more-failed' => array(
						'value' => array(
							'',
						),
					),
					'load-more-loading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_oneof' => array(
						'load-more-button',
						'load-more-end',
						'load-more-failed',
						'load-more-loading',
					),
					'mandatory_parent' => 'amp-list',
					'requires_extension' => array(
						'amp-list',
					),
				),
			),
		),
		'amp-live-list' => array(
			array(
				'attr_spec_list' => array(
					'data-max-items-per-page' => array(
						'mandatory' => true,
						'value_regex' => '\\d+',
					),
					'data-poll-interval' => array(
						'value_regex' => '\\d{5,}',
					),
					'disabled' => array(
						'value' => array(
							'',
						),
					),
					'id' => array(
						'disallowed_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|AMP|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|i-amphtml-\\S*|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)',
						'mandatory' => true,
					),
					'sort' => array(
						'value' => array(
							'ascending',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							5,
							3,
						),
					),
					'reference_points' => array(
						'AMP-LIVE-LIST [items]' => array(
							'mandatory' => true,
							'unique' => true,
						),
						'AMP-LIVE-LIST [pagination]' => array(
							'mandatory' => false,
							'unique' => true,
						),
						'AMP-LIVE-LIST [update]' => array(
							'mandatory' => true,
							'unique' => true,
						),
					),
					'requires_extension' => array(
						'amp-live-list',
					),
				),
			),
		),
		'amp-mathml' => array(
			array(
				'attr_spec_list' => array(
					'data-formula' => array(
						'mandatory' => true,
					),
					'inline' => array(),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							5,
						),
					),
					'requires_extension' => array(
						'amp-mathml',
					),
				),
			),
		),
		'amp-mega-menu' => array(
			array(
				'attr_spec_list' => array(
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							3,
						),
					),
					'child_tags' => array(
						'child_tag_name_oneof' => array(
							'nav',
							'amp-list',
						),
						'mandatory_num_child_tags' => 1,
					),
					'descendant_tag_list' => 'amp-mega-menu-allowed-descendants',
					'reference_points' => array(
						'AMP-MEGA-MENU > AMP-LIST' => array(
							'mandatory' => false,
							'unique' => false,
						),
						'AMP-MEGA-MENU > NAV' => array(
							'mandatory' => false,
							'unique' => false,
						),
					),
					'requires_extension' => array(
						'amp-mega-menu',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-mega-menu/',
				),
			),
		),
		'amp-megaphone' => array(
			array(
				'attr_spec_list' => array(
					'data-episodes' => array(
						'value_regex' => '[0-9]+',
					),
					'data-light' => array(
						'value' => array(
							'',
						),
					),
					'data-playlist' => array(
						'dispatch_key' => 1,
						'mandatory' => true,
						'value_regex' => '[A-Za-z0-9]+',
					),
					'data-sharing' => array(
						'value' => array(
							'',
						),
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							2,
							3,
						),
					),
					'requires_extension' => array(
						'amp-megaphone',
					),
					'spec_name' => 'amp-megaphone [data-playlist]',
				),
			),
			array(
				'attr_spec_list' => array(
					'data-episode' => array(
						'dispatch_key' => 1,
						'mandatory' => true,
						'value_regex' => '[A-Za-z0-9]+',
					),
					'data-light' => array(
						'value' => array(
							'',
						),
					),
					'data-sharing' => array(
						'value' => array(
							'',
						),
					),
					'data-start' => array(
						'value_regex' => '\\d+(\\.\\d+)?',
					),
					'data-tile' => array(
						'value' => array(
							'',
						),
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							2,
							3,
						),
					),
					'requires_extension' => array(
						'amp-megaphone',
					),
					'spec_name' => 'amp-megaphone [data-episode]',
				),
			),
		),
		'amp-minute-media-player' => array(
			array(
				'attr_spec_list' => array(
					'autoplay' => array(),
					'data-content-id' => array(),
					'data-content-type' => array(
						'mandatory' => true,
						'value' => array(
							'curated',
							'semantic',
							'specific',
						),
					),
					'data-minimum-date-factor' => array(),
					'data-scanned-element' => array(),
					'data-scanned-element-type' => array(
						'value' => array(
							'className',
							'id',
							'tag',
						),
					),
					'data-scoped-keywords' => array(),
					'data-tags' => array(),
					'dock' => array(
						'requires_extension' => array(
							'amp-video-docking',
						),
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							4,
						),
					),
					'requires_extension' => array(
						'amp-minute-media-player',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-minute-media-player/',
				),
			),
		),
		'amp-mowplayer' => array(
			array(
				'attr_spec_list' => array(
					'autoplay' => array(),
					'data-mediaid' => array(
						'mandatory' => true,
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							1,
							4,
						),
					),
					'requires_extension' => array(
						'amp-mowplayer',
					),
				),
			),
		),
		'amp-nested-menu' => array(
			array(
				'attr_spec_list' => array(
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'side' => array(
						'value' => array(
							'left',
							'right',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
						),
					),
					'descendant_tag_list' => 'amp-nested-menu-allowed-descendants',
					'mandatory_ancestor' => 'amp-sidebar',
					'requires_extension' => array(
						'amp-sidebar',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-nested-menu/',
				),
			),
		),
		'amp-next-page' => array(
			array(
				'attr_spec_list' => array(
					'deep-parsing' => array(),
					'max-pages' => array(),
				),
				'tag_spec' => array(
					'reference_points' => array(
						'AMP-NEXT-PAGE > SCRIPT[type=application/json]' => array(
							'mandatory' => true,
							'unique' => true,
						),
						'AMP-NEXT-PAGE > [footer]' => array(
							'mandatory' => false,
							'unique' => true,
						),
						'AMP-NEXT-PAGE > [recommendation-box]' => array(
							'mandatory' => false,
							'unique' => true,
						),
						'AMP-NEXT-PAGE > [separator]' => array(
							'mandatory' => false,
							'unique' => true,
						),
					),
					'requires_extension' => array(
						'amp-next-page',
					),
					'spec_name' => 'amp-next-page with inline config',
					'spec_url' => 'https://amp.dev/documentation/components/amp-next-page/',
					'unique' => true,
				),
			),
			array(
				'attr_spec_list' => array(
					'deep-parsing' => array(),
					'max-pages' => array(),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'mandatory' => true,
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
					'xssi-prefix' => array(),
				),
				'tag_spec' => array(
					'reference_points' => array(
						'AMP-NEXT-PAGE > SCRIPT[type=application/json]' => array(
							'mandatory' => false,
							'unique' => true,
						),
						'AMP-NEXT-PAGE > [footer]' => array(
							'mandatory' => false,
							'unique' => true,
						),
						'AMP-NEXT-PAGE > [recommendation-box]' => array(
							'mandatory' => false,
							'unique' => true,
						),
						'AMP-NEXT-PAGE > [separator]' => array(
							'mandatory' => false,
							'unique' => true,
						),
					),
					'requires_extension' => array(
						'amp-next-page',
					),
					'spec_name' => 'amp-next-page with src attribute',
					'spec_url' => 'https://amp.dev/documentation/components/amp-next-page/',
					'unique' => true,
				),
			),
			array(
				'attr_spec_list' => array(
					'data-client' => array(
						'mandatory' => true,
					),
					'data-slot' => array(
						'mandatory' => true,
					),
					'deep-parsing' => array(),
					'max-pages' => array(),
					'type' => array(
						'mandatory' => true,
						'value' => array(
							'adsense',
						),
					),
				),
				'tag_spec' => array(
					'reference_points' => array(
						'AMP-NEXT-PAGE > SCRIPT[type=application/json]' => array(
							'mandatory' => false,
							'unique' => true,
						),
						'AMP-NEXT-PAGE > [footer]' => array(
							'mandatory' => false,
							'unique' => true,
						),
						'AMP-NEXT-PAGE > [recommendation-box]' => array(
							'mandatory' => false,
							'unique' => true,
						),
						'AMP-NEXT-PAGE > [separator]' => array(
							'mandatory' => false,
							'unique' => true,
						),
					),
					'requires_extension' => array(
						'amp-next-page',
					),
					'spec_name' => 'amp-next-page [type=adsense]',
					'spec_url' => 'https://amp.dev/documentation/components/amp-next-page/',
					'unique' => true,
				),
			),
		),
		'amp-nexxtv-player' => array(
			array(
				'attr_spec_list' => array(
					'data-client' => array(
						'mandatory' => true,
					),
					'data-exit-mode' => array(
						'value' => array(
							'load',
							'loop',
							'replay',
						),
					),
					'data-mediaid' => array(
						'mandatory' => true,
						'value_regex' => '[^=\\/?:]+',
					),
					'data-mode' => array(
						'value' => array(
							'api',
							'static',
						),
					),
					'data-streamtype' => array(
						'value' => array(
							'album',
							'audio',
							'audioalbum',
							'collection',
							'live',
							'playlist',
							'playlist-marked',
							'radio',
							'set',
							'video',
						),
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							1,
							4,
						),
					),
					'requires_extension' => array(
						'amp-nexxtv-player',
					),
				),
			),
		),
		'amp-o2-player' => array(
			array(
				'attr_spec_list' => array(
					'data-bcid' => array(
						'mandatory' => true,
					),
					'data-pid' => array(
						'mandatory' => true,
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							1,
							4,
						),
					),
					'requires_extension' => array(
						'amp-o2-player',
					),
				),
			),
		),
		'amp-onetap-google' => array(
			array(
				'attr_spec_list' => array(
					'data-src' => array(
						'mandatory' => true,
						'value_url' => array(
							'protocol' => array(
								'https',
							),
						),
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							1,
						),
					),
					'requires_extension' => array(
						'amp-onetap-google',
					),
					'unique' => true,
				),
			),
		),
		'amp-ooyala-player' => array(
			array(
				'attr_spec_list' => array(
					'data-embedcode' => array(
						'mandatory' => true,
					),
					'data-pcode' => array(
						'mandatory' => true,
					),
					'data-playerid' => array(
						'mandatory' => true,
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							7,
							4,
						),
					),
					'requires_extension' => array(
						'amp-ooyala-player',
					),
				),
			),
		),
		'amp-orientation-observer' => array(
			array(
				'attr_spec_list' => array(
					'alpha-range' => array(
						'value_regex' => '(\\d+)\\s{1}(\\d+)',
					),
					'beta-range' => array(
						'value_regex' => '(\\d+)\\s{1}(\\d+)',
					),
					'gamma-range' => array(
						'value_regex' => '(\\d+)\\s{1}(\\d+)',
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'smoothing' => array(
						'value_regex' => '[0-9]+|',
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							1,
						),
					),
					'requires_extension' => array(
						'amp-orientation-observer',
					),
				),
			),
		),
		'amp-pan-zoom' => array(
			array(
				'attr_spec_list' => array(
					'disable-double-tap' => array(
						'value' => array(
							'',
						),
					),
					'initial-scale' => array(
						'value_regex' => '[0-9]+(\\.[0-9]+)?',
					),
					'initial-x' => array(
						'value_regex' => '[0-9]+',
					),
					'initial-y' => array(
						'value_regex' => '[0-9]+',
					),
					'max-scale' => array(
						'value_regex' => '[0-9]+(\\.[0-9]+)?',
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'reset-on-resize' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							4,
						),
					),
					'requires_extension' => array(
						'amp-pan-zoom',
					),
				),
			),
		),
		'amp-pinterest' => array(
			array(
				'attr_spec_list' => array(
					'alt' => array(),
					'data-do' => array(
						'mandatory' => true,
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							1,
							4,
						),
					),
					'requires_extension' => array(
						'amp-pinterest',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-pinterest/',
				),
			),
		),
		'amp-pixel' => array(
			array(
				'attr_spec_list' => array(
					'allow-ssr-img' => array(),
					'attributionsrc' => array(
						'value_url' => array(
							'allow_empty' => true,
							'protocol' => array(
								'https',
							),
						),
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'referrerpolicy' => array(
						'value' => array(
							'no-referrer',
						),
					),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'mandatory' => true,
						'value_url' => array(
							'allow_empty' => true,
							'allow_relative' => true,
							'protocol' => array(
								'https',
							),
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'defines_default_height' => true,
						'defines_default_width' => true,
						'supported_layouts' => array(
							2,
							1,
						),
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-pixel/',
				),
			),
		),
		'amp-playbuzz' => array(
			array(
				'attr_spec_list' => array(
					'data-comments' => array(
						'value_casei' => array(
							'false',
							'true',
						),
					),
					'data-item' => array(),
					'data-item-info' => array(
						'value_casei' => array(
							'false',
							'true',
						),
					),
					'data-share-buttons' => array(
						'value_casei' => array(
							'false',
							'true',
						),
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'src' => array(),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							4,
							3,
						),
					),
					'mandatory_oneof' => array(
						'data-item',
						'src',
					),
					'requires_extension' => array(
						'amp-playbuzz',
					),
				),
			),
		),
		'amp-position-observer' => array(
			array(
				'attr_spec_list' => array(
					'intersection-ratios' => array(
						'value_regex' => '^([0]*?\\.\\d*$|1$|0$)|([0]*?\\.\\d*|1|0)\\s{1}([0]*?\\.\\d*$|1$|0$)',
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'once' => array(
						'value' => array(
							'',
						),
					),
					'target' => array(),
					'viewport-margins' => array(
						'value_regex' => '^(\\d+$|\\d+px$|\\d+vh$)|((\\d+|\\d+px|\\d+vh)\\s{1}(\\d+$|\\d+px$|\\d+vh$))',
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							1,
						),
					),
					'requires_extension' => array(
						'amp-position-observer',
					),
				),
			),
		),
		'amp-powr-player' => array(
			array(
				'attr_spec_list' => array(
					'autoplay' => array(),
					'data-account' => array(
						'mandatory' => true,
						'value_regex' => '[0-9a-zA-Z-]+',
					),
					'data-amp-bind-data-referrer' => array(),
					'data-player' => array(
						'mandatory' => true,
						'value_regex' => '[0-9a-zA-Z-]+',
					),
					'data-terms' => array(),
					'data-video' => array(
						'value_regex' => '[0-9a-zA-Z-]+',
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							1,
							4,
						),
					),
					'mandatory_oneof' => array(
						'data-terms',
						'data-video',
					),
					'requires_extension' => array(
						'amp-powr-player',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-powr-player/',
				),
			),
		),
		'amp-reach-player' => array(
			array(
				'attr_spec_list' => array(
					'data-embed-id' => array(
						'mandatory' => true,
						'value_regex' => '[0-9a-z-]+',
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							4,
						),
					),
					'requires_extension' => array(
						'amp-reach-player',
					),
				),
			),
		),
		'amp-recaptcha-input' => array(
			array(
				'attr_spec_list' => array(
					'data-action' => array(
						'mandatory' => true,
					),
					'data-sitekey' => array(
						'mandatory' => true,
					),
					'name' => array(
						'disallowed_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)',
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							1,
						),
					),
					'mandatory_ancestor' => 'form',
					'requires_extension' => array(
						'amp-form',
						'amp-recaptcha-input',
					),
				),
			),
		),
		'amp-reddit' => array(
			array(
				'attr_spec_list' => array(
					'data-embedlive' => array(
						'value_casei' => array(
							'false',
							'true',
						),
					),
					'data-embedparent' => array(
						'value_casei' => array(
							'false',
							'true',
						),
					),
					'data-embedtype' => array(
						'mandatory' => true,
						'value_casei' => array(
							'comment',
							'post',
						),
					),
					'data-src' => array(
						'mandatory' => true,
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							1,
							4,
						),
					),
					'requires_extension' => array(
						'amp-reddit',
					),
				),
			),
		),
		'amp-render' => array(
			array(
				'attr_spec_list' => array(
					'binding' => array(
						'value' => array(
							'always',
							'never',
							'no',
							'refresh',
						),
					),
					'credentials' => array(),
					'data-amp-bind-src' => array(),
					'key' => array(),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'protocol' => array(
								'amp-script',
								'amp-state',
								'https',
							),
						),
					),
					'template' => array(),
					'xssi-prefix' => array(),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							5,
							6,
							2,
							3,
							7,
							1,
							4,
						),
					),
					'mandatory_anyof' => array(
						'data-amp-bind-src',
						'src',
					),
					'requires_extension' => array(
						'amp-render',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-render/',
				),
			),
		),
		'amp-riddle-quiz' => array(
			array(
				'attr_spec_list' => array(
					'data-riddle-id' => array(
						'mandatory' => true,
						'value_regex' => '[0-9]+',
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							4,
						),
					),
					'requires_extension' => array(
						'amp-riddle-quiz',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-riddle-quiz/',
				),
			),
		),
		'amp-script' => array(
			array(
				'attr_spec_list' => array(
					'max-age' => array(
						'value_regex' => '[0-9]+',
					),
					'media' => array(),
					'nodom' => array(
						'value' => array(
							'',
						),
					),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'sandbox' => array(),
					'sandboxed' => array(
						'value' => array(
							'',
						),
					),
					'script' => array(),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							5,
							6,
							2,
							3,
							7,
							9,
							1,
							4,
						),
					),
					'disallowed_ancestor' => array(
						'amp-script',
					),
					'mandatory_oneof' => array(
						'script',
						'src',
					),
					'requires_extension' => array(
						'amp-script',
					),
				),
			),
		),
		'amp-selector' => array(
			array(
				'attr_spec_list' => array(
					'data-amp-bind-disabled' => array(),
					'data-amp-bind-selected' => array(),
					'disabled' => array(
						'value' => array(
							'',
						),
					),
					'form' => array(),
					'keyboard-select-mode' => array(
						'value_casei' => array(
							'focus',
							'none',
							'select',
						),
					),
					'media' => array(),
					'multiple' => array(
						'value' => array(
							'',
						),
					),
					'name' => array(
						'disallowed_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)',
					),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							1,
							4,
							5,
						),
					),
					'disallowed_ancestor' => array(
						'amp-selector',
					),
					'reference_points' => array(
						'AMP-SELECTOR child' => array(
							'mandatory' => false,
							'unique' => false,
						),
						'AMP-SELECTOR option' => array(
							'mandatory' => false,
							'unique' => false,
						),
					),
					'requires_extension' => array(
						'amp-selector',
					),
				),
			),
		),
		'amp-sidebar' => array(
			array(
				'attr_spec_list' => array(
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'side' => array(
						'value' => array(
							'left',
							'right',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							1,
						),
					),
					'disallowed_ancestor' => array(
						'amp-story',
					),
					'requires_extension' => array(
						'amp-sidebar',
					),
					'spec_name' => 'amp-sidebar',
					'spec_url' => 'https://amp.dev/documentation/components/amp-sidebar/',
				),
			),
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							1,
						),
					),
					'mandatory_parent' => 'amp-story',
					'requires_extension' => array(
						'amp-sidebar',
					),
					'spec_name' => 'amp-story >> amp-sidebar',
					'spec_url' => 'https://amp.dev/documentation/components/amp-sidebar/',
				),
			),
		),
		'amp-skimlinks' => array(
			array(
				'attr_spec_list' => array(
					'custom-redirect-domain' => array(),
					'custom-tracking-id' => array(
						'value_regex_casei' => '^.{0,50}$',
					),
					'excluded-domains' => array(),
					'link-selector' => array(),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'publisher-code' => array(
						'mandatory' => true,
						'value_regex_casei' => '^[0-9]+X[0-9]+$',
					),
					'tracking' => array(
						'value' => array(
							'false',
							'true',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							1,
						),
					),
					'requires_extension' => array(
						'amp-skimlinks',
					),
				),
			),
		),
		'amp-slikeplayer' => array(
			array(
				'attr_spec_list' => array(
					'data-apikey' => array(
						'mandatory' => true,
					),
					'data-videoid' => array(
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							5,
							6,
							2,
							3,
							4,
						),
					),
					'requires_extension' => array(
						'amp-slikeplayer',
					),
					'spec_url' => 'https://developers.slike.in/html5/',
				),
			),
		),
		'amp-smartlinks' => array(
			array(
				'attr_spec_list' => array(
					'exclusive-links' => array(
						'value' => array(
							'',
						),
					),
					'link-attribute' => array(),
					'link-selector' => array(),
					'linkmate' => array(
						'value' => array(
							'',
						),
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'nrtv-account-name' => array(
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							1,
						),
					),
					'requires_extension' => array(
						'amp-smartlinks',
					),
				),
			),
		),
		'amp-social-share' => array(
			array(
				'attr_spec_list' => array(
					'data-share-endpoint' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'ftp',
								'http',
								'https',
								'mailto',
								'bbmi',
								'fb-me',
								'fb-messenger',
								'intent',
								'line',
								'skype',
								'sms',
								'snapchat',
								'tel',
								'tg',
								'threema',
								'viber',
								'wh',
								'whatsapp',
							),
						),
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'type' => array(
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							5,
							6,
							2,
							3,
							7,
							1,
							4,
						),
					),
					'requires_extension' => array(
						'amp-social-share',
					),
				),
			),
		),
		'amp-soundcloud' => array(
			array(
				'attr_spec_list' => array(
					'data-color' => array(
						'value_regex_casei' => '([0-9a-f]{3}){1,2}',
					),
					'data-playlistid' => array(
						'value_regex' => '[0-9]+',
					),
					'data-secret-token' => array(
						'value_regex' => '[A-Za-z0-9_-]+',
					),
					'data-trackid' => array(
						'value_regex' => '[0-9]+',
					),
					'data-visual' => array(
						'value_casei' => array(
							'false',
							'true',
						),
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							9,
							1,
							4,
						),
					),
					'mandatory_oneof' => array(
						'data-playlistid',
						'data-trackid',
					),
					'requires_extension' => array(
						'amp-soundcloud',
					),
				),
			),
		),
		'amp-springboard-player' => array(
			array(
				'attr_spec_list' => array(
					'data-content-id' => array(
						'mandatory' => true,
					),
					'data-domain' => array(
						'mandatory' => true,
					),
					'data-items' => array(
						'mandatory' => true,
					),
					'data-mode' => array(
						'mandatory' => true,
						'value_casei' => array(
							'playlist',
							'video',
						),
					),
					'data-player-id' => array(
						'mandatory' => true,
						'value_regex_casei' => '[a-z0-9]+',
					),
					'data-site-id' => array(
						'mandatory' => true,
						'value_regex' => '[0-9]+',
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							7,
							4,
						),
					),
					'requires_extension' => array(
						'amp-springboard-player',
					),
				),
			),
		),
		'amp-state' => array(
			array(
				'attr_spec_list' => array(
					'credentials' => array(),
					'data-amp-bind-src' => array(),
					'id' => array(
						'disallowed_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|AMP|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|i-amphtml-\\S*|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)',
						'mandatory' => true,
					),
					'overridable' => array(),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_relative' => true,
							'protocol' => array(
								'https',
							),
						),
					),
				),
				'tag_spec' => array(
					'child_tags' => array(
						'first_child_tag_name_oneof' => array(
							'script',
						),
					),
					'requires_extension' => array(
						'amp-bind',
					),
					'spec_name' => 'amp-state',
					'spec_url' => 'https://amp.dev/documentation/components/amp-bind/',
				),
			),
		),
		'amp-sticky-ad' => array(
			array(
				'attr_spec_list' => array(
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							1,
						),
					),
					'child_tags' => array(
						'first_child_tag_name_oneof' => array(
							'amp-ad',
						),
						'mandatory_num_child_tags' => 1,
					),
					'disallowed_ancestor' => array(
						'amp-app-banner',
					),
					'requires_extension' => array(
						'amp-sticky-ad',
					),
					'unique' => true,
				),
			),
		),
		'amp-story' => array(
			array(
				'attr_spec_list' => array(
					'background-audio' => array(
						'value_url' => array(
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'desktop-aspect-ratio' => array(
						'value_regex' => '\\d+:\\d+',
					),
					'entity' => array(),
					'entity-logo-src' => array(
						'value_url' => array(
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'entity-url' => array(
						'value_url' => array(
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'live-story' => array(
						'value' => array(
							'',
						),
					),
					'live-story-disabled' => array(
						'value' => array(
							'',
						),
					),
					'poster-landscape-src' => array(
						'value_url' => array(
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'poster-portrait-src' => array(
						'mandatory' => true,
						'value_url' => array(
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'poster-square-src' => array(
						'value_url' => array(
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'publisher' => array(
						'mandatory' => true,
					),
					'publisher-logo-src' => array(
						'mandatory' => true,
						'value_url' => array(
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'standalone' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'supports-landscape' => array(
						'value' => array(
							'',
						),
					),
					'title' => array(
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'child_tags' => array(
						'child_tag_name_oneof' => array(
							'amp-analytics',
							'amp-consent',
							'amp-geo',
							'amp-pixel',
							'amp-sidebar',
							'amp-story-auto-ads',
							'amp-story-auto-analytics',
							'amp-story-bookend',
							'amp-story-page',
							'amp-story-social-share',
							'amp-story-subscriptions',
						),
						'mandatory_min_num_child_tags' => 1,
					),
					'mandatory_parent' => 'body',
					'requires_extension' => array(
						'amp-story',
					),
					'siblings_disallowed' => true,
				),
			),
		),
		'amp-story-360' => array(
			array(
				'attr_spec_list' => array(
					'controls' => array(
						'value' => array(
							'gyroscope',
						),
					),
					'duration' => array(
						'value_regex' => '([0-9\\.]+)\\s*(s|ms)',
					),
					'heading-end' => array(
						'value_regex' => '-?\\d+\\.?\\d*',
					),
					'heading-start' => array(
						'value_regex' => '-?\\d+\\.?\\d*',
					),
					'pitch-end' => array(
						'value_regex' => '-?\\d+\\.?\\d*',
					),
					'pitch-start' => array(
						'value_regex' => '-?\\d+\\.?\\d*',
					),
					'scene-heading' => array(
						'value_regex' => '-?\\d+\\.?\\d*',
					),
					'scene-pitch' => array(
						'value_regex' => '-?\\d+\\.?\\d*',
					),
					'scene-roll' => array(
						'value_regex' => '-?\\d+\\.?\\d*',
					),
					'zoom-end' => array(
						'value_regex' => '\\d+\\.?\\d*',
					),
					'zoom-start' => array(
						'value_regex' => '\\d+\\.?\\d*',
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							1,
						),
					),
					'child_tags' => array(
						'child_tag_name_oneof' => array(
							'amp-img',
							'amp-video',
						),
						'mandatory_num_child_tags' => 1,
					),
					'mandatory_ancestor' => 'amp-story',
					'requires_extension' => array(
						'amp-story-360',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-story-360',
				),
			),
		),
		'amp-story-animation' => array(
			array(
				'attr_spec_list' => array(
					'animate-in-after' => array(),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'trigger' => array(
						'mandatory' => true,
						'value' => array(
							'visibility',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							1,
						),
					),
					'child_tags' => array(
						'child_tag_name_oneof' => array(
							'script',
						),
						'mandatory_num_child_tags' => 1,
					),
					'mandatory_parent' => 'amp-story-page',
					'requires_extension' => array(
						'amp-story',
					),
				),
			),
		),
		'amp-story-audio-sticker' => array(
			array(
				'attr_spec_list' => array(
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'size' => array(
						'value' => array(
							'small',
							'large',
						),
					),
					'sticker' => array(
						'value' => array(
							'headphone-cat',
							'tape-player',
							'loud-speaker',
							'audio-cloud',
						),
					),
					'sticker-style' => array(
						'value' => array(
							'outline',
							'dropshadow',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							5,
						),
					),
					'mandatory_parent' => 'amp-story-grid-layer',
					'requires_extension' => array(
						'amp-story-audio-sticker',
					),
				),
			),
		),
		'amp-story-audio-sticker-posttap' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							5,
						),
					),
					'descendant_tag_list' => 'amp-story-audio-sticker-allowed-descendants',
					'mandatory_parent' => 'amp-story-audio-sticker',
					'requires_extension' => array(
						'amp-story-audio-sticker',
					),
				),
			),
		),
		'amp-story-audio-sticker-pretap' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							5,
						),
					),
					'descendant_tag_list' => 'amp-story-audio-sticker-allowed-descendants',
					'mandatory_parent' => 'amp-story-audio-sticker',
					'requires_extension' => array(
						'amp-story-audio-sticker',
					),
				),
			),
		),
		'amp-story-auto-ads' => array(
			array(
				'attr_spec_list' => array(
					'src' => array(
						'value_url' => array(
							'protocol' => array(
								'https',
							),
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'amp-story',
					'requires_extension' => array(
						'amp-story-auto-ads',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-story-auto-ads/',
					'unique' => true,
				),
			),
		),
		'amp-story-auto-analytics' => array(
			array(
				'attr_spec_list' => array(
					'gtag-id' => array(
						'mandatory' => true,
						'value_regex' => '[A-Z]{1,2}-[A-Z0-9-]+',
					),
				),
				'tag_spec' => array(
					'requires_extension' => array(
						'amp-story-auto-analytics',
					),
				),
			),
		),
		'amp-story-bookend' => array(
			array(
				'attr_spec_list' => array(
					'layout' => array(
						'mandatory' => true,
						'value' => array(
							'nodisplay',
						),
					),
					'src' => array(
						'value_url' => array(
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
				),
				'tag_spec' => array(
					'descendant_tag_list' => 'amp-story-bookend-allowed-descendants',
					'mandatory_ancestor' => 'amp-story',
				),
			),
		),
		'amp-story-captions' => array(
			array(
				'attr_spec_list' => array(
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'style-preset' => array(
						'value' => array(
							'default',
							'appear',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							5,
							6,
							2,
							3,
							7,
							8,
							9,
							4,
						),
					),
					'child_tags' => array(
						'mandatory_num_child_tags' => 0,
					),
					'mandatory_ancestor' => 'amp-story',
					'requires_extension' => array(
						'amp-story-captions',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-story-captions',
				),
			),
		),
		'amp-story-consent' => array(
			array(
				'attr_spec_list' => array(
					'id' => array(
						'disallowed_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|AMP|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|i-amphtml-\\S*|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)',
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							1,
						),
					),
					'child_tags' => array(
						'child_tag_name_oneof' => array(
							'script',
						),
						'mandatory_num_child_tags' => 1,
					),
					'mandatory_parent' => 'amp-consent',
					'requires_extension' => array(
						'amp-consent',
						'amp-story',
					),
				),
			),
		),
		'amp-story-cta-layer' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(
					'descendant_tag_list' => 'amp-story-cta-layer-allowed-descendants',
					'mandatory_ancestor' => 'amp-story-page',
					'reference_points' => array(
						'AMP-STORY-CTA-LAYER animate-in' => array(
							'mandatory' => false,
							'unique' => false,
						),
					),
				),
			),
		),
		'amp-story-grid-layer' => array(
			array(
				'attr_spec_list' => array(
					'anchor' => array(
						'value_regex' => 'top|bottom|left|right|(top|bottom)[ -](left|right)|(left|right)[ -](top|bottom)',
					),
					'aspect-ratio' => array(
						'value_regex' => '\\d+:\\d+',
					),
					'position' => array(
						'value' => array(
							'landscape-half-left',
							'landscape-half-right',
						),
					),
					'preset' => array(
						'value' => array(
							'2021-background',
							'2021-foreground',
						),
					),
					'template' => array(
						'mandatory' => true,
						'value' => array(
							'fill',
							'horizontal',
							'thirds',
							'vertical',
						),
					),
				),
				'tag_spec' => array(
					'descendant_tag_list' => 'amp-story-grid-layer-allowed-descendants',
					'mandatory_ancestor' => 'amp-story-page',
					'reference_points' => array(
						'AMP-STORY-GRID-LAYER animate-in' => array(
							'mandatory' => false,
							'unique' => false,
						),
						'AMP-STORY-GRID-LAYER default' => array(
							'mandatory' => false,
							'unique' => false,
						),
					),
				),
			),
		),
		'amp-story-interactive-binary-poll' => array(
			array(
				'attr_spec_list' => array(
					'chip-style' => array(
						'value' => array(
							'shadow',
							'flat',
							'transparent',
						),
					),
					'endpoint' => array(
						'mandatory' => true,
						'value_url' => array(
							'allow_empty' => false,
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
					'id' => array(
						'mandatory' => true,
					),
					'option-1-confetti' => array(),
					'option-1-text' => array(
						'mandatory' => true,
					),
					'option-2-confetti' => array(),
					'option-2-text' => array(
						'mandatory' => true,
					),
					'prompt-size' => array(
						'value' => array(
							'small',
							'medium',
							'large',
						),
					),
					'prompt-text' => array(),
					'theme' => array(
						'value' => array(
							'light',
							'dark',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'amp-story-grid-layer',
					'requires_extension' => array(
						'amp-story-interactive',
					),
				),
			),
		),
		'amp-story-interactive-img-poll' => array(
			array(
				'attr_spec_list' => array(
					'chip-style' => array(
						'value' => array(
							'shadow',
							'flat',
							'transparent',
						),
					),
					'endpoint' => array(
						'mandatory' => true,
						'value_url' => array(
							'allow_empty' => false,
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
					'id' => array(
						'mandatory' => true,
					),
					'option-1-confetti' => array(),
					'option-1-image' => array(
						'mandatory' => true,
						'value_url' => array(
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'option-1-image-alt' => array(
						'mandatory' => true,
					),
					'option-1-results-category' => array(),
					'option-2-confetti' => array(),
					'option-2-image' => array(
						'mandatory' => true,
						'value_url' => array(
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'option-2-image-alt' => array(
						'mandatory' => true,
					),
					'option-2-results-category' => array(),
					'option-3-confetti' => array(),
					'option-3-image' => array(
						'value_url' => array(
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'option-3-image-alt' => array(),
					'option-3-results-category' => array(),
					'option-4-confetti' => array(),
					'option-4-image' => array(
						'value_url' => array(
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'option-4-image-alt' => array(),
					'option-4-results-category' => array(),
					'prompt-size' => array(
						'value' => array(
							'small',
							'medium',
							'large',
						),
					),
					'prompt-text' => array(),
					'theme' => array(
						'value' => array(
							'light',
							'dark',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'amp-story-grid-layer',
					'requires_extension' => array(
						'amp-story-interactive',
					),
				),
			),
		),
		'amp-story-interactive-img-quiz' => array(
			array(
				'attr_spec_list' => array(
					'chip-style' => array(
						'value' => array(
							'shadow',
							'flat',
							'transparent',
						),
					),
					'endpoint' => array(
						'mandatory' => true,
						'value_url' => array(
							'allow_empty' => false,
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
					'id' => array(
						'mandatory' => true,
					),
					'option-1-confetti' => array(),
					'option-1-correct' => array(),
					'option-1-image' => array(
						'mandatory' => true,
						'value_url' => array(
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'option-1-image-alt' => array(
						'mandatory' => true,
					),
					'option-2-confetti' => array(),
					'option-2-correct' => array(),
					'option-2-image' => array(
						'mandatory' => true,
						'value_url' => array(
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'option-2-image-alt' => array(
						'mandatory' => true,
					),
					'option-3-confetti' => array(),
					'option-3-correct' => array(),
					'option-3-image' => array(
						'value_url' => array(
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'option-3-image-alt' => array(),
					'option-4-confetti' => array(),
					'option-4-correct' => array(),
					'option-4-image' => array(
						'value_url' => array(
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'option-4-image-alt' => array(),
					'prompt-size' => array(
						'value' => array(
							'small',
							'medium',
							'large',
						),
					),
					'prompt-text' => array(),
					'theme' => array(
						'value' => array(
							'light',
							'dark',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'amp-story-grid-layer',
					'mandatory_oneof' => array(
						'option-1-correct',
						'option-2-correct',
						'option-3-correct',
						'option-4-correct',
					),
					'requires_extension' => array(
						'amp-story-interactive',
					),
				),
			),
		),
		'amp-story-interactive-poll' => array(
			array(
				'attr_spec_list' => array(
					'chip-style' => array(
						'value' => array(
							'shadow',
							'flat',
							'transparent',
						),
					),
					'endpoint' => array(
						'mandatory' => true,
						'value_url' => array(
							'allow_empty' => false,
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
					'id' => array(
						'mandatory' => true,
					),
					'option-1-confetti' => array(),
					'option-1-results-category' => array(),
					'option-1-text' => array(
						'mandatory' => true,
					),
					'option-2-confetti' => array(),
					'option-2-results-category' => array(),
					'option-2-text' => array(
						'mandatory' => true,
					),
					'option-3-confetti' => array(),
					'option-3-results-category' => array(),
					'option-3-text' => array(),
					'option-4-confetti' => array(),
					'option-4-results-category' => array(),
					'option-4-text' => array(),
					'prompt-size' => array(
						'value' => array(
							'small',
							'medium',
							'large',
						),
					),
					'prompt-text' => array(),
					'theme' => array(
						'value' => array(
							'light',
							'dark',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'amp-story-grid-layer',
					'requires_extension' => array(
						'amp-story-interactive',
					),
				),
			),
		),
		'amp-story-interactive-quiz' => array(
			array(
				'attr_spec_list' => array(
					'chip-style' => array(
						'value' => array(
							'shadow',
							'flat',
							'transparent',
						),
					),
					'endpoint' => array(
						'mandatory' => true,
						'value_url' => array(
							'allow_empty' => false,
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
					'id' => array(
						'mandatory' => true,
					),
					'option-1-confetti' => array(),
					'option-1-correct' => array(),
					'option-1-text' => array(
						'mandatory' => true,
					),
					'option-2-confetti' => array(),
					'option-2-correct' => array(),
					'option-2-text' => array(
						'mandatory' => true,
					),
					'option-3-confetti' => array(),
					'option-3-correct' => array(),
					'option-3-text' => array(),
					'option-4-confetti' => array(),
					'option-4-correct' => array(),
					'option-4-text' => array(),
					'prompt-size' => array(
						'value' => array(
							'small',
							'medium',
							'large',
						),
					),
					'prompt-text' => array(),
					'theme' => array(
						'value' => array(
							'light',
							'dark',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'amp-story-grid-layer',
					'mandatory_oneof' => array(
						'option-1-correct',
						'option-2-correct',
						'option-3-correct',
						'option-4-correct',
					),
					'requires_extension' => array(
						'amp-story-interactive',
					),
				),
			),
		),
		'amp-story-interactive-results' => array(
			array(
				'attr_spec_list' => array(
					'chip-style' => array(
						'value' => array(
							'flat',
							'transparent',
						),
					),
					'option-1-image' => array(),
					'option-1-results-category' => array(
						'mandatory' => true,
					),
					'option-1-results-threshold' => array(
						'value_regex' => '\\d+(\\.\\d+)?',
					),
					'option-1-text' => array(),
					'option-2-image' => array(),
					'option-2-results-category' => array(
						'mandatory' => true,
					),
					'option-2-results-threshold' => array(
						'value_regex' => '\\d+(\\.\\d+)?',
					),
					'option-2-text' => array(),
					'option-3-image' => array(),
					'option-3-results-category' => array(),
					'option-3-results-threshold' => array(
						'value_regex' => '\\d+(\\.\\d+)?',
					),
					'option-3-text' => array(),
					'option-4-image' => array(),
					'option-4-results-category' => array(),
					'option-4-results-threshold' => array(
						'value_regex' => '\\d+(\\.\\d+)?',
					),
					'option-4-text' => array(),
					'prompt-text' => array(),
					'theme' => array(
						'value' => array(
							'light',
							'dark',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'amp-story-grid-layer',
					'requires_extension' => array(
						'amp-story-interactive',
					),
				),
			),
		),
		'amp-story-interactive-slider' => array(
			array(
				'attr_spec_list' => array(
					'chip-style' => array(
						'value' => array(
							'shadow',
							'flat',
							'transparent',
						),
					),
					'endpoint' => array(
						'mandatory' => true,
						'value_url' => array(
							'allow_empty' => false,
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
					'id' => array(
						'mandatory' => true,
					),
					'option-1-text' => array(
						'mandatory' => false,
					),
					'prompt-size' => array(
						'value' => array(
							'small',
							'medium',
							'large',
						),
					),
					'prompt-text' => array(),
					'theme' => array(
						'value' => array(
							'light',
							'dark',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'amp-story-grid-layer',
					'requires_extension' => array(
						'amp-story-interactive',
					),
				),
			),
		),
		'amp-story-page' => array(
			array(
				'attr_spec_list' => array(
					'auto-advance-after' => array(),
					'background-audio' => array(
						'value_url' => array(
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'id' => array(
						'disallowed_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|AMP|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|i-amphtml-\\S*|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)',
						'mandatory' => true,
					),
					'next-page-no-ad' => array(),
				),
				'tag_spec' => array(
					'child_tags' => array(
						'child_tag_name_oneof' => array(
							'amp-analytics',
							'amp-pixel',
							'amp-story-animation',
							'amp-story-auto-analytics',
							'amp-story-cta-layer',
							'amp-story-grid-layer',
							'amp-story-page-attachment',
							'amp-story-page-outlink',
							'amp-story-shopping-attachment',
						),
						'mandatory_min_num_child_tags' => 1,
					),
					'mandatory_parent' => 'amp-story',
					'requires_extension' => array(
						'amp-story',
					),
				),
			),
		),
		'amp-story-page-attachment' => array(
			array(
				'attr_spec_list' => array(
					'cta-text' => array(),
					'href' => array(
						'mandatory' => true,
						'value_url' => array(
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'layout' => array(
						'mandatory' => true,
						'value' => array(
							'nodisplay',
						),
					),
					'theme' => array(
						'value' => array(
							'dark',
							'light',
						),
					),
					'title' => array(),
				),
				'tag_spec' => array(
					'child_tags' => array(
						'mandatory_num_child_tags' => 0,
					),
					'mandatory_ancestor' => 'amp-story-page',
					'spec_name' => 'amp-story-page-attachment[href]',
				),
			),
			array(
				'attr_spec_list' => array(
					'cta-image' => array(
						'value_url' => array(
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'cta-image-2' => array(
						'value_url' => array(
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'cta-text' => array(),
					'layout' => array(
						'mandatory' => true,
						'value' => array(
							'nodisplay',
						),
					),
					'theme' => array(
						'value' => array(
							'dark',
							'light',
						),
					),
					'title' => array(),
				),
				'tag_spec' => array(
					'descendant_tag_list' => 'amp-story-page-attachment-allowed-descendants',
					'mandatory_ancestor' => 'amp-story-page',
					'spec_name' => 'amp-story-page-attachment',
				),
			),
		),
		'amp-story-page-outlink' => array(
			array(
				'attr_spec_list' => array(
					'cta-accent-color' => array(),
					'cta-accent-element' => array(
						'value' => array(
							'background',
							'text',
						),
					),
					'cta-image' => array(
						'value_url' => array(
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'layout' => array(
						'mandatory' => true,
						'value' => array(
							'nodisplay',
						),
					),
					'theme' => array(
						'value' => array(
							'custom',
							'dark',
							'light',
						),
					),
				),
				'tag_spec' => array(
					'child_tags' => array(
						'child_tag_name_oneof' => array(
							'a',
						),
						'mandatory_num_child_tags' => 1,
					),
					'mandatory_ancestor' => 'amp-story-page',
					'spec_name' => 'amp-story-page-outlink',
				),
			),
		),
		'amp-story-panning-media' => array(
			array(
				'attr_spec_list' => array(
					'data-x' => array(
						'value_regex' => '-?(0|[0-9]?\\d\\.?\\d*%|100%)',
					),
					'data-y' => array(
						'value_regex' => '-?(0|[0-9]?\\d\\.?\\d*%|100%)',
					),
					'data-zoom' => array(
						'value_regex' => '\\d+\\.?\\d*',
					),
					'lock-bounds' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
						),
					),
					'child_tags' => array(
						'child_tag_name_oneof' => array(
							'amp-img',
						),
						'mandatory_num_child_tags' => 1,
					),
					'mandatory_ancestor' => 'amp-story-grid-layer',
					'requires_extension' => array(
						'amp-story-panning-media',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-story-panning-media',
				),
			),
		),
		'amp-story-player' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							4,
							9,
						),
					),
					'descendant_tag_list' => 'amp-story-player-allowed-descendants',
					'requires_extension' => array(
						'amp-story-player',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-story-player/',
				),
			),
		),
		'amp-story-shopping-attachment' => array(
			array(
				'attr_spec_list' => array(
					'cta-text' => array(),
					'src' => array(
						'value_url' => array(
							'allow_relative' => true,
							'protocol' => array(
								'https',
							),
						),
					),
					'theme' => array(
						'value' => array(
							'dark',
							'light',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							5,
						),
					),
					'child_tags' => array(
						'child_tag_name_oneof' => array(
							'script',
						),
						'mandatory_min_num_child_tags' => 1,
					),
					'requires_extension' => array(
						'amp-story-shopping',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-story-shopping/',
				),
			),
		),
		'amp-story-shopping-tag' => array(
			array(
				'attr_spec_list' => array(
					'data-product-id' => array(
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							5,
						),
					),
					'mandatory_ancestor' => 'amp-story-grid-layer',
					'requires_extension' => array(
						'amp-story-shopping',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-story-shopping/',
				),
			),
		),
		'amp-story-social-share' => array(
			array(
				'attr_spec_list' => array(
					'layout' => array(
						'mandatory' => true,
						'value' => array(
							'nodisplay',
						),
					),
					'src' => array(
						'value_url' => array(
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
				),
				'tag_spec' => array(
					'descendant_tag_list' => 'amp-story-social-share-allowed-descendants',
					'mandatory_ancestor' => 'amp-story',
				),
			),
		),
		'amp-story-subscriptions' => array(
			array(
				'attr_spec_list' => array(
					'additional-description' => array(),
					'description' => array(
						'mandatory' => true,
					),
					'headline' => array(),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'price' => array(
						'mandatory' => true,
					),
					'subscriptions-page-index' => array(),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							5,
						),
					),
					'requires_extension' => array(
						'amp-story-subscriptions',
					),
				),
			),
		),
		'amp-stream-gallery' => array(
			array(
				'attr_spec_list' => array(
					'controls' => array(
						'value_regex' => '([^,]+\\s+(always|auto|never),\\s*)*(always|auto|never)',
					),
					'data-amp-bind-controls' => array(),
					'data-amp-bind-extra-space' => array(),
					'data-amp-bind-loop' => array(),
					'data-amp-bind-max-item-width' => array(),
					'data-amp-bind-max-visible-count' => array(),
					'data-amp-bind-min-item-width' => array(),
					'data-amp-bind-min-visible-count' => array(),
					'data-amp-bind-outset-arrows' => array(),
					'data-amp-bind-peek' => array(),
					'data-amp-bind-slide-align' => array(),
					'data-amp-bind-snap' => array(),
					'extra-space' => array(
						'value' => array(
							'between',
						),
					),
					'loop' => array(
						'value_regex' => '([^,]+\\s+(true|false),\\s*)*(true|false|^$)',
					),
					'max-item-width' => array(
						'value_regex' => '([^,]+\\s+(\\d+),\\s*)*(\\d+)',
					),
					'max-visible-count' => array(
						'value_regex' => '([^,]+\\s+(\\d+(\\.\\d+)?),\\s*)*(\\d+(\\.\\d+)?)',
					),
					'media' => array(),
					'min-item-width' => array(
						'value_regex' => '([^,]+\\s+(\\d+),\\s*)*(\\d+)',
					),
					'min-visible-count' => array(
						'value_regex' => '([^,]+\\s+(\\d+(\\.\\d+)?),\\s*)*(\\d+(\\.\\d+)?)',
					),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'outset-arrows' => array(
						'value_regex' => '([^,]+\\s+(true|false),\\s*)*(true|false)',
					),
					'peek' => array(
						'value_regex' => '([^,]+\\s+(\\d+(\\.\\d+)?),\\s*)*(\\d+(\\.\\d+)?)',
					),
					'slide-align' => array(
						'value_regex' => '([^,]+\\s+(start|center),\\s*)*(start|center)',
					),
					'snap' => array(
						'value_regex' => '([^,]+\\s+(true|false),\\s*)*(true|false)',
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							9,
							1,
							4,
						),
					),
					'requires_extension' => array(
						'amp-stream-gallery',
					),
					'spec_url' => 'https://github.com/ampproject/amphtml/blob/master/extensions/amp-stream-gallery/amp-stream-gallery.md',
				),
			),
		),
		'amp-tiktok' => array(
			array(
				'attr_spec_list' => array(
					'data-src' => array(
						'mandatory' => true,
						'value_regex' => '(https:\\/\\/www\\.tiktok\\.com\\/.*)?\\d+.*',
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							9,
							1,
							4,
						),
					),
					'requires_extension' => array(
						'amp-tiktok',
					),
					'spec_name' => 'AMP-TIKTOK',
					'spec_url' => 'https://amp.dev/documentation/components/amp-tiktok',
				),
			),
			array(
				'attr_spec_list' => array(
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							9,
							1,
							4,
						),
					),
					'child_tags' => array(
						'child_tag_name_oneof' => array(
							'blockquote',
						),
						'mandatory_min_num_child_tags' => 1,
					),
					'requires_extension' => array(
						'amp-tiktok',
					),
					'spec_name' => 'AMP-TIKTOK blockquote',
					'spec_url' => 'https://amp.dev/documentation/components/amp-tiktok',
				),
			),
		),
		'amp-timeago' => array(
			array(
				'attr_spec_list' => array(
					'cutoff' => array(
						'value_regex' => '\\d+',
					),
					'data-amp-bind-datetime' => array(),
					'data-amp-bind-title' => array(),
					'datetime' => array(
						'mandatory' => true,
						'value_regex' => '\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d(:[0-5]\\d(\\.\\d+)?)?(Z|[+-][0-1][0-9]:[0-5][0-9])',
					),
					'locale' => array(),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							2,
							3,
							4,
						),
					),
					'requires_extension' => array(
						'amp-timeago',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-timeago/',
				),
			),
		),
		'amp-truncate-text' => array(
			array(
				'attr_spec_list' => array(
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'overflow-style' => array(
						'value' => array(
							'right',
							'default',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							5,
							6,
							2,
							3,
							7,
							9,
							1,
							4,
						),
					),
					'requires_extension' => array(
						'amp-truncate-text',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-truncate-text/',
				),
			),
		),
		'amp-twitter' => array(
			array(
				'attr_spec_list' => array(
					'data-amp-bind-data-tweetid' => array(),
					'data-cards' => array(),
					'data-conversation' => array(),
					'data-limit' => array(),
					'data-momentid' => array(
						'value_regex' => '\\d+',
					),
					'data-timeline-id' => array(
						'value_regex' => '\\d+',
					),
					'data-timeline-owner-screen-name' => array(),
					'data-timeline-screen-name' => array(),
					'data-timeline-slug' => array(),
					'data-timeline-source-type' => array(),
					'data-timeline-url' => array(
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'data-timeline-user-id' => array(
						'value_regex' => '\\d+',
					),
					'data-tweetid' => array(),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							9,
							1,
							4,
						),
					),
					'mandatory_oneof' => array(
						'data-momentid',
						'data-timeline-source-type',
						'data-tweetid',
					),
					'requires_extension' => array(
						'amp-twitter',
					),
				),
			),
		),
		'amp-user-notification' => array(
			array(
				'attr_spec_list' => array(
					'data-dismiss-href' => array(
						'value_url' => array(
							'allow_empty' => false,
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
					'data-show-if-href' => array(
						'value_url' => array(
							'allow_empty' => false,
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
					'enctype' => array(
						'value' => array(
							'application/x-www-form-urlencoded',
						),
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							1,
						),
					),
					'requires_extension' => array(
						'amp-user-notification',
					),
				),
			),
		),
		'amp-video' => array(
			array(
				'attr_spec_list' => array(
					'album' => array(),
					'alt' => array(),
					'artist' => array(),
					'artwork' => array(),
					'attribution' => array(),
					'autoplay' => array(
						'value' => array(
							'',
						),
					),
					'controls' => array(
						'value' => array(
							'',
						),
					),
					'controlslist' => array(),
					'crossorigin' => array(),
					'data-amp-bind-album' => array(),
					'data-amp-bind-alt' => array(),
					'data-amp-bind-artist' => array(),
					'data-amp-bind-artwork' => array(),
					'data-amp-bind-attribution' => array(),
					'data-amp-bind-controls' => array(),
					'data-amp-bind-controlslist' => array(),
					'data-amp-bind-loop' => array(),
					'data-amp-bind-poster' => array(),
					'data-amp-bind-preload' => array(),
					'data-amp-bind-src' => array(),
					'data-amp-bind-title' => array(),
					'disableremoteplayback' => array(
						'value' => array(
							'',
						),
					),
					'dock' => array(
						'requires_extension' => array(
							'amp-video-docking',
						),
					),
					'lightbox' => array(),
					'lightbox-thumbnail-id' => array(
						'value_regex_casei' => '^[a-z][a-z\\d_-]*',
					),
					'loop' => array(
						'value' => array(
							'',
						),
					),
					'media' => array(),
					'muted' => array(
						'value' => array(
							'',
						),
					),
					'noaudio' => array(
						'value' => array(
							'',
						),
					),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'object-fit' => array(),
					'object-position' => array(),
					'placeholder' => array(),
					'poster' => array(),
					'preload' => array(
						'value' => array(
							'auto',
							'metadata',
							'none',
							'',
						),
					),
					'rotate-to-fullscreen' => array(
						'value' => array(
							'',
						),
					),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_relative' => true,
							'protocol' => array(
								'https',
							),
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							9,
							1,
							4,
						),
					),
					'disallowed_ancestor' => array(
						'amp-story',
					),
					'requires_extension' => array(
						'amp-video',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-video/',
				),
			),
			array(
				'attr_spec_list' => array(
					'album' => array(),
					'alt' => array(),
					'artist' => array(),
					'artwork' => array(),
					'attribution' => array(),
					'autoplay' => array(
						'value' => array(
							'',
						),
					),
					'controls' => array(
						'value' => array(
							'',
						),
					),
					'controlslist' => array(),
					'crossorigin' => array(),
					'data-amp-bind-album' => array(),
					'data-amp-bind-alt' => array(),
					'data-amp-bind-artist' => array(),
					'data-amp-bind-artwork' => array(),
					'data-amp-bind-attribution' => array(),
					'data-amp-bind-controls' => array(),
					'data-amp-bind-controlslist' => array(),
					'data-amp-bind-loop' => array(),
					'data-amp-bind-poster' => array(),
					'data-amp-bind-preload' => array(),
					'data-amp-bind-src' => array(),
					'data-amp-bind-title' => array(),
					'disableremoteplayback' => array(
						'value' => array(
							'',
						),
					),
					'dock' => array(
						'requires_extension' => array(
							'amp-video-docking',
						),
					),
					'lightbox' => array(),
					'lightbox-thumbnail-id' => array(
						'value_regex_casei' => '^[a-z][a-z\\d_-]*',
					),
					'loop' => array(
						'value' => array(
							'',
						),
					),
					'media' => array(),
					'muted' => array(
						'value' => array(
							'',
						),
					),
					'noaudio' => array(
						'value' => array(
							'',
						),
					),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'object-fit' => array(),
					'object-position' => array(),
					'placeholder' => array(),
					'poster' => array(),
					'preload' => array(
						'value' => array(
							'auto',
							'metadata',
							'none',
							'',
						),
					),
					'rotate-to-fullscreen' => array(
						'value' => array(
							'',
						),
					),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_relative' => true,
							'protocol' => array(
								'https',
							),
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							9,
							1,
							4,
						),
					),
					'mandatory_ancestor' => 'amp-story-page-attachment',
					'requires_extension' => array(
						'amp-video',
					),
					'spec_name' => 'amp-story >> amp-story-page-attachment >> amp-video',
					'spec_url' => 'https://amp.dev/documentation/components/amp-video/',
				),
			),
			array(
				'attr_spec_list' => array(
					'album' => array(),
					'alt' => array(),
					'artist' => array(),
					'artwork' => array(),
					'attribution' => array(),
					'autoplay' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'cache' => array(
						'value' => array(
							'google',
						),
					),
					'captions-id' => array(
						'requires_extension' => array(
							'amp-story-captions',
						),
					),
					'controls' => array(
						'value' => array(
							'',
						),
					),
					'controlslist' => array(),
					'crossorigin' => array(),
					'data-amp-bind-album' => array(),
					'data-amp-bind-alt' => array(),
					'data-amp-bind-artist' => array(),
					'data-amp-bind-artwork' => array(),
					'data-amp-bind-attribution' => array(),
					'data-amp-bind-controls' => array(),
					'data-amp-bind-controlslist' => array(),
					'data-amp-bind-loop' => array(),
					'data-amp-bind-poster' => array(),
					'data-amp-bind-preload' => array(),
					'data-amp-bind-src' => array(),
					'data-amp-bind-title' => array(),
					'disableremoteplayback' => array(
						'value' => array(
							'',
						),
					),
					'dock' => array(
						'requires_extension' => array(
							'amp-video-docking',
						),
					),
					'loop' => array(
						'value' => array(
							'',
						),
					),
					'media' => array(),
					'muted' => array(
						'value' => array(
							'',
						),
					),
					'noaudio' => array(
						'value' => array(
							'',
						),
					),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'object-fit' => array(),
					'object-position' => array(),
					'placeholder' => array(),
					'poster' => array(
						'mandatory' => true,
					),
					'preload' => array(
						'value' => array(
							'auto',
							'metadata',
							'none',
							'',
						),
					),
					'rotate-to-fullscreen' => array(
						'value' => array(
							'',
						),
					),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_relative' => true,
							'protocol' => array(
								'https',
							),
						),
					),
					'volume' => array(
						'value_regex' => '^(0(\\.0*)?|(0?\\.[0-9]+)?|1(\\.0*)?)$',
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							1,
							4,
						),
					),
					'mandatory_ancestor' => 'amp-story',
					'requires_extension' => array(
						'amp-video',
					),
					'spec_name' => 'amp-story >> amp-video',
					'spec_url' => 'https://amp.dev/documentation/components/amp-video/',
				),
			),
		),
		'amp-video-iframe' => array(
			array(
				'attr_spec_list' => array(
					'album' => array(),
					'alt' => array(),
					'artist' => array(),
					'artwork' => array(),
					'attribution' => array(),
					'autoplay' => array(
						'value' => array(
							'',
						),
					),
					'data-amp-bind-src' => array(),
					'dock' => array(
						'requires_extension' => array(
							'amp-video-docking',
						),
					),
					'implements-media-session' => array(
						'value' => array(
							'',
						),
					),
					'implements-rotate-to-fullscreen' => array(
						'value' => array(
							'',
						),
					),
					'lightbox' => array(),
					'lightbox-thumbnail-id' => array(
						'value_regex_casei' => '^[a-z][a-z\\d_-]*',
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'poster' => array(),
					'referrerpolicy' => array(),
					'rotate-to-fullscreen' => array(
						'value' => array(
							'',
						),
					),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'mandatory' => true,
						'value_url' => array(
							'protocol' => array(
								'https',
							),
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							9,
							1,
							4,
						),
					),
					'requires_extension' => array(
						'amp-video-iframe',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-video-iframe/',
				),
			),
		),
		'amp-vimeo' => array(
			array(
				'attr_spec_list' => array(
					'autoplay' => array(
						'value' => array(
							'',
						),
					),
					'data-videoid' => array(
						'mandatory' => true,
						'value_regex' => '[0-9]+',
					),
					'do-not-track' => array(
						'value' => array(
							'',
						),
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							4,
						),
					),
					'requires_extension' => array(
						'amp-vimeo',
					),
				),
			),
		),
		'amp-vine' => array(
			array(
				'attr_spec_list' => array(
					'data-vineid' => array(
						'mandatory' => true,
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							1,
							4,
						),
					),
					'requires_extension' => array(
						'amp-vine',
					),
				),
			),
		),
		'amp-viqeo-player' => array(
			array(
				'attr_spec_list' => array(
					'autoplay' => array(),
					'data-profileid' => array(
						'mandatory' => true,
						'value_regex' => '[0-9a-f]*',
					),
					'data-videoid' => array(
						'mandatory' => true,
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							4,
						),
					),
					'requires_extension' => array(
						'amp-viqeo-player',
					),
				),
			),
		),
		'amp-vk' => array(
			array(
				'attr_spec_list' => array(
					'data-embedtype' => array(
						'mandatory' => true,
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							2,
							7,
							4,
						),
					),
					'requires_extension' => array(
						'amp-vk',
					),
				),
			),
		),
		'amp-web-push' => array(
			array(
				'attr_spec_list' => array(
					'helper-iframe-url' => array(
						'mandatory' => true,
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
					'id' => array(
						'mandatory' => true,
						'value' => array(
							'amp-web-push',
						),
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'permission-dialog-url' => array(
						'mandatory' => true,
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
					'service-worker-scope' => array(
						'value_url' => array(
							'protocol' => array(
								'https',
							),
						),
					),
					'service-worker-url' => array(
						'mandatory' => true,
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							1,
						),
					),
					'requires_extension' => array(
						'amp-web-push',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-web-push/',
				),
			),
		),
		'amp-web-push-widget' => array(
			array(
				'attr_spec_list' => array(
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'visibility' => array(
						'mandatory' => true,
						'value' => array(
							'blocked',
							'subscribed',
							'unsubscribed',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							2,
						),
					),
					'requires_extension' => array(
						'amp-web-push',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-web-push/',
				),
			),
		),
		'amp-wistia-player' => array(
			array(
				'attr_spec_list' => array(
					'data-media-hashed-id' => array(
						'mandatory' => true,
						'value_regex' => '[0-9a-zA-Z]+',
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
					'rotate-to-fullscreen' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							4,
						),
					),
					'requires_extension' => array(
						'amp-wistia-player',
					),
				),
			),
		),
		'amp-wordpress-embed' => array(
			array(
				'attr_spec_list' => array(
					'data-url' => array(
						'mandatory' => true,
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							9,
							1,
							4,
						),
					),
					'requires_extension' => array(
						'amp-wordpress-embed',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-wordpress-embed/',
				),
			),
		),
		'amp-yotpo' => array(
			array(
				'attr_spec_list' => array(
					'data-app-key' => array(
						'mandatory' => true,
					),
					'data-widget-type' => array(
						'mandatory' => true,
					),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							1,
							4,
						),
					),
					'requires_extension' => array(
						'amp-yotpo',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-yotpo/',
				),
			),
		),
		'amp-youtube' => array(
			array(
				'attr_spec_list' => array(
					'autoplay' => array(),
					'credentials' => array(
						'value_casei' => array(
							'include',
							'omit',
						),
					),
					'data-amp-bind-data-videoid' => array(),
					'data-live-channelid' => array(
						'value_regex' => '[^=\\/?:]+',
					),
					'data-videoid' => array(
						'value_regex' => '[^=\\/?:]+',
					),
					'dock' => array(
						'requires_extension' => array(
							'amp-video-docking',
						),
					),
					'lightbox' => array(),
					'lightbox-thumbnail-id' => array(
						'value_regex_casei' => '^[a-z][a-z\\d_-]*',
					),
					'loop' => array(),
					'media' => array(),
					'noloading' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'amp_layout' => array(
						'supported_layouts' => array(
							6,
							2,
							3,
							7,
							1,
							4,
						),
					),
					'mandatory_oneof' => array(
						'data-live-channelid',
						'data-videoid',
					),
					'requires_extension' => array(
						'amp-youtube',
					),
				),
			),
		),
		'article' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'aside' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'audio' => array(
			array(
				'attr_spec_list' => array(
					'autoplay' => array(),
					'controls' => array(),
					'loop' => array(),
					'muted' => array(),
					'preload' => array(),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'data',
								'https',
							),
						),
					),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'noscript',
					'mandatory_ancestor_suggested_alternative' => 'amp-audio',
					'spec_url' => 'https://amp.dev/documentation/components/amp-audio/',
				),
			),
			array(
				'attr_spec_list' => array(
					'controls' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'amp-audio',
					'spec_name' => 'amp-audio > audio',
					'spec_url' => 'https://amp.dev/documentation/components/amp-audio/',
				),
			),
		),
		'b' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'base' => array(
			array(
				'attr_spec_list' => array(
					'href' => array(
						'value' => array(
							'/',
						),
					),
					'target' => array(
						'value_casei' => array(
							'_blank',
							'_self',
							'_top',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'head',
					'unique' => true,
				),
			),
		),
		'bdi' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'bdo' => array(
			array(
				'attr_spec_list' => array(
					'dir' => array(),
				),
				'tag_spec' => array(),
			),
		),
		'big' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'blockquote' => array(
			array(
				'attr_spec_list' => array(
					'align' => array(),
					'cite' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_empty' => true,
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
				),
				'tag_spec' => array(),
			),
			array(
				'attr_spec_list' => array(
					'align' => array(),
					'cite' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_empty' => true,
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'amp-tiktok blockquote',
					'spec_name' => 'BLOCKQUOTE with TikTok',
				),
			),
		),
		'body' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(
					'mandatory' => true,
					'mandatory_parent' => 'html',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup',
					'unique' => true,
				),
			),
		),
		'br' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'button' => array(
			array(
				'attr_spec_list' => array(
					'data-amp-bind-disabled' => array(),
					'data-amp-bind-type' => array(),
					'data-amp-bind-value' => array(),
					'disabled' => array(
						'value' => array(
							'',
						),
					),
					'name' => array(
						'disallowed_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)',
					),
					'role' => array(),
					'tabindex' => array(),
					'type' => array(),
					'value' => array(),
				),
				'tag_spec' => array(),
			),
			array(
				'attr_spec_list' => array(
					'name' => array(
						'disallowed_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)',
					),
					'open-button' => array(
						'value' => array(
							'',
						),
					),
					'role' => array(),
					'tabindex' => array(),
					'type' => array(),
					'value' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'amp-app-banner',
					'spec_name' => 'amp-app-banner button[open-button]',
				),
			),
			array(
				'attr_spec_list' => array(
					'disabled' => array(
						'value' => array(
							'',
						),
					),
					'load-more-clickable' => array(
						'dispatch_key' => 1,
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'name' => array(
						'disallowed_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)',
					),
					'role' => array(),
					'tabindex' => array(),
					'type' => array(),
					'value' => array(),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'amp-list-load-more',
					'requires_extension' => array(
						'amp-list',
					),
					'spec_name' => 'amp-list-load-more button[load-more-clickable]',
				),
			),
			array(
				'attr_spec_list' => array(
					'amp-nested-submenu-close' => array(),
					'amp-nested-submenu-open' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'amp-nested-menu',
					'spec_name' => 'button amp-nested-menu',
				),
			),
		),
		'canvas' => array(
			array(
				'attr_spec_list' => array(
					'height' => array(),
					'width' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'amp-script',
					'requires_extension' => array(
						'amp-script',
					),
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
				),
			),
		),
		'caption' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'center' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'circle' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'cx' => array(),
					'cy' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'externalresourcesrequired' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'image-rendering' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'r' => array(),
					'requiredextensions' => array(),
					'requiredfeatures' => array(),
					'shape-rendering' => array(),
					'sketch:type' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'systemlanguage' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'transform' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'cite' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'clippath' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'clippathunits' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'externalresourcesrequired' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'image-rendering' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'requiredextensions' => array(),
					'requiredfeatures' => array(),
					'shape-rendering' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'systemlanguage' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'transform' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'code' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'col' => array(
			array(
				'attr_spec_list' => array(
					'span' => array(),
				),
				'tag_spec' => array(),
			),
		),
		'colgroup' => array(
			array(
				'attr_spec_list' => array(
					'span' => array(),
				),
				'tag_spec' => array(),
			),
		),
		'data' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'datalist' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(
					'spec_url' => 'https://amp.dev/documentation/components/amp-form/',
				),
			),
		),
		'dd' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'defs' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'externalresourcesrequired' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'image-rendering' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'requiredextensions' => array(),
					'requiredfeatures' => array(),
					'shape-rendering' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'systemlanguage' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'transform' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'del' => array(
			array(
				'attr_spec_list' => array(
					'cite' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_empty' => true,
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'datetime' => array(),
				),
				'tag_spec' => array(),
			),
		),
		'desc' => array(
			array(
				'attr_spec_list' => array(
					'style' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'details' => array(
			array(
				'attr_spec_list' => array(
					'data-amp-bind-open' => array(),
					'open' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(),
			),
		),
		'dfn' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'dir' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'div' => array(
			array(
				'attr_spec_list' => array(
					'align' => array(),
				),
				'tag_spec' => array(),
			),
			array(
				'attr_spec_list' => array(
					'align' => array(),
					'verify-error' => array(
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'form',
					'spec_name' => 'FORM DIV [verify-error]',
				),
			),
			array(
				'attr_spec_list' => array(
					'align' => array(),
					'template' => array(
						'mandatory' => true,
					),
					'verify-error' => array(
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'form',
					'spec_name' => 'FORM DIV [verify-error][template]',
				),
			),
			array(
				'attr_spec_list' => array(
					'align' => array(),
					'submitting' => array(
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'form',
					'spec_name' => 'FORM DIV [submitting]',
				),
			),
			array(
				'attr_spec_list' => array(
					'align' => array(),
					'submitting' => array(
						'mandatory' => true,
					),
					'template' => array(
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'form',
					'spec_name' => 'FORM DIV [submitting][template]',
				),
			),
			array(
				'attr_spec_list' => array(
					'align' => array(),
					'submit-success' => array(
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'form',
					'spec_name' => 'FORM DIV [submit-success]',
				),
			),
			array(
				'attr_spec_list' => array(
					'align' => array(),
					'submit-success' => array(
						'mandatory' => true,
					),
					'template' => array(
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'form',
					'spec_name' => 'FORM DIV [submit-success][template]',
				),
			),
			array(
				'attr_spec_list' => array(
					'align' => array(),
					'submit-error' => array(
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'form',
					'spec_name' => 'FORM DIV [submit-error]',
				),
			),
			array(
				'attr_spec_list' => array(
					'align' => array(),
					'submit-error' => array(
						'mandatory' => true,
					),
					'template' => array(
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'form',
					'spec_name' => 'FORM DIV [submit-error][template]',
				),
			),
			array(
				'attr_spec_list' => array(
					'first' => array(
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'amp-image-slider',
					'spec_name' => 'AMP-IMAGE-SLIDER > DIV [first]',
					'spec_url' => 'https://amp.dev/documentation/components/amp-image-slider/',
				),
			),
			array(
				'attr_spec_list' => array(
					'second' => array(
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'amp-image-slider',
					'spec_name' => 'AMP-IMAGE-SLIDER > DIV [second]',
					'spec_url' => 'https://amp.dev/documentation/components/amp-image-slider/',
				),
			),
			array(
				'attr_spec_list' => array(
					'align' => array(),
					'fetch-error' => array(
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'amp-list',
					'spec_name' => 'AMP-LIST DIV [fetch-error]',
				),
			),
			array(
				'attr_spec_list' => array(
					'amp-nested-submenu' => array(
						'dispatch_key' => 2,
					),
					'amp-nested-submenu-close' => array(
						'dispatch_key' => 2,
					),
					'amp-nested-submenu-open' => array(
						'dispatch_key' => 2,
					),
				),
				'tag_spec' => array(
					'disallowed_ancestor' => array(
						'amp-accordion',
					),
					'mandatory_ancestor' => 'amp-nested-menu',
					'mandatory_oneof' => array(
						'amp-nested-submenu',
						'amp-nested-submenu-close',
						'amp-nested-submenu-open',
					),
					'spec_name' => 'div amp-nested-menu',
				),
			),
		),
		'dl' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'dt' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'ellipse' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'cx' => array(),
					'cy' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'externalresourcesrequired' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'image-rendering' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'requiredextensions' => array(),
					'requiredfeatures' => array(),
					'rx' => array(),
					'ry' => array(),
					'shape-rendering' => array(),
					'sketch:type' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'systemlanguage' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'transform' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'em' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'feblend' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'height' => array(),
					'image-rendering' => array(),
					'in' => array(),
					'in2' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'mode' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'result' => array(),
					'shape-rendering' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'width' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'x' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
					'y' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'fecolormatrix' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'height' => array(),
					'image-rendering' => array(),
					'in' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'result' => array(),
					'shape-rendering' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'type' => array(),
					'unicode-bidi' => array(),
					'values' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'width' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'x' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
					'y' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'fecomponenttransfer' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'height' => array(),
					'image-rendering' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'result' => array(),
					'shape-rendering' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'width' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'x' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
					'y' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'fecomposite' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'height' => array(),
					'image-rendering' => array(),
					'in' => array(),
					'in2' => array(),
					'k1' => array(),
					'k2' => array(),
					'k3' => array(),
					'k4' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'operator' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'result' => array(),
					'shape-rendering' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'width' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'x' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
					'y' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'feconvolvematrix' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'bias' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'divisor' => array(),
					'dominant-baseline' => array(),
					'edgemode' => array(),
					'enable-background' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'height' => array(),
					'image-rendering' => array(),
					'in' => array(),
					'kernelmatrix' => array(),
					'kernelunitlength' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'order' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'preservealpha' => array(),
					'result' => array(),
					'shape-rendering' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'targetx' => array(),
					'targety' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'width' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'x' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
					'y' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'fediffuselighting' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'diffuseconstant' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'height' => array(),
					'image-rendering' => array(),
					'in' => array(),
					'kernelunitlength' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'result' => array(),
					'shape-rendering' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'surfacescale' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'width' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'x' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
					'y' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'fedisplacementmap' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'height' => array(),
					'image-rendering' => array(),
					'in' => array(),
					'in2' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'result' => array(),
					'scale' => array(),
					'shape-rendering' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'width' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'x' => array(),
					'xchannelselector' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
					'y' => array(),
					'ychannelselector' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'fedistantlight' => array(
			array(
				'attr_spec_list' => array(
					'azimuth' => array(),
					'elevation' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'fedropshadow' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'dx' => array(),
					'dy' => array(),
					'enable-background' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'height' => array(),
					'image-rendering' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'result' => array(),
					'shape-rendering' => array(),
					'stddeviation' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'width' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'x' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
					'y' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'mandatory_parent' => 'filter',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'feflood' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'height' => array(),
					'image-rendering' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'result' => array(),
					'shape-rendering' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'width' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'x' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
					'y' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'fefunca' => array(
			array(
				'attr_spec_list' => array(
					'amplitude' => array(),
					'exponent' => array(),
					'intercept' => array(),
					'offset' => array(),
					'slope' => array(),
					'table' => array(),
					'tablevalues' => array(),
					'type' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'mandatory_parent' => 'fecomponenttransfer',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'fefuncb' => array(
			array(
				'attr_spec_list' => array(
					'amplitude' => array(),
					'exponent' => array(),
					'intercept' => array(),
					'offset' => array(),
					'slope' => array(),
					'table' => array(),
					'tablevalues' => array(),
					'type' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'mandatory_parent' => 'fecomponenttransfer',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'fefuncg' => array(
			array(
				'attr_spec_list' => array(
					'amplitude' => array(),
					'exponent' => array(),
					'intercept' => array(),
					'offset' => array(),
					'slope' => array(),
					'table' => array(),
					'tablevalues' => array(),
					'type' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'mandatory_parent' => 'fecomponenttransfer',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'fefuncr' => array(
			array(
				'attr_spec_list' => array(
					'amplitude' => array(),
					'exponent' => array(),
					'intercept' => array(),
					'offset' => array(),
					'slope' => array(),
					'table' => array(),
					'tablevalues' => array(),
					'type' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'mandatory_parent' => 'fecomponenttransfer',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'fegaussianblur' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'edgemode' => array(),
					'enable-background' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'height' => array(),
					'image-rendering' => array(),
					'in' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'result' => array(),
					'shape-rendering' => array(),
					'stddeviation' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'width' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'x' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
					'y' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'femerge' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'height' => array(),
					'image-rendering' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'result' => array(),
					'shape-rendering' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'width' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'x' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
					'y' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'femergenode' => array(
			array(
				'attr_spec_list' => array(
					'in' => array(),
					'style' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'femorphology' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'height' => array(),
					'image-rendering' => array(),
					'in' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'operator' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'radius' => array(),
					'result' => array(),
					'shape-rendering' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'width' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'x' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
					'y' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'feoffset' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'dx' => array(),
					'dy' => array(),
					'enable-background' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'height' => array(),
					'image-rendering' => array(),
					'in' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'result' => array(),
					'shape-rendering' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'width' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'x' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
					'y' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'fepointlight' => array(
			array(
				'attr_spec_list' => array(
					'x' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
					'y' => array(),
					'z' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'fespecularlighting' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'height' => array(),
					'image-rendering' => array(),
					'in' => array(),
					'kernelunitlength' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'result' => array(),
					'shape-rendering' => array(),
					'specularconstant' => array(),
					'specularexponent' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'surfacescale' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'width' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'x' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
					'y' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'fespotlight' => array(
			array(
				'attr_spec_list' => array(
					'limitingconeangle' => array(),
					'pointsatx' => array(),
					'pointsaty' => array(),
					'pointsatz' => array(),
					'specularexponent' => array(),
					'x' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
					'y' => array(),
					'z' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'fetile' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'height' => array(),
					'image-rendering' => array(),
					'in' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'result' => array(),
					'shape-rendering' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'width' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'x' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
					'y' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'feturbulence' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'basefrequency' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'height' => array(),
					'image-rendering' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'numoctaves' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'result' => array(),
					'seed' => array(),
					'shape-rendering' => array(),
					'stitchtiles' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'type' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'width' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'x' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
					'y' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'fieldset' => array(
			array(
				'attr_spec_list' => array(
					'data-amp-bind-disabled' => array(),
					'disabled' => array(),
					'name' => array(
						'disallowed_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)',
					),
				),
				'tag_spec' => array(),
			),
		),
		'figcaption' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'figure' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'filter' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'externalresourcesrequired' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'filterres' => array(),
					'filterunits' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'height' => array(),
					'image-rendering' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'primitiveunits' => array(),
					'shape-rendering' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'width' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'x' => array(),
					'xlink:actuate' => array(),
					'xlink:arcrole' => array(),
					'xlink:href' => array(
						'alternative_names' => array(
							'href',
						),
						'value_url' => array(
							'allow_empty' => false,
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'xlink:role' => array(),
					'xlink:show' => array(),
					'xlink:title' => array(),
					'xlink:type' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
					'y' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'footer' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'form' => array(
			array(
				'attr_spec_list' => array(
					'accept' => array(),
					'accept-charset' => array(),
					'action' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'mandatory' => true,
						'value_url' => array(
							'protocol' => array(
								'https',
							),
						),
					),
					'action-xhr' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'protocol' => array(
								'https',
							),
						),
					),
					'autocomplete' => array(),
					'custom-validation-reporting' => array(
						'value' => array(
							'as-you-go',
							'interact-and-submit',
							'show-all-on-submit',
							'show-first-on-submit',
						),
					),
					'enctype' => array(),
					'method' => array(
						'value_casei' => array(
							'get',
						),
					),
					'name' => array(
						'disallowed_value_regex' => '(^|\\s)(ATTRIBUTE_NODE|CDATA_SECTION_NODE|COMMENT_NODE|DOCUMENT_FRAGMENT_NODE|DOCUMENT_NODE|DOCUMENT_POSITION_CONTAINED_BY|DOCUMENT_POSITION_CONTAINS|DOCUMENT_POSITION_DISCONNECTED|DOCUMENT_POSITION_FOLLOWING|DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC|DOCUMENT_POSITION_PRECEDING|DOCUMENT_TYPE_NODE|ELEMENT_NODE|ENTITY_NODE|ENTITY_REFERENCE_NODE|NOTATION_NODE|PROCESSING_INSTRUCTION_NODE|TEXT_NODE|URL|URLUnencoded|__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|activeElement|addEventListener|adoptNode|alinkColor|all|anchors|append|appendChild|applets|baseURI|bgColor|body|captureEvents|caretPositionFromPoint|caretRangeFromPoint|characterSet|charset|childElementCount|childNodes|children|clear|cloneNode|close|compareDocumentPosition|compatMode|constructor|contains|contentType|cookie|createAttribute|createAttributeNS|createCDATASection|createComment|createDocumentFragment|createElement|createElementNS|createEvent|createExpression|createNSResolver|createNodeIterator|createProcessingInstruction|createRange|createTextNode|createTreeWalker|currentScript|defaultView|designMode|dir|dispatchEvent|doctype|documentElement|documentURI|domain|elementFromPoint|elementsFromPoint|embeds|enableStyleSheetsForSet|evaluate|execCommand|execCommandShowHelp|exitFullscreen|exitPictureInPicture|exitPointerLock|fgColor|firstChild|firstElementChild|focus|fonts|forms|fullscreen|fullscreenElement|fullscreenEnabled|getCSSCanvasContext|getElementById|getElementsByClassName|getElementsByName|getElementsByTagName|getElementsByTagNameNS|getOverrideStyle|getRootNode|getSelection|hasChildNodes|hasFocus|hasOwnProperty|hasStorageAccess|head|hidden|images|implementation|importNode|inputEncoding|insertBefore|isConnected|isDefaultNamespace|isEqualNode|isPrototypeOf|isSameNode|l10n|lastChild|lastElementChild|lastModified|lastStyleSheetSet|linkColor|links|location|lookupNamespaceURI|lookupPrefix|mozCancelFullScreen|mozFullScreen|mozFullScreenElement|mozFullScreenEnabled|mozSetImageElement|msCSSOMElementFloatMetrics|msCapsLockWarningOff|msElementsFromPoint|msElementsFromRect|nextSibling|nodeName|nodeType|nodeValue|normalize|onabort|onactivate|onafterscriptexecute|onanimationcancel|onanimationend|onanimationiteration|onanimationstart|onauxclick|onbeforeactivate|onbeforecopy|onbeforecut|onbeforedeactivate|onbeforeinput|onbeforepaste|onbeforescriptexecute|onblur|oncancel|oncanplay|oncanplaythrough|onchange|onclick|onclose|oncontextmenu|oncopy|oncuechange|oncut|ondblclick|ondeactivate|ondrag|ondragend|ondragenter|ondragexit|ondragleave|ondragover|ondragstart|ondrop|ondurationchange|onemptied|onended|onerror|onfocus|onfreeze|onfullscreenchange|onfullscreenerror|ongotpointercapture|oninput|oninvalid|onkeydown|onkeypress|onkeyup|onload|onloadeddata|onloadedmetadata|onloadend|onloadstart|onlostpointercapture|onmousedown|onmouseenter|onmouseleave|onmousemove|onmouseout|onmouseover|onmouseup|onmousewheel|onmozfullscreenchange|onmozfullscreenerror|onmscontentzoom|onmsgesturechange|onmsgesturedoubletap|onmsgestureend|onmsgesturehold|onmsgesturestart|onmsgesturetap|onmsinertiastart|onmsmanipulationstatechanged|onmssitemodejumplistitemremoved|onmsthumbnailclick|onpaste|onpause|onplay|onplaying|onpointercancel|onpointerdown|onpointerenter|onpointerleave|onpointerlockchange|onpointerlockerror|onpointermove|onpointerout|onpointerover|onpointerup|onprogress|onratechange|onreadystatechange|onrejectionhandled|onreset|onresize|onresume|onscroll|onsearch|onseeked|onseeking|onselect|onselectionchange|onselectstart|onshow|onstalled|onstop|onsubmit|onsuspend|ontimeupdate|ontoggle|ontransitioncancel|ontransitionend|ontransitionrun|ontransitionstart|onunhandledrejection|onvisibilitychange|onvolumechange|onwaiting|onwebkitanimationend|onwebkitanimationiteration|onwebkitanimationstart|onwebkitfullscreenchange|onwebkitfullscreenerror|onwebkitmouseforcechanged|onwebkitmouseforcedown|onwebkitmouseforceup|onwebkitmouseforcewillbegin|onwebkittransitionend|onwheel|open|origin|ownerDocument|parentElement|parentNode|pictureInPictureElement|pictureInPictureEnabled|plugins|pointerLockElement|preferredStyleSheetSet|prepend|previousSibling|propertyIsEnumerable|queryCommandEnabled|queryCommandIndeterm|queryCommandState|queryCommandSupported|queryCommandText|queryCommandValue|querySelector|querySelectorAll|readyState|referrer|registerElement|releaseCapture|releaseEvents|removeChild|removeEventListener|replaceChild|requestStorageAccess|rootElement|scripts|scrollingElement|selectedStyleSheetSet|styleSheetSets|styleSheets|textContent|title|toLocaleString|toSource|toString|updateSettings|valueOf|visibilityState|vlinkColor|wasDiscarded|webkitCancelFullScreen|webkitCurrentFullScreenElement|webkitExitFullscreen|webkitFullScreenKeyboardInputAllowed|webkitFullscreenElement|webkitFullscreenEnabled|webkitHidden|webkitIsFullScreen|webkitVisibilityState|write|writeln|xmlEncoding|xmlStandalone|xmlVersion)(\\s|$)',
					),
					'novalidate' => array(),
					'target' => array(
						'mandatory' => true,
						'value_casei' => array(
							'_blank',
							'_top',
						),
					),
					'verify-xhr' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'protocol' => array(
								'https',
							),
						),
					),
					'xssi-prefix' => array(),
				),
				'tag_spec' => array(
					'disallowed_ancestor' => array(
						'amp-app-banner',
					),
					'requires_extension' => array(
						'amp-form',
					),
					'spec_name' => 'FORM [method=GET]',
				),
			),
			array(
				'attr_spec_list' => array(
					'accept' => array(),
					'accept-charset' => array(),
					'action-xhr' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'mandatory' => true,
						'value_url' => array(
							'protocol' => array(
								'https',
							),
						),
					),
					'autocomplete' => array(),
					'custom-validation-reporting' => array(
						'value' => array(
							'as-you-go',
							'interact-and-submit',
							'show-all-on-submit',
							'show-first-on-submit',
						),
					),
					'enctype' => array(),
					'method' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'post',
						),
					),
					'name' => array(
						'disallowed_value_regex' => '(^|\\s)(ATTRIBUTE_NODE|CDATA_SECTION_NODE|COMMENT_NODE|DOCUMENT_FRAGMENT_NODE|DOCUMENT_NODE|DOCUMENT_POSITION_CONTAINED_BY|DOCUMENT_POSITION_CONTAINS|DOCUMENT_POSITION_DISCONNECTED|DOCUMENT_POSITION_FOLLOWING|DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC|DOCUMENT_POSITION_PRECEDING|DOCUMENT_TYPE_NODE|ELEMENT_NODE|ENTITY_NODE|ENTITY_REFERENCE_NODE|NOTATION_NODE|PROCESSING_INSTRUCTION_NODE|TEXT_NODE|URL|URLUnencoded|__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|activeElement|addEventListener|adoptNode|alinkColor|all|anchors|append|appendChild|applets|baseURI|bgColor|body|captureEvents|caretPositionFromPoint|caretRangeFromPoint|characterSet|charset|childElementCount|childNodes|children|clear|cloneNode|close|compareDocumentPosition|compatMode|constructor|contains|contentType|cookie|createAttribute|createAttributeNS|createCDATASection|createComment|createDocumentFragment|createElement|createElementNS|createEvent|createExpression|createNSResolver|createNodeIterator|createProcessingInstruction|createRange|createTextNode|createTreeWalker|currentScript|defaultView|designMode|dir|dispatchEvent|doctype|documentElement|documentURI|domain|elementFromPoint|elementsFromPoint|embeds|enableStyleSheetsForSet|evaluate|execCommand|execCommandShowHelp|exitFullscreen|exitPictureInPicture|exitPointerLock|fgColor|firstChild|firstElementChild|focus|fonts|forms|fullscreen|fullscreenElement|fullscreenEnabled|getCSSCanvasContext|getElementById|getElementsByClassName|getElementsByName|getElementsByTagName|getElementsByTagNameNS|getOverrideStyle|getRootNode|getSelection|hasChildNodes|hasFocus|hasOwnProperty|hasStorageAccess|head|hidden|images|implementation|importNode|inputEncoding|insertBefore|isConnected|isDefaultNamespace|isEqualNode|isPrototypeOf|isSameNode|l10n|lastChild|lastElementChild|lastModified|lastStyleSheetSet|linkColor|links|location|lookupNamespaceURI|lookupPrefix|mozCancelFullScreen|mozFullScreen|mozFullScreenElement|mozFullScreenEnabled|mozSetImageElement|msCSSOMElementFloatMetrics|msCapsLockWarningOff|msElementsFromPoint|msElementsFromRect|nextSibling|nodeName|nodeType|nodeValue|normalize|onabort|onactivate|onafterscriptexecute|onanimationcancel|onanimationend|onanimationiteration|onanimationstart|onauxclick|onbeforeactivate|onbeforecopy|onbeforecut|onbeforedeactivate|onbeforeinput|onbeforepaste|onbeforescriptexecute|onblur|oncancel|oncanplay|oncanplaythrough|onchange|onclick|onclose|oncontextmenu|oncopy|oncuechange|oncut|ondblclick|ondeactivate|ondrag|ondragend|ondragenter|ondragexit|ondragleave|ondragover|ondragstart|ondrop|ondurationchange|onemptied|onended|onerror|onfocus|onfreeze|onfullscreenchange|onfullscreenerror|ongotpointercapture|oninput|oninvalid|onkeydown|onkeypress|onkeyup|onload|onloadeddata|onloadedmetadata|onloadend|onloadstart|onlostpointercapture|onmousedown|onmouseenter|onmouseleave|onmousemove|onmouseout|onmouseover|onmouseup|onmousewheel|onmozfullscreenchange|onmozfullscreenerror|onmscontentzoom|onmsgesturechange|onmsgesturedoubletap|onmsgestureend|onmsgesturehold|onmsgesturestart|onmsgesturetap|onmsinertiastart|onmsmanipulationstatechanged|onmssitemodejumplistitemremoved|onmsthumbnailclick|onpaste|onpause|onplay|onplaying|onpointercancel|onpointerdown|onpointerenter|onpointerleave|onpointerlockchange|onpointerlockerror|onpointermove|onpointerout|onpointerover|onpointerup|onprogress|onratechange|onreadystatechange|onrejectionhandled|onreset|onresize|onresume|onscroll|onsearch|onseeked|onseeking|onselect|onselectionchange|onselectstart|onshow|onstalled|onstop|onsubmit|onsuspend|ontimeupdate|ontoggle|ontransitioncancel|ontransitionend|ontransitionrun|ontransitionstart|onunhandledrejection|onvisibilitychange|onvolumechange|onwaiting|onwebkitanimationend|onwebkitanimationiteration|onwebkitanimationstart|onwebkitfullscreenchange|onwebkitfullscreenerror|onwebkitmouseforcechanged|onwebkitmouseforcedown|onwebkitmouseforceup|onwebkitmouseforcewillbegin|onwebkittransitionend|onwheel|open|origin|ownerDocument|parentElement|parentNode|pictureInPictureElement|pictureInPictureEnabled|plugins|pointerLockElement|preferredStyleSheetSet|prepend|previousSibling|propertyIsEnumerable|queryCommandEnabled|queryCommandIndeterm|queryCommandState|queryCommandSupported|queryCommandText|queryCommandValue|querySelector|querySelectorAll|readyState|referrer|registerElement|releaseCapture|releaseEvents|removeChild|removeEventListener|replaceChild|requestStorageAccess|rootElement|scripts|scrollingElement|selectedStyleSheetSet|styleSheetSets|styleSheets|textContent|title|toLocaleString|toSource|toString|updateSettings|valueOf|visibilityState|vlinkColor|wasDiscarded|webkitCancelFullScreen|webkitCurrentFullScreenElement|webkitExitFullscreen|webkitFullScreenKeyboardInputAllowed|webkitFullscreenElement|webkitFullscreenEnabled|webkitHidden|webkitIsFullScreen|webkitVisibilityState|write|writeln|xmlEncoding|xmlStandalone|xmlVersion)(\\s|$)',
					),
					'novalidate' => array(),
					'target' => array(
						'value_casei' => array(
							'_blank',
							'_top',
						),
					),
					'verify-xhr' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'protocol' => array(
								'https',
							),
						),
					),
					'xssi-prefix' => array(),
				),
				'tag_spec' => array(
					'disallowed_ancestor' => array(
						'amp-app-banner',
					),
					'requires_extension' => array(
						'amp-form',
					),
					'spec_name' => 'FORM [method=POST]',
				),
			),
		),
		'g' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'externalresourcesrequired' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'image-rendering' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'requiredextensions' => array(),
					'requiredfeatures' => array(),
					'shape-rendering' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'systemlanguage' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'transform' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'glyph' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'arabic-form' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'd' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-name' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'horiz-adv-x' => array(),
					'image-rendering' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'orientation' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'shape-rendering' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'unicode' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'vert-adv-y' => array(),
					'vert-origin-x' => array(),
					'vert-origin-y' => array(),
					'visibility' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'glyphref' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'dx' => array(),
					'dy' => array(),
					'enable-background' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'format' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'glyphref' => array(),
					'image-rendering' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'shape-rendering' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'x' => array(),
					'xlink:actuate' => array(),
					'xlink:arcrole' => array(),
					'xlink:href' => array(
						'alternative_names' => array(
							'href',
						),
						'value_url' => array(
							'allow_empty' => false,
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'xlink:role' => array(),
					'xlink:show' => array(),
					'xlink:title' => array(),
					'xlink:type' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
					'y' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'h1' => array(
			array(
				'attr_spec_list' => array(
					'align' => array(),
				),
				'tag_spec' => array(),
			),
		),
		'h2' => array(
			array(
				'attr_spec_list' => array(
					'align' => array(),
				),
				'tag_spec' => array(),
			),
			array(
				'attr_spec_list' => array(
					'amp-nested-submenu-close' => array(),
					'amp-nested-submenu-open' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'amp-nested-menu',
					'spec_name' => 'h2 amp-nested-menu',
				),
			),
		),
		'h3' => array(
			array(
				'attr_spec_list' => array(
					'align' => array(),
				),
				'tag_spec' => array(),
			),
			array(
				'attr_spec_list' => array(
					'amp-nested-submenu-close' => array(),
					'amp-nested-submenu-open' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'amp-nested-menu',
					'spec_name' => 'h3 amp-nested-menu',
				),
			),
		),
		'h4' => array(
			array(
				'attr_spec_list' => array(
					'align' => array(),
				),
				'tag_spec' => array(),
			),
			array(
				'attr_spec_list' => array(
					'amp-nested-submenu-close' => array(),
					'amp-nested-submenu-open' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'amp-nested-menu',
					'spec_name' => 'h4 amp-nested-menu',
				),
			),
		),
		'h5' => array(
			array(
				'attr_spec_list' => array(
					'align' => array(),
				),
				'tag_spec' => array(),
			),
			array(
				'attr_spec_list' => array(
					'amp-nested-submenu-close' => array(),
					'amp-nested-submenu-open' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'amp-nested-menu',
					'spec_name' => 'h5 amp-nested-menu',
				),
			),
		),
		'h6' => array(
			array(
				'attr_spec_list' => array(
					'align' => array(),
				),
				'tag_spec' => array(),
			),
			array(
				'attr_spec_list' => array(
					'amp-nested-submenu-close' => array(),
					'amp-nested-submenu-open' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'amp-nested-menu',
					'spec_name' => 'h6 amp-nested-menu',
				),
			),
		),
		'head' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(
					'mandatory' => true,
					'mandatory_parent' => 'html',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup',
					'unique' => true,
				),
			),
		),
		'header' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'hgroup' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'hkern' => array(
			array(
				'attr_spec_list' => array(
					'g1' => array(),
					'g2' => array(),
					'k' => array(),
					'style' => array(),
					'u1' => array(),
					'u2' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'hr' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'html' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(
					'mandatory' => true,
					'mandatory_parent' => '!doctype',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup',
					'unique' => true,
				),
			),
		),
		'i' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'iframe' => array(
			array(
				'attr_spec_list' => array(
					'frameborder' => array(
						'value' => array(
							'0',
							'1',
						),
					),
					'height' => array(),
					'name' => array(
						'disallowed_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)',
					),
					'referrerpolicy' => array(),
					'resizable' => array(
						'value' => array(
							'',
						),
					),
					'sandbox' => array(),
					'scrolling' => array(
						'value' => array(
							'auto',
							'yes',
							'no',
						),
					),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'data',
								'https',
							),
						),
					),
					'srcdoc' => array(),
					'width' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'noscript',
					'mandatory_ancestor_suggested_alternative' => 'amp-iframe',
					'mandatory_oneof' => array(
						'src',
						'srcdoc',
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-iframe/',
				),
			),
		),
		'image' => array(
			array(
				'attr_spec_list' => array(
					'align' => array(
						'value_casei' => array(
							'top',
							'middle',
							'bottom',
							'left',
							'right',
						),
					),
					'alt' => array(),
					'border' => array(),
					'crossorigin' => array(
						'value_casei' => array(
							'anonymous',
							'use-credentials',
						),
					),
					'decoding' => array(
						'value_casei' => array(
							'async',
						),
					),
					'fetchpriority' => array(
						'value_casei' => array(
							'high',
							'low',
							'auto',
						),
					),
					'height' => array(),
					'hspace' => array(),
					'importance' => array(
						'value_casei' => array(
							'high',
							'low',
							'auto',
						),
					),
					'ismap' => array(),
					'loading' => array(
						'value_casei' => array(
							'lazy',
						),
					),
					'name' => array(),
					'referrerpolicy' => array(
						'value_casei' => array(
							'no-referrer',
							'no-referrer-when-downgrade',
							'origin',
							'origin-when-cross-origin',
							'same-origin',
							'strict-origin',
							'strict-origin-when-cross-origin',
							'unsafe-url',
						),
					),
					'src' => array(
						'alternative_names' => array(
							'srcset',
						),
						'disallowed_value_regex' => '__amp_source_origin',
						'mandatory' => true,
						'value_url' => array(
							'protocol' => array(
								'data',
								'http',
								'https',
							),
						),
					),
					'usemap' => array(),
					'vspace' => array(),
					'width' => array(),
				),
				'tag_spec' => array(
					'disallowed_ancestor' => array(
						'amp-img',
						'amp-story',
					),
					'spec_name' => 'Standard Image',
				),
			),
			array(
				'attr_spec_list' => array(
					'align' => array(
						'value_casei' => array(
							'top',
							'middle',
							'bottom',
							'left',
							'right',
						),
					),
					'alt' => array(),
					'border' => array(),
					'crossorigin' => array(
						'value_casei' => array(
							'anonymous',
							'use-credentials',
						),
					),
					'data-hero' => array(
						'dispatch_key' => 1,
						'mandatory' => true,
					),
					'decoding' => array(
						'value_casei' => array(
							'async',
						),
					),
					'fetchpriority' => array(
						'value_casei' => array(
							'high',
							'low',
							'auto',
						),
					),
					'height' => array(),
					'hspace' => array(),
					'importance' => array(
						'value_casei' => array(
							'high',
							'low',
							'auto',
						),
					),
					'ismap' => array(),
					'loading' => array(
						'value_casei' => array(
							'lazy',
						),
					),
					'name' => array(),
					'referrerpolicy' => array(
						'value_casei' => array(
							'no-referrer',
							'no-referrer-when-downgrade',
							'origin',
							'origin-when-cross-origin',
							'same-origin',
							'strict-origin',
							'strict-origin-when-cross-origin',
							'unsafe-url',
						),
					),
					'sizes' => array(),
					'src' => array(
						'alternative_names' => array(
							'srcset',
						),
						'disallowed_value_regex' => '__amp_source_origin',
						'mandatory' => true,
						'value_url' => array(
							'protocol' => array(
								'data',
								'http',
								'https',
							),
						),
					),
					'usemap' => array(),
					'vspace' => array(),
					'width' => array(),
				),
				'tag_spec' => array(
					'disallowed_ancestor' => array(
						'amp-img',
						'amp-story',
					),
					'spec_name' => 'Hero Image',
				),
			),
			array(
				'attr_spec_list' => array(
					'align' => array(
						'value_casei' => array(
							'top',
							'middle',
							'bottom',
							'left',
							'right',
						),
					),
					'alt' => array(),
					'border' => array(),
					'crossorigin' => array(
						'value_casei' => array(
							'anonymous',
							'use-credentials',
						),
					),
					'decoding' => array(
						'value_casei' => array(
							'async',
						),
					),
					'fetchpriority' => array(
						'value_casei' => array(
							'high',
							'low',
							'auto',
						),
					),
					'height' => array(),
					'hspace' => array(),
					'importance' => array(
						'value_casei' => array(
							'high',
							'low',
							'auto',
						),
					),
					'ismap' => array(),
					'loading' => array(
						'value_casei' => array(
							'lazy',
						),
					),
					'name' => array(),
					'referrerpolicy' => array(
						'value_casei' => array(
							'no-referrer',
							'no-referrer-when-downgrade',
							'origin',
							'origin-when-cross-origin',
							'same-origin',
							'strict-origin',
							'strict-origin-when-cross-origin',
							'unsafe-url',
						),
					),
					'sizes' => array(),
					'src' => array(
						'alternative_names' => array(
							'srcset',
						),
						'disallowed_value_regex' => '__amp_source_origin',
						'mandatory' => true,
						'value_url' => array(
							'protocol' => array(
								'data',
								'http',
								'https',
							),
						),
					),
					'usemap' => array(),
					'vspace' => array(),
					'width' => array(),
				),
				'tag_spec' => array(
					'disallowed_ancestor' => array(
						'amp-img',
						'amp-story',
					),
					'spec_name' => 'Image using srcset',
				),
			),
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'externalresourcesrequired' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'height' => array(),
					'image-rendering' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'preserveaspectratio' => array(),
					'requiredextensions' => array(),
					'requiredfeatures' => array(),
					'shape-rendering' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'systemlanguage' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'transform' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'width' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'x' => array(),
					'xlink:actuate' => array(),
					'xlink:arcrole' => array(),
					'xlink:href' => array(
						'alternative_names' => array(
							'href',
						),
						'disallowed_value_regex' => '(^|\\s)data:image\\/svg\\+xml',
						'value_url' => array(
							'allow_empty' => false,
							'protocol' => array(
								'data',
								'http',
								'https',
							),
						),
					),
					'xlink:role' => array(),
					'xlink:show' => array(),
					'xlink:title' => array(),
					'xlink:type' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
					'y' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'img' => array(
			array(
				'attr_spec_list' => array(
					'align' => array(
						'value_casei' => array(
							'top',
							'middle',
							'bottom',
							'left',
							'right',
						),
					),
					'alt' => array(),
					'border' => array(),
					'crossorigin' => array(
						'value_casei' => array(
							'anonymous',
							'use-credentials',
						),
					),
					'decoding' => array(
						'value_casei' => array(
							'async',
						),
					),
					'fetchpriority' => array(
						'value_casei' => array(
							'high',
							'low',
							'auto',
						),
					),
					'height' => array(),
					'hspace' => array(),
					'importance' => array(
						'value_casei' => array(
							'high',
							'low',
							'auto',
						),
					),
					'ismap' => array(),
					'loading' => array(
						'value_casei' => array(
							'lazy',
						),
					),
					'name' => array(),
					'referrerpolicy' => array(
						'value_casei' => array(
							'no-referrer',
							'no-referrer-when-downgrade',
							'origin',
							'origin-when-cross-origin',
							'same-origin',
							'strict-origin',
							'strict-origin-when-cross-origin',
							'unsafe-url',
						),
					),
					'src' => array(
						'alternative_names' => array(
							'srcset',
						),
						'disallowed_value_regex' => '__amp_source_origin',
						'mandatory' => true,
						'value_url' => array(
							'protocol' => array(
								'data',
								'http',
								'https',
							),
						),
					),
					'usemap' => array(),
					'vspace' => array(),
					'width' => array(),
				),
				'tag_spec' => array(
					'disallowed_ancestor' => array(
						'amp-img',
						'amp-story',
					),
					'spec_name' => 'Standard Img',
				),
			),
			array(
				'attr_spec_list' => array(
					'align' => array(
						'value_casei' => array(
							'top',
							'middle',
							'bottom',
							'left',
							'right',
						),
					),
					'alt' => array(),
					'border' => array(),
					'crossorigin' => array(
						'value_casei' => array(
							'anonymous',
							'use-credentials',
						),
					),
					'data-hero' => array(
						'dispatch_key' => 1,
						'mandatory' => true,
					),
					'decoding' => array(
						'value_casei' => array(
							'async',
						),
					),
					'fetchpriority' => array(
						'value_casei' => array(
							'high',
							'low',
							'auto',
						),
					),
					'height' => array(),
					'hspace' => array(),
					'importance' => array(
						'value_casei' => array(
							'high',
							'low',
							'auto',
						),
					),
					'ismap' => array(),
					'loading' => array(
						'value_casei' => array(
							'lazy',
						),
					),
					'name' => array(),
					'referrerpolicy' => array(
						'value_casei' => array(
							'no-referrer',
							'no-referrer-when-downgrade',
							'origin',
							'origin-when-cross-origin',
							'same-origin',
							'strict-origin',
							'strict-origin-when-cross-origin',
							'unsafe-url',
						),
					),
					'sizes' => array(),
					'src' => array(
						'alternative_names' => array(
							'srcset',
						),
						'disallowed_value_regex' => '__amp_source_origin',
						'mandatory' => true,
						'value_url' => array(
							'protocol' => array(
								'data',
								'http',
								'https',
							),
						),
					),
					'usemap' => array(),
					'vspace' => array(),
					'width' => array(),
				),
				'tag_spec' => array(
					'disallowed_ancestor' => array(
						'amp-img',
						'amp-story',
					),
					'spec_name' => 'Hero Img',
				),
			),
			array(
				'attr_spec_list' => array(
					'align' => array(
						'value_casei' => array(
							'top',
							'middle',
							'bottom',
							'left',
							'right',
						),
					),
					'alt' => array(),
					'border' => array(),
					'crossorigin' => array(
						'value_casei' => array(
							'anonymous',
							'use-credentials',
						),
					),
					'decoding' => array(
						'value_casei' => array(
							'async',
						),
					),
					'fetchpriority' => array(
						'value_casei' => array(
							'high',
							'low',
							'auto',
						),
					),
					'height' => array(),
					'hspace' => array(),
					'importance' => array(
						'value_casei' => array(
							'high',
							'low',
							'auto',
						),
					),
					'ismap' => array(),
					'loading' => array(
						'value_casei' => array(
							'lazy',
						),
					),
					'name' => array(),
					'referrerpolicy' => array(
						'value_casei' => array(
							'no-referrer',
							'no-referrer-when-downgrade',
							'origin',
							'origin-when-cross-origin',
							'same-origin',
							'strict-origin',
							'strict-origin-when-cross-origin',
							'unsafe-url',
						),
					),
					'sizes' => array(),
					'src' => array(
						'alternative_names' => array(
							'srcset',
						),
						'disallowed_value_regex' => '__amp_source_origin',
						'mandatory' => true,
						'value_url' => array(
							'protocol' => array(
								'data',
								'http',
								'https',
							),
						),
					),
					'usemap' => array(),
					'vspace' => array(),
					'width' => array(),
				),
				'tag_spec' => array(
					'disallowed_ancestor' => array(
						'amp-img',
						'amp-story',
					),
					'spec_name' => 'Img using srcset',
				),
			),
			array(
				'attr_spec_list' => array(
					'align' => array(
						'value_casei' => array(
							'top',
							'middle',
							'bottom',
							'left',
							'right',
						),
					),
					'alt' => array(),
					'attribution' => array(),
					'border' => array(),
					'crossorigin' => array(
						'value_casei' => array(
							'anonymous',
							'use-credentials',
						),
					),
					'decoding' => array(
						'value_casei' => array(
							'async',
							'auto',
							'sync',
						),
					),
					'fetchpriority' => array(
						'value_casei' => array(
							'high',
							'low',
							'auto',
						),
					),
					'height' => array(),
					'hspace' => array(),
					'importance' => array(
						'value_casei' => array(
							'high',
							'low',
							'auto',
						),
					),
					'intrinsicsize' => array(),
					'ismap' => array(),
					'loading' => array(
						'value_casei' => array(
							'lazy',
						),
					),
					'name' => array(),
					'referrerpolicy' => array(
						'value_casei' => array(
							'no-referrer',
							'no-referrer-when-downgrade',
							'origin',
							'origin-when-cross-origin',
							'same-origin',
							'strict-origin',
							'strict-origin-when-cross-origin',
							'unsafe-url',
						),
					),
					'sizes' => array(),
					'src' => array(
						'alternative_names' => array(
							'srcset',
						),
						'disallowed_value_regex' => '__amp_source_origin',
						'mandatory' => true,
						'value_url' => array(
							'protocol' => array(
								'data',
								'http',
								'https',
							),
						),
					),
					'usemap' => array(),
					'vspace' => array(),
					'width' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'noscript',
					'mandatory_ancestor_suggested_alternative' => 'amp-img',
					'spec_name' => 'noscript > img',
					'spec_url' => 'https://amp.dev/documentation/components/amp-img/',
				),
			),
			array(
				'attr_spec_list' => array(
					'alt' => array(),
					'attribution' => array(),
					'data-amp-story-player-poster-img' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'decoding' => array(
						'value' => array(
							'async',
						),
					),
					'height' => array(
						'value_regex' => '[0-9]+',
					),
					'loading' => array(
						'mandatory' => true,
						'value' => array(
							'lazy',
						),
					),
					'sizes' => array(),
					'src' => array(
						'alternative_names' => array(
							'srcset',
						),
						'disallowed_value_regex' => '__amp_source_origin',
						'mandatory' => true,
						'value_url' => array(
							'protocol' => array(
								'data',
								'http',
								'https',
							),
						),
					),
					'width' => array(
						'value_regex' => '[0-9]+',
					),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'amp-story-player',
					'mandatory_parent' => 'a',
					'spec_name' => 'amp-story-player > img',
					'spec_url' => 'https://amp.dev/documentation/components/amp-story-player/',
				),
			),
		),
		'input' => array(
			array(
				'attr_spec_list' => array(
					'accept' => array(),
					'accesskey' => array(),
					'autocomplete' => array(),
					'autofocus' => array(),
					'checked' => array(),
					'data-amp-bind-accept' => array(),
					'data-amp-bind-accesskey' => array(),
					'data-amp-bind-autocomplete' => array(),
					'data-amp-bind-checked' => array(),
					'data-amp-bind-disabled' => array(),
					'data-amp-bind-height' => array(),
					'data-amp-bind-inputmode' => array(),
					'data-amp-bind-max' => array(),
					'data-amp-bind-maxlength' => array(),
					'data-amp-bind-min' => array(),
					'data-amp-bind-minlength' => array(),
					'data-amp-bind-multiple' => array(),
					'data-amp-bind-pattern' => array(),
					'data-amp-bind-placeholder' => array(),
					'data-amp-bind-readonly' => array(),
					'data-amp-bind-required' => array(),
					'data-amp-bind-selectiondirection' => array(),
					'data-amp-bind-size' => array(),
					'data-amp-bind-spellcheck' => array(),
					'data-amp-bind-step' => array(),
					'data-amp-bind-type' => array(),
					'data-amp-bind-value' => array(),
					'data-amp-bind-width' => array(),
					'disabled' => array(),
					'enterkeyhint' => array(),
					'height' => array(),
					'inputmode' => array(),
					'list' => array(),
					'max' => array(),
					'maxlength' => array(),
					'min' => array(),
					'minlength' => array(),
					'multiple' => array(),
					'name' => array(
						'disallowed_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)',
					),
					'no-verify' => array(
						'value' => array(
							'',
						),
					),
					'pattern' => array(),
					'placeholder' => array(),
					'readonly' => array(),
					'required' => array(),
					'selectiondirection' => array(),
					'size' => array(),
					'spellcheck' => array(),
					'step' => array(),
					'tabindex' => array(),
					'type' => array(
						'disallowed_value_regex' => '(^|\\s)(file|image|password|)(\\s|$)',
					),
					'value' => array(),
					'width' => array(),
				),
				'tag_spec' => array(
					'spec_url' => 'https://amp.dev/documentation/components/amp-form/',
				),
			),
			array(
				'attr_spec_list' => array(
					'accept' => array(),
					'accesskey' => array(),
					'autocomplete' => array(),
					'autofocus' => array(),
					'capture' => array(
						'value' => array(
							'',
						),
					),
					'checked' => array(),
					'data-amp-bind-accept' => array(),
					'data-amp-bind-accesskey' => array(),
					'data-amp-bind-autocomplete' => array(),
					'data-amp-bind-checked' => array(),
					'data-amp-bind-disabled' => array(),
					'data-amp-bind-height' => array(),
					'data-amp-bind-inputmode' => array(),
					'data-amp-bind-max' => array(),
					'data-amp-bind-maxlength' => array(),
					'data-amp-bind-min' => array(),
					'data-amp-bind-minlength' => array(),
					'data-amp-bind-multiple' => array(),
					'data-amp-bind-pattern' => array(),
					'data-amp-bind-placeholder' => array(),
					'data-amp-bind-readonly' => array(),
					'data-amp-bind-required' => array(),
					'data-amp-bind-selectiondirection' => array(),
					'data-amp-bind-size' => array(),
					'data-amp-bind-spellcheck' => array(),
					'data-amp-bind-step' => array(),
					'data-amp-bind-type' => array(),
					'data-amp-bind-value' => array(),
					'data-amp-bind-width' => array(),
					'disabled' => array(),
					'enterkeyhint' => array(),
					'height' => array(),
					'inputmode' => array(),
					'list' => array(),
					'max' => array(),
					'maxlength' => array(),
					'min' => array(),
					'minlength' => array(),
					'multiple' => array(),
					'name' => array(
						'disallowed_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)',
					),
					'no-verify' => array(
						'value' => array(
							'',
						),
					),
					'pattern' => array(),
					'placeholder' => array(),
					'readonly' => array(),
					'required' => array(),
					'selectiondirection' => array(),
					'size' => array(),
					'spellcheck' => array(),
					'step' => array(),
					'tabindex' => array(),
					'type' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'file',
						),
					),
					'value' => array(),
					'width' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'form [method=post]',
					'spec_name' => 'INPUT [type=file]',
					'spec_url' => 'https://amp.dev/documentation/components/amp-form/',
				),
			),
			array(
				'attr_spec_list' => array(
					'accept' => array(),
					'accesskey' => array(),
					'autocomplete' => array(),
					'autofocus' => array(),
					'checked' => array(),
					'data-amp-bind-accept' => array(),
					'data-amp-bind-accesskey' => array(),
					'data-amp-bind-autocomplete' => array(),
					'data-amp-bind-checked' => array(),
					'data-amp-bind-disabled' => array(),
					'data-amp-bind-height' => array(),
					'data-amp-bind-inputmode' => array(),
					'data-amp-bind-max' => array(),
					'data-amp-bind-maxlength' => array(),
					'data-amp-bind-min' => array(),
					'data-amp-bind-minlength' => array(),
					'data-amp-bind-multiple' => array(),
					'data-amp-bind-pattern' => array(),
					'data-amp-bind-placeholder' => array(),
					'data-amp-bind-readonly' => array(),
					'data-amp-bind-required' => array(),
					'data-amp-bind-selectiondirection' => array(),
					'data-amp-bind-size' => array(),
					'data-amp-bind-spellcheck' => array(),
					'data-amp-bind-step' => array(),
					'data-amp-bind-type' => array(),
					'data-amp-bind-value' => array(),
					'data-amp-bind-width' => array(),
					'disabled' => array(),
					'enterkeyhint' => array(),
					'height' => array(),
					'inputmode' => array(),
					'list' => array(),
					'max' => array(),
					'maxlength' => array(),
					'min' => array(),
					'minlength' => array(),
					'multiple' => array(),
					'name' => array(
						'disallowed_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)',
					),
					'pattern' => array(),
					'placeholder' => array(),
					'readonly' => array(),
					'required' => array(),
					'selectiondirection' => array(),
					'size' => array(),
					'spellcheck' => array(),
					'step' => array(),
					'tabindex' => array(),
					'type' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'password',
						),
					),
					'value' => array(),
					'width' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'form [method=post]',
					'spec_name' => 'INPUT [type=password]',
					'spec_url' => 'https://amp.dev/documentation/components/amp-form/',
				),
			),
			array(
				'attr_spec_list' => array(
					'accept' => array(),
					'accesskey' => array(),
					'autocomplete' => array(),
					'autofocus' => array(),
					'checked' => array(),
					'data-amp-bind-accept' => array(),
					'data-amp-bind-accesskey' => array(),
					'data-amp-bind-autocomplete' => array(),
					'data-amp-bind-checked' => array(),
					'data-amp-bind-disabled' => array(),
					'data-amp-bind-height' => array(),
					'data-amp-bind-inputmode' => array(),
					'data-amp-bind-max' => array(),
					'data-amp-bind-maxlength' => array(),
					'data-amp-bind-min' => array(),
					'data-amp-bind-minlength' => array(),
					'data-amp-bind-multiple' => array(),
					'data-amp-bind-pattern' => array(),
					'data-amp-bind-placeholder' => array(),
					'data-amp-bind-readonly' => array(),
					'data-amp-bind-required' => array(),
					'data-amp-bind-selectiondirection' => array(),
					'data-amp-bind-size' => array(),
					'data-amp-bind-spellcheck' => array(),
					'data-amp-bind-step' => array(),
					'data-amp-bind-type' => array(),
					'data-amp-bind-value' => array(),
					'data-amp-bind-width' => array(),
					'disabled' => array(),
					'enterkeyhint' => array(),
					'height' => array(),
					'inputmode' => array(),
					'list' => array(),
					'max' => array(),
					'maxlength' => array(),
					'min' => array(),
					'minlength' => array(),
					'multiple' => array(),
					'name' => array(
						'disallowed_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)',
					),
					'pattern' => array(),
					'placeholder' => array(),
					'readonly' => array(),
					'required' => array(),
					'selectiondirection' => array(),
					'size' => array(),
					'spellcheck' => array(),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'mandatory' => true,
						'value_url' => array(
							'protocol' => array(
								'data',
								'http',
								'https',
							),
						),
					),
					'step' => array(),
					'tabindex' => array(),
					'type' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'image',
						),
					),
					'value' => array(),
					'width' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'form [method=post]',
					'spec_name' => 'INPUT [type=image]',
					'spec_url' => 'https://amp.dev/documentation/components/amp-form/',
				),
			),
			array(
				'attr_spec_list' => array(
					'type' => array(
						'mandatory' => true,
						'value_casei' => array(
							'search',
							'text',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'amp-autocomplete',
					'requires_extension' => array(
						'amp-autocomplete',
						'amp-form',
					),
					'spec_name' => 'amp-autocomplete > input',
				),
			),
			array(
				'attr_spec_list' => array(
					'accept' => array(),
					'accesskey' => array(),
					'autocomplete' => array(),
					'autofocus' => array(),
					'checked' => array(),
					'data-amp-bind-accept' => array(),
					'data-amp-bind-accesskey' => array(),
					'data-amp-bind-autocomplete' => array(),
					'data-amp-bind-checked' => array(),
					'data-amp-bind-disabled' => array(),
					'data-amp-bind-height' => array(),
					'data-amp-bind-inputmode' => array(),
					'data-amp-bind-max' => array(),
					'data-amp-bind-maxlength' => array(),
					'data-amp-bind-min' => array(),
					'data-amp-bind-minlength' => array(),
					'data-amp-bind-multiple' => array(),
					'data-amp-bind-pattern' => array(),
					'data-amp-bind-placeholder' => array(),
					'data-amp-bind-readonly' => array(),
					'data-amp-bind-required' => array(),
					'data-amp-bind-selectiondirection' => array(),
					'data-amp-bind-size' => array(),
					'data-amp-bind-spellcheck' => array(),
					'data-amp-bind-step' => array(),
					'data-amp-bind-type' => array(),
					'data-amp-bind-value' => array(),
					'data-amp-bind-width' => array(),
					'disabled' => array(),
					'enterkeyhint' => array(),
					'height' => array(),
					'inputmode' => array(),
					'list' => array(),
					'mask' => array(
						'disallowed_value_regex' => '(payment-card|date-dd-mm-yyyy|date-mm-dd-yyyy|date-mm-yy|date-yyyy-mm-dd)',
						'dispatch_key' => 1,
						'mandatory' => true,
					),
					'mask-output' => array(),
					'mask-trim-zeros' => array(
						'value_regex' => '\\d+',
					),
					'max' => array(),
					'maxlength' => array(),
					'min' => array(),
					'minlength' => array(),
					'multiple' => array(),
					'name' => array(
						'disallowed_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)',
					),
					'pattern' => array(),
					'placeholder' => array(),
					'readonly' => array(),
					'required' => array(),
					'selectiondirection' => array(),
					'size' => array(),
					'spellcheck' => array(),
					'step' => array(),
					'tabindex' => array(),
					'type' => array(
						'value' => array(
							'text',
							'tel',
							'search',
						),
					),
					'value' => array(),
					'width' => array(),
				),
				'tag_spec' => array(
					'requires_extension' => array(
						'amp-inputmask',
					),
					'spec_name' => 'input [mask] (custom mask)',
					'spec_url' => 'https://amp.dev/documentation/components/amp-inputmask/',
				),
			),
			array(
				'attr_spec_list' => array(
					'accept' => array(),
					'accesskey' => array(),
					'autocomplete' => array(),
					'autofocus' => array(),
					'checked' => array(),
					'data-amp-bind-accept' => array(),
					'data-amp-bind-accesskey' => array(),
					'data-amp-bind-autocomplete' => array(),
					'data-amp-bind-checked' => array(),
					'data-amp-bind-disabled' => array(),
					'data-amp-bind-height' => array(),
					'data-amp-bind-inputmode' => array(),
					'data-amp-bind-max' => array(),
					'data-amp-bind-maxlength' => array(),
					'data-amp-bind-min' => array(),
					'data-amp-bind-minlength' => array(),
					'data-amp-bind-multiple' => array(),
					'data-amp-bind-pattern' => array(),
					'data-amp-bind-placeholder' => array(),
					'data-amp-bind-readonly' => array(),
					'data-amp-bind-required' => array(),
					'data-amp-bind-selectiondirection' => array(),
					'data-amp-bind-size' => array(),
					'data-amp-bind-spellcheck' => array(),
					'data-amp-bind-step' => array(),
					'data-amp-bind-type' => array(),
					'data-amp-bind-value' => array(),
					'data-amp-bind-width' => array(),
					'disabled' => array(),
					'enterkeyhint' => array(),
					'height' => array(),
					'inputmode' => array(),
					'list' => array(),
					'mask' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value' => array(
							'payment-card',
						),
					),
					'mask-output' => array(),
					'max' => array(),
					'maxlength' => array(),
					'min' => array(),
					'minlength' => array(),
					'multiple' => array(),
					'name' => array(
						'disallowed_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)',
					),
					'pattern' => array(),
					'placeholder' => array(),
					'readonly' => array(),
					'required' => array(),
					'selectiondirection' => array(),
					'size' => array(),
					'spellcheck' => array(),
					'step' => array(),
					'tabindex' => array(),
					'type' => array(
						'value' => array(
							'text',
							'tel',
							'search',
						),
					),
					'value' => array(),
					'width' => array(),
				),
				'tag_spec' => array(
					'requires_extension' => array(
						'amp-inputmask',
					),
					'spec_name' => 'input [mask=payment-card]',
					'spec_url' => 'https://amp.dev/documentation/components/amp-inputmask/',
				),
			),
			array(
				'attr_spec_list' => array(
					'accept' => array(),
					'accesskey' => array(),
					'autocomplete' => array(),
					'autofocus' => array(),
					'checked' => array(),
					'data-amp-bind-accept' => array(),
					'data-amp-bind-accesskey' => array(),
					'data-amp-bind-autocomplete' => array(),
					'data-amp-bind-checked' => array(),
					'data-amp-bind-disabled' => array(),
					'data-amp-bind-height' => array(),
					'data-amp-bind-inputmode' => array(),
					'data-amp-bind-max' => array(),
					'data-amp-bind-maxlength' => array(),
					'data-amp-bind-min' => array(),
					'data-amp-bind-minlength' => array(),
					'data-amp-bind-multiple' => array(),
					'data-amp-bind-pattern' => array(),
					'data-amp-bind-placeholder' => array(),
					'data-amp-bind-readonly' => array(),
					'data-amp-bind-required' => array(),
					'data-amp-bind-selectiondirection' => array(),
					'data-amp-bind-size' => array(),
					'data-amp-bind-spellcheck' => array(),
					'data-amp-bind-step' => array(),
					'data-amp-bind-type' => array(),
					'data-amp-bind-value' => array(),
					'data-amp-bind-width' => array(),
					'disabled' => array(),
					'enterkeyhint' => array(),
					'height' => array(),
					'inputmode' => array(),
					'list' => array(),
					'mask' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value' => array(
							'date-dd-mm-yyyy',
						),
					),
					'mask-output' => array(),
					'max' => array(),
					'maxlength' => array(),
					'min' => array(),
					'minlength' => array(),
					'multiple' => array(),
					'name' => array(
						'disallowed_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)',
					),
					'pattern' => array(),
					'placeholder' => array(),
					'readonly' => array(),
					'required' => array(),
					'selectiondirection' => array(),
					'size' => array(),
					'spellcheck' => array(),
					'step' => array(),
					'tabindex' => array(),
					'type' => array(
						'value' => array(
							'text',
							'tel',
							'search',
						),
					),
					'value' => array(),
					'width' => array(),
				),
				'tag_spec' => array(
					'requires_extension' => array(
						'amp-inputmask',
					),
					'spec_name' => 'input [mask=date-dd-mm-yyyy]',
					'spec_url' => 'https://amp.dev/documentation/components/amp-inputmask/',
				),
			),
			array(
				'attr_spec_list' => array(
					'accept' => array(),
					'accesskey' => array(),
					'autocomplete' => array(),
					'autofocus' => array(),
					'checked' => array(),
					'data-amp-bind-accept' => array(),
					'data-amp-bind-accesskey' => array(),
					'data-amp-bind-autocomplete' => array(),
					'data-amp-bind-checked' => array(),
					'data-amp-bind-disabled' => array(),
					'data-amp-bind-height' => array(),
					'data-amp-bind-inputmode' => array(),
					'data-amp-bind-max' => array(),
					'data-amp-bind-maxlength' => array(),
					'data-amp-bind-min' => array(),
					'data-amp-bind-minlength' => array(),
					'data-amp-bind-multiple' => array(),
					'data-amp-bind-pattern' => array(),
					'data-amp-bind-placeholder' => array(),
					'data-amp-bind-readonly' => array(),
					'data-amp-bind-required' => array(),
					'data-amp-bind-selectiondirection' => array(),
					'data-amp-bind-size' => array(),
					'data-amp-bind-spellcheck' => array(),
					'data-amp-bind-step' => array(),
					'data-amp-bind-type' => array(),
					'data-amp-bind-value' => array(),
					'data-amp-bind-width' => array(),
					'disabled' => array(),
					'enterkeyhint' => array(),
					'height' => array(),
					'inputmode' => array(),
					'list' => array(),
					'mask' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value' => array(
							'date-mm-dd-yyyy',
						),
					),
					'mask-output' => array(),
					'max' => array(),
					'maxlength' => array(),
					'min' => array(),
					'minlength' => array(),
					'multiple' => array(),
					'name' => array(
						'disallowed_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)',
					),
					'pattern' => array(),
					'placeholder' => array(),
					'readonly' => array(),
					'required' => array(),
					'selectiondirection' => array(),
					'size' => array(),
					'spellcheck' => array(),
					'step' => array(),
					'tabindex' => array(),
					'type' => array(
						'value' => array(
							'text',
							'tel',
							'search',
						),
					),
					'value' => array(),
					'width' => array(),
				),
				'tag_spec' => array(
					'requires_extension' => array(
						'amp-inputmask',
					),
					'spec_name' => 'input [mask=date-mm-dd-yyyy]',
					'spec_url' => 'https://amp.dev/documentation/components/amp-inputmask/',
				),
			),
			array(
				'attr_spec_list' => array(
					'accept' => array(),
					'accesskey' => array(),
					'autocomplete' => array(),
					'autofocus' => array(),
					'checked' => array(),
					'data-amp-bind-accept' => array(),
					'data-amp-bind-accesskey' => array(),
					'data-amp-bind-autocomplete' => array(),
					'data-amp-bind-checked' => array(),
					'data-amp-bind-disabled' => array(),
					'data-amp-bind-height' => array(),
					'data-amp-bind-inputmode' => array(),
					'data-amp-bind-max' => array(),
					'data-amp-bind-maxlength' => array(),
					'data-amp-bind-min' => array(),
					'data-amp-bind-minlength' => array(),
					'data-amp-bind-multiple' => array(),
					'data-amp-bind-pattern' => array(),
					'data-amp-bind-placeholder' => array(),
					'data-amp-bind-readonly' => array(),
					'data-amp-bind-required' => array(),
					'data-amp-bind-selectiondirection' => array(),
					'data-amp-bind-size' => array(),
					'data-amp-bind-spellcheck' => array(),
					'data-amp-bind-step' => array(),
					'data-amp-bind-type' => array(),
					'data-amp-bind-value' => array(),
					'data-amp-bind-width' => array(),
					'disabled' => array(),
					'enterkeyhint' => array(),
					'height' => array(),
					'inputmode' => array(),
					'list' => array(),
					'mask' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value' => array(
							'date-mm-yy',
						),
					),
					'mask-output' => array(),
					'max' => array(),
					'maxlength' => array(),
					'min' => array(),
					'minlength' => array(),
					'multiple' => array(),
					'name' => array(
						'disallowed_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)',
					),
					'pattern' => array(),
					'placeholder' => array(),
					'readonly' => array(),
					'required' => array(),
					'selectiondirection' => array(),
					'size' => array(),
					'spellcheck' => array(),
					'step' => array(),
					'tabindex' => array(),
					'type' => array(
						'value' => array(
							'text',
							'tel',
							'search',
						),
					),
					'value' => array(),
					'width' => array(),
				),
				'tag_spec' => array(
					'requires_extension' => array(
						'amp-inputmask',
					),
					'spec_name' => 'input [mask=date-mm-yy]',
					'spec_url' => 'https://amp.dev/documentation/components/amp-inputmask/',
				),
			),
			array(
				'attr_spec_list' => array(
					'accept' => array(),
					'accesskey' => array(),
					'autocomplete' => array(),
					'autofocus' => array(),
					'checked' => array(),
					'data-amp-bind-accept' => array(),
					'data-amp-bind-accesskey' => array(),
					'data-amp-bind-autocomplete' => array(),
					'data-amp-bind-checked' => array(),
					'data-amp-bind-disabled' => array(),
					'data-amp-bind-height' => array(),
					'data-amp-bind-inputmode' => array(),
					'data-amp-bind-max' => array(),
					'data-amp-bind-maxlength' => array(),
					'data-amp-bind-min' => array(),
					'data-amp-bind-minlength' => array(),
					'data-amp-bind-multiple' => array(),
					'data-amp-bind-pattern' => array(),
					'data-amp-bind-placeholder' => array(),
					'data-amp-bind-readonly' => array(),
					'data-amp-bind-required' => array(),
					'data-amp-bind-selectiondirection' => array(),
					'data-amp-bind-size' => array(),
					'data-amp-bind-spellcheck' => array(),
					'data-amp-bind-step' => array(),
					'data-amp-bind-type' => array(),
					'data-amp-bind-value' => array(),
					'data-amp-bind-width' => array(),
					'disabled' => array(),
					'enterkeyhint' => array(),
					'height' => array(),
					'inputmode' => array(),
					'list' => array(),
					'mask' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value' => array(
							'date-yyyy-mm-dd',
						),
					),
					'mask-output' => array(),
					'max' => array(),
					'maxlength' => array(),
					'min' => array(),
					'minlength' => array(),
					'multiple' => array(),
					'name' => array(
						'disallowed_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)',
					),
					'pattern' => array(),
					'placeholder' => array(),
					'readonly' => array(),
					'required' => array(),
					'selectiondirection' => array(),
					'size' => array(),
					'spellcheck' => array(),
					'step' => array(),
					'tabindex' => array(),
					'type' => array(
						'value' => array(
							'text',
							'tel',
							'search',
						),
					),
					'value' => array(),
					'width' => array(),
				),
				'tag_spec' => array(
					'requires_extension' => array(
						'amp-inputmask',
					),
					'spec_name' => 'input [mask=date-yyyy-mm-dd]',
					'spec_url' => 'https://amp.dev/documentation/components/amp-inputmask/',
				),
			),
		),
		'ins' => array(
			array(
				'attr_spec_list' => array(
					'cite' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_empty' => true,
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'datetime' => array(),
				),
				'tag_spec' => array(),
			),
		),
		'kbd' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'label' => array(
			array(
				'attr_spec_list' => array(
					'for' => array(),
				),
				'tag_spec' => array(
					'spec_url' => 'https://amp.dev/documentation/components/amp-form/',
				),
			),
		),
		'legend' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'li' => array(
			array(
				'attr_spec_list' => array(
					'value' => array(
						'value_regex' => '[0-9]*',
					),
				),
				'tag_spec' => array(),
			),
		),
		'line' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'externalresourcesrequired' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'image-rendering' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'requiredextensions' => array(),
					'requiredfeatures' => array(),
					'shape-rendering' => array(),
					'sketch:type' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'systemlanguage' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'transform' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'x1' => array(),
					'x2' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
					'y1' => array(),
					'y2' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'lineargradient' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'externalresourcesrequired' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'gradienttransform' => array(),
					'gradientunits' => array(),
					'image-rendering' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'shape-rendering' => array(),
					'spreadmethod' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'x1' => array(),
					'x2' => array(),
					'xlink:actuate' => array(),
					'xlink:arcrole' => array(),
					'xlink:href' => array(
						'alternative_names' => array(
							'href',
						),
						'value_url' => array(
							'allow_empty' => false,
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'xlink:role' => array(),
					'xlink:show' => array(),
					'xlink:title' => array(),
					'xlink:type' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
					'y1' => array(),
					'y2' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'link' => array(
			array(
				'attr_spec_list' => array(
					'charset' => array(
						'value_casei' => array(
							'utf-8',
						),
					),
					'color' => array(),
					'crossorigin' => array(),
					'fetchpriority' => array(
						'value_casei' => array(
							'high',
							'low',
							'auto',
						),
					),
					'href' => array(),
					'hreflang' => array(),
					'media' => array(),
					'rel' => array(
						'disallowed_value_regex' => '(^|\\s)(canonical|components|import|manifest|modulepreload|preload|serviceworker|stylesheet|subresource)(\\s|$)',
						'mandatory' => true,
					),
					'sizes' => array(),
					'target' => array(),
					'type' => array(),
				),
				'tag_spec' => array(
					'disallowed_ancestor' => array(
						'template',
					),
					'spec_name' => 'link rel=',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
				),
			),
			array(
				'attr_spec_list' => array(
					'charset' => array(
						'value_casei' => array(
							'utf-8',
						),
					),
					'color' => array(),
					'crossorigin' => array(),
					'fetchpriority' => array(
						'value_casei' => array(
							'high',
							'low',
							'auto',
						),
					),
					'href' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'mandatory' => true,
						'value_url' => array(
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'hreflang' => array(),
					'media' => array(),
					'rel' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'canonical',
						),
					),
					'sizes' => array(),
					'target' => array(),
					'type' => array(),
				),
				'tag_spec' => array(
					'mandatory' => true,
					'mandatory_parent' => 'head',
					'spec_name' => 'link rel=canonical',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup',
					'unique' => true,
				),
			),
			array(
				'attr_spec_list' => array(
					'charset' => array(
						'value_casei' => array(
							'utf-8',
						),
					),
					'color' => array(),
					'crossorigin' => array(),
					'fetchpriority' => array(
						'value_casei' => array(
							'high',
							'low',
							'auto',
						),
					),
					'href' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'mandatory' => true,
						'value_url' => array(
							'protocol' => array(
								'https',
							),
						),
					),
					'hreflang' => array(),
					'media' => array(),
					'rel' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'manifest',
						),
					),
					'sizes' => array(),
					'target' => array(),
					'type' => array(),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'head',
					'spec_name' => 'link rel=manifest',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
				),
			),
			array(
				'attr_spec_list' => array(
					'as' => array(
						'mandatory' => true,
						'value' => array(
							'script',
						),
					),
					'crossorigin' => array(
						'mandatory' => true,
						'value' => array(
							'anonymous',
						),
					),
					'href' => array(
						'mandatory' => true,
						'value_regex' => '.*\\.mjs$',
					),
					'rel' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'modulepreload',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'head',
					'spec_name' => 'link rel=modulepreload',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
				),
			),
			array(
				'attr_spec_list' => array(
					'as' => array(),
					'charset' => array(
						'value_casei' => array(
							'utf-8',
						),
					),
					'color' => array(),
					'crossorigin' => array(),
					'fetchpriority' => array(
						'value_casei' => array(
							'high',
							'low',
							'auto',
						),
					),
					'href' => array(),
					'hreflang' => array(),
					'imagesizes' => array(),
					'imagesrcset' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'media' => array(),
					'rel' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'preload',
						),
					),
					'sizes' => array(),
					'target' => array(),
					'type' => array(),
				),
				'tag_spec' => array(
					'disallowed_ancestor' => array(
						'template',
					),
					'spec_name' => 'link rel=preload',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(),
					'crossorigin' => array(),
					'href' => array(
						'mandatory' => true,
						'value_regex' => 'https:\\/\\/cdn\\.materialdesignicons\\.com\\/([0-9]+\\.?)+\\/css\\/materialdesignicons\\.min\\.css|https:\\/\\/cloud\\.typography\\.com\\/[0-9]*\\/[0-9]*\\/css\\/fonts\\.css|https:\\/\\/fast\\.fonts\\.net\\/.*|https:\\/\\/fonts\\.googleapis\\.com\\/css2?\\?.*|https:\\/\\/fonts\\.googleapis\\.com\\/icon\\?.*|https:\\/\\/fonts\\.googleapis\\.com\\/earlyaccess\\/.*\\.css|https:\\/\\/maxcdn\\.bootstrapcdn\\.com\\/font-awesome\\/([0-9]+\\.?)+\\/css\\/font-awesome\\.min\\.css(\\?.*)?|https:\\/\\/(use|pro|kit)\\.fontawesome\\.com\\/releases\\/v([0-9]+\\.?)+\\/css\\/[0-9a-zA-Z-]+\\.css|https:\\/\\/(use|pro|kit)\\.fontawesome\\.com\\/[0-9a-zA-Z-]+\\.css|https:\\/\\/use\\.typekit\\.net\\/[\\w\\p{L}\\p{N}_]+\\.css',
					),
					'integrity' => array(),
					'media' => array(),
					'nonce' => array(),
					'rel' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'stylesheet',
						),
					),
					'type' => array(
						'value_casei' => array(
							'text/css',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'head',
					'spec_name' => 'link rel=stylesheet for fonts',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#custom-fonts',
				),
			),
			array(
				'attr_spec_list' => array(
					'charset' => array(
						'value_casei' => array(
							'utf-8',
						),
					),
					'color' => array(),
					'crossorigin' => array(),
					'fetchpriority' => array(
						'value_casei' => array(
							'high',
							'low',
							'auto',
						),
					),
					'href' => array(
						'mandatory' => true,
					),
					'hreflang' => array(),
					'itemprop' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'sameas',
						),
					),
					'media' => array(),
					'sizes' => array(),
					'target' => array(),
					'type' => array(),
				),
				'tag_spec' => array(
					'spec_name' => 'link itemprop=sameAs',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
				),
			),
			array(
				'attr_spec_list' => array(
					'charset' => array(
						'value_casei' => array(
							'utf-8',
						),
					),
					'color' => array(),
					'crossorigin' => array(),
					'fetchpriority' => array(
						'value_casei' => array(
							'high',
							'low',
							'auto',
						),
					),
					'href' => array(
						'mandatory' => true,
					),
					'hreflang' => array(),
					'itemprop' => array(
						'mandatory' => true,
					),
					'media' => array(),
					'sizes' => array(),
					'target' => array(),
					'type' => array(),
				),
				'tag_spec' => array(
					'spec_name' => 'link itemprop=',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
				),
			),
			array(
				'attr_spec_list' => array(
					'charset' => array(
						'value_casei' => array(
							'utf-8',
						),
					),
					'color' => array(),
					'crossorigin' => array(),
					'fetchpriority' => array(
						'value_casei' => array(
							'high',
							'low',
							'auto',
						),
					),
					'href' => array(
						'mandatory' => true,
					),
					'hreflang' => array(),
					'media' => array(),
					'property' => array(
						'mandatory' => true,
					),
					'sizes' => array(),
					'target' => array(),
					'type' => array(),
				),
				'tag_spec' => array(
					'spec_name' => 'link property=',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
				),
			),
		),
		'listing' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'main' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'mark' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'marker' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'externalresourcesrequired' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'image-rendering' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'markerheight' => array(),
					'markerunits' => array(),
					'markerwidth' => array(),
					'mask' => array(),
					'opacity' => array(),
					'orient' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'preserveaspectratio' => array(),
					'refx' => array(),
					'refy' => array(),
					'shape-rendering' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'transform' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'viewbox' => array(),
					'visibility' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'mask' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'externalresourcesrequired' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'height' => array(),
					'image-rendering' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'maskcontentunits' => array(),
					'maskunits' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'requiredextensions' => array(),
					'requiredfeatures' => array(),
					'shape-rendering' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'systemlanguage' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'width' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'x' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
					'y' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'meta' => array(
			array(
				'attr_spec_list' => array(
					'charset' => array(
						'dispatch_key' => 1,
						'mandatory' => true,
						'value_casei' => array(
							'utf-8',
						),
					),
				),
				'tag_spec' => array(
					'mandatory' => true,
					'mandatory_parent' => 'head',
					'spec_name' => 'meta charset=utf-8',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup',
					'unique' => true,
				),
			),
			array(
				'attr_spec_list' => array(
					'content' => array(
						'mandatory' => true,
						'value_properties' => array(
							'height' => array(),
							'initial-scale' => array(),
							'maximum-scale' => array(),
							'minimum-scale' => array(),
							'shrink-to-fit' => array(),
							'user-scalable' => array(),
							'viewport-fit' => array(),
							'width' => array(
								'mandatory' => true,
								'value' => 'device-width',
							),
						),
					),
					'name' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value' => array(
							'viewport',
						),
					),
				),
				'tag_spec' => array(
					'mandatory' => true,
					'mandatory_parent' => 'head',
					'spec_name' => 'meta name=viewport',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup',
					'unique' => true,
				),
			),
			array(
				'attr_spec_list' => array(
					'content' => array(
						'mandatory' => true,
						'value_properties' => array(
							'chrome' => array(
								'value' => '1',
							),
							'ie' => array(
								'value' => 'edge',
							),
						),
					),
					'http-equiv' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'x-ua-compatible',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'head',
					'spec_name' => 'meta http-equiv=X-UA-Compatible',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
				),
			),
			array(
				'attr_spec_list' => array(
					'content' => array(
						'mandatory' => true,
						'value_regex' => '.*app-id=.*',
					),
					'name' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'apple-itunes-app',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'head',
					'spec_name' => 'meta name=apple-itunes-app',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
				),
			),
			array(
				'attr_spec_list' => array(
					'content' => array(
						'mandatory' => true,
					),
					'name' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'amp-experiments-opt-in',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'head',
					'spec_name' => 'meta name=amp-experiments-opt-in',
				),
			),
			array(
				'attr_spec_list' => array(
					'content' => array(
						'mandatory' => true,
						'value_url' => array(
							'protocol' => array(
								'https',
							),
						),
					),
					'name' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'amp-3p-iframe-src',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'head',
					'spec_name' => 'meta name=amp-3p-iframe-src',
					'spec_url' => 'https://amp.dev/documentation/components/amp-ad/',
				),
			),
			array(
				'attr_spec_list' => array(
					'content' => array(
						'mandatory' => true,
					),
					'name' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'amp-consent-blocking',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'head',
					'spec_name' => 'meta name=amp-consent-blocking',
					'unique' => true,
				),
			),
			array(
				'attr_spec_list' => array(
					'content' => array(
						'mandatory' => true,
					),
					'name' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'amp-experiment-token',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'head',
					'spec_name' => 'meta name=amp-experiment-token',
				),
			),
			array(
				'attr_spec_list' => array(
					'content' => array(
						'mandatory' => true,
					),
					'name' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'amp-link-variable-allowed-origin',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'head',
					'spec_name' => 'meta name=amp-link-variable-allowed-origin',
				),
			),
			array(
				'attr_spec_list' => array(
					'content' => array(
						'mandatory' => true,
					),
					'name' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'amp-google-client-id-api',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'head',
					'spec_name' => 'meta name=amp-google-clientid-id-api',
				),
			),
			array(
				'attr_spec_list' => array(
					'name' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'amp-ad-doubleclick-sra',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'head',
					'spec_name' => 'meta name=amp-ad-doubleclick-sra',
				),
			),
			array(
				'attr_spec_list' => array(
					'content' => array(
						'mandatory' => true,
					),
					'name' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'amp-list-load-more',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'head',
					'spec_name' => 'meta name=amp-list-load-more',
				),
			),
			array(
				'attr_spec_list' => array(
					'content' => array(
						'mandatory' => true,
					),
					'name' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'amp-recaptcha-input',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'head',
					'spec_name' => 'meta name=amp-recaptcha-input',
				),
			),
			array(
				'attr_spec_list' => array(
					'content' => array(
						'mandatory' => true,
					),
					'name' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'amp-script-src',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'head',
					'spec_name' => 'meta name=amp-script-src',
				),
			),
			array(
				'attr_spec_list' => array(
					'content' => array(),
					'itemprop' => array(),
					'media' => array(),
					'name' => array(
						'disallowed_value_regex' => '(^|\\s)(amp-.*|amp4ads-.*|apple-itunes-app|content-disposition|revisit-after|viewport)(\\s|$)',
					),
					'property' => array(),
					'scheme' => array(),
				),
				'tag_spec' => array(
					'spec_name' => 'meta name= and content=',
				),
			),
			array(
				'attr_spec_list' => array(
					'content' => array(
						'mandatory' => true,
						'value_casei' => array(
							'text/html; charset=utf-8',
						),
					),
					'http-equiv' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'content-type',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'head',
					'spec_name' => 'meta http-equiv=Content-Type',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
				),
			),
			array(
				'attr_spec_list' => array(
					'content' => array(
						'mandatory' => true,
					),
					'http-equiv' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'content-language',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'head',
					'spec_name' => 'meta http-equiv=content-language',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
				),
			),
			array(
				'attr_spec_list' => array(
					'content' => array(
						'mandatory' => true,
					),
					'http-equiv' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'pics-label',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'head',
					'spec_name' => 'meta http-equiv=pics-label',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
				),
			),
			array(
				'attr_spec_list' => array(
					'content' => array(
						'mandatory' => true,
					),
					'http-equiv' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'imagetoolbar',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'head',
					'spec_name' => 'meta http-equiv=imagetoolbar',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
				),
			),
			array(
				'attr_spec_list' => array(
					'content' => array(
						'mandatory' => true,
						'value_casei' => array(
							'text/css',
						),
					),
					'http-equiv' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'content-style-type',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'head',
					'spec_name' => 'meta http-equiv=Content-Style-Type',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
				),
			),
			array(
				'attr_spec_list' => array(
					'content' => array(
						'mandatory' => true,
						'value_casei' => array(
							'text/javascript',
						),
					),
					'http-equiv' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'content-script-type',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'head',
					'spec_name' => 'meta http-equiv=Content-Script-Type',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
				),
			),
			array(
				'attr_spec_list' => array(
					'content' => array(
						'mandatory' => true,
					),
					'http-equiv' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'origin-trial',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'head',
					'spec_name' => 'meta http-equiv=origin-trial',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
				),
			),
			array(
				'attr_spec_list' => array(
					'content' => array(
						'mandatory' => true,
					),
					'http-equiv' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'resource-type',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'head',
					'spec_name' => 'meta http-equiv=resource-type',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
				),
			),
			array(
				'attr_spec_list' => array(
					'content' => array(
						'mandatory' => true,
						'value_casei' => array(
							'off',
							'on',
						),
					),
					'http-equiv' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'x-dns-prefetch-control',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'head',
					'spec_name' => 'meta http-equiv=x-dns-prefetch-control',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
				),
			),
			array(
				'attr_spec_list' => array(
					'content' => array(
						'mandatory' => true,
					),
					'name' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'amp-ad-enable-refresh',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'head',
					'spec_name' => 'meta name=amp-ad-enable-refresh',
				),
			),
			array(
				'attr_spec_list' => array(
					'content' => array(
						'mandatory' => true,
					),
					'name' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'amp-to-amp-navigation',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'head',
					'spec_name' => 'meta name=amp-to-amp-navigation',
					'unique' => true,
				),
			),
			array(
				'attr_spec_list' => array(
					'content' => array(
						'mandatory' => true,
					),
					'name' => array(
						'mandatory' => true,
						'value_casei' => array(
							'amp-story-generator-name',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'head',
					'spec_name' => 'meta name=amp-story-generator-name',
					'unique' => true,
				),
			),
			array(
				'attr_spec_list' => array(
					'content' => array(
						'mandatory' => true,
					),
					'name' => array(
						'mandatory' => true,
						'value_casei' => array(
							'amp-story-generator-version',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'head',
					'spec_name' => 'meta name=amp-story-generator-version',
					'unique' => true,
				),
			),
		),
		'metadata' => array(
			array(
				'attr_spec_list' => array(
					'style' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'meter' => array(
			array(
				'attr_spec_list' => array(
					'high' => array(),
					'low' => array(),
					'max' => array(),
					'min' => array(),
					'optimum' => array(),
					'value' => array(),
				),
				'tag_spec' => array(),
			),
		),
		'multicol' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'nav' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
			array(
				'attr_spec_list' => array(
					'toolbar' => array(
						'dispatch_key' => 1,
						'mandatory' => true,
					),
					'toolbar-target' => array(
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'child_tags' => array(
						'child_tag_name_oneof' => array(
							'ol',
							'ul',
						),
						'mandatory_num_child_tags' => 1,
					),
					'mandatory_parent' => 'amp-sidebar',
					'spec_name' => 'amp-sidebar > nav',
				),
			),
		),
		'nextid' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'nobr' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'noscript' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(
					'child_tags' => array(
						'child_tag_name_oneof' => array(
							'style',
						),
						'mandatory_min_num_child_tags' => 1,
					),
					'mandatory_parent' => 'head',
					'spec_name' => 'noscript enclosure for amp style tags',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amp-boilerplate/?format=websites',
				),
			),
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(
					'disallowed_ancestor' => array(
						'noscript',
					),
					'mandatory_ancestor' => 'body',
				),
			),
		),
		'o:p' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'ol' => array(
			array(
				'attr_spec_list' => array(
					'reversed' => array(
						'value' => array(
							'',
						),
					),
					'start' => array(
						'value_regex' => '[0-9]*',
					),
					'type' => array(
						'value_regex' => '[1AaIi]',
					),
				),
				'tag_spec' => array(),
			),
		),
		'optgroup' => array(
			array(
				'attr_spec_list' => array(
					'data-amp-bind-disabled' => array(),
					'data-amp-bind-label' => array(),
					'disabled' => array(),
					'label' => array(),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'select',
					'spec_url' => 'https://amp.dev/documentation/components/amp-form/',
				),
			),
		),
		'option' => array(
			array(
				'attr_spec_list' => array(
					'data-amp-bind-disabled' => array(),
					'data-amp-bind-label' => array(),
					'data-amp-bind-selected' => array(),
					'data-amp-bind-value' => array(),
					'disabled' => array(),
					'label' => array(),
					'selected' => array(),
					'value' => array(),
				),
				'tag_spec' => array(
					'spec_url' => 'https://amp.dev/documentation/components/amp-form/',
				),
			),
		),
		'output' => array(
			array(
				'attr_spec_list' => array(
					'for' => array(),
					'form' => array(),
					'name' => array(
						'disallowed_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)',
					),
				),
				'tag_spec' => array(),
			),
		),
		'p' => array(
			array(
				'attr_spec_list' => array(
					'align' => array(),
				),
				'tag_spec' => array(),
			),
		),
		'path' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'd' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'externalresourcesrequired' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'image-rendering' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pathlength' => array(),
					'pointer-events' => array(),
					'requiredextensions' => array(),
					'requiredfeatures' => array(),
					'shape-rendering' => array(),
					'sketch:type' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'systemlanguage' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'transform' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'pattern' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'externalresourcesrequired' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'height' => array(),
					'image-rendering' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'patterncontentunits' => array(),
					'patterntransform' => array(),
					'patternunits' => array(),
					'pointer-events' => array(),
					'preserveaspectratio' => array(),
					'requiredextensions' => array(),
					'requiredfeatures' => array(),
					'shape-rendering' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'systemlanguage' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'viewbox' => array(),
					'visibility' => array(),
					'width' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'x' => array(),
					'xlink:actuate' => array(),
					'xlink:arcrole' => array(),
					'xlink:href' => array(
						'alternative_names' => array(
							'href',
						),
						'value_url' => array(
							'allow_empty' => false,
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'xlink:role' => array(),
					'xlink:show' => array(),
					'xlink:title' => array(),
					'xlink:type' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
					'y' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'picture' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(
					'mandatory_parent' => 'noscript',
					'spec_url' => 'https://amp.dev/documentation/components/amp-img/',
				),
			),
		),
		'polygon' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'externalresourcesrequired' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'image-rendering' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'points' => array(),
					'requiredextensions' => array(),
					'requiredfeatures' => array(),
					'shape-rendering' => array(),
					'sketch:type' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'systemlanguage' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'transform' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'polyline' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'externalresourcesrequired' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'image-rendering' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'points' => array(),
					'requiredextensions' => array(),
					'requiredfeatures' => array(),
					'shape-rendering' => array(),
					'sketch:type' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'systemlanguage' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'transform' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'pre' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'progress' => array(
			array(
				'attr_spec_list' => array(
					'max' => array(),
					'value' => array(),
				),
				'tag_spec' => array(),
			),
		),
		'q' => array(
			array(
				'attr_spec_list' => array(
					'cite' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_empty' => true,
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
				),
				'tag_spec' => array(),
			),
		),
		'radialgradient' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'cx' => array(),
					'cy' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'externalresourcesrequired' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'fr' => array(),
					'fx' => array(),
					'fy' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'gradienttransform' => array(),
					'gradientunits' => array(),
					'image-rendering' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'r' => array(),
					'shape-rendering' => array(),
					'spreadmethod' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'xlink:actuate' => array(),
					'xlink:arcrole' => array(),
					'xlink:href' => array(
						'alternative_names' => array(
							'href',
						),
						'value_url' => array(
							'allow_empty' => false,
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'xlink:role' => array(),
					'xlink:show' => array(),
					'xlink:title' => array(),
					'xlink:type' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'rb' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'rect' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'externalresourcesrequired' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'height' => array(),
					'image-rendering' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'requiredextensions' => array(),
					'requiredfeatures' => array(),
					'rx' => array(),
					'ry' => array(),
					'shape-rendering' => array(),
					'sketch:type' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'systemlanguage' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'transform' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'width' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'x' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
					'y' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'rp' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'rt' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'rtc' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'ruby' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		's' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'samp' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'script' => array(
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'src' => array(
						'mandatory' => true,
						'value' => array(
							'https://cdn.ampproject.org/v0.js',
							'https://ampjs.org/v0.js',
						),
					),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'cdata' => array(
					'disallowed_cdata_regex' => array(
						array(
							'error_message' => 'contents',
							'regex' => '.',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'head',
					'spec_name' => 'amphtml engine script',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup',
					'unique' => true,
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'src' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value' => array(
							'https://cdn.ampproject.org/lts/v0.js',
							'https://ampjs.org/lts/v0.js',
						),
					),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'cdata' => array(
					'disallowed_cdata_regex' => array(
						array(
							'error_message' => 'contents',
							'regex' => '.',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'head',
					'spec_name' => 'amphtml engine script (LTS)',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup',
					'unique' => true,
				),
			),
			array(
				'attr_spec_list' => array(
					'nonce' => array(),
					'type' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'application/ld+json',
						),
					),
				),
				'cdata' => array(
					'disallowed_cdata_regex' => array(
						array(
							'error_message' => 'html comments',
							'regex' => '<!--',
						),
					),
				),
				'tag_spec' => array(
					'spec_name' => 'script type=application/ld+json',
				),
			),
			array(
				'attr_spec_list' => array(
					'id' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value_casei' => array(
							'amp-rtc',
						),
					),
					'nonce' => array(),
					'type' => array(
						'mandatory' => true,
						'value_casei' => array(
							'application/json',
						),
					),
				),
				'cdata' => array(
					'disallowed_cdata_regex' => array(
						array(
							'error_message' => 'html comments',
							'regex' => '<!--',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'head',
					'spec_name' => 'script id=amp-rtc',
					'unique' => true,
				),
			),
			array(
				'attr_spec_list' => array(
					'type' => array(
						'dispatch_key' => 3,
						'mandatory' => true,
						'value_casei' => array(
							'application/json',
						),
					),
				),
				'cdata' => array(
					'disallowed_cdata_regex' => array(
						array(
							'error_message' => 'html comments',
							'regex' => '<!--',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'amp-ima-video',
					'spec_name' => 'amp-ima-video > script[type=application/json]',
				),
			),
			array(
				'attr_spec_list' => array(
					'amp-onerror' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
				),
				'cdata' => array(
					'mandatory_cdata' => 'document.querySelector("script[src*=\'/v0.js\']").onerror=function(){document.querySelector(\'style[amp-boilerplate]\').textContent=\'\'}',
				),
				'tag_spec' => array(
					'mandatory_parent' => 'head',
					'spec_name' => 'script amp-onerror (v0.js)',
					'unique' => true,
				),
			),
			array(
				'attr_spec_list' => array(
					'id' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value' => array(
							'amp-access',
						),
					),
					'nonce' => array(),
					'type' => array(
						'mandatory' => true,
						'value_casei' => array(
							'application/json',
						),
					),
				),
				'cdata' => array(
					'disallowed_cdata_regex' => array(
						array(
							'error_message' => 'html comments',
							'regex' => '<!--',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'head',
					'requires_extension' => array(
						'amp-access',
					),
					'spec_name' => 'amp-access extension .json script',
					'unique' => true,
				),
			),
			array(
				'attr_spec_list' => array(
					'nonce' => array(),
					'type' => array(
						'dispatch_key' => 3,
						'mandatory' => true,
						'value_casei' => array(
							'application/json',
						),
					),
				),
				'cdata' => array(
					'disallowed_cdata_regex' => array(
						array(
							'error_message' => 'html comments',
							'regex' => '<!--',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'amp-analytics',
					'requires_extension' => array(
						'amp-analytics',
					),
					'spec_name' => 'amp-analytics extension .json script',
					'spec_url' => 'https://amp.dev/documentation/components/amp-analytics/',
				),
			),
			array(
				'attr_spec_list' => array(
					'nonce' => array(),
					'type' => array(
						'dispatch_key' => 3,
						'mandatory' => true,
						'value_casei' => array(
							'application/json',
						),
					),
				),
				'cdata' => array(
					'disallowed_cdata_regex' => array(
						array(
							'error_message' => 'html comments',
							'regex' => '<!--',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'amp-animation',
					'requires_extension' => array(
						'amp-animation',
					),
					'spec_name' => 'amp-animation extension .json script',
				),
			),
			array(
				'attr_spec_list' => array(
					'nonce' => array(),
					'type' => array(
						'dispatch_key' => 3,
						'mandatory' => true,
						'value_casei' => array(
							'application/json',
						),
					),
				),
				'cdata' => array(
					'disallowed_cdata_regex' => array(
						array(
							'error_message' => 'html comments',
							'regex' => '<!--',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'amp-autocomplete',
					'requires_extension' => array(
						'amp-autocomplete',
					),
					'spec_name' => 'amp-autocomplete JSON',
				),
			),
			array(
				'attr_spec_list' => array(
					'nonce' => array(),
					'type' => array(
						'dispatch_key' => 3,
						'mandatory' => true,
						'value_casei' => array(
							'application/json',
						),
					),
				),
				'cdata' => array(
					'disallowed_cdata_regex' => array(
						array(
							'error_message' => 'html comments',
							'regex' => '<!--',
						),
					),
					'max_bytes' => 100000,
					'max_bytes_spec_url' => 'https://amp.dev/documentation/components/amp-bind#state',
				),
				'tag_spec' => array(
					'mandatory_parent' => 'amp-state',
					'requires_extension' => array(
						'amp-bind',
					),
					'spec_name' => 'amp-bind extension .json script',
					'spec_url' => 'https://amp.dev/documentation/components/amp-bind/',
				),
			),
			array(
				'attr_spec_list' => array(
					'nonce' => array(),
					'type' => array(
						'dispatch_key' => 3,
						'mandatory' => true,
						'value_casei' => array(
							'application/json',
						),
					),
				),
				'cdata' => array(
					'disallowed_cdata_regex' => array(
						array(
							'error_message' => 'html comments',
							'regex' => '<!--',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'amp-consent',
					'requires_extension' => array(
						'amp-consent',
					),
					'spec_name' => 'amp-consent extension .json script',
					'unique' => true,
				),
			),
			array(
				'attr_spec_list' => array(
					'nonce' => array(),
					'type' => array(
						'dispatch_key' => 3,
						'mandatory' => true,
						'value_casei' => array(
							'application/json',
						),
					),
				),
				'cdata' => array(
					'disallowed_cdata_regex' => array(
						array(
							'error_message' => 'html comments',
							'regex' => '<!--',
						),
					),
					'max_bytes' => 15000,
					'max_bytes_spec_url' => 'https://amp.dev/documentation/components/amp-experiment/#configuration',
				),
				'tag_spec' => array(
					'mandatory_parent' => 'amp-experiment',
					'spec_name' => 'amp-experiment extension .json script',
					'spec_url' => 'https://amp.dev/documentation/components/amp-experiment/',
				),
			),
			array(
				'attr_spec_list' => array(
					'nonce' => array(),
					'type' => array(
						'dispatch_key' => 3,
						'mandatory' => true,
						'value_casei' => array(
							'application/json',
						),
					),
				),
				'cdata' => array(
					'disallowed_cdata_regex' => array(
						array(
							'error_message' => 'html comments',
							'regex' => '<!--',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'amp-geo',
					'requires_extension' => array(
						'amp-geo',
					),
					'spec_name' => 'amp-geo extension .json script',
					'spec_url' => 'https://amp.dev/documentation/components/amp-geo/',
				),
			),
			array(
				'attr_spec_list' => array(
					'nonce' => array(),
					'type' => array(
						'dispatch_key' => 3,
						'mandatory' => true,
						'value_casei' => array(
							'application/json',
						),
					),
				),
				'cdata' => array(
					'disallowed_cdata_regex' => array(
						array(
							'error_message' => 'html comments',
							'regex' => '<!--',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'amp-link-rewriter',
					'requires_extension' => array(
						'amp-link-rewriter',
					),
					'spec_name' => 'amp-link-rewriter extension .json script',
				),
			),
			array(
				'attr_spec_list' => array(
					'id' => array(
						'disallowed_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|AMP|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|i-amphtml-\\S*|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)',
					),
					'nonce' => array(),
					'template' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value' => array(
							'amp-mustache',
						),
					),
					'type' => array(
						'mandatory' => true,
						'value_casei' => array(
							'text/plain',
						),
					),
				),
				'cdata' => array(
					'disallowed_cdata_regex' => array(
						array(
							'error_message' => 'html comments',
							'regex' => '<!--',
						),
					),
				),
				'tag_spec' => array(
					'disallowed_ancestor' => array(
						'template',
						'amp-date-picker',
						'form div [submit-success][template]',
						'form div [submit-error][template]',
						'form div [submitting][template]',
						'form div [verify-error][template]',
					),
					'requires_extension' => array(
						'amp-mustache',
					),
					'spec_name' => 'SCRIPT type=text/plain',
				),
			),
			array(
				'attr_spec_list' => array(
					'type' => array(
						'dispatch_key' => 3,
						'mandatory' => true,
						'value_casei' => array(
							'application/json',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'amp-next-page',
					'requires_extension' => array(
						'amp-next-page',
					),
					'spec_name' => 'AMP-NEXT-PAGE > SCRIPT[type=application/json]',
					'spec_url' => 'https://amp.dev/documentation/components/amp-next-page/',
				),
			),
			array(
				'attr_spec_list' => array(
					'id' => array(
						'disallowed_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|AMP|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|i-amphtml-\\S*|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)',
						'mandatory' => true,
					),
					'nonce' => array(),
					'target' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value' => array(
							'amp-script',
						),
					),
					'type' => array(
						'mandatory' => true,
						'value_casei' => array(
							'text/plain',
						),
					),
				),
				'cdata' => array(
					'disallowed_cdata_regex' => array(
						array(
							'error_message' => 'html comments',
							'regex' => '<!--',
						),
					),
					'max_bytes' => 10000,
					'max_bytes_spec_url' => 'https://amp.dev/documentation/components/amp-script/#faq',
				),
				'tag_spec' => array(
					'requires_extension' => array(
						'amp-script',
					),
					'spec_name' => 'amp-script extension local script',
					'spec_url' => 'https://amp.dev/documentation/components/amp-script/',
				),
			),
			array(
				'attr_spec_list' => array(
					'nonce' => array(),
					'type' => array(
						'dispatch_key' => 3,
						'mandatory' => true,
						'value_casei' => array(
							'application/json',
						),
					),
				),
				'cdata' => array(
					'disallowed_cdata_regex' => array(
						array(
							'error_message' => 'html comments',
							'regex' => '<!--',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'amp-story-auto-ads',
					'requires_extension' => array(
						'amp-story-auto-ads',
					),
					'spec_name' => 'amp-story-auto-ads config script',
					'spec_url' => 'https://amp.dev/documentation/components/amp-story-auto-ads/',
				),
			),
			array(
				'attr_spec_list' => array(
					'nonce' => array(),
					'type' => array(
						'dispatch_key' => 3,
						'mandatory' => true,
						'value_casei' => array(
							'application/json',
						),
					),
				),
				'cdata' => array(
					'disallowed_cdata_regex' => array(
						array(
							'error_message' => 'html comments',
							'regex' => '<!--',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'amp-story-shopping-attachment',
					'requires_extension' => array(
						'amp-story-shopping',
					),
					'spec_name' => 'amp-story-shopping-attachment config script',
					'spec_url' => 'https://amp.dev/documentation/components/amp-story-shopping/',
				),
			),
			array(
				'attr_spec_list' => array(
					'nonce' => array(),
					'type' => array(
						'dispatch_key' => 3,
						'mandatory' => true,
						'value_casei' => array(
							'application/json',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'amp-story-bookend',
					'requires_extension' => array(
						'amp-story',
					),
					'siblings_disallowed' => true,
					'spec_name' => 'amp-story-bookend extension .json script',
					'unique' => true,
				),
			),
			array(
				'attr_spec_list' => array(
					'nonce' => array(),
					'type' => array(
						'dispatch_key' => 3,
						'mandatory' => true,
						'value_casei' => array(
							'application/json',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'amp-story-social-share',
					'requires_extension' => array(
						'amp-story',
					),
					'siblings_disallowed' => true,
					'spec_name' => 'amp-story-social-share extension .json script',
					'unique' => true,
				),
			),
			array(
				'attr_spec_list' => array(
					'nonce' => array(),
					'type' => array(
						'dispatch_key' => 3,
						'mandatory' => true,
						'value_casei' => array(
							'application/json',
						),
					),
				),
				'cdata' => array(
					'disallowed_cdata_regex' => array(
						array(
							'error_message' => 'html comments',
							'regex' => '<!--',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'amp-story-consent',
					'requires_extension' => array(
						'amp-consent',
						'amp-story',
					),
					'spec_name' => 'amp-story-consent extension .json script',
					'unique' => true,
				),
			),
			array(
				'attr_spec_list' => array(
					'nonce' => array(),
					'type' => array(
						'dispatch_key' => 3,
						'mandatory' => true,
						'value_casei' => array(
							'application/json',
						),
					),
				),
				'cdata' => array(
					'disallowed_cdata_regex' => array(
						array(
							'error_message' => 'html comments',
							'regex' => '<!--',
						),
					),
					'max_bytes' => 15000,
					'max_bytes_spec_url' => 'https://amp.dev/documentation/components/amp-experiment/#configuration',
				),
				'tag_spec' => array(
					'mandatory_parent' => 'amp-experiment',
					'spec_name' => 'amp-experiment story extension .json script',
					'spec_url' => 'https://amp.dev/documentation/components/amp-experiment/',
				),
			),
			array(
				'attr_spec_list' => array(
					'nonce' => array(),
					'type' => array(
						'dispatch_key' => 3,
						'mandatory' => true,
						'value_casei' => array(
							'application/json',
						),
					),
				),
				'cdata' => array(
					'disallowed_cdata_regex' => array(
						array(
							'error_message' => 'html comments',
							'regex' => '<!--',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'amp-story-animation',
					'spec_name' => 'amp-story-animation json script',
				),
			),
			array(
				'attr_spec_list' => array(
					'id' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value' => array(
							'amp-subscriptions',
						),
					),
					'nonce' => array(),
					'type' => array(
						'mandatory' => true,
						'value_casei' => array(
							'application/json',
						),
					),
				),
				'cdata' => array(
					'disallowed_cdata_regex' => array(
						array(
							'error_message' => 'html comments',
							'regex' => '<!--',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'head',
					'requires_extension' => array(
						'amp-subscriptions',
					),
					'spec_name' => 'amp-subscriptions extension .json script',
					'unique' => true,
				),
			),
			array(
				'attr_spec_list' => array(
					'cryptokeys' => array(
						'dispatch_key' => 2,
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'sha-256-hash' => array(
						'mandatory' => true,
					),
					'type' => array(
						'mandatory' => true,
						'value_casei' => array(
							'application/json',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'head',
					'requires_extension' => array(
						'amp-subscriptions',
					),
					'spec_name' => 'cryptokeys .json script',
					'unique' => true,
				),
			),
			array(
				'attr_spec_list' => array(
					'ciphertext' => array(
						'dispatch_key' => 1,
						'mandatory' => true,
					),
					'type' => array(
						'mandatory' => true,
						'value_casei' => array(
							'application/octet-stream',
						),
					),
				),
				'cdata' => array(
					'disallowed_cdata_regex' => array(
						array(
							'error_message' => 'html comments',
							'regex' => '<!--',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'body',
					'mandatory_parent' => 'subscriptions-section content swg_amp_cache_nonce',
					'spec_name' => 'subscriptions script ciphertext',
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-3d-gltf',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-3q-player',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-access',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-access-fewcents',
						'requires_usage' => false,
						'version' => array(
							'0.1',
						),
					),
					'requires_extension' => array(
						'amp-access',
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.2',
						'name' => 'amp-access-laterpay',
						'requires_usage' => false,
						'version' => array(
							'0.1',
							'0.2',
						),
					),
					'requires_extension' => array(
						'amp-access',
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-access-poool',
						'requires_usage' => false,
						'version' => array(
							'0.1',
						),
					),
					'requires_extension' => array(
						'amp-access',
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-access-scroll',
						'requires_usage' => false,
						'version' => array(
							'0.1',
						),
					),
					'requires_extension' => array(
						'amp-access',
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-accordion',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-action-macro',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-ad',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-ad-custom',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-addthis',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-analytics',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-anim',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-animation',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-apester-media',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-app-banner',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-audio',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-auto-ads',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-autocomplete',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-base-carousel',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-beopinion',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-bind',
						'requires_usage' => false,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-bodymovin-animation',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-brid-player',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-brightcove',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-byside-content',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-cache-url',
						'requires_usage' => false,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-call-tracking',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-carousel',
						'requires_usage' => true,
						'version' => array(
							'0.1',
							'0.2',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-connatix-player',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-consent',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-dailymotion',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-date-countdown',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-date-display',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-date-picker',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-delight-player',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-dynamic-css-classes',
						'requires_usage' => false,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-embedly-card',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-experiment',
						'requires_usage' => true,
						'version' => array(
							'0.1',
							'1.0',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-facebook',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-facebook-comments',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-facebook-like',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-facebook-page',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-fit-text',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-font',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-form',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-fx-collection',
						'requires_usage' => false,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-fx-flying-carpet',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-geo',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-gfycat',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-gist',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-google-document-embed',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-google-read-aloud-player',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-hulu',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-iframe',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-iframely',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-ima-video',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-image-lightbox',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-image-slider',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-imgur',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-inline-gallery',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-inputmask',
						'requires_usage' => false,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-instagram',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-install-serviceworker',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-izlesene',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-jwplayer',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-kaltura-player',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-lightbox',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-lightbox-gallery',
						'requires_usage' => false,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-link-rewriter',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-list',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-live-list',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
					'mandatory_parent' => 'head',
					'unique_warning' => true,
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-mathml',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-mega-menu',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-megaphone',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-minute-media-player',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-mowplayer',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.2',
						'name' => 'amp-mustache',
						'requires_usage' => true,
						'version' => array(
							'0.1',
							'0.2',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-nested-menu',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '1.0',
						'name' => 'amp-next-page',
						'requires_usage' => true,
						'version' => array(
							'0.1',
							'1.0',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-nexxtv-player',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-o2-player',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-onetap-google',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-ooyala-player',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-orientation-observer',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-pan-zoom',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-pinterest',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-playbuzz',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-position-observer',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-powr-player',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-reach-player',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-recaptcha-input',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-reddit',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '1.0',
						'name' => 'amp-render',
						'requires_usage' => true,
						'version' => array(
							'1.0',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-riddle-quiz',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-script',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-selector',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-sidebar',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-skimlinks',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-slikeplayer',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-smartlinks',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-social-share',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-soundcloud',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-springboard-player',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '1.0',
						'name' => 'amp-sticky-ad',
						'requires_usage' => true,
						'version' => array(
							'0.1',
							'1.0',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '1.0',
						'name' => 'amp-story',
						'requires_usage' => true,
						'version' => array(
							'1.0',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-story-360',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-story-audio-sticker',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-story-auto-ads',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-story-auto-analytics',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-story-captions',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-story-interactive',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-story-panning-media',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-story-player',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-story-player/',
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-story-shopping',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-story-subscriptions',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-stream-gallery',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-subscriptions',
						'requires_usage' => false,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-subscriptions-google',
						'requires_usage' => false,
						'version' => array(
							'0.1',
						),
					),
					'requires_extension' => array(
						'amp-subscriptions',
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-tiktok',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-timeago',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-truncate-text',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-twitter',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-user-notification',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-video',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-video-docking',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-video-iframe',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-vimeo',
						'requires_usage' => true,
						'version' => array(
							'0.1',
							'1.0',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-vine',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-viqeo-player',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-vk',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-web-push',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-wistia-player',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '1.0',
						'name' => 'amp-wordpress-embed',
						'requires_usage' => true,
						'version' => array(
							'1.0',
						),
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-yotpo',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
					'spec_url' => 'https://amp.dev/documentation/components/amp-yotpo/',
				),
			),
			array(
				'attr_spec_list' => array(
					'async' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'crossorigin' => array(
						'value' => array(
							'anonymous',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/javascript',
						),
					),
				),
				'tag_spec' => array(
					'extension_spec' => array(
						'latest' => '0.1',
						'name' => 'amp-youtube',
						'requires_usage' => true,
						'version' => array(
							'0.1',
						),
					),
				),
			),
		),
		'section' => array(
			array(
				'attr_spec_list' => array(
					'poool-access-content' => array(
						'requires_extension' => array(
							'amp-access-poool',
						),
					),
					'poool-access-preview' => array(
						'requires_extension' => array(
							'amp-access-poool',
						),
					),
				),
				'tag_spec' => array(
					'disallowed_ancestor' => array(
						'amp-accordion',
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'access-hide' => array(
						'value' => array(
							'',
						),
					),
					'data-amp-bind-data-expand' => array(),
					'data-amp-bind-expanded' => array(),
					'expanded' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(
					'child_tags' => array(
						'first_child_tag_name_oneof' => array(
							'h1',
							'h2',
							'h3',
							'h4',
							'h5',
							'h6',
							'header',
						),
						'mandatory_num_child_tags' => 2,
					),
					'mandatory_parent' => 'amp-accordion',
					'spec_name' => 'amp-accordion > section',
				),
			),
			array(
				'attr_spec_list' => array(
					'encrypted' => array(
						'dispatch_key' => 1,
						'mandatory' => true,
					),
					'subscriptions-section' => array(
						'value_casei' => array(
							'content',
						),
					),
					'swg_amp_cache_nonce' => array(
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'body',
					'spec_name' => 'subscriptions-section content swg_amp_cache_nonce',
				),
			),
		),
		'select' => array(
			array(
				'attr_spec_list' => array(
					'autofocus' => array(),
					'data-amp-bind-autofocus' => array(),
					'data-amp-bind-disabled' => array(),
					'data-amp-bind-multiple' => array(),
					'data-amp-bind-required' => array(),
					'data-amp-bind-size' => array(),
					'disabled' => array(),
					'multiple' => array(),
					'name' => array(
						'disallowed_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)',
					),
					'no-verify' => array(
						'value' => array(
							'',
						),
					),
					'required' => array(),
					'size' => array(),
				),
				'tag_spec' => array(
					'spec_url' => 'https://amp.dev/documentation/components/amp-form/',
				),
			),
		),
		'slot' => array(
			array(
				'attr_spec_list' => array(
					'name' => array(
						'disallowed_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)',
					),
				),
				'tag_spec' => array(),
			),
		),
		'small' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'solidcolor' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'image-rendering' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'shape-rendering' => array(),
					'solid-color' => array(),
					'solid-opacity' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'source' => array(
			array(
				'attr_spec_list' => array(
					'media' => array(),
					'sizes' => array(),
					'srcset' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_relative' => true,
							'protocol' => array(
								'data',
								'http',
								'https',
							),
						),
					),
					'type' => array(),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'picture',
					'spec_name' => 'picture > source',
					'spec_url' => 'https://amp.dev/documentation/components/amp-img/',
				),
			),
			array(
				'attr_spec_list' => array(
					'data-amp-bind-src' => array(),
					'data-amp-bind-type' => array(),
					'media' => array(),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_relative' => true,
							'protocol' => array(
								'https',
							),
						),
					),
					'type' => array(),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'amp-video',
					'spec_name' => 'amp-video > source',
					'spec_url' => 'https://amp.dev/documentation/components/amp-video/',
				),
			),
			array(
				'attr_spec_list' => array(
					'data-amp-bind-src' => array(),
					'data-amp-bind-type' => array(),
					'media' => array(),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_relative' => true,
							'protocol' => array(
								'https',
							),
						),
					),
					'type' => array(),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'amp-audio',
					'spec_name' => 'amp-audio > source',
					'spec_url' => 'https://amp.dev/documentation/components/amp-audio/',
				),
			),
			array(
				'attr_spec_list' => array(
					'media' => array(),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'mandatory' => true,
						'value_url' => array(
							'allow_relative' => true,
							'protocol' => array(
								'https',
							),
						),
					),
					'type' => array(
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'audio',
					'spec_name' => 'audio > source',
					'spec_url' => 'https://amp.dev/documentation/components/amp-audio/',
				),
			),
			array(
				'attr_spec_list' => array(
					'media' => array(),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'mandatory' => true,
						'value_url' => array(
							'allow_relative' => true,
							'protocol' => array(
								'https',
							),
						),
					),
					'type' => array(
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'video',
					'spec_name' => 'video > source',
					'spec_url' => 'https://amp.dev/documentation/components/amp-video/',
				),
			),
			array(
				'attr_spec_list' => array(
					'data-amp-bind-src' => array(),
					'data-amp-bind-type' => array(),
					'media' => array(),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_relative' => true,
							'protocol' => array(
								'https',
							),
						),
					),
					'type' => array(),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'amp-ima-video',
					'requires_extension' => array(
						'amp-ima-video',
					),
					'spec_name' => 'amp-ima-video > source',
				),
			),
		),
		'spacer' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'span' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
			array(
				'attr_spec_list' => array(
					'amp-nested-submenu-close' => array(),
					'amp-nested-submenu-open' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'amp-nested-menu',
					'spec_name' => 'span amp-nested-menu',
				),
			),
			array(
				'attr_spec_list' => array(
					'swg_amp_cache_nonce' => array(
						'dispatch_key' => 1,
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'body',
					'requires_extension' => array(
						'amp-subscriptions',
					),
					'spec_name' => 'span swg_amp_cache_nonce',
				),
			),
		),
		'stop' => array(
			array(
				'attr_spec_list' => array(
					'offset' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'style' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'lineargradient',
					'spec_name' => 'lineargradient > stop',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
			array(
				'attr_spec_list' => array(
					'offset' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'style' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'radialgradient',
					'spec_name' => 'radialgradient > stop',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'strike' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'strong' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'style' => array(
			array(
				'attr_spec_list' => array(
					'amp-custom' => array(
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/css',
						),
					),
				),
				'cdata' => array(
					'css_spec' => array(
						'allowed_at_rules' => array(
							'font-face',
							'keyframes',
							'media',
							'page',
							'supports',
							'-moz-document',
						),
						'declaration' => array(),
						'validate_keyframes' => false,
					),
					'disallowed_cdata_regex' => array(
						array(
							'error_message' => 'html comments',
							'regex' => '<!--',
						),
						array(
							'error_message' => 'CSS i-amphtml- name prefix',
							'regex' => '(^|\\W)i-amphtml-',
						),
					),
					'doc_css_bytes' => true,
					'max_bytes' => 75000,
					'max_bytes_spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#maximum-size',
				),
				'tag_spec' => array(
					'mandatory_parent' => 'head',
					'spec_name' => 'style amp-custom',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#stylesheets',
					'unique' => true,
				),
			),
			array(
				'attr_spec_list' => array(
					'amp-boilerplate' => array(
						'dispatch_key' => 3,
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'nonce' => array(),
				),
				'cdata' => array(
					'cdata_regex' => '\\s*body\\s*{\\s*-webkit-animation:\\s*-amp-start\\s+8s\\s+steps\\(1,\\s*end\\)\\s+0s\\s+1\\s+normal\\s+both;\\s*-moz-animation:\\s*-amp-start\\s+8s\\s+steps\\s*\\(1\\s*,\\s*end\\s*\\)\\s+0s\\s+1\\s+normal\\s+both;\\s*-ms-animation:\\s*-amp-start\\s+8s\\s+steps\\s*\\(1\\s*,\\s*end\\s*\\)\\s+0s\\s+1\\s+normal\\s+both;\\s*animation:\\s*-amp-start\\s+8s\\s+steps\\(1,\\s*end\\)\\s+0s\\s+1\\s+normal\\s+both;?\\s*}\\s*@-webkit-keyframes\\s+-amp-start\\s*{\\s*from\\s*{\\s*visibility:\\s*hidden;?\\s*}\\s*to\\s*{\\s*visibility:\\s*visible;?\\s*}\\s*}\\s*@-moz-keyframes\\s+-amp-start\\s*{\\s*from\\s*{\\s*visibility:\\s*hidden;?\\s*}\\s*to\\s*{\\s*visibility:\\s*visible;?\\s*}\\s*}\\s*@-ms-keyframes\\s+-amp-start\\s*{\\s*from\\s*{\\s*visibility:\\s*hidden;?\\s*}\\s*to\\s*{\\s*visibility:\\s*visible;?\\s*}\\s*}\\s*@-o-keyframes\\s+-amp-start\\s*{\\s*from\\s*{\\s*visibility:\\s*hidden;?\\s*}\\s*to\\s*{\\s*visibility:\\s*visible;?\\s*}\\s*}\\s*@keyframes\\s+-amp-start\\s*{\\s*from\\s*{\\s*visibility:\\s*hidden;?\\s*}\\s*to\\s*{\\s*visibility:\\s*visible;?\\s*}\\s*}\\s*',
					'doc_css_bytes' => false,
				),
				'tag_spec' => array(
					'mandatory_parent' => 'head',
					'spec_name' => 'head > style[amp-boilerplate]',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amp-boilerplate/?format=websites',
					'unique' => true,
				),
			),
			array(
				'attr_spec_list' => array(
					'amp-boilerplate' => array(
						'dispatch_key' => 3,
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'nonce' => array(),
				),
				'cdata' => array(
					'cdata_regex' => '\\s*body\\s*{\\s*-webkit-animation:\\s*none;\\s*-moz-animation:\\s*none;\\s*-ms-animation:\\s*none;\\s*animation:\\s*none;?\\s*}\\s*',
					'doc_css_bytes' => false,
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'head',
					'mandatory_parent' => 'noscript',
					'spec_name' => 'noscript > style[amp-boilerplate]',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amp-boilerplate/?format=websites',
					'unique' => true,
				),
			),
			array(
				'attr_spec_list' => array(
					'amp-keyframes' => array(
						'dispatch_key' => 1,
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
				),
				'cdata' => array(
					'css_spec' => array(
						'allowed_at_rules' => array(
							'keyframes',
							'media',
							'supports',
						),
						'declaration' => array(
							'animation-timing-function',
							'offset-distance',
							'opacity',
							'transform',
							'visibility',
						),
						'validate_keyframes' => true,
					),
					'doc_css_bytes' => false,
					'max_bytes' => 500000,
					'max_bytes_spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#keyframes-stylesheet',
				),
				'tag_spec' => array(
					'mandatory_parent' => 'body',
					'spec_name' => 'style[amp-keyframes]',
					'unique' => true,
				),
			),
			array(
				'attr_spec_list' => array(
					'amp-noscript' => array(
						'dispatch_key' => 1,
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'nonce' => array(),
					'type' => array(
						'value_casei' => array(
							'text/css',
						),
					),
				),
				'cdata' => array(
					'css_spec' => array(
						'allowed_at_rules' => array(
							'media',
							'page',
							'supports',
							'-moz-document',
						),
						'declaration' => array(),
						'validate_keyframes' => false,
					),
					'disallowed_cdata_regex' => array(
						array(
							'error_message' => 'html comments',
							'regex' => '<!--',
						),
						array(
							'error_message' => 'CSS i-amphtml- name prefix',
							'regex' => '(^|\\W)i-amphtml-',
						),
					),
					'doc_css_bytes' => true,
					'max_bytes' => 10000,
					'max_bytes_spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#maximum-size',
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'head',
					'mandatory_parent' => 'noscript',
					'spec_name' => 'style amp-noscript',
					'spec_url' => 'https://github.com/ampproject/amphtml/issues/20609',
					'unique' => true,
				),
			),
		),
		'sub' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'summary' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(
					'mandatory_parent' => 'details',
				),
			),
		),
		'sup' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'svg' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'contentscripttype' => array(),
					'contentstyletype' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'externalresourcesrequired' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'height' => array(),
					'image-rendering' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'preserveaspectratio' => array(),
					'requiredextensions' => array(),
					'requiredfeatures' => array(),
					'shape-rendering' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'systemlanguage' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'version' => array(
						'value' => array(
							'1.0',
							'1.1',
						),
					),
					'viewbox' => array(),
					'visibility' => array(),
					'width' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'x' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
					'y' => array(),
					'zoomandpan' => array(),
				),
				'tag_spec' => array(
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'switch' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'image-rendering' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'requiredextensions' => array(),
					'requiredfeatures' => array(),
					'shape-rendering' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'systemlanguage' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'symbol' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'externalresourcesrequired' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'height' => array(),
					'image-rendering' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'preserveaspectratio' => array(),
					'shape-rendering' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'viewbox' => array(),
					'visibility' => array(),
					'width' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'table' => array(
			array(
				'attr_spec_list' => array(
					'align' => array(),
					'bgcolor' => array(),
					'border' => array(
						'value' => array(
							'0',
							'1',
						),
					),
					'cellpadding' => array(),
					'cellspacing' => array(),
					'sortable' => array(),
					'width' => array(),
				),
				'tag_spec' => array(),
			),
		),
		'tbody' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'td' => array(
			array(
				'attr_spec_list' => array(
					'align' => array(),
					'bgcolor' => array(),
					'colspan' => array(),
					'headers' => array(),
					'height' => array(),
					'rowspan' => array(),
					'valign' => array(),
					'width' => array(),
				),
				'tag_spec' => array(),
			),
		),
		'template' => array(
			array(
				'attr_spec_list' => array(
					'date-template' => array(
						'dispatch_key' => 1,
						'mandatory' => true,
						'value' => array(
							'',
						),
					),
					'dates' => array(),
					'default' => array(),
					'type' => array(
						'mandatory' => true,
						'value' => array(
							'amp-mustache',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'amp-date-picker',
					'requires_extension' => array(
						'amp-mustache',
					),
					'spec_name' => 'amp-date-picker > template [date-template]',
				),
			),
			array(
				'attr_spec_list' => array(
					'info-template' => array(
						'dispatch_key' => 1,
						'mandatory' => true,
					),
					'type' => array(
						'mandatory' => true,
						'value' => array(
							'amp-mustache',
						),
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'amp-date-picker',
					'requires_extension' => array(
						'amp-mustache',
					),
					'spec_name' => 'amp-date-picker > template [info-template]',
				),
			),
			array(
				'attr_spec_list' => array(
					'id' => array(
						'disallowed_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|AMP|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|i-amphtml-\\S*|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)',
					),
					'type' => array(
						'mandatory' => true,
						'value' => array(
							'amp-mustache',
						),
					),
				),
				'tag_spec' => array(
					'disallowed_ancestor' => array(
						'template',
						'amp-date-picker',
						'amp-story-auto-ads',
						'form div [submit-success][template]',
						'form div [submit-error][template]',
						'form div [submitting][template]',
						'form div [verify-error][template]',
					),
					'mandatory_ancestor' => 'body',
					'requires_extension' => array(
						'amp-mustache',
					),
				),
			),
			array(
				'attr_spec_list' => array(
					'type' => array(
						'dispatch_key' => 3,
						'mandatory' => true,
						'value' => array(
							'amp-mustache',
						),
					),
				),
				'tag_spec' => array(
					'descendant_tag_list' => 'amp-story-grid-layer-allowed-descendants',
					'mandatory_parent' => 'amp-story-auto-ads',
					'reference_points' => array(
						'AMP-STORY-GRID-LAYER animate-in' => array(
							'mandatory' => false,
							'unique' => false,
						),
						'AMP-STORY-GRID-LAYER default' => array(
							'mandatory' => false,
							'unique' => false,
						),
					),
					'requires_extension' => array(
						'amp-mustache',
					),
					'spec_name' => 'amp-story-auto-ads > template',
				),
			),
		),
		'text' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'dx' => array(),
					'dy' => array(),
					'enable-background' => array(),
					'externalresourcesrequired' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'image-rendering' => array(),
					'kerning' => array(),
					'lengthadjust' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'requiredextensions' => array(),
					'requiredfeatures' => array(),
					'rotate' => array(),
					'shape-rendering' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'systemlanguage' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'textlength' => array(),
					'transform' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'x' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
					'y' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'textarea' => array(
			array(
				'attr_spec_list' => array(
					'autocomplete' => array(),
					'autoexpand' => array(
						'requires_extension' => array(
							'amp-form',
						),
					),
					'autofocus' => array(),
					'cols' => array(),
					'data-amp-bind-autocomplete' => array(),
					'data-amp-bind-autofocus' => array(),
					'data-amp-bind-cols' => array(),
					'data-amp-bind-defaulttext' => array(),
					'data-amp-bind-disabled' => array(),
					'data-amp-bind-maxlength' => array(),
					'data-amp-bind-minlength' => array(),
					'data-amp-bind-pattern' => array(),
					'data-amp-bind-placeholder' => array(),
					'data-amp-bind-readonly' => array(),
					'data-amp-bind-required' => array(),
					'data-amp-bind-rows' => array(),
					'data-amp-bind-selectiondirection' => array(),
					'data-amp-bind-selectionend' => array(),
					'data-amp-bind-selectionstart' => array(),
					'data-amp-bind-spellcheck' => array(),
					'data-amp-bind-wrap' => array(),
					'disabled' => array(),
					'maxlength' => array(),
					'minlength' => array(),
					'name' => array(
						'disallowed_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)',
					),
					'no-verify' => array(
						'value' => array(
							'',
						),
					),
					'pattern' => array(),
					'placeholder' => array(),
					'readonly' => array(),
					'required' => array(),
					'rows' => array(),
					'selectiondirection' => array(),
					'selectionend' => array(),
					'selectionstart' => array(),
					'spellcheck' => array(),
					'wrap' => array(),
				),
				'tag_spec' => array(
					'spec_url' => 'https://amp.dev/documentation/components/amp-form/',
				),
			),
		),
		'textpath' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'externalresourcesrequired' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'image-rendering' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'method' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'requiredextensions' => array(),
					'requiredfeatures' => array(),
					'shape-rendering' => array(),
					'spacing' => array(),
					'startoffset' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'systemlanguage' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'xlink:actuate' => array(),
					'xlink:arcrole' => array(),
					'xlink:href' => array(
						'alternative_names' => array(
							'href',
						),
						'value_url' => array(
							'allow_empty' => false,
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'xlink:role' => array(),
					'xlink:show' => array(),
					'xlink:title' => array(),
					'xlink:type' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'tfoot' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'th' => array(
			array(
				'attr_spec_list' => array(
					'abbr' => array(),
					'align' => array(),
					'bgcolor' => array(),
					'colspan' => array(),
					'headers' => array(),
					'height' => array(),
					'rowspan' => array(),
					'scope' => array(),
					'sorted' => array(),
					'valign' => array(),
					'width' => array(),
				),
				'tag_spec' => array(),
			),
		),
		'thead' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'time' => array(
			array(
				'attr_spec_list' => array(
					'datetime' => array(),
					'pubdate' => array(
						'value' => array(
							'',
						),
					),
				),
				'tag_spec' => array(),
			),
		),
		'title' => array(
			array(
				'attr_spec_list' => array(
					'data-amp-bind-text' => array(),
				),
				'tag_spec' => array(
					'spec_name' => 'title',
				),
			),
			array(
				'attr_spec_list' => array(
					'style' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_name' => 'svg title',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'tr' => array(
			array(
				'attr_spec_list' => array(
					'align' => array(),
					'bgcolor' => array(),
					'height' => array(),
					'valign' => array(),
				),
				'tag_spec' => array(),
			),
		),
		'track' => array(
			array(
				'attr_spec_list' => array(
					'default' => array(
						'value' => array(
							'',
						),
					),
					'kind' => array(
						'value' => array(
							'captions',
							'chapters',
							'descriptions',
							'metadata',
						),
					),
					'label' => array(),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'mandatory' => true,
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
					'srclang' => array(),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'audio',
					'spec_name' => 'audio > track',
				),
			),
			array(
				'attr_spec_list' => array(
					'default' => array(
						'value' => array(
							'',
						),
					),
					'kind' => array(
						'mandatory' => true,
						'value_casei' => array(
							'subtitles',
						),
					),
					'label' => array(),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'mandatory' => true,
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
					'srclang' => array(
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'audio',
					'spec_name' => 'audio > track[kind=subtitles]',
				),
			),
			array(
				'attr_spec_list' => array(
					'default' => array(
						'value' => array(
							'',
						),
					),
					'kind' => array(
						'value' => array(
							'captions',
							'chapters',
							'descriptions',
							'metadata',
						),
					),
					'label' => array(),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'mandatory' => true,
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
					'srclang' => array(),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'video',
					'spec_name' => 'video > track',
				),
			),
			array(
				'attr_spec_list' => array(
					'default' => array(
						'value' => array(
							'',
						),
					),
					'kind' => array(
						'mandatory' => true,
						'value_casei' => array(
							'subtitles',
						),
					),
					'label' => array(),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'mandatory' => true,
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
					'srclang' => array(
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'video',
					'spec_name' => 'video > track[kind=subtitles]',
				),
			),
			array(
				'attr_spec_list' => array(
					'data-amp-bind-label' => array(),
					'data-amp-bind-src' => array(),
					'data-amp-bind-srclang' => array(),
					'default' => array(
						'value' => array(
							'',
						),
					),
					'kind' => array(
						'value' => array(
							'captions',
							'chapters',
							'descriptions',
							'metadata',
						),
					),
					'label' => array(),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'mandatory' => true,
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
					'srclang' => array(),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'amp-audio',
					'spec_name' => 'amp-audio > track',
				),
			),
			array(
				'attr_spec_list' => array(
					'data-amp-bind-label' => array(),
					'data-amp-bind-src' => array(),
					'data-amp-bind-srclang' => array(),
					'default' => array(
						'value' => array(
							'',
						),
					),
					'kind' => array(
						'mandatory' => true,
						'value_casei' => array(
							'subtitles',
						),
					),
					'label' => array(),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'mandatory' => true,
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
					'srclang' => array(
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'amp-audio',
					'spec_name' => 'amp-audio > track[kind=subtitles]',
				),
			),
			array(
				'attr_spec_list' => array(
					'data-amp-bind-label' => array(),
					'data-amp-bind-src' => array(),
					'data-amp-bind-srclang' => array(),
					'default' => array(
						'value' => array(
							'',
						),
					),
					'kind' => array(
						'value' => array(
							'captions',
							'chapters',
							'descriptions',
							'metadata',
						),
					),
					'label' => array(),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'mandatory' => true,
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
					'srclang' => array(),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'amp-video',
					'spec_name' => 'amp-video > track',
				),
			),
			array(
				'attr_spec_list' => array(
					'data-amp-bind-label' => array(),
					'data-amp-bind-src' => array(),
					'data-amp-bind-srclang' => array(),
					'default' => array(
						'value' => array(
							'',
						),
					),
					'kind' => array(
						'mandatory' => true,
						'value_casei' => array(
							'subtitles',
						),
					),
					'label' => array(),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'mandatory' => true,
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
					'srclang' => array(
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'amp-video',
					'spec_name' => 'amp-video > track[kind=subtitles]',
				),
			),
			array(
				'attr_spec_list' => array(
					'data-amp-bind-label' => array(),
					'data-amp-bind-src' => array(),
					'data-amp-bind-srclang' => array(),
					'default' => array(
						'value' => array(
							'',
						),
					),
					'kind' => array(
						'value' => array(
							'captions',
							'chapters',
							'descriptions',
							'metadata',
						),
					),
					'label' => array(),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'mandatory' => true,
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
					'srclang' => array(),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'amp-ima-video',
					'spec_name' => 'amp-ima-video > track',
				),
			),
			array(
				'attr_spec_list' => array(
					'data-amp-bind-label' => array(),
					'data-amp-bind-src' => array(),
					'data-amp-bind-srclang' => array(),
					'default' => array(
						'value' => array(
							'',
						),
					),
					'kind' => array(
						'mandatory' => true,
						'value_casei' => array(
							'subtitles',
						),
					),
					'label' => array(),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'mandatory' => true,
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'https',
							),
						),
					),
					'srclang' => array(
						'mandatory' => true,
					),
				),
				'tag_spec' => array(
					'mandatory_parent' => 'amp-ima-video',
					'spec_name' => 'amp-ima-video > track[kind=subtitles]',
					'spec_url' => 'https://amp.dev/documentation/components/amp-ima-video/',
				),
			),
		),
		'tref' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'externalresourcesrequired' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'image-rendering' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'requiredextensions' => array(),
					'requiredfeatures' => array(),
					'shape-rendering' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'systemlanguage' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'xlink:actuate' => array(),
					'xlink:arcrole' => array(),
					'xlink:href' => array(
						'alternative_names' => array(
							'href',
						),
						'value_url' => array(
							'allow_empty' => false,
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'xlink:role' => array(),
					'xlink:show' => array(),
					'xlink:title' => array(),
					'xlink:type' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'tspan' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'dx' => array(),
					'dy' => array(),
					'enable-background' => array(),
					'externalresourcesrequired' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'image-rendering' => array(),
					'kerning' => array(),
					'lengthadjust' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'requiredextensions' => array(),
					'requiredfeatures' => array(),
					'rotate' => array(),
					'shape-rendering' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'systemlanguage' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'textlength' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'x' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
					'y' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'tt' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'u' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'ul' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'use' => array(
			array(
				'attr_spec_list' => array(
					'alignment-baseline' => array(),
					'baseline-shift' => array(),
					'clip' => array(),
					'clip-path' => array(),
					'clip-rule' => array(),
					'color' => array(),
					'color-interpolation' => array(),
					'color-interpolation-filters' => array(),
					'color-profile' => array(),
					'color-rendering' => array(),
					'cursor' => array(),
					'direction' => array(),
					'display' => array(),
					'dominant-baseline' => array(),
					'enable-background' => array(),
					'externalresourcesrequired' => array(),
					'fill' => array(),
					'fill-opacity' => array(),
					'fill-rule' => array(),
					'filter' => array(),
					'flood-color' => array(),
					'flood-opacity' => array(),
					'focusable' => array(),
					'font-family' => array(),
					'font-size' => array(),
					'font-size-adjust' => array(),
					'font-stretch' => array(),
					'font-style' => array(),
					'font-variant' => array(),
					'font-weight' => array(),
					'glyph-orientation-horizontal' => array(),
					'glyph-orientation-vertical' => array(),
					'height' => array(),
					'image-rendering' => array(),
					'kerning' => array(),
					'letter-spacing' => array(),
					'lighting-color' => array(),
					'marker-end' => array(),
					'marker-mid' => array(),
					'marker-start' => array(),
					'mask' => array(),
					'opacity' => array(),
					'overflow' => array(),
					'pointer-events' => array(),
					'requiredextensions' => array(),
					'requiredfeatures' => array(),
					'shape-rendering' => array(),
					'stop-color' => array(),
					'stop-opacity' => array(),
					'stroke' => array(),
					'stroke-dasharray' => array(),
					'stroke-dashoffset' => array(),
					'stroke-linecap' => array(),
					'stroke-linejoin' => array(),
					'stroke-miterlimit' => array(),
					'stroke-opacity' => array(),
					'stroke-width' => array(),
					'style' => array(),
					'systemlanguage' => array(),
					'text-anchor' => array(),
					'text-decoration' => array(),
					'text-rendering' => array(),
					'transform' => array(),
					'unicode-bidi' => array(),
					'vector-effect' => array(),
					'visibility' => array(),
					'width' => array(),
					'word-spacing' => array(),
					'writing-mode' => array(),
					'x' => array(),
					'xlink:actuate' => array(),
					'xlink:arcrole' => array(),
					'xlink:href' => array(
						'alternative_names' => array(
							'href',
						),
						'value_url' => array(
							'allow_empty' => false,
							'protocol' => array(
								'http',
								'https',
							),
						),
					),
					'xlink:role' => array(),
					'xlink:show' => array(),
					'xlink:title' => array(),
					'xlink:type' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
					'y' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'var' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
		'video' => array(
			array(
				'attr_spec_list' => array(
					'autoplay' => array(),
					'controls' => array(),
					'height' => array(),
					'loop' => array(),
					'muted' => array(),
					'playsinline' => array(),
					'poster' => array(),
					'preload' => array(),
					'src' => array(
						'disallowed_value_regex' => '__amp_source_origin',
						'value_url' => array(
							'allow_relative' => false,
							'protocol' => array(
								'data',
								'https',
							),
						),
					),
					'width' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'noscript',
					'mandatory_ancestor_suggested_alternative' => 'amp-video',
					'spec_url' => 'https://amp.dev/documentation/components/amp-video/',
				),
			),
		),
		'view' => array(
			array(
				'attr_spec_list' => array(
					'externalresourcesrequired' => array(),
					'preserveaspectratio' => array(),
					'style' => array(),
					'viewbox' => array(),
					'viewtarget' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
					'zoomandpan' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'vkern' => array(
			array(
				'attr_spec_list' => array(
					'g1' => array(),
					'g2' => array(),
					'k' => array(),
					'style' => array(),
					'u1' => array(),
					'u2' => array(),
					'xml:lang' => array(),
					'xml:space' => array(),
					'xmlns' => array(),
					'xmlns:xlink' => array(),
				),
				'tag_spec' => array(
					'mandatory_ancestor' => 'svg',
					'spec_url' => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
				),
			),
		),
		'wbr' => array(
			array(
				'attr_spec_list' => array(),
				'tag_spec' => array(),
			),
		),
	);

	private static $layout_allowed_attrs = array(
		'data-amp-bind-height' => array(),
		'data-amp-bind-width' => array(),
		'disable-inline-width' => array(),
		'height' => array(),
		'heights' => array(),
		'layout' => array(),
		'sizes' => array(),
		'width' => array(),
	);


	private static $globally_allowed_attrs = array(
		'about' => array(),
		'accesskey' => array(),
		'amp-access' => array(),
		'amp-access-behavior' => array(),
		'amp-access-hide' => array(),
		'amp-access-id' => array(),
		'amp-access-loader' => array(),
		'amp-access-loading' => array(),
		'amp-access-off' => array(),
		'amp-access-on' => array(),
		'amp-access-show' => array(),
		'amp-access-style' => array(),
		'amp-access-template' => array(),
		'amp-fx' => array(
			'requires_extension' => array(
				'amp-fx-collection',
			),
			'value_regex_casei' => '(fade-in|fade-in-scroll|float-in-bottom|float-in-top|fly-in-bottom|fly-in-left|fly-in-right|fly-in-top|parallax)(\\s|fade-in|fade-in-scroll|float-in-bottom|float-in-top|fly-in-bottom|fly-in-left|fly-in-right|fly-in-top|parallax)*',
		),
		'aria-activedescendant' => array(),
		'aria-atomic' => array(),
		'aria-autocomplete' => array(),
		'aria-busy' => array(),
		'aria-checked' => array(),
		'aria-controls' => array(),
		'aria-current' => array(),
		'aria-describedby' => array(),
		'aria-disabled' => array(),
		'aria-dropeffect' => array(),
		'aria-expanded' => array(),
		'aria-flowto' => array(),
		'aria-grabbed' => array(),
		'aria-haspopup' => array(),
		'aria-hidden' => array(),
		'aria-invalid' => array(),
		'aria-label' => array(),
		'aria-labelledby' => array(),
		'aria-level' => array(),
		'aria-live' => array(),
		'aria-modal' => array(),
		'aria-multiline' => array(),
		'aria-multiselectable' => array(),
		'aria-orientation' => array(),
		'aria-owns' => array(),
		'aria-posinset' => array(),
		'aria-pressed' => array(),
		'aria-readonly' => array(),
		'aria-relevant' => array(),
		'aria-required' => array(),
		'aria-selected' => array(),
		'aria-setsize' => array(),
		'aria-sort' => array(),
		'aria-valuemax' => array(),
		'aria-valuemin' => array(),
		'aria-valuenow' => array(),
		'aria-valuetext' => array(),
		'autoscroll' => array(),
		'class' => array(),
		'content' => array(),
		'data-amp-bind-aria-activedescendant' => array(),
		'data-amp-bind-aria-atomic' => array(),
		'data-amp-bind-aria-autocomplete' => array(),
		'data-amp-bind-aria-busy' => array(),
		'data-amp-bind-aria-checked' => array(),
		'data-amp-bind-aria-controls' => array(),
		'data-amp-bind-aria-describedby' => array(),
		'data-amp-bind-aria-disabled' => array(),
		'data-amp-bind-aria-dropeffect' => array(),
		'data-amp-bind-aria-expanded' => array(),
		'data-amp-bind-aria-flowto' => array(),
		'data-amp-bind-aria-grabbed' => array(),
		'data-amp-bind-aria-haspopup' => array(),
		'data-amp-bind-aria-hidden' => array(),
		'data-amp-bind-aria-invalid' => array(),
		'data-amp-bind-aria-label' => array(),
		'data-amp-bind-aria-labelledby' => array(),
		'data-amp-bind-aria-level' => array(),
		'data-amp-bind-aria-live' => array(),
		'data-amp-bind-aria-multiline' => array(),
		'data-amp-bind-aria-multiselectable' => array(),
		'data-amp-bind-aria-orientation' => array(),
		'data-amp-bind-aria-owns' => array(),
		'data-amp-bind-aria-posinset' => array(),
		'data-amp-bind-aria-pressed' => array(),
		'data-amp-bind-aria-readonly' => array(),
		'data-amp-bind-aria-relevant' => array(),
		'data-amp-bind-aria-required' => array(),
		'data-amp-bind-aria-selected' => array(),
		'data-amp-bind-aria-setsize' => array(),
		'data-amp-bind-aria-sort' => array(),
		'data-amp-bind-aria-valuemax' => array(),
		'data-amp-bind-aria-valuemin' => array(),
		'data-amp-bind-aria-valuenow' => array(),
		'data-amp-bind-aria-valuetext' => array(),
		'data-amp-bind-class' => array(),
		'data-amp-bind-hidden' => array(),
		'data-amp-bind-text' => array(),
		'datatype' => array(),
		'dir' => array(),
		'draggable' => array(),
		'fallback' => array(
			'value' => array(
				'',
			),
		),
		'hidden' => array(
			'value' => array(
				'',
			),
		),
		'i-amp-access-id' => array(),
		'id' => array(
			'disallowed_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|AMP|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|i-amphtml-\\S*|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)',
		),
		'inlist' => array(),
		'itemid' => array(),
		'itemprop' => array(),
		'itemref' => array(),
		'itemscope' => array(),
		'itemtype' => array(),
		'lang' => array(),
		'next-page-hide' => array(
			'requires_extension' => array(
				'amp-next-page',
			),
		),
		'next-page-replace' => array(
			'requires_extension' => array(
				'amp-next-page',
			),
		),
		'on' => array(),
		'overflow' => array(),
		'placeholder' => array(
			'value' => array(
				'',
			),
		),
		'prefix' => array(),
		'property' => array(),
		'rel' => array(
			'disallowed_value_regex' => '(^|\\s)(canonical|components|dns-prefetch|import|manifest|preconnect|preload|prerender|serviceworker|stylesheet|subresource)(\\s|$)',
		),
		'resource' => array(),
		'rev' => array(),
		'role' => array(),
		'slot' => array(),
		'style' => array(),
		'subscriptions-action' => array(
			'requires_extension' => array(
				'amp-subscriptions',
			),
		),
		'subscriptions-actions' => array(
			'requires_extension' => array(
				'amp-subscriptions',
			),
			'value' => array(
				'',
			),
		),
		'subscriptions-decorate' => array(
			'requires_extension' => array(
				'amp-subscriptions',
			),
		),
		'subscriptions-dialog' => array(
			'requires_extension' => array(
				'amp-subscriptions',
			),
			'value' => array(
				'',
			),
		),
		'subscriptions-display' => array(
			'requires_extension' => array(
				'amp-subscriptions',
			),
		),
		'subscriptions-google-rtc' => array(
			'requires_extension' => array(
				'amp-subscriptions-google',
			),
		),
		'subscriptions-lang' => array(
			'requires_extension' => array(
				'amp-subscriptions',
			),
		),
		'subscriptions-section' => array(
			'requires_extension' => array(
				'amp-subscriptions',
			),
			'value_casei' => array(
				'actions',
				'content',
				'content-not-granted',
				'loading',
			),
		),
		'subscriptions-service' => array(
			'requires_extension' => array(
				'amp-subscriptions',
			),
		),
		'tabindex' => array(),
		'title' => array(),
		'translate' => array(),
		'typeof' => array(),
		'validation-for' => array(),
		'visible-when-invalid' => array(
			'value' => array(
				'badInput',
				'customError',
				'patternMismatch',
				'rangeOverflow',
				'rangeUnderflow',
				'stepMismatch',
				'tooLong',
				'tooShort',
				'typeMismatch',
				'valueMissing',
			),
		),
		'vocab' => array(),
	);


	private static $reference_points = array(
		'AMP-BASE-CAROUSEL lightbox [child]' => array(
			'attr_spec_list' => array(
				'lightbox-thumbnail-id' => array(
					'value_regex_casei' => '^[a-z][a-z\\d_-]*',
				),
			),
			'tag_spec' => array(
				'spec_name' => 'AMP-BASE-CAROUSEL lightbox [child]',
			),
		),
		'AMP-BASE-CAROUSEL lightbox [lightbox-exclude]' => array(
			'attr_spec_list' => array(
				'lightbox-exclude' => array(
					'mandatory' => true,
				),
			),
			'tag_spec' => array(
				'spec_name' => 'AMP-BASE-CAROUSEL lightbox [lightbox-exclude]',
			),
		),
		'AMP-CAROUSEL lightbox [child]' => array(
			'attr_spec_list' => array(
				'lightbox-thumbnail-id' => array(
					'value_regex_casei' => '^[a-z][a-z\\d_-]*',
				),
			),
			'tag_spec' => array(
				'spec_name' => 'AMP-CAROUSEL lightbox [child]',
			),
		),
		'AMP-CAROUSEL lightbox [lightbox-exclude]' => array(
			'attr_spec_list' => array(
				'lightbox-exclude' => array(
					'mandatory' => true,
				),
			),
			'tag_spec' => array(
				'spec_name' => 'AMP-CAROUSEL lightbox [lightbox-exclude]',
			),
		),
		'AMP-LIVE-LIST [items]' => array(
			'attr_spec_list' => array(
				'items' => array(
					'mandatory' => true,
				),
			),
			'tag_spec' => array(
				'reference_points' => array(
					'AMP-LIVE-LIST [items] item' => array(
						'mandatory' => false,
						'unique' => false,
					),
				),
				'spec_name' => 'AMP-LIVE-LIST [items]',
				'spec_url' => 'https://amp.dev/documentation/components/amp-live-list/#items',
			),
		),
		'AMP-LIVE-LIST [items] item' => array(
			'attr_spec_list' => array(
				'data-sort-time' => array(
					'mandatory' => true,
				),
				'data-tombstone' => array(),
				'data-update-time' => array(),
				'id' => array(
					'disallowed_value_regex' => '(^|\\s)(__amp_\\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\\S*|\\$p|\\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|AMP|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|i-amphtml-\\S*|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\\s|$)',
					'mandatory' => true,
				),
			),
			'tag_spec' => array(
				'spec_name' => 'AMP-LIVE-LIST [items] item',
				'spec_url' => 'https://amp.dev/documentation/components/amp-live-list/#items',
			),
		),
		'AMP-LIVE-LIST [pagination]' => array(
			'attr_spec_list' => array(
				'pagination' => array(
					'mandatory' => true,
				),
			),
			'tag_spec' => array(
				'spec_name' => 'AMP-LIVE-LIST [pagination]',
				'spec_url' => 'https://amp.dev/documentation/components/amp-live-list/#pagination',
			),
		),
		'AMP-LIVE-LIST [update]' => array(
			'attr_spec_list' => array(
				'update' => array(
					'mandatory' => true,
				),
			),
			'tag_spec' => array(
				'spec_name' => 'AMP-LIVE-LIST [update]',
				'spec_url' => 'https://amp.dev/documentation/components/amp-live-list/#update',
			),
		),
		'AMP-MEGA-MENU > AMP-LIST' => array(
			'attr_spec_list' => array(
				'data-amp-bind-src' => array(),
				'src' => array(),
			),
			'tag_spec' => array(
				'child_tags' => array(
					'child_tag_name_oneof' => array(
						'template',
					),
					'mandatory_num_child_tags' => 1,
				),
				'mandatory_anyof' => array(
					'data-amp-bind-src',
					'src',
				),
				'reference_points' => array(
					'AMP-MEGA-MENU > AMP-LIST > TEMPLATE' => array(
						'mandatory' => false,
						'unique' => false,
					),
				),
				'spec_name' => 'AMP-MEGA-MENU > AMP-LIST',
			),
		),
		'AMP-MEGA-MENU > AMP-LIST > TEMPLATE' => array(
			'attr_spec_list' => array(),
			'tag_spec' => array(
				'child_tags' => array(
					'child_tag_name_oneof' => array(
						'nav',
					),
					'mandatory_num_child_tags' => 1,
				),
				'mandatory_parent' => 'amp-list',
				'reference_points' => array(
					'AMP-MEGA-MENU > NAV' => array(
						'mandatory' => false,
						'unique' => false,
					),
				),
				'spec_name' => 'AMP-MEGA-MENU > AMP-LIST > TEMPLATE',
			),
		),
		'AMP-MEGA-MENU > NAV' => array(
			'attr_spec_list' => array(),
			'tag_spec' => array(
				'child_tags' => array(
					'child_tag_name_oneof' => array(
						'ol',
						'ul',
					),
					'mandatory_num_child_tags' => 1,
				),
				'reference_points' => array(
					'AMP-MEGA-MENU NAV > UL/OL' => array(
						'mandatory' => false,
						'unique' => false,
					),
				),
				'siblings_disallowed' => true,
				'spec_name' => 'AMP-MEGA-MENU > NAV',
			),
		),
		'AMP-MEGA-MENU NAV > UL/OL' => array(
			'attr_spec_list' => array(),
			'tag_spec' => array(
				'child_tags' => array(
					'child_tag_name_oneof' => array(
						'li',
					),
					'mandatory_min_num_child_tags' => 1,
				),
				'mandatory_parent' => 'nav',
				'reference_points' => array(
					'AMP-MEGA-MENU NAV > UL/OL > LI' => array(
						'mandatory' => false,
						'unique' => false,
					),
				),
				'spec_name' => 'AMP-MEGA-MENU NAV > UL/OL',
			),
		),
		'AMP-MEGA-MENU NAV > UL/OL > LI' => array(
			'attr_spec_list' => array(),
			'tag_spec' => array(
				'child_tags' => array(
					'child_tag_name_oneof' => array(
						'a',
						'button',
						'div',
						'h1',
						'h2',
						'h3',
						'h4',
						'h5',
						'h6',
						'span',
					),
					'mandatory_min_num_child_tags' => 1,
				),
				'reference_points' => array(
					'AMP-MEGA-MENU item-content' => array(
						'mandatory' => false,
						'unique' => true,
					),
					'AMP-MEGA-MENU item-heading' => array(
						'mandatory' => true,
						'unique' => true,
					),
				),
				'spec_name' => 'AMP-MEGA-MENU NAV > UL/OL > LI',
			),
		),
		'AMP-MEGA-MENU item-content' => array(
			'attr_spec_list' => array(
				'role' => array(
					'mandatory' => true,
					'value' => array(
						'dialog',
					),
				),
			),
			'tag_spec' => array(
				'spec_name' => 'AMP-MEGA-MENU item-content',
			),
		),
		'AMP-MEGA-MENU item-heading' => array(
			'attr_spec_list' => array(
				'role' => array(
					'value' => array(
						'button',
					),
				),
			),
			'tag_spec' => array(
				'spec_name' => 'AMP-MEGA-MENU item-heading',
			),
		),
		'AMP-NEXT-PAGE > [footer]' => array(
			'attr_spec_list' => array(
				'footer' => array(
					'mandatory' => true,
				),
			),
			'tag_spec' => array(
				'mandatory_parent' => 'amp-next-page',
				'spec_name' => 'AMP-NEXT-PAGE > [footer]',
			),
		),
		'AMP-NEXT-PAGE > [recommendation-box]' => array(
			'attr_spec_list' => array(
				'recommendation-box' => array(
					'mandatory' => true,
				),
			),
			'tag_spec' => array(
				'mandatory_parent' => 'amp-next-page',
				'spec_name' => 'AMP-NEXT-PAGE > [recommendation-box]',
			),
		),
		'AMP-NEXT-PAGE > [separator]' => array(
			'attr_spec_list' => array(
				'separator' => array(
					'mandatory' => true,
				),
			),
			'tag_spec' => array(
				'mandatory_parent' => 'amp-next-page',
				'spec_name' => 'AMP-NEXT-PAGE > [separator]',
			),
		),
		'AMP-SELECTOR child' => array(
			'attr_spec_list' => array(),
			'tag_spec' => array(
				'reference_points' => array(
					'AMP-SELECTOR child' => array(
						'mandatory' => false,
						'unique' => false,
					),
					'AMP-SELECTOR option' => array(
						'mandatory' => false,
						'unique' => false,
					),
				),
				'spec_name' => 'AMP-SELECTOR child',
			),
		),
		'AMP-SELECTOR option' => array(
			'attr_spec_list' => array(
				'disabled' => array(
					'value' => array(
						'',
					),
				),
				'option' => array(
					'mandatory' => true,
				),
				'selected' => array(
					'value' => array(
						'',
					),
				),
			),
			'tag_spec' => array(
				'spec_name' => 'AMP-SELECTOR option',
				'spec_url' => 'https://amp.dev/documentation/components/amp-selector/',
			),
		),
		'AMP-STORY-CTA-LAYER animate-in' => array(
			'attr_spec_list' => array(
				'animate-in' => array(
					'value' => array(
						'drop',
						'fade-in',
						'fly-in-bottom',
						'fly-in-left',
						'fly-in-right',
						'fly-in-top',
						'pan-down',
						'pan-left',
						'pan-right',
						'pan-up',
						'pulse',
						'rotate-in-left',
						'rotate-in-right',
						'scale-fade-down',
						'scale-fade-up',
						'twirl-in',
						'whoosh-in-left',
						'whoosh-in-right',
						'zoom-in',
						'zoom-out',
					),
				),
				'animate-in-after' => array(),
				'animate-in-delay' => array(),
				'animate-in-duration' => array(),
				'animate-in-timing-function' => array(),
				'pan-scaling-factor' => array(
					'value_regex_casei' => '^([0-9]*[.]?[0-9]+)|([0-9]+[.]?[0-9]*)$',
				),
				'scale-end' => array(
					'value_regex' => '[0-9]+([.][0-9]+)?',
				),
				'scale-start' => array(
					'value_regex' => '[0-9]+([.][0-9]+)?',
				),
				'translate-x' => array(
					'value_regex_casei' => '[0-9]+px',
				),
				'translate-y' => array(
					'value_regex_casei' => '[0-9]+px',
				),
			),
			'tag_spec' => array(
				'reference_points' => array(
					'AMP-STORY-CTA-LAYER animate-in' => array(
						'mandatory' => false,
						'unique' => false,
					),
				),
				'spec_name' => 'AMP-STORY-CTA-LAYER animate-in',
				'spec_url' => 'https://amp.dev/documentation/components/amp-story/',
			),
		),
		'AMP-STORY-GRID-LAYER animate-in' => array(
			'attr_spec_list' => array(
				'animate-in' => array(
					'value' => array(
						'drop',
						'fade-in',
						'fly-in-bottom',
						'fly-in-left',
						'fly-in-right',
						'fly-in-top',
						'pan-down',
						'pan-left',
						'pan-right',
						'pan-up',
						'pulse',
						'rotate-in-left',
						'rotate-in-right',
						'scale-fade-down',
						'scale-fade-up',
						'twirl-in',
						'whoosh-in-left',
						'whoosh-in-right',
						'zoom-in',
						'zoom-out',
					),
				),
				'animate-in-after' => array(),
				'animate-in-delay' => array(),
				'animate-in-duration' => array(),
				'animate-in-timing-function' => array(),
				'data-tooltip-icon' => array(
					'value_url' => array(
						'protocol' => array(
							'http',
							'https',
							'data',
						),
					),
				),
				'interactive' => array(
					'value' => array(
						'',
					),
				),
				'pan-scaling-factor' => array(
					'value_regex_casei' => '^([0-9]*[.]?[0-9]+)|([0-9]+[.]?[0-9]*)$',
				),
				'scale-end' => array(
					'value_regex' => '[0-9]+([.][0-9]+)?',
				),
				'scale-start' => array(
					'value_regex' => '[0-9]+([.][0-9]+)?',
				),
				'target' => array(
					'value' => array(
						'_blank',
					),
				),
				'translate-x' => array(
					'value_regex_casei' => '[0-9]+px',
				),
				'translate-y' => array(
					'value_regex_casei' => '[0-9]+px',
				),
			),
			'tag_spec' => array(
				'reference_points' => array(
					'AMP-STORY-GRID-LAYER animate-in' => array(
						'mandatory' => false,
						'unique' => false,
					),
				),
				'spec_name' => 'AMP-STORY-GRID-LAYER animate-in',
				'spec_url' => 'https://amp.dev/documentation/components/amp-story/',
			),
		),
		'AMP-STORY-GRID-LAYER default' => array(
			'attr_spec_list' => array(
				'align-content' => array(
					'value' => array(
						'center',
						'end',
						'space-around',
						'space-between',
						'space-evenly',
						'start',
						'stretch',
					),
				),
				'align-items' => array(
					'value' => array(
						'center',
						'end',
						'start',
						'stretch',
					),
				),
				'align-self' => array(
					'value' => array(
						'center',
						'end',
						'start',
						'stretch',
					),
				),
				'animate-in' => array(
					'value' => array(
						'drop',
						'fade-in',
						'fly-in-bottom',
						'fly-in-left',
						'fly-in-right',
						'fly-in-top',
						'pan-down',
						'pan-left',
						'pan-right',
						'pan-up',
						'pulse',
						'rotate-in-left',
						'rotate-in-right',
						'scale-fade-down',
						'scale-fade-up',
						'twirl-in',
						'whoosh-in-left',
						'whoosh-in-right',
						'zoom-in',
						'zoom-out',
					),
				),
				'animate-in-after' => array(),
				'animate-in-delay' => array(),
				'animate-in-duration' => array(),
				'animate-in-timing-function' => array(),
				'data-tooltip-icon' => array(
					'value_url' => array(
						'protocol' => array(
							'http',
							'https',
							'data',
						),
					),
				),
				'grid-area' => array(),
				'interactive' => array(
					'value' => array(
						'',
					),
				),
				'justify-content' => array(
					'value' => array(
						'center',
						'end',
						'space-around',
						'space-between',
						'space-evenly',
						'start',
						'stretch',
					),
				),
				'justify-items' => array(
					'value' => array(
						'center',
						'end',
						'start',
						'stretch',
					),
				),
				'justify-self' => array(
					'value' => array(
						'center',
						'end',
						'start',
						'stretch',
					),
				),
				'pan-scaling-factor' => array(
					'value_regex_casei' => '^([0-9]*[.]?[0-9]+)|([0-9]+[.]?[0-9]*)$',
				),
				'scale-end' => array(
					'value_regex' => '[0-9]+([.][0-9]+)?',
				),
				'scale-start' => array(
					'value_regex' => '[0-9]+([.][0-9]+)?',
				),
				'target' => array(
					'value' => array(
						'_blank',
					),
				),
				'translate-x' => array(
					'value_regex_casei' => '[0-9]+px',
				),
				'translate-y' => array(
					'value_regex_casei' => '[0-9]+px',
				),
			),
			'tag_spec' => array(
				'reference_points' => array(
					'AMP-STORY-GRID-LAYER animate-in' => array(
						'mandatory' => false,
						'unique' => false,
					),
				),
				'spec_name' => 'AMP-STORY-GRID-LAYER default',
				'spec_url' => 'https://amp.dev/documentation/components/amp-story/',
			),
		),
	);


	/**
	 * Get allowed tags.
	 *
	 * @since 0.5
	 * @return array Allowed tags.
	 */
	public static function get_allowed_tags() {
		return self::$allowed_tags;
	}

	/**
	 * Get extension specs.
	 *
	 * @since 1.5
	 * @internal
	 * @return array Extension specs, keyed by extension name.
	 */
	public static function get_extension_specs() {
		static $extension_specs = [];

		if ( ! empty( $extension_specs ) ) {
			return $extension_specs;
		}

		foreach ( self::get_allowed_tag( 'script' ) as $script_spec ) {
			if ( isset( $script_spec[ AMP_Rule_Spec::TAG_SPEC ]['extension_spec'] ) ) {
				$extension_specs[ $script_spec[ AMP_Rule_Spec::TAG_SPEC ]['extension_spec']['name'] ] = $script_spec[ AMP_Rule_Spec::TAG_SPEC ]['extension_spec'];
			}
		}

		return $extension_specs;
	}

	/**
	 * Get allowed tag.
	 *
	 * Get the rules for a single tag so that the entire data structure needn't be passed around.
	 *
	 * @since 0.7
	 * @param string $node_name Tag name.
	 * @return array|null Allowed tag, or null if the tag does not exist.
	 */
	public static function get_allowed_tag( $node_name ) {
		if ( isset( self::$allowed_tags[ $node_name ] ) ) {
			return self::$allowed_tags[ $node_name ];
		}
		return null;
	}

	/**
	 * Get descendant tag lists.
	 *
	 * @since 1.1
	 * @return array Descendant tags list.
	 */
	public static function get_descendant_tag_lists() {
		return self::$descendant_tag_lists;
	}

	/**
	 * Get allowed descendant tag list for a tag.
	 *
	 * Get the descendant rules for a single tag so that the entire data structure needn't be passed around.
	 *
	 * @since 1.1
	 * @param string $name Name for the descendants list.
	 * @return array|bool Allowed tags list, or false if there are no restrictions.
	 */
	public static function get_descendant_tag_list( $name ) {
		if ( isset( self::$descendant_tag_lists[ $name ] ) ) {
			return self::$descendant_tag_lists[ $name ];
		}
		return false;
	}

	/**
	 * Get reference point spec.
	 *
	 * @since 1.0
	 * @param string $tag_spec_name Tag spec name.
	 * @return array|null Reference point spec, or null if does not exist.
	 */
	public static function get_reference_point_spec( $tag_spec_name ) {
		if ( isset( self::$reference_points[ $tag_spec_name ] ) ) {
			return self::$reference_points[ $tag_spec_name ];
		}
		return null;
	}

	/**
	 * Get list of globally-allowed attributes.
	 *
	 * @since 0.5
	 * @return array Allowed tag.
	 */
	public static function get_allowed_attributes() {
		return self::$globally_allowed_attrs;
	}

	/**
	 * Get layout attributes.
	 *
	 * @since 0.5
	 * @return array Allowed tag.
	 */
	public static function get_layout_attributes() {
		return self::$layout_allowed_attrs;
	}

}

PK.3Y�*���<bunyad-amp/includes/sanitizers/class-amp-audio-sanitizer.php<?php
/**
 * Class AMP_Audio_Sanitizer
 *
 * @package AMP
 */

use AmpProject\AmpWP\ValidationExemption;
use AmpProject\DevMode;
use AmpProject\Html\Attribute;

/**
 * Class AMP_Audio_Sanitizer
 *
 * Converts <audio> tags to <amp-audio>
 *
 * @internal
 */
class AMP_Audio_Sanitizer extends AMP_Base_Sanitizer {
	use AMP_Noscript_Fallback;

	/**
	 * Tag.
	 *
	 * @var string HTML audio tag to identify and replace with AMP version.
	 * @since 0.2
	 */
	public static $tag = 'audio';

	/**
	 * Default args.
	 *
	 * @var array
	 */
	protected $DEFAULT_ARGS = [
		'add_noscript_fallback' => true,
		'native_audio_used'     => false,
	];

	/**
	 * Get mapping of HTML selectors to the AMP component selectors which they may be converted into.
	 *
	 * @return array Mapping.
	 */
	public function get_selector_conversion_mapping() {
		if ( $this->args['native_audio_used'] ) {
			return [];
		}
		return [
			'audio' => [ 'amp-audio' ],
		];
	}

	/**
	 * Sanitize the <audio> elements from the HTML contained in this instance's Dom\Document.
	 *
	 * @since 0.2
	 */
	public function sanitize() {
		$nodes     = $this->dom->getElementsByTagName( self::$tag );
		$num_nodes = $nodes->length;
		if ( 0 === $num_nodes ) {
			return;
		}

		if ( $this->args['add_noscript_fallback'] && ! $this->args['native_audio_used'] ) {
			$this->initialize_noscript_allowed_attributes( self::$tag );
		}

		for ( $i = $num_nodes - 1; $i >= 0; $i-- ) {
			/** @var DOMElement $node */
			$node = $nodes->item( $i );

			// Skip element if already inside of an AMP element as a noscript fallback, or it has a dev mode exemption.
			if ( $this->is_inside_amp_noscript( $node ) || DevMode::hasExemptionForNode( $node ) ) {
				continue;
			}

			// If native audio is being used, just mark it as unvalidated.
			if ( $this->args['native_audio_used'] ) {
				ValidationExemption::mark_node_as_px_verified( $node );
				continue;
			}

			$old_attributes = AMP_DOM_Utils::get_node_attributes_as_assoc_array( $node );

			// For amp-audio, the default width and height are inferred from browser.
			$sources        = [];
			$new_attributes = $this->filter_attributes( $old_attributes );
			if ( ! empty( $new_attributes['src'] ) ) {
				$sources[] = $new_attributes['src'];
			}

			// Remove the ID from the original node so that PHP DOM doesn't fail to set it on the replacement element.
			$node->removeAttribute( Attribute::ID );

			/**
			 * Original node.
			 *
			 * @var DOMElement $old_node
			 */
			$old_node = $node->cloneNode( false );

			// Gather all child nodes and supply empty video dimensions from sources.
			$fallback    = null;
			$child_nodes = [];
			while ( $node->firstChild ) {
				$child_node = $node->removeChild( $node->firstChild );
				if ( $child_node instanceof DOMElement && 'source' === $child_node->nodeName && $child_node->hasAttribute( 'src' ) ) {
					$src = $this->maybe_enforce_https_src( $child_node->getAttribute( 'src' ), true );
					if ( ! $src ) {
						// @todo $this->remove_invalid_child( $child_node ), but this will require refactoring the while loop since it uses firstChild.
						continue; // Skip adding source.
					}
					$sources[] = $src;
					$child_node->setAttribute( 'src', $src );
					$new_attributes = $this->filter_attributes( $new_attributes );
				}

				if ( ! $fallback && $child_node instanceof DOMElement && ! ( 'source' === $child_node->nodeName || 'track' === $child_node->nodeName ) ) {
					$fallback = $child_node;
					$fallback->setAttribute( 'fallback', '' );
				}

				$child_nodes[] = $child_node;
			}

			/*
			 * Add fallback for audio shortcode which is not present by default since wp_mediaelement_fallback()
			 * is not called when wp_audio_shortcode_library is filtered from mediaelement to amp.
			 */
			if ( ! $fallback && ! empty( $sources ) ) {
				$fallback = $this->dom->createElement( 'a' );
				$fallback->setAttribute( 'href', $sources[0] );
				$fallback->setAttribute( 'fallback', '' );
				$fallback->appendChild( $this->dom->createTextNode( $sources[0] ) );
				$child_nodes[] = $fallback;
			}

			/*
			 * Audio in WordPress is responsive with 100% width, so this infers fixed-layout.
			 * In AMP, the amp-audio's default height is inferred from the browser.
			 */
			$new_attributes['width'] = 'auto';

			// @todo Make sure poster and artwork attributes are HTTPS.
			$new_node = AMP_DOM_Utils::create_node( $this->dom, 'amp-audio', $new_attributes );
			foreach ( $child_nodes as $child_node ) {
				$new_node->appendChild( $child_node );
				if ( ! ( $child_node instanceof DOMElement ) || ! $child_node->hasAttribute( 'fallback' ) ) {
					$old_node->appendChild( $child_node->cloneNode( true ) );
				}
			}

			// Make sure the updated src and poster are applied to the original.
			foreach ( [ 'src', 'poster', 'artwork' ] as $attr_name ) {
				if ( $new_node->hasAttribute( $attr_name ) ) {
					$old_node->setAttribute( $attr_name, $new_node->getAttribute( $attr_name ) );
				}
			}

			/*
			 * If the node has at least one valid source, replace the old node with it.
			 * Otherwise, just remove the node.
			 *
			 * @todo Add a fallback handler.
			 * See: https://github.com/ampproject/amphtml/issues/2261
			 */
			if ( empty( $sources ) ) {
				$this->remove_invalid_child(
					$node,
					[
						'code'       => AMP_Tag_And_Attribute_Sanitizer::ATTR_REQUIRED_BUT_MISSING,
						'attributes' => [ 'src' ],
						'spec_name'  => 'amp-audio',
					]
				);
			} else {
				$node->parentNode->replaceChild( $new_node, $node );

				if ( $this->args['add_noscript_fallback'] ) {
					// Preserve original node in noscript for no-JS environments.
					$this->append_old_node_noscript( $new_node, $old_node, $this->dom );
				}
			}

			$this->did_convert_elements = true;
		}
	}

	/**
	 * "Filter" HTML attributes for <amp-audio> elements.
	 *
	 * @since 0.2
	 *
	 * @param string[] $attributes {
	 *      Attributes.
	 *
	 *      @type string $src Audio URL - Empty if HTTPS required per $this->args['require_https_src']
	 *      @type int $width <audio> attribute - Set to numeric value if px or %
	 *      @type int $height <audio> attribute - Set to numeric value if px or %
	 *      @type string $class <audio> attribute - Pass along if found
	 *      @type bool $loop <audio> attribute - Convert 'false' to empty string ''
	 *      @type bool $muted <audio> attribute - Convert 'false' to empty string ''
	 *      @type bool $autoplay <audio> attribute - Convert 'false' to empty string ''
	 * }
	 * @return array Returns HTML attributes; removes any not specifically declared above from input.
	 */
	private function filter_attributes( $attributes ) {
		$out = [];

		foreach ( $attributes as $name => $value ) {
			switch ( $name ) {
				case 'src':
					$out[ $name ] = $this->maybe_enforce_https_src( $value );
					break;

				case 'width':
				case 'height':
					$out[ $name ] = $this->sanitize_dimension( $value, $name );
					break;

				case 'class':
					$out[ $name ] = $value;
					break;
				case 'loop':
				case 'muted':
				case 'autoplay':
					if ( 'false' !== $value ) {
						$out[ $name ] = '';
					}
					break;

				case 'data-amp-layout':
					$out['layout'] = $value;
					break;

				case 'data-amp-noloading':
					$out['noloading'] = $value;
					break;

				default:
					$out[ $name ] = $value;
			}
		}

		return $out;
	}
}
PK.3Y�Ϯ��Lbunyad-amp/includes/sanitizers/class-amp-auto-lightbox-disable-sanitizer.php<?php
/**
 * Class AMP_Auto_Lightbox_Disable_Sanitizer
 *
 * @package AmpProject\AmpWP
 */

/**
 * Disable auto lightbox for images.
 *
 * @since 2.2.2
 * @internal
 */
class AMP_Auto_Lightbox_Disable_Sanitizer extends AMP_Base_Sanitizer {

	/**
	 * Add "data-amp-auto-lightbox-disable" attribute to body tag.
	 *
	 * @return void
	 */
	public function sanitize() {
		$this->dom->html->setAttributeNode( $this->dom->createAttribute( 'data-amp-auto-lightbox-disable' ) );
	}
}
PK.3Y�+��|�|;bunyad-amp/includes/sanitizers/class-amp-base-sanitizer.php<?php
/**
 * Class AMP_Base_Sanitizer
 *
 * @package AMP
 */

use AmpProject\AmpWP\ValidationExemption;
use AmpProject\CssLength;
use AmpProject\DevMode;
use AmpProject\Dom\Document;

/**
 * Class AMP_Base_Sanitizer
 *
 * @since 0.2
 */
abstract class AMP_Base_Sanitizer {

	/**
	 * Value used with the height attribute in an $attributes parameter is empty.
	 *
	 * @since 0.3.3
	 *
	 * @const int
	 */
	const FALLBACK_HEIGHT = 400;

	/**
	 * Placeholder for default args, to be set in child classes.
	 *
	 * @since 0.2
	 *
	 * @var array
	 */
	protected $DEFAULT_ARGS = [];

	/**
	 * DOM.
	 *
	 * @var Document An AmpProject\Document representation of an HTML document.
	 *
	 * @since 0.2
	 */
	protected $dom;

	/**
	 * Array of flags used to control sanitization.
	 *
	 * @var array {
	 *      @type int $content_max_width
	 *      @type bool $add_placeholder
	 *      @type bool $use_document_element
	 *      @type bool $require_https_src
	 *      @type string[] $amp_allowed_tags
	 *      @type string[] $amp_globally_allowed_attributes
	 *      @type string[] $amp_layout_allowed_attributes
	 *      @type array $amp_allowed_tags
	 *      @type array $amp_globally_allowed_attributes
	 *      @type array $amp_layout_allowed_attributes
	 *      @type array $amp_bind_placeholder_prefix
	 *      @type bool $should_locate_sources
	 *      @type callable $validation_error_callback
	 * }
	 */
	protected $args;

	/**
	 * Flag to be set in child class' sanitize() method indicating if the
	 * HTML contained in the Dom\Document has been sanitized yet or not.
	 *
	 * @since 0.2
	 *
	 * @var bool
	 */
	protected $did_convert_elements = false;

	/**
	 * The root element used for sanitization. Either html or body.
	 *
	 * @var DOMElement
	 */
	protected $root_element;

	/**
	 * AMP_Base_Sanitizer constructor.
	 *
	 * @since 0.2
	 *
	 * @param Document $dom Represents the HTML document to sanitize.
	 * @param array    $args {
	 *      Args.
	 *
	 *      @type int $content_max_width
	 *      @type bool $add_placeholder
	 *      @type bool $require_https_src
	 *      @type string[] $amp_allowed_tags
	 *      @type string[] $amp_globally_allowed_attributes
	 *      @type string[] $amp_layout_allowed_attributes
	 * }
	 */
	public function __construct( $dom, $args = [] ) {
		$this->dom  = $dom;
		$this->args = array_merge( $this->DEFAULT_ARGS, $args );

		if ( ! empty( $this->args['use_document_element'] ) ) {
			$this->root_element = $this->dom->documentElement;
		} else {
			$this->root_element = $this->dom->body;
		}
	}

	/**
	 * Add filters to manipulate output during output buffering before the DOM is constructed.
	 *
	 * Add actions and filters before the page is rendered so that the sanitizer can fix issues during output buffering.
	 * This provides an alternative to manipulating the DOM in the sanitize method. This is a static function because
	 * it is invoked before the class is instantiated, as the DOM is not available yet. This method is only called
	 * when 'amp' theme support is present. It is conceptually similar to the AMP_Base_Embed_Handler class's register_embed
	 * method.
	 *
	 * @since 1.0
	 * @see \AMP_Base_Embed_Handler::register_embed()
	 *
	 * @param array $args Args.
	 */
	public static function add_buffering_hooks( $args = [] ) {} // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable

	/**
	 * Get mapping of HTML selectors to the AMP component selectors which they may be converted into.
	 *
	 * @see AMP_Style_Sanitizer::ampify_ruleset_selectors()
	 *
	 * @return array Mapping.
	 */
	public function get_selector_conversion_mapping() {
		return [];
	}

	/**
	 * Determine whether the resulting AMP element uses a "light" shadow DOM.
	 *
	 * Sometimes AMP components serve as wrappers for native elements, like `amp-img` for `img`. When this
	 * is the case, authors sometimes will want to style the shadow element (such as to set object-fit). Normally if a
	 * selector contains `img` then the style sanitizer will always convert this to `amp-img` (and `amp-anim`), which
	 * may break the author's intended selector target. So when using a sanitizer's selector conversion mapping to
	 * rewrite non-AMP to AMP selectors, it will first check to see if the selector already mentions an AMP tag and if
	 * so it will skip the conversions for that selector. In this way, an `amp-img img` selector will not get converted
	 * into `amp-img amp-img`. The selector mapping also is involved when doing tree shaking. In the case of the
	 * selector `amp-img img`, the tree shaker would normally strip out this selector because no `img` may be present
	 * in the page as it is added by the AMP runtime (unless noscript fallbacks have been added, and this also
	 * disregards data-hero images which are added later by AMP Optimizer). So in order to prevent such selectors from
	 * being stripped out, it's important to include the `amp-img` selector among the `dynamic_element_selectors` so
	 * that the `img` in the `amp-img img` selector is ignored for the purposes of tree shaking. This method is used
	 * to indicate which sanitizers are involved in such element conversions. If this method returns true, then the
	 * keys in the selector conversion mapping should be used as `dynamic_element_selectors`.
	 *
	 * In other words, this method indicates whether keys in the conversion mapping are ancestors of elements which are
	 * created at runtime. This method is only relevant when the `get_selector_conversion_mapping()` method returns a
	 * mapping.
	 *
	 * @since 2.2
	 * @see AMP_Style_Sanitizer::ampify_ruleset_selectors()
	 * @see AMP_Base_Sanitizer::get_selector_conversion_mapping()
	 *
	 * @return bool Whether light DOM is used.
	 */
	public function has_light_shadow_dom() {
		return true;
	}

	/**
	 * Get arg.
	 *
	 * @since 2.2
	 *
	 * @param string $key Arg key.
	 * @return mixed Args.
	 */
	public function get_arg( $key ) {
		if ( array_key_exists( $key, $this->args ) ) {
			return $this->args[ $key ];
		}
		return null;
	}

	/**
	 * Get args.
	 *
	 * @since 2.2
	 *
	 * @return array Args.
	 */
	public function get_args() {
		return $this->args;
	}

	/**
	 * Update args.
	 *
	 * Merges the supplied args with the existing args.
	 *
	 * @since 2.2
	 *
	 * @param array $args Args.
	 */
	public function update_args( $args ) {
		$this->args = array_merge( $this->args, $args );
	}

	/**
	 * Run logic before any sanitizers are run.
	 *
	 * After the sanitizers are instantiated but before calling sanitize on each of them, this
	 * method is called with list of all the instantiated sanitizers.
	 *
	 * @param AMP_Base_Sanitizer[] $sanitizers Sanitizers.
	 */
	public function init( $sanitizers ) {} // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable

	/**
	 * Sanitize the HTML contained in the DOMDocument received by the constructor
	 */
	abstract public function sanitize();

	/**
	 * Return array of values that would be valid as an HTML `script` element.
	 *
	 * Array keys are AMP element names and array values are their respective
	 * Javascript URLs from https://cdn.ampproject.org
	 *
	 * @since 0.2
	 *
	 * @return string[] Returns component name as array key and JavaScript URL as array value,
	 *                  respectively. Will return an empty array if sanitization has yet to be run
	 *                  or if it did not find any HTML elements to convert to AMP equivalents.
	 */
	public function get_scripts() {
		return [];
	}

	/**
	 * Return array of values that would be valid as an HTML `style` attribute.
	 *
	 * @since 0.4
	 * @codeCoverageIgnore
	 * @deprecated As of 1.0, use get_stylesheets().
	 * @internal
	 *
	 * @return array[][] Mapping of CSS selectors to arrays of properties.
	 */
	public function get_styles() {
		return [];
	}

	/**
	 * Get stylesheets.
	 *
	 * @since 0.7
	 * @return array Values are the CSS stylesheets. Keys are MD5 hashes of the stylesheets.
	 */
	public function get_stylesheets() {
		$stylesheets = [];

		foreach ( $this->get_styles() as $selector => $properties ) {
			$stylesheet = sprintf( '%s { %s }', $selector, implode( '; ', $properties ) . ';' );

			$stylesheets[ md5( $stylesheet ) ] = $stylesheet;
		}

		return $stylesheets;
	}

	/**
	 * Get HTML body as DOMElement from Dom\Document received by the constructor.
	 *
	 * @codeCoverageIgnore
	 * @deprecated Use $this->dom->body instead.
	 * @return DOMElement The body element.
	 */
	protected function get_body_node() {
		_deprecated_function( 'Use $this->dom->body instead', '1.5.0' );
		return $this->dom->body;
	}

	/**
	 * Sanitizes a CSS dimension specifier while being sensitive to dimension context.
	 *
	 * @param string $value     A valid CSS dimension specifier; e.g. 50, 50px, 50%. Can be 'auto' for width.
	 * @param string $dimension Dimension, either 'width' or 'height'.
	 *
	 * @return float|int|string Returns a numeric dimension value, 'auto', or an empty string.
	 */
	public function sanitize_dimension( $value, $dimension ) {

		// Allows 0 to be used as valid dimension.
		if ( empty( $value ) && '0' !== (string) $value ) {
			return '';
		}

		// Accepts both integers and floats & prevents negative values.
		if ( is_numeric( $value ) ) {
			return max( 0, (float) $value );
		}

		if ( AMP_String_Utils::endswith( $value, '%' ) && 'width' === $dimension ) {
			if ( '100%' === $value ) {
				return 'auto';
			} elseif ( isset( $this->args['content_max_width'] ) ) {
				$percentage = absint( $value ) / 100;
				return round( $percentage * $this->args['content_max_width'] );
			}
		}

		$length = new CssLength( $value );
		$length->validate( 'width' === $dimension, false );
		if ( $length->isValid() ) {
			if ( $length->isAuto() ) {
				return 'auto';
			}
			return $length->getNumeral() . ( $length->getUnit() === 'px' ? '' : $length->getUnit() );
		}

		return '';
	}

	/**
	 * Determine if an attribute value is empty.
	 *
	 * @param string|null $value Attribute value.
	 * @return bool True if empty, false if not.
	 */
	public function is_empty_attribute_value( $value ) {
		return ! isset( $value ) || '' === $value;
	}

	/**
	 * Sets the layout, and possibly the 'height' and 'width' attributes.
	 *
	 * @param array $attributes {
	 *      Attributes.
	 *
	 *      @type string     $bottom
	 *      @type int|string $height
	 *      @type string     $layout
	 *      @type string     $left
	 *      @type string     $position
	 *      @type string     $right
	 *      @type string     $style
	 *      @type string     $top
	 *      @type int|string $width
	 * }
	 * @return array Attributes.
	 */
	public function set_layout( $attributes ) {
		if ( isset( $attributes['layout'] ) && ( 'fill' === $attributes['layout'] || 'flex-item' !== $attributes['layout'] ) ) {
			return $attributes;
		}

		// Special-case handling for inline style that should be transformed into layout=fill.
		if ( ! empty( $attributes['style'] ) ) {
			$styles = $this->parse_style_string( $attributes['style'] );

			// Apply fill layout if top, left, bottom, right are used.
			if ( isset( $styles['position'], $styles['top'], $styles['left'], $styles['bottom'], $styles['right'] )
				&& 'absolute' === $styles['position']
				&& 0 === (int) $styles['top']
				&& 0 === (int) $styles['left']
				&& 0 === (int) $styles['bottom']
				&& 0 === (int) $styles['right']
				&& ( ! isset( $attributes['width'] ) || '100%' === $attributes['width'] )
				&& ( ! isset( $attributes['height'] ) || '100%' === $attributes['height'] )
			) {
				unset( $attributes['style'], $styles['position'], $styles['top'], $styles['left'], $styles['bottom'], $styles['right'] );
				if ( ! empty( $styles ) ) {
					$attributes['style'] = $this->reassemble_style_string( $styles );
				}
				$attributes['layout'] = 'fill';
				unset( $attributes['height'], $attributes['width'] );
				return $attributes;
			}

			// Apply fill layout if top, left, width, height are used.
			if ( isset( $styles['position'], $styles['top'], $styles['left'], $styles['width'], $styles['height'] )
				&& 'absolute' === $styles['position']
				&& 0 === (int) $styles['top']
				&& 0 === (int) $styles['left']
				&& '100%' === (string) $styles['width']
				&& '100%' === (string) $styles['height']
			) {
				unset( $attributes['style'], $styles['position'], $styles['top'], $styles['left'], $styles['width'], $styles['height'] );
				if ( ! empty( $styles ) ) {
					$attributes['style'] = $this->reassemble_style_string( $styles );
				}
				$attributes['layout'] = 'fill';
				unset( $attributes['height'], $attributes['width'] );
				return $attributes;
			}

			// Apply fill layout if width & height are 100%.
			if (
				( isset( $styles['position'] ) && 'absolute' === $styles['position'] )
				&& (
					( isset( $attributes['width'] ) && '100%' === $attributes['width'] )
					||
					( isset( $styles['width'] ) && '100%' === $styles['width'] )
				)
				&& (
					( isset( $attributes['height'] ) && '100%' === $attributes['height'] )
					||
					( isset( $styles['height'] ) && '100%' === $styles['height'] )
				)
			) {
				unset( $attributes['style'], $attributes['width'], $attributes['height'] );
				unset( $styles['position'], $styles['width'], $styles['height'] );
				if ( ! empty( $styles ) ) {
					$attributes['style'] = $this->reassemble_style_string( $styles );
				}
				$attributes['layout'] = 'fill';
				return $attributes;
			}

			// Make sure the width and height styles are copied to the width and height attributes since AMP will ultimately inline them as styles.
			$pending_attributes = [];
			$seen_units         = [];
			foreach ( wp_array_slice_assoc( $styles, [ 'height', 'width' ] ) as $dimension => $value ) {
				$value = $this->sanitize_dimension( $value, $dimension );
				if ( '' === $value ) {
					continue;
				}

				if ( 'auto' !== $value ) {
					$this_unit = preg_replace( '/^.*\d/', '', $value );
					if ( ! $this_unit ) {
						$this_unit = 'px';
					}
					$seen_units[ $this_unit ] = true;
				}

				$pending_attributes[ $dimension ] = $value;
			}
			if ( $pending_attributes && count( $seen_units ) <= 1 ) {
				$attributes = array_merge( $attributes, $pending_attributes );
			}
		}

		if ( isset( $attributes['width'], $attributes['height'] ) && '100%' === $attributes['width'] && '100%' === $attributes['height'] ) {
			unset( $attributes['width'], $attributes['height'] );
			$attributes['layout'] = 'fill';
		} else {
			if ( empty( $attributes['height'] ) ) {
				unset( $attributes['width'] );
				$attributes['height'] = self::FALLBACK_HEIGHT;
			}
			if ( empty( $attributes['width'] ) || '100%' === $attributes['width'] || 'auto' === $attributes['width'] ) {
				$attributes['layout'] = 'fixed-height';
				$attributes['width']  = 'auto';
			}
		}

		return $attributes;
	}

	/**
	 * Adds or appends key and value to list of attributes
	 *
	 * Adds key and value to list of attributes, or if the key already exists in the array
	 * it concatenates to existing attribute separator by a space or other supplied separator.
	 *
	 * @param string[] $attributes {
	 *      Attributes.
	 *
	 *      @type int $height
	 *      @type int $width
	 *      @type string $sizes
	 *      @type string $class
	 *      @type string $layout
	 * }
	 * @param string   $key       Valid associative array index to add.
	 * @param string   $value     Value to add or append to array indexed at the key.
	 * @param string   $separator Optional; defaults to space but some other separator if needed.
	 */
	public function add_or_append_attribute( &$attributes, $key, $value, $separator = ' ' ) {
		if ( isset( $attributes[ $key ] ) ) {
			$attributes[ $key ] = trim( $attributes[ $key ] . $separator . $value );
		} else {
			$attributes[ $key ] = $value;
		}
	}

	/**
	 * Decide if we should remove a src attribute if https is required.
	 *
	 * If not required, the implementing class may want to try and force https instead.
	 *
	 * @param string  $src         URL to convert to HTTPS if forced, or made empty if $args['require_https_src'].
	 * @param boolean $force_https Force setting of HTTPS if true.
	 * @return string URL which may have been updated with HTTPS, or may have been made empty.
	 */
	public function maybe_enforce_https_src( $src, $force_https = false ) {
		$protocol = strtok( $src, ':' ); // @todo What about relative URLs? This should use wp_parse_url( $src, PHP_URL_SCHEME )
		if ( 'https' !== $protocol ) {
			// Check if https is required.
			if ( isset( $this->args['require_https_src'] ) && true === $this->args['require_https_src'] ) {
				// Remove the src. Let the implementing class decide what do from here.
				$src = '';
			} elseif ( ( ! isset( $this->args['require_https_src'] ) || false === $this->args['require_https_src'] )
				&& true === $force_https ) {
				// Don't remove the src, but force https instead.
				$src = set_url_scheme( $src, 'https' );
			}
		}

		return $src;
	}

	/**
	 * Check whether the document of a given node is in dev mode.
	 *
	 * @since 1.3
	 *
	 * @deprecated Use AmpProject\DevMode::isActiveForDocument( $document ) instead.
	 *
	 * @return bool Whether the document is in dev mode.
	 */
	protected function is_document_in_dev_mode() {
		_deprecated_function( 'AMP_Base_Sanitizer::is_document_in_dev_mode', '1.5', 'AmpProject\DevMode::isActiveForDocument' );
		return DevMode::isActiveForDocument( $this->dom );
	}

	/**
	 * Check whether a node is exempt from validation during dev mode.
	 *
	 * @since 1.3
	 *
	 * @deprecated Use AmpProject\DevMode::hasExemptionForNode( $node ) instead.
	 *
	 * @param DOMNode $node Node to check.
	 * @return bool Whether the node should be exempt during dev mode.
	 */
	protected function has_dev_mode_exemption( DOMNode $node ) {
		_deprecated_function( 'AMP_Base_Sanitizer::has_dev_mode_exemption', '1.5', 'AmpProject\DevMode::hasExemptionForNode' );
		return DevMode::hasExemptionForNode( $node );
	}

	/**
	 * Check whether a certain node should be exempt from validation.
	 *
	 * @deprecated Use AmpProject\DevMode::isExemptFromValidation( $node ) instead.
	 *
	 * @param DOMNode $node Node to check.
	 * @return bool Whether the node should be exempt from validation.
	 */
	protected function is_exempt_from_validation( DOMNode $node ) {
		_deprecated_function( 'AMP_Base_Sanitizer::is_exempt_from_validation', '1.5', 'AmpProject\DevMode::isExemptFromValidation' );
		return DevMode::isExemptFromValidation( $node );
	}

	/**
	 * Removes an invalid child of a node.
	 *
	 * Also, calls the mutation callback for it.
	 * This tracks all the nodes that were removed.
	 *
	 * @since 0.7
	 *
	 * @param DOMNode|DOMElement $node             The node to remove.
	 * @param array              $validation_error Validation error details.
	 * @return bool Whether the node should have been removed, that is, that the node was sanitized for validity.
	 */
	public function remove_invalid_child( $node, $validation_error = [] ) {
		if ( DevMode::isExemptFromValidation( $node ) ) {
			return false;
		}

		if ( ValidationExemption::is_amp_unvalidated_for_node( $node ) || ValidationExemption::is_px_verified_for_node( $node ) ) {
			return false;
		}

		$should_remove = $this->should_sanitize_validation_error( $validation_error, compact( 'node' ) );
		if ( $should_remove ) {
			if ( null === $node->parentNode ) {
				// Node no longer exists.
				return $should_remove;
			}

			$node->parentNode->removeChild( $node );
		} else {
			ValidationExemption::mark_node_as_amp_unvalidated( $node );
		}
		return $should_remove;
	}

	/**
	 * Removes an invalid attribute of a node.
	 *
	 * Also, calls the mutation callback for it.
	 * This tracks all the attributes that were removed.
	 *
	 * @since 0.7
	 *
	 * @param DOMElement     $element   The node for which to remove the attribute.
	 * @param DOMAttr|string $attribute The attribute to remove from the element.
	 * @param array          $validation_error Validation error details.
	 * @param array          $attr_spec        Attribute spec.
	 * @return bool Whether the node should have been removed, that is, that the node was sanitized for validity.
	 */
	public function remove_invalid_attribute( $element, $attribute, $validation_error = [], $attr_spec = [] ) {
		if ( DevMode::isExemptFromValidation( $element ) ) {
			return false;
		}

		if ( is_string( $attribute ) ) {
			$node = $element->getAttributeNode( $attribute );
		} else {
			$node = $attribute;
		}

		// Catch edge condition (no known possible way to reach).
		if ( ! ( $node instanceof DOMAttr ) || $element !== $node->parentNode ) {
			return false;
		}

		if ( ValidationExemption::is_amp_unvalidated_for_node( $node ) || ValidationExemption::is_px_verified_for_node( $node ) ) {
			return false;
		}

		$should_remove = $this->should_sanitize_validation_error( $validation_error, compact( 'node' ) );
		if ( $should_remove ) {
			$allow_empty  = ! empty( $attr_spec[ AMP_Rule_Spec::VALUE_URL ][ AMP_Rule_Spec::ALLOW_EMPTY ] );
			$is_href_attr = ( isset( $attr_spec[ AMP_Rule_Spec::VALUE_URL ] ) && 'href' === $node->nodeName );
			if ( $allow_empty && ! $is_href_attr ) {
				$node->nodeValue = '';
			} else {
				$element->removeAttributeNode( $node );
			}
		} else {
			ValidationExemption::mark_node_as_amp_unvalidated( $node );
		}

		return $should_remove;
	}

	/**
	 * Check whether or not sanitization should occur in response to validation error.
	 *
	 * @since 1.0
	 *
	 * @param array $validation_error Validation error.
	 * @param array $data             Data including the node.
	 * @return bool Whether to sanitize.
	 */
	public function should_sanitize_validation_error( $validation_error, $data = [] ) {
		if ( empty( $this->args['validation_error_callback'] ) || ! is_callable( $this->args['validation_error_callback'] ) ) {
			return true;
		}
		$validation_error = $this->prepare_validation_error( $validation_error, $data );
		return false !== call_user_func( $this->args['validation_error_callback'], $validation_error, $data );
	}

	/**
	 * Prepare validation error.
	 *
	 * @param array $error {
	 *     Error.
	 *
	 *     @type string $code Error code.
	 * }
	 * @param array $data {
	 *     Data.
	 *
	 *     @type DOMElement|DOMNode $node The removed node.
	 * }
	 * @return array Error.
	 */
	public function prepare_validation_error( array $error = [], array $data = [] ) {
		$node = null;

		if ( isset( $data['node'] ) && $data['node'] instanceof DOMNode ) {
			$node = $data['node'];

			$error['node_name'] = $node->nodeName;
			if ( $node->parentNode ) {
				$error['parent_name'] = $node->parentNode->nodeName;
			}
		}

		if ( $node instanceof DOMElement ) {
			if ( ! isset( $error['code'] ) ) {
				$error['code'] = AMP_Tag_And_Attribute_Sanitizer::DISALLOWED_TAG;
			}

			if ( ! isset( $error['type'] ) ) {
				// @todo Also include javascript: protocol for URL errors.
				$error['type'] = 'script' === $node->nodeName ? AMP_Validation_Error_Taxonomy::JS_ERROR_TYPE : AMP_Validation_Error_Taxonomy::HTML_ELEMENT_ERROR_TYPE;
			}

			// @todo Change from node_attributes to element_attributes to harmonize the two.
			if ( ! isset( $error['node_attributes'] ) ) {
				$error['node_attributes'] = [];
				foreach ( $node->attributes as $attribute ) {
					$error['node_attributes'][ $attribute->nodeName ] = $attribute->nodeValue;
				}
			}

			// Capture element contents.
			$is_inline_script = ( 'script' === $node->nodeName && ! $node->hasAttribute( 'src' ) );
			$is_inline_style  = ( 'style' === $node->nodeName && ! $node->hasAttribute( 'amp-custom' ) && ! $node->hasAttribute( 'amp-keyframes' ) );
			if ( $is_inline_script || $is_inline_style ) {
				$text_content = $node->textContent;
				if ( $is_inline_script ) {
					// For inline scripts, normalize string and number literals to prevent nonces, random numbers, and timestamps
					// from generating endless number of validation errors.
					$error['text'] = preg_replace(
						[
							// Regex credit to <https://stackoverflow.com/a/5696141/93579>.
							'/"[^"\\\\\n]*(?:\\\\.[^"\\\\\n]*)*"/s',
							'/\'[^\'\\\\\n]*(?:\\\\.[^\'\\\\\n]*)*\'/s',
							'/(\b|-)\d+\.\d+\b/',
							'/(\b|-)\d+\b/',
						],
						[
							'__DOUBLE_QUOTED_STRING__',
							'__SINGLE_QUOTED_STRING__',
							'__FLOAT__',
							'__INT__',
						],
						$text_content
					);
				} else {
					// Include stylesheet text except for amp-custom and amp-keyframes since it is large and since it should
					// already be detailed in the stylesheets metabox.
					$error['text'] = $text_content;
				}
			}

			// Suppress 'ver' param from enqueued scripts and styles.
			if ( 'script' === $node->nodeName && isset( $error['node_attributes']['src'] ) && false !== strpos( $error['node_attributes']['src'], 'ver=' ) ) {
				$error['node_attributes']['src'] = add_query_arg( 'ver', '__normalized__', $error['node_attributes']['src'] );
			} elseif ( 'link' === $node->nodeName && isset( $error['node_attributes']['href'] ) && false !== strpos( $error['node_attributes']['href'], 'ver=' ) ) {
				$error['node_attributes']['href'] = add_query_arg( 'ver', '__normalized__', $error['node_attributes']['href'] );
			}
		} elseif ( $node instanceof DOMAttr ) {
			if ( ! isset( $error['code'] ) ) {
				$error['code'] = AMP_Tag_And_Attribute_Sanitizer::DISALLOWED_ATTR;
			}
			if ( ! isset( $error['type'] ) ) {
				// If this is an attribute that begins with on, like onclick, it should be a js_error.
				$error['type'] = preg_match( '/^on\w+/', $node->nodeName ) ? AMP_Validation_Error_Taxonomy::JS_ERROR_TYPE : AMP_Validation_Error_Taxonomy::HTML_ATTRIBUTE_ERROR_TYPE;
			}
			if ( ! isset( $error['element_attributes'] ) ) {
				$error['element_attributes'] = [];
				if ( $node->parentNode && $node->parentNode->hasAttributes() ) {
					foreach ( $node->parentNode->attributes as $attribute ) {
						$error['element_attributes'][ $attribute->nodeName ] = $attribute->nodeValue;
					}
				}
			}
		} elseif ( $node instanceof DOMProcessingInstruction ) {
			$error['text'] = trim( $node->data, '?' );
		}

		if ( ! isset( $error['node_type'] ) ) {
			$error['node_type'] = $node->nodeType;
		}

		return $error;
	}

	/**
	 * Cleans up artifacts after the removal of an attribute node.
	 *
	 * @since 1.3
	 *
	 * @param DOMElement $element   The node for which the attribute was removed.
	 * @param DOMAttr    $attribute The attribute that was removed.
	 */
	protected function clean_up_after_attribute_removal( $element, $attribute ) {
		static $attributes_tied_to_href = [ 'target', 'download', 'rel', 'rev', 'hreflang', 'type' ];

		if ( 'href' === $attribute->nodeName ) {
			/*
			 * "The target, download, rel, rev, hreflang, and type attributes must be omitted
			 * if the href attribute is not present."
			 * See: https://www.w3.org/TR/2016/REC-html51-20161101/textlevel-semantics.html#the-a-element
			 */
			foreach ( $attributes_tied_to_href as $attribute_to_remove ) {
				if ( $element->hasAttribute( $attribute_to_remove ) ) {
					$element->removeAttribute( $attribute_to_remove );
				}
			}
		}
	}

	/**
	 * Get data-amp-* values from the parent node 'figure' added by editor block.
	 *
	 * @param DOMElement $node Base node.
	 * @return array AMP data array.
	 */
	public function get_data_amp_attributes( $node ) {
		$attributes = [];

		// Editor blocks add 'figure' as the parent node for images. If this node has data-amp-layout then we should add this as the layout attribute.
		$parent_node = $node->parentNode;
		if ( $parent_node instanceof DOMELement && 'figure' === $parent_node->tagName ) {
			$parent_attributes = AMP_DOM_Utils::get_node_attributes_as_assoc_array( $parent_node );
			if ( isset( $parent_attributes['data-amp-layout'] ) ) {
				$attributes['layout'] = $parent_attributes['data-amp-layout'];
			}
			if ( isset( $parent_attributes['data-amp-noloading'] ) && true === filter_var( $parent_attributes['data-amp-noloading'], FILTER_VALIDATE_BOOLEAN ) ) {
				$attributes['noloading'] = $parent_attributes['data-amp-noloading'];
			}
		}

		return $attributes;
	}

	/**
	 * Set AMP attributes.
	 *
	 * @param array $attributes Array of attributes.
	 * @param array $amp_data Array of AMP attributes.
	 * @return array Updated attributes.
	 */
	public function filter_data_amp_attributes( $attributes, $amp_data ) {
		if ( isset( $amp_data['layout'] ) ) {
			$attributes['data-amp-layout'] = $amp_data['layout'];
		}
		if ( isset( $amp_data['noloading'] ) ) {
			$attributes['data-amp-noloading'] = '';
		}
		return $attributes;
	}

	/**
	 * Set attributes to node's parent element according to layout.
	 *
	 * @param DOMElement $node Node.
	 * @param array      $new_attributes Attributes array.
	 * @param string     $layout Layout.
	 * @return array New attributes.
	 */
	public function filter_attachment_layout_attributes( $node, $new_attributes, $layout ) {

		// The width has to be unset / auto in case of fixed-height.
		if ( 'fixed-height' === $layout && $node->parentNode instanceof DOMElement ) {
			if ( ! isset( $new_attributes['height'] ) ) {
				$new_attributes['height'] = self::FALLBACK_HEIGHT;
			}
			$new_attributes['width'] = 'auto';
			$node->parentNode->setAttribute( 'style', 'height: ' . $new_attributes['height'] . 'px; width: auto;' );

			// The parent element should have width/height set and position set in case of 'fill'.
		} elseif ( 'fill' === $layout && $node->parentNode instanceof DOMElement ) {
			if ( ! isset( $new_attributes['height'] ) ) {
				$new_attributes['height'] = self::FALLBACK_HEIGHT;
			}
			$node->parentNode->setAttribute( 'style', 'position:relative; width: 100%; height: ' . $new_attributes['height'] . 'px;' );
			unset( $new_attributes['width'], $new_attributes['height'] );
		} elseif ( 'responsive' === $layout && $node->parentNode instanceof DOMElement ) {
			$node->parentNode->setAttribute( 'style', 'position:relative; width: 100%; height: auto' );
		} elseif ( 'fixed' === $layout ) {
			if ( ! isset( $new_attributes['height'] ) ) {
				$new_attributes['height'] = self::FALLBACK_HEIGHT;
			}
		}

		return $new_attributes;
	}

	/**
	 * Parse a style string into an associative array of style attributes.
	 *
	 * @param string $style_string Style string to parse.
	 * @return string[] Associative array of style attributes.
	 */
	protected function parse_style_string( $style_string ) {
		// We need to turn the style string into an associative array of styles first.
		$style_string = trim( $style_string, " \t\n\r\0\x0B;" );
		$elements     = preg_split( '/(\s*:\s*|\s*;\s*)/', $style_string );

		if ( 0 !== count( $elements ) % 2 ) {
			// Style string was malformed, try to process as good as possible by stripping the last element.
			array_pop( $elements );
		}

		$chunks = array_chunk( $elements, 2 );

		// phpcs:ignore PHPCompatibility.FunctionUse.NewFunctions.array_columnFound -- WP Core provides a polyfill.
		return array_combine( array_column( $chunks, 0 ), array_column( $chunks, 1 ) );
	}

	/**
	 * Reassemble a style string that can be used in a 'style' attribute.
	 *
	 * @param array $styles Associative array of styles to reassemble into a string.
	 * @return string Reassembled style string.
	 */
	protected function reassemble_style_string( $styles ) {
		if ( ! is_array( $styles ) ) {
			return '';
		}

		// Discard empty values first.
		$styles = array_filter( $styles );

		return array_reduce(
			array_keys( $styles ),
			static function ( $style_string, $style_name ) use ( $styles ) {
				if ( ! empty( $style_string ) ) {
					$style_string .= ';';
				}

				return $style_string . "{$style_name}:{$styles[ $style_name ]}";
			},
			''
		);
	}

	/**
	 * Get data that is returned in validate responses.
	 *
	 * The array returned is merged with the overall validate response data.
	 *
	 * @see \AMP_Validation_Manager::get_validate_response_data()
	 * @return array Validate response data.
	 */
	public function get_validate_response_data() {
		return [];
	}
}
PK.3Yo 1 1<bunyad-amp/includes/sanitizers/class-amp-bento-sanitizer.php<?php
/**
 * Class AMP_Bento_Sanitizer.
 *
 * @package AMP
 */

use AmpProject\AmpWP\ValidationExemption;
use AmpProject\CssLength;
use AmpProject\Dom\Element;
use AmpProject\Html\Attribute;
use AmpProject\Html\LengthUnit;
use AmpProject\Layout;

/**
 * Convert all bento-prefixed components into amp-prefixed components, or else mark them as PX-verified if they have no
 * AMP versions. Remove Bento stylesheets and scripts if they aren't needed.
 *
 * @since 2.2
 * @deprecated 2.5.0 Bento support have been removed from amphtml.
 * @internal
 */
class AMP_Bento_Sanitizer extends AMP_Base_Sanitizer {

	/** @var string */
	const XPATH_BENTO_ELEMENTS_QUERY = './/*[ starts-with( name(), "bento-" ) ]';

	/**
	 * Get mapping of HTML selectors to the AMP component selectors which they may be converted into.
	 *
	 * @return array Mapping.
	 */
	public function get_selector_conversion_mapping() {
		$mapping = [];
		foreach ( AMP_Allowed_Tags_Generated::get_extension_specs() as $amp_extension_name => $extension_spec ) {
			if ( empty( $extension_spec['bento'] ) ) {
				continue;
			}
			$bento_extension_name = str_replace( 'amp-', 'bento-', $amp_extension_name );
			if ( $bento_extension_name !== $amp_extension_name ) {
				$mapping[ $bento_extension_name ] = [ $amp_extension_name ];
			}
		}

		return $mapping;
	}

	/**
	 * Indicate that the selector conversion mappings do not involve light shadow DOM.
	 *
	 * For example, with `bento-base-carousel`, the descendant `h2` elements will be present in the document initially.
	 * So a selector like `bento-base-carousel h2` will not have issues with tree shaking when it is converted into
	 * `amp-base-carousel h2`. Additionally, Bento components by definition use the _actual_ real shadow DOM, so if
	 * there were a selector like `bento-foo div` then the `div` would never match an element since is beyond the
	 * shadow boundary, and tree shaking should be free to remove such a selector. Selectors that are targeting
	 * slotted elements are not inside the shadow DOM, so for example `bento-base-carousel img` will target an actual
	 * element in the initial DOM, even though `bento-base-carousel` has other elements that are beyond the shadow
	 * DOM boundary.
	 *
	 * @return false
	 */
	public function has_light_shadow_dom() {
		return false;
	}

	/**
	 * Sanitize.
	 */
	public function sanitize() {
		$bento_elements = $this->dom->xpath->query( self::XPATH_BENTO_ELEMENTS_QUERY, $this->dom->body );

		$bento_elements_discovered = [];
		$bento_elements_converted  = [];

		$extension_specs = AMP_Allowed_Tags_Generated::get_extension_specs();
		foreach ( $bento_elements as $bento_element ) {
			/** @var Element $bento_element */
			$bento_name = $bento_element->tagName;
			$amp_name   = str_replace( 'bento-', 'amp-', $bento_name );

			$bento_elements_discovered[ $bento_name ] = true;

			// Skip Bento components which aren't valid (yet).
			if ( ! array_key_exists( $amp_name, $extension_specs ) ) {
				ValidationExemption::mark_node_as_px_verified( $bento_element );
				continue;
			}

			$amp_element = $this->dom->createElement( $amp_name );
			while ( $bento_element->attributes->length ) {
				/** @var DOMAttr $attribute */
				$attribute = $bento_element->attributes->item( 0 );

				// Essential for unique attributes like ID, or else PHP DOM will keep it referencing the old element.
				$bento_element->removeAttributeNode( $attribute );

				$amp_element->setAttributeNode( $attribute );
			}

			while ( $bento_element->firstChild instanceof DOMNode ) {
				$amp_element->appendChild( $bento_element->removeChild( $bento_element->firstChild ) );
			}

			$this->adapt_layout_styles( $amp_element );

			$bento_element->parentNode->replaceChild( $amp_element, $bento_element );

			$bento_elements_converted[ $bento_name ] = true;
		}

		// Remove the Bento external stylesheets which are no longer necessary. For the others, mark as PX-verified.
		$links = $this->dom->xpath->query(
			'//link[ @rel = "stylesheet" and starts-with( @href, "https://cdn.ampproject.org/v0/bento-" ) ]'
		);
		foreach ( $links as $link ) {
			/** @var Element $link */
			$bento_name = $this->get_bento_component_name_from_url( $link->getAttribute( Attribute::HREF ) );
			if ( ! $bento_name ) {
				continue;
			}

			if (
				// If the Bento element doesn't exist in the page, remove the extraneous stylesheet.
				! array_key_exists( $bento_name, $bento_elements_discovered )
				||
				// If the Bento element was converted to AMP, then remove the now-unnecessary stylesheet.
				array_key_exists( $bento_name, $bento_elements_converted )
			) {
				$link->parentNode->removeChild( $link );
			} else {
				ValidationExemption::mark_node_as_px_verified( $link );
				ValidationExemption::mark_node_as_px_verified( $link->getAttributeNode( Attribute::HREF ) );
			}
		}

		// Keep track of the number of Bento scripts we kept, as then we'll need to make sure we keep the Bento runtime script.
		$non_amp_scripts_retained = 0;

		// Handle Bento scripts.
		$scripts = $this->dom->xpath->query(
			'//script[ starts-with( @src, "https://cdn.ampproject.org/v0/bento" ) ]'
		);
		foreach ( $scripts as $script ) {
			/** @var Element $script */
			$bento_name = $this->get_bento_component_name_from_url( $script->getAttribute( Attribute::SRC ) );
			if ( ! $bento_name ) {
				continue;
			}

			if (
				// If the Bento element doesn't exist in the page, remove the extraneous script.
				! array_key_exists( $bento_name, $bento_elements_discovered )
				||
				// If the Bento element was converted to AMP, then remove the now-unnecessary script.
				array_key_exists( $bento_name, $bento_elements_converted )
			) {
				$script->parentNode->removeChild( $script );
			} else {
				ValidationExemption::mark_node_as_px_verified( $script );
				$non_amp_scripts_retained++;
			}
		}

		// Remove the Bento runtime script if it is not needed, or else mark it as PX-verified.
		$bento_runtime_scripts = $this->dom->xpath->query(
			'//script[ @src = "https://cdn.ampproject.org/bento.mjs" or @src = "https://cdn.ampproject.org/bento.js" ]'
		);
		if ( 0 === $non_amp_scripts_retained ) {
			foreach ( $bento_runtime_scripts as $bento_runtime_script ) {
				$bento_runtime_script->parentNode->removeChild( $bento_runtime_script );
			}
		} else {
			foreach ( $bento_runtime_scripts as $bento_runtime_script ) {
				ValidationExemption::mark_node_as_px_verified( $bento_runtime_script );
			}
		}
	}

	/**
	 * Parse Bento component name from a Bento CDN URL.
	 *
	 * @param string $url URL for script or stylesheet.
	 * @return string|null Bento component name or null if no match was made.
	 */
	private function get_bento_component_name_from_url( $url ) {
		$path = wp_parse_url( $url, PHP_URL_PATH );
		if ( $path && preg_match( '#^(bento-.*?)-\d+\.\d+\.(m?js|css)#', basename( $path ), $matches ) ) {
			return $matches[1];
		} else {
			return null;
		}
	}

	/**
	 * Adapt inline styles from Bento element to AMP layout attributes.
	 *
	 * This will try its best to convert `width`, `height`, and `aspect-ratio` inline styles over to their corresponding
	 * AMP layout attributes. In order for a Bento component to be AMP-compatible, it needs to utilize inline styles
	 * for its dimensions rather than rely on a stylesheet rule.
	 *
	 * @param Element $amp_element AMP element (converted from Bento).
	 */
	private function adapt_layout_styles( Element $amp_element ) {
		$supported_layouts = [];
		foreach ( AMP_Allowed_Tags_Generated::get_allowed_tag( $amp_element->tagName ) as $rule_spec ) {
			if ( isset( $rule_spec['tag_spec']['amp_layout']['supported_layouts'] ) ) {
				$supported_layouts = array_merge( $supported_layouts, $rule_spec['tag_spec']['amp_layout']['supported_layouts'] );
			}
		}
		$supported_layouts = array_unique( $supported_layouts );

		// If no layouts are supported, then there is nothing to do.
		if ( count( $supported_layouts ) === 0 ) {
			return;
		}

		// If nodisplay is the only supported layout or nodisplay is supported and
		// the element is hidden, then give it the nodisplay layout.
		if (
			[ Layout::TO_SPEC[ Layout::NODISPLAY ] ] === $supported_layouts
			||
			(
				$amp_element->hasAttribute( Attribute::HIDDEN )
				&&
				in_array( Layout::TO_SPEC[ Layout::NODISPLAY ], $supported_layouts, true )
			)
		) {
			$amp_element->setAttribute( Attribute::LAYOUT, Layout::NODISPLAY );
			$amp_element->removeAttribute( Attribute::HIDDEN );
			return;
		}

		// Since Bento elements don't support width/height attributes (currently),
		// obtain the inline styles or else abort if none are provided.
		$style_string = $amp_element->getAttribute( Attribute::STYLE );
		if ( ! $style_string ) {
			return;
		}

		// Re-use set_layout method to detect fill layout (only).
		if ( in_array( Layout::TO_SPEC[ Layout::FILL ], $supported_layouts, true ) ) {
			$attributes = $this->set_layout( [ Attribute::STYLE => $style_string ] );
			if ( isset( $attributes[ Attribute::LAYOUT ] ) && Layout::FILL === $attributes[ Attribute::LAYOUT ] ) {
				$amp_element->setAttributes( $attributes );
				if ( ! array_key_exists( Attribute::STYLE, $attributes ) ) {
					$amp_element->removeAttribute( Attribute::STYLE );
				}
				return;
			}
		}

		// If there are no layouts that support width and height, then abort.
		if (
			0 === count(
				array_intersect(
					$supported_layouts,
					[
						Layout::TO_SPEC[ Layout::FIXED ],
						Layout::TO_SPEC[ Layout::FIXED_HEIGHT ],
						Layout::TO_SPEC[ Layout::INTRINSIC ],
						Layout::TO_SPEC[ Layout::RESPONSIVE ],
					]
				)
			)
		) {
			return;
		}

		$styles = $this->parse_style_string( $style_string );

		$layout_attributes = [];

		// Obtain the height.
		if ( isset( $styles[ Attribute::HEIGHT ] ) ) {
			$height = new CssLength( $styles[ Attribute::HEIGHT ] );
			$height->validate( false, false );
			if ( $height->isValid() ) {
				$layout_attributes[ Attribute::HEIGHT ] = $height->getNumeral() . ( $height->getUnit() !== LengthUnit::PX ? $height->getUnit() : '' );
				unset( $styles[ Attribute::HEIGHT ] );
			}
		}

		// Obtain the width.
		if (
			in_array( Layout::TO_SPEC[ Layout::FIXED_HEIGHT ], $supported_layouts, true )
			&&
			( ! isset( $styles[ Attribute::WIDTH ] ) || '100%' === $styles[ Attribute::WIDTH ] )
		) {
			$layout_attributes[ Attribute::WIDTH ]  = CssLength::AUTO;
			$layout_attributes[ Attribute::LAYOUT ] = Layout::FIXED_HEIGHT;
			unset( $styles[ Attribute::WIDTH ] );
		} elseif ( isset( $styles[ Attribute::WIDTH ] ) ) {
			$width = new CssLength( $styles[ Attribute::WIDTH ] );
			$width->validate( false, false );
			if ( $width->isValid() ) {
				$layout_attributes[ Attribute::WIDTH ] = $width->getNumeral() . ( $width->getUnit() !== LengthUnit::PX ? $width->getUnit() : '' );
				unset( $styles[ Attribute::WIDTH ] );
			}
		}

		$supports_responsive = in_array( Layout::TO_SPEC[ Layout::RESPONSIVE ], $supported_layouts, true );
		$supports_intrinsic  = in_array( Layout::TO_SPEC[ Layout::INTRINSIC ], $supported_layouts, true );
		if (
			isset( $styles[ Attribute::ASPECT_RATIO ] )
			&&
			( $supports_responsive || $supports_intrinsic )
			&&
			preg_match( '#(?P<width>\d+(?:.\d+)?)(?:\s*/\s*(?P<height>\d+(?:.\d+)?))?#', $styles[ Attribute::ASPECT_RATIO ], $matches )
		) {
			$height = isset( $matches[ Attribute::HEIGHT ] ) ? (float) $matches[ Attribute::HEIGHT ] : 1.0;
			$width  = (float) $matches[ Attribute::WIDTH ];

			// Derive intrinsic width and height when max-width is supplied.
			$intrinsic_width = null;
			if ( isset( $styles[ Attribute::MAX_WIDTH ] ) ) {
				$intrinsic_width = new CssLength( $styles[ Attribute::MAX_WIDTH ] );
				$intrinsic_width->validate( false, false );
				if ( $intrinsic_width->isValid() && $intrinsic_width->getUnit() === LengthUnit::PX ) {
					unset( $styles[ Attribute::MAX_WIDTH ] );
				} else {
					$intrinsic_width = null;
				}
			}

			if ( $intrinsic_width ) {
				$height = ( $height / $width ) * $intrinsic_width->getNumeral();
				$width  = $intrinsic_width->getNumeral();
			} else {
				$supports_intrinsic = false;
			}

			$layout_attributes[ Attribute::LAYOUT ] = $supports_intrinsic ? Layout::INTRINSIC : Layout::RESPONSIVE;
			$layout_attributes[ Attribute::HEIGHT ] = (string) $height;
			$layout_attributes[ Attribute::WIDTH ]  = (string) $width;

			unset( $styles[ Attribute::ASPECT_RATIO ] );
		}

		if ( $layout_attributes ) {
			$amp_element->setAttribute( Attribute::STYLE, $this->reassemble_style_string( $styles ) );
			$amp_element->setAttributes( $layout_attributes );
		}
	}
}
PK.3Y���X00<bunyad-amp/includes/sanitizers/class-amp-block-sanitizer.php<?php
/**
 * Class AMP_Block_Sanitizer.
 *
 * @package AMP
 */

/**
 * Class AMP_Block_Sanitizer
 *
 * Modifies elements created as blocks to match the blocks' AMP-specific configuration.
 *
 * @internal
 */
class AMP_Block_Sanitizer extends AMP_Base_Sanitizer {

	/**
	 * Tag.
	 *
	 * @var string Figure tag to identify wrapper around AMP elements.
	 * @since 1.0
	 */
	public static $tag = 'figure';

	/**
	 * Sanitize the AMP elements contained by <figure> element where necessary.
	 *
	 * @since 0.2
	 */
	public function sanitize() {
		$nodes     = $this->dom->getElementsByTagName( self::$tag );
		$num_nodes = $nodes->length;
		if ( 0 === $num_nodes ) {
			return;
		}

		for ( $i = $num_nodes - 1; $i >= 0; $i-- ) {
			/**
			 * Element.
			 *
			 * @var DOMElement $node
			 */
			$node = $nodes->item( $i );

			// We are only looking for <figure> elements which have wp-block-embed as class.
			$classes = preg_split( '/\s+/', trim( $node->getAttribute( 'class' ) ) );

			if ( ! in_array( 'wp-block-embed', $classes, true ) ) {
				continue;
			}

			$responsive_width  = null;
			$responsive_height = null;

			// Remove classes related to aspect ratios as the embed's responsiveness will be handled by AMP's layout system.
			$classes = array_filter(
				$classes,
				static function ( $class ) use ( &$responsive_width, &$responsive_height ) {
					if ( preg_match( '/^wp-embed-aspect-(?P<width>\d+)-(?P<height>\d+)$/', $class, $matches ) ) {
						$responsive_width  = $matches['width'];
						$responsive_height = $matches['height'];
						return false;
					}
					return 'wp-has-aspect-ratio' !== $class;
				}
			);

			$node->setAttribute( 'class', implode( ' ', $classes ) );

			// We're looking for <figure> elements that have one child node only.
			if ( 1 !== count( $node->childNodes ) ) {
				continue;
			}

			// @todo Should this only be done if the body has a .wp-embed-responsive class (i.e. current_theme_supports( 'responsive-embeds' ))?
			// @todo Should we consider just eliminating the .wp-block-embed__wrapper element since unnecessary?
			// For visual parity with blocks in non-AMP pages, override the oEmbed's natural responsive dimensions with the aspect ratio specified in the wp-embed-aspect-* class name.
			if ( $responsive_width && $responsive_height ) {
				$amp_element = $this->dom->xpath->query( './div[ contains( @class, "wp-block-embed__wrapper" ) ]/*[ @layout = "responsive" or @layout = "intrinsic"  ]', $node )->item( 0 );
				if ( $amp_element instanceof DOMElement ) {
					$amp_element->setAttribute( 'width', $responsive_width );
					$amp_element->setAttribute( 'height', $responsive_height );
					$amp_element->setAttribute( 'layout', 'responsive' );
				}
			}

			$attributes = AMP_DOM_Utils::get_node_attributes_as_assoc_array( $node );

			// We are looking for <figure> elements with layout attribute only.
			if (
				! isset( $attributes['data-amp-layout'] ) &&
				! isset( $attributes['data-amp-noloading'] ) &&
				! isset( $attributes['data-amp-lightbox'] )
			) {
				continue;
			}

			$amp_el_found = false;

			foreach ( $node->childNodes as $child_node ) {
				if ( ! $child_node instanceof DOMElement ) {
					continue;
				}

				// We are looking for child elements which start with 'amp-'.
				if ( 0 !== strpos( $child_node->tagName, 'amp-' ) ) {
					continue;
				}
				$amp_el_found = true;

				$this->set_attributes( $child_node, $node, $attributes );
			}

			if ( false === $amp_el_found ) {
				continue;
			}
			$this->did_convert_elements = true;
		}
	}

	/**
	 * Sets necessary attributes to both parent and AMP element node.
	 *
	 * @param DOMElement $node AMP element node.
	 * @param DOMElement $parent_node <figure> node.
	 * @param array      $attributes Current attributes of the AMP element.
	 */
	protected function set_attributes( DOMElement $node, DOMElement $parent_node, $attributes ) {
		if ( isset( $attributes['data-amp-layout'] ) ) {
			$node->setAttribute( 'layout', $attributes['data-amp-layout'] );
		}
		if ( isset( $attributes['data-amp-noloading'] ) && true === filter_var( $attributes['data-amp-noloading'], FILTER_VALIDATE_BOOLEAN ) ) {
			$node->setAttribute( 'noloading', '' );
		}

		$layout = $node->getAttribute( 'layout' );

		// The width has to be unset / auto in case of fixed-height.
		if ( 'fixed-height' === $layout ) {
			if ( ! isset( $attributes['height'] ) ) {
				$node->setAttribute( 'height', self::FALLBACK_HEIGHT );
			}
			$node->setAttribute( 'width', 'auto' );

			$height = $node->getAttribute( 'height' );
			if ( is_numeric( $height ) ) {
				$height .= 'px';
			}
			$parent_node->setAttribute( 'style', "height: $height; width: auto;" );

			// The parent element should have width/height set and position set in case of 'fill'.
		} elseif ( 'fill' === $layout ) {
			if ( ! isset( $attributes['height'] ) ) {
				$attributes['height'] = self::FALLBACK_HEIGHT;
			}
			$parent_node->setAttribute( 'style', 'position:relative; width: 100%; height: ' . $attributes['height'] . 'px;' );
			$node->removeAttribute( 'width' );
			$node->removeAttribute( 'height' );
		} elseif ( 'responsive' === $layout ) {
			$parent_node->setAttribute( 'style', 'position:relative; width: 100%; height: auto' );
		} elseif ( 'fixed' === $layout ) {
			if ( ! isset( $attributes['height'] ) ) {
				$node->setAttribute( 'height', self::FALLBACK_HEIGHT );
			}
		}

		// Set the fallback layout in case needed.
		$attributes = AMP_DOM_Utils::get_node_attributes_as_assoc_array( $node );
		$attributes = $this->set_layout( $attributes );
		if ( $layout !== $attributes['layout'] ) {
			$node->setAttribute( 'layout', $attributes['layout'] );
		}
	}
}
PK.3Yie*�NNCbunyad-amp/includes/sanitizers/class-amp-block-uniqid-sanitizer.php<?php
/**
 * Class AMP_Block_Uniqid_Sanitizer.
 *
 * @package AMP
 */

use AmpProject\Dom\Element;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag;
use AmpProject\Dom\Document;

/**
 * Work around use of uniqid() in blocks which breaks parsed CSS caching.
 *
 * @link https://github.com/ampproject/amp-wp/issues/6925
 * @link https://github.com/WordPress/gutenberg/issues/38889
 *
 * @since 2.2.2
 * @internal
 */
class AMP_Block_Uniqid_Sanitizer extends AMP_Base_Sanitizer {

	/**
	 * Prefixes of class names that should be transformed.
	 *
	 * @var string[]
	 */
	const KEY_PREFIXES = [
		'wp-container-',
		'wp-duotone-',
		'wp-duotone-filter-',
		'wp-elements-',
	];

	/**
	 * Class name pattern.
	 *
	 * @var string
	 */
	private $key_pattern;

	/**
	 * The mapping between uniqid- and wp_unique_id-based class names.
	 *
	 * @var array
	 */
	private $key_mapping = [];

	/**
	 * @param Document $dom  DOM.
	 * @param array    $args Args.
	 */
	public function __construct( $dom, $args = [] ) {
		parent::__construct( $dom, $args );

		$this->key_pattern = sprintf(
			'/\b(?P<prefix>%s)(?P<uniqid>[0-9a-f]{13})\b/',
			implode(
				'|',
				self::KEY_PREFIXES
			)
		);
	}

	/**
	 * Sanitize.
	 */
	public function sanitize() {
		$elements = $this->dom->xpath->query(
			sprintf(
				'//*[ %s ]',
				implode(
					' or ',
					array_map(
						static function ( $class_name_prefix ) {
							return sprintf(
								'contains( @class, "%s" )',
								$class_name_prefix
							);
						},
						self::KEY_PREFIXES
					)
				)
			)
		);

		$replaced_count = 0;
		foreach ( $elements as $element ) {
			if ( $this->transform_element_with_class_attribute( $element ) ) {
				$replaced_count++;
			}
		}

		if ( $replaced_count > 0 ) {
			$this->transform_styles();
		}
	}

	/**
	 * Transform element with class.
	 *
	 * @param Element $element Element.
	 */
	public function transform_element_with_class_attribute( Element $element ) {
		$class_name = $element->getAttribute( Attribute::CLASS_ );

		$count = 0;

		$new_class_name = preg_replace_callback(
			$this->key_pattern,
			function ( $matches ) {
				$old_key = $matches[0];

				if ( ! isset( $this->key_mapping[ $old_key ] ) ) {
					$this->key_mapping[ $old_key ] = self::unique_id( $matches['prefix'] );
				}
				$new_key = $this->key_mapping[ $old_key ];

				if ( in_array( $matches['prefix'], [ 'wp-duotone-', 'wp-duotone-filter-' ], true ) ) {
					$this->transform_duotone_filter( $old_key, $new_key );
				}

				return $new_key;
			},
			$class_name,
			-1,
			$count
		);
		if ( 0 === $count ) {
			return false;
		} else {
			$element->setAttribute( Attribute::CLASS_, $new_class_name );
			return true;
		}
	}

	/**
	 * Transform duotone filter by updating its ID.
	 *
	 * @param string $old_key Old identifier.
	 * @param string $new_key New identifier.
	 *
	 * @return void
	 */
	public function transform_duotone_filter( $old_key, $new_key ) {
		$svg_filter = $this->dom->getElementById( $old_key );
		if ( $svg_filter instanceof Element && Tag::FILTER === $svg_filter->tagName ) {
			$svg_filter->setAttribute( Attribute::ID, $new_key );
		}
	}

	/**
	 * Transform styles.
	 */
	public function transform_styles() {
		$styles = $this->dom->xpath->query(
			sprintf(
				'//style[ %s ]',
				implode(
					' or ',
					array_map(
						static function ( $key_prefix ) {
							return sprintf(
								'contains( text(), "%s" )',
								$key_prefix
							);
						},
						self::KEY_PREFIXES
					)
				)
			)
		);

		foreach ( $styles as $style ) {
			$style->textContent = str_replace(
				array_keys( $this->key_mapping ),
				array_values( $this->key_mapping ),
				$style->textContent
			);
		}
	}

	/**
	 * Gets unique ID.
	 *
	 * This is a polyfill for WordPress <5.0.3.
	 *
	 * @see wp_unique_id()
	 *
	 * @param string $prefix Prefix for the returned ID.
	 * @return string Unique ID.
	 */
	private static function unique_id( $prefix = '' ) {
		if ( function_exists( 'wp_unique_id' ) ) {
			return wp_unique_id( $prefix );
		} else {
			// @codeCoverageIgnoreStart
			static $id_counter = 0;
			return $prefix . (string) ++$id_counter;
			// @codeCoverageIgnoreEnd
		}
	}
}
PK.3Y���^+^+?bunyad-amp/includes/sanitizers/class-amp-comments-sanitizer.php<?php
/**
 * Class AMP_Comments_Sanitizer.
 *
 * @package AMP
 */

use AmpProject\Amp;
use AmpProject\AmpWP\ValidationExemption;
use AmpProject\Dom\Element;
use AmpProject\Extension;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag;

/**
 * Class AMP_Comments_Sanitizer
 *
 * Strips and corrects attributes in forms.
 *
 * @internal
 */
class AMP_Comments_Sanitizer extends AMP_Base_Sanitizer {

	/** @var AMP_Style_Sanitizer|null */
	private $style_sanitizer;

	/**
	 * Default args.
	 *
	 * @since 1.1
	 *
	 * @var array
	 */
	protected $DEFAULT_ARGS = [
		'comments_live_list'       => false,
		'ampify_comment_threading' => 'always', // Can be 'always', 'never', 'conditionally' (if the comment form was converted to action-xhr).
	];

	/**
	 * Init.
	 *
	 * @param AMP_Base_Sanitizer[] $sanitizers Sanitizers.
	 */
	public function init( $sanitizers ) {
		parent::init( $sanitizers );

		if (
			array_key_exists( AMP_Style_Sanitizer::class, $sanitizers )
			&&
			$sanitizers[ AMP_Style_Sanitizer::class ] instanceof AMP_Style_Sanitizer
		) {
			$this->style_sanitizer = $sanitizers[ AMP_Style_Sanitizer::class ];
		}
	}

	/**
	 * Pre-process the comment form and comment list for AMP.
	 *
	 * @since 0.7
	 */
	public function sanitize() {

		// Find the comment form (which may not have the commentform ID).
		$comment_form = null;
		foreach ( $this->dom->getElementsByTagName( Tag::FORM ) as $form ) {
			$action = $form->getAttribute( Attribute::ACTION_XHR );
			if ( ! $action ) {
				$action = $form->getAttribute( Attribute::ACTION );
			}
			$action_path = wp_parse_url( $action, PHP_URL_PATH );
			if ( $action_path && 'wp-comments-post.php' === basename( $action_path ) ) {
				$comment_form = $form;
				break;
			}
		}

		// Handle the comment reply script.
		$comment_reply_script            = $this->get_comment_reply_script();
		$should_ampify_comment_threading = 'always' === $this->args['ampify_comment_threading'];
		if ( $comment_reply_script instanceof Element ) {
			if ( 'never' === $this->args['ampify_comment_threading'] ) {
				$this->prepare_native_comment_reply( $comment_reply_script );
				$should_ampify_comment_threading = false;
			} elseif (
				'always' === $this->args['ampify_comment_threading']
				||
				(
					'conditionally' === $this->args['ampify_comment_threading']
					&&
					(
						// If there isn't even a comment form on the page, then the comment-reply script shouldn't be here at all.
						! $comment_form instanceof Element
						||
						// If the form has an action-xhr attribute, then it's going to be an AMP page and we need ampified comment threading.
						$comment_form->hasAttribute( Attribute::ACTION_XHR )
					)
				)
			) {
				// Remove the script and then proceed with the amp-bind implementation below.
				$comment_reply_script->parentNode->removeChild( $comment_reply_script );
				$should_ampify_comment_threading = true;
			} else {
				// This is the conditionally-no case.
				$this->prepare_native_comment_reply( $comment_reply_script );

				// Do not proceed with the AMP-bind implementation for threaded comments since the comment-reply script was included.
				$should_ampify_comment_threading = false;
			}
		}

		// Now based on the comment reply script handling above, ampify the comment form.
		if ( get_option( 'thread_comments' ) && $comment_form && $should_ampify_comment_threading ) {
			$this->ampify_threaded_comments( $comment_form );
		}

		if ( $this->args['comments_live_list'] ) {
			$comments = $this->dom->xpath->query( '//amp-live-list/*[ @items ]/*[ starts-with( @id, "comment-" ) ]' );

			foreach ( $comments as $comment ) {
				$this->add_amp_live_list_comment_attributes( $comment );
			}
		}
	}

	/**
	 * Get comment reply script.
	 *
	 * @return Element|null
	 */
	protected function get_comment_reply_script() {
		$element = $this->dom->getElementById( 'comment-reply-js' );
		if ( $element instanceof Element && Tag::SCRIPT === $element->tagName ) {
			return $element;
		} else {
			return null;
		}
	}

	/**
	 * Ampify threaded comments by utilizing amp-bind to implement comment reply functionality.
	 *
	 * @param Element $comment_form Comment form.
	 */
	protected function ampify_threaded_comments( Element $comment_form ) {

		// Create reply state.
		$amp_state = $this->dom->createElement( Extension::STATE );
		$comment_form->insertBefore( $amp_state, $comment_form->firstChild );
		$state_id = 'ampCommentThreading';
		$amp_state->setAttribute( Attribute::ID, $state_id );
		$state = [
			'replyTo'       => '',
			'commentParent' => '0', // @todo What if page accessed with replytocom? Then this should be $comment_parent_id below.
		];

		$comment_parent_id    = 0;
		$comment_parent_input = $this->dom->getElementById( 'comment_parent' );
		if ( $comment_parent_input instanceof Element ) {
			$comment_parent_id = (int) $comment_parent_input->getAttribute( Attribute::VALUE );

			$comment_parent_input->setAttribute(
				Amp::BIND_DATA_ATTR_PREFIX . 'value',
				sprintf( '%s.commentParent', $state_id )
			);
		}

		// Add amp-state to the document.
		$script = $this->dom->createElement( Tag::SCRIPT );
		$script->setAttribute( Attribute::TYPE, 'application/json' );
		$script->appendChild( $this->dom->createTextNode( wp_json_encode( $state, JSON_UNESCAPED_UNICODE ) ) );
		$amp_state->appendChild( $script );

		// @todo This should also remove the novalidate attribute from the form.
		// Reset state when submitting form.
		$comment_form->addAmpAction(
			'submit-success',
			sprintf(
				'%s.clear,AMP.setState({%s: %s})',
				$this->dom->getElementId( $comment_form ),
				$state_id,
				wp_json_encode( $state )
			)
		);

		// Prepare the comment form for replies. The logic here corresponds to what is found in comment-reply.js.
		$reply_heading_element   = $this->dom->getElementById( 'reply-title' );
		$reply_heading_text_node = null; // The text node for the heading.
		if ( $reply_heading_element && $reply_heading_element->firstChild instanceof DOMText ) {
			$reply_heading_text_node = $reply_heading_element->firstChild;
		}

		// Add the text binding to the heading text, which necessitates wrapping in a span.
		if ( $reply_heading_text_node ) {
			$reply_heading_text_span = $this->dom->createElement( Tag::SPAN );
			$reply_heading_element->replaceChild( $reply_heading_text_span, $reply_heading_text_node );
			$reply_heading_text_span->appendChild( $reply_heading_text_node );

			// Move whitespace after the node.
			$reply_heading_text_node->nodeValue = rtrim( $reply_heading_text_node->nodeValue );
			$reply_heading_element->insertBefore(
				$this->dom->createTextNode( ' ' ),
				$reply_heading_text_span->nextSibling
			);

			// Note: if the replytocom query parameter was set, then the existing value will already be a replyTo value.
			// Nevertheless, the link will have the replytocom arg removed, so clicking on the link will cause
			// navigation to a page that has the nameless heading text.
			$text_binding = sprintf(
				'%1$s.replyTo ? %1$s.replyTo : %2$s',
				$state_id,
				wp_json_encode( $reply_heading_text_node->nodeValue, JSON_UNESCAPED_UNICODE )
			);

			$reply_heading_text_span->setAttribute(
				Amp::BIND_DATA_ATTR_PREFIX . 'text',
				$text_binding
			);
		}

		// Update comment reply links to set the reply state.
		$comment_reply_links = $this->dom->xpath->query( '//a[ @data-commentid and @data-postid and @data-respondelement and contains( @class, "comment-reply-link" ) ]' );
		foreach ( $comment_reply_links as $comment_reply_link ) {
			/** @var Element $comment_reply_link */

			$comment_reply_state = [
				$state_id => [
					'replyTo'       => $comment_reply_link->getAttribute( 'data-replyto' ),
					'commentParent' => $comment_reply_link->getAttribute( 'data-commentid' ),
				],
			];

			$comment_reply_link->setAttribute(
				Attribute::HREF,
				'#' . $comment_reply_link->getAttribute( 'data-respondelement' )
			);

			$comment_reply_link->addAmpAction(
				'tap',
				sprintf(
					'AMP.setState(%s),comment.focus',
					wp_json_encode( $comment_reply_state, JSON_UNESCAPED_UNICODE )
				)
			);
		}

		$cancel_comment_reply_link = $this->dom->getElementById( 'cancel-comment-reply-link' );
		if ( $cancel_comment_reply_link instanceof Element ) {

			// Use hidden attribute to hide/show cancel reply link when commentParent is zero.
			$cancel_comment_reply_link->removeAttribute( Attribute::STYLE );
			if ( ! $comment_parent_id ) {
				$cancel_comment_reply_link->setAttributeNode( $this->dom->createAttribute( Attribute::HIDDEN ) );
			}
			$cancel_comment_reply_link->setAttribute(
				Amp::BIND_DATA_ATTR_PREFIX . Attribute::HIDDEN,
				sprintf( '%s.commentParent == "0"', $state_id )
			);

			// Reset state when clicking cancel.
			$cancel_comment_reply_link->addAmpAction(
				'tap',
				sprintf( 'AMP.setState({%s: %s})', $state_id, wp_json_encode( $state, JSON_UNESCAPED_UNICODE ) )
			);
		}
	}

	/**
	 * Prepare for native comment-reply functionality.
	 *
	 * @param Element $comment_reply_script Comment reply script.
	 */
	protected function prepare_native_comment_reply( Element $comment_reply_script ) {
		// Mark the comment-reply script as being PX-verified, which was not done in the script sanitizer because
		// we had to wait until after the form sanitizer ran to find out if we could conditionally serve valid AMP.
		ValidationExemption::mark_node_as_px_verified( $comment_reply_script );
		$comment_reply_script->setAttributeNode( $this->dom->createAttribute( Attribute::DEFER ) );

		// Make sure that that inline styles are not transformed or else they will break comment-reply styling.
		if ( $this->style_sanitizer ) {
			$this->style_sanitizer->update_args( [ 'transform_important_qualifiers' => false ] );
		}
	}

	/**
	 * Add attributes to comment elements when comments are being presented in amp-live-list, when comments_live_list theme support flag is present.
	 *
	 * @since 1.1
	 *
	 * @param Element $comment_element Comment element.
	 */
	protected function add_amp_live_list_comment_attributes( $comment_element ) {
		$comment_id = (int) str_replace( 'comment-', '', $comment_element->getAttribute( 'id' ) );
		if ( ! $comment_id ) {
			return;
		}
		$comment_object = get_comment( $comment_id );

		// Skip if the comment is not valid or the comment has a parent, since in that case it is not relevant for amp-live-list.
		if ( ! ( $comment_object instanceof WP_Comment ) || $comment_object->comment_parent ) {
			return;
		}

		$comment_element->setAttribute( 'data-sort-time', strtotime( $comment_object->comment_date ) );

		$update_time = strtotime( $comment_object->comment_date );

		// Ensure the top-level data-update-time reflects the max time of the comments in the thread.
		$children = $comment_object->get_children(
			[
				'format'       => 'flat',
				'hierarchical' => 'flat',
				'orderby'      => 'none',
			]
		);
		foreach ( $children as $child_comment ) {
			$update_time = max( strtotime( $child_comment->comment_date ), $update_time );
		}

		$comment_element->setAttribute( 'data-update-time', $update_time );
	}
}
PK.3YG�9�F\F\Abunyad-amp/includes/sanitizers/class-amp-core-theme-sanitizer.php<?php
/**
 * Class AMP_Core_Theme_Sanitizer.
 *
 * @package AMP
 * @since 1.0
 */

use AmpProject\Amp;
use AmpProject\AmpWP\Services;
use AmpProject\Dom\Element;
use AmpProject\Extension;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag;
use AmpProject\Html\Role;
use AmpProject\Layout;

/**
 * Class AMP_Core_Theme_Sanitizer
 *
 * Fixes up common issues in core themes and others.
 *
 * @see AMP_Validation_Error_Taxonomy::accept_core_theme_validation_errors()
 * @since 1.0
 * @internal
 */
class AMP_Core_Theme_Sanitizer extends AMP_Base_Sanitizer {

	/**
	 * Array of flags used to control sanitization.
	 *
	 * @since 1.0
	 * @var array {
	 *      @type string $stylesheet     Stylesheet slug.
	 *      @type string $template       Template slug.
	 *      @type array  $theme_features List of theme features that need to be applied. Features are method names,
	 *      @type bool   $native_img_used Whether to use native img.
	 * }
	 */
	protected $args;

	/**
	 * Array of themes that are supported.
	 *
	 * @var array
	 */
	protected static $supported_themes = [
		'twentytwentyone',
		'twentytwenty',
		'twentynineteen',
		'twentyseventeen',
		'twentysixteen',
		'twentyfifteen',
		'twentyfourteen',
		'twentythirteen',
		'twentytwelve',
		'twentyeleven',
		'twentyten',
	];

	/**
	 * Known modal roles.
	 *
	 * @var array
	 */
	protected static $modal_roles = [
		Role::NAVIGATION,
		Role::MENU,
		Role::SEARCH,
		Role::ALERT,
		Role::FIGURE,
		Role::FORM,
		Role::IMG,
		Role::TOOLBAR,
		Role::TOOLTIP,
	];

	/**
	 * Retrieve the config for features needed by a theme.
	 *
	 * @since 1.0
	 * @since 1.5.0 Converted `theme_features` variable into `get_theme_config` function.
	 *
	 * @param string $theme_slug Theme slug.
	 * @param array  $args       Sanitizer args.
	 * @return array|null Array comprising of the theme config if its slug is found, null if it is not.
	 */
	protected static function get_theme_features_config( $theme_slug, $args = [] ) {
		switch ( $theme_slug ) {
			case 'twentytwentyone':
				$config = [
					'dequeue_scripts'                      => [
						'twenty-twenty-one-responsive-embeds-script',
						'twenty-twenty-one-primary-navigation-script',
					],
					'remove_actions'                       => [
						'wp_print_footer_scripts' => [
							'twenty_twenty_one_skip_link_focus_fix', // Unnecessary since part of the AMP runtime.
						],
						'wp_footer'               => [
							'twentytwentyone_add_ie_class',
							'twenty_twenty_one_supports_js', // AMP is essentially no-js, with any interactivity added explicitly via amp-bind.
							[
								'Twenty_Twenty_One_Dark_Mode',
								'the_switch',
								10,
							],
						],
					],
					'amend_twentytwentyone_styles'         => [],
					'amend_twentytwentyone_sub_menu_toggles' => [],
					'add_twentytwentyone_mobile_modal'     => [],
					'add_twentytwentyone_sub_menu_fix'     => [],
					'add_twentytwentyone_dark_mode_toggle' => [],
					'amend_twentytwentyone_dark_mode_styles' => [],
				];

				return $config;

			// Twenty Twenty.
			case 'twentytwenty':
				$config = [
					'prevent_sanitize_in_customizer_preview' => [
						'//style[ @id = "twentytwenty-style-inline-css" ]',
					],
					'dequeue_scripts'                  => [
						'twentytwenty-js',
					],
					'remove_actions'                   => [
						'wp_head'                 => [
							'twentytwenty_no_js_class', // AMP is essentially no-js, with any interactivity added explicitly via amp-bind.
						],
						'wp_print_footer_scripts' => [
							'twentytwenty_skip_link_focus_fix', // See <https://github.com/WordPress/twentynineteen/pull/47>.
						],
					],
					'add_twentytwenty_modals'          => [],
					'add_twentytwenty_toggles'         => [],
					'add_nav_menu_styles'              => [],
					'add_twentytwenty_masthead_styles' => $args,
					'add_img_display_block_fix'        => $args,
					'add_twentytwenty_custom_logo_fix' => $args,
					'add_twentytwenty_current_page_awareness' => [],
					'show_twentytwenty_desktop_expanded_menu' => [],
				];

				$theme = wp_get_theme( 'twentytwenty' );

				if ( $theme->exists() && version_compare( $theme->get( 'Version' ), '1.0.0', '<=' ) ) {
					$config['add_smooth_scrolling'] = [
						'//a[ starts-with( @href, "#" ) and not( @href = "#" )and not( @href = "#0" ) and not( contains( @class, "do-not-scroll" ) ) and not( contains( @class, "skip-link" ) ) ]',
					];
				}

				return $config;

			// Twenty Nineteen.
			case 'twentynineteen':
				return [
					'dequeue_scripts'              => [
						'twentynineteen-skip-link-focus-fix', // This is part of AMP. See <https://github.com/ampproject/amphtml/issues/18671>.
						'twentynineteen-priority-menu',
						'twentynineteen-touch-navigation', // @todo There could be an AMP implementation of this, similar to what is implemented on ampproject.org.
					],
					'remove_actions'               => [
						'wp_print_footer_scripts' => [
							'twentynineteen_skip_link_focus_fix', // See <https://github.com/WordPress/twentynineteen/pull/47>.
						],
						'wp_nav_menu'             => [
							'twentynineteen_add_ellipses_to_nav',
						],
					],
					'adjust_twentynineteen_images' => [],
					'update_twentynineteen_mobile_main_menu' => [],
					'add_nav_menu_styles'          => [],
				];

			// Twenty Seventeen.
			case 'twentyseventeen':
				return [
					'prevent_sanitize_in_customizer_preview' => [
						'//link[ @id = "twentyseventeen-colors-dark-css" ]',
					],
					// @todo Try to implement belowEntryMetaClass().
					'dequeue_scripts'                     => [
						'twentyseventeen-html5', // Only relevant for IE<9.
						'twentyseventeen-global', // There are somethings not yet implemented in AMP. See todos below.
						'jquery-scrollto', // Implemented via add_smooth_scrolling().
						'twentyseventeen-navigation', // Handled by add_nav_menu_styles, add_nav_menu_toggle, add_nav_sub_menu_buttons.
						'twentyseventeen-skip-link-focus-fix', // Unnecessary since part of the AMP runtime.
					],
					'remove_actions'                      => [
						'wp_head' => [
							'twentyseventeen_javascript_detection', // AMP is essentially no-js, with any interactivity added explicitly via amp-bind.
						],
					],
					'force_fixed_background_support'      => [],
					'add_twentyseventeen_masthead_styles' => [],
					'add_twentyseventeen_sticky_nav_menu' => [],
					'add_has_header_video_body_class'     => [],
					'add_nav_menu_styles'                 => [
						'sub_menu_button_toggle_class' => 'toggled-on',
						'no_js_submenu_visible'        => true,
					],
					'add_smooth_scrolling'                => [
						'//header[@id = "masthead"]//a[ contains( @class, "menu-scroll-down" ) ]',
					],
					'set_twentyseventeen_quotes_icon'     => [],
					'add_twentyseventeen_attachment_image_attributes' => $args,
				];

			// Twenty Sixteen.
			case 'twentysixteen':
				return [
					// @todo Figure out an AMP solution for onResizeARIA().
					// @todo Try to implement belowEntryMetaClass().
					'dequeue_scripts'     => [
						'twentysixteen-script',
						'twentysixteen-html5', // Only relevant for IE<9.
						'twentysixteen-keyboard-image-navigation', // AMP does not yet allow for listening to keydown events.
						'twentysixteen-skip-link-focus-fix', // Unnecessary since part of the AMP runtime.
					],
					'remove_actions'      => [
						'wp_head' => [
							'twentysixteen_javascript_detection', // AMP is essentially no-js, with any interactivity added explicitly via amp-bind.
						],
					],
					'add_nav_menu_styles' => [
						'sub_menu_button_toggle_class' => 'toggled-on',
						'no_js_submenu_visible'        => true,
					],
				];

			// Twenty Fifteen.
			case 'twentyfifteen':
				return [
					// @todo Figure out an AMP solution for onResizeARIA().
					'dequeue_scripts'     => [
						'twentyfifteen-script',
						'twentyfifteen-keyboard-image-navigation', // AMP does not yet allow for listening to keydown events.
						'twentyfifteen-skip-link-focus-fix', // Unnecessary since part of the AMP runtime.
					],
					'remove_actions'      => [
						'wp_head' => [
							'twentyfifteen_javascript_detection', // AMP is essentially no-js, with any interactivity added explicitly via amp-bind.
						],
					],
					'add_nav_menu_styles' => [
						'sub_menu_button_toggle_class' => 'toggle-on',
						'no_js_submenu_visible'        => true,
					],
				];

			// Twenty Fourteen.
			case 'twentyfourteen':
				return [
					// @todo Figure out an AMP solution for onResizeARIA().
					'dequeue_scripts'                    => [
						'twentyfourteen-script',
						'twentyfourteen-keyboard-image-navigation', // AMP does not yet allow for listening to keydown events.
						'jquery-masonry', // Masonry style layout is not supported in AMP.
						'twentyfourteen-slider',
					],
					'add_nav_menu_styles'                => [],
					'add_twentyfourteen_masthead_styles' => [],
					'add_twentyfourteen_slider_carousel' => [],
					'add_twentyfourteen_search'          => [],
				];

			// Twenty Thirteen.
			case 'twentythirteen':
				return [
					'dequeue_scripts'          => [
						'jquery-masonry', // Masonry style layout is not supported in AMP.
						'twentythirteen-script',
					],
					'add_nav_menu_toggle'      => [],
					'add_nav_sub_menu_buttons' => [],
					'add_nav_menu_styles'      => [],
				];

			// Twenty Twelve.
			case 'twentytwelve':
				return [
					'dequeue_scripts'     => [
						'twentytwelve-navigation',
					],
					'add_nav_menu_styles' => [],
				];

			// Twenty Eleven.
			case 'twentyeleven':
				return [
					'prevent_sanitize_in_customizer_preview' => [
						'//style[ @id = "twentyeleven-header-css" ]',
						'//link[ @id = "dark-css" ]',
					],
				];

			// Twenty Ten.
			case 'twentyten':
				return [];

			default:
				return null;
		}
	}

	/**
	 * Get list of supported core themes.
	 *
	 * @since 1.0
	 *
	 * @return string[] Slugs for supported themes.
	 */
	public static function get_supported_themes() {
		return self::$supported_themes;
	}

	/**
	 * Get the acceptable validation errors.
	 *
	 * @since 1.0
	 * @deprecated Now unused because viewport CSS at-rules are extracted from stylesheets into meta[name=viewport] tags.
	 *
	 * @return array Acceptable errors.
	 */
	public static function get_acceptable_errors() {
		_deprecated_function( __METHOD__, '1.5' );
		return [];
	}

	/**
	 * Adds extra theme support arguments on the fly.
	 *
	 * This method is neither a buffering hook nor a sanitization callback and is called manually by
	 * {@see AMP_Theme_Support}. Typically themes will add theme support directly and don't need such
	 * a method. In this case, it is a workaround for adding theme support on behalf of external themes.
	 *
	 * @since 1.1
	 */
	public static function extend_theme_support() {
		$template = get_template();
		if ( ! in_array( $template, self::get_supported_themes(), true ) ) {
			return;
		}

		$args    = self::get_theme_support_args( $template );
		$support = AMP_Theme_Support::get_theme_support_args();
		if ( ! is_array( $support ) ) {
			$support = [];
		}

		add_theme_support( AMP_Theme_Support::SLUG, array_merge( $support, $args ) );
	}

	/**
	 * Returns extra arguments to pass to `add_theme_support()`.
	 *
	 * @since 1.1
	 *
	 * @param string $theme Theme slug.
	 * @return array Arguments to merge with existing theme support arguments.
	 */
	protected static function get_theme_support_args( $theme ) {
		// phpcs:disable WordPress.WP.I18n.TextDomainMismatch
		switch ( $theme ) {
			case 'twentytwelve':
				return [
					'nav_menu_toggle' => [
						'nav_container_xpath'        => '//nav[ @id = "site-navigation" ]//ul',
						'nav_container_toggle_class' => 'toggled-on',
						'menu_button_xpath'          => '//nav[ @id = "site-navigation" ]//button[ contains( @class, "menu-toggle" ) ]',
						'menu_button_toggle_class'   => 'toggled-on',
					],
				];
			case 'twentythirteen':
				return [
					'nav_menu_toggle'   => [
						'nav_container_id'           => 'site-navigation',
						'nav_container_toggle_class' => 'toggled-on',
						'menu_button_xpath'          => '//nav[ @id = "site-navigation" ]//button[ contains( @class, "menu-toggle" ) ]',
					],
					'nav_menu_dropdown' => [
						'sub_menu_button_class'        => 'dropdown-toggle',
						'sub_menu_button_toggle_class' => 'toggle-on',
						'expand_text'                  => __( 'expand child menu', 'amp' ),
						'collapse_text'                => __( 'collapse child menu', 'amp' ),
					],
					'nav_menu_styles'   => [],
				];
			case 'twentyfourteen':
				return [
					'nav_menu_toggle' => [
						'nav_container_id'           => 'primary-navigation',
						'nav_container_toggle_class' => 'toggled-on',
						'menu_button_xpath'          => '//header[ @id = "masthead" ]//button[ contains( @class, "menu-toggle" ) ]',
						'menu_button_toggle_class'   => '',
					],
				];

			case 'twentyfifteen':
				return [
					'nav_menu_toggle'   => [
						'nav_container_id'           => 'secondary',
						'nav_container_toggle_class' => 'toggled-on',
						'menu_button_xpath'          => '//header[ @id = "masthead" ]//button[ contains( @class, "secondary-toggle" ) ]',
						'menu_button_toggle_class'   => 'toggled-on',
					],
					'nav_menu_dropdown' => [
						'sub_menu_button_class'        => 'dropdown-toggle',
						'sub_menu_button_toggle_class' => 'toggle-on',
						'expand_text '                 => __( 'expand child menu', 'twentyfifteen' ),
						'collapse_text'                => __( 'collapse child menu', 'twentyfifteen' ),
					],
				];

			case 'twentysixteen':
				return [
					'nav_menu_toggle'   => [
						'nav_container_id'           => 'site-header-menu',
						'nav_container_toggle_class' => 'toggled-on',
						'menu_button_xpath'          => '//header[@id = "masthead"]//button[ @id = "menu-toggle" ]',
						'menu_button_toggle_class'   => 'toggled-on',
					],
					'nav_menu_dropdown' => [
						'sub_menu_button_class'        => 'dropdown-toggle',
						'sub_menu_button_toggle_class' => 'toggled-on',
						'expand_text '                 => __( 'expand child menu', 'twentysixteen' ),
						'collapse_text'                => __( 'collapse child menu', 'twentysixteen' ),
					],
				];

			case 'twentyseventeen':
				$config = [
					'nav_menu_toggle'   => [
						'nav_container_id'           => 'site-navigation',
						'nav_container_toggle_class' => 'toggled-on',
						'menu_button_xpath'          => '//nav[@id = "site-navigation"]//button[ contains( @class, "menu-toggle" ) ]',
						'menu_button_toggle_class'   => 'toggled-on',
					],
					'nav_menu_dropdown' => [
						'sub_menu_button_class'        => 'dropdown-toggle',
						'sub_menu_button_toggle_class' => 'toggled-on',
						'expand_text '                 => __( 'expand child menu', 'twentyseventeen' ),
						'collapse_text'                => __( 'collapse child menu', 'twentyseventeen' ),
					],
				];

				if ( function_exists( 'twentyseventeen_get_svg' ) ) {
					$config['nav_menu_dropdown']['icon'] = twentyseventeen_get_svg(
						[
							'icon'     => 'angle-down',
							'fallback' => true,
						]
					);
				}

				return $config;
		}
		// phpcs:enable WordPress.WP.I18n.TextDomainMismatch

		return [];
	}

	/**
	 * Get theme config.
	 *
	 * @since 1.0
	 * @codeCoverageIgnore
	 * @deprecated 1.1
	 *
	 * @param string $theme Theme slug.
	 * @return array Class names.
	 */
	protected static function get_theme_config( $theme ) {
		_deprecated_function( __METHOD__, '1.1' );

		$args = self::get_theme_support_args( $theme );

		// This returns arguments in a backward-compatible way.
		return array_merge( $args['nav_menu_toggle'], $args['nav_menu_dropdown'] );
	}

	/**
	 * Find theme features for core theme.
	 *
	 * @since 1.0
	 *
	 * @param array $args   Args.
	 * @param bool  $static Static. that is, whether should run during output buffering.
	 * @return array Theme features.
	 */
	protected static function get_theme_features( $args, $static = false ) {
		$theme_features   = [];
		$theme_candidates = wp_array_slice_assoc( $args, [ 'stylesheet', 'template' ] );
		foreach ( $theme_candidates as $theme_candidate ) {
			if ( in_array( $theme_candidate, self::$supported_themes, true ) ) {
				$theme_features = self::get_theme_features_config( $theme_candidate, $args );
				break;
			}
		}

		// Allow specific theme features to be requested even if the theme is not in core.
		if ( isset( $args['theme_features'] ) ) {
			$theme_features = array_merge( $args['theme_features'], $theme_features );
		}

		$final_theme_features = [];
		foreach ( $theme_features as $theme_feature => $feature_args ) {
			if ( ! method_exists( __CLASS__, $theme_feature ) ) {
				continue;
			}
			try {
				$reflection = new ReflectionMethod( __CLASS__, $theme_feature );
				if ( $reflection->isStatic() === $static ) {
					$final_theme_features[ $theme_feature ] = $feature_args;
				}
			} catch ( Exception $e ) {
				unset( $e );
			}
		}
		return $final_theme_features;
	}

	/**
	 * Add filters to manipulate output during output buffering before the DOM is constructed.
	 *
	 * @since 1.0
	 *
	 * @param array $args Args.
	 */
	public static function add_buffering_hooks( $args = [] ) {
		$theme_features = self::get_theme_features( $args, true );
		foreach ( $theme_features as $theme_feature => $feature_args ) {
			if ( method_exists( __CLASS__, $theme_feature ) ) {
				call_user_func( [ __CLASS__, $theme_feature ], $feature_args );
			}
		}
	}

	/**
	 * Add filter to output the quote icons in front of the article content.
	 *
	 * This is only used in Twenty Seventeen.
	 *
	 * @since 1.0
	 * @link https://github.com/WordPress/wordpress-develop/blob/f4580c122b7d0d2d66d22f806c6fe6e11023c6f0/src/wp-content/themes/twentyseventeen/assets/js/global.js#L105-L108
	 */
	public static function set_twentyseventeen_quotes_icon() {
		add_filter(
			'the_content',
			static function ( $content ) {

				// Why isn't Twenty Seventeen doing this to begin with? Why is it using JS to add the quote icon?
				if ( function_exists( 'twentyseventeen_get_svg' ) && 'quote' === get_post_format() ) {
					$icon    = twentyseventeen_get_svg( [ 'icon' => 'quote-right' ] );
					$content = preg_replace( '#(<blockquote.*?>)#s', '$1' . $icon, $content );
				}

				return $content;
			}
		);
	}

	/**
	 * Add filter to adjust the attachment image attributes to ensure attachment pages have a consistent <amp-img> rendering.
	 *
	 * This is only used in Twenty Seventeen.
	 *
	 * @since 1.0
	 * @link https://github.com/WordPress/wordpress-develop/blob/ddc8f803c6e99118998191fd2ea24124feb53659/src/wp-content/themes/twentyseventeen/functions.php#L545:L554
	 *
	 * @param array $args Args.
	 */
	public static function add_twentyseventeen_attachment_image_attributes( $args = [] ) {
		if ( ! empty( $args['native_img_used'] ) ) {
			return;
		}

		/*
		 * The max-height of the `.custom-logo-link img` is defined as being 80px, unless
		 * there is header media in which case it is 200px. Issues related to vertically-squashed
		 * images can be avoided if we just make sure that the image has this height to begin with.
		 */
		add_filter(
			'get_custom_logo',
			static function( $html ) {
				$src = wp_get_attachment_image_src( get_theme_mod( 'custom_logo' ), 'full' );
				if ( ! $src ) {
					return $html;
				}

				$img_width  = (int) $src[1];
				$img_height = (int) $src[2];

				// If height is zero, bail.
				if ( 0 === $img_height || 0 === $img_width ) {
					return $html;
				}

				if ( 'blank' === get_header_textcolor() && has_custom_header() ) {
					$height = 200;
				} else {
					$height = 80;
				}
				$width = $height * ( $img_width / $img_height ); // Note that float values are allowed.

				$html = preg_replace( '/(?<=width=")\d+(?=")/', $width, $html );
				$html = preg_replace( '/(?<=height=")\d+(?=")/', $height, $html );
				return $html;
			}
		);
	}

	/**
	 * Fix up core themes to do things in the AMP way.
	 *
	 * @since 1.0
	 */
	public function sanitize() {
		$theme_features = self::get_theme_features( $this->args, false );
		foreach ( $theme_features as $theme_feature => $feature_args ) {
			if ( method_exists( $this, $theme_feature ) ) {
				$this->$theme_feature( $feature_args );
			}
		}
	}

	/**
	 * Adds the data-ampdevmode attribute to the set of specified elements to prevent further sanitization. This is
	 * necessary as certain features in the Customizer require these elements to be present in their unaltered state.
	 *
	 * @param array $xpaths List of XPaths.
	 */
	public function prevent_sanitize_in_customizer_preview( $xpaths = [] ) {
		if ( ! is_customize_preview() ) {
			return;
		}

		// We can't use the `amp_dev_mode_element_xpaths` filter here as AMP_Dev_Mode_Sanitizer has already been
		// executed.
		foreach ( $xpaths as $xpath ) {
			foreach ( $this->dom->xpath->query( $xpath ) as $node ) {
				if ( $node instanceof DOMElement ) {
					$node->setAttribute( AMP_Rule_Spec::DEV_MODE_ATTRIBUTE, '' );
				}
			}
		}
	}

	/**
	 * Dequeue scripts.
	 *
	 * @since 1.0
	 *
	 * @param string[] $handles Handles, where each item value is the script handle.
	 */
	public static function dequeue_scripts( $handles = [] ) {
		add_action(
			'wp_enqueue_scripts',
			static function() use ( $handles ) {
				foreach ( $handles as $handle ) {
					wp_dequeue_script( $handle );
				}
			},
			PHP_INT_MAX
		);
	}

	/**
	 * Remove actions.
	 *
	 * @since 1.0
	 *
	 * @param array $actions Actions, with action name as key and value being callback.
	 */
	public static function remove_actions( $actions = [] ) {
		global $wp_filter;

		foreach ( $actions as $action => $callbacks ) {
			foreach ( $callbacks as $callback ) {
				$priority = has_action( $action, $callback );
				if ( false !== $priority ) {
					remove_action( $action, $callback, $priority );
					continue;
				}

				if ( ! is_array( $callback ) || 3 !== count( $callback ) ) {
					continue;
				}

				list( $class, $method, $priority ) = $callback;

				if ( isset( $wp_filter[ $action ]->callbacks[ $priority ] ) ) {
					foreach ( $wp_filter[ $action ]->callbacks[ $priority ] as $added_callback ) {
						if (
							is_array( $added_callback['function'] )
							&&
							isset( $added_callback['function'][0], $added_callback['function'][1] )
							&&
							is_object( $added_callback['function'][0] )
							&&
							is_string( $added_callback['function'][1] )
							&&
							$method === $added_callback['function'][1]
							&&
							get_class( $added_callback['function'][0] ) === $class
						) {
							remove_action( $action, $added_callback['function'] );
							return;
						}
					}
				}
			}
		}
	}

	/**
	 * Add smooth scrolling from link to target element.
	 *
	 * @since 1.0
	 *
	 * @param string[] $link_xpaths XPath queries to the links that should smooth scroll.
	 */
	public function add_smooth_scrolling( $link_xpaths ) {
		foreach ( $link_xpaths as $link_xpath ) {
			foreach ( $this->dom->xpath->query( $link_xpath ) as $link ) {
				if ( $link instanceof DOMElement && preg_match( '/#(.+)/', $link->getAttribute( Attribute::HREF ), $matches ) ) {
					$link->setAttribute( Attribute::ON, sprintf( 'tap:%s.scrollTo(duration=600)', $matches[1] ) );

					// Prevent browser from jumping immediately to the link target.
					$link->removeAttribute( Attribute::HREF );
					$link->setAttribute( Attribute::TABINDEX, '0' );
					$link->setAttribute( Attribute::ROLE, Role::BUTTON );
				}
			}
		}
	}

	/**
	 * Force SVG support, replacing no-svg class name with svg class name.
	 *
	 * @since 1.0
	 *
	 * @link https://github.com/WordPress/wordpress-develop/blob/1af1f65a21a1a697fb5f33027497f9e5ae638453/src/wp-content/themes/twentyseventeen/assets/js/global.js#L211-L213
	 * @link https://caniuse.com/#feat=svg
	 */
	public function force_svg_support() {
		$class = $this->dom->documentElement->getAttribute( 'class' );

		if ( $class ) {
			$count = 0;
			$class = preg_replace(
				'/(^|\s)no-svg(\s|$)/',
				' svg ',
				$class,
				-1,
				$count
			);

			if ( $count > 0 ) {
				$this->dom->documentElement->setAttribute( 'class', $class );
			}
		}
	}

	/**
	 * Force support for fixed background-attachment.
	 *
	 * @since 1.0
	 *
	 * @link https://github.com/WordPress/wordpress-develop/blob/1af1f65a21a1a697fb5f33027497f9e5ae638453/src/wp-content/themes/twentyseventeen/assets/js/global.js#L215-L217
	 * @link https://caniuse.com/#feat=background-attachment
	 */
	public function force_fixed_background_support() {
		$this->dom->documentElement->setAttribute(
			'class',
			$this->dom->documentElement->getAttribute( 'class' ) . ' background-fixed'
		);
	}

	/**
	 * Add body class when there is a header video.
	 *
	 * @since 1.0
	 * @link https://github.com/WordPress/wordpress-develop/blob/a26c24226c6b131a0ed22c722a836c100d3ba254/src/wp-content/themes/twentyseventeen/assets/js/global.js#L244-L247
	 *
	 * @param array $args Args.
	 */
	public static function add_has_header_video_body_class( $args = [] ) {
		$args = array_merge(
			[
				'class_name' => 'has-header-video',
			],
			$args
		);

		add_filter(
			'body_class',
			static function( $body_classes ) use ( $args ) {
				if ( has_header_video() ) {
					$body_classes[] = $args['class_name'];
				}
				return $body_classes;
			}
		);
	}

	/**
	 * Get the (common) navigation outer height.
	 *
	 * @todo If the nav menu has many items and it spans multiple rows, this will be too small.
	 * @link https://github.com/WordPress/wordpress-develop/blob/fd5ba80c5c3d9cf62348567073945e246285fbca/src/wp-content/themes/twentyseventeen/assets/js/global.js#L50
	 *
	 * @return int Navigation outer height.
	 */
	protected static function get_twentyseventeen_navigation_outer_height() {
		return 72;
	}

	/**
	 * Add required styles for featured image header in Twenty Twenty.
	 *
	 * @param array $args Args.
	 */
	public static function add_twentytwenty_masthead_styles( $args = [] ) {
		if ( ! empty( $args['native_img_used'] ) ) {
			return;
		}

		// @todo This was introduced in <https://github.com/ampproject/amp-wp/commit/e1c7462> but it doesn't seem to have any effect.
		add_action(
			'wp_enqueue_scripts',
			static function() {
				ob_start();
				?>
				<style>
				.featured-media amp-img {
					position: static;
				}
				</style>
				<?php
				$styles = str_replace( [ '<style>', '</style>' ], '', ob_get_clean() );
				wp_add_inline_style( get_template() . '-style', $styles );
			},
			11
		);
	}

	/**
	 * Fix display of Custom Logo in Twenty Twenty.
	 *
	 * This is required because width:auto on the site-logo amp-img does not preserve the proportional width in the same
	 * way as the same styles applied to an img.
	 *
	 * @since 1.5
	 * @link https://github.com/ampproject/amp-wp/issues/4418
	 * @link https://codepen.io/westonruter/pen/rNVqadv
	 *
	 * @param array $args Args.
	 */
	public static function add_twentytwenty_custom_logo_fix( $args = [] ) {
		if ( ! empty( $args['native_img_used'] ) ) {
			return;
		}

		$method = __METHOD__;
		add_filter(
			'get_custom_logo',
			static function( $html ) use ( $method ) {
				// Pattern sourced from AMP_Base_Embed_Handler::match_element_attributes().
				$pattern = sprintf(
					'/<img%s/',
					implode(
						'',
						array_map(
							function ( $attr_name ) {
								return sprintf( '(?=[^>]*?%1$s="(?P<%1$s>\d+)")?', preg_quote( $attr_name, '/' ) );
							},
							[ 'width', 'height' ]
						)
					)
				);

				preg_match( $pattern, $html, $matches );

				if ( isset( $matches['width'], $matches['height'] ) ) {
					$width  = (int) $matches['width'];
					$height = (int) $matches['height'];

					// If height is zero, bail.
					if ( 0 === $height || 0 === $width ) {
						return $html;
					}

					$desktop_height = 9; // in rem; see <https://github.com/WordPress/wordpress-develop/blob/ad8d01a7e9e13144d1676b8e6d70c3e81ef703af/src/wp-content/themes/twentytwenty/style.css#L4887>.
					$mobile_height  = 6; // in rem; see <https://github.com/WordPress/wordpress-develop/blob/ad8d01a7e9e13144d1676b8e6d70c3e81ef703af/src/wp-content/themes/twentytwenty/style.css#L1424>.

					$desktop_width = $desktop_height * ( $width / $height );
					$mobile_width  = $mobile_height * ( $width / $height );

					$html .= sprintf(
						'<style data-src="%s">.site-logo amp-img { width: %frem; } @media (min-width: 700px) { .site-logo amp-img { width: %frem; } }</style>',
						esc_attr( $method ),
						$mobile_width,
						$desktop_width
					);

				}
				return $html;
			},
			PHP_INT_MAX
		);
	}

	/**
	 * Add style rule with a selector of higher specificity than just `img` to make `amp-img` have `display:block` rather than `display:inline-block`.
	 *
	 * This is needed to override the AMP core stylesheet which has a more specific selector `.i-amphtml-layout-intrinsic` which
	 * is given a `display: inline-block`; this display value prevents margins from collapsing with surrounding block elements,
	 * resulting in larger margins in AMP than expected.
	 *
	 * @since 1.5
	 * @link https://github.com/ampproject/amp-wp/issues/4419
	 *
	 * @param array $args Args.
	 */
	public static function add_img_display_block_fix( $args = [] ) {
		if ( ! empty( $args['native_img_used'] ) ) {
			return;
		}

		$method = __METHOD__;
		// Note that wp_add_inline_style() is not used because this stylesheet needs to be added _before_ style.css so
		// that any subsequent style rules for images will continue to override.
		add_action(
			'wp_print_styles',
			static function() use ( $method ) {
				printf(
					'<style data-src="%s">%s</style>',
					esc_attr( $method ),
					// The selector is targeting an attribute that can never appear. It is purely present to increase specificity.
					'amp-img:not([_]) { display: block }'
				);
			}
		);
	}

	/**
	 * Add required styles for Twenty Seventeen header.
	 *
	 * This is required since JS is not applying the required styles at runtime.
	 *
	 * @since 1.0
	 */
	public static function add_twentyseventeen_masthead_styles() {
		add_action(
			'wp_enqueue_scripts',
			static function() {
				$is_front_page_layout = ( is_front_page() && 'posts' !== get_option( 'show_on_front' ) ) || ( is_home() && is_front_page() );
				ob_start();
				?>
				<style>
				.navigation-top.site-navigation-fixed {
					display: none;
				}

				/* This is needed by add_smooth_scrolling because it removes the [href] attribute. */
				.menu-scroll-down {
					cursor: pointer;
				}

				<?php if ( $is_front_page_layout && ! has_custom_header() ) : ?>
					/* https://github.com/WordPress/wordpress-develop/blob/fd5ba80c5c3d9cf62348567073945e246285fbca/src/wp-content/themes/twentyseventeen/assets/js/global.js#L92-L94 */
					.site-branding {
						margin-bottom: <?php echo (int) AMP_Core_Theme_Sanitizer::get_twentyseventeen_navigation_outer_height(); ?>px;
					}
				<?php endif; ?>

				@media screen and (min-width: 48em) {
					/* Note that adjustHeaderHeight() is irrelevant with this change */
					<?php if ( ! $is_front_page_layout ) : ?>
						.navigation-top {
							position: static;
						}
					<?php endif; ?>

					/* Initial styles that amp-animations for navigationTopShow and navigationTopHide will override */
					.navigation-top.site-navigation-fixed {
						opacity: 0;
						transform: translateY( -<?php echo (int) AMP_Core_Theme_Sanitizer::get_twentyseventeen_navigation_outer_height(); ?>px );
						display: block;
					}
				}
				</style>
				<?php
				$styles = str_replace( [ '<style>', '</style>' ], '', ob_get_clean() );
				wp_add_inline_style( get_template() . '-style', $styles );
			},
			11
		);
	}

	/**
	 * Add sticky nav menu to Twenty Seventeen.
	 *
	 * This is implemented by cloning the navigation-top element, giving it a fixed position outside of the viewport,
	 * and then showing it at the top of the window as soon as the original nav begins to get scrolled out of view.
	 * In order to improve accessibility, the cloned nav gets aria-hidden=true and all of the links get tabindex=-1
	 * to prevent the keyboard from focusing on elements off the screen; it is not necessary to focus on the elements
	 * in the fixed nav menu because as soon as the original nav menu is focused then the window is scrolled to the
	 * top anyway.
	 *
	 * @since 1.0
	 */
	public function add_twentyseventeen_sticky_nav_menu() {
		/**
		 * Top navigation element.
		 *
		 * @var DOMElement|null $navigation_top
		 */
		$navigation_top = $this->dom->xpath->query( '//header[ @id = "masthead" ]//div[ contains( @class, "navigation-top" ) ]' )->item( 0 );
		if ( ! $navigation_top ) {
			return;
		}

		/**
		 * Cloned top navigation element to put in fixed position.
		 *
		 * @var DOMElement $navigation_top_fixed
		 */
		$navigation_top_fixed = $navigation_top->cloneNode( true );
		$navigation_top_fixed->setAttribute( 'class', $navigation_top_fixed->getAttribute( 'class' ) . ' site-navigation-fixed' );

		$navigation_top_fixed->setAttribute( 'aria-hidden', 'true' );
		foreach ( $navigation_top_fixed->getElementsByTagName( 'a' ) as $link ) {
			/**
			 * Navigation link to add a tab index to.
			 *
			 * @var DOMElement $link
			 */
			$link->setAttribute( Attribute::TABINDEX, '-1' );
		}

		$navigation_top->parentNode->insertBefore( $navigation_top_fixed, $navigation_top->nextSibling );
		foreach ( $this->dom->xpath->query( './/*[ @id ]', $navigation_top_fixed ) as $element ) {
			/**
			 * Navigation element in the fixed navigation bar.
			 *
			 * @var DOMElement $element
			 */
			$element->setAttribute( 'id', $element->getAttribute( 'id' ) . '-fixed' );
		}

		$attributes = [
			'layout'              => 'nodisplay',
			'intersection-ratios' => 1,
			'on'                  => implode(
				';',
				[
					'exit:navigationTopShow.start',
					'enter:navigationTopHide.start',
				]
			),
		];
		if ( is_admin_bar_showing() ) {
			$attributes['viewport-margins'] = '32px 0';
		}
		$position_observer = AMP_DOM_Utils::create_node( $this->dom, 'amp-position-observer', $attributes );
		$navigation_top->appendChild( $position_observer );

		$animations = [
			'navigationTopShow' => [
				'duration'   => 0,
				'fill'       => 'both',
				'animations' => [
					'selector'  => '.navigation-top.site-navigation-fixed',
					'media'     => '(min-width: 48em)',
					'keyframes' => [
						'opacity'   => 1.0,
						'transform' => 'translateY( 0 )',
					],
				],
			],
			'navigationTopHide' => [
				'duration'   => 0,
				'fill'       => 'both',
				'animations' => [
					'selector'  => '.navigation-top.site-navigation-fixed',
					'media'     => '(min-width: 48em)',
					'keyframes' => [
						'opacity'   => 0.0,
						'transform' => sprintf( 'translateY( -%dpx )', self::get_twentyseventeen_navigation_outer_height() ),
					],
				],
			],
		];

		foreach ( $animations as $animation_id => $animation ) {
			$amp_animation   = AMP_DOM_Utils::create_node(
				$this->dom,
				'amp-animation',
				[
					'id'     => $animation_id,
					'layout' => 'nodisplay',
				]
			);
			$position_script = $this->dom->createElement( 'script' );
			$position_script->setAttribute( 'type', 'application/json' );
			$position_script->appendChild( $this->dom->createTextNode( wp_json_encode( $animation ) ) );
			$amp_animation->appendChild( $position_script );
			$this->dom->body->appendChild( $amp_animation );
		}
	}

	/**
	 * Add styles for the nav menu specifically to deal with AMP running in a no-js context.
	 *
	 * @since 1.0
	 *
	 * @param array $args Args.
	 */
	public static function add_nav_menu_styles( $args = [] ) {
		add_action(
			'wp_enqueue_scripts',
			static function() use ( $args ) {
				ob_start();
				?>
				<style>
				<?php if ( ! empty( $args['no_js_submenu_visible'] ) ) : ?>
					/* Override no-js selector in parent theme. */
					<?php
					$selector = is_string( $args['no_js_submenu_visible'] ) ? $args['no_js_submenu_visible'] : '.no-js .main-navigation ul ul';
					?>
					<?php echo esc_html( $selector ); ?> {
						display: none;
					}
				<?php endif; ?>

				<?php if ( ! empty( $args['sub_menu_button_toggle_class'] ) ) : ?>
					/* Use sibling selector and re-use class on button instead of toggling toggle-on class on ul.sub-menu */
					.main-navigation ul .<?php echo esc_html( $args['sub_menu_button_toggle_class'] ); ?> + .sub-menu {
						display: block;
					}
				<?php endif; ?>

				<?php if ( 'twentytwenty' === get_template() ) : ?>
					.cover-modal {
						display: inherit;
					}

					.menu-modal-inner {
						height: 100%;
					}

					.admin-bar .cover-modal {
						/* Use padding to shift down modal because amp-lightbox has top:0 !important. */
						padding-top: 32px;
					}

					@media (max-width: 782px) {
						.admin-bar .cover-modal {
							/* Use padding to shift down modal because amp-lightbox has top:0 !important. */
							padding-top: 46px;
						}
					}

					@media (max-width: 999px) {
						amp-lightbox.cover-modal.show-modal {
							display: unset;
						}
					}

				<?php elseif ( 'twentynineteen' === get_template() ) : ?>
					.amp-twentynineteen-main-navigation {
						max-width: 100vw;
						width: 100vw;
						height: 100vh;
					}
					.admin-bar .amp-twentynineteen-main-navigation {
						top: 46px;
						height: calc(100vh - 46px);
					}

					.amp-twentynineteen-main-navigation .sub-menu > li > a:hover,
					.amp-twentynineteen-main-navigation .sub-menu > li > a:focus,
					.amp-twentynineteen-main-navigation .sub-menu > li > .menu-item-link-return:hover,
					.amp-twentynineteen-main-navigation .sub-menu > li > .menu-item-link-return:focus {
						background: inherit;
					}

					.amp-twentynineteen-main-navigation .sub-menu > li {
						position: static;
						display: flex;
					}

					.amp-twentynineteen-main-navigation .sub-menu > li.menu-item-has-children .submenu-expand {
						position: static;
					}

					.amp-twentynineteen-main-navigation .sub-menu.expanded-true {
						display: table;
						margin-top: 0;
						opacity: 1;
						padding-left: 0;
						left: 0;
						top: 0;
						right: 0;
						bottom: 0;
						position: static;
						z-index: 100000; /* Make sure appears above mobile admin bar */
						width: 100vw;
						height: 100%;
						max-width: 100vw;
					}

					.amp-twentynineteen-main-navigation .sub-menu > li.mobile-parent-nav-menu-item {
						display: block;
					}

					.amp-twentynineteen-main-navigation .submenu-expand .svg-icon {
						<?php if ( is_rtl() ) : ?>
							transform: rotate(90deg);
						<?php else : ?>
							transform: rotate(270deg);
						<?php endif; ?>
					}

					.amp-twentynineteen-main-navigation .sub-menu > li > a,
					.amp-twentynineteen-main-navigation .sub-menu > li > .menu-item-link-return {
						flex-grow: 1;
						max-width: none;
					}

					.amp-twentynineteen-main-navigation .sub-menu > li > .menu-item-link-return .svg-icon {
						<?php if ( is_rtl() ) : ?>
							transform: rotate(180deg);
						<?php endif; ?>
					}

					.main-navigation .main-menu > li.menu-item-has-children > .submenu-expand.display-on-mobile,
					.display-on-mobile {
						display: none;
					}

					@media only screen and (max-width: 768px) {
						.display-on-mobile {
							display: block;
						}

						.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus-within > .sub-menu,
						.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):hover > .sub-menu,
						.main-navigation .main-menu .menu-item-has-children:not(.off-canvas):focus > .sub-menu,
						.main-navigation .main-menu > li.menu-item-has-children .submenu-expand.display-on-desktop,
						.display-on-desktop {
							display: none;
						}

						.main-navigation .main-menu > li.menu-item-has-children > .submenu-expand.display-on-mobile svg {
							position: relative;
							top: -2px;
							<?php if ( is_rtl() ) : ?>
								right: -2px;
							<?php else : ?>
								left: -2px;
							<?php endif; ?>
						}

						.main-navigation .main-menu > li.menu-item-has-children > .submenu-expand.display-on-mobile {
							display: inline-block;
							<?php if ( is_rtl() ) : ?>
								margin-left: 0.5rem;
								margin-right: 0.25rem;
							<?php else : ?>
								margin-left: 0.25rem;
								margin-right: 0.5rem;
							<?php endif; ?>
							background: #0073aa;
							color: #FFF;
							border-radius: 50%;
							width: 20px;
							height: 20px;
							vertical-align: middle;
						}
					}
				<?php elseif ( 'twentyseventeen' === get_template() ) : ?>
					/* Show the button*/
					.no-js .menu-toggle {
						display: block;
					}
					.no-js .main-navigation > div > ul {
						display: none;
					}
					.no-js .main-navigation.toggled-on > div > ul {
						display: block;
					}
					@media screen and (min-width: 48em) {
						.no-js .menu-toggle,
						.no-js .dropdown-toggle {
							display: none;
						}
						.no-js .main-navigation ul,
						.no-js .main-navigation ul ul,
						.no-js .main-navigation > div > ul {
							display: block;
						}
					}
				<?php elseif ( 'twentysixteen' === get_template() ) : ?>
					@media screen and (max-width: 56.875em) {
						/* Show the button*/
						.no-js .menu-toggle {
							display: block;
						}
						.no-js .site-header-menu {
							display: none;
						}
						.no-js .site-header-menu.toggled-on {
							display: block;
						}
					}
					@media screen and (min-width: 56.875em) {
						.no-js .main-navigation ul ul {
							display: block;
						}
					}
				<?php elseif ( 'twentyfifteen' === get_template() ) : ?>
					@media screen and (min-width: 59.6875em) {
						/* Attempt to emulate https://github.com/WordPress/wordpress-develop/blob/5e9a39baa7d4368f7d3c36dcbcd53db6317677c9/src/wp-content/themes/twentyfifteen/js/functions.js#L108-L149 */
						#sidebar {
							position: sticky;
							top: -9vh;
							max-height: 109vh;
							overflow-y: auto;
						}
					}

				<?php elseif ( 'twentythirteen' === get_template() ) : ?>
					@media (min-width: 644px) {
						.dropdown-toggle {
							display: none;
						}
					}
					@media (max-width: 643px) {
						.nav-menu .toggle-on + .sub-menu {
							clip: inherit;
							overflow: inherit;
							height: inherit;
							width: inherit;
						}
						/* Override :hover selector rules in theme which would cause submenu to persist open. */
						ul.nav-menu li:hover button:not( .toggle-on ) +  ul,
						.nav-menu ul li:hover button:not( .toggle-on ) +  ul {
							height: 1px;
							width: 1px;
							overflow: hidden;
							clip: rect(1px, 1px, 1px, 1px);
						}
						.menu-item-has-children {
							position: relative;
						}
						.dropdown-toggle {
							-moz-osx-font-smoothing: grayscale;
							-webkit-font-smoothing: antialiased;
							display: inline-block;
							font-size: 16px;
							font-style: normal;
							font-weight: normal;
							font-variant: normal;
							line-height: 1;
							text-align: center;
							text-decoration: inherit;
							text-transform: none;
							vertical-align: top;
							border: 0;
							box-sizing: content-box;
							content: "";
							height: 42px;
							padding: 0;
							background: transparent;
							width: 42px;
							position: absolute;
							top: 3px;
							<?php if ( is_rtl() ) : ?>
								left: 0;
							<?php else : ?>
								right: 0;
							<?php endif; ?>
						}
						.dropdown-toggle:active,
						.dropdown-toggle:focus,
						.dropdown-toggle:hover {
							padding: 0;
							border: 0;
							background: transparent;
						}
						.dropdown-toggle:after {
							color: #333;
							speak: none;
							font-family: "Genericons";
							content: "\f431";
							font-size: 24px;
							line-height: 42px;
							position: relative;
							top: 0;
							width: 42px;
							<?php if ( is_rtl() ) : ?>
								left: 1px;
							<?php else : ?>
								right: 1px;
							<?php endif; ?>
						}
						.dropdown-toggle.toggle-on:after {
							content: "\f432";
						}
						.dropdown-toggle:hover,
						.dropdown-toggle:focus {
							background-color: rgba(51, 51, 51, 0.1);

						.dropdown-toggle:focus {
							outline: 1px solid rgba(51, 51, 51, 0.3);
						}
					}
				<?php endif; ?>
				</style>
				<?php
				$styles = str_replace( [ '<style>', '</style>' ], '', ob_get_clean() );
				wp_add_inline_style( get_template() . '-style', $styles );
			},
			11
		);
	}

	/**
	 * Adjust images in twentynineteen.
	 *
	 * @since 1.1
	 */
	public static function adjust_twentynineteen_images() {

		// Make sure the featured image gets responsive layout.
		add_filter(
			'wp_get_attachment_image_attributes',
			static function( $attributes ) {
				if ( preg_match( '/(^|\s)(attachment-post-thumbnail)(\s|$)/', $attributes['class'] ) ) {
					$attributes['data-amp-layout'] = 'responsive';
				}
				return $attributes;
			}
		);
	}

	/**
	 * Add styles for Twenty Fourteen masthead.
	 *
	 * @since 1.1
	 */
	public static function add_twentyfourteen_masthead_styles() {
		add_action(
			'wp_enqueue_scripts',
			static function() {
				ob_start();
				?>
				<style>
					/* Styles for featured content */
					.grid #featured-content .post-thumbnail,
					.slider #featured-content .post-thumbnail {
						padding-top: 0; /* Override responsive hack which is handled by AMP layout. */
						overflow: visible;
					}
					.featured-content .post-thumbnail .wp-post-image {
						position: static;
						left: auto;
						top: auto;
					}
					.slider #featured-content .hentry {
						display: block;
					}

					/*
					 * The following are needed because clicking on the :before pseudo element does not trigger a tap event.
					 * So instead of positioning the screen reader text off screen, we just position it to cover cover the
					 * toggle button entirely, with a zero opacity.
					 */
					.search-toggle {
						position: relative;
					}
					.search-toggle > a.screen-reader-text {
						left: 0;
						top: 0;
						right: 0;
						bottom: 0;
						width: auto;
						height: auto;
						clip: unset;
						opacity: 0;
					}

					<?php if ( 'slider' === get_theme_mod( 'featured_content_layout' ) ) : ?>

						/*
						 * Styles for slider carousel.
						 */
						.featured-content-inner > amp-carousel {
							position: relative;
						}
						body.slider amp-carousel > .amp-carousel-button {
							-webkit-font-smoothing: antialiased;
							background-color: black;
							background-image: none;
							border-radius: 0;
							border-color: #fff;
							border-style: solid;
							border-width: 2px 1px 0 0;
							box-sizing: border-box;
							cursor: pointer;
							display: inline-block;
							font: normal 16px/1 Genericons;
							height: 48px;
							left: auto;
							opacity: 1;
							text-align: center;
							text-decoration: inherit;
							top: auto;
							width: 50%;
							transform: none;
						}
						body.slider amp-carousel > .amp-carousel-button:focus {
							outline: white thin dotted;
						}
						body.slider amp-carousel > .amp-carousel-button:hover {
							background-color: #24890d;
							outline: none;
						}
						body.slider amp-carousel > .amp-carousel-button-prev:before {
							color: #fff;
							content: "\f430";
							font-size: 32px;
							line-height: 46px;
						}
						body.slider amp-carousel > .amp-carousel-button-next:before {
							color: #fff;
							content: "\f429";
							font-size: 32px;
							line-height: 46px;
						}
						.featured-content .post-thumbnail .wp-post-image {
							object-fit: cover;
							object-position: top;
						}

						@media screen and (max-width: 672px) {
							.slider-control-paging {
								float: none;
								margin: 0;
							}
							.featured-content .post-thumbnail .wp-post-image {
								height: 55.49132947vw;
							}
							.slider-control-paging li {
								display: inline-block;
								float: none;
							}
						}
						@media screen and (min-width: 673px) {
							body.slider amp-carousel > .amp-carousel-button {
								width: 48px;
								border: 0;
								bottom: 0;
							}
							body.slider amp-carousel > .amp-carousel-button-prev {
								right: 50px;
							}
							body.slider amp-carousel > .amp-carousel-button-next {
								right: 0;
							}
						}

					<?php endif; ?>
				</style>
				<?php
				$css = str_replace( [ '<style>', '</style>' ], '', ob_get_clean() );

				wp_add_inline_style( 'twentyfourteen-style', $css );
			},
			11
		);
	}

	/**
	 * Add amp-carousel for slider in Twenty Fourteen.
	 *
	 * @since 1.1
	 */
	public function add_twentyfourteen_slider_carousel() {
		if ( 'slider' !== get_theme_mod( 'featured_content_layout' ) ) {
			return;
		}

		$featured_content = $this->dom->getElementById( 'featured-content' );
		if ( ! $featured_content ) {
			return;
		}

		$featured_content_inner = $this->dom->xpath->query( './div[ @class = "featured-content-inner" ]', $featured_content )->item( 0 );
		if ( ! $featured_content_inner ) {
			return;
		}

		$selected_slide_default  = 0;
		$selected_slide_state_id = 'twentyFourteenSelectedSlide';

		// Create the slider state.
		$amp_state = $this->dom->createElement( 'amp-state' );
		$amp_state->setAttribute( 'id', $selected_slide_state_id );
		$script = $this->dom->createElement( 'script' );
		$script->setAttribute( 'type', 'application/json' );
		$script->appendChild( $this->dom->createTextNode( wp_json_encode( $selected_slide_default ) ) );
		$amp_state->appendChild( $script );
		$featured_content->appendChild( $amp_state );

		// Create the carousel slider.
		$amp_carousel_desktop_id = 'twentyFourteenSliderDesktop';
		$amp_carousel_mobile_id  = 'twentyFourteenSliderMobile';
		$amp_carousel_attributes = [
			'layout'                             => 'responsive',
			'on'                                 => "slideChange:AMP.setState( { $selected_slide_state_id: event.index } )",
			'width'                              => '100',
			'type'                               => 'slides',
			'loop'                               => '',
			Amp::BIND_DATA_ATTR_PREFIX . 'slide' => $selected_slide_state_id,
		];
		$amp_carousel_desktop    = AMP_DOM_Utils::create_node(
			$this->dom,
			'amp-carousel',
			array_merge(
				$amp_carousel_attributes,
				[
					'id'     => $amp_carousel_desktop_id,
					'media'  => '(min-width: 672px)',
					'height' => '55.49132947', // Value comes from <https://github.com/WordPress/wordpress-develop/blob/fc2a8f0e11316d066a686995b8578d82cd5546cf/src/wp-content/themes/twentyfourteen/style.css#L3024>.
				]
			)
		);
		$amp_carousel_mobile     = AMP_DOM_Utils::create_node(
			$this->dom,
			'amp-carousel',
			array_merge(
				$amp_carousel_attributes,
				[
					'id'     => $amp_carousel_mobile_id,
					'media'  => '(max-width: 672px)',
					'height' => '73',
				]
			)
		);

		while ( $featured_content_inner->firstChild ) {
			$node = $featured_content_inner->removeChild( $featured_content_inner->firstChild );
			$amp_carousel_desktop->appendChild( $node );
			$amp_carousel_mobile->appendChild( $node->cloneNode( true ) );
		}
		$featured_content_inner->appendChild( $amp_carousel_desktop );
		$featured_content_inner->appendChild( $amp_carousel_mobile );

		// Create the selector.
		$amp_selector = $this->dom->createElement( 'amp-selector' );
		$amp_selector->setAttribute( 'layout', 'container' );
		$slider_control_nav = $this->dom->createElement( 'ol' );
		$slider_control_nav->setAttribute( 'class', 'slider-control-nav slider-control-paging' );
		$count = $amp_carousel_desktop->getElementsByTagName( 'article' )->length;
		for ( $i = 0; $i < $count; $i++ ) {
			$li = $this->dom->createElement( 'li' );
			$a  = $this->dom->createElement( 'a' );
			if ( $selected_slide_default === $i ) {
				$li->setAttribute( 'selected', '' );
				$a->setAttribute( 'class', 'slider-active' );
			}
			$a->setAttribute( Amp::BIND_DATA_ATTR_PREFIX . 'class', "$selected_slide_state_id == $i ? 'slider-active' : ''" );
			$a->setAttribute( Attribute::ROLE, Role::BUTTON );
			$a->setAttribute( Attribute::ON, "tap:AMP.setState( { $selected_slide_state_id: $i } )" );
			$li->setAttribute( 'option', (string) $i );
			$a->appendChild( $this->dom->createTextNode( $i + 1 ) );
			$li->appendChild( $a );
			$slider_control_nav->appendChild( $li );
		}
		$amp_selector->appendChild( $slider_control_nav );
		$featured_content->appendChild( $amp_selector );
	}

	/**
	 * Use AMP-based solutions for toggling search bar in Twenty Fourteen.
	 *
	 * @link https://github.com/WordPress/wordpress-develop/blob/fc2a8f0e11316d066a686995b8578d82cd5546cf/src/wp-content/themes/twentyfourteen/js/functions.js#L69-L87
	 */
	public function add_twentyfourteen_search() {
		$search_toggle_div  = $this->dom->xpath->query( '//div[ contains( @class, "search-toggle" ) ]' )->item( 0 );
		$search_toggle_link = $this->dom->xpath->query( './a', $search_toggle_div )->item( 0 );
		$search_container   = $this->dom->getElementById( 'search-container' );
		if (
			! $search_toggle_div instanceof DOMElement
			|| ! $search_toggle_link instanceof DOMElement
			|| ! $search_container instanceof DOMElement
		) {
			return;
		}

		// Create the <amp-state> element that contains whether the search bar is shown.
		$amp_state       = $this->dom->createElement( 'amp-state' );
		$hidden_state_id = 'twentyfourteenSearchHidden';
		$hidden          = true;
		$amp_state->setAttribute( 'id', $hidden_state_id );
		$script = $this->dom->createElement( 'script' );
		$script->setAttribute( 'type', 'application/json' );
		$script->appendChild( $this->dom->createTextNode( wp_json_encode( $hidden ) ) );
		$amp_state->appendChild( $script );
		$search_container->appendChild( $amp_state );

		// Update AMP state to show the search bar and focus on search input when tapping on the search button.
		$search_input_id = 'twentyfourteen_search_input';
		$search_input_el = $this->dom->xpath->query( './/input[ @name = "s" ]', $search_container )->item( 0 );
		$search_toggle_link->removeAttribute( 'href' );
		$on = "tap:AMP.setState( { $hidden_state_id: ! $hidden_state_id } )";
		if ( $search_input_el instanceof DOMElement ) {
			$search_input_el->setAttribute( 'id', $search_input_id );
			$on .= ",$search_input_id.focus()";
		}
		$search_toggle_link->setAttribute( Attribute::ON, $on );
		$search_toggle_link->setAttribute( Attribute::TABINDEX, '0' );
		$search_toggle_link->setAttribute( Attribute::ROLE, Role::BUTTON );

		// Set visibility and aria-expanded based of the link based on whether the search bar is expanded.
		$search_toggle_link->setAttribute( 'aria-expanded', wp_json_encode( $hidden ) );
		$search_toggle_link->setAttribute( Amp::BIND_DATA_ATTR_PREFIX . 'aria-expanded', "$hidden_state_id ? 'false' : 'true'" );
		$search_toggle_div->setAttribute( Amp::BIND_DATA_ATTR_PREFIX . 'class', "$hidden_state_id ? 'search-toggle' : 'search-toggle active'" );
		$search_container->setAttribute( Amp::BIND_DATA_ATTR_PREFIX . 'class', "$hidden_state_id ? 'search-box-wrapper hide' : 'search-box-wrapper'" );
	}

	/**
	 * Wrap a modal node tree in an <amp-lightbox> element.
	 *
	 * @param array $args {
	 *     Associative array of arguments.
	 *
	 *     @type string   $modal_id            ID to use for the modal and its associated buttons.
	 *     @type string   $modal_content_xpath XPath to query the contents of the modal.
	 *     @type string[] $open_button_xpath   Array of XPaths to query the buttons that open the modal.
	 *     @type string[] $close_button_xpath  Array of XPaths to query the buttons that close the modal. These should be contained within the modal.
	 *     @type string   $animate_in          Optional. What animation to use for showing the modal. Valid options are: 'fade-in', 'fly-in-bottom', 'fly-in-top'. Defaults to 'fade-in'.
	 *     @type bool     $scrollable          Optional. Whether the inner content of the modal should be scrollable. Defaults to true.
	 * }
	 */
	public function wrap_modal_in_lightbox( $args = [] ) {
		if ( ! isset( $args['modal_id'], $args['modal_content_xpath'], $args['open_button_xpath'], $args['close_button_xpath'] ) ) {
			return;
		}

		$modal_id           = $args['modal_id'];
		$modal_content_node = $this->dom->xpath->query( $args['modal_content_xpath'] )->item( 0 );

		if ( ! is_string( $modal_id ) || ! $modal_content_node instanceof DOMElement ) {
			return;
		}

		$body_id = $this->dom->getElementId( $this->dom->body, 'body' );

		$open_xpaths  = $args['open_button_xpath'];
		$close_xpaths = $args['close_button_xpath'];

		$modal_actions = [
			"{$modal_id}.open"  => $open_xpaths,
			// Although we add the 'show-modal' class here, we don't remove it again, as it will
			// _first_ remove the correct positioning and only _then_ start the fade-out animation.
			// See: https://youtu.be/aooq-liRtMs .
			"{$modal_id}.toggleClass(class=show-modal,force=true)" => $open_xpaths,
			"{$body_id}.toggleClass(class=showing-modal,force=true)" => $open_xpaths,
			"{$modal_id}.close" => $close_xpaths,
			"{$body_id}.toggleClass(class=showing-modal,force=false)" => $close_xpaths,
		];

		// As we have the toggle targets, we need to go backwards from their and find all
		// nodes that are meant to toggle these targets.
		// The triple loop below is generally a double loop (modals x toggles), however
		// we need the third loop as we cannot guarantee that each xpath will only ever
		// retrieve a single result.
		foreach ( $modal_actions as $modal_action => $toggle_xpaths ) {
			foreach ( $toggle_xpaths as $toggle_xpath ) {
				foreach ( $this->dom->xpath->query( $toggle_xpath ) as $toggle_node ) {
					if ( $toggle_node instanceof DOMElement ) {
						AMP_DOM_Utils::add_amp_action( $toggle_node, 'tap', $modal_action );
					}
				}
			}
		}

		// Make sure lightboxes are marked as inactive and not expanded when they are closed via the Escape key.
		$state_string = str_replace( '-', '_', $modal_id );
		AMP_DOM_Utils::add_amp_action( $modal_content_node, 'lightboxOpen', "{$modal_id}.toggleClass(class=active,force=true)" );
		AMP_DOM_Utils::add_amp_action( $modal_content_node, 'lightboxOpen', "AMP.setState({{$state_string}:true})" );
		AMP_DOM_Utils::add_amp_action( $modal_content_node, 'lightboxClose', "{$modal_id}.toggleClass(class=active,force=false)" );
		AMP_DOM_Utils::add_amp_action( $modal_content_node, 'lightboxClose', "AMP.setState({{$state_string}:false})" );

		// Create an <amp-lightbox> element that will contain the modal.
		$amp_lightbox = $this->dom->createElement( 'amp-lightbox' );
		$amp_lightbox->setAttribute( 'id', $modal_id );
		$amp_lightbox->setAttribute( 'layout', 'nodisplay' );
		$amp_lightbox->setAttribute( 'animate-in', isset( $args['animate_in'] ) ? $args['animate_in'] : 'fade-in' );
		$amp_lightbox->setAttribute( 'scrollable', isset( $args['scrollable'] ) ? $args['scrollable'] : true );

		$amp_lightbox_inner_content = $this->dom->xpath->query( ".//*[ @class and contains( concat( ' ', normalize-space( @class ), ' ' ), ' modal-inner ' ) ]", $modal_content_node )->item( 0 );
		foreach ( [ $amp_lightbox, $amp_lightbox_inner_content ] as $event_element ) {
			/**
			 * Event element to add accessibility attributes to.
			 *
			 * @var DOMElement $event_element
			 */
			$event_element->setAttribute( Attribute::ROLE, $this->guess_modal_role( $modal_content_node ) );
			// Setting tabindex to -1 (not reachable) as keyboard focus is handled through toggles.
			$event_element->setAttribute( Attribute::TABINDEX, -1 );
		}

		$parent_node = $modal_content_node->parentNode;
		$parent_node->replaceChild( $amp_lightbox, $modal_content_node );

		$strip_wrapper_levels = isset( $args['strip_wrapper_levels'] ) ? $args['strip_wrapper_levels'] : 0;

		while ( $strip_wrapper_levels > 0 ) {
			$children = [];
			foreach ( $modal_content_node->childNodes as $child_node ) {
				if ( $child_node instanceof DOMElement ) {
					$children[] = $child_node;
				}
			}

			if ( count( $children ) > 1 ) {
				break;
			}

			// Add class(es) and action(s) of removed wrapper to lightbox to avoid breaking CSS selectors.
			AMP_DOM_Utils::copy_attributes( [ 'class', 'on', 'data-toggle-target' ], $modal_content_node, $amp_lightbox );

			$modal_content_node = $modal_content_node->removeChild( $children[0] );

			$strip_wrapper_levels--;
		}

		$amp_lightbox->appendChild( $modal_content_node );
	}

	/**
	 * Add generic modal interactivity compat for the Twenty Twenty theme.
	 *
	 * Modals implemented in JS will be transformed into <amp-lightbox> equivalents,
	 * with the tap actions being attached to their associated toggles.
	 */
	public function add_twentytwenty_modals() {
		$modals = $this->dom->xpath->query( "//*[ @class and contains( concat( ' ', normalize-space( @class ), ' ' ), ' cover-modal ' ) ]" );

		if ( false === $modals || 0 === $modals->length ) {
			return;
		}

		foreach ( $modals as $modal ) {
			/**
			 * Modal element to transform.
			 *
			 * @var DOMElement $modal
			 */

			if ( ! $modal->hasAttribute( 'data-modal-target-string' ) ) {
				return;
			}

			$modal_target = $modal->getAttribute( 'data-modal-target-string' );
			$toggles      = $this->dom->xpath->query( "//*[ @data-toggle-target = '{$modal_target}' ]" );

			$open_button_xpaths  = [];
			$close_button_xpaths = [];
			foreach ( $toggles as $toggle ) {
				/**
				 * Toggle element to transform.
				 *
				 * @var DOMElement $toggle
				 */

				$within_modal = false;
				$parent       = $toggle->parentNode;
				while ( $parent ) {
					if ( $parent === $modal ) {
						$within_modal = true;
						break;
					}
					$parent = $parent->parentNode;
				}

				if ( $within_modal ) {
					$close_button_xpaths[] = $toggle->getNodePath();
				} else {
					$open_button_xpaths[] = $toggle->getNodePath();
				}
			}

			$modal_id = $this->dom->getElementId( $modal );

			// Add the lightbox itself as a close button xpath as well.
			// With twentytwenty compat, the lightbox fills the entire screen, and only an inner wrapper will contain
			// the actionable elements in the modal. Therefore, the lightbox represents the "background".
			$close_button_xpaths[] = "//*[ @id = '{$modal_id}' ]";

			// Ensure anchor links also close the modal the same as the the Close Menu button.
			$close_button_xpaths[] = sprintf( "//*[ @id = '{$modal_id}' ]//a[ @href and contains( @href, '#' ) ]" );

			// Then, add the inner element of the lightbox as an open button xpath.
			// This is done to prevent the above close action from closing the modal when an inner element is clicked.
			// Workaround found here: https://stackoverflow.com/a/45971501 .
			$open_button_xpaths[] = "//*[ @id = '{$modal_id}' ]//*[ @class and contains( concat( ' ', normalize-space( @class ), ' ' ), ' modal-inner ' ) ]";

			$this->wrap_modal_in_lightbox(
				[
					'modal_id'             => $modal_id,
					'modal_content_xpath'  => $modal->getNodePath(),
					'open_button_xpath'    => $open_button_xpaths,
					'close_button_xpath'   => $close_button_xpaths,
					'strip_wrapper_levels' => 1,
				]
			);
		}
	}

	/**
	 * Add generic toggle interactivity compat for the Twentytwenty theme.
	 *
	 * Toggles implemented in JS will be transformed into <amp-bind> equivalents,
	 * with <amp-state> components storing the CSS classes to set.
	 */
	public function add_twentytwenty_toggles() {
		$toggles = $this->dom->xpath->query( '//*[ @data-toggle-target ]' );
		$body_id = $this->dom->getElementId( $this->dom->body, 'body' );

		if ( false === $toggles || 0 === $toggles->length ) {
			return;
		}

		/**
		 * Toggle to transform.
		 *
		 * @var DOMElement $toggle
		 */
		foreach ( $toggles as $toggle ) {
			$toggle_target = $toggle->getAttribute( 'data-toggle-target' );
			$toggle_id     = $this->dom->getElementId( $toggle );

			if ( 'next' === $toggle_target ) {
				$target_node = $toggle->nextSibling;
			} else {
				$target_xpath = $this->xpath_from_css_selector( $toggle_target );
				if ( null === $target_xpath ) {
					continue;
				}

				$target_nodes = $this->dom->xpath->query( $target_xpath, $toggle );
				if ( false === $target_nodes || 0 === count( $target_nodes ) ) {
					continue;
				}
				$target_node = $target_nodes->item( 0 );
			}

			if ( ! $target_node instanceof DOMElement ) {
				continue;
			}

			// Get the class to toggle, if specified.
			$toggle_class = $toggle->hasAttribute( 'data-class-to-toggle' ) ? $toggle->getAttribute( 'data-class-to-toggle' ) : 'active';

			$is_sub_menu     = AMP_DOM_Utils::has_class( $target_node, 'sub-menu' );
			$new_target_node = $is_sub_menu ? $this->get_closest_submenu( $toggle ) : $target_node;
			$new_target_id   = $this->dom->getElementId( $new_target_node );

			$state_string = str_replace( '-', '_', $new_target_id );

			// Toggle the target of the clicked toggle.
			AMP_DOM_Utils::add_amp_action( $toggle, 'tap', "{$new_target_id}.toggleClass(class='{$toggle_class}')" );
			// Set the central state of the toggle's target.
			AMP_DOM_Utils::add_amp_action( $toggle, 'tap', "AMP.setState({{$state_string}: !{$state_string}})" );
			// Adapt the aria-expanded attribute according to the central state.
			$toggle->setAttribute( 'data-amp-bind-aria-expanded', "{$state_string} ? 'true' : 'false'" );

			// If the toggle target is 'next' or a sub-menu, only give the clicked toggle the active class.
			if ( 'next' === $toggle_target || AMP_DOM_Utils::has_class( $target_node, 'sub-menu' ) ) {
				AMP_DOM_Utils::add_amp_action( $toggle, 'tap', "{$toggle_id}.toggleClass(class='active')" );
			} else {
				// If not, toggle all toggles with this toggle target.
				$target_toggles = $this->dom->xpath->query( "//*[ @data-toggle-target = '{$toggle_target}' ]" );
				foreach ( $target_toggles as $target_toggle ) {
					if ( AMP_DOM_Utils::has_class( $target_toggle, 'close-nav-toggle' ) ) {
						// Skip adding the 'active' class on the "Close" button in the primary nav menu.
						continue;
					}
					$target_toggle_id = $this->dom->getElementId( $target_toggle );
					AMP_DOM_Utils::add_amp_action( $toggle, 'tap', "{$target_toggle_id}.toggleClass(class='active')" );
				}
			}

			// Toggle body class.
			if ( $toggle->hasAttribute( 'data-toggle-body-class' ) ) {
				$body_class = $toggle->getAttribute( 'data-toggle-body-class' );
				AMP_DOM_Utils::add_amp_action( $toggle, 'tap', "{$body_id}.toggleClass(class='{$body_class}')" );
			}

			if ( $toggle->hasAttribute( 'data-set-focus' ) ) {
				$focus_selector = $toggle->getAttribute( 'data-set-focus' );

				if ( ! empty( $focus_selector ) ) {
					$focus_xpath   = $this->xpath_from_css_selector( $focus_selector );
					$focus_element = $this->dom->xpath->query( $focus_xpath )->item( 0 );

					if ( $focus_element instanceof DOMElement ) {
						$focus_element_id = $this->dom->getElementId( $focus_element );
						AMP_DOM_Utils::add_amp_action( $toggle, 'tap', "{$focus_element_id}.focus" );
					}
				}
			}
		}
	}

	/**
	 * Amend the Twenty Twenty-One dark mode stylesheet to only apply the relevant rules when the user has enables
	 * dark mode support from the customizer options.
	 */
	public static function amend_twentytwentyone_dark_mode_styles() {
		add_action(
			'wp_enqueue_scripts',
			static function() {
				$theme_style_handle     = 'twenty-twenty-one-style';
				$dark_mode_style_handle = 'tt1-dark-mode';

				// Bail if the dark mode stylesheet is not enqueued or the theme stylesheet isn't registered.
				if (
					! wp_style_is( $dark_mode_style_handle, 'enqueued' )
					||
					! wp_style_is( $theme_style_handle, 'registered' )
				) {
					return; // @codeCoverageIgnore
				}

				wp_dequeue_style( $dark_mode_style_handle );

				$dark_mode_css_file = get_theme_file_path(
					sprintf( 'assets/css/style-dark-mode%s.css', is_rtl() ? '-rtl' : '' )
				);

				if ( ! file_exists( $dark_mode_css_file ) ) {
					return; // @codeCoverageIgnore
				}

				$styles = file_get_contents( $dark_mode_css_file ); // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents

				// Allow for rules to override the light theme related rules.
				$styles = str_replace( '.respect-color-scheme-preference.is-dark-theme body', '.respect-color-scheme-preference body.is-dark-theme', $styles );

				wp_add_inline_style( $theme_style_handle, $styles );
			},
			11
		);
	}

	/**
	 * Amend Twenty Twenty-One Styles.
	 */
	public static function amend_twentytwentyone_styles() {
		add_action(
			'wp_enqueue_scripts',
			static function() {
				$style_handle = 'twenty-twenty-one-style';

				// Bail if the stylesheet is not enqueued.
				if ( ! wp_style_is( $style_handle ) ) {
					return; // @codeCoverageIgnore
				}

				$css_file = get_theme_file_path(
					sprintf( 'style%s.css', is_rtl() ? '-rtl' : '' )
				);

				if ( ! file_exists( $css_file ) ) {
					return; // @codeCoverageIgnore
				}

				/** @var _WP_Dependency $dependency */
				$dependency = wp_styles()->registered[ $style_handle ];

				// Set the registered handle as an alias for other stylesheets to depend on.
				$dependency->src = false;

				$styles = file_get_contents( $css_file ); //phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents

				// AMP provides a global API "AMP.toggleTheme()" to support dark theme by toggling a BODY element class.
				// However, for dark mode in the Twenty Twenty-One theme, the class needs to be toggled on HTML and BODY elements because the CSS variables are set at the root level.
				// In AMP we cannot toggle HTML classes. So here we are changing the location where CSS variables are defined from `:root` to the BODY element.
				if ( get_theme_mod( 'respect_user_color_preference', false ) ) {
					$styles = str_replace( ':root {', 'body {', $styles );
				}

				// Append extra rules needed for nav menus according to changes made to the document during sanitization.
				$styles .= '
					/* Trap keyboard navigation within mobile menu when it\'s open */
					@media only screen and (max-width: 481px) {
						.primary-navigation-open #page {
							visibility: hidden;
						}

						.primary-navigation-open .menu-button-container {
							visibility: visible;
						}
					}

					@media (min-width: 482px) {
						/* Show the sub-menu on hover of menu item */
						.primary-menu-container > .menu-wrapper > .menu-item-has-children:hover > .sub-menu {
							display: block;
						}

						/* Hide the plus icon on hover of menu item */
						.primary-menu-container > .menu-wrapper > .menu-item-has-children:hover > .sub-menu-toggle > .icon-plus {
							display: none;
						}

						/* Show the minus icon on hover of menu item */
						.primary-menu-container > .menu-wrapper > .menu-item-has-children:hover > .sub-menu-toggle > .icon-minus {
							display: flex;
						}
					}
				';

				/*
				 * In Twenty Twenty-One, when a button is used to resize AMP elements, they can appear transparent when hovered over.
				 * To resolve this issue, the theme's background color is used as the background color for the button
				 * when it is in the hovered state.
				 */
				$styles .= '
					button[overflow]:hover {
						background-color: var(--global--color-background);
					}
				';

				// Ideally wp_add_inline_style() would accept a $position argument like wp_add_inline_script() does, in
				// which case the following could be replaced with wp_add_inline_style( $style_handle, $new_styles, 'before' ).
				// But this is not supported, so we have to resort to manipulating the underlying after array.
				if ( ! isset( $dependency->extra['after'] ) ) {
					$dependency->extra['after'] = [];
				}
				array_unshift( $dependency->extra['after'], $styles );
			},
			11
		);
	}

	/**
	 * Make the dark mode toggle in the Twenty Twenty-One theme AMP compatible.
	 */
	public function add_twentytwentyone_dark_mode_toggle() {
		// First check if dark mode is enabled.
		$should_respect_color_scheme = get_theme_mod( 'respect_user_color_preference', false );

		if ( ! $should_respect_color_scheme ) {
			return;
		}

		// Create button element for dark mode toggle.
		// Dark mode toggle button html and js has been omitted due to removing `the_switch` function.
		$button = AMP_DOM_Utils::create_node(
			$this->dom,
			Tag::BUTTON,
			[
				Attribute::ID     => 'dark-mode-toggler',
				Attribute::CLASS_ => 'fixed-bottom',
			]
		);

		/* translators: %s: On/Off */
		$dark_mode_label = __( 'Dark Mode: %s', 'twentytwentyone' ); // phpcs:ignore WordPress.WP.I18n.TextDomainMismatch
		$dark_mode_off   = sprintf( $dark_mode_label, __( 'Off', 'twentytwentyone' ) ); // phpcs:ignore WordPress.WP.I18n.TextDomainMismatch
		$dark_mode_on    = sprintf( $dark_mode_label, __( 'On', 'twentytwentyone' ) ); // phpcs:ignore WordPress.WP.I18n.TextDomainMismatch

		// Create span tag to show `On` for dark mode.
		$button_text_on = $this->dom->createElement( Tag::SPAN );
		$button_text_on->setAttribute( Attribute::CLASS_, 'dark-mode-button-on' );
		$button_text_on->nodeValue = $dark_mode_on;

		// Create span tag to show `Off` for dark mode.
		$button_text_off = $this->dom->createElement( Tag::SPAN );
		$button_text_off->setAttribute( Attribute::CLASS_, 'dark-mode-button-off' );
		$button_text_off->nodeValue = $dark_mode_off;

		// Add button_text_{On, Off} to button.
		$button->appendChild( $button_text_on );
		$button->appendChild( $button_text_off );

		// Add button to body.
		$this->dom->body->appendChild( $button );

		$style = $this->dom->createElement( Tag::STYLE );
		$style->setAttribute( Attribute::ID, 'amp-twentytwentyone-dark-mode-toggle-styles' );
		$style->textContent = sprintf( // We need to add these styles to show On and Off to the user.
			'
				.no-js #dark-mode-toggler {
					display: block;
				}
				#dark-mode-toggler > span {
					margin-%s: 5px;
				}
				.dark-mode-button-on {
					display: none;
				}
				body.is-dark-theme .dark-mode-button-on {
					display: inline-block;
				}
				body.is-dark-theme .dark-mode-button-off {
					display: none;
				}
			',
			is_rtl() ? 'right' : 'left'
		);
		$this->dom->head->appendChild( $style );

		$toggle_class = 'is-dark-theme';

		// Add data-prefers-dark-mode-class in body to use toggleTheme component.
		$this->dom->body->setAttribute( 'data-prefers-dark-mode-class', $toggle_class );

		AMP_DOM_Utils::add_amp_action( $button, 'tap', 'AMP.toggleTheme()' );
	}

	/**
	 * Make the mobile menu for the Twenty Twenty-One theme AMP compatible.
	 */
	public function add_twentytwentyone_mobile_modal() {
		$menu_toggle = $this->dom->getElementById( 'primary-mobile-menu' );

		if ( ! $menu_toggle ) {
			return;
		}

		$state_string = 'mobile_menu_toggled';
		$body_id      = $this->dom->getElementId( $this->dom->body, 'body' );

		AMP_DOM_Utils::add_amp_action( $menu_toggle, 'tap', "AMP.setState({{$state_string}: !{$state_string}})" );
		AMP_DOM_Utils::add_amp_action( $menu_toggle, 'tap', "{$body_id}.toggleClass(class=primary-navigation-open)" );
		AMP_DOM_Utils::add_amp_action( $menu_toggle, 'tap', "{$body_id}.toggleClass(class=lock-scrolling)" );
		$menu_toggle->setAttribute( 'data-amp-bind-aria-expanded', "{$state_string} ? 'true' : 'false'" );

		// Close the mobile modal when clicking in-page anchor links in the menu.
		foreach ( $this->dom->xpath->query( '//*[ @id = "site-navigation" ]//a[ @href and contains( @href, "#" ) ]' ) as $link ) {
			/** @var DOMElement $link */
			AMP_DOM_Utils::add_amp_action( $link, 'tap', "AMP.setState({{$state_string}: false})" );
			AMP_DOM_Utils::add_amp_action( $link, 'tap', "{$body_id}.toggleClass(class=primary-navigation-open,force=false)" );
			AMP_DOM_Utils::add_amp_action( $link, 'tap', "{$body_id}.toggleClass(class=lock-scrolling,force=false)" );

			// Ensure target is scrolled into view. Note that in-page anchor links currently do not work in the non-AMP
			// version. Normally scrollTo shouldn't be necessary but it appears necessary due to scroll locking.
			$target = preg_replace( '/.*#/', '', $link->getAttribute( 'href' ) );
			if ( $target && $this->dom->getElementById( $target ) ) {
				AMP_DOM_Utils::add_amp_action( $link, 'tap', "{$target}.scrollTo" );
			}
		}
	}

	/**
	 * Make the sub-menu functionality for the Twenty Twenty-One theme AMP compatible.
	 *
	 * Note: Hover functionality is accomplished through CSS.
	 *
	 * @see amend_twentytwentyone_styles()
	 */
	public function add_twentytwentyone_sub_menu_fix() {
		$menu_toggles = $this->dom->xpath->query( '//nav//button[ @class and contains( concat( " ", normalize-space( @class ), " " ), " sub-menu-toggle " ) ]' );

		if ( 0 === $menu_toggles->length ) {
			return;
		}

		$menu_toggle_ids = substr_replace( range( 1, $menu_toggles->length ), 'toggle_', 0, 0 );

		// Sub-menus to be closed when the user clicks on the body.
		$toggles_to_disable_for_body = [];

		foreach ( $menu_toggle_ids as $key => $menu_toggle_id ) {
			/** @var DOMElement $menu_toggle */
			$menu_toggle = $menu_toggles->item( $key );

			$menu_toggle->setAttribute( 'data-amp-bind-aria-expanded', "{$menu_toggle_id} ? 'true' : 'false'" );

			// Sub-menus to be closed when this one is to be opened.
			$toggles_to_disable            = '';
			$toggles_to_disable_for_body[] = "{$menu_toggle_id}:false";

			foreach ( $menu_toggle_ids as $other_menu_toggle_id ) {
				if ( $menu_toggle_id === $other_menu_toggle_id ) {
					continue;
				}

				$toggles_to_disable .= ",{$other_menu_toggle_id}:false";
			}

			AMP_DOM_Utils::add_amp_action( $menu_toggle, 'tap', "AMP.setState({{$menu_toggle_id}:!{$menu_toggle_id}{$toggles_to_disable}})" );
		}

		$state_vars = implode( ',', $toggles_to_disable_for_body );
		AMP_DOM_Utils::add_amp_action( $this->dom->body, 'tap', "AMP.setState({{$state_vars}})" );
		$this->dom->body->setAttribute( 'role', 'document' );
		$this->dom->body->setAttribute( 'tabindex', '-1' );
	}

	/**
	 * Sanitize the sub-menus in the Twenty Twenty-One theme.
	 */
	public function amend_twentytwentyone_sub_menu_toggles() {
		$menu_toggles = $this->dom->xpath->query( '//button[ @onclick = "twentytwentyoneExpandSubMenu(this)" ]' );

		// Remove the `onclick` attribute for sub-menu toggles in the primary and secondary menus.
		foreach ( $menu_toggles as $menu_toggle ) {
			/** @var DOMElement $menu_toggle */
			$menu_toggle->removeAttribute( 'onclick' );
		}
	}

	/**
	 * Show "Desktop Expanded Menu" in AMP mode.
	 * Removes 'no-js' class from menu element.
	 *
	 * @return void
	 */
	public function show_twentytwenty_desktop_expanded_menu() {

		$xpath         = "//*[@class='header-navigation-wrapper']/div[ @class and contains( concat( ' ', normalize-space( @class ), ' ' ), ' header-toggles hide-no-js ' ) ]";
		$expanded_menu = $this->dom->xpath->query( $xpath )->item( 0 );

		if ( $expanded_menu instanceof DOMElement ) {
			$class = $expanded_menu->getAttribute( Attribute::CLASS_ );
			$expanded_menu->setAttribute(
				Attribute::CLASS_,
				str_replace( 'hide-no-js', '', $class )
			);
		}
	}

	/**
	 * Get the closest sub-menu within a menu item.
	 *
	 * @param DOMElement $element Element to get the closest sub-menu of.
	 * @return DOMElement Requested sub-menu element, or the starting element
	 *                    if none found.
	 */
	protected function get_closest_submenu( DOMElement $element ) {
		$menu_item = $element;

		while ( ! AMP_DOM_Utils::has_class( $menu_item, 'menu-item' ) ) {
			$menu_item = $menu_item->parentNode;
			if ( ! $menu_item ) {
				return $element;
			}
		}

		$sub_menu = $this->dom->xpath->query( ".//*[ @class and contains( concat( ' ', normalize-space( @class ), ' ' ), ' sub-menu ' ) ]", $menu_item )->item( 0 );

		if ( ! $sub_menu instanceof DOMElement ) {
			return $element;
		}

		return $sub_menu;
	}

	/**
	 * Automatically open the submenus related to the current page in the menu modal.
	 */
	public function add_twentytwenty_current_page_awareness() {
		$page_ancestors = $this->dom->xpath->query( "//li[ @class and contains( concat( ' ', normalize-space( @class ), ' ' ), ' current_page_ancestor ' ) ]" );
		foreach ( $page_ancestors as $page_ancestor ) {
			$toggle   = $this->dom->xpath->query( "./div/button[ @class and contains( concat( ' ', normalize-space( @class ), ' ' ), ' sub-menu-toggle ' ) ]", $page_ancestor )->item( 0 );
			$children = $this->dom->xpath->query( "./ul[ @class and contains( concat( ' ', normalize-space( @class ), ' ' ), ' children ' ) ]", $page_ancestor )->item( 0 );
			foreach ( [ $toggle, $children ] as $element ) {
				if ( ! $element instanceof DOMElement ) {
					continue;
				}

				$classes   = $element->hasAttribute( 'class' ) ? explode( ' ', $element->getAttribute( 'class' ) ) : [];
				$classes[] = 'active';
				$element->setAttribute( 'class', implode( ' ', array_unique( $classes ) ) );
			}
		}
	}

	/**
	 * Provides a "best guess" as to what XPath would mirror a given CSS
	 * selector.
	 *
	 * This is a very simplistic conversion and will only work for very basic
	 * CSS selectors.
	 *
	 * @param string $css_selector CSS selector to convert.
	 * @return string|null XPath that closely mirrors the provided CSS selector,
	 *                             or null if an error occurred.
	 * @since 1.4.0
	 */
	protected function xpath_from_css_selector( $css_selector ) {
		// Start with basic clean-up.
		$css_selector = trim( $css_selector );
		$css_selector = preg_replace( '/\s+/', ' ', $css_selector );

		$xpath             = '';
		$direct_descendant = false;
		$token             = strtok( $css_selector, ' ' );

		while ( false !== $token ) {
			$matches = [];

			// Direct descendant.
			if ( preg_match( '/^>$/', $token, $matches ) ) {
				$direct_descendant = true;
				$token             = strtok( ' ' );
				continue;
			}

			// Single ID.
			if ( preg_match( '/^#(?<id>[a-zA-Z0-9-_]*)$/', $token, $matches ) ) {
				$descendant        = $direct_descendant ? '/' : '//';
				$xpath            .= "{$descendant}*[ @id = '{$matches['id']}' ]";
				$direct_descendant = false;
				$token             = strtok( ' ' );
				continue;
			}

			// Single class.
			if ( preg_match( '/^\.(?<class>[a-zA-Z0-9-_]*)$/', $token, $matches ) ) {
				$descendant        = $direct_descendant ? '/' : '//';
				$xpath            .= "{$descendant}*[ @class and contains( concat( ' ', normalize-space( @class ), ' ' ), ' {$matches['class']} ' ) ]";
				$direct_descendant = false;
				$token             = strtok( ' ' );
				continue;
			}

			// Element.
			if ( preg_match( '/^(?<element>[^.][a-zA-Z0-9-_]*)$/', $token, $matches ) ) {
				$descendant        = $direct_descendant ? '/' : '//';
				$xpath            .= "{$descendant}{$matches['element']}";
				$direct_descendant = false;
				$token             = strtok( ' ' );
				continue;
			}

			$token = strtok( ' ' );
		}

		return $xpath;
	}

	/**
	 * Try to guess the role of a modal based on its classes.
	 *
	 * @param DOMElement $modal Modal to guess the role for.
	 * @return string Role that was guessed.
	 */
	protected function guess_modal_role( DOMElement $modal ) {
		// No classes to base our guess on, so keep it generic.
		if ( ! $modal->hasAttribute( Attribute::CLASS_ ) ) {
			return Role::DIALOG;
		}

		$classes = preg_split( '/\s+/', trim( $modal->getAttribute( Attribute::CLASS_ ) ) );

		foreach ( self::$modal_roles as $role ) {
			if ( in_array( $role, $classes, true ) ) {
				return $role;
			}
		}

		// None of the roles we are looking for match any of the classes.
		return Role::DIALOG;
	}

	/**
	 * Evaluates the given XPath expression and give first Element if exist.
	 *
	 * @param string  $expression   The XPath expression to execute.
	 * @param Element $context_node The optional context node can be specified for doing relative XPath queries.
	 *                              By default, the queries are relative to the root element.
	 *
	 * @return Element|null Return Element if exists otherwise null.
	 */
	protected function get_first_element( $expression, $context_node = null ) {
		/** @var DOMNodeList $dom_node_list */
		$dom_node_list = $this->dom->xpath->query( $expression, $context_node );

		$dom_node = $dom_node_list->item( 0 );
		return $dom_node instanceof Element ? $dom_node : null;
	}

	/**
	 * Update main navigation menu for "twentynineteen" theme.
	 *
	 * @return void
	 */
	public function update_twentynineteen_mobile_main_menu() {

		$xpaths = [
			'main_menu'               => '//nav[ @id = "site-navigation" ]//ul[ @class = "main-menu"]',
			'top_menu_items'          => './li[ contains( @class, "menu-item" ) and contains( @class, "menu-item-has-children" ) ]',
			'expand_button'           => './button[ @class = "submenu-expand" ]',
			'submenu'                 => './ul[ @class = "sub-menu" ]',
			'close_button_in_submenu' => './li[ contains( @class, "mobile-parent-nav-menu-item" ) ]//button[ contains( @class, "menu-item-link-return" ) ]',
		];

		$main_menu = $this->get_first_element( $xpaths['main_menu'] );
		if ( empty( $main_menu ) ) {
			return;
		}

		$menu_items = $this->dom->xpath->query( $xpaths['top_menu_items'], $main_menu );

		/** @var Element $menu_item */
		foreach ( $menu_items as $menu_item ) {
			$expand_button = $this->get_first_element( $xpaths['expand_button'], $menu_item );
			$sub_menu      = $this->get_first_element( $xpaths['submenu'], $menu_item );

			if ( empty( $expand_button ) || empty( $sub_menu ) ) {
				continue;
			}

			// AMP Sidebar.
			$amp_sidebar = AMP_DOM_Utils::create_node(
				$this->dom,
				Extension::SIDEBAR,
				[
					Attribute::LAYOUT => Layout::NODISPLAY,
					Attribute::CLASS_ => 'amp-twentynineteen-main-navigation',
					Attribute::SIDE   => is_rtl() ? 'left' : 'right',
				]
			);

			$sidebar_id = $this->dom->getElementId( $amp_sidebar );

			// AMP nested menu.
			$amp_nested_menu = AMP_DOM_Utils::create_node(
				$this->dom,
				Extension::NESTED_MENU,
				[
					Attribute::LAYOUT => Layout::FILL,
				]
			);

			// Clone the sub-menu and expand button for AMP navigation.
			/** @var Element $amp_sub_menu */
			$amp_sub_menu = $sub_menu->cloneNode( true );

			/** @var Element $amp_expand_button */
			$amp_expand_button = $expand_button->cloneNode( true );

			$sub_menu->setAttribute( Attribute::CLASS_, $sub_menu->getAttribute( Attribute::CLASS_ ) . ' display-on-desktop' );
			$expand_button->setAttribute( Attribute::CLASS_, $expand_button->getAttribute( Attribute::CLASS_ ) . ' display-on-desktop' );

			$menu_item->appendChild( $amp_expand_button );
			$menu_item->appendChild( $amp_sub_menu );
			$this->update_twentynineteen_main_nested_menu( $amp_sub_menu );

			$amp_sub_menu->setAttribute( Attribute::CLASS_, $amp_sub_menu->getAttribute( Attribute::CLASS_ ) . ' expanded-true display-on-mobile' );
			$amp_expand_button->setAttribute( Attribute::CLASS_, $amp_expand_button->getAttribute( Attribute::CLASS_ ) . ' display-on-mobile' );

			// Handle buttons.
			$amp_expand_button->addAmpAction( 'tap', "$sidebar_id.open" );
			$back_button = $this->get_first_element( $xpaths['close_button_in_submenu'], $amp_sub_menu );
			if ( ! empty( $back_button ) ) {
				$back_button->addAmpAction( 'tap', "$sidebar_id.close" );
			}

			$amp_nested_menu->appendChild( $amp_sub_menu );
			$amp_sidebar->appendChild( $amp_nested_menu );
			$menu_item->appendChild( $amp_sidebar );
		}
	}

	/**
	 * Update the markup of the nested menu to AMP compatible markup.
	 *
	 * @param Element $sub_menu Element of sub-menu from main navigation.
	 *
	 * @return void
	 */
	public function update_twentynineteen_main_nested_menu( Element $sub_menu ) {

		$xpaths = [
			'menu_items'    => './li[ contains( @class, "menu-item" ) and contains( @class, "menu-item-has-children" ) ]',
			'expand_button' => './button[ @class = "submenu-expand" ]',
			'back_button'   => './li[ contains( @class, "mobile-parent-nav-menu-item" ) ]//button[ contains( @class, "menu-item-link-return" ) ]',
			'submenu'       => './ul[ @class = "sub-menu" ]',
		];

		$menu_items = $this->dom->xpath->query( $xpaths['menu_items'], $sub_menu );
		if ( 0 === $menu_items->length ) {
			return;
		}

		/** @var Element $menu_item */
		foreach ( $menu_items as $menu_item ) {
			$nested_sub_menu = $this->get_first_element( $xpaths['submenu'], $menu_item );

			if ( empty( $nested_sub_menu ) ) {
				continue;
			}

			$this->update_twentynineteen_main_nested_menu( $nested_sub_menu );

			$back_button = $this->get_first_element( $xpaths['back_button'], $nested_sub_menu );
			if ( ! empty( $back_button ) ) {
				$back_button->setAttribute( Attribute::AMP_NESTED_SUBMENU_CLOSE, '' );
			}

			$open_button = $this->get_first_element( $xpaths['expand_button'], $menu_item );
			if ( ! empty( $open_button ) ) {
				$open_button->setAttribute( Attribute::AMP_NESTED_SUBMENU_OPEN, '' );
			}

			$amp_nested_menu_div = AMP_DOM_Utils::create_node(
				$this->dom,
				Tag::DIV,
				[
					Attribute::AMP_NESTED_SUBMENU => '',
				]
			);

			$nested_sub_menu->setAttribute( Attribute::CLASS_, $nested_sub_menu->getAttribute( Attribute::CLASS_ ) . ' expanded-true' );
			$amp_nested_menu_div->appendChild( $nested_sub_menu );
			$menu_item->appendChild( $amp_nested_menu_div );
		}
	}
}
PK.3Y�c�**?bunyad-amp/includes/sanitizers/class-amp-dev-mode-sanitizer.php<?php
/**
 * Class AMP_Dev_Mode_Sanitizer
 *
 * Add the data-ampdevmode to the document element and to the elements specified by the supplied args.
 *
 * @since 1.3
 * @package AMP
 */

/**
 * Class AMP_Dev_Mode_Sanitizer
 *
 * @since 1.3
 * @internal
 */
final class AMP_Dev_Mode_Sanitizer extends AMP_Base_Sanitizer {

	/**
	 * Array of flags used to control sanitization.
	 *
	 * @var array {
	 *      @type string[] $element_xpaths XPath expressions for elements to add the data-ampdevmode attribute to.
	 * }
	 */
	protected $args;

	/**
	 * Sanitize document for dev mode.
	 *
	 * @since 1.3
	 */
	public function sanitize() {
		$this->dom->documentElement->setAttribute( AMP_Rule_Spec::DEV_MODE_ATTRIBUTE, '' );

		$element_xpaths = ! empty( $this->args['element_xpaths'] ) ? $this->args['element_xpaths'] : [];
		foreach ( $element_xpaths as $element_xpath ) {
			foreach ( $this->dom->xpath->query( $element_xpath ) as $node ) {
				if ( $node instanceof DOMElement ) {
					$node->setAttribute( AMP_Rule_Spec::DEV_MODE_ATTRIBUTE, '' );
				}
			}
		}
	}
}
PK.3Y�mJU<bunyad-amp/includes/sanitizers/class-amp-embed-sanitizer.php<?php
/**
 * Class AMP_Embed_Sanitizer
 *
 * @package AMP
 */

use AmpProject\Dom\Document;

/**
 * Class AMP_Embed_Sanitizer
 *
 * Calls sanitize_raw_embeds method on embed handlers.
 *
 * @internal
 */
class AMP_Embed_Sanitizer extends AMP_Base_Sanitizer {

	/**
	 * Embed handlers.
	 *
	 * @var AMP_Base_Embed_Handler[] AMP_Base_Embed_Handler[]
	 */
	private $embed_handlers = [];

	/**
	 * AMP_Embed_Sanitizer constructor.
	 *
	 * @param Document $dom  DOM.
	 * @param array    $args Args.
	 */
	public function __construct( $dom, $args = [] ) {
		parent::__construct( $dom, $args );

		if ( ! empty( $this->args['embed_handlers'] ) ) {
			$this->embed_handlers = $this->args['embed_handlers'];
		}
	}

	/**
	 * Checks if each embed_handler has sanitize_raw_method and calls it.
	 */
	public function sanitize() {

		foreach ( $this->embed_handlers as $embed_handler ) {
			if ( method_exists( $embed_handler, 'sanitize_raw_embeds' ) ) {
				$embed_handler->sanitize_raw_embeds( $this->dom, $this->args );
			}
		}
	}
}
PK.3YUt��44;bunyad-amp/includes/sanitizers/class-amp-form-sanitizer.php<?php
/**
 * Class AMP_Form_Sanitizer.
 *
 * @package AMP
 * @since 0.7
 */

use AmpProject\AmpWP\ValidationExemption;
use AmpProject\DevMode;
use AmpProject\Dom\Document\Filter\MustacheScriptTemplates;
use AmpProject\Dom\Element;
use AmpProject\Html\Attribute;

/**
 * Class AMP_Form_Sanitizer
 *
 * Strips and corrects attributes in forms.
 *
 * @since 0.7
 * @internal
 */
class AMP_Form_Sanitizer extends AMP_Base_Sanitizer {

	/**
	 * Validation error code emitted when there is a POST form with action-xhr but only native POST forms are used.
	 *
	 * @var string
	 */
	const POST_FORM_HAS_ACTION_XHR_WHEN_NATIVE_USED = 'POST_FORM_HAS_ACTION_XHR_WHEN_NATIVE_USED';

	/**
	 * Placeholder for default args, to be set in child classes.
	 *
	 * @var array
	 */
	protected $DEFAULT_ARGS = [
		'native_post_forms_allowed' => 'never',
	];

	/**
	 * Array of flags used to control sanitization.
	 *
	 * @var array {
	 *      @type string $native_post_forms_allowed Whether to convert POST forms to use action-xhr instead. Can be 'never', 'always', or 'conditionally' (if more than comments form).
	 * }
	 */
	protected $args;

	/**
	 * Tag.
	 *
	 * @var string HTML <form> tag to identify and process.
	 *
	 * @since 0.7
	 */
	public static $tag = 'form';

	/**
	 * Sanitize the <form> elements from the HTML contained in this instance's Dom\Document.
	 *
	 * @link https://www.ampproject.org/docs/reference/components/amp-form
	 * @since 0.7
	 */
	public function sanitize() {
		$form_elements = $this->dom->getElementsByTagName( self::$tag );
		if ( 0 === $form_elements->length ) {
			return;
		}

		/** @var Element[] $post_form_elements */
		$post_form_elements = [];

		foreach ( $form_elements as $form_element ) {
			if ( ! $form_element instanceof Element || DevMode::hasExemptionForNode( $form_element ) ) {
				continue;
			}

			// Normalize the method.
			$method = 'get';
			if ( $form_element->getAttribute( Attribute::METHOD ) ) {
				$method = strtolower( $form_element->getAttribute( Attribute::METHOD ) );
			} else {
				$form_element->setAttribute( Attribute::METHOD, $method );
			}

			if ( 'get' === $method ) {
				$this->normalize_action_attribute( $form_element );
				$this->normalize_target_attribute( $form_element );
			} elseif ( 'post' === $method ) {
				$post_form_elements[] = $form_element;
			}
		}

		// Convert post forms to use action-xhr if post forms are never allowed or if native forms are conditionally
		// allowed but the only form is the comments form which we are able to safely convert to use action-xhr.
		if (
			'never' === $this->args['native_post_forms_allowed']
			||
			(
				'conditionally' === $this->args['native_post_forms_allowed']
				&&
				count( $post_form_elements ) === 1
				&&
				$this->is_comments_form_element( $post_form_elements[0] )
			)
		) {
			foreach ( $post_form_elements as $post_form_element ) {
				$this->normalize_target_attribute( $post_form_element );
				$this->convert_post_form_to_action_xhr( $post_form_element );
			}
		} else {
			foreach ( $post_form_elements as $post_form_element ) {
				$this->handle_native_post_form( $post_form_element );
			}
		}
	}

	/**
	 * Convert post form to use action-xhr.
	 *
	 * @param Element $post_form_element Post form.
	 */
	protected function convert_post_form_to_action_xhr( Element $post_form_element ) {
		$action_url = $this->normalize_action_attribute( $post_form_element );
		$action_xhr = $post_form_element->getAttribute( Attribute::ACTION_XHR );

		$post_form_element->removeAttribute( Attribute::ACTION );
		if ( ! $action_xhr ) {
			// Record that action was converted to action-xhr.
			$action_url = add_query_arg( AMP_HTTP::ACTION_XHR_CONVERTED_QUERY_VAR, 1, $action_url );
			$post_form_element->setAttribute( Attribute::ACTION_XHR, $action_url );
			// Append success/error handlers if not found.
			$this->ensure_response_message_elements( $post_form_element );
		} elseif ( 'http://' === substr( $action_xhr, 0, 7 ) ) {
			$post_form_element->setAttribute( Attribute::ACTION_XHR, substr( $action_xhr, 5 ) );
		}
	}

	/**
	 * Handle native post form.
	 *
	 * If native post forms are used, then mark any POST forms as being unvalidated for AMP. Note that it is
	 * an all or nothing proposition with forms, where there cannot be some POST forms with [action] and
	 * others with [action-xhr]. The former is incompatible with the amp-form extension but the latter
	 * fundamentally depends on it. So it's one or the other.
	 *
	 * @param Element $post_form_element Post form.
	 */
	protected function handle_native_post_form( Element $post_form_element ) {
		if ( $post_form_element->hasAttribute( Attribute::ACTION_XHR ) ) {
			// @todo Consider rewriting action-xhr to action? Or include a shim which implements the amp-form functionality?
			$this->remove_invalid_child(
				$post_form_element,
				[ 'code' => self::POST_FORM_HAS_ACTION_XHR_WHEN_NATIVE_USED ]
			);
		} else {
			ValidationExemption::mark_node_as_px_verified( $post_form_element );
		}
	}

	/**
	 * Normalize form target attribute.
	 *
	 * The target "indicates where to display the form response after submitting the form.
	 * The value must be _blank or _top". The _self and _parent values are treated
	 * as synonymous with _top, and anything else is treated like _blank.
	 *
	 * @param Element $form_element Form element.
	 */
	protected function normalize_target_attribute( Element $form_element ) {
		$target = $form_element->getAttribute( Attribute::TARGET );
		if ( '_top' !== $target ) {
			if ( ! $target || in_array( $target, [ '_self', '_parent' ], true ) ) {
				$form_element->setAttribute( Attribute::TARGET, '_top' );
			} elseif ( '_blank' !== $target ) {
				$form_element->setAttribute( Attribute::TARGET, '_blank' );
			}
		}
	}

	/**
	 * Normalize form action attribute.
	 *
	 * @param Element $form_element Form element.
	 * @return string Normalized action URL.
	 */
	protected function normalize_action_attribute( Element $form_element ) {
		$action_url = $this->get_action_url( $form_element->getAttribute( Attribute::ACTION ) );
		$form_element->setAttribute( Attribute::ACTION, $action_url );
		return $action_url;
	}

	/**
	 * Determine whether the form is for the comments.
	 *
	 * @param Element $form_element Form element.
	 * @return bool Is comments form.
	 */
	protected function is_comments_form_element( Element $form_element ) {
		return (
			'commentform' === $form_element->getAttribute( Attribute::ID )
			&&
			'wp-comments-post.php' === basename( wp_parse_url( $form_element->getAttribute( Attribute::ACTION ), PHP_URL_PATH ) )
		);
	}

	/**
	 * Get the action URL for the form element.
	 *
	 * @see amp_get_current_url()
	 * @see AMP_HTTP::intercept_post_request_redirect()
	 * @param string $action_url Action URL.
	 * @return string Action URL.
	 */
	protected function get_action_url( $action_url ) {
		$parsed_home_url = wp_parse_url( home_url() );

		/*
		 * In HTML, the default action is just the current URL that the page is served from.
		 * The action "specifies a server endpoint to handle the form input. The value must be an
		 * https URL and must not be a link to a CDN".
		 */
		if ( ! $action_url ) {
			$action_url = '//' . $parsed_home_url['host'];
			if ( isset( $parsed_home_url['port'] ) ) {
				$action_url .= ':' . $parsed_home_url['port'];
			}
			if ( isset( $_SERVER['REQUEST_URI'] ) ) {
				// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Sanitization is done below.
				$action_url .= wp_unslash( $_SERVER['REQUEST_URI'] );
			}

			return esc_url_raw( $action_url );
		}

		$parsed_url = wp_parse_url( $action_url );

		if (
			// Ignore a malformed URL - it will be later sanitized.
			false === $parsed_url
			||
			// Ignore HTTPS URLs, because there is nothing left to do.
			( isset( $parsed_url['scheme'] ) && 'https' === $parsed_url['scheme'] )
			||
			// Ignore protocol-relative URLs, because there is also nothing left to do.
			( ! isset( $parsed_url['scheme'] ) && isset( $parsed_url['host'] ) )
		) {
			return $action_url;
		}

		// Make URL protocol relative.
		$parsed_url['scheme'] = '//';

		// Set an empty path if none is defined but there is a host.
		if ( ! isset( $parsed_url['path'] ) && isset( $parsed_url['host'] ) ) {
			$parsed_url['path'] = '';
		}

		if ( ! isset( $parsed_url['host'] ) ) {
			$parsed_url['host'] = $parsed_home_url['host'];
		}

		if ( ! isset( $parsed_url['port'] ) && isset( $parsed_home_url['port'] ) ) {
			$parsed_url['port'] = $parsed_home_url['port'];
		}

		if ( ! isset( $parsed_url['path'] ) ) {
			// If there is action URL path, use the one from the request.
			// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.ValidatedSanitizedInput.InputNotValidated
			$parsed_url['path'] = trailingslashit( wp_unslash( $_SERVER['REQUEST_URI'] ) );
		} elseif ( '' !== $parsed_url['path'] && '/' !== $parsed_url['path'][0] ) {
			// If the path is relative, append it to the current request path.
			// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPress.Security.ValidatedSanitizedInput.InputNotValidated
			$parsed_url['path'] = trailingslashit( wp_unslash( $_SERVER['REQUEST_URI'] ) ) . trailingslashit( $parsed_url['path'] );
		}

		// Rebuild the URL.
		$action_url = $parsed_url['scheme'];
		if ( isset( $parsed_url['user'] ) ) {
			$action_url .= $parsed_url['user'];
			if ( isset( $parsed_url['pass'] ) ) {
				$action_url .= ':' . $parsed_url['pass'];
			}
			$action_url .= '@';
		}
		$action_url .= $parsed_url['host'];
		if ( isset( $parsed_url['port'] ) ) {
			$action_url .= ':' . $parsed_url['port'];
		}
		$action_url .= $parsed_url['path'];
		if ( isset( $parsed_url['query'] ) ) {
			$action_url .= '?' . $parsed_url['query'];
		}
		if ( isset( $parsed_url['fragment'] ) ) {
			$action_url .= '#' . $parsed_url['fragment'];
		}

		return esc_url_raw( $action_url );
	}

	/**
	 * Ensure that the form has a submit-success and submit-error element templates.
	 *
	 * @link https://www.ampproject.org/docs/reference/components/amp-form#success/error-response-rendering
	 * @since 1.2
	 *
	 * @param DOMElement $form The form node to check.
	 */
	public function ensure_response_message_elements( $form ) {
		$elements = [
			'submit-error'   => null,
			'submit-success' => null,
			'submitting'     => null,
		];

		$templates = $this->dom->xpath->query( MustacheScriptTemplates::XPATH_MUSTACHE_TEMPLATE_ELEMENTS_QUERY, $form );
		foreach ( $templates as $template ) {
			$parent = $template->parentNode;
			if ( $parent instanceof DOMElement ) {
				foreach ( array_keys( $elements ) as $attribute ) {
					if ( $parent->hasAttribute( $attribute ) ) {
						$elements[ $attribute ] = $parent;
					}
				}
			}
		}

		foreach ( $elements as $attribute => $element ) {
			if ( $element ) {
				continue;
			}
			$div      = $this->dom->createElement( 'div' );
			$template = $this->dom->createElement( 'template' );
			$div->setAttribute( 'class', 'amp-wp-default-form-message' );
			if ( 'submitting' === $attribute ) {
				$p = $this->dom->createElement( 'p' );
				$p->appendChild( $this->dom->createTextNode( __( 'Submitting…', 'amp' ) ) );
				$template->appendChild( $p );
			} else {
				$p = $this->dom->createElement( 'p' );
				$p->setAttribute( 'class', '{{#redirecting}}amp-wp-form-redirecting{{/redirecting}}' );
				// phpcs:ignore WordPressVIPMinimum.Security.Mustache.OutputNotation -- Sanitization applied via amp-mustache.
				$p->appendChild( $this->dom->createTextNode( '{{#message}}{{{message}}}{{/message}}' ) );

				// Show generic message for HTTP success/failure.
				$p->appendChild( $this->dom->createTextNode( '{{^message}}' ) );
				if ( 'submit-error' === $attribute ) {
					$p->appendChild( $this->dom->createTextNode( __( 'Your submission failed.', 'amp' ) ) );
					/* translators: %1$s: HTTP status text, %2$s: HTTP status code */
					$reason = sprintf( __( 'The server responded with %1$s (code %2$s).', 'amp' ), '{{status_text}}', '{{status_code}}' );
				} else {
					$p->appendChild( $this->dom->createTextNode( __( 'It appears your submission was successful.', 'amp' ) ) );
					$reason = __( 'Even though the server responded OK, it is possible the submission was not processed.', 'amp' );
				}
				$reason .= ' ' . __( 'Please contact the developer of this form processor to improve this message.', 'amp' );

				$p->appendChild( $this->dom->createTextNode( ' ' ) );
				$small = $this->dom->createElement( 'small' );
				$small->appendChild( $this->dom->createTextNode( $reason ) );
				$small->appendChild( $this->dom->createTextNode( ' ' ) );
				$link = $this->dom->createElement( 'a' );
				$link->setAttribute( 'href', 'https://amp-wp.org/?p=5463' );
				$link->setAttribute( 'target', '_blank' );
				$link->setAttribute( 'rel', 'nofollow noreferrer noopener' );
				$link->appendChild( $this->dom->createTextNode( __( 'Learn More', 'amp' ) ) );
				$small->appendChild( $link );
				$p->appendChild( $small );

				$p->appendChild( $this->dom->createTextNode( '{{/message}}' ) );
				$template->appendChild( $p );
			}
			$div->setAttribute( $attribute, '' );
			$template->setAttribute( 'type', 'amp-mustache' );
			$div->appendChild( $template );
			$form->appendChild( $div );
		}
	}
}
PK.3Y�
~66Dbunyad-amp/includes/sanitizers/class-amp-gallery-block-sanitizer.php<?php
/**
 * Class AMP_Gallery_Block_Sanitizer.
 *
 * @package AMP
 */

use AmpProject\AmpWP\Embed\HandlesGalleryEmbed;
use AmpProject\Html\Tag;
use AmpProject\Dom\Element;

/**
 * Class AMP_Gallery_Block_Sanitizer
 *
 * Modifies gallery block to match the block's AMP-specific configuration.
 *
 * @internal
 */
class AMP_Gallery_Block_Sanitizer extends AMP_Base_Sanitizer {

	use HandlesGalleryEmbed;

	/**
	 * Tag.
	 *
	 * @since 1.0
	 *
	 * @var string Ul tag to identify wrapper around gallery block.
	 */
	public static $tag = 'ul';

	/**
	 * Expected class of the wrapper around the gallery block.
	 *
	 * @since 1.0
	 *
	 * @var string
	 */
	public static $class = 'wp-block-gallery';

	/**
	 * Array of flags used to control sanitization.
	 *
	 * @var array {
	 *      @type int  $content_max_width Max width of content.
	 *      @type bool $carousel_required Whether carousels are required. This is used when amp theme support is not present, for back-compat.
	 *      @type bool $native_img_used   Whether native img is being used.
	 * }
	 */
	protected $args;

	/**
	 * Default args.
	 *
	 * @var array
	 */
	protected $DEFAULT_ARGS = [
		'carousel_required' => false,
		'native_img'        => false,
	];

	/**
	 * Sanitize the gallery block contained by elements with the wp-block-gallery class.
	 *
	 * The markup structure has changed over time:
	 *
	 *  - WordPress<5.2: ul.wp-block-gallery > li
	 *  - WordPress<5.9: figure.wp-block-gallery > ul > li > figure > img
	 *  - WordPress≥5.9: figure.wp-block-gallery > figure.wp-block-image > img
	 *
	 * @since 0.2
	 */
	public function sanitize() {
		$class_query = 'contains( concat( " ", normalize-space( @class ), " " ), " wp-block-gallery " )';

		$gallery_elements = $this->dom->xpath->query(
			sprintf( './/ul[ %1$s ] | .//figure[ %1$s ]', $class_query ),
			$this->dom->body
		);
		foreach ( $gallery_elements as $gallery_element ) {
			/** @var Element $gallery_element */

			$attributes = AMP_DOM_Utils::get_node_attributes_as_assoc_array( $gallery_element );

			$is_amp_lightbox = isset( $attributes['data-amp-lightbox'] ) && rest_sanitize_boolean( $attributes['data-amp-lightbox'] );

			if ( isset( $attributes['data-amp-carousel'] ) ) {
				$is_amp_carousel = rest_sanitize_boolean( $attributes['data-amp-carousel'] );
			} else {
				// The carousel_required argument is set to true when the theme does not support AMP. However, it is no
				// no longer strictly required. Rather, carousels are just enabled by default.
				$is_amp_carousel = ! empty( $this->args['carousel_required'] );
			}

			// Ensure data-amp-carousel=true attribute is present for proper styling of block.
			if ( $is_amp_carousel ) {
				$gallery_element->setAttribute( 'data-amp-carousel', 'true' );
			}

			$img_elements = $this->dom->xpath->query(
				empty( $this->args['native_img_used'] ) ? './/amp-img | .//amp-anim' : './/img',
				$gallery_element
			);

			$this->process_gallery_embed( $is_amp_carousel, $is_amp_lightbox, $gallery_element, $img_elements );
		}
	}

	/**
	 * Get the caption element for the specified image element.
	 *
	 * @param DOMElement $img_element Image element.
	 * @return DOMElement|null The caption element, or `null` if the image has none.
	 */
	protected function get_caption_element( DOMElement $img_element ) {
		$figcaption_element = null;
		if (
			isset( $img_element->nextSibling->nodeName )
			&& $img_element->nextSibling instanceof DOMElement
			&& Tag::FIGCAPTION === $img_element->nextSibling->nodeName
		) {
			$figcaption_element = $img_element->nextSibling;
		}

		// If 'Link To' is selected, the image will be wrapped in an <a>, so search for the sibling of the <a>.
		if (
			! $figcaption_element
			&& isset( $img_element->parentNode->nextSibling->nodeName )
			&& $img_element->parentNode->nextSibling instanceof DOMElement
			&& Tag::FIGCAPTION === $img_element->parentNode->nextSibling->nodeName
		) {
			$figcaption_element = $img_element->parentNode->nextSibling;
		}

		if ( $figcaption_element instanceof DOMElement && 0 === $figcaption_element->childNodes->length ) {
			return null;
		}

		return $figcaption_element;
	}
}
PK.3Yfk(��Bbunyad-amp/includes/sanitizers/class-amp-gtag-script-sanitizer.php<?php
/**
 * GA4 Script Sanitizer.
 *
 * - This sanitizer will facilitate using GA4 while waiting on an AMP implementation.
 * - This sanitizer will be only used in Moderate or Loose sandboxing level
 *
 * @since 2.4.0
 * @package AMP
 */

use AmpProject\AmpWP\Option;
use AmpProject\AmpWP\ValidationExemption;

/**
 * Class AMP_GTag_Script_Sanitizer
 *
 * @since 2.4.0
 * @internal
 */
class AMP_GTag_Script_Sanitizer extends AMP_Base_Sanitizer {

	/**
	 * Sanitize the AMP response for GA4 scripts.
	 *
	 * @since 2.4.0
	 */
	public function sanitize() {
		if ( ! AMP_Options_Manager::get_option( Option::SANDBOXING_ENABLED ) ) {
			return;
		}

		$sandboxing_level = AMP_Options_Manager::get_option( Option::SANDBOXING_LEVEL );

		if ( 1 !== $sandboxing_level && 2 !== $sandboxing_level ) {
			return;
		}

		/**
		 * GTag Script looks like this:
		 *
		 * <script async src="https://www.googletagmanager.com/gtag/js?id=xxxxxx"></script>
		 * <script>
		 *   window.dataLayer = window.dataLayer || [];
		 *   function gtag(){dataLayer.push(arguments);}
		 *   gtag('js', new Date());
		 *
		 *   gtag('config', 'xxxxxx');
		 * </script>
		 */
		$scripts = $this->dom->xpath->query( '//script[ ( @async and starts-with( @src, "https://www.googletagmanager.com/gtag/js" ) ) or contains( text(), "function gtag(" ) ]' );
		if ( ! $scripts instanceof DOMNodeList || 0 === $scripts->length ) {
			return;
		}

		foreach ( $scripts as $script ) {
			ValidationExemption::mark_node_as_px_verified( $script );
		}

		/**
		 * Mark inline gtag events as PX verified attributes.
		 *
		 * Such inline events can look like:
		 *
		 * onclick="gtag('event','click', { 'event_category':"click", 'event_label':"contactPage" })"
		 * onsubmit="gtag('event','submit', { 'event_category':"submit", 'event_label':"contactPage" })"
		 * onkeypress="gtag('event','keypress', { 'event_category':"keypress", 'event_label':"contactPage" })"
		 */
		$inline_events = $this->dom->xpath->query(
			'
				//@*[
					starts-with(name(), "on")
					and
					name() != "on"
					and
					contains(., "gtag(")
				]
			'
		);

		if ( $inline_events instanceof DOMNodeList ) {
			foreach ( $inline_events as $inline_event ) {
				ValidationExemption::mark_node_as_px_verified( $inline_event );
			}
		}
	}
}
PK.3Y�?��k<k<=bunyad-amp/includes/sanitizers/class-amp-iframe-sanitizer.php<?php
/**
 * Class AMP_Iframe_Sanitizer
 *
 * @package AMP
 */

use AmpProject\AmpWP\ValidationExemption;
use AmpProject\DevMode;
use AmpProject\Html\Attribute;
use AmpProject\Layout;

/**
 * Class AMP_Iframe_Sanitizer
 *
 * Converts <iframe> tags to <amp-iframe>
 *
 * @internal
 */
class AMP_Iframe_Sanitizer extends AMP_Base_Sanitizer {
	use AMP_Noscript_Fallback;

	/**
	 * Default values for sandboxing IFrame.
	 *
	 * | Sandbox Token                             | Included | Rationale
	 * |-------------------------------------------|----------|----------
	 * | `allow-downloads`                         | Yes      | Useful for downloading documents, etc.
	 * | `allow-downloads-without-user-activation` | No       | Experimental per MDN. Bad UX.
	 * | `allow-forms`                             | Yes      | For embeds like polls.
	 * | `allow-modals`                            | Yes      | For apps to show `confirm()`, etc.
	 * | `allow-orientation-lock`                  | Yes      | Since we `allowfullscreen`, useful for games, etc.
	 * | `allow-pointer-lock`                      | Yes      | Useful for games.
	 * | `allow-popups`                            | Yes      | To open YouTube video in new window, for example.
	 * | `allow-popups-to-escape-sandbox`          | Yes      | Useful for ads.
	 * | `allow-presentation`                      | Yes      | To cast YouTube videos, for example.
	 * | `allow-same-origin`                       | Yes      | Removed if iframe is same origin.
	 * | `allow-scripts`                           | Yes      | An iframe's primary use case is custom JS.
	 * | `allow-storage-access-by-user-activation` | No       | Experimental per MDN.
	 * | `allow-top-navigation`                    | No       | Poor user experience.
	 * | `allow-top-navigation-by-user-activation` | Yes      | Key for clicking `target=_top` links in iframes.
	 *
	 * @since 0.2
	 * @since 2.0.5 Updated to include majority of other sandbox values which are included by default if sandbox is not provided.
	 * @link https://html.spec.whatwg.org/multipage/iframe-embed-object.html#attr-iframe-sandbox
	 *
	 * @const string
	 */
	const SANDBOX_DEFAULTS = 'allow-downloads allow-forms allow-modals allow-orientation-lock allow-pointer-lock allow-popups allow-popups-to-escape-sandbox allow-presentation allow-same-origin allow-scripts allow-top-navigation-by-user-activation';

	/**
	 * Tag.
	 *
	 * @since 0.2
	 *
	 * @var string HTML <iframe> tag to identify and replace with AMP version.
	 */
	public static $tag = 'iframe';

	/**
	 * Default args.
	 *
	 * @var array {
	 *     Default args.
	 *
	 *     @type bool   $add_placeholder       Whether to add a placeholder element.
	 *     @type bool   $add_noscript_fallback Whether to add a noscript fallback.
	 *     @type string $current_origin        The current origin serving the page. Normally this will be the $_SERVER[HTTP_HOST].
	 *     @type string $alias_origin          An alternative origin which can be supplied which is used when encountering same-origin iframes.
	 *     @type bool   $native_iframe_used    Whether an HTML5 iframe element should be used instead of amp-iframe.
	 * }
	 */
	protected $DEFAULT_ARGS = [
		'add_placeholder'       => false,
		'add_noscript_fallback' => true,
		'current_origin'        => null,
		'alias_origin'          => null,
		'native_iframe_used'    => false,
	];

	/**
	 * Get mapping of HTML selectors to the AMP component selectors which they may be converted into.
	 *
	 * @return array Mapping.
	 */
	public function get_selector_conversion_mapping() {
		if ( $this->args['native_iframe_used'] ) {
			return [];
		}
		return [
			'iframe' => [
				'amp-iframe',
			],
		];
	}

	/**
	 * Sanitize the <iframe> elements from the HTML contained in this instance's Dom\Document.
	 *
	 * @since 0.2
	 */
	public function sanitize() {
		$nodes     = $this->dom->getElementsByTagName( self::$tag );
		$num_nodes = $nodes->length;
		if ( 0 === $num_nodes ) {
			return;
		}

		if ( $this->args['add_noscript_fallback'] ) {
			$this->initialize_noscript_allowed_attributes( self::$tag );
		}

		// Ensure origins are normalized.
		$this->args['current_origin'] = $this->get_origin_from_url( $this->args['current_origin'] );
		if ( ! empty( $this->args['alias_origin'] ) ) {
			$this->args['alias_origin'] = $this->get_origin_from_url( $this->args['alias_origin'] );
		}

		for ( $i = $num_nodes - 1; $i >= 0; $i-- ) {
			/**
			 * Iframe element.
			 *
			 * @var DOMElement $node
			 */
			$node = $nodes->item( $i );

			// Skip element if already inside of an AMP element as a noscript fallback, or if it has a dev mode exemption.
			if ( $this->is_inside_amp_noscript( $node ) || DevMode::hasExemptionForNode( $node ) ) {
				continue;
			}

			// If using native <iframe> instead of converting to <amp-iframe>, just mark the element as being unvalidated.
			if ( $this->args['native_iframe_used'] ) {
				ValidationExemption::mark_node_as_px_verified( $node );
				continue;
			}

			$normalized_attributes = AMP_DOM_Utils::get_node_attributes_as_assoc_array( $node );
			$normalized_attributes = $this->set_layout( $normalized_attributes );
			$normalized_attributes = $this->normalize_attributes( $normalized_attributes );

			/**
			 * If the src doesn't exist, remove the node. Either it never
			 * existed or was invalidated while filtering attributes above.
			 *
			 * @todo: add an arg to allow for a fallback element in this instance (note that filter cannot be used inside a sanitizer).
			 * @see: https://github.com/ampproject/amphtml/issues/2261
			 */
			if ( empty( $normalized_attributes['src'] ) ) {
				$this->remove_invalid_child(
					$node,
					[
						'code'       => AMP_Tag_And_Attribute_Sanitizer::ATTR_REQUIRED_BUT_MISSING,
						'attributes' => [ 'src' ],
						'spec_name'  => 'amp-iframe',
					]
				);
				continue;
			}

			$this->did_convert_elements = true;
			if ( empty( $normalized_attributes[ Attribute::LAYOUT ] ) && ! empty( $normalized_attributes[ Attribute::HEIGHT ] ) && ! empty( $normalized_attributes[ Attribute::WIDTH ] ) ) {

				// Set layout to responsive if the iframe is aligned to full width.
				$figure_node = null;
				if ( $node->parentNode instanceof DOMElement && 'figure' === $node->parentNode->tagName ) {
					$figure_node = $node->parentNode;
				}
				if ( $node->parentNode->parentNode instanceof DOMElement && 'figure' === $node->parentNode->parentNode->tagName ) {
					$figure_node = $node->parentNode->parentNode;
				}

				if (
					! empty( $this->args['align_wide_support'] )
					&& $figure_node
					&& preg_match( '/(^|\s)(alignwide|alignfull)(\s|$)/', $figure_node->getAttribute( Attribute::CLASS_ ) )
				) {
					$normalized_attributes[ Attribute::LAYOUT ] = Layout::RESPONSIVE;
				} else {
					$normalized_attributes[ Attribute::LAYOUT ] = Layout::INTRINSIC;
				}

				$this->add_or_append_attribute( $normalized_attributes, 'class', 'amp-wp-enforced-sizes' );
			}

			// Remove the ID from the original node so that PHP DOM doesn't fail to set it on the replacement element.
			$node->removeAttribute( Attribute::ID );

			$new_node = AMP_DOM_Utils::create_node( $this->dom, 'amp-iframe', $normalized_attributes );

			// Find existing placeholder/overflow.
			$placeholder_node = null;
			$overflow_node    = null;
			foreach ( iterator_to_array( $node->childNodes ) as $child ) {
				if ( ! ( $child instanceof DOMElement ) ) {
					continue;
				}
				if ( $child->hasAttribute( 'placeholder' ) ) {
					$placeholder_node = $node->removeChild( $child );
				} elseif ( $child->hasAttribute( 'overflow' ) ) {
					$overflow_node = $node->removeChild( $child );
				}
			}

			// Add placeholder.
			if ( $placeholder_node || true === $this->args['add_placeholder'] ) {
				if ( ! $placeholder_node ) {
					$placeholder_node = $this->build_placeholder(); // @todo Can a better placeholder default be devised?
				}
				$new_node->appendChild( $placeholder_node );
			}

			// Add overflow.
			if ( $new_node->hasAttribute( 'resizable' ) && ! $overflow_node ) {
				$overflow_node = $this->dom->createElement( 'button' );
				$overflow_node->setAttribute( 'overflow', '' );
				if ( $node->hasAttribute( 'data-amp-overflow-text' ) ) {
					$overflow_text = $node->getAttribute( 'data-amp-overflow-text' );
				} else {
					$overflow_text = __( 'Show all', 'amp' );
				}
				$overflow_node->appendChild( $this->dom->createTextNode( $overflow_text ) );
			}
			if ( $overflow_node ) {
				$new_node->appendChild( $overflow_node );
			}

			$node->parentNode->replaceChild( $new_node, $node );

			if ( $this->args['add_noscript_fallback'] ) {
				$node->setAttribute( 'src', $normalized_attributes['src'] );

				// AMP is stricter than HTML5 for this attribute, so make sure we use a normalized value.
				if ( $node->hasAttribute( 'frameborder' ) ) {
					$node->setAttribute( 'frameborder', $normalized_attributes['frameborder'] );
				}

				// Preserve original node in noscript for no-JS environments.
				$this->append_old_node_noscript( $new_node, $node, $this->dom );
			}
		}
	}

	/**
	 * Normalize HTML attributes for <amp-iframe> elements.
	 *
	 * @param string[] $attributes {
	 *      Attributes.
	 *
	 *      @type string $src IFrame URL - Empty if HTTPS required per $this->args['require_https_src']
	 *      @type int $width <iframe> width attribute - Set to numeric value if px or %
	 *      @type int $height <iframe> height attribute - Set to numeric value if px or %
	 *      @type string $sandbox <iframe> `sandbox` attribute - Pass along if found; default to value of self::SANDBOX_DEFAULTS
	 *      @type string $class <iframe> `class` attribute - Pass along if found
	 *      @type string $sizes <iframe> `sizes` attribute - Pass along if found
	 *      @type string $id <iframe> `id` attribute - Pass along if found
	 *      @type int $frameborder <iframe> `frameborder` attribute - Filter to '0' or '1'; default to '0'
	 *      @type bool $allowfullscreen <iframe> `allowfullscreen` attribute - Convert 'false' to empty string ''
	 *      @type bool $allowtransparency <iframe> `allowtransparency` attribute - Convert 'false' to empty string ''
	 *      @type string $type <iframe> `type` attribute - Pass along if value is not `text/html`
	 * }
	 * @return array Returns HTML attributes; normalizes src, dimensions, frameborder, sandbox, allowtransparency and allowfullscreen
	 */
	private function normalize_attributes( $attributes ) {
		$out = [];

		$remove_allow_same_origin = false;
		foreach ( $attributes as $name => $value ) {
			switch ( $name ) {
				case 'src':
					// Make the URL absolute since relative URLs are not allowed in amp-iframe.
					if ( '/' === substr( $value, 0, 1 ) && '/' !== substr( $value, 1, 1 ) ) {
						$value = untrailingslashit( $this->args['current_origin'] ) . $value;
					}

					$value = $this->maybe_enforce_https_src( $value, true );

					// Handle case where iframe source origin is the same as the host page's origin.
					if ( $this->get_origin_from_url( $value ) === $this->args['current_origin'] ) {
						if ( ! empty( $this->args['alias_origin'] ) ) {
							$value = preg_replace( '#^\w+://[^/]+#', $this->args['alias_origin'], $value );
						} else {
							$remove_allow_same_origin = true;
						}
					}

					$out[ $name ] = $value;
					break;

				case 'width':
				case 'height':
					$out[ $name ] = $this->sanitize_dimension( $value, $name );
					break;

				case 'frameborder':
					$out[ $name ] = $this->sanitize_boolean_digit( $value );
					break;

				case 'allowfullscreen':
				case 'allowtransparency':
					if ( 'false' !== strtolower( $value ) ) {
						$out[ $name ] = '';
					}
					break;

				case 'mozallowfullscreen':
				case 'webkitallowfullscreen':
					// Omit these since amp-iframe will add them if needed if the `allowfullscreen` attribute is present.
					break;

				case 'loading':
					/*
					 * The `amp-iframe` component already does lazy-loading by default; trigger a validation error only
					 * if the value is not `lazy`.
					 */
					if ( 'lazy' !== strtolower( $value ) ) {
						$out[ $name ] = $value;
					}
					break;

				case 'security':
					/*
					 * Omit the `security` attribute as it now been superseded by the `sandbox` attribute. It is
					 * (apparently) only supported by IE <https://stackoverflow.com/a/20071528>.
					 */
					break;

				case 'marginwidth':
				case 'marginheight':
					// These attributes have been obsolete since HTML5. If they have the value `0` they can be omitted.
					if ( '0' !== $value ) {
						$out[ $name ] = $value;
					}
					break;

				case 'data-amp-resizable':
					$out['resizable'] = '';
					break;

				case 'data-amp-overflow-text':
					// No need to copy.
					break;

				case 'type':
					/*
					 * Omit the `type` attribute if its value is `text/html`. Popular embed providers such as Amazon
					 * Kindle use this non-standard attribute, which is apparently a vestige from usage on <object>.
					 */
					if ( 'text/html' !== strtolower( $value ) ) {
						$out[ $name ] = $value;
					}
					break;

				default:
					$out[ $name ] = $value;
					break;
			}
		}

		if ( ! isset( $out['sandbox'] ) ) {
			$out['sandbox'] = self::SANDBOX_DEFAULTS;
		}

		// Remove allow-same-origin from sandbox if required.
		if ( $remove_allow_same_origin ) {
			$out['sandbox'] = trim( preg_replace( '/(^|\s)allow-same-origin(\s|$)/', ' ', $out['sandbox'] ) );
		}

		return $out;
	}

	/**
	 * Obtain the origin part of a given URL (scheme, host, port).
	 *
	 * @param string $url URL.
	 * @return string|null Origin URL or null if parse failed.
	 */
	private function get_origin_from_url( $url ) {
		$parsed_url = wp_parse_url( $url );
		if ( ! isset( $parsed_url['host'] ) ) {
			return null;
		}
		if ( ! isset( $parsed_url['scheme'] ) ) {
			$parsed_url['scheme'] = wp_parse_url( $this->args['current_origin'], PHP_URL_SCHEME );
		}
		$origin  = $parsed_url['scheme'] . '://';
		$origin .= $parsed_url['host'];
		if ( isset( $parsed_url['port'] ) ) {
			$origin .= ':' . $parsed_url['port'];
		}
		return $origin;
	}

	/**
	 * Builds a DOMElement to use as a placeholder for an <iframe>.
	 *
	 * Important: The element returned must not be block-level (e.g. div) as the PHP DOM parser
	 * will move it out from inside any containing paragraph. So this is why a span is used.
	 *
	 * @since 0.2
	 *
	 * @return DOMElement|false
	 */
	private function build_placeholder() {
		return AMP_DOM_Utils::create_node(
			$this->dom,
			'span',
			[
				'placeholder' => '',
				'class'       => 'amp-wp-iframe-placeholder',
			]
		);
	}

	/**
	 * Sanitizes a boolean character (or string) into a '0' or '1' character.
	 *
	 * @param mixed $value A boolean character to sanitize. If a string containing more than a single
	 *                     character is provided, only the first character is taken into account.
	 *
	 * @return string Returns either '0' or '1'.
	 */
	private function sanitize_boolean_digit( $value ) {

		// Default to false if the value was forgotten.
		if ( empty( $value ) ) {
			return '0';
		}

		// Default to false if the value has an unexpected type.
		if ( ! is_string( $value ) && ! is_numeric( $value ) ) {
			return '0';
		}

		// See: https://github.com/ampproject/amp-wp/issues/2335#issuecomment-493209861.
		switch ( substr( (string) $value, 0, 1 ) ) {
			case '1':
			case 'y':
			case 'Y':
				return '1';
		}

		return '0';
	}
}
PK.3Y�a4�{K{K:bunyad-amp/includes/sanitizers/class-amp-img-sanitizer.php<?php
/**
 * Class AMP_Img_Sanitizer.
 *
 * @package AMP
 */

use AmpProject\AmpWP\ValidationExemption;
use AmpProject\DevMode;
use AmpProject\Extension;
use AmpProject\Dom\Element;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag;
use AmpProject\Layout;

/**
 * Class AMP_Img_Sanitizer
 *
 * Converts <img> tags to <amp-img> or <amp-anim>
 *
 * @internal
 */
class AMP_Img_Sanitizer extends AMP_Base_Sanitizer {
	use AMP_Noscript_Fallback;

	/**
	 * Value used for width attribute when $attributes['width'] is empty.
	 *
	 * @since 0.2
	 *
	 * @const int
	 */
	const FALLBACK_WIDTH = 600;

	/**
	 * Value used for height attribute when $attributes['height'] is empty.
	 *
	 * @since 0.2
	 *
	 * @const int
	 */
	const FALLBACK_HEIGHT = 400;

	/**
	 * Tag.
	 *
	 * @var string HTML <img> tag to identify and replace with AMP version.
	 *
	 * @since 0.2
	 */
	public static $tag = 'img';

	/**
	 * Default args.
	 *
	 * @var array
	 */
	protected $DEFAULT_ARGS = [
		'add_noscript_fallback' => true,
		'native_img_used'       => false,
		'allow_picture'         => false,
	];

	/**
	 * Animation extension.
	 *
	 * @var string
	 */
	private static $anim_extension = '.gif';

	/**
	 * Get mapping of HTML selectors to the AMP component selectors which they may be converted into.
	 *
	 * @return array Mapping.
	 */
	public function get_selector_conversion_mapping() {
		if ( $this->args['native_img_used'] ) {
			return [];
		}
		return [
			Tag::IMG => [
				'amp-img',
				'amp-anim',
			],
		];
	}

	/**
	 * Convert picture element into image element or mark as px verified.
	 *
	 * @return void
	 */
	protected function process_picture_elements() {

		$picture_img_query = $this->dom->xpath->query( '//picture/img' );

		/** @var Element $img_element */
		foreach ( $picture_img_query as $img_element ) {
			/** @var Element $picture_element */
			$picture_element = $img_element->parentNode;

			if ( true === $this->args['allow_picture'] ) {
				ValidationExemption::mark_node_as_px_verified( $picture_element );
				foreach ( $picture_element->getElementsByTagName( Tag::SOURCE ) as $source_element ) {
					ValidationExemption::mark_node_as_px_verified( $source_element );

					// Mark width/height attributes as PX-verified as well since they aren't known yet in the validator. See <https://github.com/whatwg/html/pull/5894>.
					foreach ( [ Attribute::WIDTH, Attribute::HEIGHT ] as $dimension_attr ) {
						$attr_node = $source_element->getAttributeNode( $dimension_attr );
						if ( $attr_node instanceof DOMAttr ) {
							ValidationExemption::mark_node_as_px_verified( $attr_node );
						}
					}
				}
			} else {
				$picture_element->removeChild( $img_element );
				$picture_element->parentNode->replaceChild( $img_element, $picture_element );
			}
		}
	}

	/**
	 * Sanitize the <img> elements from the HTML contained in this instance's Dom\Document.
	 *
	 * @since 0.2
	 */
	public function sanitize() {

		$this->process_picture_elements();

		/**
		 * Node list.
		 *
		 * @var DOMNodeList $nodes
		 */
		$nodes           = $this->dom->getElementsByTagName( self::$tag );
		$need_dimensions = [];

		$num_nodes = $nodes->length;

		if ( 0 === $num_nodes ) {
			return;
		}

		if ( $this->args['add_noscript_fallback'] && ! $this->args['native_img_used'] ) {
			$this->initialize_noscript_allowed_attributes( self::$tag );
		}

		for ( $i = $num_nodes - 1; $i >= 0; $i-- ) {
			$node = $nodes->item( $i );
			if ( ! $node instanceof Element || DevMode::hasExemptionForNode( $node ) ) {
				continue;
			}

			// Skip element if already inside of an AMP element as a noscript fallback or is a child of `amp-story-player`.
			if (
				$this->is_inside_amp_noscript( $node )
				||
				(
					$node->parentNode instanceof Element
					&&
					(
						Tag::A === $node->parentNode->tagName
						&&
						$node->parentNode->parentNode instanceof Element
						&&
						Extension::STORY_PLAYER === $node->parentNode->parentNode->tagName
					)
				)
			) {
				continue;
			}

			if ( ! $node->hasAttribute( Attribute::SRC ) || '' === trim( $node->getAttribute( Attribute::SRC ) ) ) {
				$this->remove_invalid_child(
					$node,
					[
						'code'       => AMP_Tag_And_Attribute_Sanitizer::ATTR_REQUIRED_BUT_MISSING,
						'attributes' => [ Attribute::SRC ],
						'spec_name'  => 'amp-img',
					]
				);
				continue;
			}

			// Replace img with amp-pixel when dealing with tracking pixels.
			if ( self::is_tracking_pixel_url( $node->getAttribute( Attribute::SRC ) ) ) {
				$attributes = [
					Attribute::SRC    => $node->getAttribute( Attribute::SRC ),
					Attribute::LAYOUT => Layout::NODISPLAY,
				];
				foreach ( [ Attribute::REFERRERPOLICY ] as $allowed_attribute ) {
					if ( $node->hasAttribute( $allowed_attribute ) ) {
						$attributes[ $allowed_attribute ] = $node->getAttribute( $allowed_attribute );
					}
				}
				$amp_pixel_node = AMP_DOM_Utils::create_node(
					$this->dom,
					Extension::PIXEL,
					$attributes
				);
				$node->parentNode->replaceChild( $amp_pixel_node, $node );
				continue;
			}

			// Short-circuit emoji images from needing to make requests out to https://s.w.org/.
			if ( 'wp-smiley' === $node->getAttribute( Attribute::CLASS_ ) ) {
				$node->setAttribute( Attribute::WIDTH, '72' );
				$node->setAttribute( Attribute::HEIGHT, '72' );
				if ( ! $this->args['native_img_used'] ) {
					$node->setAttribute( Attribute::NOLOADING, '' );
				}
			}

			if ( $node->hasAttribute( 'data-amp-layout' ) ) {
				$layout = $node->getAttribute( 'data-amp-layout' );
			} elseif ( $node->hasAttribute( Attribute::LAYOUT ) ) {
				$layout = $node->getAttribute( Attribute::LAYOUT );
			} else {
				$layout = Layout::INTRINSIC;
			}

			$has_width  = is_numeric( $node->getAttribute( Attribute::WIDTH ) );
			$has_height = is_numeric( $node->getAttribute( Attribute::HEIGHT ) );

			// Determine which images need their dimensions determined/extracted.
			$missing_dimensions = (
				( ! $has_height && Layout::FIXED_HEIGHT === $layout )
				||
				(
					( ! $has_width || ! $has_height )
					&&
					in_array( $layout, [ Layout::FIXED, Layout::RESPONSIVE, Layout::INTRINSIC ], true )
				)
			);
			if ( $missing_dimensions ) {
				$need_dimensions[ $node->getAttribute( Attribute::SRC ) ][] = $node;
			} else {
				$this->adjust_and_replace_node( $node );
			}
		}

		$this->determine_dimensions( $need_dimensions );
		$this->adjust_and_replace_nodes_in_array_map( $need_dimensions );
	}

	/**
	 * "Filter" HTML attributes for <amp-anim> elements.
	 *
	 * @since 0.2
	 *
	 * @param string[] $attributes {
	 *      Attributes.
	 *
	 *      @type string $src Image URL - Pass along if found
	 *      @type string $alt <img> `alt` attribute - Pass along if found
	 *      @type string $class <img> `class` attribute - Pass along if found
	 *      @type string $srcset <img> `srcset` attribute - Pass along if found
	 *      @type string $sizes <img> `sizes` attribute - Pass along if found
	 *      @type string $on <img> `on` attribute - Pass along if found
	 *      @type string $attribution <img> `attribution` attribute - Pass along if found
	 *      @type int $width <img> width attribute - Set to numeric value if px or %
	 *      @type int $height <img> width attribute - Set to numeric value if px or %
	 * }
	 * @return array Returns HTML attributes; removes any not specifically declared above from input.
	 */
	private function filter_attributes( $attributes ) {
		$out = [];

		foreach ( $attributes as $name => $value ) {
			switch ( $name ) {
				case Attribute::WIDTH:
				case Attribute::HEIGHT:
					$out[ $name ] = $this->sanitize_dimension( $value, $name );
					break;

				case 'data-amp-layout':
					$out['layout'] = $value;
					break;

				case 'data-amp-noloading':
					$out['noloading'] = $value;
					break;

				// Skip directly copying new web platform attributes from img to amp-img which are largely handled by AMP already.
				case Attribute::INTRINSICSIZE: // Responsive images handled by amp-img directly.
					break;

				case Attribute::LOADING: // Lazy-loading handled by amp-img natively.
					if ( 'lazy' !== strtolower( $value ) ) {
						$out[ $name ] = $value;
					}
					break;

				case Attribute::DECODING: // Async decoding handled by AMP.
					if ( 'async' !== strtolower( $value ) ) {
						$out[ $name ] = $value;
					}
					break;

				// Avoid adding `fetchpriority` to amp-img element.
				case Attribute::FETCHPRIORITY:
					break;

				default:
					$out[ $name ] = $value;
					break;
			}
		}

		return $out;
	}

	/**
	 * Determine width and height attribute values for images without them.
	 *
	 * Attempt to determine actual dimensions, otherwise set reasonable defaults.
	 *
	 * @param Element[][] $need_dimensions Map <img> @src URLs to node for images with missing dimensions.
	 */
	private function determine_dimensions( $need_dimensions ) {

		$dimensions_by_url = AMP_Image_Dimension_Extractor::extract( array_keys( $need_dimensions ) );

		foreach ( $dimensions_by_url as $url => $dimensions ) {
			foreach ( $need_dimensions[ $url ] as $node ) {
				if ( ! $node instanceof Element ) {
					continue;
				}
				$class = $node->getAttribute( Attribute::CLASS_ );
				if ( ! $class ) {
					$class = '';
				}
				if ( ! $dimensions ) {
					$class .= ' amp-wp-unknown-size';
				}

				$width  = isset( $this->args['content_max_width'] ) ? $this->args['content_max_width'] : self::FALLBACK_WIDTH;
				$height = self::FALLBACK_HEIGHT;
				if ( ! empty( $dimensions['width'] ) ) {
					$width = $dimensions['width'];
				}
				if ( ! empty( $dimensions['height'] ) ) {
					$height = $dimensions['height'];
				}

				if ( ! is_numeric( $node->getAttribute( Attribute::WIDTH ) ) ) {

					// Let width have the right aspect ratio based on the height attribute.
					if (
						is_numeric( $node->getAttribute( Attribute::HEIGHT ) )
						&&
						! empty( $dimensions['height'] )
						&&
						! empty( $dimensions['width'] )
					) {
						$width = ( (float) $node->getAttribute( Attribute::HEIGHT ) * $dimensions['width'] ) / $dimensions['height'];
					}

					$node->setAttribute( Attribute::WIDTH, $width );
					if ( empty( $dimensions['width'] ) ) {
						$class .= ' amp-wp-unknown-width';
					}
				}
				if ( ! is_numeric( $node->getAttribute( Attribute::HEIGHT ) ) ) {

					// Let height have the right aspect ratio based on the width attribute.
					if (
						is_numeric( $node->getAttribute( Attribute::WIDTH ) )
						&&
						! empty( $dimensions['height'] )
						&&
						! empty( $dimensions['width'] )
					) {
						$height = ( (float) $node->getAttribute( Attribute::WIDTH ) * $dimensions['height'] ) / $dimensions['width'];
					}

					$node->setAttribute( Attribute::HEIGHT, $height );
					if ( empty( $dimensions['height'] ) ) {
						$class .= ' amp-wp-unknown-height';
					}
				}
				$node->setAttribute( Attribute::CLASS_, trim( $class ) );
			}
		}
	}

	/**
	 * Now that all images have width and height attributes, make final tweaks and replace original image nodes
	 *
	 * @param DOMNodeList[] $node_lists Img DOM nodes (now with width and height attributes).
	 */
	private function adjust_and_replace_nodes_in_array_map( $node_lists ) {
		foreach ( $node_lists as $node_list ) {
			foreach ( $node_list as $node ) {
				$this->adjust_and_replace_node( $node );
			}
		}
	}

	/**
	 * Make final modifications to DOMNode
	 *
	 * @param Element $node The img element to adjust and replace.
	 */
	private function adjust_and_replace_node( Element $node ) {
		if ( $this->args['native_img_used'] || ( $node->parentNode instanceof Element && Tag::PICTURE === $node->parentNode->tagName ) ) {
			$attributes = $this->maybe_add_lightbox_attributes( [], $node ); // @todo AMP doesn't support lightbox on <img> yet.

			/*
			 * Mark lightbox as px-verified attribute until it's supported by AMP spec.
			 * @see <https://github.com/ampproject/amp-wp/issues/7152#issuecomment-1157933188>
			 * @todo Remove this once lightbox is added in `lightboxable-elements` for native img tag in AMP spec.
			 */
			if ( isset( $attributes['data-amp-lightbox'] ) || $node->hasAttribute( Attribute::LIGHTBOX ) ) {
				$node_attr = $node->getAttributeNode( Attribute::LIGHTBOX );
				if ( ! $node_attr instanceof DOMAttr ) {
					$node_attr = $this->dom->createAttribute( Attribute::LIGHTBOX );
					$node->setAttributeNode( $node_attr );
				}
				ValidationExemption::mark_node_as_px_verified( $node_attr );
			}

			// Set decoding=async by default. See <https://core.trac.wordpress.org/ticket/53232>.
			if ( ! $node->hasAttribute( Attribute::DECODING ) ) {
				$attributes[ Attribute::DECODING ] = 'async';
			}

			// @todo This class should really only be added if we actually have to provide dimensions.
			$attributes[ Attribute::CLASS_ ] = (string) $node->getAttribute( Attribute::CLASS_ );
			if ( ! empty( $attributes[ Attribute::CLASS_ ] ) ) {
				$attributes[ Attribute::CLASS_ ] .= ' ';
			}
			$attributes[ Attribute::CLASS_ ] .= 'amp-wp-enforced-sizes';

			foreach ( $attributes as $name => $value ) {
				$node->setAttribute( $name, $value );
			}
			return;
		}

		$amp_data       = $this->get_data_amp_attributes( $node );
		$old_attributes = AMP_DOM_Utils::get_node_attributes_as_assoc_array( $node );
		$old_attributes = $this->filter_data_amp_attributes( $old_attributes, $amp_data );
		$old_attributes = $this->maybe_add_lightbox_attributes( $old_attributes, $node );

		$new_attributes = $this->filter_attributes( $old_attributes );
		$layout         = isset( $amp_data[ Attribute::LAYOUT ] ) ? $amp_data[ Attribute::LAYOUT ] : false;
		$new_attributes = $this->filter_attachment_layout_attributes( $node, $new_attributes, $layout );

		$this->add_or_append_attribute( $new_attributes, Attribute::CLASS_, 'amp-wp-enforced-sizes' );
		if ( empty( $new_attributes[ Attribute::LAYOUT ] ) && ! empty( $new_attributes[ Attribute::HEIGHT ] ) && ! empty( $new_attributes[ Attribute::WIDTH ] ) ) {
			// Use responsive images when a theme supports wide and full-bleed images.
			if (
				! empty( $this->args['align_wide_support'] )
				&& $node->parentNode instanceof Element
				&& 'figure' === $node->parentNode->nodeName
				&& preg_match( '/(^|\s)(alignwide|alignfull)(\s|$)/', $node->parentNode->getAttribute( Attribute::CLASS_ ) )
			) {
				$new_attributes[ Attribute::LAYOUT ] = Layout::RESPONSIVE;
			} else {
				$new_attributes[ Attribute::LAYOUT ] = Layout::INTRINSIC;
			}
		}

		if ( isset( $new_attributes[ Attribute::SIZES ] ) ) {
			$new_attributes[ Attribute::DISABLE_INLINE_WIDTH ] = '';
		}

		if ( $this->is_gif_url( $new_attributes['src'] ) ) {
			$this->did_convert_elements = true;

			$new_tag = 'amp-anim';
		} else {
			$new_tag = 'amp-img';
		}

		// Remove ID since it would be a duplicate and because if it is not removed before replacing the element with
		// another element that has the same ID, the removed element would still get returned by getElementById even
		// when it is no longer in the Document.
		$node->removeAttribute( Attribute::ID );

		$img_node = AMP_DOM_Utils::create_node( $this->dom, $new_tag, $new_attributes );
		$node->parentNode->replaceChild( $img_node, $node );

		/*
		 * Prevent inline style on an image from rendering the amp-img invisible or conflicting with the required display.
		 * This could eventually be expanded to fixup inline styles for elements other than images, but the reality
		 * is that this is not going to completely solve the problem for images as well, since it will not handle the
		 * case where an image gets a display:inline style via a style rule.
		 * See <https://github.com/ampproject/amp-wp/issues/1803>.
		 */
		if ( $img_node->hasAttribute( Attribute::STYLE ) ) {
			$layout = $img_node->getAttribute( Attribute::LAYOUT );
			if ( in_array( $layout, [ Layout::FIXED_HEIGHT, Layout::RESPONSIVE, Layout::FILL, Layout::FLEX_ITEM ], true ) ) {
				$required_display = 'block';
			} elseif ( Layout::NODISPLAY === $layout ) {
				$required_display = 'none';
			} else {
				// This is also the default for any AMP element (.i-amphtml-element).
				$required_display = 'inline-block';
			}
			$img_node->setAttribute(
				Attribute::STYLE,
				preg_replace(
					'/\bdisplay\s*:\s*[a-z\-]+\b/',
					"display:$required_display",
					$img_node->getAttribute( Attribute::STYLE )
				)
			);
		}

		if ( $this->args['add_noscript_fallback'] ) {
			// Preserve original node in noscript for no-JS environments.
			$this->append_old_node_noscript( $img_node, $node, $this->dom );
		}
	}

	/**
	 * Set lightbox attributes.
	 *
	 * @param array   $attributes Array of attributes.
	 * @param DomNode $node Array of AMP attributes.
	 * @return array Updated attributes.
	 */
	private function maybe_add_lightbox_attributes( $attributes, $node ) {
		$parent_node = $node->parentNode;
		if ( ! ( $parent_node instanceof Element ) || ! ( $parent_node->parentNode instanceof Element ) ) {
			return $attributes;
		}

		$media_file_url = wp_parse_url( $parent_node->getAttribute( Attribute::HREF ), PHP_URL_PATH );

		/** @var Element $node */
		$img_src = wp_parse_url( $node->getAttribute( Attribute::SRC ), PHP_URL_PATH );

		$is_node_wrapped_in_media_file_link = (
			Tag::A === $parent_node->tagName
			&&
			$media_file_url === $img_src
		);

		if ( Tag::FIGURE !== $parent_node->tagName && ! $is_node_wrapped_in_media_file_link ) {
			return $attributes;
		}

		$parent_attributes = [];

		if ( Tag::FIGURE === $parent_node->tagName ) {
			$parent_attributes = AMP_DOM_Utils::get_node_attributes_as_assoc_array( $parent_node );
		} elseif ( Tag::A === $parent_node->tagName && Tag::FIGURE === $parent_node->parentNode->tagName ) {
			$parent_attributes = AMP_DOM_Utils::get_node_attributes_as_assoc_array( $parent_node->parentNode );
		}

		if ( isset( $parent_attributes['data-amp-lightbox'] ) && true === filter_var( $parent_attributes['data-amp-lightbox'], FILTER_VALIDATE_BOOLEAN ) ) {
			$attributes['data-amp-lightbox']   = '';
			$attributes[ Attribute::LIGHTBOX ] = '';

			/*
			 * Removes the <a> if the image is wrapped in one, as it can prevent the lightbox from working.
			 * But this only removes the <a> if it links to the media file, not the attachment page.
			 */
			if ( $is_node_wrapped_in_media_file_link ) {
				$node->parentNode->parentNode->replaceChild( $node, $node->parentNode );
			}
		}

		return $attributes;
	}

	/**
	 * Determines if a URL is considered a GIF URL
	 *
	 * @since 0.2
	 *
	 * @param string $url URL to inspect for GIF vs. JPEG or PNG.
	 *
	 * @return bool Returns true if $url ends in `.gif`
	 */
	private function is_gif_url( $url ) {
		$ext  = self::$anim_extension;
		$path = wp_parse_url( $url, PHP_URL_PATH );
		return substr( $path, -strlen( $ext ) ) === $ext;
	}

	/**
	 * Determines if a URL is a known tracking pixel URL.
	 *
	 * Currently, only Facebook tracking pixel URL is detected.
	 *
	 * @since 2.2.2
	 *
	 * @param string $url URL to inspect.
	 *
	 * @return bool Returns true if $url is a tracking pixel URL.
	 */
	private static function is_tracking_pixel_url( $url ) {
		$parsed_url = wp_parse_url( $url );

		return (
			isset( $parsed_url['host'], $parsed_url['path'] )
			&&
			'facebook.com' === str_replace( 'www.', '', $parsed_url['host'] )
			&&
			'/tr' === $parsed_url['path']
		);
	}
}
PK.3Y۱[�k
k
=bunyad-amp/includes/sanitizers/class-amp-layout-sanitizer.php<?php
/**
 * Class AMP_Layout_Sanitizer
 *
 * @since 1.5.0
 * @package AMP
 */

use AmpProject\Layout;

/**
 * Class AMP_Layout_Sanitizer
 *
 * @since 1.5.0
 * @internal
 */
class AMP_Layout_Sanitizer extends AMP_Base_Sanitizer {
	use AMP_Noscript_Fallback;

	/**
	 * Sanitize any element that has the `layout` or `data-amp-layout` attribute.
	 */
	public function sanitize() {
		$xpath = new DOMXPath( $this->dom );

		/**
		 * Sanitize AMP nodes to be AMP compatible. Elements with the `layout` attribute will be validated by
		 * `AMP_Tag_And_Attribute_Sanitizer`.
		 */
		$nodes = $xpath->query( '//*[ starts-with( name(), "amp-" ) and not( @layout ) and ( @data-amp-layout or @width or @height or @style ) ]' );

		foreach ( $nodes as $node ) {
			/**
			 * Element.
			 *
			 * @var DOMElement $node
			 */

			// Layout does not apply inside of noscript.
			if ( $this->is_inside_amp_noscript( $node ) ) {
				continue;
			}

			$width  = $node->getAttribute( 'width' );
			$height = $node->getAttribute( 'height' );
			$style  = $node->getAttribute( 'style' );

			// The `layout` attribute can also be defined through the `data-amp-layout` attribute.
			if ( $node->hasAttribute( 'data-amp-layout' ) ) {
				$layout = $node->getAttribute( 'data-amp-layout' );
				$node->setAttribute( 'layout', $layout );
				$node->removeAttribute( 'data-amp-layout' );
			}

			if ( ! $this->is_empty_attribute_value( $style ) ) {
				$styles = $this->parse_style_string( $style );

				/*
				 * If both height & width descriptors are 100%, or
				 *    width attribute is 100% and height style descriptor is 100%, or
				 *    height attribute is 100% and width style descriptor is 100%
				 * then apply fill layout.
				 */
				if (
					(
						isset( $styles['width'], $styles['height'] ) &&
						( '100%' === $styles['width'] && '100%' === $styles['height'] )
					) ||
					(
						( ! $this->is_empty_attribute_value( $width ) && '100%' === $width ) &&
						( isset( $styles['height'] ) && '100%' === $styles['height'] )
					) ||
					(
						( ! $this->is_empty_attribute_value( $height ) && '100%' === $height ) &&
						( isset( $styles['width'] ) && '100%' === $styles['width'] )
					)
				) {
					unset( $styles['width'], $styles['height'] );
					$node->removeAttribute( 'width' );
					$node->removeAttribute( 'height' );

					if ( empty( $styles ) ) {
						$node->removeAttribute( 'style' );
					} else {
						$node->setAttribute( 'style', $this->reassemble_style_string( $styles ) );
					}

					$this->set_layout_fill( $node );
					continue;
				}
			}

			// If the width & height are `100%` then apply fill layout.
			if ( '100%' === $width && '100%' === $height ) {
				$this->set_layout_fill( $node );
				continue;
			}

			// If the width is `100%`, convert the layout to `fixed-height` and width to `auto`.
			if ( '100%' === $width ) {
				$node->setAttribute( 'width', 'auto' );
				$node->setAttribute( 'layout', Layout::FIXED_HEIGHT );
			}
		}

		$this->did_convert_elements = true;
	}

	/**
	 * Apply the `fill` layout.
	 *
	 * @param DOMElement $node Node.
	 */
	private function set_layout_fill( DOMElement $node ) {
		if ( $node->hasAttribute( 'width' ) && $node->hasAttribute( 'height' ) ) {
			$node->removeAttribute( 'width' );
			$node->removeAttribute( 'height' );
		}

		if ( Layout::FILL !== $node->getAttribute( 'layout' ) ) {
			$node->setAttribute( 'layout', Layout::FILL );
		}
	}
}
PK.3Y��G}�&�&;bunyad-amp/includes/sanitizers/class-amp-link-sanitizer.php<?php
/**
 * Class AMP_Links_Sanitizer.
 *
 * @package AMP
 */

use AmpProject\Dom\Document;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag;

/**
 * Class AMP_Link_Sanitizer.
 *
 * Adapts links for AMP-to-AMP navigation:
 *  - In paired AMP (Transitional and Reader modes), internal links get '?amp' added to them.
 *  - Internal links on AMP pages get rel=amphtml added to them.
 *  - Forms with internal actions get a hidden 'amp' input added to them.
 *  - AMP pages get meta[amp-to-amp-navigation] added to them.
 *  - Any elements in the admin bar are excluded.
 *
 * Adapted from https://gist.github.com/westonruter/f9ee9ea717d52471bae092879e3d52b0
 *
 * @link https://github.com/ampproject/amphtml/issues/12496
 * @since 1.4.0
 * @internal
 */
class AMP_Link_Sanitizer extends AMP_Base_Sanitizer {

	/**
	 * Default meta tag content.
	 *
	 * @var string
	 */
	const DEFAULT_META_CONTENT = 'AMP-Redirect-To; AMP.navigateTo';

	/**
	 * Placeholder for default arguments, to be set in child classes.
	 *
	 * @var array
	 */
	protected $DEFAULT_ARGS = [ // phpcs:ignore WordPress.NamingConventions.ValidVariableName.PropertyNotSnakeCase
		'paired'        => false, // Only set to true when in a paired mode (will be false when amp_is_canonical()). Controls whether query var is added.
		'meta_content'  => self::DEFAULT_META_CONTENT,
		'excluded_urls' => [], // URLs in this won't have AMP-to-AMP links in a paired mode.
	];

	/**
	 * Home host.
	 *
	 * @var string
	 */
	protected $home_host;

	/**
	 * Home path.
	 *
	 * @var string
	 */
	protected $home_path;

	/**
	 * Content path.
	 *
	 * @var string
	 */
	protected $content_path;

	/**
	 * Admin path.
	 *
	 * @var string
	 */
	protected $admin_path;

	/**
	 * Sanitizer constructor.
	 *
	 * @param Document $dom  Document.
	 * @param array    $args Args.
	 */
	public function __construct( $dom, array $args = [] ) {
		if ( ! isset( $args['meta_content'] ) ) {
			$args['meta_content'] = self::DEFAULT_META_CONTENT;
		}

		parent::__construct( $dom, $args );

		$parsed_home        = wp_parse_url( home_url( '/' ) );
		$this->home_host    = $parsed_home['host'] ?? null;
		$this->home_path    = $parsed_home['path'] ?? '/';
		$this->content_path = wp_parse_url( content_url( '/' ), PHP_URL_PATH );
		$this->admin_path   = wp_parse_url( admin_url(), PHP_URL_PATH );
	}

	/**
	 * Sanitize.
	 */
	public function sanitize() {
		if ( ! empty( $this->args['meta_content'] ) ) {
			$this->add_meta_tag( $this->args['meta_content'] );
		}

		$this->process_links();
	}

	/**
	 * Add the amp-to-amp-navigation meta tag.
	 *
	 * @param string $content The content for the meta tag, for example 'AMP-Redirect-To; AMP.navigateTo'.
	 * @return DOMElement|null The added meta element if successful.
	 */
	public function add_meta_tag( $content = self::DEFAULT_META_CONTENT ) {
		if ( ! $content ) {
			return null;
		}
		$meta = $this->dom->createElement( 'meta' );
		$meta->setAttribute( 'name', 'amp-to-amp-navigation' );
		$meta->setAttribute( 'content', $content );
		$this->dom->head->appendChild( $meta );
		return $meta;
	}

	/**
	 * Process links by adding AMP query var to links in paired mode and adding rel=amphtml.
	 */
	public function process_links() {
		// Remove admin bar from DOM to prevent mutating it.
		/** @var DOMElement|null */
		$admin_bar_container = $this->dom->getElementById( 'wpadminbar' );

		/** @var DOMComment|null */
		$admin_bar_placeholder = null;

		if ( $admin_bar_container ) {
			$admin_bar_placeholder = $this->dom->createComment( 'wpadminbar' );
			$admin_bar_container->parentNode->replaceChild( $admin_bar_placeholder, $admin_bar_container );
		}

		$link_query = $this->dom->xpath->query( '//*[ local-name() = "a" or local-name() = "area" ][ @href ]' );
		foreach ( $link_query as $link ) {
			$this->process_element( $link, Attribute::HREF );
		}

		$form_query = $this->dom->xpath->query(
			'
			//form[
				@action
				and
				(
					not( @method )
					or
					translate( @method, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz") = "get"
				)
			]
			'
		);
		foreach ( $form_query as $form ) {
			$this->process_element( $form, Attribute::ACTION );
		}

		// Replace the admin bar after mutations are done.
		if ( $admin_bar_container && $admin_bar_placeholder ) {
			$admin_bar_placeholder->parentNode->replaceChild( $admin_bar_container, $admin_bar_placeholder );
		}
	}

	/**
	 * Check if element is descendant of a template element.
	 *
	 * @param DOMElement $node Node.
	 * @return bool Descendant of template.
	 */
	private function is_descendant_of_template_element( DOMElement $node ) {
		while ( $node instanceof DOMElement ) {
			$parent = $node->parentNode;
			if ( $parent instanceof DOMElement && Tag::TEMPLATE === $parent->tagName ) {
				return true;
			}
			$node = $parent;
		}
		return false;
	}

	/**
	 * Process element.
	 *
	 * @param DOMElement $element        Element to process.
	 * @param string     $attribute_name Attribute name that contains the URL.
	 */
	private function process_element( DOMElement $element, $attribute_name ) {
		$url = $element->getAttribute( $attribute_name );

		// Skip page anchor links or non-frontend links.
		if ( empty( $url ) || '#' === substr( $url, 0, 1 ) || ! $this->is_frontend_url( $url ) ) {
			return;
		}

		// Skip links with template variables.
		if ( preg_match( '/{{[^}]+?}}/', $url ) && $this->is_descendant_of_template_element( $element ) ) {
			return;
		}

		/** @var array */
		$rel = [];

		// Gather the rel values that were attributed to the element.
		// Note that links and forms may both have this attribute.
		// See <https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/rel>.
		if ( $element->hasAttribute( Attribute::REL ) ) {
			$rel = array_filter( preg_split( '/\s+/', trim( $element->getAttribute( Attribute::REL ) ) ) );
		}

		$excluded = (
			in_array( Attribute::REL_NOAMPHTML, $rel, true )
			||
			in_array( strtok( $url, '#' ), $this->args['excluded_urls'], true )
		);

		/**
		 * Filters whether AMP-to-AMP is excluded for an element.
		 *
		 * The element may be either a link (`a` or `area`) or a `form`.
		 *
		 * @param bool       $excluded Excluded. Default value is whether element already has a `noamphtml` link relation or the URL is among `excluded_urls`.
		 * @param string     $url      URL considered for exclusion.
		 * @param string[]   $rel      Link relations.
		 * @param DOMElement $element  The element considered for excluding from AMP-to-AMP linking. May be instance of `a`, `area`, or `form`.
		 */
		$excluded = (bool) apply_filters( 'amp_to_amp_linking_element_excluded', $excluded, $url, $rel, $element );

		$query_vars = [];

		if ( ! $excluded ) {
			$rel = array_diff(
				$rel,
				[ Attribute::REL_NOAMPHTML ]
			);
			if ( ! empty( $rel ) ) {
				$element->setAttribute( Attribute::REL, implode( ' ', $rel ) );
			} else {
				$element->removeAttribute( Attribute::REL );
			}
		}

		/**
		 * Filters the query vars that are added to the link/form which is considered for AMP-to-AMP linking.
		 *
		 * @internal
		 *
		 * @param string[]   $query_vars Query vars.
		 * @param bool       $excluded   Whether the element was excluded.
		 * @param string     $url        URL considered for exclusion.
		 * @param string[]   $rel        Link relations.
		 * @param DOMElement $element    Element.
		 */
		$query_vars = apply_filters( 'amp_to_amp_linking_element_query_vars', $query_vars, $excluded, $url, $element, $rel );

		if ( ! empty( $query_vars ) ) {
			$url = add_query_arg( $query_vars, $url );
		}

		// Only add the AMP query var when requested (in Transitional or Reader mode).
		if ( ! $excluded && ! empty( $this->args['paired'] ) ) {
			$url = amp_add_paired_endpoint( $url );
		}

		$element->setAttribute( $attribute_name, $url );

		// Given that form action query vars get overridden by the inputs, they need to be extracted and added as inputs.
		if ( Tag::FORM === $element->nodeName ) {
			$query = wp_parse_url( $url, PHP_URL_QUERY );
			if ( $query ) {
				$parsed_query_vars = [];
				wp_parse_str( $query, $parsed_query_vars );
				$query_vars = array_merge( $query_vars, $parsed_query_vars );
			}

			foreach ( $query_vars as $name => $value ) {
				$input = $this->dom->createElement( Tag::INPUT );
				$input->setAttribute( Attribute::NAME, $name );
				$input->setAttribute( Attribute::VALUE, $value );
				$input->setAttribute( Attribute::TYPE, 'hidden' );
				$element->appendChild( $input );
			}
		}
	}

	/**
	 * Determine whether a URL is for the frontend.
	 *
	 * @param string $url URL.
	 * @return bool Whether it is a frontend URL.
	 */
	public function is_frontend_url( $url ) {
		$parsed_url = wp_parse_url( $url );

		if ( ! empty( $parsed_url['scheme'] ) && ! in_array( strtolower( $parsed_url['scheme'] ), [ 'http', 'https' ], true ) ) {
			return false;
		}

		// Skip adding query var to links on other URLs.
		if ( ! empty( $parsed_url['host'] ) && $this->home_host !== $parsed_url['host'] ) {
			return false;
		}

		// Skip adding query var to links on other paths.
		if ( ! empty( $parsed_url['path'] ) && 0 !== strpos( $parsed_url['path'], $this->home_path ) ) {
			return false;
		}

		// Skip adding query var to PHP files (e.g. wp-login.php).
		if ( ! empty( $parsed_url['path'] ) && preg_match( '/\.php$/', $parsed_url['path'] ) ) {
			return false;
		}

		// Skip adding query var to feed URLs.
		if ( ! empty( $parsed_url['path'] ) && preg_match( ':/feed/(\w+/)?$:', $parsed_url['path'] ) ) {
			return false;
		}

		// Skip adding query var to the admin.
		if ( ! empty( $parsed_url['path'] ) && false !== strpos( $parsed_url['path'], $this->admin_path ) ) {
			return false;
		}

		// Skip adding query var to content links (e.g. images).
		if ( ! empty( $parsed_url['path'] ) && false !== strpos( $parsed_url['path'], $this->content_path ) ) {
			return false;
		}

		return true;
	}
}
PK.3Y�5&	+	+;bunyad-amp/includes/sanitizers/class-amp-meta-sanitizer.php<?php
/**
 * Class AMP_Meta_Sanitizer.
 *
 * Ensure required markup is present for valid AMP pages.
 *
 * @todo Rename to something like AMP_Ensure_Required_Markup_Sanitizer.
 *
 * @link https://amp.dev/documentation/guides-and-tutorials/start/create/basic_markup/?format=websites#required-mark-up
 * @package AMP
 */

use AmpProject\Encoding;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag;

/**
 * Class AMP_Meta_Sanitizer.
 *
 * Sanitizes meta tags found in the header.
 *
 * @since 1.5.0
 * @internal
 */
class AMP_Meta_Sanitizer extends AMP_Base_Sanitizer {

	/**
	 * Default args.
	 *
	 * @var array
	 */
	protected $DEFAULT_ARGS = [ // phpcs:ignore WordPress.NamingConventions.ValidVariableName.PropertyNotSnakeCase
		'remove_initial_scale_viewport_property' => true,
	];

	/**
	 * Tag.
	 *
	 * @var string HTML <meta> tag to identify and replace with AMP version.
	 */
	public static $tag = 'meta';

	/*
	 * Tags array keys.
	 */
	const TAG_CHARSET        = 'charset';
	const TAG_HTTP_EQUIV     = 'http-equiv';
	const TAG_VIEWPORT       = 'viewport';
	const TAG_AMP_SCRIPT_SRC = 'amp_script_src';
	const TAG_OTHER          = 'other';

	/**
	 * Associative array of DOMElement arrays.
	 *
	 * Each key in the root level defines one group of meta tags to process.
	 *
	 * @var array $tags {
	 *     An array of meta tag groupings.
	 *
	 *     @type DOMElement[] $charset                  Charset meta tag(s).
	 *     @type DOMElement[] $viewport                 Viewport meta tag(s).
	 *     @type DOMElement[] $amp_script_src           <amp-script> source meta tags.
	 *     @type DOMElement[] $other                    Remaining meta tags.
	 * }
	 */
	protected $meta_tags = [
		self::TAG_CHARSET        => [],
		self::TAG_HTTP_EQUIV     => [],
		self::TAG_VIEWPORT       => [],
		self::TAG_AMP_SCRIPT_SRC => [],
		self::TAG_OTHER          => [],
	];

	/**
	 * Viewport settings to use for AMP markup.
	 *
	 * @var string
	 */
	const AMP_VIEWPORT = 'width=device-width';

	/**
	 * Spec name for the tag spec for meta elements that are allowed in the body.
	 *
	 * @since 1.5.2
	 * @var string
	 */
	const BODY_ANCESTOR_META_TAG_SPEC_NAME = 'meta name= and content=';

	/**
	 * Get tag spec for meta tags which are allowed in the body.
	 *
	 * @since 1.5.2
	 * @return string Deny pattern.
	 */
	private function get_body_meta_tag_name_attribute_deny_pattern() {
		static $pattern = null;
		if ( null === $pattern ) {
			$tag_spec = current(
				array_filter(
					AMP_Allowed_Tags_Generated::get_allowed_tag( 'meta' ),
					static function ( $spec ) {
						return isset( $spec['tag_spec']['spec_name'] ) && self::BODY_ANCESTOR_META_TAG_SPEC_NAME === $spec['tag_spec']['spec_name'];
					}
				)
			);
			$pattern  = '/' . $tag_spec['attr_spec_list']['name']['disallowed_value_regex'] . '/';
		}
		return $pattern;
	}

	/**
	 * Sanitize.
	 */
	public function sanitize() {
		$meta_elements = iterator_to_array( $this->dom->getElementsByTagName( static::$tag ), false );

		foreach ( $meta_elements as $meta_element ) {
			/**
			 * Meta tag to process.
			 *
			 * @var DOMElement $meta_element
			 */
			if ( $meta_element->hasAttribute( Attribute::CHARSET ) ) {
				$this->meta_tags[ self::TAG_CHARSET ][] = $meta_element->parentNode->removeChild( $meta_element );
			} elseif ( $meta_element->hasAttribute( Attribute::HTTP_EQUIV ) ) {
				$this->meta_tags[ self::TAG_HTTP_EQUIV ][] = $meta_element->parentNode->removeChild( $meta_element );
			} elseif ( Attribute::VIEWPORT === $meta_element->getAttribute( Attribute::NAME ) ) {
				$this->meta_tags[ self::TAG_VIEWPORT ][] = $meta_element->parentNode->removeChild( $meta_element );
			} elseif ( Attribute::AMP_SCRIPT_SRC === $meta_element->getAttribute( Attribute::NAME ) ) {
				$this->meta_tags[ self::TAG_AMP_SCRIPT_SRC ][] = $meta_element->parentNode->removeChild( $meta_element );
			} elseif (
				$meta_element->hasAttribute( 'name' )
				&&
				preg_match( $this->get_body_meta_tag_name_attribute_deny_pattern(), $meta_element->getAttribute( 'name' ) )
			) {
				$this->meta_tags[ self::TAG_OTHER ][] = $meta_element->parentNode->removeChild( $meta_element );
			}
		}

		$this->ensure_charset_is_present();
		$this->ensure_viewport_is_present();

		$this->process_amp_script_meta_tags();

		$this->re_add_meta_tags_in_optimized_order();

		$this->ensure_boilerplate_is_present();
	}

	/**
	 * Always ensure that we have an HTML 5 charset meta tag.
	 *
	 * The charset is set to utf-8, which is what AMP requires.
	 */
	protected function ensure_charset_is_present() {
		if ( ! empty( $this->meta_tags[ self::TAG_CHARSET ] ) ) {
			return;
		}

		$this->meta_tags[ self::TAG_CHARSET ][] = $this->create_charset_element();
	}

	/**
	 * Always ensure we have a viewport tag.
	 *
	 * The viewport defaults to 'width=device-width', which is the bare minimum that AMP requires.
	 * If there are `@viewport` style rules, these will have been moved into the content attribute of their own meta[name=viewport]
	 * tags by the style sanitizer. When there are multiple such meta tags, this method extracts the viewport properties of each
	 * and then merges them into a single meta[name=viewport] tag. Any invalid properties will get removed by the
	 * tag-and-attribute sanitizer.
	 */
	protected function ensure_viewport_is_present() {
		if ( empty( $this->meta_tags[ self::TAG_VIEWPORT ] ) ) {
			$this->meta_tags[ self::TAG_VIEWPORT ][] = $this->create_viewport_element( static::AMP_VIEWPORT );
		} else {
			// Merge one or more meta[name=viewport] tags into one.
			$parsed_rules = [];

			/**
			 * Meta viewport element.
			 *
			 * @var DOMElement $meta_viewport
			 */
			foreach ( $this->meta_tags[ self::TAG_VIEWPORT ] as $meta_viewport ) {
				$property_pairs = explode( ',', $meta_viewport->getAttribute( 'content' ) );
				foreach ( $property_pairs as $property_pair ) {
					$exploded_pair = explode( '=', $property_pair, 2 );
					if ( isset( $exploded_pair[1] ) ) {
						$parsed_rules[ trim( $exploded_pair[0] ) ] = trim( $exploded_pair[1] );
					}
				}
			}

			// Remove initial-scale=1 to leave just width=device-width in order to avoid a tap delay hurts FID.
			if (
				! empty( $this->args['remove_initial_scale_viewport_property'] )
				&&
				isset( $parsed_rules['initial-scale'] )
				&&
				abs( (float) $parsed_rules['initial-scale'] - 1.0 ) < 0.0001
			) {
				unset( $parsed_rules['initial-scale'] );
			}

			$viewport_value = implode(
				',',
				array_map(
					static function ( $rule_name ) use ( $parsed_rules ) {
						return $rule_name . '=' . $parsed_rules[ $rule_name ];
					},
					array_keys( $parsed_rules )
				)
			);

			$this->meta_tags[ self::TAG_VIEWPORT ] = [ $this->create_viewport_element( $viewport_value ) ];
		}
	}

	/**
	 * Always ensure we have a style[amp-boilerplate] and a noscript>style[amp-boilerplate].
	 *
	 * The AMP boilerplate styles should appear at the end of the head:
	 * "Finally, specify the AMP boilerplate code. By putting the boilerplate code last, it prevents custom styles from
	 * accidentally overriding the boilerplate css rules."
	 *
	 * @link https://amp.dev/documentation/guides-and-tutorials/learn/spec/amp-boilerplate/?format=websites
	 * @link https://amp.dev/documentation/guides-and-tutorials/optimize-and-measure/optimize_amp/#optimize-the-amp-runtime-loading
	 */
	protected function ensure_boilerplate_is_present() {
		$style = $this->dom->xpath->query( './style[ @amp-boilerplate ]', $this->dom->head )->item( 0 );

		if ( ! $style ) {
			$style = $this->dom->createElement( Tag::STYLE );
			$style->setAttribute( Attribute::AMP_BOILERPLATE, '' );
			$style->appendChild( $this->dom->createTextNode( amp_get_boilerplate_stylesheets()[0] ) );
		} else {
			$style->parentNode->removeChild( $style ); // So we can move it.
		}

		$this->dom->head->appendChild( $style );

		$noscript = $this->dom->xpath->query( './noscript[ style[ @amp-boilerplate ] ]', $this->dom->head )->item( 0 );

		if ( ! $noscript ) {
			$noscript = $this->dom->createElement( Tag::NOSCRIPT );
			$style    = $this->dom->createElement( Tag::STYLE );
			$style->setAttribute( Attribute::AMP_BOILERPLATE, '' );
			$style->appendChild( $this->dom->createTextNode( amp_get_boilerplate_stylesheets()[1] ) );
			$noscript->appendChild( $style );
		} else {
			$noscript->parentNode->removeChild( $noscript ); // So we can move it.
		}

		$this->dom->head->appendChild( $noscript );
	}

	/**
	 * Parse and concatenate <amp-script> source meta tags.
	 */
	protected function process_amp_script_meta_tags() {
		if ( empty( $this->meta_tags[ self::TAG_AMP_SCRIPT_SRC ] ) ) {
			return;
		}

		$first_meta_amp_script_src = array_shift( $this->meta_tags[ self::TAG_AMP_SCRIPT_SRC ] );
		$content_values            = [ $first_meta_amp_script_src->getAttribute( Attribute::CONTENT ) ];

		// Merge (and remove) any subsequent meta amp-script-src elements.
		while ( ! empty( $this->meta_tags[ self::TAG_AMP_SCRIPT_SRC ] ) ) {
			$meta_amp_script_src = array_shift( $this->meta_tags[ self::TAG_AMP_SCRIPT_SRC ] );
			$content_values[]    = $meta_amp_script_src->getAttribute( Attribute::CONTENT );
		}

		$first_meta_amp_script_src->setAttribute( Attribute::CONTENT, implode( ' ', $content_values ) );

		$this->meta_tags[ self::TAG_AMP_SCRIPT_SRC ][] = $first_meta_amp_script_src;
	}

	/**
	 * Create a new meta tag for the charset value.
	 *
	 * @return DOMElement New meta tag with requested charset.
	 */
	protected function create_charset_element() {
		return AMP_DOM_Utils::create_node(
			$this->dom,
			Tag::META,
			[
				Attribute::CHARSET => Encoding::AMP,
			]
		);
	}

	/**
	 * Create a new meta tag for the viewport setting.
	 *
	 * @param string $viewport Viewport setting to use.
	 * @return DOMElement New meta tag with requested viewport setting.
	 */
	protected function create_viewport_element( $viewport ) {
		return AMP_DOM_Utils::create_node(
			$this->dom,
			Tag::META,
			[
				Attribute::NAME    => Attribute::VIEWPORT,
				Attribute::CONTENT => $viewport,
			]
		);
	}

	/**
	 * Re-add the meta tags to the <head> node in the optimized order.
	 *
	 * The order is defined by the array entries in $this->meta_tags.
	 *
	 * The optimal loading order for AMP pages is documented at:
	 * https://amp.dev/documentation/guides-and-tutorials/optimize-and-measure/optimize_amp/#optimize-the-amp-runtime-loading
	 *
	 * "1. The first tag should be the meta charset tag, followed by any remaining meta tags."
	 */
	protected function re_add_meta_tags_in_optimized_order() {
		/**
		 * Previous meta tag to append to.
		 *
		 * @var DOMElement|null $previous_meta_tag
		 */
		$previous_meta_tag = null;
		foreach ( $this->meta_tags as $meta_tag_group ) {
			foreach ( $meta_tag_group as $meta_tag ) {
				if ( $previous_meta_tag ) {
					$previous_meta_tag = $this->dom->head->insertBefore( $meta_tag, $previous_meta_tag->nextSibling );
				} else {
					$previous_meta_tag = $this->dom->head->insertBefore( $meta_tag, $this->dom->head->firstChild );
				}
			}
		}
	}
}
PK.3Y>����Lbunyad-amp/includes/sanitizers/class-amp-native-img-attributes-sanitizer.php<?php
/**
 * Native img attributes sanitizer.
 *
 * @since 2.4.0
 * @package AMP
 */

use AmpProject\Html\Attribute;
use AmpProject\Dom\Element;
use AmpProject\Layout;

/**
 * Class AMP_Native_Img_Attributes_Sanitizer
 *
 * @since 2.4.0
 * @internal
 */
class AMP_Native_Img_Attributes_Sanitizer extends AMP_Base_Sanitizer {

	/**
	 * Array of flags used to control sanitization.
	 *
	 * @var array {
	 *      @type bool $native_img_used   Whether native img is being used.
	 * }
	 */
	protected $args;

	/**
	 * Default args.
	 *
	 * @var array
	 */
	protected $DEFAULT_ARGS = [
		'native_img' => false,
	];

	/**
	 * Sanitize the Native img attributes.
	 *
	 * @since 2.3
	 */
	public function sanitize() {
		// Bail if native img is not being used.
		if ( ! isset( $this->args['native_img_used'] ) || ! $this->args['native_img_used'] ) {
			return;
		}

		// Images with layout=fill.
		$img_elements = $this->dom->xpath->query(
			'.//img[ @layout = "fill" ]',
			$this->dom->body
		);
		if ( $img_elements instanceof DOMNodeList ) {
			foreach ( $img_elements as $img_element ) {
				/** @var Element $img_element */
				$img_element->removeAttribute( Attribute::LAYOUT );
				$img_element->addInlineStyle( 'position:absolute;left:0;right:0;top:0;bottom:0;width:100%;height:100%' );
			}
		}

		// Images with object-fit attributes.
		$img_elements = $this->dom->xpath->query(
			'.//img[ @object-fit ]',
			$this->dom->body
		);
		if ( $img_elements instanceof DOMNodeList ) {
			foreach ( $img_elements as $img_element ) {
				/** @var Element $img_element */
				$value = $img_element->getAttribute( Attribute::OBJECT_FIT );
				$img_element->removeAttribute( Attribute::OBJECT_FIT );
				$img_element->addInlineStyle( sprintf( 'object-fit:%s', $value ) );
			}
		}

		// Images with object-position attributes.
		$img_elements = $this->dom->xpath->query(
			'.//img[ @object-position ]',
			$this->dom->body
		);
		if ( $img_elements instanceof DOMNodeList ) {
			foreach ( $img_elements as $img_element ) {
				/** @var Element $img_element */
				$value = $img_element->getAttribute( Attribute::OBJECT_POSITION );
				$img_element->removeAttribute( Attribute::OBJECT_POSITION );
				$img_element->addInlineStyle( sprintf( 'object-position:%s', $value ) );
			}
		}
	}
}
PK.3Y��؏�Hbunyad-amp/includes/sanitizers/class-amp-nav-menu-dropdown-sanitizer.php<?php
/**
 * Class AMP_Nav_Menu_Dropdown_Sanitizer
 *
 * @package AMP
 */

use AmpProject\Dom\Document;

/**
 * Class AMP_Nav_Menu_Dropdown_Sanitizer
 *
 * Handles state for navigation menu dropdown toggles, based on theme support.
 *
 * @since 1.1.0
 * @internal
 */
class AMP_Nav_Menu_Dropdown_Sanitizer extends AMP_Base_Sanitizer {

	/**
	 * Default args.
	 *
	 * @since 1.1.0
	 * @var array
	 */
	protected $DEFAULT_ARGS = [
		'sub_menu_button_class'        => '',
		'sub_menu_button_toggle_class' => '',
		'expand_text'                  => '',
		'collapse_text'                => '',
		'icon'                         => null, // Optional.
		'sub_menu_item_state_id'       => 'navMenuItemExpanded',
	];

	/**
	 * AMP_Nav_Menu_Dropdown_Sanitizer constructor.
	 *
	 * @since 1.1.0
	 *
	 * @param Document $dom  DOM.
	 * @param array    $args Args.
	 */
	public function __construct( $dom, $args = [] ) {
		parent::__construct( $dom, $args );

		$this->args = self::ensure_defaults( $this->args );
	}

	/**
	 * Add filter to manipulate output during output buffering to add AMP-compatible dropdown toggles.
	 *
	 * @since 1.0
	 *
	 * @param array $args Args.
	 */
	public static function add_buffering_hooks( $args = [] ) {
		if ( empty( $args['sub_menu_button_class'] ) || empty( $args['sub_menu_button_toggle_class'] ) ) {
			return;
		}

		$args = self::ensure_defaults( $args );

		/**
		 * Filter the HTML output of a nav menu item to add the AMP dropdown button to reveal the sub-menu.
		 *
		 * @param string $item_output Nav menu item HTML.
		 * @param object $item        Nav menu item.
		 * @return string Modified nav menu item HTML.
		 */
		add_filter(
			'walker_nav_menu_start_el',
			static function( $item_output, $item, $depth, $nav_menu_args ) use ( $args ) {
				// Skip adding buttons to nav menu widgets for now.
				if ( empty( $nav_menu_args->theme_location ) ) {
					return $item_output;
				}

				if ( ! in_array( 'menu-item-has-children', $item->classes, true ) ) {
					return $item_output;
				}

				static $nav_menu_item_number = 0;
				$nav_menu_item_number++;

				$expanded = in_array( 'current-menu-ancestor', $item->classes, true );

				$expanded_state_id = $args['nav_menu_item_state_id'] . $nav_menu_item_number;

				// Create new state for managing storing the whether the sub-menu is expanded.
				$item_output .= sprintf(
					'<amp-state id="%s"><script type="application/json">%s</script></amp-state>',
					esc_attr( $expanded_state_id ),
					wp_json_encode( $expanded )
				);

				$dropdown_button  = '<button';
				$dropdown_button .= sprintf(
					' class="%s" [class]="%s"',
					esc_attr( $args['sub_menu_button_class'] . ( $expanded ? ' ' . $args['sub_menu_button_toggle_class'] : '' ) ),
					esc_attr( sprintf( "%s + ( $expanded_state_id ? %s : '' )", wp_json_encode( $args['sub_menu_button_class'] ), wp_json_encode( ' ' . $args['sub_menu_button_toggle_class'] ) ) )
				);
				$dropdown_button .= sprintf(
					' aria-expanded="%s" [aria-expanded]="%s"',
					esc_attr( wp_json_encode( $expanded ) ),
					esc_attr( "$expanded_state_id ? 'true' : 'false'" )
				);
				$dropdown_button .= sprintf(
					' on="%s"',
					esc_attr( "tap:AMP.setState( { $expanded_state_id: ! $expanded_state_id } )" )
				);
				$dropdown_button .= '>';

				if ( isset( $args['icon'] ) ) {
					$dropdown_button .= $args['icon'];
				}
				if ( isset( $args['expand_text'], $args['collapse_text'] ) ) {
					$dropdown_button .= sprintf(
						'<span class="screen-reader-text" [text]="%s">%s</span>',
						esc_attr( sprintf( "$expanded_state_id ? %s : %s", wp_json_encode( $args['collapse_text'] ), wp_json_encode( $args['expand_text'] ) ) ),
						esc_html( $expanded ? $args['collapse_text'] : $args['expand_text'] )
					);
				}

				$dropdown_button .= '</button>';

				$item_output .= $dropdown_button;
				return $item_output;
			},
			10,
			4
		);
	}

	/**
	 * Method needs to be stubbed to fulfill base class requirements.
	 *
	 * @since 1.1.0
	 */
	public function sanitize() {
		// Empty method body.
	}

	/**
	 * Ensure that some defaults are always set as fallback.
	 *
	 * @param array $args Arguments to set the defaults in as necessary.
	 * @return array Arguments with defaults filled.
	 */
	protected static function ensure_defaults( $args ) {
		// Ensure accessibility labels are always set.
		if ( empty( $args['expand_text'] ) ) {
			$args['expand_text'] = __( 'expand child menu', 'amp' );
		}
		if ( empty( $args['collapse_text'] ) ) {
			$args['collapse_text'] = __( 'collapse child menu', 'amp' );
		}

		// Ensure the state ID is always set.
		if ( empty( $args['nav_menu_item_state_id'] ) ) {
			$args['nav_menu_item_state_id'] = 'navMenuItemExpanded';
		}

		return $args;
	}
}
PK.3Y�a����Fbunyad-amp/includes/sanitizers/class-amp-nav-menu-toggle-sanitizer.php<?php
/**
 * Class AMP_Nav_Menu_Toggle_Sanitizer
 *
 * @package AMP
 */

use AmpProject\Amp;
use AmpProject\Dom\Document;

/**
 * Class AMP_Nav_Menu_Toggle_Sanitizer
 *
 * Handles state for navigation menu toggles, based on theme support.
 *
 * @since 1.1.0
 * @internal
 */
class AMP_Nav_Menu_Toggle_Sanitizer extends AMP_Base_Sanitizer {

	/**
	 * Default args.
	 *
	 * @since 1.1.0
	 * @var array
	 */
	protected $DEFAULT_ARGS = [
		'nav_container_id'           => '',
		'nav_container_xpath'        => '', // Alternative for 'nav_container_id', if no ID available.
		'menu_button_id'             => '',
		'menu_button_xpath'          => '', // Alternative for 'menu_button_id', if no ID available.
		'nav_container_toggle_class' => '',
		'menu_button_toggle_class'   => '', // Optional.
		'nav_menu_toggle_state_id'   => 'navMenuToggledOn',
	];

	/**
	 * AMP_Nav_Menu_Toggle_Sanitizer constructor.
	 *
	 * @since 1.1.0
	 *
	 * @param Document $dom  DOM.
	 * @param array    $args Args.
	 */
	public function __construct( $dom, $args = [] ) {
		parent::__construct( $dom, $args );

		// Ensure the state ID is always set.
		if ( empty( $this->args['nav_menu_toggle_state_id'] ) ) {
			$this->args['nav_menu_toggle_state_id'] = $this->DEFAULT_ARGS['nav_menu_toggle_state_id'];
		}
	}

	/**
	 * If supported per the constructor arguments, inject `amp-state` and bind dynamic classes accordingly.
	 *
	 * @since 1.1.0
	 */
	public function sanitize() {
		$nav_el    = $this->get_nav_container();
		$button_el = $this->get_menu_button();

		// If no navigation element or no toggle class provided, bail.
		if ( ! $nav_el ) {
			if ( $button_el ) {

				// Remove the button since it won't be used.
				$button_el->parentNode->removeChild( $button_el );
			}
			return;
		}

		if ( ! $button_el ) {
			return;
		}

		$state_id = 'navMenuToggledOn';
		$expanded = false;

		if ( ! empty( $this->args['nav_container_toggle_class'] ) ) {
			$nav_el->setAttribute(
				Amp::BIND_DATA_ATTR_PREFIX . 'class',
				sprintf(
					"%s + ( $state_id ? %s : '' )",
					wp_json_encode( $nav_el->getAttribute( 'class' ) ),
					wp_json_encode( ' ' . $this->args['nav_container_toggle_class'] )
				)
			);
		}

		$state_el = $this->dom->createElement( 'amp-state' );
		$state_el->setAttribute( 'id', $state_id );
		$script_el = $this->dom->createElement( 'script' );
		$script_el->setAttribute( 'type', 'application/json' );
		$script_el->appendChild( $this->dom->createTextNode( wp_json_encode( $expanded ) ) );
		$state_el->appendChild( $script_el );
		if ( 'body' === $nav_el->nodeName ) {
			$nav_el->insertBefore( $state_el, $nav_el->firstChild );
		} elseif ( $nav_el === $this->dom->documentElement ) {
			$this->dom->body->insertBefore( $state_el, $this->dom->body->firstChild );
		} else {
			$nav_el->parentNode->insertBefore( $state_el, $nav_el );
		}

		$button_on = sprintf( "tap:AMP.setState({ $state_id: ! $state_id })" );
		$button_el->setAttribute( 'on', $button_on );
		$button_el->setAttribute( 'aria-expanded', 'false' );
		$button_el->setAttribute( Amp::BIND_DATA_ATTR_PREFIX . 'aria-expanded', "$state_id ? 'true' : 'false'" );
		if ( ! empty( $this->args['menu_button_toggle_class'] ) ) {
			$button_el->setAttribute(
				Amp::BIND_DATA_ATTR_PREFIX . 'class',
				sprintf( "%s + ( $state_id ? %s : '' )", wp_json_encode( $button_el->getAttribute( 'class' ) ), wp_json_encode( ' ' . $this->args['menu_button_toggle_class'] ) )
			);
		}
	}

	/**
	 * Retrieves the navigation container element.
	 *
	 * @since 1.1.0
	 *
	 * @return DOMElement|null Navigation container element, or null if not provided or found.
	 */
	protected function get_nav_container() {
		if ( ! empty( $this->args['nav_container_id'] ) ) {
			return $this->dom->getElementById( $this->args['nav_container_id'] );
		}

		if ( ! empty( $this->args['nav_container_xpath'] ) ) {
			$node = $this->dom->xpath->query( $this->args['nav_container_xpath'] )->item( 0 );
			if ( $node instanceof DOMElement ) {
				return $node;
			}
		}

		return null;
	}

	/**
	 * Retrieves the navigation menu button element.
	 *
	 * @since 1.1.0
	 *
	 * @return DOMElement|null Navigation menu button element, or null if not provided or found.
	 */
	protected function get_menu_button() {
		if ( ! empty( $this->args['menu_button_id'] ) ) {
			return $this->dom->getElementById( $this->args['menu_button_id'] );
		}

		if ( ! empty( $this->args['menu_button_xpath'] ) ) {
			$node = $this->dom->xpath->query( $this->args['menu_button_xpath'] )->item( 0 );
			if ( $node instanceof DOMElement ) {
				return $node;
			}
		}

		return null;
	}
}
PK.3Y�Cx�
�
@bunyad-amp/includes/sanitizers/class-amp-o2-player-sanitizer.php<?php
/**
 * Class AMP_O2_Player_Sanitizer
 *
 * @package AMP
 */

use AmpProject\Dom\Document;
use AmpProject\Html\Attribute;

/**
 * Class AMP_O2_Player_Sanitizer
 *
 * Converts <div class="vdb_player><script></script></div> embed to <amp-o2-player>
 *
 * @since 1.0
 * @see https://www.ampproject.org/docs/reference/components/amp-o2-player
 * @internal
 */
class AMP_O2_Player_Sanitizer extends AMP_Base_Sanitizer {
	/**
	 * Pattern to extract the information required for amp-o2-player element: data-pid, data-vid, data-bcid.
	 *
	 * @since 1.0
	 */
	const URL_PATTERN = '#.*delivery.vidible.tv\/jsonp\/pid=(?<data_pid>.*)\/vid=(?<data_vid>.*)\/(?<data_bcid>.*).js.*#i';

	/**
	 * AMP Tag.
	 *
	 * @since 1.0
	 * @var string AMP Tag.
	 */
	private static $amp_tag = 'amp-o2-player';

	/**
	 * AMP O2 Player class.
	 *
	 * @since 1.0
	 * @var string CSS class to identify O2 Player <div> to replace with AMP version.
	 */
	private static $xpath_selector = '//div[ contains( @class, \'vdb_player\' ) ]/script';

	/**
	 * Height to set for O2 Player elements.
	 *
	 * @since 1.0
	 * @var string
	 */
	private static $height = '270';

	/**
	 * Width to set for O2 Player elements.
	 *
	 * @since 1.0
	 * @var string
	 */
	private static $width = '480';

	/**
	 * Sanitize the O2 Player elements from the HTML contained in this instance's Dom\Document.
	 *
	 * @since 1.0
	 */
	public function sanitize() {
		/**
		 * Node list.
		 *
		 * @var DOMNodeList $nodes
		 */
		$nodes     = $this->dom->xpath->query( self::$xpath_selector );
		$num_nodes = $nodes->length;

		if ( 0 === $num_nodes ) {
			return;
		}

		for ( $i = $num_nodes - 1; $i >= 0; $i-- ) {
			$node = $nodes->item( $i );
			if ( $node instanceof DOMElement ) {
				$this->create_amp_o2_player( $this->dom, $node );
			}
		}

	}

	/**
	 * Replaces node with amp-o2-player
	 *
	 * @since 1.0
	 * @param Document   $dom  The HTML Document.
	 * @param DOMElement $node The DOMNode to adjust and replace.
	 */
	private function create_amp_o2_player( Document $dom, DOMElement $node ) {
		$o2_attributes = $this->get_o2_player_attributes( $node->getAttribute( 'src' ) );

		if ( ! empty( $o2_attributes ) ) {
			$component_attributes = array_merge(
				$o2_attributes,
				[
					'data-macros' => 'm.playback=click',
					'layout'      => 'responsive',
					'width'       => self::$width,
					'height'      => self::$height,
				]
			);

			$parent_node = $node->parentNode;

			// Remove the ID from the original node so that PHP DOM doesn't fail to set it on the replacement element.
			if ( $parent_node instanceof DOMElement && $parent_node->hasAttribute( Attribute::ID ) ) {
				$component_attributes['id'] = $parent_node->getAttribute( Attribute::ID );
				$parent_node->removeAttribute( Attribute::ID );
			}

			$amp_o2_player = AMP_DOM_Utils::create_node( $dom, self::$amp_tag, $component_attributes );

			// replaces the wrapper that contains the script with amp-o2-player element.
			$parent_node->parentNode->replaceChild( $amp_o2_player, $parent_node );

			$this->did_convert_elements = true;
		}
	}

	/**
	 * Gets O2 Player's required attributes from script src
	 *
	 * @since 1.0
	 * @param string $src Script src.
	 *
	 * @return array The data-* attributes for o2 player.
	 */
	private function get_o2_player_attributes( $src ) {
		$found = preg_match( self::URL_PATTERN, $src, $matches );
		if ( $found ) {
			return [
				'data-pid'  => $matches['data_pid'],
				'data-vid'  => $matches['data_vid'],
				'data-bcid' => $matches['data_bcid'],
			];
		}
		return [];
	}
}
PK.3Y9	`�A
A
=bunyad-amp/includes/sanitizers/class-amp-object-sanitizer.php<?php
/**
 * Class AMP_Object_Sanitizer
 *
 * @package AMP
 */

use AmpProject\Dom\Element;
use AmpProject\Extension;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag;
use AmpProject\Layout;

/**
 * Class AMP_Object_Sanitizer
 *
 * Sanitizes `<object>` embeds.
 *
 * @since 2.1
 * @internal
 */
class AMP_Object_Sanitizer extends AMP_Base_Sanitizer {

	/**
	 * Default PDF embed height.
	 *
	 * @var int
	 */
	const DEFAULT_PDF_EMBED_HEIGHT = 600;

	/**
	 * Get mapping of HTML selectors to the AMP component selectors which they may be converted into.
	 *
	 * @return array Mapping.
	 */
	public function get_selector_conversion_mapping() {
		return [
			Tag::OBJECT => [
				Extension::GOOGLE_DOCUMENT_EMBED,
			],
		];
	}

	/**
	 * Sanitize `object` elements from the HTML contained in this instance's Dom\Document.
	 */
	public function sanitize() {
		$elements = $this->dom->getElementsByTagName( Tag::OBJECT );

		if ( 0 === $elements->length ) {
			return;
		}

		/** @var Element $element */
		foreach ( iterator_to_array( $elements ) as $element ) {
			if (
				$element->getAttribute( Attribute::TYPE ) === Attribute::TYPE_PDF
				&&
				$element->hasAttribute( Attribute::DATA )
			) {
				$this->sanitize_pdf( $element );
			}
		}
	}

	/**
	 * Sanitize PDF embeds.
	 *
	 * @see \AMP_Core_Block_Handler::ampify_file_block()
	 *
	 * @param Element $element Object element.
	 */
	public function sanitize_pdf( Element $element ) {
		$parsed_style = $this->parse_style_string( $element->getAttribute( Attribute::STYLE ) );
		$embed_height = isset( $parsed_style['height'] ) ? $parsed_style['height'] : self::DEFAULT_PDF_EMBED_HEIGHT;

		$attributes = [
			Attribute::LAYOUT => Layout::FIXED_HEIGHT,
			Attribute::HEIGHT => $embed_height,
			Attribute::SRC    => $element->getAttribute( Attribute::DATA ),
		];

		$title = $element->getAttribute( Attribute::ARIA_LABEL );
		if ( '' !== $title ) {
			$attributes[ Attribute::TITLE ] = $title;
		}

		$attributes_to_copy = [ Attribute::ID, Attribute::CLASS_ ];
		foreach ( $attributes_to_copy as $attribute_name ) {
			$attribute = $element->getAttributeNode( $attribute_name );
			if ( $attribute instanceof DOMAttr ) {
				// Remove the attribute from the original node so that PHP DOM doesn't fail to set it on the replacement element (as happens with ID).
				$element->removeAttributeNode( $attribute );

				$attributes[ $attribute_name ] = $attribute->value;
			}
		}

		$amp_element = AMP_DOM_Utils::create_node( $element->ownerDocument, Extension::GOOGLE_DOCUMENT_EMBED, $attributes );
		$element->parentNode->replaceChild( $amp_element, $element );
	}
}
PK.3Y9eNN?bunyad-amp/includes/sanitizers/class-amp-playbuzz-sanitizer.php<?php
/**
 * Class AMP_Playbuzz_Sanitizer
 *
 * @package AMP
 */

use AmpProject\Dom\Element;
use AmpProject\Html\Attribute;

/**
 * Class AMP_Playbuzz_Sanitizer
 *
 * Converts Playbuzz embed to <amp-playbuzz>
 *
 * @see https://www.playbuzz.com/
 * @internal
 */
class AMP_Playbuzz_Sanitizer extends AMP_Base_Sanitizer {

	/**
	 * Tag.
	 *
	 * @var string HTML tag to identify and replace with AMP version.
	 * @since 0.2
	 */
	public static $tag = 'div';

	/**
	 * PlayBuzz class.
	 *
	 * @var string CSS class to identify Playbuzz <div> to replace with AMP version.
	 *
	 * @since 0.2
	 */
	public static $pb_class = 'pb_feed';

	/**
	 * Hardcoded height to set for Playbuzz elements.
	 *
	 * @var string
	 *
	 * @since 0.2
	 */
	private static $height = '500';

	/**
	 * Get mapping of HTML selectors to the AMP component selectors which they may be converted into.
	 *
	 * @return array Mapping.
	 */
	public function get_selector_conversion_mapping() {
		return [
			'div.pb_feed' => [ 'amp-playbuzz.pb_feed' ],
		];
	}

	/**
	 * Sanitize the Playbuzz elements from the HTML contained in this instance's Dom\Document.
	 *
	 * @since 0.2
	 */
	public function sanitize() {

		$nodes     = $this->dom->getElementsByTagName( self::$tag );
		$num_nodes = $nodes->length;

		if ( 0 === $num_nodes ) {
			return;
		}

		for ( $i = $num_nodes - 1; $i >= 0; $i-- ) {
			/** @var Element $node */
			$node = $nodes->item( $i );

			if ( self::$pb_class !== $node->getAttribute( 'class' ) ) {
				continue;
			}

			$old_attributes = AMP_DOM_Utils::get_node_attributes_as_assoc_array( $node );

			$new_attributes = $this->filter_attributes( $old_attributes );

			if ( ! isset( $new_attributes['data-item'] ) && ! isset( $new_attributes['src'] ) ) {
				continue;
			}

			// Remove the ID from the original node so that PHP DOM doesn't fail to set it on the replacement element.
			$node->removeAttribute( Attribute::ID );

			$new_node = AMP_DOM_Utils::create_node( $this->dom, 'amp-playbuzz', $new_attributes );

			$node->parentNode->replaceChild( $new_node, $node );

			$this->did_convert_elements = true;

		}

	}

	/**
	 * "Filter" HTML attributes for <amp-audio> elements.
	 *
	 * @since 0.2
	 *
	 * @param string[] $attributes {
	 *      Attributes.
	 *
	 *      @type string $data-item Playbuzz <div> attribute - Pass along if found and not empty.
	 *      @type string $data-game Playbuzz <div> attribute - Assign to its value to $attributes['src'] if found and not empty.
	 *      @type string $data-game-info Playbuzz <div> attribute - Assign to its value to $attributes['data-item-info'] if found.
	 *      @type string $data-shares Playbuzz <div> attribute - Assign to its value to $attributes['data-share-buttons'] if found.
	 *      @type string $data-comments Playbuzz <div> attribute - Pass along if found.
	 *      @type int $height Playbuzz <div> attribute - Set to hardcoded value of 500.
	 * }
	 * @return array Returns HTML attributes; removes any not specifically declared above from input.
	 */
	private function filter_attributes( $attributes ) {
		$out = [];

		foreach ( $attributes as $name => $value ) {
			switch ( $name ) {
				case 'data-item':
					if ( ! empty( $value ) ) {
						$out['data-item'] = $value;
					}
					break;

				case 'data-game':
					if ( ! empty( $value ) ) {
						$out['src'] = $value;
					}
					break;

				case 'data-shares':
					$out['data-share-buttons'] = $value;
					break;

				case 'data-game-info':
				case 'data-comments':
				case 'class':
				case 'id':
					$out[ $name ] = $value;
					break;

				default:
					break;
			}
		}

		$out['height'] = self::$height;

		return $out;
	}
}
PK.3Yk$�@@Abunyad-amp/includes/sanitizers/class-amp-pwa-script-sanitizer.php<?php
/**
 * PWA Plugin Sanitizer
 *
 * @since 2.3
 * @package AMP
 */

use AmpProject\AmpWP\ValidationExemption;

/**
 * Class AMP_PWA_Script_Sanitizer
 *
 * @since 2.3
 * @internal
 */
class AMP_PWA_Script_Sanitizer extends AMP_Base_Sanitizer {

	/**
	 * Sanitize the AMP response for offline/500 error pages.
	 *
	 * @since 2.3
	 */
	public function sanitize() {
		if (
			! ( function_exists( 'is_offline' ) && is_offline() ) &&
			! ( function_exists( 'is_500' ) && is_500() )
		) {
			return;
		}

		$scripts = $this->dom->xpath->query( '//script[ @id = "wp-navigation-request-properties" or ( @type = "module" and contains( text(), "checkNetworkAndReload()" ) ) ]' );

		if ( $scripts instanceof DOMNodeList ) {
			foreach ( $scripts as $script ) {
				ValidationExemption::mark_node_as_px_verified( $script );
			}
		}
	}
}
PK.3Y'v6bunyad-amp/includes/sanitizers/class-amp-rule-spec.php<?php
/**
 * Class AMP_Rule_Spec
 *
 * @package AMP
 */

/**
 * Class AMP_Rule_Spec
 *
 * Set of constants used throughout the sanitizer.
 *
 * @internal
 */
abstract class AMP_Rule_Spec {
	/*
	 * AMP rule_spec types
	 */
	const ATTR_SPEC_LIST = 'attr_spec_list';
	const TAG_SPEC       = 'tag_spec';
	const CDATA          = 'cdata';

	/*
	 * AMP attr_spec value check results.
	 *
	 * In 0.7 these changed from strings to integers to speed up comparisons.
	 */
	const PASS           = 1;
	const FAIL           = 0;
	const NOT_APPLICABLE = -1;

	/*
	 * HTML Element Tag rule names
	 */
	const DISALLOWED_ANCESTOR = 'disallowed_ancestor';
	const MANDATORY_ANCESTOR  = 'mandatory_ancestor';
	const MANDATORY_PARENT    = 'mandatory_parent';
	const DESCENDANT_TAG_LIST = 'descendant_tag_list';
	const CHILD_TAGS          = 'child_tags';
	const SIBLINGS_DISALLOWED = 'siblings_disallowed';

	/*
	 * HTML Element Attribute rule names
	 */
	const ALLOW_EMPTY            = 'allow_empty';
	const ALLOW_RELATIVE         = 'allow_relative';
	const ALLOWED_PROTOCOL       = 'protocol';
	const ALTERNATIVE_NAMES      = 'alternative_names';
	const DISALLOWED_VALUE_REGEX = 'disallowed_value_regex';
	const MANDATORY              = 'mandatory';
	const MANDATORY_ANYOF        = 'mandatory_anyof';
	const MANDATORY_ONEOF        = 'mandatory_oneof';
	const VALUE                  = 'value';
	const VALUE_CASEI            = 'value_casei';
	const VALUE_REGEX            = 'value_regex';
	const VALUE_REGEX_CASEI      = 'value_regex_casei';
	const VALUE_PROPERTIES       = 'value_properties';
	const VALUE_URL              = 'value_url';

	/*
	 * AMP layout types.
	 *
	 * @deprecated Use `AmpProject\Layout` interface instead.
	 */
	const LAYOUT_NODISPLAY    = 'nodisplay';
	const LAYOUT_FIXED        = 'fixed';
	const LAYOUT_FIXED_HEIGHT = 'fixed-height';
	const LAYOUT_RESPONSIVE   = 'responsive';
	const LAYOUT_CONTAINER    = 'container';
	const LAYOUT_FILL         = 'fill';
	const LAYOUT_FLEX_ITEM    = 'flex-item';
	const LAYOUT_FLUID        = 'fluid';
	const LAYOUT_INTRINSIC    = 'intrinsic';

	/**
	 * Attribute name for AMP dev mode.
	 *
	 * @since 1.2.2
	 * @link https://github.com/ampproject/amphtml/issues/20974
	 * @var string
	 */
	const DEV_MODE_ATTRIBUTE = 'data-ampdevmode';

	/**
	 * Supported layout values.
	 *
	 * @deprecated Use `AmpProject\Layout::FROM_SPEC` instead.
	 *
	 * @since 1.0
	 * @var array
	 */
	public static $layout_enum = [
		1 => 'nodisplay',
		2 => 'fixed',
		3 => 'fixed-height',
		4 => 'responsive',
		5 => 'container',
		6 => 'fill',
		7 => 'flex-item',
		8 => 'fluid',
		9 => 'intrinsic',
	];

	/**
	 * List of boolean attributes.
	 *
	 * @since 0.7
	 * @var array
	 */
	public static $boolean_attributes = [
		'allowfullscreen',
		'async',
		'autofocus',
		'autoplay',
		'checked',
		'compact',
		'controls',
		'declare',
		'default',
		'defaultchecked',
		'defaultmuted',
		'defaultselected',
		'defer',
		'disabled',
		'draggable',
		'enabled',
		'formnovalidate',
		'hidden',
		'indeterminate',
		'inert',
		'ismap',
		'itemscope',
		'loop',
		'multiple',
		'muted',
		'nohref',
		'noresize',
		'noshade',
		'novalidate',
		'nowrap',
		'open',
		'pauseonexit',
		'readonly',
		'required',
		'reversed',
		'scoped',
		'seamless',
		'selected',
		'sortable',
		'spellcheck',
		'translate',
		'truespeed',
		'typemustmatch',
		'visible',
	];

	/**
	 * Additional allowed tags.
	 *
	 * @var array
	 */
	public static $additional_allowed_tags = [

		// An experimental tag with no protoascii.
		'amp-share-tracking' => [
			'attr_spec_list' => [],
			'tag_spec'       => [],
		],
	];
}
PK.3Y�[��T.T.=bunyad-amp/includes/sanitizers/class-amp-script-sanitizer.php<?php
/**
 * Class AMP_Script_Sanitizer
 *
 * @since 1.0
 * @package AMP
 */

use AmpProject\AmpWP\ValidationExemption;
use AmpProject\DevMode;
use AmpProject\Dom\Element;
use AmpProject\Extension;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag;

/**
 * Class AMP_Script_Sanitizer
 *
 * @since 1.0
 * @internal
 */
class AMP_Script_Sanitizer extends AMP_Base_Sanitizer {

	/**
	 * Error code for custom inline JS script tag.
	 *
	 * @var string
	 */
	const CUSTOM_INLINE_SCRIPT = 'CUSTOM_INLINE_SCRIPT';

	/**
	 * Error code for custom external JS script tag.
	 *
	 * @var string
	 */
	const CUSTOM_EXTERNAL_SCRIPT = 'CUSTOM_EXTERNAL_SCRIPT';

	/**
	 * Error code for JS event handler attribute.
	 *
	 * @var string
	 */
	const CUSTOM_EVENT_HANDLER_ATTR = 'CUSTOM_EVENT_HANDLER_ATTR';

	/**
	 * Attribute which if present on a `noscript` element will prevent it from being unwrapped.
	 *
	 * @var string
	 */
	const NO_UNWRAP_ATTR = 'data-amp-no-unwrap';

	/**
	 * Default args.
	 *
	 * @var array
	 */
	protected $DEFAULT_ARGS = [
		'unwrap_noscripts'      => true,
		'sanitize_js_scripts'   => false,
		'comment_reply_allowed' => 'never', // Can be 'never' , 'always', or 'conditionally'.
	];

	/**
	 * Array of flags used to control sanitization.
	 *
	 * @var array {
	 *      @type bool $sanitize_js_scripts Whether to sanitize JS scripts (and not defer for final sanitizer).
	 *      @type bool $unwrap_noscripts    Whether to unwrap noscript elements.
	 * }
	 */
	protected $args;

	/**
	 * Number of scripts which were kept.
	 *
	 * This is used to determine whether noscript elements should be unwrapped.
	 *
	 * @var int
	 */
	protected $kept_script_count = 0;

	/**
	 * Number of kept nodes which were PX-verified.
	 *
	 * @var int
	 */
	protected $px_verified_kept_node_count = 0;

	/**
	 * Sanitizers.
	 *
	 * @var AMP_Base_Sanitizer[]
	 */
	protected $sanitizers = [];

	/**
	 * Init.
	 *
	 * @param AMP_Base_Sanitizer[] $sanitizers Sanitizers.
	 */
	public function init( $sanitizers ) {
		parent::init( $sanitizers );

		$this->sanitizers = $sanitizers;
	}

	/**
	 * Sanitize script and noscript elements.
	 *
	 * @since 1.0
	 */
	public function sanitize() {
		if ( ! empty( $this->args['sanitize_js_scripts'] ) ) {
			$this->sanitize_js_script_elements();
		}

		// If custom scripts were kept (after sanitize_js_script_elements() ran) it's important that noscripts not be
		// unwrapped or else this could result in the JS and no-JS fallback experiences both being present on the page.
		// So unwrapping is only done when no custom scripts were retained (and the sanitizer arg opts-in to unwrap).
		if ( 0 === $this->kept_script_count && 0 === $this->px_verified_kept_node_count && ! empty( $this->args['unwrap_noscripts'] ) ) {
			$this->unwrap_noscript_elements();
		}

		$sanitizer_arg_updates = [];

		// When there are kept custom scripts, turn off conversion to AMP components since scripts may be attempting to
		// query for them directly, and skip tree shaking since it's likely JS will toggle classes that have associated
		// style rules.
		// @todo There should be an attribute on script tags that opt-in to keeping tree shaking and/or to indicate what class names need to be included.
		if ( $this->kept_script_count > 0 ) {
			$sanitizer_arg_updates[ AMP_Style_Sanitizer::class ]['disable_style_processing'] = true;
			$sanitizer_arg_updates[ AMP_Video_Sanitizer::class ]['native_video_used']        = true;
			$sanitizer_arg_updates[ AMP_Audio_Sanitizer::class ]['native_audio_used']        = true;
			$sanitizer_arg_updates[ AMP_Iframe_Sanitizer::class ]['native_iframe_used']      = true;

			// Once amp-img is deprecated, these won't be needed and an <img> won't prevent strict sandboxing level for valid AMP.
			// Note that AMP_Core_Theme_Sanitizer would have already run, so we can't update it here. Nevertheless,
			// the native_img_used flag was already enabled by the Sandboxing service.
			// @todo We should consider doing this when there are PX-verified scripts as well. This will be the default in AMP eventually anyway, as amp-img is being deprecated.
			$sanitizer_arg_updates[ AMP_Gallery_Block_Sanitizer::class ]['native_img_used'] = true;
			$sanitizer_arg_updates[ AMP_Img_Sanitizer::class ]['native_img_used']           = true;
		}

		// When custom scripts are on the page, turn off some CSS processing because it is
		// unnecessary for a valid AMP page and which can break custom scripts.
		if ( $this->px_verified_kept_node_count > 0 || $this->kept_script_count > 0 ) {
			$sanitizer_arg_updates[ AMP_Style_Sanitizer::class ]['transform_important_qualifiers'] = false;
			$sanitizer_arg_updates[ AMP_Style_Sanitizer::class ]['allow_excessive_css']            = true;
			$sanitizer_arg_updates[ AMP_Form_Sanitizer::class ]['native_post_forms_allowed']       = 'always';
		}

		foreach ( $sanitizer_arg_updates as $sanitizer_class => $sanitizer_args ) {
			if ( array_key_exists( $sanitizer_class, $this->sanitizers ) ) {
				$this->sanitizers[ $sanitizer_class ]->update_args( $sanitizer_args );
			}
		}
	}

	/**
	 * Unwrap noscript elements so their contents become the AMP version by default.
	 */
	protected function unwrap_noscript_elements() {
		$noscripts = $this->dom->getElementsByTagName( Tag::NOSCRIPT );

		for ( $i = $noscripts->length - 1; $i >= 0; $i-- ) {
			/** @var Element $noscript */
			$noscript = $noscripts->item( $i );

			// Skip AMP boilerplate.
			if ( $noscript->firstChild instanceof Element && $noscript->firstChild->hasAttribute( Attribute::AMP_BOILERPLATE ) ) {
				continue;
			}

			// Skip unwrapping <noscript> elements that have an opt-out data attribute present.
			if ( $noscript->hasAttribute( self::NO_UNWRAP_ATTR ) ) {
				continue;
			}

			/*
			 * Skip noscript elements inside of amp-img or other AMP components for fallbacks.
			 * See \AMP_Img_Sanitizer::adjust_and_replace_node(). Also skip if the element has dev mode.
			 */
			if ( 'amp-' === substr( $noscript->parentNode->nodeName, 0, 4 ) || DevMode::hasExemptionForNode( $noscript ) ) {
				continue;
			}

			$is_inside_head_el = ( $noscript->parentNode && Tag::HEAD === $noscript->parentNode->nodeName );
			$must_move_to_body = false;

			$fragment = $this->dom->createDocumentFragment();
			$fragment->appendChild( $this->dom->createComment( 'noscript' ) );
			while ( $noscript->firstChild ) {
				if ( $is_inside_head_el && ! $must_move_to_body ) {
					$must_move_to_body = ! $this->dom->isValidHeadNode( $noscript->firstChild );
				}
				$fragment->appendChild( $noscript->firstChild );
			}
			$fragment->appendChild( $this->dom->createComment( '/noscript' ) );

			if ( $must_move_to_body ) {
				$this->dom->body->insertBefore( $fragment, $this->dom->body->firstChild );
				$noscript->parentNode->removeChild( $noscript );
			} else {
				$noscript->parentNode->replaceChild( $fragment, $noscript );
			}

			$this->did_convert_elements = true;
		}
	}

	/**
	 * Sanitize JavaScript script elements.
	 *
	 * This runs explicitly in the script sanitizer before the final validating sanitizer (tag-and-attribute) so that
	 * the style sanitizer will be able to know whether there are custom scripts in the page, and thus whether tree
	 * shaking can be performed.
	 *
	 * @since 2.2
	 */
	protected function sanitize_js_script_elements() {
		// Note that this is looking for type attributes that contain "script" as a normalization of the variations
		// of javascript, ecmascript, jscript, and livescript. This could also end up matching MIME types such as
		// application/postscript or text/vbscript, but such scripts are either unlikely to be the source of a script
		// tag or else they would be extremely rare (and would be invalid AMP anyway).
		// See <https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types#textjavascript>.
		$scripts = $this->dom->xpath->query(
			'
				//script[
					not( @type )
					or
					@type = "module"
					or
					contains( @type, "script" )
				]'
		);

		$comment_reply_script = null;

		/** @var Element $script */
		foreach ( $scripts as $script ) {
			if ( DevMode::hasExemptionForNode( $script ) ) { // @todo Should this also skip when AMP-unvalidated?
				continue;
			}

			if ( ValidationExemption::is_px_verified_for_node( $script ) ) {
				$this->px_verified_kept_node_count++;
				// @todo Consider forcing any PX-verified script to have async/defer if not module. For inline scripts, hack via data: URL?
				continue;
			}

			if ( $script->hasAttribute( Attribute::SRC ) ) {
				// Skip external AMP CDN scripts.
				if ( 0 === strpos( $script->getAttribute( Attribute::SRC ), 'https://cdn.ampproject.org/' ) ) {
					continue;
				}

				// Defer consideration of commenting scripts until we've seen what other scripts are kept on the page.
				if ( $script->getAttribute( Attribute::ID ) === 'comment-reply-js' ) {
					$comment_reply_script = $script;
					continue;
				}

				$removed = $this->remove_invalid_child(
					$script,
					[ 'code' => self::CUSTOM_EXTERNAL_SCRIPT ]
				);
				if ( ! $removed ) {
					$this->kept_script_count++;
				}
			} else {
				// Skip inline scripts used by AMP.
				if ( $script->hasAttribute( Attribute::AMP_ONERROR ) ) {
					continue;
				}

				// As a special case, mark the script output by wp_comment_form_unfiltered_html_nonce() as being in dev-mode
				// since it is output when the user is authenticated (when they can unfiltered_html), and since it has no
				// impact on PX we can just ignore it.
				if (
					$script->previousSibling instanceof Element
					&&
					Tag::INPUT === $script->previousSibling->tagName
					&&
					$script->previousSibling->getAttribute( Attribute::NAME ) === '_wp_unfiltered_html_comment_disabled'
				) {
					$script->setAttributeNode( $this->dom->createAttribute( DevMode::DEV_MODE_ATTRIBUTE ) );
					continue;
				}

				$removed = $this->remove_invalid_child(
					$script,
					[ 'code' => self::CUSTOM_INLINE_SCRIPT ]
				);
				if ( ! $removed ) {
					$this->kept_script_count++;
				}
			}
		}

		$event_handler_attributes = $this->dom->xpath->query(
			'
				//@*[
					substring(name(), 1, 2) = "on"
					and
					name() != "on"
				]
			'
		);
		/** @var DOMAttr $event_handler_attribute */
		foreach ( $event_handler_attributes as $event_handler_attribute ) {
			/** @var Element $element */
			$element = $event_handler_attribute->parentNode;
			if (
				DevMode::hasExemptionForNode( $element )
				||
				(
					Extension::POSITION_OBSERVER === $element->tagName
					&&
					Attribute::ONCE === $event_handler_attribute->nodeName
				)
				||
				(
					Extension::FONT === $element->tagName
					&&
					substr( $event_handler_attribute->nodeName, 0, 3 ) === 'on-'
				)
			) {
				continue;
			}

			// Since the attribute has been PX-verified, move along.
			if ( ValidationExemption::is_px_verified_for_node( $event_handler_attribute ) ) {
				$this->px_verified_kept_node_count++;
				continue;
			}

			$removed = $this->remove_invalid_attribute(
				$element,
				$event_handler_attribute,
				[ 'code' => self::CUSTOM_EVENT_HANDLER_ATTR ]
			);
			if ( ! $removed ) {
				$this->kept_script_count++;
			}
		}

		// Handle the comment-reply script, removing it if it's not never allowed, marking it as PX-verified if it is
		// always allowed, or leaving it alone if it is 'conditionally' allowed since it will be dealt with later
		// in the AMP_Comments_Sanitizer.
		if ( $comment_reply_script ) {
			if ( 'never' === $this->args['comment_reply_allowed'] ) {
				$comment_reply_script->parentNode->removeChild( $comment_reply_script );
			} elseif ( 'always' === $this->args['comment_reply_allowed'] ) {
				// Prevent the comment-reply script from being removed later in the comments sanitizer.
				ValidationExemption::mark_node_as_px_verified( $comment_reply_script );
			}
		}
	}
}
PK.3Y„z�aa=bunyad-amp/includes/sanitizers/class-amp-srcset-sanitizer.php<?php
/**
 * Class AMP_Srcset_Sanitizer.
 *
 * @package AMP
 */

/**
 * Sanitizes the `srcset` attribute of elements.
 *
 * @internal
 * @since 2.0.2
 */
class AMP_Srcset_Sanitizer extends AMP_Base_Sanitizer {

	/**
	 * Pattern used used for finding image candidates defined within the `srcset` attribute.
	 * The pattern is adapted from the JS validator. See https://github.com/ampproject/amphtml/blob/5fcb29a41d06867b25ed6aca69b4aeaf96456c8c/validator/js/engine/parse-srcset.js#L72-L81.
	 *
	 * @var string
	 */
	const SRCSET_REGEX_PATTERN = '/\s*(?:,\s*)?(?<url>[^,\s]\S*[^,\s])\s*(?<dimension>[1-9]\d*[wx]|[1-9]\d*\.\d+x|0.\d*[1-9]\d*x)?\s*(?<comma>,)?\s*/';

	/**
	 * Sanitize the HTML contained in the DOMDocument received by the constructor
	 */
	public function sanitize() {
		$attribute_query = $this->dom->xpath->query( '//*/@srcset' );

		if ( 0 === $attribute_query->length ) {
			return;
		}

		foreach ( $attribute_query as $attribute ) {
			/** @var DOMAttr $attribute */
			if ( ! empty( $attribute->value ) ) {
				$this->sanitize_srcset_attribute( $attribute );
			}
		}
	}

	/**
	 * Parses the `srcset` attribute and validates each image candidate defined.
	 *
	 * Validation errors will be raised if the attribute value is malformed or contains image candidates
	 * with the same width or pixel density defined.
	 *
	 * @param DOMAttr $attribute Srcset attribute.
	 */
	private function sanitize_srcset_attribute( DOMAttr $attribute ) {
		$srcset = $attribute->value;

		// Bail and raise a validation error if no image candidates were found or the last matched group does not
		// match the end of the `srcset`.
		if (
			! preg_match_all( self::SRCSET_REGEX_PATTERN, $srcset, $matches )
			||
			end( $matches[0] ) !== substr( $srcset, -strlen( end( $matches[0] ) ) )
		) {

			$validation_error = [
				'code' => AMP_Tag_And_Attribute_Sanitizer::INVALID_ATTR_VALUE,
			];
			$this->remove_invalid_attribute( $attribute->ownerElement, $attribute, $validation_error );
			return;
		}

		$dimension_count = count( $matches['dimension'] );
		$commas_count    = count( array_filter( $matches['comma'] ) );

		// Bail and raise a validation error if the number of dimensions does not match the number of URLs, or there
		// are not enough commas to separate the image candidates.
		if ( count( $matches['url'] ) !== $dimension_count || ( $dimension_count - 1 ) !== $commas_count ) {
			$validation_error = [
				'code' => AMP_Tag_And_Attribute_Sanitizer::INVALID_ATTR_VALUE,
			];
			$this->remove_invalid_attribute( $attribute->ownerElement, $attribute, $validation_error );
			return;
		}

		// Bail if there are no duplicate image candidates.
		// Note: array_flip() is used as a faster alternative to array_unique(). See https://stackoverflow.com/a/8321709/93579.
		if ( count( array_flip( $matches['dimension'] ) ) === $dimension_count ) {
			return;
		}

		$image_candidates     = [];
		$duplicate_dimensions = [];

		foreach ( $matches['dimension'] as $index => $dimension ) {
			if ( empty( trim( $dimension ) ) ) {
				$dimension = '1x';
			}

			// Catch if there are duplicate dimensions that have different URLs. In such cases a validation error will be raised.
			if ( isset( $image_candidates[ $dimension ] ) && $matches['url'][ $index ] !== $image_candidates[ $dimension ] ) {
				$duplicate_dimensions[] = $dimension;
				continue;
			}

			$image_candidates[ $dimension ] = $matches['url'][ $index ];
		}

		// If there are duplicates, raise a validation error and stop short-circuit processing if the error is not removed.
		if ( ! empty( $duplicate_dimensions ) ) {
			$validation_error = [
				'code'                 => AMP_Tag_And_Attribute_Sanitizer::DUPLICATE_DIMENSIONS,
				'duplicate_dimensions' => $duplicate_dimensions,
			];
			if ( ! $this->should_sanitize_validation_error( $validation_error, [ 'node' => $attribute ] ) ) {
				return;
			}
		}

		// Otherwise, output the normalized/validated srcset value.
		$attribute->value = implode(
			', ',
			array_map(
				static function ( $dimension ) use ( $image_candidates ) {
					return "{$image_candidates[ $dimension ]} {$dimension}";
				},
				array_keys( $image_candidates )
			)
		);
	}
}
PK.3Yı�j$$<bunyad-amp/includes/sanitizers/class-amp-style-sanitizer.php<?php
/**
 * Class AMP_Style_Sanitizer
 *
 * @package AMP
 */

use AmpProject\Amp;
use AmpProject\AmpWP\Icon;
use AmpProject\AmpWP\Option;
use AmpProject\AmpWP\RemoteRequest\CachedRemoteGetRequest;
use AmpProject\AmpWP\RemoteRequest\WpHttpRemoteGetRequest;
use AmpProject\AmpWP\ValidationExemption;
use AmpProject\DevMode;
use AmpProject\Dom\Document;
use AmpProject\Dom\Element;
use AmpProject\Exception\FailedToGetFromRemoteUrl;
use AmpProject\Html\Attribute;
use AmpProject\Html\RequestDestination;
use AmpProject\Html\Tag;
use AmpProject\RemoteGetRequest;
use Sabberworm\CSS\CSSList\AtRuleBlockList;
use Sabberworm\CSS\CSSList\CSSList;
use Sabberworm\CSS\CSSList\Document as CSSDocument;
use Sabberworm\CSS\CSSList\KeyFrame;
use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Parsing\SourceException;
use Sabberworm\CSS\Property\AtRule;
use Sabberworm\CSS\Property\Import;
use Sabberworm\CSS\Property\Selector;
use Sabberworm\CSS\RuleSet\AtRuleSet;
use Sabberworm\CSS\RuleSet\DeclarationBlock;
use Sabberworm\CSS\RuleSet\RuleSet;
use Sabberworm\CSS\Rule\Rule;
use Sabberworm\CSS\Value\CSSFunction;
use Sabberworm\CSS\Value\RuleValueList;
use Sabberworm\CSS\Value\URL;
use Sabberworm\CSS\Value\Value;

/**
 * Class AMP_Style_Sanitizer
 *
 * Collects inline styles and outputs them in the amp-custom stylesheet.
 *
 * @internal
 */
class AMP_Style_Sanitizer extends AMP_Base_Sanitizer {

	const STYLE_AMP_CUSTOM_SPEC_NAME    = 'style amp-custom';
	const STYLE_AMP_KEYFRAMES_SPEC_NAME = 'style[amp-keyframes]';
	const ORIGINAL_STYLE_ATTRIBUTE_NAME = 'data-amp-original-style';

	const STYLE_AMP_CUSTOM_GROUP_INDEX    = 0;
	const STYLE_AMP_KEYFRAMES_GROUP_INDEX = 1;

	// Error codes raised during parsing CSS. See get_css_parser_validation_error_codes.
	const CSS_SYNTAX_INVALID_AT_RULE         = 'CSS_SYNTAX_INVALID_AT_RULE';
	const CSS_SYNTAX_INVALID_DECLARATION     = 'CSS_SYNTAX_INVALID_DECLARATION';
	const CSS_SYNTAX_INVALID_PROPERTY        = 'CSS_SYNTAX_INVALID_PROPERTY';
	const CSS_SYNTAX_INVALID_PROPERTY_NOLIST = 'CSS_SYNTAX_INVALID_PROPERTY_NOLIST';
	const CSS_SYNTAX_INVALID_IMPORTANT       = 'CSS_SYNTAX_INVALID_IMPORTANT';
	const CSS_SYNTAX_PARSE_ERROR             = 'CSS_SYNTAX_PARSE_ERROR';
	const CSS_DISALLOWED_SELECTOR            = 'CSS_DISALLOWED_SELECTOR';
	const STYLESHEET_FETCH_ERROR             = 'STYLESHEET_FETCH_ERROR';
	const STYLESHEET_TOO_LONG                = 'STYLESHEET_TOO_LONG';

	// Error code when encountering 'i-amphtml-' prefixing a class name in an HTML class attribute.
	const DISALLOWED_ATTR_CLASS_NAME = 'DISALLOWED_ATTR_CLASS_NAME';

	// These are internal to the sanitizer and not exposed as validation error codes.
	const STYLESHEET_DISALLOWED_FILE_EXT   = 'STYLESHEET_DISALLOWED_FILE_EXT';
	const STYLESHEET_EXTERNAL_FILE_URL     = 'STYLESHEET_EXTERNAL_FILE_URL';
	const STYLESHEET_FILE_PATH_NOT_FOUND   = 'STYLESHEET_FILE_PATH_NOT_FOUND';
	const STYLESHEET_FILE_PATH_NOT_ALLOWED = 'STYLESHEET_FILE_PATH_NOT_ALLOWED';
	const STYLESHEET_URL_SYNTAX_ERROR      = 'STYLESHEET_URL_SYNTAX_ERROR';
	const STYLESHEET_INVALID_RELATIVE_PATH = 'STYLESHEET_INVALID_RELATIVE_PATH';

	/**
	 * Percentage at which the used CSS budget becomes a warning.
	 *
	 * @var int
	 */
	const CSS_BUDGET_WARNING_PERCENTAGE = 80;

	/**
	 * Inline style selector's specificity multiplier, i.e. used to generate the number of ':not(#_)' placeholders.
	 *
	 * @var int
	 */
	// +EDIT: 5 is too high
	const INLINE_SPECIFICITY_MULTIPLIER = 1; // @todo The correctness of using "5" should be validated.

	/**
	 * Array index for tag names extracted from a selector.
	 *
	 * @private
	 * @since 1.1
	 * @see \AMP_Style_Sanitizer::parse_stylesheet()
	 */
	const SELECTOR_EXTRACTED_TAGS = 0;

	/**
	 * Array index for class names extracted from a selector.
	 *
	 * @private
	 * @since 1.1
	 * @see \AMP_Style_Sanitizer::parse_stylesheet()
	 */
	const SELECTOR_EXTRACTED_CLASSES = 1;

	/**
	 * Array index for IDs extracted from a selector.
	 *
	 * @private
	 * @since 1.1
	 * @see \AMP_Style_Sanitizer::parse_stylesheet()
	 */
	const SELECTOR_EXTRACTED_IDS = 2;

	/**
	 * Array index for attributes extracted from a selector.
	 *
	 * @private
	 * @since 1.1
	 * @see \AMP_Style_Sanitizer::parse_stylesheet()
	 */
	const SELECTOR_EXTRACTED_ATTRIBUTES = 3;

	/**
	 * Array of flags used to control sanitization.
	 *
	 * @var array {
	 *      @type bool     $disable_style_processing       Whether arbitrary styles should be allowed. When enabled, external stylesheet links, style elements, and style attributes will all be unprocessed and marked as PX-verified.
	 *      @type string[] $dynamic_element_selectors      Selectors for elements (or their ancestors) which contain dynamic content; selectors containing these will not be filtered.
	 *      @type bool     $use_document_element           Whether the root of the document should be used rather than the body.
	 *      @type bool     $require_https_src              Require HTTPS URLs.
	 *      @type callable $validation_error_callback      Function to call when a validation error is encountered.
	 *      @type bool     $should_locate_sources          Whether to locate the sources when reporting validation errors.
	 *      @type string   $parsed_cache_variant           Additional value by which to vary parsed cache.
	 *      @type string[] $focus_within_classes           Class names in selectors that should be replaced with :focus-within pseudo classes.
	 *      @type string[] $low_priority_plugins           Plugin slugs of the plugins to deprioritize when hitting the CSS limit.
	 *      @type bool     $allow_transient_caching        Whether to allow caching parsed CSS in transients. This may need to be disabled when there is highly-variable CSS content.
	 *      @type bool     $skip_tree_shaking              Whether tree shaking should be skipped.
	 *      @type bool     $allow_excessive_css            Whether to allow CSS to exceed the allowed max bytes (without raising validation errors).
	 *      @type bool     $transform_important_qualifiers Whether !important rules should be transformed. This also necessarily transform inline style attributes.
	 *      @type string[] $font_face_display_overrides    Array of the font family names and the font-display value they should each have.
	 * }
	 */
	protected $args;

	/**
	 * Default args.
	 *
	 * @var array
	 */
	protected $DEFAULT_ARGS = [
		'disable_style_processing'       => false,
		'dynamic_element_selectors'      => [
			'amp-img',
			'amp-anim',
			'amp-list',
			'amp-live-list',
			'[submit-error]',
			'[submit-success]',
			'amp-script',
			'amp-story-captions',
		],
		'should_locate_sources'          => false,
		'parsed_cache_variant'           => null,
		'focus_within_classes'           => [ 'focus' ],
		'low_priority_plugins'           => [ 'query-monitor' ],
		'allow_transient_caching'        => true,
		'skip_tree_shaking'              => false,
		'allow_excessive_css'            => false,
		'transform_important_qualifiers' => true,
		'font_face_display_overrides'    => [
			'NonBreakingSpaceOverride' => 'optional',
			'Inter var'                => 'optional',
			'Genericons'               => 'block',
		],
	];

	/**
	 * List of stylesheet parts prior to selector/rule removal (tree shaking).
	 *
	 * Keys are MD5 hashes of stylesheets.
	 *
	 * @since 1.0
	 * @var array[] {
	 *     @type int                $group         Either STYLE_AMP_CUSTOM_GROUP_INDEX or STYLE_AMP_KEYFRAMES_GROUP_INDEX.
	 *     @type int                $original_size The byte size of the stylesheet prior to parsing and tree shaking.
	 *     @type int                $final_size    The byte size of the stylesheet after parsing and tree shaking.
	 *     @type DOMElement|DOMAttr $element       Origin element for the styles.
	 *     @type string             $origin        Either 'style_element', 'style_attribute', or 'link_element'.
	 *     @type array              $sources       Source stack.
	 *     @type int                $priority      Priority of the stylesheet.
	 *     @type array|null         $tokens        Stylesheet tokens, with declaration blocks being represented as arrays. Null after shaking occurs.
	 *     @type array|null         $shaken_tokens Shaken stylesheet tokens, where first array index of each array item is whether the token is included. Null until shaking occurs.
	 *     @type string             $serialized    Stylesheet tokens serialized into CSS.
	 *     @type string             $hash          MD5 hash of the parsed stylesheet tokens, prior to tree-shaking.
	 *     @type array              $sources       Sources for the node.
	 *     @type bool               $keyframes     Whether an amp-keyframes.
	 *     @type float              $parse_time    The time duration it took to parse the stylesheet, in milliseconds.
	 *     @type bool               $cached        Whether the parsed stylesheet was retrieved from cache.
	 * }
	 */
	private $pending_stylesheets = [];

	/**
	 * Spec for style[amp-custom] cdata.
	 *
	 * @since 1.0
	 * @var array
	 */
	private $style_custom_cdata_spec;

	/**
	 * The style[amp-custom] element.
	 *
	 * @var DOMElement
	 */
	private $amp_custom_style_element;

	/**
	 * Spec for style[amp-keyframes] cdata.
	 *
	 * @since 1.0
	 * @var array
	 */
	private $style_keyframes_cdata_spec;

	/**
	 * Regex for allowed font stylesheet URL.
	 *
	 * @var string
	 */
	private $allowed_font_src_regex;

	/**
	 * Base URL for styles.
	 *
	 * Full URL with trailing slash.
	 *
	 * @var string
	 */
	private $base_url;

	/**
	 * URL of the content directory.
	 *
	 * @var string
	 */
	private $content_url;

	/**
	 * Class names used in document.
	 *
	 * This list includes all class names that AMP can dynamically add.
	 *
	 * @link https://www.ampproject.org/docs/reference/components/amp-dynamic-css-classes
	 * @since 1.0
	 * @var array|null
	 */
	private $used_class_names;

	/**
	 * Regular expression pattern to match focus class names in selectors.
	 *
	 * The computed pattern is cached to prevent re-constructing for each processed selector.
	 *
	 * @var string|null
	 */
	private $focus_class_name_selector_pattern;

	/**
	 * Attributes used in the document.
	 *
	 * This is initially populated with boolean attributes which can be mutated by AMP at runtime,
	 * since they can by dynamically added at any time.
	 *
	 * @todo With the exception of 'hidden' (which can be on any element), the values here could be removed in favor of
	 *       checking to see if any of the related elements exist in the page in `\AMP_Style_Sanitizer::has_used_attributes()`.
	 *       Nevertheless, selectors mentioning these attributes are very numerous, so tree-shaking improvements will be marginal.
	 *
	 * @see \AMP_Style_Sanitizer::has_used_attributes()
	 *
	 * @since 1.1
	 * @var array
	 */
	private $used_attributes = [
		'autofocus' => true,
		'checked'   => true,
		'controls'  => true,
		'disabled'  => true,
		'hidden'    => true,
		'loop'      => true,
		'multiple'  => true,
		'readonly'  => true,
		'required'  => true,
		'selected'  => true,
	];

	/**
	 * Tag names used in document.
	 *
	 * @since 1.0
	 * @var array|null
	 */
	private $used_tag_names;

	/**
	 * Current node being processed.
	 *
	 * @var DOMElement|DOMAttr
	 */
	private $current_node;

	/**
	 * Current sources for a given node.
	 *
	 * @var array|null
	 */
	private $current_sources;

	/**
	 * Log of the stylesheet URLs that have been imported to guard against infinite loops.
	 *
	 * @var array
	 */
	private $processed_imported_stylesheet_urls = [];

	/**
	 * Mapping of HTML element selectors to AMP selector elements.
	 *
	 * @var array
	 */
	private $selector_mappings = [];

	/**
	 * Elements in extensions which use the video-manager, and thus the video-autoplay.css.
	 *
	 * @var array
	 */
	private $video_autoplay_elements = [
		'amp-3q-player',
		'amp-brid-player',
		'amp-brightcove',
		'amp-dailymotion',
		'amp-delight-player',
		'amp-ima-video',
		'amp-mowplayer',
		'amp-nexxtv-player',
		'amp-ooyala-player',
		'amp-powr-player',
		'amp-story-auto-ads',
		'amp-video',
		'amp-video-iframe',
		'amp-vimeo',
		'amp-viqeo-player',
		'amp-wistia-player',
		'amp-youtube',
	];

	/**
	 * Remote request instance.
	 *
	 * @var RemoteGetRequest
	 */
	private $remote_request;

	/**
	 * All current sanitizers.
	 *
	 * @see AMP_Style_Sanitizer::init()
	 * @var AMP_Base_Sanitizer[]
	 */
	private $sanitizers = [];

	/**
	 * Get error codes that can be raised during parsing of CSS.
	 *
	 * This is used to determine which validation errors should be taken into account
	 * when determining which validation errors should vary the parse cache.
	 *
	 * @return array
	 */
	public static function get_css_parser_validation_error_codes() {
		return [
			self::CSS_SYNTAX_INVALID_AT_RULE,
			self::CSS_SYNTAX_INVALID_DECLARATION,
			self::CSS_SYNTAX_INVALID_PROPERTY,
			self::CSS_SYNTAX_INVALID_PROPERTY_NOLIST,
			self::CSS_SYNTAX_INVALID_IMPORTANT,
			self::CSS_SYNTAX_PARSE_ERROR,
			self::CSS_DISALLOWED_SELECTOR,
			self::STYLESHEET_FETCH_ERROR,
			self::STYLESHEET_TOO_LONG,
		];
	}

	/**
	 * Determine whether the version of PHP-CSS-Parser loaded has all required features for tree shaking and CSS processing.
	 *
	 * @since 1.0.2
	 *
	 * @return bool Returns true if the plugin's forked version of PHP-CSS-Parser is loaded by Composer.
	 */
	public static function has_required_php_css_parser() {
		$reflection = new ReflectionClass( 'Sabberworm\CSS\OutputFormat' );

		$has_output_format_extensions = (
			$reflection->hasProperty( 'sBeforeAtRuleBlock' )
			&&
			$reflection->hasProperty( 'sAfterAtRuleBlock' )
			&&
			$reflection->hasProperty( 'sBeforeDeclarationBlock' )
			&&
			$reflection->hasProperty( 'sAfterDeclarationBlockSelectors' )
			&&
			$reflection->hasProperty( 'sAfterDeclarationBlock' )
		);
		if ( ! $has_output_format_extensions ) {
			return false;
		}

		return true;
	}

	/**
	 * AMP_Base_Sanitizer constructor.
	 *
	 * @since 0.7
	 *
	 * @param Document $dom  Represents the HTML document to sanitize.
	 * @param array    $args Args.
	 */
	public function __construct( $dom, array $args = [] ) {
		parent::__construct( $dom, $args );

		foreach ( AMP_Allowed_Tags_Generated::get_allowed_tag( 'style' ) as $spec_rule ) {
			if ( ! isset( $spec_rule[ AMP_Rule_Spec::TAG_SPEC ]['spec_name'] ) ) {
				continue;
			}
			if ( self::STYLE_AMP_KEYFRAMES_SPEC_NAME === $spec_rule[ AMP_Rule_Spec::TAG_SPEC ]['spec_name'] ) {
				$this->style_keyframes_cdata_spec = $spec_rule[ AMP_Rule_Spec::CDATA ];
			} elseif ( self::STYLE_AMP_CUSTOM_SPEC_NAME === $spec_rule[ AMP_Rule_Spec::TAG_SPEC ]['spec_name'] ) {
				$this->style_custom_cdata_spec = $spec_rule[ AMP_Rule_Spec::CDATA ];
			}
		}

		$spec_name = 'link rel=stylesheet for fonts'; // phpcs:ignore WordPress.WP.EnqueuedResources.NonEnqueuedStylesheet
		foreach ( AMP_Allowed_Tags_Generated::get_allowed_tag( 'link' ) as $spec_rule ) {
			if ( isset( $spec_rule[ AMP_Rule_Spec::TAG_SPEC ]['spec_name'] ) && $spec_name === $spec_rule[ AMP_Rule_Spec::TAG_SPEC ]['spec_name'] ) {
				$this->allowed_font_src_regex = '/^(' . $spec_rule[ AMP_Rule_Spec::ATTR_SPEC_LIST ]['href']['value_regex'] . ')$/';
				break;
			}
		}

		$guessurl = site_url();
		if ( ! $guessurl ) {
			$guessurl = wp_guess_url();
		}
		$this->base_url    = untrailingslashit( $guessurl );
		$this->content_url = WP_CONTENT_URL;

		$this->remote_request = new CachedRemoteGetRequest( new WpHttpRemoteGetRequest() );
	}

	/**
	 * Get list of CSS styles in HTML content of Dom\Document ($this->dom).
	 *
	 * @since 0.4
	 * @codeCoverageIgnore
	 * @deprecated As of 1.0, use get_stylesheets().
	 *
	 * @return array[] Mapping CSS selectors to array of properties, or mapping of keys starting with 'stylesheet:' with value being the stylesheet.
	 */
	public function get_styles() {
		return [];
	}

	/**
	 * Get stylesheets for amp-custom.
	 *
	 * @since 0.7
	 * @return array Values are the CSS stylesheets.
	 */
	public function get_stylesheets() {
		return wp_list_pluck(
			array_filter(
				$this->pending_stylesheets,
				static function( $pending_stylesheet ) {
					return $pending_stylesheet['included'] && self::STYLE_AMP_CUSTOM_GROUP_INDEX === $pending_stylesheet['group'];
				}
			),
			'serialized'
		);
	}

	/**
	 * Get list of all the class names used in the document, including those used in [class] attributes.
	 *
	 * @since 1.0
	 * @return array Used class names.
	 */
	private function get_used_class_names() {
		if ( isset( $this->used_class_names ) ) {
			return $this->used_class_names;
		}

		$dynamic_class_names = [

			/*
			 * See <https://www.ampproject.org/docs/reference/components/amp-dynamic-css-classes>.
			 * Note that amp-referrer-* class names are handled in has_used_class_name() below.
			 */
			'amp-viewer',

			// Classes added based on input mode. See <https://github.com/ampproject/amphtml/blob/bd29b0eb1b28d900d4abed2c1883c6980f18db8e/spec/amp-css-classes.md#input-mode-classes>.
			'amp-mode-touch',
			'amp-mode-mouse',
			'amp-mode-keyboard-active',
		];

		$classes = [];

		$i_amphtml_prefix        = 'i-amphtml-';
		$i_amphtml_prefix_length = 10;
		foreach ( $this->dom->xpath->query( '//*/@class' ) as $class_attribute ) {
			/** @var DOMAttr $class_attribute */
			$mutated         = false;
			$element_classes = [];
			foreach ( array_filter( preg_split( '/\s+/', trim( $class_attribute->nodeValue ) ) ) as $class_name ) {
				if ( substr( $class_name, 0, $i_amphtml_prefix_length ) === $i_amphtml_prefix ) {
					$error     = [
						'code'       => self::DISALLOWED_ATTR_CLASS_NAME,
						'type'       => AMP_Validation_Error_Taxonomy::HTML_ATTRIBUTE_ERROR_TYPE,
						'class_name' => $class_name,
					];
					$sanitized = $this->should_sanitize_validation_error( $error, [ 'node' => $class_attribute ] );
					if ( $sanitized ) {
						$mutated = true;
						continue;
					} else {
						ValidationExemption::mark_node_as_amp_unvalidated( $class_attribute );
					}
				}
				$element_classes[] = $class_name;
			}
			if ( $mutated ) {
				$class_attribute->nodeValue = implode( ' ', $element_classes );
			}
			$classes = array_merge( $classes, $element_classes );
		}

		// Find all [class] attributes and capture the contents of any single- or double-quoted strings.
		foreach ( $this->dom->xpath->query( '//*/@' . Amp::BIND_DATA_ATTR_PREFIX . 'class' ) as $bound_class_attribute ) {
			if ( preg_match_all( '/([\'"])([^\1]*?)\1/', $bound_class_attribute->nodeValue, $matches ) ) {
				$classes = array_merge(
					$classes,
					preg_split( '/\s+/', trim( implode( ' ', $matches[2] ) ) )
				);
			}
		}

		$class_names = array_merge(
			$dynamic_class_names,
			array_unique( array_filter( $classes ) )
		);

		// Find all instances of the toggleClass() action to prevent the class name from being tree-shaken.
		foreach ( $this->dom->xpath->query( '//*/@on[ contains( ., "toggleClass" ) ]' ) as $on_attribute ) {
			if ( preg_match_all( '/\.\s*toggleClass\s*\(\s*class\s*=\s*(([\'"])([^\1]*?)\2|[a-zA-Z0-9_\-]+)/', $on_attribute->nodeValue, $matches ) ) {
				$class_names = array_merge(
					$class_names,
					array_map(
						static function ( $match ) {
							return trim( $match, '"\'' );
						},
						$matches[1]
					)
				);
			}
		}

		// If using the toggleTheme component, get the theme's dark mode class.
		// See usage of toggleTheme in <https://github.com/ampproject/amphtml/pull/36958>.
		$dark_mode_class = $this->dom->body->getAttribute( 'data-prefers-dark-mode-class' );

		// Prevent dark mode class from being tree-shaken.
		if ( $dark_mode_class ) {
			$class_names[] = $dark_mode_class;
		} else {
			$class_names[] = 'amp-dark-mode';
		}

		$this->used_class_names = array_fill_keys( $class_names, true );
		return $this->used_class_names;
	}

	/**
	 * Determine if all the supplied class names are used.
	 *
	 * @since 1.1
	 *
	 * @param string[] $class_names Class names.
	 * @return bool All used.
	 */
	private function has_used_class_name( $class_names ) {
		if ( empty( $this->used_class_names ) ) {
			$this->get_used_class_names();
		}

		foreach ( $class_names as $class_name ) {
			// Bail early with a common case scenario.
			if ( isset( $this->used_class_names[ $class_name ] ) ) {
				continue;
			}

			// Check exact matches first, as they are faster.
			switch ( $class_name ) {
				/*
				 * Common class names used for amp-user-notification and amp-live-list.
				 * See <https://www.ampproject.org/docs/reference/components/amp-user-notification#styling>.
				 * See <https://www.ampproject.org/docs/reference/components/amp-live-list#styling>.
				 */
				case 'amp-active':
				case 'amp-hidden':
					if ( ! $this->has_used_tag_names( [ 'amp-live-list', 'amp-user-notification' ] ) ) {
						return false;
					}
					continue 2;
				// Class names for amp-image-lightbox, see <https://www.ampproject.org/docs/reference/components/amp-image-lightbox#styling>.
				case 'amp-image-lightbox-caption':
					if ( ! $this->has_used_tag_names( [ 'amp-image-lightbox' ] ) ) {
						return false;
					}
					continue 2;
				// Class names for amp-form, see <https://www.ampproject.org/docs/reference/components/amp-form#classes-and-css-hooks>.
				case 'user-valid':
				case 'user-invalid':
					if ( ! $this->has_used_tag_names( [ 'form' ] ) ) {
						return false;
					}
					continue 2;
			}

			// Only do AMP element-specific checks on an AMP components with the corresponding prefix.
			if ( 'amp-' === substr( $class_name, 0, 4 ) ) {

				// Class names for amp-geo, see <https://www.ampproject.org/docs/reference/components/amp-geo#generated-css-classes>.
				if ( 'amp-geo-' === substr( $class_name, 0, 8 ) ) {
					if ( ! $this->has_used_tag_names( [ 'amp-geo' ] ) ) {
						return false;
					}
					continue;
				}

				// Class names for amp-form, see <https://www.ampproject.org/docs/reference/components/amp-form#classes-and-css-hooks>.
				if ( 'amp-form-' === substr( $class_name, 0, 9 ) ) {
					if ( ! $this->has_used_tag_names( [ 'form' ] ) ) {
						return false;
					}
					continue;
				}

				// Class names for extensions which use the video-manager, and thus video-autoplay.css.
				if ( 'amp-video-' === substr( $class_name, 0, 10 ) ) {
					foreach ( $this->video_autoplay_elements as $video_autoplay_element ) {
						if ( $this->has_used_tag_names( [ $video_autoplay_element ] ) ) {
							continue 2;
						}
					}
					return false;
				}

				switch ( substr( $class_name, 0, 11 ) ) {
					/*
					 * Class names for amp-access and amp-access-laterpay.
					 * See <https://www.ampproject.org/docs/reference/components/amp-access>.
					 * See <https://www.ampproject.org/docs/reference/components/amp-access-laterpay#styling>
					 */
					case 'amp-access-':
						if ( ! $this->has_used_attributes( [ 'amp-access' ] ) ) {
							return false;
						}
						continue 2;
					// Class names for amp-video-docking, see <https://amp.dev/documentation/components/amp-video-docking/#styling>.
					case 'amp-docked-':
						if ( ! $this->has_used_attributes( [ 'dock' ] ) ) {
							return false;
						}
						continue 2;
				}

				// Class names for amp-sidebar, see <https://www.ampproject.org/docs/reference/components/amp-sidebar#styling-toolbar>.
				if ( 'amp-sidebar-' === substr( $class_name, 0, 12 ) ) {
					if ( ! $this->has_used_tag_names( [ 'amp-sidebar' ] ) ) {
						return false;
					}
					continue;
				}

				switch ( substr( $class_name, 0, 13 ) ) {
					// Class names for amp-dynamic-css-classes, see <https://www.ampproject.org/docs/reference/components/amp-dynamic-css-classes>.
					case 'amp-referrer-':
						continue 2;
					// Class names for amp-carousel, see <https://www.ampproject.org/docs/reference/components/amp-carousel#styling>.
					case 'amp-carousel-':
						if ( ! $this->has_used_tag_names( [ 'amp-carousel' ] ) ) {
							return false;
						}
						continue 2;
				}

				switch ( substr( $class_name, 0, 14 ) ) {
					// Class names for amp-sticky-ad, see <https://www.ampproject.org/docs/reference/components/amp-sticky-ad#styling>.
					case 'amp-sticky-ad-':
						if ( ! $this->has_used_tag_names( [ 'amp-sticky-ad' ] ) ) {
							return false;
						}
						continue 2;
					// Class names for amp-live-list, see <https://www.ampproject.org/docs/reference/components/amp-live-list#styling>.
					case 'amp-live-list-':
						if ( ! $this->has_used_tag_names( [ 'amp-live-list' ] ) ) {
							return false;
						}
						continue 2;
					// Class names for amp-next-page, see <https://amp.dev/documentation/components/amp-next-page/#styling>.
					case 'amp-next-page-':
						if ( ! $this->has_used_tag_names( [ 'amp-next-page' ] ) ) {
							return false;
						}
						continue 2;
				}

				switch ( substr( $class_name, 0, 16 ) ) {
					// Class names for amp-date-picker, see <https://www.ampproject.org/docs/reference/components/amp-date-picker>.
					case 'amp-date-picker-':
						if ( ! $this->has_used_tag_names( [ 'amp-date-picker' ] ) ) {
							return false;
						}
						continue 2;
					// Class names for amp-geo, see <https://www.ampproject.org/docs/reference/components/amp-geo#generated-css-classes>.
					case 'amp-iso-country-':
						if ( ! $this->has_used_tag_names( [ 'amp-geo' ] ) ) {
							return false;
						}
						continue 2;
				}
			} elseif ( ctype_upper( $class_name[0] ) && $this->has_used_tag_names( [ 'amp-date-picker' ] ) && $this->is_class_allowed_in_amp_date_picker( $class_name ) ) {
				// If the document has an amp-date-picker tag, check if this class is an allowed child of it.
				// That component's child classes won't be present yet in the document, so prevent tree-shaking valid classes.
				// The ctype_upper() check is an optimization since we know up front that all class names in React Dates are
				// in CamelCase form, thus we can short-circut if the first character of the class name is not upper-case.
				continue;
			}

			if ( ! isset( $this->used_class_names[ $class_name ] ) ) {
				return false;
			}
		}

		return true;
	}

	/**
	 * Get list of all the tag names used in the document.
	 *
	 * @since 1.0
	 * @return array Used tag names.
	 */
	private function get_used_tag_names() {
		if ( ! isset( $this->used_tag_names ) ) {
			$this->used_tag_names = [];
			foreach ( $this->dom->getElementsByTagName( '*' ) as $el ) {
				$this->used_tag_names[ $el->tagName ] = true;
			}
		}
		return $this->used_tag_names;
	}

	/**
	 * Determine if all the supplied tag names are used.
	 *
	 * @since 1.1
	 *
	 * @param string[] $tag_names Tag names.
	 * @return bool All used.
	 */
	private function has_used_tag_names( $tag_names ) {
		if ( empty( $this->used_tag_names ) ) {
			$this->get_used_tag_names();
		}
		foreach ( $tag_names as $tag_name ) {
			if ( ! isset( $this->used_tag_names[ $tag_name ] ) ) {
				return false;
			}
		}
		return true;
	}

	/**
	 * Check whether the attributes exist.
	 *
	 * @since 1.1
	 * @todo Make $attribute_names into $attributes as an associative array and implement lookups of specific values. Since attribute values can vary (e.g. with amp-bind), this may not be feasible.
	 *
	 * @param string[] $attribute_names Attribute names.
	 * @return bool Whether all supplied attributes are used.
	 */
	private function has_used_attributes( $attribute_names ) {
		foreach ( $attribute_names as $attribute_name ) {
			if ( ! isset( $this->used_attributes[ $attribute_name ] ) ) {
				$expression = sprintf( '(//@%s)[1]', $attribute_name );

				$this->used_attributes[ $attribute_name ] = ( 0 !== $this->dom->xpath->query( $expression )->length );
			}

			// Attributes for amp-accordion, see <https://amp.dev/documentation/components/amp-accordion/#styling>.
			if ( 'expanded' === $attribute_name ) {
				if ( ! $this->has_used_tag_names( [ 'amp-accordion' ] ) ) {
					return false;
				}
				continue;
			}

			// Attributes for amp-sidebar, see <https://amp.dev/documentation/components/amp-sidebar/#styling>.
			if ( 'open' === $attribute_name ) {
				// The 'open' attribute is also used by the HTML5 <details> attribute.
				if ( ! $this->has_used_tag_names( [ 'amp-sidebar' ] ) && ! $this->has_used_tag_names( [ 'details' ] ) ) {
					return false;
				}
				continue;
			}

			// Attributes for amp-live-list, see <https://amp.dev/documentation/components/amp-live-list/#styling>.
			if ( 'data-tombstone' === $attribute_name ) {
				if ( ! $this->has_used_tag_names( [ 'amp-live-list' ] ) ) {
					return false;
				}
				continue;
			}

			// Attributes for amp-experiment begin with 'amp-x-', see <https://amp.dev/documentation/examples/components/amp-experiment/>.
			if ( 'amp-x-' === substr( $attribute_name, 0, 6 ) ) {
				if ( ! $this->has_used_tag_names( [ 'amp-experiment' ] ) ) {
					return false;
				}
				continue;
			}

			if ( ! $this->used_attributes[ $attribute_name ] ) {
				return false;
			}
		}
		return true;
	}

	/**
	 * Whether a given class is allowed to be styled in <amp-date-picker>.
	 *
	 * That component has child classes that won't be present in the document yet.
	 * So get whether a class is an allowed child.
	 *
	 * @since 1.5.0
	 * @link https://github.com/airbnb/react-dates/tree/05356/src/components
	 *
	 * @param string $class The name of the class to evaluate.
	 * @return bool Whether the class is allowed as a child of <amp-date-picker>.
	 */
	private function is_class_allowed_in_amp_date_picker( $class ) {
		static $class_prefixes = [
			'CalendarDay',
			'CalendarMonth',
			'CalendarMonthGrid',
			'DayPicker',
			'DayPickerKeyboardShortcuts',
			'DayPickerNavigation',
			'KeyboardShortcutRow',
		];

		return in_array( strtok( $class, '_' ), $class_prefixes, true );
	}

	/**
	 * Run logic before any sanitizers are run.
	 *
	 * After the sanitizers are instantiated but before calling sanitize on each of them, this
	 * method is called with list of all the instantiated sanitizers.
	 *
	 * @param AMP_Base_Sanitizer[] $sanitizers Sanitizers.
	 */
	public function init( $sanitizers ) {
		parent::init( $sanitizers );

		$this->sanitizers = $sanitizers;
	}

	/**
	 * Sanitize CSS styles within the HTML contained in this instance's Dom\Document.
	 *
	 * @since 0.4
	 */
	public function sanitize() {

		// When style processing is disabled, simply mark all the CSS elements/attributes as PX-verified.
		if ( $this->args['disable_style_processing'] ) {
			foreach ( $this->dom->xpath->query( '//link[ @rel = "stylesheet" and @href ] | //style | //*/@style' ) as $node ) {
				ValidationExemption::mark_node_as_px_verified( $node );

				// Since stylesheet links are allowed in the HEAD if they are for fonts, mark the href specifically as being the exempted attribute.
				if ( $node instanceof Element && Tag::LINK === $node->tagName ) {
					ValidationExemption::mark_node_as_px_verified( $node->getAttributeNode( Attribute::HREF ) );
					ValidationExemption::mark_node_as_px_verified( $node->getAttributeNode( Attribute::REL ) );
				}
			}
			return;
		}

		// Capture the selector conversion mappings from the other sanitizers.
		foreach ( $this->sanitizers as $sanitizer ) {
			foreach ( $sanitizer->get_selector_conversion_mapping() as $html_selectors => $amp_selectors ) {
				if ( ! isset( $this->selector_mappings[ $html_selectors ] ) ) {
					$this->selector_mappings[ $html_selectors ] = $amp_selectors;
				} else {
					$this->selector_mappings[ $html_selectors ] = array_unique(
						array_merge( $this->selector_mappings[ $html_selectors ], $amp_selectors )
					);
				}

				// Prevent selectors like `amp-img img` getting deleted since `img` does not occur in the DOM.
				if ( $sanitizer->has_light_shadow_dom() ) {
					$this->args['dynamic_element_selectors'] = array_merge(
						$this->args['dynamic_element_selectors'],
						$this->selector_mappings[ $html_selectors ]
					);
				}
			}
		}

		$elements = [];

		$this->focus_class_name_selector_pattern = (
			! empty( $this->args['focus_within_classes'] ) ?
				self::get_class_name_selector_pattern( $this->args['focus_within_classes'] ) :
				null
		);

		/*
		 * Note that xpath is used to query the DOM so that the link and style elements will be
		 * in document order. DOMNode::compareDocumentPosition() is not yet implemented.
		 */

		// @todo Also consider skipping the processing of link and style elements that have data-px-verified-tag.
		$dev_mode_predicate = '';
		if ( DevMode::isActiveForDocument( $this->dom ) ) {
			$dev_mode_predicate = sprintf( ' and not ( @%s )', AMP_Rule_Spec::DEV_MODE_ATTRIBUTE );
		}

		$lower_case = 'translate( %s, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz" )'; // In XPath 2.0 this is lower-case().
		$predicates = [
			sprintf( '( self::style and not( @amp-boilerplate ) and ( not( @type ) or %s = "text/css" ) %s )', sprintf( $lower_case, '@type' ), $dev_mode_predicate ),
			sprintf( '( self::link and @href and %s = "stylesheet" %s )', sprintf( $lower_case, '@rel' ), $dev_mode_predicate ),
		];

		foreach ( $this->dom->xpath->query( '//*[ ' . implode( ' or ', $predicates ) . ' ]' ) as $element ) {
			$elements[] = $element;
		}

		// If 'width' attribute is present for 'col' tag, convert to proper CSS rule.
		// @todo The width attribute on the <col> tag is probably something that should just be allowed in AMP.
		foreach ( $this->dom->getElementsByTagName( 'col' ) as $col ) {
			/**
			 * Col element.
			 *
			 * @var DOMElement $col
			 */
			$width_attr = $col->getAttribute( 'width' );
			if ( ! empty( $width_attr ) && ( false === strpos( $width_attr, '*' ) ) ) {
				$width_style = 'width: ' . $width_attr;
				if ( is_numeric( $width_attr ) ) {
					$width_style .= 'px';
				}
				if ( $col->hasAttribute( 'style' ) ) {
					$col->setAttribute( 'style', $width_style . ';' . $col->getAttribute( 'style' ) );
				} else {
					$col->setAttribute( 'style', $width_style );
				}
				$col->removeAttribute( 'width' );
			}
		}

		/**
		 * Element.
		 *
		 * @var DOMElement $element
		 */
		foreach ( $elements as $element ) {
			$node_name = strtolower( $element->nodeName );
			if ( 'style' === $node_name ) {
				$this->process_style_element( $element );
			} elseif ( 'link' === $node_name ) {
				$this->process_link_element( $element );

				// If the element is still in the document, it is a font stylesheet; make sure it gets moved to the head as required.
				if ( $element->parentNode && 'head' !== $element->parentNode->nodeName ) {
					$this->dom->head->appendChild( $element->parentNode->removeChild( $element ) );
				}
			}
		}

		$styled_elements = $this->dom->xpath->query( "//*[ @style $dev_mode_predicate ]" );
		if ( $this->args['transform_important_qualifiers'] ) {
			foreach ( iterator_to_array( $styled_elements ) as $element ) {
				$this->collect_inline_styles( $element );
			}
		} else {
			foreach ( $styled_elements as $element ) {
				/** @var DOMElement $element */
				$attr = $element->getAttributeNode( Attribute::STYLE );
				if ( $attr && preg_match( '/!\s*important/i', $attr->value ) ) {
					ValidationExemption::mark_node_as_px_verified( $attr );
				}
			}
		}

		$this->finalize_styles();

		$this->did_convert_elements = true;

		$parse_css_duration = 0.0;
		$shake_css_duration = 0.0;
		foreach ( $this->pending_stylesheets as $pending_stylesheet ) {
			if ( ! $pending_stylesheet['cached'] ) {
				$parse_css_duration += $pending_stylesheet['parse_time'];
			}
			$shake_css_duration += $pending_stylesheet['shake_time'];
		}

		// TODO: These cannot use actions when we extract the sanitizers into an external library.

		/**
		 * Logs the server-timing measurement for the CSS parsing.
		 *
		 * @since 2.0
		 * @internal
		 *
		 * @param string   $event_name        Name of the event to log.
		 * @param string   $event_description Description of the event to log.
		 * @param string[] $properties        Optional. Additional properties to add
		 *                                    to the logged record.
		 * @param bool     $verbose_only      Optional. Whether to only show the
		 *                                    event in verbose mode.
		 */
		do_action( 'amp_server_timing_log', 'amp_parse_css', '', [ 'dur' => $parse_css_duration * 1000 ], true );

		/**
		 * Logs the server-timing measurement for the CSS tree-shaking.
		 *
		 * @since 2.0
		 * @internal
		 *
		 * @param string   $event_name        Name of the event to log.
		 * @param string   $event_description Description of the event to log.
		 * @param string[] $properties        Optional. Additional properties to add
		 *                                    to the logged record.
		 * @param bool     $verbose_only      Optional. Whether to only show the
		 *                                    event in verbose mode.
		 */
		do_action( 'amp_server_timing_log', 'amp_shake_css', '', [ 'dur' => $shake_css_duration * 1000 ], true );
	}

	/**
	 * Get the priority of the stylesheet associated with the given element.
	 *
	 * As with hooks, lower priorities mean they should be included first.
	 * The higher the priority value, the more likely it will be that the
	 * stylesheet will be among those excluded due to STYLESHEET_TOO_LONG when
	 * concatenated CSS reaches 75KB.
	 *
	 * @todo This will eventually need to be abstracted to not be CMS-specific, allowing for the prioritization scheme to be defined by configuration.
	 *
	 * @param DOMNode|DOMElement|DOMAttr $node Node.
	 * @return int Priority.
	 */
	private function get_stylesheet_priority( DOMNode $node ) {
		$print_priority_base = 100;
		$admin_bar_priority  = 200;

		$remove_url_scheme = static function( $url ) {
			return preg_replace( '/^https?:/', '', $url );
		};

		if ( $node instanceof DOMElement && 'link' === $node->tagName ) {
			$element_id      = (string) $node->getAttribute( 'id' );
			$schemeless_href = $remove_url_scheme( $node->getAttribute( 'href' ) );

			$plugin = null;
			if ( preg_match(
				sprintf(
					'#^(?:%s|%s)(?<plugin>[^/]+)#i',
					preg_quote( $remove_url_scheme( trailingslashit( WP_PLUGIN_URL ) ), '#' ),
					preg_quote( $remove_url_scheme( trailingslashit( WPMU_PLUGIN_URL ) ), '#' )
				),
				$schemeless_href,
				$matches
			) ) {
				$plugin = $matches['plugin'];
			}

			$style_handle = null;
			if ( preg_match( '/^(.+)-css$/', $element_id, $matches ) ) {
				$style_handle = $matches[1];
			}

			$core_frontend_handles = [
				'wp-block-library',
				'wp-block-library-theme',
			];
			$non_amp_handles       = [
				'mediaelement',
				'wp-mediaelement',
				'thickbox',
			];

			if ( in_array( $style_handle, $non_amp_handles, true ) ) {
				// Styles are for non-AMP JS only so not be used in AMP at all.
				$priority = 1000;
			} elseif ( 'admin-bar' === $style_handle ) {
				// Admin bar has lowest priority. If it gets excluded, then the entire admin bar should be removed.
				$priority = $admin_bar_priority;
			} elseif ( 'dashicons' === $style_handle ) {
				// Dashicons could be used by the theme, but low priority compared to other styles.
				$priority = 90;
			} elseif ( false !== strpos( $schemeless_href, $remove_url_scheme( trailingslashit( get_template_directory_uri() ) ) ) ) {
				// Highest priority are parent theme styles.
				$priority = 1;
			} elseif ( false !== strpos( $schemeless_href, $remove_url_scheme( trailingslashit( get_stylesheet_directory_uri() ) ) ) ) {
				// Penultimate highest priority are child theme styles.
				$priority = 10;
			} elseif ( in_array( $style_handle, $core_frontend_handles, true ) ) {
				// Styles from wp-includes which are enqueued for themes are next highest priority.
				$priority = 20;
			} elseif ( $plugin ) {
				// Styles from plugins are next-highest priority, unless they are in the list of low-priority plugins.
				$priority = in_array( $plugin, $this->args['low_priority_plugins'], true ) ? 150 : 30;
			} elseif ( 0 === strpos( $schemeless_href, $remove_url_scheme( includes_url() ) ) ) {
				// Other styles from wp-includes come next.
				$priority = 40;
			} else {
				// Everything else, perhaps wp-admin styles or stylesheets from remote servers.
				$priority = 50;
			}

			if ( 'print' === $node->getAttribute( 'media' ) ) {
				$priority += $print_priority_base;
			}
		} elseif ( $node instanceof DOMElement && 'style' === $node->tagName && $node->hasAttribute( 'id' ) ) {
			$id         = $node->getAttribute( 'id' );
			$dependency = null;
			if ( preg_match( '/^(?<handle>.+)-inline-css$/', $id, $matches ) ) {
				$dependency = wp_styles()->query( $matches['handle'], 'registered' );
			}

			if (
				$dependency
				&&
				(
					0 === strpos( $dependency->src, get_template_directory_uri() )
					||
					// Add special case for core theme sanitizer which sets the src of the theme stylesheet to false
					// in order to attach the amended stylesheet contents as an inline style for AMP-compatibility.
					// See AMP_Core_Theme_Sanitizer::amend_twentytwentyone_styles() and
					// AMP_Core_Theme_Sanitizer::amend_twentytwentyone_dark_mode_styles().
					'twenty-twenty-one-style' === $dependency->handle
				)
			) {
				// Parent theme inline style.
				$priority = 2;
			} elseif (
				$dependency
				&&
				get_stylesheet() !== get_template()
				&&
				0 === strpos( $dependency->src, get_stylesheet_directory_uri() )
			) {
				// Child theme inline style.
				$priority = 12;
			} elseif ( 'admin-bar-inline-css' === $id ) {
				$priority = $admin_bar_priority;
			} elseif ( 'wp-custom-css' === $id ) {
				// Additional CSS from Customizer.
				$priority = 60;
			} else {
				// Other style elements, including from Recent Comments widget.
				$priority = 70;
			}

			if ( 'print' === $node->getAttribute( 'media' ) ) {
				$priority += $print_priority_base;
			}
		} else {
			// Style attribute.
			$priority = 70;
		}

		return $priority;
	}

	/**
	 * Eliminate relative segments (../ and ./) from a path.
	 *
	 * @param string $path Path with relative segments. This is not a URL, so no host and no query string.
	 * @return string|WP_Error Unrelativized path or WP_Error if there is too much relativity.
	 */
	private function unrelativize_path( $path ) {
		// Eliminate current directory relative paths, like <foo/./bar/./baz.css> => <foo/bar/baz.css>.
		do {
			$path = preg_replace(
				'#/\./#',
				'/',
				$path,
				-1,
				$count
			);
		} while ( 0 !== $count );

		// Collapse relative paths, like <foo/bar/../../baz.css> => <baz.css>.
		do {
			$path = preg_replace(
				'#(?<=/)(?!\.\./)[^/]+/\.\./#',
				'',
				$path,
				1,
				$count
			);
		} while ( 0 !== $count );

		if ( preg_match( '#(^|/)\.+/#', $path ) ) {
			return new WP_Error( self::STYLESHEET_INVALID_RELATIVE_PATH );
		}

		return $path;
	}

	/**
	 * Construct a URL from a parsed one.
	 *
	 * @param array $parsed_url Parsed URL.
	 * @return string Reconstructed URL.
	 */
	private function reconstruct_url( $parsed_url ) {
		$url = '';
		if ( ! empty( $parsed_url['host'] ) ) {
			if ( ! empty( $parsed_url['scheme'] ) ) {
				$url .= $parsed_url['scheme'] . ':';
			}
			$url .= '//';
			$url .= $parsed_url['host'];

			if ( ! empty( $parsed_url['port'] ) ) {
				$url .= ':' . $parsed_url['port'];
			}
		}
		if ( ! empty( $parsed_url['path'] ) ) {
			$url .= $parsed_url['path'];
		}
		if ( ! empty( $parsed_url['query'] ) ) {
			$url .= '?' . $parsed_url['query'];
		}
		if ( ! empty( $parsed_url['fragment'] ) ) {
			$url .= '#' . $parsed_url['fragment'];
		}
		return $url;
	}

	/**
	 * Generate a URL's fully-qualified file path.
	 *
	 * @since 0.7
	 * @see WP_Styles::_css_href()
	 *
	 * @param string   $url The file URL.
	 * @param string[] $allowed_extensions Allowed file extensions for local files.
	 * @return string|WP_Error Style's absolute validated filesystem path, or WP_Error when error.
	 */
	public function get_validated_url_file_path( $url, $allowed_extensions = [] ) {
		if ( ! is_string( $url ) ) {
			return new WP_Error( self::STYLESHEET_URL_SYNTAX_ERROR );
		}

		$needs_base_url = (
			! preg_match( '|^(https?:)?//|', $url )
			&&
			! ( $this->content_url && 0 === strpos( $url, $this->content_url ) )
		);
		if ( $needs_base_url ) {
			$url = $this->base_url . '/' . ltrim( $url, '/' );
		}

		$parsed_url = wp_parse_url( $url );
		if ( empty( $parsed_url['host'] ) ) {
			return new WP_Error( self::STYLESHEET_URL_SYNTAX_ERROR );
		}
		if ( empty( $parsed_url['path'] ) ) {
			return new WP_Error( self::STYLESHEET_URL_SYNTAX_ERROR );
		}

		$path = $this->unrelativize_path( $parsed_url['path'] );
		if ( is_wp_error( $path ) ) {
			return $path;
		}
		$parsed_url['path'] = $path;

		$remove_url_scheme = static function( $schemed_url ) {
			return preg_replace( '#^\w+:(?=//)#', '', $schemed_url );
		};

		unset( $parsed_url['scheme'], $parsed_url['query'], $parsed_url['fragment'] );
		$url = $this->reconstruct_url( $parsed_url );

		$includes_url = $remove_url_scheme( includes_url( '/' ) );
		$content_url  = $remove_url_scheme( content_url( '/' ) );
		$admin_url    = $remove_url_scheme( get_admin_url( null, '/' ) );
		$site_url     = $remove_url_scheme( site_url( '/' ) );

		$allowed_hosts = [
			wp_parse_url( $includes_url, PHP_URL_HOST ),
			wp_parse_url( $content_url, PHP_URL_HOST ),
			wp_parse_url( $admin_url, PHP_URL_HOST ),
		];

		// Validate file extensions.
		if ( ! empty( $allowed_extensions ) ) {
			$pattern = sprintf( '/\.(%s)$/i', implode( '|', $allowed_extensions ) );
			if ( ! preg_match( $pattern, $url ) ) {
				/* translators: %s: the file URL. */
				return new WP_Error( self::STYLESHEET_DISALLOWED_FILE_EXT );
			}
		}

		if ( ! in_array( $parsed_url['host'], $allowed_hosts, true ) ) {
			/* translators: %s: the file URL */
			return new WP_Error( self::STYLESHEET_EXTERNAL_FILE_URL );
		}

		$base_path  = null;
		$file_path  = null;
		$wp_content = 'wp-content';
		if ( 0 === strpos( $url, $content_url ) ) {
			$base_path = WP_CONTENT_DIR;
			$file_path = substr( $url, strlen( $content_url ) - 1 );
		} elseif ( 0 === strpos( $url, $includes_url ) ) {
			$base_path = ABSPATH . WPINC;
			$file_path = substr( $url, strlen( $includes_url ) - 1 );
		} elseif ( 0 === strpos( $url, $admin_url ) ) {
			$base_path = ABSPATH . 'wp-admin';
			$file_path = substr( $url, strlen( $admin_url ) - 1 );
		} elseif ( 0 === strpos( $url, $site_url . trailingslashit( $wp_content ) ) ) {
			// Account for loading content from original wp-content directory not WP_CONTENT_DIR which can happen via register_theme_directory().
			$base_path = ABSPATH . $wp_content;
			$file_path = substr( $url, strlen( $site_url ) + strlen( $wp_content ) );
		}

		if ( ! $file_path || false !== strpos( $file_path, '../' ) || false !== strpos( $file_path, '..\\' ) ) {
			return new WP_Error( self::STYLESHEET_FILE_PATH_NOT_ALLOWED );
		}
		if ( ! file_exists( $base_path . $file_path ) ) {
			return new WP_Error( self::STYLESHEET_FILE_PATH_NOT_FOUND );
		}

		return $base_path . $file_path;
	}

	/**
	 * Set the current node (and its sources when required).
	 *
	 * @since 1.0
	 * @param DOMElement|DOMAttr|null $node Current node, or null to reset.
	 */
	private function set_current_node( $node ) {
		if ( $this->current_node === $node ) {
			return;
		}

		$this->current_node = $node;
		if ( empty( $node ) ) {
			$this->current_sources = null;
		} elseif ( ! empty( $this->args['should_locate_sources'] ) ) {
			$this->current_sources = AMP_Validation_Manager::locate_sources( $node );
		}
	}

	/**
	 * Process style element.
	 *
	 * @param DOMElement $element Style element.
	 */
	private function process_style_element( DOMElement $element ) {
		$this->set_current_node( $element ); // And sources when needing to be located.

		// @todo Any @keyframes rules could be removed from amp-custom and instead added to amp-keyframes.
		$is_keyframes = $element->hasAttribute( 'amp-keyframes' );
		$stylesheet   = trim( $element->textContent );
		$cdata_spec   = $is_keyframes ? $this->style_keyframes_cdata_spec : $this->style_custom_cdata_spec;

		// Honor the style's media attribute.
		$media = $element->getAttribute( 'media' );
		if ( $media && 'all' !== $media ) {
			$stylesheet = sprintf( '@media %s { %s }', $media, $stylesheet );
		}

		// @todo If ValidationExemption::is_px_verified_for_node( $element ) then keep !important.
		// @todo If ValidationExemption::is_amp_unvalidated_for_node( $element ) then keep invalid markup.
		$parsed = $this->get_parsed_stylesheet(
			$stylesheet,
			[
				'allowed_at_rules'   => $cdata_spec['css_spec']['allowed_at_rules'],
				'property_allowlist' => $cdata_spec['css_spec']['declaration'],
				'validate_keyframes' => $cdata_spec['css_spec']['validate_keyframes'],
				'spec_name'          => $is_keyframes ? self::STYLE_AMP_KEYFRAMES_SPEC_NAME : self::STYLE_AMP_CUSTOM_SPEC_NAME,
			]
		);

		if ( $parsed['viewport_rules'] ) {
			$this->create_meta_viewport( $element, $parsed['viewport_rules'] );
		}

		$this->pending_stylesheets[] = [
			'group'              => $is_keyframes ? self::STYLE_AMP_KEYFRAMES_GROUP_INDEX : self::STYLE_AMP_CUSTOM_GROUP_INDEX,
			'original_size'      => (int) strlen( $stylesheet ),
			'final_size'         => null,
			'element'            => $element,
			'origin'             => 'style_element',
			'sources'            => $this->current_sources,
			'priority'           => $this->get_stylesheet_priority( $element ),
			'tokens'             => $parsed['tokens'],
			'hash'               => $parsed['hash'],
			'parse_time'         => $parsed['parse_time'],
			'shake_time'         => null,
			'cached'             => $parsed['cached'],
			'imported_font_urls' => $parsed['imported_font_urls'],
			'important_count'    => $parsed['important_count'],
			'kept_error_count'   => $parsed['kept_error_count'],
			'preload_font_urls'  => $parsed['preload_font_urls'],
		];

		// Remove from DOM since we'll be adding it to a newly-created style[amp-custom] element later.
		$element->parentNode->removeChild( $element );

		$this->set_current_node( null );
	}

	/**
	 * Process link element.
	 *
	 * @param DOMElement $element Link element.
	 */
	private function process_link_element( DOMElement $element ) {
		$href = $element->getAttribute( 'href' );

		// Allow font URLs, including protocol-less URLs and recognized URLs that use HTTP instead of HTTPS.
		$normalized_url = preg_replace( '#^(http:)?(?=//)#', 'https:', $href );
		if ( $this->allowed_font_src_regex && preg_match( $this->allowed_font_src_regex, $normalized_url ) ) {
			if ( $href !== $normalized_url ) {
				$element->setAttribute( 'href', $normalized_url );
			}

			/*
			 * Make sure rel=preconnect link is present for Google Fonts stylesheet.
			 * Note that core themes normally do this already, per <https://core.trac.wordpress.org/ticket/37171>.
			 * But not always, per <https://core.trac.wordpress.org/ticket/44668>.
			 * This also ensures that other themes will get the preconnect link when
			 * they don't implement the resource hint.
			 */
			$needs_preconnect_link = (
				'https://fonts.googleapis.com/' === substr( $normalized_url, 0, 29 )
				&&
				0 === $this->dom->xpath->query( '//link[ @rel = "preconnect" and @crossorigin and starts-with( @href, "https://fonts.gstatic.com" ) ]', $this->dom->head )->length
			);
			if ( $needs_preconnect_link ) {
				$link = AMP_DOM_Utils::create_node(
					$this->dom,
					'link',
					[
						'rel'         => 'preconnect',
						'href'        => 'https://fonts.gstatic.com/',
						'crossorigin' => '',
					]
				);
				$this->dom->head->insertBefore( $link ); // Note that \AMP_Theme_Support::ensure_required_markup() will put this in the optimal order.
			}
			return;
		}

		$stylesheet = $this->get_stylesheet_from_url( $href );
		if ( $stylesheet instanceof WP_Error ) {
			$this->remove_invalid_child(
				$element,
				[
					'code'    => self::STYLESHEET_FETCH_ERROR,
					'type'    => AMP_Validation_Error_Taxonomy::CSS_ERROR_TYPE,
					'url'     => $normalized_url,
					'message' => $stylesheet->get_error_message(),
				]
			);
			return;
		}

		// Honor the link's media attribute.
		$media = $element->getAttribute( 'media' );
		if ( $media && 'all' !== $media ) {
			$stylesheet = sprintf( '@media %s { %s }', $media, $stylesheet );
		}

		$this->set_current_node( $element ); // And sources when needing to be located.

		// @todo If ValidationExemption::is_px_verified_for_node( $element ) then keep !important.
		// @todo If ValidationExemption::is_amp_unvalidated_for_node( $element ) then keep invalid markup.
		$parsed = $this->get_parsed_stylesheet(
			$stylesheet,
			[
				'allowed_at_rules'   => $this->style_custom_cdata_spec['css_spec']['allowed_at_rules'],
				'property_allowlist' => $this->style_custom_cdata_spec['css_spec']['declaration'],
				'stylesheet_url'     => $href,
				'spec_name'          => self::STYLE_AMP_CUSTOM_SPEC_NAME,
			]
		);

		if ( $parsed['viewport_rules'] ) {
			$this->create_meta_viewport( $element, $parsed['viewport_rules'] );
		}

		$this->pending_stylesheets[] = [
			'group'              => self::STYLE_AMP_CUSTOM_GROUP_INDEX,
			'original_size'      => strlen( $stylesheet ),
			'final_size'         => null,
			'element'            => $element,
			'origin'             => 'link_element',
			'sources'            => $this->current_sources, // Needed because node is removed below.
			'priority'           => $this->get_stylesheet_priority( $element ),
			'tokens'             => $parsed['tokens'],
			'hash'               => $parsed['hash'],
			'parse_time'         => $parsed['parse_time'],
			'shake_time'         => null,
			'cached'             => $parsed['cached'],
			'imported_font_urls' => $parsed['imported_font_urls'],
			'important_count'    => $parsed['important_count'],
			'kept_error_count'   => $parsed['kept_error_count'],
			'preload_font_urls'  => $parsed['preload_font_urls'],
		];

		// Remove now that styles have been processed.
		$element->parentNode->removeChild( $element );

		$this->set_current_node( null );
	}

	/**
	 * Get stylesheet from URL.
	 *
	 * @since 1.5.0
	 *
	 * @param string $stylesheet_url Stylesheet URL.
	 * @return string|WP_Error Stylesheet string on success, or WP_Error on failure.
	 */
	private function get_stylesheet_from_url( $stylesheet_url ) {
		$stylesheet    = false;
		$css_file_path = $this->get_validated_url_file_path( $stylesheet_url, [ 'css', 'less', 'scss', 'sass' ] );
		if ( ! is_wp_error( $css_file_path ) ) {
			$stylesheet = file_get_contents( $css_file_path ); // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents -- It's a local filesystem path not a remote request.
		}
		if ( is_string( $stylesheet ) ) {
			return $stylesheet;
		}

		// Fall back to doing an HTTP request for the stylesheet is not accessible directly from the filesystem.
		return $this->fetch_external_stylesheet( $stylesheet_url );
	}

	/**
	 * Fetch external stylesheet.
	 *
	 * @param string $url External stylesheet URL.
	 * @return string|WP_Error Stylesheet contents or WP_Error.
	 */
	private function fetch_external_stylesheet( $url ) {

		// Prepend schemeless stylesheet URL with the same URL scheme as the current site.
		if ( '//' === substr( $url, 0, 2 ) ) {
			$url = wp_parse_url( home_url(), PHP_URL_SCHEME ) . ':' . $url;
		}

		try {
			$response = $this->remote_request->get( $url );
		} catch ( Exception $exception ) {
			if ( $exception instanceof FailedToGetFromRemoteUrl && $exception->hasStatusCode() ) {
				return new WP_Error( "http_{$exception->getStatusCode()}", $exception->getMessage() );
			}
			/* translators: %1$s: the fetched URL, %2$s the error message that was returned */
			return new WP_Error( 'http_error', sprintf( __( 'Failed to fetch: %1$s (%2$s)', 'amp' ), $url, $exception->getMessage() ) );
		}

		$status = $response->getStatusCode();

		if ( $status < 200 || $status >= 300 ) {
			/* translators: %1$s: the URL, %2$d: the HTTP status code, %3$s: the HTTP status message */
			return new WP_Error( "http_{$status}", sprintf( __( 'Failed to fetch: %1$s (HTTP %2$d: %3$s)', 'amp' ), $url, $status, get_status_header_desc( $status ) ) );
		}

		$content_type = (array) $response->getHeader( 'content-type' );

		if ( ! empty( $content_type ) && ! preg_match( '#^text/css#', $content_type[0] ) ) {
			return new WP_Error(
				'no_css_content_type',
				__( 'Response did not contain the expected text/css content type.', 'amp' )
			);
		}

		return $response->getBody();
	}

	/**
	 * Get parsed stylesheet (from cache).
	 *
	 * If the sanitization status has changed for the validation errors in the cached stylesheet since it was cached,
	 * then the cache is invalidated, as the parsed stylesheet needs to be re-constructed.
	 *
	 * @since 1.0
	 * @see \AMP_Style_Sanitizer::parse_stylesheet()
	 *
	 * @param string $stylesheet Stylesheet.
	 * @param array  $options {
	 *     Options.
	 *
	 *     @type string[] $property_allowlist Exclusively-allowed properties.
	 *     @type string[] $property_denylist  Disallowed properties.
	 *     @type string   $stylesheet_url     Original URL for stylesheet when originating via link or @import.
	 *     @type array    $allowed_at_rules   Allowed @-rules.
	 *     @type bool     $validate_keyframes Whether keyframes should be validated.
	 *     @type string   $spec_name          Spec name.
	 * }
	 * @return array {
	 *    Processed stylesheet.
	 *
	 *    @type array    $tokens             Stylesheet tokens, where arrays are tuples for declaration blocks.
	 *    @type string   $hash               MD5 hash of the parsed stylesheet.
	 *    @type array    $validation_results Validation results, array containing arrays with error and sanitized keys.
	 *    @type array    $imported_font_urls Imported font stylesheet URLs.
	 *    @type int      $priority           The priority of the stylesheet.
	 *    @type float    $parse_time         The time duration it took to parse the stylesheet, in milliseconds.
	 *    @type float    $shake_time         The time duration it took to tree-shake the stylesheet, in milliseconds.
	 *    @type bool     $cached             Whether the parsed stylesheet was cached.
	 *    @type int      $important_count    Number of !important qualifiers.
	 *    @type int      $kept_error_count   Number of instances of invalid markup causing validation errors which are kept.
	 *    @type string[] $preload_font_urls  Font URLs to preload.
	 * }
	 */
	private function get_parsed_stylesheet( $stylesheet, $options = [] ) {
		$cached         = true;
		$cache_group    = 'amp-parsed-stylesheet-v40'; // This should be bumped whenever the PHP-CSS-Parser is updated or parsed format is updated.
		$use_transients = $this->should_use_transient_caching();

		// @todo If ValidationExemption::is_px_verified_for_node( $this->current_node ) then keep !important.
		// @todo If ValidationExemption::is_amp_unvalidated_for_node( $this->current_node ) then keep invalid markup.
		$cache_impacting_options = array_merge(
			wp_array_slice_assoc(
				$options,
				[
					'property_allowlist',
					'property_denylist',
					'stylesheet_url',
					'allowed_at_rules',
				]
			),
			wp_array_slice_assoc(
				$this->args,
				[
					'should_locate_sources',
					'parsed_cache_variant',
					'dynamic_element_selectors',
					'transform_important_qualifiers',
					'font_face_display_overrides',
				]
			),
			[
				'language'          => get_bloginfo( 'language' ), // Used to tree-shake html[lang] selectors.
				'selector_mappings' => $this->selector_mappings,
			]
		);

		$cache_key = md5( $stylesheet . wp_json_encode( $cache_impacting_options ) );

		if ( $use_transients ) {
			$parsed = get_transient( $cache_group . '-' . $cache_key );
		} else {
			$parsed = wp_cache_get( $cache_key, $cache_group );
		}

		/*
		 * Make sure that the parsed stylesheet was cached with current sanitizations.
		 * The should_sanitize_validation_error method prevents duplicates from being reported.
		 */
		if ( ! empty( $parsed['validation_results'] ) ) {
			foreach ( $parsed['validation_results'] as $validation_result ) {
				$sanitized = $this->should_sanitize_validation_error( $validation_result['error'] );
				if ( $sanitized !== $validation_result['sanitized'] ) {
					$parsed = null; // Change to sanitization of validation error detected, so cache cannot be used.
					break;
				}
			}
		}

		if ( ! $parsed || ! isset( $parsed['tokens'] ) || ! is_array( $parsed['tokens'] ) ) {
			$parsed = $this->parse_stylesheet( $stylesheet, $options );
			$cached = false;

			/*
			 * When an object cache is not available, we cache with an expiration to prevent the options table from
			 * getting filled infinitely. On the other hand, if an external object cache is available then we don't
			 * set an expiration because it should implement LRU cache expulsion policy.
			 */
			if ( $use_transients ) {
				// The expiration is to ensure transient doesn't stick around forever since no LRU flushing like with external object cache.
				set_transient( $cache_group . '-' . $cache_key, $parsed, MONTH_IN_SECONDS );
			} else {
				wp_cache_set( $cache_key, $parsed, $cache_group );
			}
		}

		$parsed['kept_error_count'] = 0;
		foreach ( $parsed['validation_results'] as $validation_result ) {
			if ( ! $validation_result['sanitized'] ) {
				$parsed['kept_error_count']++;
			}
		}

		$parsed['cached'] = $cached;
		return $parsed;
	}

	/**
	 * Check whether transient caching for stylesheets should be used.
	 *
	 * @return bool Whether transient caching should be used.
	 */
	private function should_use_transient_caching() {
		if ( wp_using_ext_object_cache() ) {
			return false;
		}

		if ( ! $this->args['allow_transient_caching'] ) {
			return false;
		}

		if ( AMP_Options_Manager::get_option( Option::DISABLE_CSS_TRANSIENT_CACHING, false ) ) {
			return false;
		}

		return true;
	}

	/**
	 * Parse imported stylesheet and replace the `@import` rule with the imported rules in the provided CSS list (in place).
	 *
	 * @param Import  $item     Import object.
	 * @param CSSList $css_list CSS List.
	 * @param array   $options {
	 *     Options.
	 *
	 *     @type string $stylesheet_url Original URL for stylesheet when originating via link or @import.
	 * }
	 * @return array {
	 *     Results.
	 *
	 *     @type array    $validation_results Validation results.
	 *     @type array    $imported_font_urls Imported font URLs.
	 *     @type array    $viewport_rules     Extracted viewport rules.
	 *     @type int      $important_count    Number of !important qualifiers.
	 *     @type string[] $preload_font_urls  Font URLs to preload.
	 * }
	 */
	private function splice_imported_stylesheet( Import $item, CSSList $css_list, $options ) {
		$validation_results = [];
		$imported_font_urls = [];
		$viewport_rules     = [];
		$at_rule_args       = $item->atRuleArgs();
		$location           = array_shift( $at_rule_args );
		$media_query        = array_shift( $at_rule_args );
		$important_count    = 0;
		$preload_font_urls  = [];

		if ( isset( $options['stylesheet_url'] ) ) {
			$this->real_path_urls( [ $location ], $options['stylesheet_url'] );
		}

		$import_stylesheet_url = $location->getURL()->getString();

		// Prevent importing something that has already been imported, and avoid infinite recursion.
		if ( isset( $this->processed_imported_stylesheet_urls[ $import_stylesheet_url ] ) ) {
			$css_list->remove( $item );
			return compact( 'validation_results', 'imported_font_urls', 'viewport_rules', 'important_count', 'preload_font_urls' );
		}
		$this->processed_imported_stylesheet_urls[ $import_stylesheet_url ] = true;

		// Prevent importing font stylesheets from allowed font CDNs. These will get added to the document as links instead.
		$https_import_stylesheet_url = preg_replace( '#^(http:)?(?=//)#', 'https:', $import_stylesheet_url );
		if ( $this->allowed_font_src_regex && preg_match( $this->allowed_font_src_regex, $https_import_stylesheet_url ) ) {
			$imported_font_urls[] = $https_import_stylesheet_url;
			$css_list->remove( $item );
			_doing_it_wrong(
				'wp_enqueue_style',
				esc_html(
					sprintf(
						/* translators: 1: @import. 2: wp_enqueue_style(). 3: font CDN URL. */
						__( 'It is not a best practice to use %1$s to load font CDN stylesheets. Please use %2$s to enqueue %3$s as its own separate script.', 'amp' ),
						'@import',
						'wp_enqueue_style()',
						$import_stylesheet_url
					)
				),
				'1.0'
			);

			return compact( 'validation_results', 'imported_font_urls', 'viewport_rules', 'important_count', 'preload_font_urls' );
		}

		$stylesheet = $this->get_stylesheet_from_url( $import_stylesheet_url );
		if ( $stylesheet instanceof WP_Error ) {
			$error     = [
				'code'    => self::STYLESHEET_FETCH_ERROR,
				'type'    => AMP_Validation_Error_Taxonomy::CSS_ERROR_TYPE,
				'url'     => $import_stylesheet_url,
				'message' => $stylesheet->get_error_message(),
			];
			$sanitized = $this->should_sanitize_validation_error( $error );
			if ( $sanitized ) {
				$css_list->remove( $item );
			}
			$validation_results[] = compact( 'error', 'sanitized' );

			return compact( 'validation_results', 'imported_font_urls', 'viewport_rules', 'important_count', 'preload_font_urls' );
		}

		if ( $media_query ) {
			$stylesheet = sprintf( '@media %s { %s }', $media_query, $stylesheet );
		}

		$options['stylesheet_url'] = $import_stylesheet_url;

		$parsed_stylesheet  = $this->create_validated_css_document( $stylesheet, $options );
		$validation_results = array_merge( $validation_results, $parsed_stylesheet['validation_results'] );
		$viewport_rules     = $parsed_stylesheet['viewport_rules'];
		$important_count    = $parsed_stylesheet['important_count'];
		$preload_font_urls  = $parsed_stylesheet['preload_font_urls'];

		if ( ! empty( $parsed_stylesheet['css_document'] ) ) {
			/**
			 * CSS Doc.
			 *
			 * @var CSSDocument $css_document
			 */
			$css_document = $parsed_stylesheet['css_document'];

			$this->replace_inside_css_list( $css_list, $item, $css_document->getContents() );
		} else {
			$css_list->remove( $item );
		}

		return compact( 'validation_results', 'imported_font_urls', 'viewport_rules', 'important_count', 'preload_font_urls' );
	}

	/**
	 * Replace an item inside of a CSSList.
	 *
	 * This is being used instead of `CSSList::splice()` because it uses `array_splice()` which does not work properly
	 * if the array keys are not sequentially indexed from 0, which happens when `CSSList::remove()` is employed.
	 *
	 * @see CSSList::splice()
	 * @see CSSList::replace()
	 * @see CSSList::remove()
	 *
	 * @param CSSList                      $css_list  CSS list.
	 * @param AtRule|RuleSet|CSSList       $old_item  Old item.
	 * @param AtRule[]|RuleSet[]|CSSList[] $new_items New item(s). If empty, the old item is simply removed.
	 * @return bool Whether the replacement was successful.
	 */
	private function replace_inside_css_list( CSSList $css_list, $old_item, $new_items = [] ) {
		$contents = array_values( $css_list->getContents() ); // Required to obtain the offset instead of the index.
		$offset   = array_search( $old_item, $contents, true );
		if ( false !== $offset ) {
			array_splice( $contents, $offset, 1, $new_items );
			$css_list->setContents( $contents );
			return true;
		}
		return false;
	}

	/**
	 * Create validated CSS document.
	 *
	 * @since 1.0
	 *
	 * @param string $stylesheet_string Stylesheet.
	 * @param array  $options           Options. See definition in \AMP_Style_Sanitizer::process_stylesheet().
	 * @return array {
	 *    Parsed stylesheet.
	 *
	 *    @type CSSDocument $css_document       CSS Document.
	 *    @type array       $validation_results Validation results, array containing arrays with error and sanitized keys.
	 *    @type string      $stylesheet_url     Stylesheet URL, if available.
	 *    @type array       $imported_font_urls Imported font URLs.
	 *    @type array       $viewport_rules     Extracted viewport rules.
	 *    @type int         $important_count    Number of !important qualifiers.
	 *    @type string[]    $preload_font_urls  Font URLs to preload.
	 * }
	 */
	private function create_validated_css_document( $stylesheet_string, $options ) {
		$validation_results = [];
		$imported_font_urls = [];
		$viewport_rules     = [];
		$important_count    = 0;
		$preload_font_urls  = [];
		$css_document       = null;

		// Note that there is no known case where an exception can be thrown here since PHP-CSS-Parser is using lenient parsing.
		try {
			// Remove spaces from data URLs, which cause errors and PHP-CSS-Parser can't handle them.
			$stylesheet_string = $this->remove_spaces_from_url_values( $stylesheet_string );

			$parser_settings = Sabberworm\CSS\Settings::create();
			$css_parser      = new Sabberworm\CSS\Parser( $stylesheet_string, $parser_settings );
			$css_document    = $css_parser->parse(); // @todo If 'utf-8' is not $css_parser->getCharset() then issue warning?

			if ( ! empty( $options['stylesheet_url'] ) ) {
				$this->real_path_urls(
					array_filter(
						$css_document->getAllValues(),
						static function ( $value ) {
							return $value instanceof URL;
						}
					),
					$options['stylesheet_url']
				);
			}

			$processed_css_list = $this->process_css_list( $css_document, $options );

			$validation_results = array_merge(
				$validation_results,
				$processed_css_list['validation_results']
			);
			$viewport_rules     = array_merge(
				$viewport_rules,
				$processed_css_list['viewport_rules']
			);
			$important_count    = $processed_css_list['important_count'];
			$imported_font_urls = $processed_css_list['imported_font_urls'];
			$preload_font_urls  = array_merge( $preload_font_urls, $processed_css_list['preload_font_urls'] );
		} catch ( SourceException $exception ) {
			$error = [
				'code'      => self::CSS_SYNTAX_PARSE_ERROR,
				'message'   => $exception->getMessage(),
				'type'      => AMP_Validation_Error_Taxonomy::CSS_ERROR_TYPE,
				'spec_name' => $options['spec_name'],
			];

			/*
			 * This is not a recoverable error, so sanitized here is just used to give user control
			 * over whether to proceed with serving this exception-raising stylesheet in AMP.
			 */
			$sanitized = $this->should_sanitize_validation_error( $error );

			$validation_results[] = compact( 'error', 'sanitized' );
		}
		return compact( 'validation_results', 'css_document', 'imported_font_urls', 'viewport_rules', 'important_count', 'preload_font_urls' );
	}

	/**
	 * Parse stylesheet.
	 *
	 * Sanitizes invalid CSS properties and rules, compresses the CSS to remove whitespace and comments, and parses
	 * declaration blocks to allow selectors to later be evaluated for whether they apply to the current document
	 * during tree-shaking.
	 *
	 * @since 1.0
	 *
	 * @param string $stylesheet_string Stylesheet.
	 * @param array  $options           Options. See definition in \AMP_Style_Sanitizer::process_stylesheet().
	 * @return array {
	 *    Parsed stylesheet.
	 *
	 *    @type array    $tokens             Stylesheet tokens, where arrays are tuples for declaration blocks.
	 *    @type string   $hash               MD5 hash of the parsed stylesheet.
	 *    @type array    $validation_results Validation results, array containing arrays with error and sanitized keys.
	 *    @type array    $imported_font_urls Imported font stylesheet URLs.
	 *    @type float    $parse_time         The time duration it took to parse the stylesheet, in milliseconds.
	 *    @type int      $important_count    Number of !important qualifiers.
	 *    @type string[] $preload_font_urls  Font URLs to preload.
	 * }
	 */
	private function parse_stylesheet( $stylesheet_string, $options = [] ) {
		$start_time = microtime( true );

		$options = array_merge(
			[
				'allowed_at_rules'   => [],
				'property_denylist'  => [
					// See <https://www.ampproject.org/docs/design/responsive/style_pages#disallowed-styles>.
					'behavior',
					'-moz-binding',
				],
				'property_allowlist' => [],
				'validate_keyframes' => false,
				'stylesheet_url'     => null,
				'spec_name'          => null,
			],
			$options
		);

		// Strip the dreaded UTF-8 byte order mark (BOM, \uFEFF). This should ideally get handled by PHP-CSS-Parser <https://github.com/sabberworm/PHP-CSS-Parser/issues/150>.
		$stylesheet_string = preg_replace( '/^\xEF\xBB\xBF/', '', $stylesheet_string );

		// Strip obsolete CDATA sections and HTML comments which were used for old school XHTML.
		$stylesheet_string = preg_replace( '#^\s*<!--#', '', $stylesheet_string );
		$stylesheet_string = preg_replace( '#^\s*<!\[CDATA\[#', '', $stylesheet_string );
		$stylesheet_string = preg_replace( '#\]\]>\s*$#', '', $stylesheet_string );
		$stylesheet_string = preg_replace( '#-->\s*$#', '', $stylesheet_string );

		$tokens             = [];
		$parsed_stylesheet  = $this->create_validated_css_document( $stylesheet_string, $options );
		$validation_results = $parsed_stylesheet['validation_results'];
		if ( ! empty( $parsed_stylesheet['css_document'] ) ) {
			$css_document = $parsed_stylesheet['css_document'];

			$output_format = Sabberworm\CSS\OutputFormat::createCompact();
			$output_format->setSemicolonAfterLastRule( false );

			$before_declaration_block          = sprintf( '/*%s*/', chr( 1 ) );
			$between_selectors                 = sprintf( '/*%s*/', chr( 2 ) );
			$after_declaration_block_selectors = sprintf( '/*%s*/', chr( 3 ) );
			$between_properties                = sprintf( '/*%s*/', chr( 4 ) );
			$after_declaration_block           = sprintf( '/*%s*/', chr( 5 ) );
			$before_at_rule                    = sprintf( '/*%s*/', chr( 6 ) );
			$after_at_rule                     = sprintf( '/*%s*/', chr( 7 ) );

			// Add comments to stylesheet if PHP-CSS-Parser has the required extensions for tree shaking.
			if ( self::has_required_php_css_parser() ) {
				$output_format->set( 'BeforeDeclarationBlock', $before_declaration_block );
				$output_format->set( 'SpaceBeforeSelectorSeparator', $between_selectors );
				$output_format->set( 'AfterDeclarationBlockSelectors', $after_declaration_block_selectors );
				$output_format->set( 'AfterDeclarationBlock', $after_declaration_block );
				$output_format->set( 'BeforeAtRuleBlock', $before_at_rule );
				$output_format->set( 'AfterAtRuleBlock', $after_at_rule );
			}
			$output_format->set( 'SpaceBetweenRules', $between_properties );

			$stylesheet_string = $css_document->render( $output_format );

			$pattern  = '#';
			$pattern .= preg_quote( $before_at_rule, '#' );
			$pattern .= '|';
			$pattern .= preg_quote( $after_at_rule, '#' );
			$pattern .= '|';
			$pattern .= '(' . preg_quote( $before_declaration_block, '#' ) . ')';
			$pattern .= '(.+?)';
			$pattern .= preg_quote( $after_declaration_block_selectors, '#' );
			$pattern .= '(.+?)';
			$pattern .= preg_quote( $after_declaration_block, '#' );
			$pattern .= '#s';

			$dynamic_selector_pattern = null;
			if ( ! empty( $this->args['dynamic_element_selectors'] ) ) {
				$dynamic_selector_pattern = implode(
					'|',
					array_map(
						static function( $selector ) {
							return preg_quote( $selector, '#' );
						},
						$this->args['dynamic_element_selectors']
					)
				);
			}

			$split_stylesheet = preg_split( $pattern, $stylesheet_string, -1, PREG_SPLIT_DELIM_CAPTURE );

			// Ensure all instances of </style> are escaped as <\/style> (such as can occur in SVG data: URLs) to prevent
			// the inline style from prematurely closing style[amp-custom].
			$split_stylesheet = str_replace( '</style>', '<\/style>', $split_stylesheet, $count );

			$length = count( $split_stylesheet );
			for ( $i = 0; $i < $length; $i++ ) {
				// Skip empty tokens.
				if ( '' === $split_stylesheet[ $i ] ) {
					unset( $split_stylesheet[ $i ] );
					continue;
				}

				if ( $before_declaration_block === $split_stylesheet[ $i ] ) {

					// Skip keyframe-selector, which is can be: from | to | <percentage>.
					if ( preg_match( '/^((from|to)\b|-?\d+(\.\d+)?%)/i', $split_stylesheet[ $i + 1 ] ) ) {
						$tokens[] = (
							str_replace( $between_selectors, '', $split_stylesheet[ ++$i ] )
							.
							str_replace( $between_properties, '', $split_stylesheet[ ++$i ] )
						);
						continue;
					}

					$selectors   = explode( $between_selectors . ',', $split_stylesheet[ ++$i ] );
					$declaration = explode( ';' . $between_properties, trim( $split_stylesheet[ ++$i ], '{}' ) );

					// @todo The following logic could be made much more robust if PHP-CSS-Parser did parsing of selectors. See <https://github.com/sabberworm/PHP-CSS-Parser/pull/138#issuecomment-418193262> and <https://github.com/ampproject/amp-wp/issues/2102>.
					$selectors_parsed = [];
					foreach ( $selectors as $selector ) {
						$selectors_parsed[ $selector ] = [];

						// Remove :not() and pseudo selectors to eliminate false negatives, such as with `body:not(.title-tagline-hidden) .site-branding-text` (but not after escape character).
						$reduced_selector = preg_replace( '/(?<!\\\\)::?[a-zA-Z0-9_-]+(\(.+?\))?/', '', $selector );

						// Ignore any selector terms that occur under a dynamic selector.
						if ( $dynamic_selector_pattern ) {
							$reduced_selector = preg_replace( '#((?:' . $dynamic_selector_pattern . ')(?:\.[a-z0-9_-]+)*)[^a-z0-9_-].*#si', '$1', $reduced_selector . ' ' );
						}

						/*
						 * Gather attribute names while removing attribute selectors to eliminate false negative,
						 * such as with `.social-navigation a[href*="example.com"]:before`.
						 */
						$reduced_selector = preg_replace_callback(
							'/\[([A-Za-z0-9_:-]+)(\W?=[^\]]+)?\]/',
							static function( $matches ) use ( $selector, &$selectors_parsed ) {
								$selectors_parsed[ $selector ][ self::SELECTOR_EXTRACTED_ATTRIBUTES ][] = $matches[1];
								return '';
							},
							$reduced_selector
						);

						// Extract class names.
						$reduced_selector = preg_replace_callback(
							'/\.((?:[a-zA-Z0-9_-]+|\\\\.)+)/', // The `\\\\.` will allow any char via escaping, like the colon in `.lg\:w-full`.
							static function( $matches ) use ( $selector, &$selectors_parsed ) {
								$selectors_parsed[ $selector ][ self::SELECTOR_EXTRACTED_CLASSES ][] = stripslashes( $matches[1] );
								return '';
							},
							$reduced_selector
						);

						// Extract IDs.
						$reduced_selector = preg_replace_callback(
							'/#([a-zA-Z0-9_-]+)/',
							static function( $matches ) use ( $selector, &$selectors_parsed ) {
								$selectors_parsed[ $selector ][ self::SELECTOR_EXTRACTED_IDS ][] = $matches[1];
								return '';
							},
							$reduced_selector
						);

						// Extract tag names.
						$reduced_selector = preg_replace_callback(
							'/[a-zA-Z0-9_-]+/',
							static function( $matches ) use ( $selector, &$selectors_parsed ) {
								$selectors_parsed[ $selector ][ self::SELECTOR_EXTRACTED_TAGS ][] = $matches[0];
								return '';
							},
							$reduced_selector
						);

						// At this point, $reduced_selector should contain just the remnants of the selector, primarily combinators.
						unset( $reduced_selector );
					}

					$tokens[] = [
						$selectors_parsed,
						$declaration,
					];
				} else {
					$tokens[] = str_replace( $between_properties, '', $split_stylesheet[ $i ] );
				}
			}
		}

		return array_merge(
			compact( 'tokens', 'validation_results' ),
			[
				'imported_font_urls' => $parsed_stylesheet['imported_font_urls'],
				'hash'               => md5( wp_json_encode( $tokens ) ),
				'parse_time'         => ( microtime( true ) - $start_time ),
				'viewport_rules'     => $parsed_stylesheet['viewport_rules'],
				'important_count'    => $parsed_stylesheet['important_count'],
				'preload_font_urls'  => $parsed_stylesheet['preload_font_urls'],
			]
		);
	}

	/**
	 * Previous return values from calls to should_sanitize_validation_error().
	 *
	 * This is used to prevent duplicates from being reported when the sanitization status
	 * changes for a validation error in a previously-cached stylesheet.
	 *
	 * @see AMP_Style_Sanitizer::should_sanitize_validation_error()
	 * @var array
	 */
	protected $previous_should_sanitize_validation_error_results = [];

	/**
	 * Check whether or not sanitization should occur in response to validation error.
	 *
	 * Supply sources to the error and the current node to data.
	 *
	 * @since 1.0
	 *
	 * @param array $validation_error Validation error.
	 * @param array $data Data including the node.
	 * @return bool Whether to sanitize.
	 */
	public function should_sanitize_validation_error( $validation_error, $data = [] ) {
		if ( ! isset( $data['node'] ) ) {
			$data['node'] = $this->current_node;
		}
		if ( ! isset( $validation_error['sources'] ) ) {
			$validation_error['sources'] = $this->current_sources;
		}

		/*
		 * This is used to prevent duplicates from being reported when the sanitization status
		 * changes for a validation error in a previously-cached stylesheet.
		 */
		$args = compact( 'validation_error', 'data' );
		foreach ( $this->previous_should_sanitize_validation_error_results as $result ) {
			if ( $result['args'] === $args ) {
				return $result['sanitized'];
			}
		}

		$sanitized = parent::should_sanitize_validation_error( $validation_error, $data );

		$this->previous_should_sanitize_validation_error_results[] = compact( 'args', 'sanitized' );
		return $sanitized;
	}

	/**
	 * Remove spaces from CSS URL values which PHP-CSS-Parser doesn't handle.
	 *
	 * @since 1.0
	 *
	 * @param string $css CSS.
	 * @return string CSS with spaces removed from URLs.
	 */
	private function remove_spaces_from_url_values( $css ) {
		return preg_replace_callback(
			// Match CSS url() values that don't have quoted string values.
			'/\burl\(\s*(?=\w)(?P<url>[^}]*?\s*)\)/',
			static function( $matches ) {
				return preg_replace( '/\s+/', '', $matches[0] );
			},
			$css
		);
	}

	/**
	 * Process CSS list.
	 *
	 * @since 1.0
	 *
	 * @param CSSList $css_list CSS List.
	 * @param array   $options Options.
	 * @return array {
	 *     Processed CSS list.
	 *
	 *     @type array    $validation_results Validation results.
	 *     @type array    $viewport_rules     Extracted viewport rules.
	 *     @type array    $imported_font_urls Imported font URLs.
	 *     @type int      $important_count    Number of !important qualifiers.
	 *     @type string[] $preload_font_urls  Font URLs to preload.
	 * }
	 */
	private function process_css_list( CSSList $css_list, $options ) {
		$validation_results = [];
		$viewport_rules     = [];
		$imported_font_urls = [];
		$preload_font_urls  = [];
		$important_count    = 0;

		foreach ( $css_list->getContents() as $css_item ) {
			$sanitized = false;
			if ( $css_item instanceof DeclarationBlock && empty( $options['validate_keyframes'] ) ) {
				$processed = $this->process_css_declaration_block( $css_item, $css_list, $options );

				$important_count   += $processed['important_count'];
				$preload_font_urls  = array_merge( $preload_font_urls, $processed['preload_font_urls'] );
				$validation_results = array_merge(
					$validation_results,
					$processed['validation_results']
				);
			} elseif ( $css_item instanceof AtRuleBlockList ) {
				if ( ! in_array( $css_item->atRuleName(), $options['allowed_at_rules'], true ) ) {
					$error                = [
						'code'      => self::CSS_SYNTAX_INVALID_AT_RULE,
						'at_rule'   => $css_item->atRuleName(),
						'type'      => AMP_Validation_Error_Taxonomy::CSS_ERROR_TYPE,
						'spec_name' => $options['spec_name'],
					];
					$sanitized            = $this->should_sanitize_validation_error( $error );
					$validation_results[] = compact( 'error', 'sanitized' );
				}
				if ( ! $sanitized ) {
					$processed          = $this->process_css_list( $css_item, $options );
					$viewport_rules     = array_merge( $viewport_rules, $processed['viewport_rules'] );
					$important_count   += $processed['important_count'];
					$preload_font_urls  = array_merge( $preload_font_urls, $processed['preload_font_urls'] );
					$validation_results = array_merge(
						$validation_results,
						$processed['validation_results']
					);
				}
			} elseif ( $css_item instanceof Import ) {
				$imported_stylesheet = $this->splice_imported_stylesheet( $css_item, $css_list, $options );
				$imported_font_urls  = array_merge( $imported_font_urls, $imported_stylesheet['imported_font_urls'] );
				$validation_results  = array_merge( $validation_results, $imported_stylesheet['validation_results'] );
				$preload_font_urls   = array_merge( $preload_font_urls, $imported_stylesheet['preload_font_urls'] );
				$viewport_rules      = array_merge( $viewport_rules, $imported_stylesheet['viewport_rules'] );
				$important_count    += $imported_stylesheet['important_count'];
			} elseif ( $css_item instanceof AtRuleSet ) {
				if ( preg_match( '/^(-.+-)?viewport$/', $css_item->atRuleName() ) ) {
					$output_format = new OutputFormat();
					foreach ( $css_item->getRules() as $rule ) {
						$rule_value = $rule->getValue();
						if ( $rule_value instanceof Value ) {
							$rule_value = $rule_value->render( $output_format );
						}

						$viewport_rules[ $rule->getRule() ] = $rule_value;
					}
					$css_list->remove( $css_item );
				} elseif ( ! in_array( $css_item->atRuleName(), $options['allowed_at_rules'], true ) ) {
					$error                = [
						'code'      => self::CSS_SYNTAX_INVALID_AT_RULE,
						'at_rule'   => $css_item->atRuleName(),
						'type'      => AMP_Validation_Error_Taxonomy::CSS_ERROR_TYPE,
						'spec_name' => $options['spec_name'],
					];
					$sanitized            = $this->should_sanitize_validation_error( $error );
					$validation_results[] = compact( 'error', 'sanitized' );
				}

				if ( ! $sanitized ) {
					$processed          = $this->process_css_declaration_block( $css_item, $css_list, $options );
					$validation_results = array_merge( $validation_results, $processed['validation_results'] );
					$important_count   += $processed['important_count'];
					$preload_font_urls  = array_merge( $preload_font_urls, $processed['preload_font_urls'] );
				}
			} elseif ( $css_item instanceof KeyFrame ) {
				if ( ! in_array( 'keyframes', $options['allowed_at_rules'], true ) ) {
					$error                = [
						'code'      => self::CSS_SYNTAX_INVALID_AT_RULE,
						'at_rule'   => $css_item->atRuleName(),
						'type'      => AMP_Validation_Error_Taxonomy::CSS_ERROR_TYPE,
						'spec_name' => $options['spec_name'],
					];
					$sanitized            = $this->should_sanitize_validation_error( $error );
					$validation_results[] = compact( 'error', 'sanitized' );
				}

				if ( ! $sanitized ) {
					$processed          = $this->process_css_keyframes( $css_item, $options );
					$validation_results = array_merge( $validation_results, $processed['validation_results'] );
					$important_count   += $processed['important_count'];
				}
			} elseif ( $css_item instanceof AtRule ) {
				if ( 'charset' === $css_item->atRuleName() ) {
					/*
					 * The @charset at-rule is not allowed in style elements, so it is not allowed in AMP.
					 * If the @charset is defined, then it really should have already been acknowledged
					 * by PHP-CSS-Parser when the CSS was parsed in the first place, so at this point
					 * it is irrelevant and can be removed.
					 */
					$sanitized = true;
				} else {
					$error                = [
						'code'      => self::CSS_SYNTAX_INVALID_AT_RULE,
						'at_rule'   => $css_item->atRuleName(),
						'type'      => AMP_Validation_Error_Taxonomy::CSS_ERROR_TYPE,
						'spec_name' => $options['spec_name'],
					];
					$sanitized            = $this->should_sanitize_validation_error( $error );
					$validation_results[] = compact( 'error', 'sanitized' );
				}
			} else {
				$error                = [
					'code'      => self::CSS_SYNTAX_INVALID_DECLARATION,
					'item'      => get_class( $css_item ),
					'type'      => AMP_Validation_Error_Taxonomy::CSS_ERROR_TYPE,
					'spec_name' => $options['spec_name'],
				];
				$sanitized            = $this->should_sanitize_validation_error( $error );
				$validation_results[] = compact( 'error', 'sanitized' );
			}

			if ( $sanitized ) {
				$css_list->remove( $css_item );
			}
		}

		return compact( 'validation_results', 'imported_font_urls', 'viewport_rules', 'important_count', 'preload_font_urls' );
	}

	/**
	 * Convert URLs in to non-relative real-paths.
	 *
	 * @param URL[]  $urls           URLs.
	 * @param string $stylesheet_url Stylesheet URL.
	 */
	private function real_path_urls( $urls, $stylesheet_url ) {
		$base_url = preg_replace( ':[^/]+(\?.*)?(#.*)?$:', '', $stylesheet_url );
		if ( empty( $base_url ) ) {
			return;
		}

		foreach ( $urls as $url ) {
			// URLs cannot have spaces in them, so strip them (especially when spaces get erroneously injected in data: URLs).
			$url_string = $url->getURL()->getString();

			// For data: URLs, all that is needed is to remove spaces so set and continue.
			if ( 'data:' === substr( $url_string, 0, 5 ) ) {
				continue;
			}

			// If the URL is already absolute, continue since there there is nothing left to do.
			$parsed_url = wp_parse_url( $url_string );
			if ( ! empty( $parsed_url['host'] ) || empty( $parsed_url['path'] ) || '/' === substr( $parsed_url['path'], 0, 1 ) ) {
				continue;
			}

			$parsed_url = wp_parse_url( $base_url . $url->getURL()->getString() );

			// Resolve any relative parent directory paths.
			$path = $this->unrelativize_path( $parsed_url['path'] );
			if ( is_wp_error( $path ) ) {
				continue;
			}
			$parsed_url['path'] = $path;

			$real_url = $this->reconstruct_url( $parsed_url );

			$url->getURL()->setString( $real_url );
		}
	}

	/**
	 * Process CSS rule set.
	 *
	 * @since 1.0
	 * @link https://www.ampproject.org/docs/design/responsive/style_pages#disallowed-styles
	 * @link https://www.ampproject.org/docs/design/responsive/style_pages#restricted-styles
	 *
	 * @param RuleSet $ruleset  Ruleset.
	 * @param CSSList $css_list CSS List.
	 * @param array   $options  Options.
	 *
	 * @return array {
	 *     Results.
	 *
	 *     @type array    $validation_results Validation results.
	 *     @type int      $important_count    Number of !important qualifiers.
	 *     @type string[] $preload_font_urls  Font URLs to preload.
	 * }
	 */
	private function process_css_declaration_block( RuleSet $ruleset, CSSList $css_list, $options ) {
		$validation_results = [];
		$important_count    = 0;
		$preload_font_urls  = [];

		if ( $ruleset instanceof DeclarationBlock ) {
			$validation_results = array_merge(
				$validation_results,
				$this->ampify_ruleset_selectors( $ruleset )
			);
			if ( 0 === count( $ruleset->getSelectors() ) ) {
				$css_list->remove( $ruleset );
				return compact( 'validation_results', 'important_count', 'preload_font_urls' );
			}
		}

		// Remove disallowed properties.
		if ( ! empty( $options['property_allowlist'] ) ) {
			$properties = $ruleset->getRules();
			foreach ( $properties as $property ) {
				$vendorless_property_name = preg_replace( '/^-\w+-/', '', $property->getRule() );
				if ( ! in_array( $vendorless_property_name, $options['property_allowlist'], true ) ) {
					$error     = [
						'code'               => self::CSS_SYNTAX_INVALID_PROPERTY,
						'css_property_name'  => $property->getRule(),
						'css_property_value' => $property->getValue(),
						'type'               => AMP_Validation_Error_Taxonomy::CSS_ERROR_TYPE,
						'spec_name'          => $options['spec_name'],
					];
					$sanitized = $this->should_sanitize_validation_error( $error );
					if ( $sanitized ) {
						$ruleset->removeRule( $property->getRule() );
					}
					$validation_results[] = compact( 'error', 'sanitized' );
				}
			}
		} else {
			foreach ( $options['property_denylist'] as $illegal_property_name ) {
				$properties = $ruleset->getRules( $illegal_property_name );
				foreach ( $properties as $property ) {
					$error     = [
						'code'               => self::CSS_SYNTAX_INVALID_PROPERTY_NOLIST,
						'css_property_name'  => $property->getRule(),
						'css_property_value' => (string) $property->getValue(),
						'type'               => AMP_Validation_Error_Taxonomy::CSS_ERROR_TYPE,
						'spec_name'          => $options['spec_name'],
					];
					$sanitized = $this->should_sanitize_validation_error( $error );
					if ( $sanitized ) {
						$ruleset->removeRule( $property->getRule() );
					}
					$validation_results[] = compact( 'error', 'sanitized' );
				}
			}
		}

		if ( $ruleset instanceof AtRuleSet && 'font-face' === $ruleset->atRuleName() ) {
			$preload_font_urls = $this->process_font_face_at_rule( $ruleset, $options );
		}

		$transformed        = $this->transform_important_qualifiers( $ruleset, $css_list, $options );
		$validation_results = array_merge(
			$validation_results,
			$transformed['validation_results']
		);
		$important_count    = $transformed['important_count'];

		// Remove the ruleset if it is now empty.
		if ( 0 === count( $ruleset->getRules() ) ) {
			$css_list->remove( $ruleset );
		}
		return compact( 'validation_results', 'important_count', 'preload_font_urls' );
	}

	/**
	 * Process @font-face by making src URLs non-relative and converting data: URLs into file URLs (with educated guessing).
	 *
	 * @since 1.0
	 *
	 * @param AtRuleSet $ruleset Ruleset for @font-face.
	 * @param array     $options {
	 *     Options.
	 *
	 *     @type string $stylesheet_url Stylesheet URL, if available.
	 * }
	 * @return string[] Font URLs to preload.
	 */
	private function process_font_face_at_rule( AtRuleSet $ruleset, $options ) {
		$src_properties = $ruleset->getRules( 'src' );
		if ( empty( $src_properties ) ) {
			return [];
		}

		$preload_font_urls = [];

		// Obtain the font-family name to guess the filename.
		$font_family   = null;
		$font_basename = null;
		$properties    = $ruleset->getRules( 'font-family' );
		$property      = end( $properties );
		if ( $property instanceof Rule ) {
			$font_family = trim( $property->getValue(), '"\'' );

			// Remove all non-word characters from the font family to serve as the filename.
			$font_basename = preg_replace( '/[^A-Za-z0-9_\-]/', '', $font_family ); // Same as sanitize_key() minus case changes.
		}

		// Obtain the stylesheet base URL from which to guess font file locations.
		$stylesheet_base_url = null;
		if ( ! empty( $options['stylesheet_url'] ) ) {
			$stylesheet_base_url = preg_replace(
				':[^/]+(\?.*)?(#.*)?$:',
				'',
				$options['stylesheet_url']
			);
			$stylesheet_base_url = trailingslashit( $stylesheet_base_url );
		}

		// Obtain the font file path (if any) and the first font src type.
		$font_file      = '';
		$first_src_type = '';

		// Attempt to transform data: URLs in src properties to be external file URLs.
		foreach ( $src_properties as $src_property ) {
			$value = $src_property->getValue();
			if ( ! ( $value instanceof RuleValueList ) ) {
				continue;
			}

			/*
			 * The CSS Parser parses a src such as:
			 *
			 *    url(data:application/font-woff;...) format('woff'),
			 *    url('Genericons.ttf') format('truetype'),
			 *    url('Genericons.svg#genericonsregular') format('svg')
			 *
			 * As a list of components consisting of:
			 *
			 *    URL,
			 *    RuleValueList( CSSFunction, URL ),
			 *    RuleValueList( CSSFunction, URL ),
			 *    CSSFunction
			 *
			 * Clearly the components here are not logically grouped. So the first step is to fix the order.
			 */
			$sources = [];
			foreach ( $value->getListComponents() as $component ) {
				if ( $component instanceof RuleValueList ) {
					$subcomponents = $component->getListComponents();
					$subcomponent  = array_shift( $subcomponents );
					if ( $subcomponent ) {
						if ( empty( $sources ) ) {
							$sources[] = [ $subcomponent ];
						} else {
							$sources[ count( $sources ) - 1 ][] = $subcomponent;
						}
					}
					foreach ( $subcomponents as $subcomponent ) {
						$sources[] = [ $subcomponent ];
					}
				} elseif ( empty( $sources ) ) {
					$sources[] = [ $component ];
				} else {
					$sources[ count( $sources ) - 1 ][] = $component;
				}
			}

			/**
			 * Source file URL list.
			 *
			 * @var string[] $source_file_urls
			 */
			$source_file_urls = [];

			/**
			 * Source data URL collection.
			 *
			 * @var URL[]    $source_data_url_objects
			 */
			$source_data_url_objects = [];
			foreach ( $sources as $source ) {
				if ( count( $source ) !== 2 ) {
					continue;
				}
				list( $url, $format ) = $source;
				if (
					! $url instanceof URL
					||
					! $format instanceof CSSFunction
					||
					$format->getName() !== 'format'
					||
					count( $format->getArguments() ) !== 1
				) {
					continue;
				}

				list( $format_value ) = $format->getArguments();
				$format_value         = trim( $format_value, '"\'' );

				$value = $url->getURL()->getString();
				if ( 'data:' === substr( $value, 0, 5 ) ) {
					$source_data_url_objects[ $format_value ] = $source[0];
					if ( empty( $first_src_type ) ) {
						$first_src_type = 'inline';
					}
				} else {
					$source_file_urls[] = $value;
					if ( empty( $first_src_type ) ) {
						$first_src_type = 'file';
						$font_file      = $value;
					}
				}
			}

			// Convert data: URLs into regular URLs, assuming there will be a file present (e.g. woff fonts in core themes).
			foreach ( $source_data_url_objects as $format => $data_url ) {
				$mime_type = strtok( substr( $data_url->getURL()->getString(), 5 ), ';' );
				if ( $mime_type ) {
					$extension = preg_replace( ':.+/(.+-)?:', '', $mime_type );
				} else {
					$extension = $format;
				}
				$extension = sanitize_key( $extension );

				$guessed_urls = [];

				// Guess URLs based on any other font sources that are not using data: URLs (e.g. truetype fallback for inline woff2).
				foreach ( $source_file_urls as $source_file_url ) {
					$guessed_url = preg_replace(
						':(?<=\.)\w+(\?.*)?(#.*)?$:', // Match the file extension in the URL.
						$extension,
						$source_file_url,
						1,
						$count
					);
					if ( 1 === $count ) {
						$guessed_urls[] = $guessed_url;
					}
				}

				/*
				 * Guess some font file URLs based on the font name in a fonts directory based on precedence of Twenty Nineteen.
				 * For example, the NonBreakingSpaceOverride woff2 font file is located at fonts/NonBreakingSpaceOverride.woff2.
				 */
				if ( $stylesheet_base_url && $font_basename ) {
					$guessed_urls[] = $stylesheet_base_url . sprintf( 'fonts/%s.%s', $font_basename, $extension );
					$guessed_urls[] = $stylesheet_base_url . sprintf( 'fonts/%s.%s', strtolower( $font_basename ), $extension );
				}

				// Find the font file that exists, and then replace the data: URL with the external URL for the font.
				foreach ( $guessed_urls as $guessed_url ) {
					$path = $this->get_validated_url_file_path( $guessed_url, [ 'woff', 'woff2', 'ttf', 'otf', 'svg' ] );
					if ( ! is_wp_error( $path ) ) {
						$data_url->getURL()->setString( $guessed_url );
						if ( 'inline' === $first_src_type ) {
							$first_src_type = 'file';
							$font_file      = $guessed_url;
						}
						continue 2;
					}
				}

				// As fallback, look for fonts bundled with the AMP plugin.
				$font_filename = sprintf( '%s.%s', strtolower( $font_basename ), $extension );
				$bundled_fonts = [
					'nonbreakingspaceoverride.woff',
					'nonbreakingspaceoverride.woff2',
					'genericons.woff',
				];
				if ( in_array( $font_filename, $bundled_fonts, true ) ) {
					$font_file = plugin_dir_url( AMP__FILE__ ) . "assets/fonts/$font_filename";
					$data_url->getURL()->setString( $font_file );
					$first_src_type = 'file';
				}
			} // End foreach $source_data_url_objects.
		} // End foreach $src_properties.

		// Override the 'font-display' property to improve font performance.
		if ( $font_family && in_array( $font_family, array_keys( $this->args['font_face_display_overrides'] ), true ) ) {
			$ruleset->removeRule( 'font-display' );
			$font_display_rule = new Rule( 'font-display' );
			$font_display_rule->setValue( $this->args['font_face_display_overrides'][ $font_family ] );
			$ruleset->addRule( $font_display_rule );
		}

		// If the font-display is auto, block, or swap then we should automatically add the preload link for the first font file.
		$properties = $ruleset->getRules( 'font-display' );
		$property   = end( $properties ); // Last since the last property wins in CSS.

		/** @var RuleValueList|string|null */
		$property_value = $property instanceof Rule ? $property->getValue() : '';

		if (
			(
				// Defaults to 'auto', hence should be preloaded as well.
				! $property instanceof Rule
				||
				in_array( $property_value, [ 'auto', 'block', 'swap' ], true )
			)
			&&
			'file' === $first_src_type
			&&
			! empty( $font_file )
		) {
			$preload_font_urls[] = $font_file;
		}

		return $preload_font_urls;
	}

	/**
	 * Process CSS keyframes.
	 *
	 * @since 1.0
	 * @link https://www.ampproject.org/docs/design/responsive/style_pages#restricted-styles.
	 * @link https://github.com/ampproject/amphtml/blob/b685a0780a7f59313666225478b2b79b463bcd0b/validator/validator-main.protoascii#L1002-L1043
	 * @todo Tree shaking could be extended to keyframes, to omit a keyframe if it is not referenced by any rule.
	 *
	 * @param KeyFrame $css_list Ruleset.
	 * @param array    $options  Options.
	 * @return array {
	 *     Results.
	 *
	 *     @type array $validation_results Validation results.
	 *     @type int   $important_count    Number of !important qualifiers.
	 * }
	 */
	private function process_css_keyframes( KeyFrame $css_list, $options ) {
		$validation_results = [];
		$important_count    = 0;

		foreach ( $css_list->getContents() as $rules ) {
			if ( ! ( $rules instanceof DeclarationBlock ) ) {
				$error     = [
					'code'      => self::CSS_SYNTAX_INVALID_DECLARATION,
					'item'      => get_class( $rules ),
					'type'      => AMP_Validation_Error_Taxonomy::CSS_ERROR_TYPE,
					'spec_name' => $options['spec_name'],
				];
				$sanitized = $this->should_sanitize_validation_error( $error );
				if ( $sanitized ) {
					$css_list->remove( $rules );
				}
				$validation_results[] = compact( 'error', 'sanitized' );
				continue;
			}

			$transformed = $this->transform_important_qualifiers( $rules, $css_list, $options );

			$validation_results = array_merge(
				$validation_results,
				$transformed['validation_results']
			);
			$important_count   += $transformed['important_count'];

			if ( ! empty( $options['property_allowlist'] ) ) {
				$properties = $rules->getRules();
				foreach ( $properties as $property ) {
					$vendorless_property_name = preg_replace( '/^-\w+-/', '', $property->getRule() );
					if ( ! in_array( $vendorless_property_name, $options['property_allowlist'], true ) ) {
						$error     = [
							'code'               => self::CSS_SYNTAX_INVALID_PROPERTY,
							'css_property_name'  => $property->getRule(),
							'css_property_value' => (string) $property->getValue(),
							'type'               => AMP_Validation_Error_Taxonomy::CSS_ERROR_TYPE,
							'spec_name'          => $options['spec_name'],
						];
						$sanitized = $this->should_sanitize_validation_error( $error );
						if ( $sanitized ) {
							$rules->removeRule( $property->getRule() );
						}
						$validation_results[] = compact( 'error', 'sanitized' );
					}
				}
			}
		}
		return compact( 'validation_results', 'important_count' );
	}

	/**
	 * Replace !important qualifiers with more specific rules.
	 *
	 * @since 1.0
	 * @see https://www.npmjs.com/package/replace-important
	 * @see https://www.ampproject.org/docs/fundamentals/spec#important
	 *
	 * @param RuleSet|DeclarationBlock $ruleset  Rule set.
	 * @param CSSList                  $css_list CSS List.
	 * @param array                    $options  Options.
	 * @return array {
	 *     Results.
	 *
	 *     @type array $validation_results Validation results.
	 *     @type int   $important_count    Number of !important qualifiers.
	 * }
	 */
	private function transform_important_qualifiers( RuleSet $ruleset, CSSList $css_list, $options ) {
		$important_count    = 0;
		$validation_results = [];

		// An !important only makes sense for rulesets that have selectors.
		$allow_transformation = (
			$ruleset instanceof DeclarationBlock
			&&
			! ( $css_list instanceof KeyFrame )
		);

		$properties = $ruleset->getRules();
		$importants = [];
		foreach ( $properties as $property ) {
			if ( ! $property->getIsImportant() ) {
				continue;
			}
			if ( ! $this->args['transform_important_qualifiers'] ) {
				$important_count++;
			} elseif ( $allow_transformation ) {
				$importants[] = $property;
				$property->setIsImportant( false );
				$ruleset->removeRule( $property->getRule() );
			} else {
				$error     = [
					'code'               => self::CSS_SYNTAX_INVALID_IMPORTANT,
					'type'               => AMP_Validation_Error_Taxonomy::CSS_ERROR_TYPE,
					'css_property_name'  => $property->getRule(),
					'css_property_value' => $property->getValue(),
					'spec_name'          => $options['spec_name'],
				];
				$sanitized = $this->should_sanitize_validation_error( $error );
				if ( $sanitized ) {
					$property->setIsImportant( false );
				} else {
					$important_count++;
				}
				$validation_results[] = compact( 'error', 'sanitized' );
			}
		}
		if ( ! $ruleset instanceof DeclarationBlock || ! $allow_transformation || empty( $importants ) ) {
			return compact( 'validation_results', 'important_count' );
		}

		/**
		 * Ruleset covering !important styles.
		 *
		 * @var DeclarationBlock $important_ruleset
		 */
		$important_ruleset = clone $ruleset;
		$important_ruleset->setSelectors(
			array_map(
				/**
				 * Modify selectors to be more specific to roughly match the effect of !important.
				 *
				 * @link https://github.com/ampproject/ampstart/blob/4c21d69afdd07b4c60cd190937bda09901955829/tools/replace-important/lib/index.js#L88-L109
				 *
				 * @param Selector $old_selector Original selector.
				 * @return Selector The new more-specific selector.
				 */
				static function( Selector $old_selector ) {
					// Calculate the specificity multiplier for the placeholder.
					$specificity_multiplier = AMP_Style_Sanitizer::INLINE_SPECIFICITY_MULTIPLIER + 1 + floor( $old_selector->getSpecificity() / 100 );
					if ( $old_selector->getSpecificity() % 100 > 0 ) {
						$specificity_multiplier++;
					}
					if ( $old_selector->getSpecificity() % 10 > 0 ) {
						$specificity_multiplier++;
					}

					$new_selector = $old_selector->getSelector();

					if ( '#_)' === substr( $new_selector, -3 ) ) {
						$new_selector = rtrim( $new_selector, ')' ) . str_repeat( '#_', $specificity_multiplier ) . ')';
					} else {
						$new_selector .= ':not(' . str_repeat( '#_', $specificity_multiplier ) . ')'; // Here "_" is just a short single-char ID.
					}

					return new Selector( $new_selector );
				},
				$ruleset->getSelectors()
			)
		);
		$important_ruleset->setRules( $importants );

		$contents = array_values( $css_list->getContents() ); // Ensure keys are 0-indexed and sequential.
		$offset   = array_search( $ruleset, $contents, true );
		if ( false !== $offset ) {
			array_splice( $contents, $offset + 1, 0, [ $important_ruleset ] );
			$css_list->setContents( $contents );
		}
		return compact( 'validation_results', 'important_count' );
	}

	/**
	 * Collect and store all CSS style attributes.
	 *
	 * Collects the CSS styles from within the HTML contained in this instance's Dom\Document.
	 *
	 * @since 0.4
	 * @since 0.7 Modified to use element passed by XPath query.
	 *
	 * @note Uses recursion to traverse down the tree of Dom\Document nodes.
	 *
	 * @param DOMElement $element Element with a style attribute.
	 */
	private function collect_inline_styles( DOMElement $element ) {
		$attr_node = $element->getAttributeNode( 'style' );
		if ( ! $attr_node instanceof DOMAttr ) {
			return;
		}

		$value = trim( $attr_node->nodeValue );
		if ( empty( $value ) ) {
			$element->removeAttribute( 'style' );
			return;
		}

		// Skip processing stylesheets that contain mustache template variables if the element is inside of a mustache template.
		if (
			preg_match( '/{{[^}]+?}}/', $value ) &&
			0 !== $this->dom->xpath->query( '//template[ @type="amp-mustache" ]//.|//script[ @template="amp-mustache" and @type="text/plain" ]//.', $element )->length
		) {
			return;
		}

		$class       = 'amp-wp-' . substr( md5( $value ), 0, 7 );
		$specificity = ':not(' . str_repeat( '#_', self::INLINE_SPECIFICITY_MULTIPLIER ) . ')';
		$rule        = sprintf( '.%s%s{%s}', $class, $specificity, $value );

		$this->set_current_node( $element ); // And sources when needing to be located.

		// @todo If ValidationExemption::is_px_verified_for_node( $element ) then keep !important.
		// @todo If ValidationExemption::is_amp_unvalidated_for_node( $element ) then keep invalid markup.
		$parsed = $this->get_parsed_stylesheet(
			$rule,
			[
				'allowed_at_rules'   => [],
				'property_allowlist' => $this->style_custom_cdata_spec['css_spec']['declaration'],
				'spec_name'          => self::STYLE_AMP_CUSTOM_SPEC_NAME,
			]
		);

		$element->removeAttribute( 'style' );
		$element->setAttribute( self::ORIGINAL_STYLE_ATTRIBUTE_NAME, $value );

		if ( $parsed['tokens'] ) {
			$this->pending_stylesheets[] = [
				'group'             => self::STYLE_AMP_CUSTOM_GROUP_INDEX,
				'original_size'     => strlen( $rule ),
				'final_size'        => null,
				'element'           => $element,
				'origin'            => 'style_attribute',
				'sources'           => $this->current_sources,
				'priority'          => $this->get_stylesheet_priority( $attr_node ),
				'tokens'            => $parsed['tokens'],
				'hash'              => $parsed['hash'],
				'parse_time'        => $parsed['parse_time'],
				'shake_time'        => null,
				'cached'            => $parsed['cached'],
				'important_count'   => $parsed['important_count'],
				'kept_error_count'  => $parsed['kept_error_count'],
				'preload_font_urls' => $parsed['preload_font_urls'],
			];

			if ( $element->hasAttribute( 'class' ) ) {
				$element->setAttribute( 'class', $element->getAttribute( 'class' ) . ' ' . $class );
			} else {
				$element->setAttribute( 'class', $class );
			}
		}

		$this->set_current_node( null );
	}

	/**
	 * Finalize stylesheets for style[amp-custom] and style[amp-keyframes] elements.
	 *
	 * Concatenate all pending stylesheets, remove unused rules, and add to AMP style elements in document.
	 * Combine all amp-keyframe styles and add them to the end of the body.
	 *
	 * @since 1.0
	 * @see https://www.ampproject.org/docs/fundamentals/spec#keyframes-stylesheet
	 */
	private function finalize_styles() {
		$preload_font_urls = [];

		$stylesheet_groups = [
			self::STYLE_AMP_CUSTOM_GROUP_INDEX    => [
				'source_map_comment'  => "\n\n/*# sourceURL=amp-custom.css */",
				'cdata_spec'          => $this->style_custom_cdata_spec,
				'included_count'      => 0,
				'import_front_matter' => '', // Extra @import statements that are prepended when fetch fails and validation error is rejected.
				'important_count'     => 0,
				'kept_error_count'    => 0,
				'is_excessive_size'   => false,
				'preload_font_urls'   => [],
			],
			self::STYLE_AMP_KEYFRAMES_GROUP_INDEX => [
				'source_map_comment'  => "\n\n/*# sourceURL=amp-keyframes.css */",
				'cdata_spec'          => $this->style_keyframes_cdata_spec,
				'included_count'      => 0,
				'import_front_matter' => '',
				'important_count'     => 0,
				'kept_error_count'    => 0,
				'is_excessive_size'   => false,
				'preload_font_urls'   => [],
			],
		];

		$imported_font_urls = [];

		// Divide pending stylesheet between custom and keyframes, and calculate size of each (before tree shaking).
		foreach ( $this->pending_stylesheets as $i => $pending_stylesheet ) {
			foreach ( $pending_stylesheet['tokens'] as $j => $part ) {
				if ( is_string( $part ) && 0 === strpos( $part, '@import' ) ) {
					$stylesheet_groups[ $pending_stylesheet['group'] ]['import_front_matter'] .= $part; // @todo Not currently relayed in stylesheet data.
					unset( $this->pending_stylesheets[ $i ]['tokens'][ $j ] );
				}
			}

			if ( ! empty( $pending_stylesheet['imported_font_urls'] ) ) {
				$imported_font_urls = array_merge( $imported_font_urls, $pending_stylesheet['imported_font_urls'] );
			}
		}

		// Process the pending stylesheets.
		foreach ( array_keys( $stylesheet_groups ) as $group ) {
			$stylesheet_groups[ $group ] = array_merge(
				$stylesheet_groups[ $group ],
				$this->finalize_stylesheet_group( $group, $stylesheet_groups[ $group ] )
			);
		}

		// If we're not working with the document element (e.g. for Customizer rendered partials) then there is nothing left to do.
		if ( empty( $this->args['use_document_element'] ) ) {
			return;
		}

		// Add the font preloads.
		foreach ( $stylesheet_groups as $stylesheet_group ) {
			foreach ( $stylesheet_group['preload_font_urls'] as $preload_font_url ) {
				$this->dom->links->addPreload( $preload_font_url, RequestDestination::FONT );
			}
		}

		// Add style[amp-custom] to document.
		if ( $stylesheet_groups[ self::STYLE_AMP_CUSTOM_GROUP_INDEX ]['included_count'] > 0 ) {
			/*
			 * On AMP-first themes when there are new/rejected validation errors present, a parsed stylesheet may include
			 * @import rules. These must be moved to the beginning to be honored.
			 */
			$css = $stylesheet_groups[ self::STYLE_AMP_CUSTOM_GROUP_INDEX ]['import_front_matter'];

			$css .= implode( '', $this->get_stylesheets() );
			$css .= $stylesheet_groups[ self::STYLE_AMP_CUSTOM_GROUP_INDEX ]['source_map_comment'];

			// Create the style[amp-custom] element and add it to the <head>.
			$this->amp_custom_style_element = $this->dom->createElement( 'style' );
			$this->amp_custom_style_element->setAttribute( 'amp-custom', '' );
			$this->amp_custom_style_element->appendChild( $this->dom->createTextNode( $css ) );

			// When there are kept errors, then mark the element as being AMP-unvalidated. Note that excessive CSS
			// is not a validation error that is arisen when parsing a stylesheet (as that is emitted when finalizing
			// a stylesheet group). Otherwise, if there are !important qualifiers or the amount of CSS is greater than
			// the maximum allowed by AMP, mark the custom style as PX-verified.
			if ( $stylesheet_groups[ self::STYLE_AMP_CUSTOM_GROUP_INDEX ]['kept_error_count'] > 0 ) {
				ValidationExemption::mark_node_as_amp_unvalidated( $this->amp_custom_style_element );
			} elseif (
				$stylesheet_groups[ self::STYLE_AMP_CUSTOM_GROUP_INDEX ]['important_count'] > 0
				||
				$stylesheet_groups[ self::STYLE_AMP_CUSTOM_GROUP_INDEX ]['is_excessive_size']
			) {
				ValidationExemption::mark_node_as_px_verified( $this->amp_custom_style_element );
			}

			$this->dom->head->appendChild( $this->amp_custom_style_element );
		}

		/*
		 * Add font stylesheets from CDNs which were extracted from @import rules.
		 * We can't add crossorigin=anonymous to these since such a CORS request would not be made in the non-AMP version,
		 * and so if the service worker cached the opaque response on the non-AMP version then it wouldn't be usable in
		 * the AMP version if it was requested with CORS.
		 */
		foreach ( array_unique( $imported_font_urls ) as $imported_font_url ) {
			$link = $this->dom->createElement( 'link' );
			$link->setAttribute( 'rel', 'stylesheet' );
			$link->setAttribute( 'href', $imported_font_url );
			$this->dom->head->appendChild( $link );
		}

		// Add style[amp-keyframes] to document.
		if ( $stylesheet_groups[ self::STYLE_AMP_KEYFRAMES_GROUP_INDEX ]['included_count'] > 0 ) {
			$css = $stylesheet_groups[ self::STYLE_AMP_KEYFRAMES_GROUP_INDEX ]['import_front_matter'];

			$css .= implode(
				'',
				wp_list_pluck(
					array_filter(
						$this->pending_stylesheets,
						static function( $pending_stylesheet ) {
							return $pending_stylesheet['included'] && self::STYLE_AMP_KEYFRAMES_GROUP_INDEX === $pending_stylesheet['group'];
						}
					),
					'serialized'
				)
			);
			$css .= $stylesheet_groups[ self::STYLE_AMP_KEYFRAMES_GROUP_INDEX ]['source_map_comment'];

			$style_element = $this->dom->createElement( 'style' );
			$style_element->setAttribute( 'amp-keyframes', '' );
			$style_element->appendChild( $this->dom->createTextNode( $css ) );
			$this->dom->body->appendChild( $style_element );
		}

		$this->remove_admin_bar_if_css_excluded();
		$this->add_css_budget_to_admin_bar();
	}

	/**
	 * Remove admin bar if its CSS was excluded.
	 *
	 * @since 1.2
	 */
	private function remove_admin_bar_if_css_excluded() {
		if ( ! is_admin_bar_showing() ) {
			return;
		}

		$admin_bar_id = 'wpadminbar';
		$admin_bar    = $this->dom->getElementById( $admin_bar_id );
		if ( ! $admin_bar || ! $admin_bar->parentNode ) {
			return;
		}

		$included = true;
		foreach ( $this->pending_stylesheets as &$pending_stylesheet ) {
			$is_admin_bar_css = (
				self::STYLE_AMP_CUSTOM_GROUP_INDEX === $pending_stylesheet['group']
				&&
				'admin-bar-css' === $pending_stylesheet['element']->getAttribute( 'id' )
			);
			if ( $is_admin_bar_css ) {
				$included = $pending_stylesheet['included'];
				break;
			}
		}

		unset( $pending_stylesheet );

		if ( ! $included ) {
			// Remove admin-bar class from body element.
			// @todo It would be nice if any style rules which refer to .admin-bar could also be removed, but this would mean retroactively going back over the CSS again and re-shaking it.
			if ( $this->dom->body->hasAttribute( 'class' ) ) {
				$this->dom->body->setAttribute(
					'class',
					preg_replace( '/(^|\s)admin-bar(\s|$)/', ' ', $this->dom->body->getAttribute( 'class' ) )
				);
			}

			// Remove admin bar element.
			$comment_text = sprintf(
				/* translators: %s: CSS selector for admin bar element  */
				__( 'Admin bar (%s) was removed to preserve AMP validity due to excessive CSS.', 'amp' ),
				'#' . $admin_bar_id
			);
			$admin_bar->parentNode->replaceChild(
				$this->dom->createComment( ' ' . $comment_text . ' ' ),
				$admin_bar
			);
		}
	}

	/**
	 * Get data to amend to the validate response.
	 *
	 * @return array {
	 *     Validate response data.
	 *
	 *     @type array $stylesheets Stylesheets.
	 * }
	 */
	public function get_validate_response_data() {
		$stylesheets = [];
		foreach ( $this->pending_stylesheets as $pending_stylesheet ) {
			$attributes = [];
			foreach ( $pending_stylesheet['element']->attributes as $attribute ) {
				$attributes[ $attribute->nodeName ] = $attribute->nodeValue;
			}
			$pending_stylesheet['element'] = [
				'name'       => $pending_stylesheet['element']->nodeName,
				'attributes' => $attributes,
			];

			switch ( $pending_stylesheet['group'] ) {
				case self::STYLE_AMP_CUSTOM_GROUP_INDEX:
					$pending_stylesheet['group'] = 'amp-custom';
					break;
				case self::STYLE_AMP_KEYFRAMES_SPEC_NAME:
					$pending_stylesheet['group'] = 'amp-keyframes';
					break;
			}

			unset( $pending_stylesheet['serialized'] );
			$stylesheets[] = $pending_stylesheet;
		}

		return compact( 'stylesheets' );
	}

	/**
	 * Update admin bar.
	 */
	public function add_css_budget_to_admin_bar() {
		if ( ! is_admin_bar_showing() ) {
			return;
		}
		$validity_li_element = $this->dom->getElementById( 'wp-admin-bar-amp-validity' );
		if ( ! $validity_li_element instanceof DOMElement ) {
			return;
		}

		/**
		 * Cloned <li> element that we can modify to include stylesheet information.
		 *
		 * @var DOMElement $stylesheets_li_element
		 */
		$stylesheets_li_element = $validity_li_element->cloneNode( true );
		$stylesheets_li_element->setAttribute( 'id', 'wp-admin-bar-amp-stylesheets' );

		$stylesheets_a_element = $stylesheets_li_element->getElementsByTagName( 'a' )->item( 0 );
		if ( ! ( $stylesheets_a_element instanceof DOMElement ) ) {
			return;
		}
		$stylesheets_a_element->setAttribute(
			'href',
			$stylesheets_a_element->getAttribute( 'href' ) . '#amp_stylesheets'
		);

		while ( $stylesheets_a_element->firstChild ) {
			$stylesheets_a_element->removeChild( $stylesheets_a_element->firstChild );
		}

		$total_size = 0;
		foreach ( $this->pending_stylesheets as $pending_stylesheet ) {
			if ( empty( $pending_stylesheet['duplicate'] ) ) {
				$total_size += $pending_stylesheet['final_size'];
			}
		}

		$css_usage_percentage = ceil( ( $total_size / $this->style_custom_cdata_spec['max_bytes'] ) * 100 );
		$menu_item_text       = __( 'CSS Usage', 'amp' ) . ': ';
		$menu_item_text      .= $css_usage_percentage . '%';
		$stylesheets_a_element->appendChild( $this->dom->createTextNode( $menu_item_text ) );

		if ( $css_usage_percentage > 100 ) {
			$icon = Icon::INVALID;
		} elseif ( $css_usage_percentage >= self::CSS_BUDGET_WARNING_PERCENTAGE ) {
			$icon = Icon::WARNING;
		}
		if ( isset( $icon ) ) {
			$span = $this->dom->createElement( 'span' );
			$span->setAttribute( 'class', 'ab-icon amp-icon ' . $icon );
			$stylesheets_a_element->appendChild( $span );
		}

		$validity_li_element->parentNode->insertBefore( $stylesheets_li_element, $validity_li_element->nextSibling );
	}

	/**
	 * Convert CSS selectors and remove obsolete selector hacks for IE.
	 *
	 * @param DeclarationBlock $ruleset Ruleset.
	 * @return array Validation results.
	 */
	private function ampify_ruleset_selectors( $ruleset ) {
		$selectors = [];
		$results   = [];

		$has_changed_selectors = false;
		$language              = strtolower( get_bloginfo( 'language' ) );
		foreach ( $ruleset->getSelectors() as $old_selector ) {
			$selector = $old_selector->getSelector();

			// Strip out selectors that contain the disallowed prefix 'i-amphtml-'.
			if ( preg_match( '/(^|\W)i-amphtml-/', $selector ) ) {
				$error     = [
					'code'         => self::CSS_DISALLOWED_SELECTOR,
					'type'         => AMP_Validation_Error_Taxonomy::CSS_ERROR_TYPE,
					'css_selector' => $selector,
				];
				$sanitized = $this->should_sanitize_validation_error( $error );
				$results[] = compact( 'error', 'sanitized' );
				if ( $sanitized ) {
					$has_changed_selectors = true;
					continue;
				}
			}

			// Automatically tree-shake IE6/IE7 hacks for selectors with `* html` and `*+html`.
			if ( preg_match( '/^\*\s*\+?\s*html/', $selector ) ) {
				$has_changed_selectors = true;
				continue;
			}

			// Automatically remove selectors with html[lang] that are for another language (and thus are irrelevant). This is safe because amp-bind'ed [lang] is not allowed.
			$is_other_language_root = (
				preg_match( '/^html\[lang(?P<starts_with>\^)?=([\'"]?)(?P<lang>.+?)\2\]/', strtolower( $selector ), $matches )
				&&
				(
					empty( $matches['starts_with'] )
					?
					$language !== $matches['lang']
					:
					substr( $language, 0, strlen( $matches['lang'] ) ) !== $matches['lang']
				)
			);
			if ( $is_other_language_root ) {
				$has_changed_selectors = true;
				continue;
			}

			// Remove selectors with :lang() for another language (and thus irrelevant).
			if ( preg_match( '/:lang\((?P<languages>.+?)\)/', $selector, $matches ) ) {
				$has_matching_language = 0;
				$selector_languages    = array_map(
					static function ( $selector_language ) {
						return trim( $selector_language, '"\'' );
					},
					preg_split( '/\s*,\s*/', strtolower( trim( $matches['languages'] ) ) )
				);
				foreach ( $selector_languages as $selector_language ) {
					/*
					 * The following logic accounts for the following conditions, where all but the last is a match:
					 *
					 * N: en && fr
					 * Y: en && en
					 * Y: en && en-US
					 * Y: en-US && en
					 * N: en-US && en-UK
					 */
					if (
						substr( $language, 0, strlen( $selector_language ) ) === $selector_language
						||
						substr( $selector_language, 0, strlen( $language ) ) === $language
					) {
						$has_matching_language = true;
						break;
					}
				}
				if ( ! $has_matching_language ) {
					$has_changed_selectors = true;
					continue;
				}
			}

			// An element (type) either starts a selector or is preceded by combinator, comma, opening paren, or closing brace.
			$before_type_selector_pattern = '(?<=^|\(|\s|>|\+|~|,|})';
			$after_type_selector_pattern  = '(?=$|[^a-zA-Z0-9_-])';

			// Replace focus selectors with :focus-within.
			if ( $this->focus_class_name_selector_pattern ) {
				$count    = 0;
				$selector = preg_replace_callback(
					$this->focus_class_name_selector_pattern,
					static function ( $matches ) {
						$replacement = ':focus-within';

						if (
							'focus' === $matches['class']
							&&
							(
								! empty( $matches['beginning'] )
								||
								( ! empty( $matches['combinator'] ) && '' === trim( $matches['combinator'] ) )
							)
						) {
							/*
							 * If a descendant combinator precedes the focus selector, prefix the pseudo class selector
							 * with a class selector that's known to be common among themes that use the focus selector.
							 * This is to prevent the pseudo class selector being applied to the ancestor selector,
							 * which can cause unintended behavior on the page.
							 */
							$replacement = '.menu-item-has-children' . $replacement;
						}

						// Ensure preceding combinator is preserved.
						if ( ! empty( $matches['combinator'] ) ) {
							$replacement = $matches['combinator'] . $replacement;
						}

						return $replacement;
					},
					$selector,
					-1,
					$count
				);
				if ( $count > 0 ) {
					$has_changed_selectors = true;
				}
			}

			// Replace the somewhat-meta [style] attribute selectors with attribute selector using the data attribute the original styles are copied into.
			if ( $this->args['transform_important_qualifiers'] ) {
				$selector = preg_replace(
					'/(?<=\[)style(?=([*$~]?=.*?)?])/is',
					self::ORIGINAL_STYLE_ATTRIBUTE_NAME,
					$selector,
					- 1,
					$count
				);
				if ( $count > 0 ) {
					$has_changed_selectors = true;
				}
			}

			/*
			 * Loop over each selector mappings. A single HTML tag can map to multiple AMP tags (e.g. img could be amp-img or amp-anim).
			 * The $selector_mappings array contains ~6 items, so rest easy your O(n^3) eyes when seeing triple nested loops!
			 */
			$edited_selectors = [ $selector ];
			foreach ( $this->selector_mappings as $html_tag => $amp_tags ) {

				// Create pattern for determining whether a mapped HTML element is present in this selector.
				$html_pattern = '/' . $before_type_selector_pattern . preg_quote( $html_tag, '/' ) . $after_type_selector_pattern . '/i';

				/*
				 * Iterate over each selector and perform the tag mapping replacements.
				 * Note that $edited_selectors array contains only item in the normal case.
				 * Note also that the size of $edited_selectors can grow while iterating, hence disabling sniffs.
				 */
				for ( $i = 0; $i < count( $edited_selectors ); $i++ ) { // phpcs:ignore Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed, Squiz.PHP.DisallowSizeFunctionsInLoops.Found

					// Skip doing any replacement if the AMP tag is already present, as this indicates the selector was written for AMP already.
					$amp_tag_pattern = '/' . $before_type_selector_pattern . implode( '|', $amp_tags ) . $after_type_selector_pattern . '/i';
					if ( preg_match( $amp_tag_pattern, $edited_selectors[ $i ], $matches ) && in_array( $matches[0], $amp_tags, true ) ) {
						continue;
					}

					// Replace the HTML tag with the first first mapped AMP tag.
					$edited_selector = preg_replace( $html_pattern, $amp_tags[0], $edited_selectors[ $i ], -1, $count );

					// If the HTML tag was not found, then short-circuit.
					if ( 0 === $count ) {
						continue;
					}

					$edited_selectors_from_selector = [ $edited_selector ];

					// Replace the HTML tag with the the remaining mapped AMP tags.
					foreach ( array_slice( $amp_tags, 1 ) as $amp_tag ) { // Note: This array contains only a couple items.
						$edited_selectors_from_selector[] = preg_replace( $html_pattern, $amp_tag, $edited_selectors[ $i ] );
					}

					// Replace the current edited selector with all the new edited selectors resulting from the mapping replacement.
					array_splice( $edited_selectors, $i, 1, $edited_selectors_from_selector );
					$has_changed_selectors = true;
				}
			}

			$selectors = array_merge( $selectors, $edited_selectors );
		}

		if ( $has_changed_selectors ) {
			$ruleset->setSelectors( $selectors );
		}

		return $results;
	}

	/**
	 * Given a list of class names, create a regular expression pattern to match them in a selector.
	 *
	 * @since 1.4
	 * @since 2.0 In addition to the class, now includes capture groups for an immediately-preceding combinator or whether the class begins the selector.
	 *
	 * @param string[] $class_names Class names.
	 * @return string Regular expression pattern.
	 */
	private static function get_class_name_selector_pattern( $class_names ) {
		$class_pattern = implode(
			'|',
			array_map(
				static function ( $class_name ) {
					return preg_quote( $class_name, '/' );
				},
				(array) $class_names
			)
		);
		return "/(?:(?<beginning>^\s*\.)|(?<combinator>[>+~\s]*)\.)(?<class>{$class_pattern})(?=$|[^a-zA-Z0-9_-])/s";
	}

	/**
	 * Finalize a stylesheet group (amp-custom or amp-keyframes).
	 *
	 * @since 1.2
	 *
	 * @param int   $group        Group name (either self::STYLE_AMP_CUSTOM_GROUP_INDEX or self::STYLE_AMP_KEYFRAMES_GROUP_INDEX ).
	 * @param array $group_config Group config.
	 * @return array {
	 *     Finalized group info.
	 *
	 *     @type int      $included_count    Number of included stylesheets in group.
	 *     @type bool     $is_excessive_size Whether the total is greater than the max bytes allowed.
	 *     @type int      $important_count   Number of !important qualifiers.
	 *     @type int      $kept_error_count  Number of validation errors whose markup was kept.
	 *     @type string[] $preload_font_urls Font URLs to preload.
	 * }
	 */
	private function finalize_stylesheet_group( $group, $group_config ) {
		$max_bytes         = $group_config['cdata_spec']['max_bytes'] - strlen( $group_config['source_map_comment'] );
		$included_count    = 0;
		$is_excessive_size = false;
		$concatenated_size = 0;
		$important_count   = 0;
		$kept_error_count  = 0;
		$preload_font_urls = [];

		$previously_seen_stylesheet_index = [];
		foreach ( $this->pending_stylesheets as $pending_stylesheet_index => &$pending_stylesheet ) {
			if ( $group !== $pending_stylesheet['group'] ) {
				continue;
			}

			$start_time    = microtime( true );
			$shaken_tokens = [];
			foreach ( $pending_stylesheet['tokens'] as $token ) {
				if ( is_string( $token ) ) {
					$shaken_tokens[] = [ true, $token ];
					continue;
				}

				list( $selectors_parsed, $declaration_block ) = $token;

				$used_selector_count = 0;
				$selectors           = [];
				foreach ( $selectors_parsed as $selector => $parsed_selector ) {
					$should_include = $this->args['skip_tree_shaking'] || (
						// If all class names are used in the doc.
						(
							empty( $parsed_selector[ self::SELECTOR_EXTRACTED_CLASSES ] )
							||
							$this->has_used_class_name( $parsed_selector[ self::SELECTOR_EXTRACTED_CLASSES ] )
						)
						&&
						// If all IDs are used in the doc.
						(
							empty( $parsed_selector[ self::SELECTOR_EXTRACTED_IDS ] )
							||
							0 === count(
								array_filter(
									$parsed_selector[ self::SELECTOR_EXTRACTED_IDS ],
									function( $id ) {
										return ! $this->dom->getElementById( $id );
									}
								)
							)
						)
						&&
						// If tag names are present in the doc.
						(
							empty( $parsed_selector[ self::SELECTOR_EXTRACTED_TAGS ] )
							||
							$this->has_used_tag_names( $parsed_selector[ self::SELECTOR_EXTRACTED_TAGS ] )
						)
						&&
						// If all attribute names are used in the doc.
						(
							empty( $parsed_selector[ self::SELECTOR_EXTRACTED_ATTRIBUTES ] )
							||
							$this->has_used_attributes( $parsed_selector[ self::SELECTOR_EXTRACTED_ATTRIBUTES ] )
						)
					);

					// +EDIT: Filter the styles to remove or preserve
					$should_include = apply_filters( 'amp_selector_should_include', $should_include, $selector, $parsed_selector );

					$selectors[ $selector ] = $should_include;
					if ( $should_include ) {
						$used_selector_count++;
					}
				}
				$shaken_tokens[] = [
					0 !== $used_selector_count,
					$selectors,
					$declaration_block,
				];
			}

			// Strip empty at-rules after tree shaking.
			$stylesheet_part_count = count( $shaken_tokens );
			for ( $i = 0; $i < $stylesheet_part_count; $i++ ) {

				// Skip anything that isn't an at-rule.
				if ( ! is_string( $shaken_tokens[ $i ][1] ) || '@' !== substr( $shaken_tokens[ $i ][1], 0, 1 ) ) {
					continue;
				}

				// Delete empty at-rules.
				if ( '{}' === substr( $shaken_tokens[ $i ][1], -2 ) ) {
					$shaken_tokens[ $i ][0] = false;
					continue;
				}

				// Delete at-rules that were emptied due to tree-shaking.
				if ( '{' === substr( $shaken_tokens[ $i ][1], -1 ) ) {
					$open_braces = 1;
					for ( $j = $i + 1; $j < $stylesheet_part_count; $j++ ) {
						if ( is_array( $shaken_tokens[ $j ][1] ) ) { // Is declaration block.
							if ( true === $shaken_tokens[ $j ][0] ) {
								// The declaration block has selectors which survived tree shaking, so the contained at-
								// rule cannot be removed and so we must abort.
								break;
							} else {
								// Continue to the next stylesheet part as this declaration block can be included in the
								// list of parts that may be part of an at-rule that is now empty and should be removed.
								continue;
							}
						}

						$is_at_rule = '@' === substr( $shaken_tokens[ $j ][1], 0, 1 );
						if ( $is_at_rule && '{}' === substr( $shaken_tokens[ $j ][1], -2 ) ) {
							continue; // The rule opened is empty from the start.
						}

						if ( $is_at_rule && '{' === substr( $shaken_tokens[ $j ][1], -1 ) ) {
							$open_braces++;
						} elseif ( '}' === $shaken_tokens[ $j ][1] ) {
							$open_braces--;
						} else {
							break;
						}

						// Splice out the parts that are empty.
						if ( 0 === $open_braces ) {
							for ( $k = $i; $k <= $j; $k++ ) {
								$shaken_tokens[ $k ][0] = false;
							}
							$i = $j; // Jump the outer loop ahead to skip over what has been already marked as removed.
							continue 2;
						}
					}
				}
			}
			$pending_stylesheet['shaken_tokens'] = $shaken_tokens;
			unset( $pending_stylesheet['tokens'], $shaken_tokens );

			// @todo After this point we could unset( $pending_stylesheet['tokens'] ) since they wouldn't be used in the course of generating a page, though they would still be useful for other purposes.
			$pending_stylesheet['serialized'] = implode(
				'',
				array_map(
					static function ( $shaken_token ) {
						if ( is_array( $shaken_token[1] ) ) {
							// Construct a declaration block.
							$selectors = array_keys( array_filter( $shaken_token[1] ) );
							if ( empty( $selectors ) ) {
								return '';
							} else {
								return implode( ',', $selectors ) . '{' . implode( ';', $shaken_token[2] ) . '}';
							}
						} else {
							// Pass through parts other than declaration blocks.
							return $shaken_token[1];
						}
					},
					// Include the stylesheet parts that were not marked for exclusion during tree shaking.
					array_filter(
						$pending_stylesheet['shaken_tokens'],
						static function( $shaken_token ) {
							return false !== $shaken_token[0];
						}
					)
				)
			);

			// +EDIT: Filter the stylesheet output for final removals before size is calculated
			$pending_stylesheet['serialized'] = apply_filters( 'amp_stylesheet_part', $pending_stylesheet['serialized'] );
			
			$pending_stylesheet['included']   = null; // To be determined below.
			$pending_stylesheet['final_size'] = strlen( $pending_stylesheet['serialized'] );

			// If this stylesheet is a duplicate of something that came before, mark the previous as not included automatically.
			if ( isset( $previously_seen_stylesheet_index[ $pending_stylesheet['hash'] ] ) ) {
				$this->pending_stylesheets[ $previously_seen_stylesheet_index[ $pending_stylesheet['hash'] ] ]['included']  = false;
				$this->pending_stylesheets[ $previously_seen_stylesheet_index[ $pending_stylesheet['hash'] ] ]['duplicate'] = true;
			}
			$previously_seen_stylesheet_index[ $pending_stylesheet['hash'] ] = $pending_stylesheet_index;

			$pending_stylesheet['shake_time'] = microtime( true ) - $start_time;
		} // End foreach pending_stylesheets.

		unset( $pending_stylesheet );

		// Determine which stylesheets are included based on their priorities.
		$pending_stylesheet_indices = array_keys( $this->pending_stylesheets );
		usort(
			$pending_stylesheet_indices,
			function ( $a, $b ) {
				return $this->pending_stylesheets[ $a ]['priority'] - $this->pending_stylesheets[ $b ]['priority'];
			}
		);

		foreach ( $pending_stylesheet_indices as $i ) {
			if ( $group !== $this->pending_stylesheets[ $i ]['group'] ) {
				continue;
			}

			// Skip duplicates.
			if ( false === $this->pending_stylesheets[ $i ]['included'] ) {
				continue;
			}

			// Skip stylesheets that were completely tree-shaken and mark as included.
			if ( 0 === $this->pending_stylesheets[ $i ]['final_size'] ) {
				$this->pending_stylesheets[ $i ]['included'] = true;
				continue;
			}

			$is_stylesheet_excessive = $concatenated_size + $this->pending_stylesheets[ $i ]['final_size'] > $max_bytes;

			// Report validation error if size is now too big.
			if ( ! $this->args['allow_excessive_css'] && $is_stylesheet_excessive ) {
				$validation_error = [
					'code'      => self::STYLESHEET_TOO_LONG,
					'type'      => AMP_Validation_Error_Taxonomy::CSS_ERROR_TYPE,
					'spec_name' => self::STYLE_AMP_KEYFRAMES_GROUP_INDEX === $group ? self::STYLE_AMP_KEYFRAMES_SPEC_NAME : self::STYLE_AMP_CUSTOM_SPEC_NAME,
				];
				if ( isset( $this->pending_stylesheets[ $i ]['sources'] ) ) {
					$validation_error['sources'] = $this->pending_stylesheets[ $i ]['sources'];
				}

				$data = [
					'node' => $this->pending_stylesheets[ $i ]['element'],
				];
				if ( $this->should_sanitize_validation_error( $validation_error, $data ) ) {
					$this->pending_stylesheets[ $i ]['included'] = false;
					continue; // Skip to the next stylesheet.
				}
			}

			if ( ! isset( $this->pending_stylesheets[ $i ]['included'] ) ) {
				$this->pending_stylesheets[ $i ]['included'] = true;
				$included_count++;
				$concatenated_size += $this->pending_stylesheets[ $i ]['final_size'];
				$preload_font_urls  = array_merge( $preload_font_urls, $this->pending_stylesheets[ $i ]['preload_font_urls'] );

				if ( $is_stylesheet_excessive ) {
					$is_excessive_size = true;
				}

				// Note: the following two may be incorrect because the !important property or erroneous rule may have
				// actually been tree-shaken and thus is no longer in the document.
				$important_count  += $this->pending_stylesheets[ $i ]['important_count'];
				$kept_error_count += $this->pending_stylesheets[ $i ]['kept_error_count'];
			}
		}

		return compact( 'included_count', 'is_excessive_size', 'important_count', 'kept_error_count', 'preload_font_urls' );
	}

	/**
	 * Creates and inserts a meta[name="viewport"] tag if there are @viewport style rules.
	 *
	 * These rules aren't valid in CSS, but they might be valid in that meta tag.
	 * So this adds them to the content attribute of a new meta tag.
	 * These are later processed, to merge the content values into a single meta tag.
	 *
	 * @param DOMElement $element        An element.
	 * @param array      $viewport_rules An associative array of $rule_name => $rule_value.
	 */
	private function create_meta_viewport( DOMElement $element, $viewport_rules ) {
		if ( empty( $viewport_rules ) ) {
			return;
		}
		$viewport_meta = $this->dom->createElement( 'meta' );
		$viewport_meta->setAttribute( 'name', 'viewport' );
		$viewport_meta->setAttribute(
			'content',
			implode(
				',',
				array_map(
					static function ( $property_name ) use ( $viewport_rules ) {
						return $property_name . '=' . $viewport_rules[ $property_name ];
					},
					array_keys( $viewport_rules )
				)
			)
		);

		// Inject a potential duplicate meta viewport element, to later be merged in AMP_Meta_Sanitizer.
		$element->parentNode->insertBefore( $viewport_meta, $element );
	}
}
PK.3Y��"�����Hbunyad-amp/includes/sanitizers/class-amp-tag-and-attribute-sanitizer.php<?php
/**
 * Class AMP_Tag_And_Attribute_Sanitizer
 *
 * Also referred to the "Validating Sanitizer".
 *
 * @package AMP
 */

use AmpProject\Amp;
use AmpProject\AmpWP\ValidationExemption;
use AmpProject\CssLength;
use AmpProject\DevMode;
use AmpProject\Dom\Document;
use AmpProject\Dom\Element;
use AmpProject\Extension;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag;
use AmpProject\Layout;

/**
 * Strips the tags and attributes from the content that are not allowed by the AMP spec.
 *
 * Allowed tags array is generated from this protocol buffer:
 *
 *     https://github.com/ampproject/amphtml/blob/bd29b0eb1b28d900d4abed2c1883c6980f18db8e/validator/validator-main.protoascii
 *     by the python script in amp-wp/bin/amp_wp_build.py. See the comment at the top
 *     of that file for instructions to generate class-amp-allowed-tags-generated.php.
 *
 * @todo Need to check the following items that are not yet checked by this sanitizer:
 *
 *     - `also_requires_attr` - if one attribute is present, this requires another.
 *     - `ChildTagSpec`       - Places restrictions on the number and type of child tags.
 *     - `if_value_regex`     - if one attribute value matches, this places a restriction
 *                              on another attribute/value.
 *
 * @internal
 */
class AMP_Tag_And_Attribute_Sanitizer extends AMP_Base_Sanitizer {

	const ATTR_REQUIRED_BUT_MISSING            = 'ATTR_REQUIRED_BUT_MISSING';
	const CDATA_TOO_LONG                       = 'CDATA_TOO_LONG';
	const CDATA_VIOLATES_DENYLIST              = 'CDATA_VIOLATES_DENYLIST';
	const DISALLOWED_ATTR                      = 'DISALLOWED_ATTR';
	const DISALLOWED_CHILD_TAG                 = 'DISALLOWED_CHILD_TAG';
	const DISALLOWED_DESCENDANT_TAG            = 'DISALLOWED_DESCENDANT_TAG';
	const DISALLOWED_FIRST_CHILD_TAG           = 'DISALLOWED_FIRST_CHILD_TAG';
	const DISALLOWED_SIBLING_TAG               = 'DISALLOWED_SIBLING_TAG';
	const DISALLOWED_PROCESSING_INSTRUCTION    = 'DISALLOWED_PROCESSING_INSTRUCTION';
	const DISALLOWED_PROPERTY_IN_ATTR_VALUE    = 'DISALLOWED_PROPERTY_IN_ATTR_VALUE';
	const DISALLOWED_RELATIVE_URL              = 'DISALLOWED_RELATIVE_URL';
	const DISALLOWED_TAG                       = 'DISALLOWED_TAG';
	const DISALLOWED_TAG_ANCESTOR              = 'DISALLOWED_TAG_ANCESTOR';
	const DUPLICATE_DIMENSIONS                 = 'DUPLICATE_DIMENSIONS';
	const DUPLICATE_ONEOF_ATTRS                = 'DUPLICATE_ONEOF_ATTRS';
	const DUPLICATE_UNIQUE_TAG                 = 'DUPLICATE_UNIQUE_TAG';
	const IMPLIED_LAYOUT_INVALID               = 'IMPLIED_LAYOUT_INVALID';
	const INCORRECT_MIN_NUM_CHILD_TAGS         = 'INCORRECT_MIN_NUM_CHILD_TAGS';
	const INCORRECT_NUM_CHILD_TAGS             = 'INCORRECT_NUM_CHILD_TAGS';
	const INVALID_ATTR_VALUE                   = 'INVALID_ATTR_VALUE';
	const INVALID_ATTR_VALUE_CASEI             = 'INVALID_ATTR_VALUE_CASEI';
	const INVALID_ATTR_VALUE_REGEX             = 'INVALID_ATTR_VALUE_REGEX';
	const INVALID_ATTR_VALUE_REGEX_CASEI       = 'INVALID_ATTR_VALUE_REGEX_CASEI';
	const INVALID_DISALLOWED_VALUE_REGEX       = 'INVALID_DISALLOWED_VALUE_REGEX';
	const INVALID_CDATA_CONTENTS               = 'INVALID_CDATA_CONTENTS';
	const INVALID_CDATA_CSS_I_AMPHTML_NAME     = 'INVALID_CDATA_CSS_I_AMPHTML_NAME';
	const INVALID_CDATA_CSS_IMPORTANT          = 'INVALID_CDATA_CSS_IMPORTANT';
	const INVALID_CDATA_HTML_COMMENTS          = 'INVALID_CDATA_HTML_COMMENTS';
	const INVALID_LAYOUT_AUTO_HEIGHT           = 'INVALID_LAYOUT_AUTO_HEIGHT';
	const INVALID_LAYOUT_AUTO_WIDTH            = 'INVALID_LAYOUT_AUTO_WIDTH';
	const INVALID_LAYOUT_FIXED_HEIGHT          = 'INVALID_LAYOUT_FIXED_HEIGHT';
	const INVALID_LAYOUT_HEIGHT                = 'INVALID_LAYOUT_HEIGHT';
	const INVALID_LAYOUT_HEIGHTS               = 'INVALID_LAYOUT_HEIGHTS';
	const INVALID_LAYOUT_NO_HEIGHT             = 'INVALID_LAYOUT_NO_HEIGHT';
	const INVALID_LAYOUT_UNIT_DIMENSIONS       = 'INVALID_LAYOUT_UNIT_DIMENSIONS';
	const INVALID_LAYOUT_WIDTH                 = 'INVALID_LAYOUT_WIDTH';
	const INVALID_URL                          = 'INVALID_URL';
	const INVALID_URL_PROTOCOL                 = 'INVALID_URL_PROTOCOL';
	const JSON_ERROR_CTRL_CHAR                 = 'JSON_ERROR_CTRL_CHAR';
	const JSON_ERROR_DEPTH                     = 'JSON_ERROR_DEPTH';
	const JSON_ERROR_EMPTY                     = 'JSON_ERROR_EMPTY';
	const JSON_ERROR_STATE_MISMATCH            = 'JSON_ERROR_STATE_MISMATCH';
	const JSON_ERROR_SYNTAX                    = 'JSON_ERROR_SYNTAX';
	const JSON_ERROR_UTF8                      = 'JSON_ERROR_UTF8';
	const MANDATORY_ANYOF_ATTR_MISSING         = 'MANDATORY_ANYOF_ATTR_MISSING';
	const MANDATORY_CDATA_MISSING_OR_INCORRECT = 'MANDATORY_CDATA_MISSING_OR_INCORRECT';
	const MANDATORY_ONEOF_ATTR_MISSING         = 'MANDATORY_ONEOF_ATTR_MISSING';
	const MANDATORY_TAG_ANCESTOR               = 'MANDATORY_TAG_ANCESTOR';
	const MISSING_LAYOUT_ATTRIBUTES            = 'MISSING_LAYOUT_ATTRIBUTES';
	const MISSING_MANDATORY_PROPERTY           = 'MISSING_MANDATORY_PROPERTY';
	const MISSING_REQUIRED_PROPERTY_VALUE      = 'MISSING_REQUIRED_PROPERTY_VALUE';
	const MISSING_URL                          = 'MISSING_URL';
	const SPECIFIED_LAYOUT_INVALID             = 'SPECIFIED_LAYOUT_INVALID';
	const WRONG_PARENT_TAG                     = 'WRONG_PARENT_TAG';

	/**
	 * Key for localhost.
	 *
	 * @var string
	 */
	const LOCALHOST = 'localhost';

	/**
	 * Allowed tags.
	 *
	 * @since 0.5
	 *
	 * @var array
	 */
	protected $allowed_tags;

	/**
	 * Globally-allowed attributes.
	 *
	 * @since 0.5
	 *
	 * @var array[][]
	 */
	protected $globally_allowed_attributes;

	/**
	 * Layout-allowed attributes.
	 *
	 * @since 0.5
	 *
	 * @var string[]
	 */
	protected $layout_allowed_attributes;

	/**
	 * Mapping of alternative names back to their primary names.
	 *
	 * @since 0.7
	 * @var array
	 */
	protected $rev_alternate_attr_name_lookup = [];

	/**
	 * Mapping of JSON-serialized tag spec to the number of instances encountered in the document.
	 *
	 * @var array
	 */
	protected $visited_unique_tag_specs = [];

	/**
	 * Default args.
	 *
	 * @since 0.5
	 *
	 * @var array
	 */
	protected $DEFAULT_ARGS = [];

	/**
	 * AMP script components that are discovered being required through sanitization.
	 *
	 * @var string[]
	 */
	protected $script_components = [];

	/**
	 * Keep track of nodes that should not be replaced to prevent duplicated validation errors since sanitization is rejected.
	 *
	 * @var array
	 */
	protected $should_not_replace_nodes = [];

	/**
	 * Keep track of the elements that are currently open.
	 *
	 * This is used to determine whether a node exists inside of a given element tree, speeding up has_ancestor checks
	 * as well as disabling attribute validation inside of templates.
	 *
	 * @see \AMP_Tag_And_Attribute_Sanitizer::has_ancestor()
	 * @since 1.3
	 * @var array
	 */
	protected $open_elements = [];

	/**
	 * AMP_Tag_And_Attribute_Sanitizer constructor.
	 *
	 * @since 0.5
	 *
	 * @param Document $dom  DOM.
	 * @param array    $args Args.
	 */
	public function __construct( $dom, $args = [] ) {
		// @todo It is pointless to have this DEFAULT_ARGS copying the array values. We should only get the data from AMP_Allowed_Tags_Generated.
		$this->DEFAULT_ARGS = [
			'amp_allowed_tags'                => AMP_Allowed_Tags_Generated::get_allowed_tags(),
			'amp_globally_allowed_attributes' => AMP_Allowed_Tags_Generated::get_allowed_attributes(),
			'amp_layout_allowed_attributes'   => AMP_Allowed_Tags_Generated::get_layout_attributes(),
			'allow_localhost_http_protocol'   => false,
		];

		parent::__construct( $dom, $args );

		// Prepare allowlists.
		$this->allowed_tags = $this->args['amp_allowed_tags'];
		foreach ( AMP_Rule_Spec::$additional_allowed_tags as $tag_name => $tag_rule_spec ) {
			$this->allowed_tags[ $tag_name ][] = $tag_rule_spec;
		}

		// @todo Do the same for body when !use_document_element?
		if ( ! empty( $this->args['use_document_element'] ) ) {
			foreach ( $this->allowed_tags['html'] as &$rule_spec ) {
				unset( $rule_spec[ AMP_Rule_Spec::TAG_SPEC ][ AMP_Rule_Spec::MANDATORY_PARENT ] );
			}

			unset( $rule_spec );
		}

		foreach ( $this->allowed_tags as &$tag_specs ) {
			foreach ( $tag_specs as &$tag_spec ) {
				if ( isset( $tag_spec[ AMP_Rule_Spec::ATTR_SPEC_LIST ] ) ) {
					$tag_spec[ AMP_Rule_Spec::ATTR_SPEC_LIST ] = $this->process_alternate_names( $tag_spec[ AMP_Rule_Spec::ATTR_SPEC_LIST ] );
				}
			}

			unset( $tag_spec );
		}

		unset( $tag_specs );

		$this->globally_allowed_attributes = $this->process_alternate_names( $this->args['amp_globally_allowed_attributes'] );
		$this->layout_allowed_attributes   = $this->process_alternate_names( $this->args['amp_layout_allowed_attributes'] );
	}

	/**
	 * Return array of values that would be valid as an HTML `script` element.
	 *
	 * Array keys are AMP element names and array values are their respective
	 * Javascript URLs from https://cdn.ampproject.org
	 *
	 * @since 0.7
	 * @see amp_register_default_scripts()
	 *
	 * @return array Returns component name as array key and true as value (or JavaScript URL string),
	 *               respectively. When true then the default component script URL will be used.
	 *               Will return an empty array if sanitization has yet to be run
	 *               or if it did not find any HTML elements to convert to AMP equivalents.
	 */
	public function get_scripts() {
		return array_fill_keys( array_unique( $this->script_components ), true );
	}

	/**
	 * Process alternative names in attribute spec list.
	 *
	 * @since 0.7
	 *
	 * @param array $attr_spec_list Attribute spec list.
	 * @return array Modified attribute spec list.
	 */
	private function process_alternate_names( $attr_spec_list ) {
		foreach ( $attr_spec_list as $attr_name => &$attr_spec ) {
			// Save all alternative names in lookup to improve performance.
			if ( isset( $attr_spec[ AMP_Rule_Spec::ALTERNATIVE_NAMES ] ) ) {
				foreach ( $attr_spec[ AMP_Rule_Spec::ALTERNATIVE_NAMES ] as $alternative_name ) {
					$this->rev_alternate_attr_name_lookup[ $alternative_name ] = $attr_name;
				}
			}
		}
		return $attr_spec_list;
	}

	/**
	 * Sanitize the elements from the HTML contained in this instance's Dom\Document.
	 *
	 * @since 0.5
	 */
	public function sanitize() {
		$result = $this->sanitize_element( $this->root_element );
		if ( is_array( $result ) ) {
			$this->script_components = $result;
		}
	}

	/**
	 * Sanitize element.
	 *
	 * Walk the DOM tree with depth first search (DFS) with post order traversal (LRN).
	 *
	 * @param DOMElement $element Element.
	 * @return string[]|null Required component scripts from sanitizing an element tree, or null if the element was removed.
	 */
	private function sanitize_element( DOMElement $element ) {
		if ( ! isset( $this->open_elements[ $element->nodeName ] ) ) {
			$this->open_elements[ $element->nodeName ] = 0;
		}
		$this->open_elements[ $element->nodeName ]++;

		$script_components = [];

		// First recurse into children to sanitize descendants.
		// The check for $element->parentNode at each iteration is to make sure an invalid child didn't bubble up removed
		// ancestor nodes in AMP_Tag_And_Attribute_Sanitizer::remove_node().
		$this_child = $element->firstChild;
		while ( $this_child && $element->parentNode ) {
			$prev_child = $this_child->previousSibling;
			$next_child = $this_child->nextSibling;
			if ( $this_child instanceof DOMElement ) {
				$result = $this->sanitize_element( $this_child );
				if ( is_array( $result ) ) {
					$script_components = array_merge(
						$script_components,
						$result
					);
				}
			} elseif ( $this_child instanceof DOMProcessingInstruction ) {
				$this->remove_invalid_child( $this_child, [ 'code' => self::DISALLOWED_PROCESSING_INSTRUCTION ] );
			}

			if ( ! $this_child->parentNode ) {
				// Handle case where this child is replaced with children.
				$this_child = $prev_child ? $prev_child->nextSibling : $element->firstChild;
			} else {
				$this_child = $next_child;
			}
		}

		// If the element is still in the tree, process it.
		// The element can currently be removed from the tree when processing children via AMP_Tag_And_Attribute_Sanitizer::remove_node().
		$was_removed = false;
		if ( $element->parentNode ) {
			$result = $this->process_node( $element );
			if ( is_array( $result ) ) {
				$script_components = array_merge( $script_components, $result );
			} else {
				$was_removed = true;
			}
		}

		$this->open_elements[ $element->nodeName ]--;

		if ( $was_removed ) {
			return null;
		}

		return $script_components;
	}

	/**
	 * Augment rule spec for validation.
	 *
	 * @since 1.0
	 *
	 * @param DOMElement $node      Node.
	 * @param array      $rule_spec Rule spec.
	 * @return array Augmented rule spec.
	 */
	private function get_rule_spec_list_to_validate( DOMElement $node, $rule_spec ) {

		// Expand extension_spec into a set of attr_spec_list.
		if ( isset( $rule_spec[ AMP_Rule_Spec::TAG_SPEC ]['extension_spec'] ) ) {
			$extension_spec = $rule_spec[ AMP_Rule_Spec::TAG_SPEC ]['extension_spec'];

			// This could also be derived from the extension_type in the extension_spec.
			$custom_attr = 'amp-mustache' === $extension_spec['name'] ? 'custom-template' : 'custom-element';

			$rule_spec[ AMP_Rule_Spec::ATTR_SPEC_LIST ][ $custom_attr ] = [
				AMP_Rule_Spec::VALUE     => $extension_spec['name'],
				AMP_Rule_Spec::MANDATORY => true,
			];

			$rule_spec[ AMP_Rule_Spec::ATTR_SPEC_LIST ]['src'] = [
				AMP_Rule_Spec::VALUE_REGEX => implode(
					'',
					[
						'^',
						preg_quote( 'https://cdn.ampproject.org/v0/' . $extension_spec['name'] . '-', '/' ),
						'(' . implode( '|', array_merge( $extension_spec['version'], [ 'latest' ] ) ) . ')',
						'\.js$',
					]
				),
			];
		}

		// Augment the attribute list according to the parent's reference points, if it has them.
		if ( ! empty( $node->parentNode ) && isset( $this->allowed_tags[ $node->parentNode->nodeName ] ) ) {
			foreach ( $this->allowed_tags[ $node->parentNode->nodeName ] as $parent_rule_spec ) {
				if ( empty( $parent_rule_spec[ AMP_Rule_Spec::TAG_SPEC ]['reference_points'] ) ) {
					continue;
				}
				foreach ( $parent_rule_spec[ AMP_Rule_Spec::TAG_SPEC ]['reference_points'] as $reference_point_spec_name => $reference_point_spec_instance_attrs ) {
					$reference_point = AMP_Allowed_Tags_Generated::get_reference_point_spec( $reference_point_spec_name );
					if ( empty( $reference_point[ AMP_Rule_Spec::ATTR_SPEC_LIST ] ) ) {
						/*
						 * See special case for amp-selector in AMP_Tag_And_Attribute_Sanitizer::is_amp_allowed_attribute()
						 * where its reference point applies to any descendant elements, not just direct children.
						 */
						continue;
					}
					foreach ( $reference_point[ AMP_Rule_Spec::ATTR_SPEC_LIST ] as $attr_name => $reference_point_spec_attr ) {
						$reference_point_spec_attr = array_merge(
							$reference_point_spec_attr,
							$reference_point_spec_instance_attrs
						);

						/*
						 * Ignore mandatory constraint for now since this would end up causing other sibling children
						 * getting removed due to missing a mandatory attribute. To sanitize this it would require
						 * higher-level processing to look at an element's surrounding context, similar to how the
						 * sanitizer does not yet handle the mandatory_oneof constraint.
						 */
						unset( $reference_point_spec_attr['mandatory'] );

						$rule_spec[ AMP_Rule_Spec::ATTR_SPEC_LIST ][ $attr_name ] = $reference_point_spec_attr;
					}
				}
			}
		}
		return $rule_spec;
	}

	/**
	 * Process a node by checking if an element and its attributes are valid, and removing them when invalid.
	 *
	 * Attributes which are not valid are removed. Elements which are not allowed are also removed,
	 * including elements which miss mandatory attributes.
	 *
	 * @param DOMElement $node Node.
	 * @return string[]|null Required scripts, or null if the element was removed.
	 */
	private function process_node( DOMElement $node ) {

		// Remove nodes with tags that have not been put in the allowlist.
		if ( ! $this->is_amp_allowed_tag( $node ) ) {

			// If it's not an allowed tag, replace the node with it's children.
			$this->replace_node_with_children( $node );

			// Return early since we don't know anything about this node to validate it.
			return null;
		}

		/*
		 * Compile a list of rule_specs to validate for this node
		 * based on tag name of the node.
		 */
		$rule_spec_list_to_validate = [];
		$validation_errors          = [];
		$rule_spec_list             = $this->allowed_tags[ $node->nodeName ];
		foreach ( $rule_spec_list as $id => $rule_spec ) {
			$validity = $this->validate_tag_spec_for_node( $node, $rule_spec[ AMP_Rule_Spec::TAG_SPEC ] );

			if ( true === $validity ) {
				$rule_spec_list_to_validate[ $id ] = $this->get_rule_spec_list_to_validate( $node, $rule_spec );
			} else {
				$validation_errors[] = array_merge(
					$validity,
					[ 'spec_name' => $this->get_spec_name( $node, $rule_spec[ AMP_Rule_Spec::TAG_SPEC ] ) ]
				);
			}
		}

		// If no valid rule_specs exist, then remove this node and return.
		if ( empty( $rule_spec_list_to_validate ) ) {
			if ( 1 === count( $validation_errors ) ) {
				// If there was only one tag spec candidate that failed, use its error code for removing the node,
				// since we know it is the specific reason for why the node had to be removed.
				// This is the normal case.
				$this->remove_invalid_child(
					$node,
					$validation_errors[0]
				);
			} else {
				$spec_names = wp_list_pluck( $validation_errors, 'spec_name' );

				$unique_validation_error_count = count(
					array_unique(
						array_map(
							static function ( $validation_error ) {
								unset(
									$validation_error['spec_name'],
									// Remove other keys that may make the error unique.
									$validation_error['required_parent_name'],
									$validation_error['required_ancestor_name'],
									$validation_error['required_child_count'],
									$validation_error['required_min_child_count'],
									$validation_error['required_attr_value']
								);
								return $validation_error;
							},
							$validation_errors
						),
						SORT_REGULAR
					)
				);

				if ( 1 === $unique_validation_error_count ) {
					// If all of the validation errors are the same except for the spec_name, use the common error code.
					$validation_error = $validation_errors[0];
					unset( $validation_error['spec_name'] );
					$this->remove_invalid_child(
						$node,
						array_merge(
							$validation_error,
							compact( 'spec_names' )
						)
					);
				} else {
					// Otherwise, we have a rare condition where multiple tag specs fail for different reasons.
					foreach ( $validation_errors as $validation_error ) {
						if ( true === $this->remove_invalid_child( $node, $validation_error ) ) {
							break; // Once removed, ignore remaining errors.
						}
					}
				}
			}
			return null;
		}

		// The remaining validations all have to do with attributes.
		$attr_spec_list = [];
		$tag_spec       = [];
		$cdata          = [];

		/*
		 * If we have exactly one rule_spec, use it's attr_spec_list
		 * to validate the node's attributes.
		 */
		if ( 1 === count( $rule_spec_list_to_validate ) ) {
			$rule_spec      = array_pop( $rule_spec_list_to_validate );
			$attr_spec_list = $rule_spec[ AMP_Rule_Spec::ATTR_SPEC_LIST ];
			$tag_spec       = $rule_spec[ AMP_Rule_Spec::TAG_SPEC ];
			if ( isset( $rule_spec[ AMP_Rule_Spec::CDATA ] ) ) {
				$cdata = $rule_spec[ AMP_Rule_Spec::CDATA ];
			}
		} else {
			/*
			 * If there is more than one valid rule_spec for this node,
			 * then try to deduce which one is intended by inspecting
			 * the node's attributes.
			 */

			/*
			 * Get a score from each attr_spec_list by seeing how many
			 * attributes and values match the node.
			 */
			$attr_spec_scores = [];
			foreach ( $rule_spec_list_to_validate as $spec_id => $rule_spec ) {
				$attr_spec_scores[ $spec_id ] = $this->validate_attr_spec_list_for_node( $node, $rule_spec[ AMP_Rule_Spec::ATTR_SPEC_LIST ] );
			}

			// Remove all spec lists that didn't match.
			$attr_spec_scores = array_filter( $attr_spec_scores );

			// If no attribute spec lists match, then the element must be removed.
			if ( empty( $attr_spec_scores ) ) {
				$this->remove_node( $node );
				return null;
			}

			// Get the key(s) to the highest score(s).
			$spec_ids_sorted = array_keys( $attr_spec_scores, max( $attr_spec_scores ), true );

			// If there is exactly one attr_spec with a max score, use that one.
			if ( 1 === count( $spec_ids_sorted ) ) {
				$attr_spec_list = $rule_spec_list_to_validate[ $spec_ids_sorted[0] ][ AMP_Rule_Spec::ATTR_SPEC_LIST ];
				$tag_spec       = $rule_spec_list_to_validate[ $spec_ids_sorted[0] ][ AMP_Rule_Spec::TAG_SPEC ];
				if ( isset( $rule_spec_list_to_validate[ $spec_ids_sorted[0] ][ AMP_Rule_Spec::CDATA ] ) ) {
					$cdata = $rule_spec_list_to_validate[ $spec_ids_sorted[0] ][ AMP_Rule_Spec::CDATA ];
				}
			} else {
				// This should not happen very often, but...
				// If we're here, then we're not sure which spec should
				// be used. Let's use the top scoring ones.
				foreach ( $spec_ids_sorted as $id ) {
					$attr_spec_list = array_merge(
						$attr_spec_list,
						$rule_spec_list_to_validate[ $id ][ AMP_Rule_Spec::ATTR_SPEC_LIST ]
					);
					$tag_spec       = array_merge(
						$tag_spec,
						$rule_spec_list_to_validate[ $id ][ AMP_Rule_Spec::TAG_SPEC ]
					);
					if ( isset( $rule_spec_list_to_validate[ $id ][ AMP_Rule_Spec::CDATA ] ) ) {
						$cdata = array_merge( $cdata, $rule_spec_list_to_validate[ $id ][ AMP_Rule_Spec::CDATA ] );
					}
				}
				$first_spec = reset( $rule_spec_list_to_validate );
				if ( empty( $attr_spec_list ) && isset( $first_spec[ AMP_Rule_Spec::ATTR_SPEC_LIST ] ) ) {
					$attr_spec_list = $first_spec[ AMP_Rule_Spec::ATTR_SPEC_LIST ];
				}
			}
		}

		$attr_spec_list = array_merge(
			$this->globally_allowed_attributes,
			$attr_spec_list
		);

		// Remove element if it has illegal CDATA.
		if ( ! empty( $cdata ) ) {
			$validity = $this->validate_cdata_for_node( $node, $cdata );
			if ( true !== $validity ) {
				$sanitized = $this->remove_invalid_child(
					$node,
					array_merge(
						$validity,
						[ 'spec_name' => $this->get_spec_name( $node, $tag_spec ) ]
					)
				);
				return $sanitized ? null : $this->get_required_script_components( $node, $tag_spec, $attr_spec_list );
			}
		}

		// Amend spec list with layout.
		if ( isset( $tag_spec['amp_layout'] ) ) {
			$attr_spec_list = array_merge( $attr_spec_list, $this->layout_allowed_attributes );

			if ( isset( $tag_spec['amp_layout']['supported_layouts'] ) ) {
				$layouts = wp_array_slice_assoc( Layout::FROM_SPEC, $tag_spec['amp_layout']['supported_layouts'] );

				$attr_spec_list['layout'][ AMP_Rule_Spec::VALUE_REGEX_CASEI ] = '(' . implode( '|', $layouts ) . ')';
			}
		}

		// Enforce unique constraint.
		if ( ! empty( $tag_spec['unique'] ) ) {
			$removed      = false;
			$tag_spec_key = wp_json_encode( $tag_spec );
			if ( ! empty( $this->visited_unique_tag_specs[ $node->nodeName ][ $tag_spec_key ] ) ) {
				$removed = $this->remove_invalid_child(
					$node,
					[
						'code'      => self::DUPLICATE_UNIQUE_TAG,
						'spec_name' => $this->get_spec_name( $node, $tag_spec ),
					]
				);
			}
			$this->visited_unique_tag_specs[ $node->nodeName ][ $tag_spec_key ] = true;
			if ( $removed ) {
				return null;
			}
		}

		// Remove the element if it is has an invalid layout.
		$layout_validity = $this->is_valid_layout( $tag_spec, $node );
		if ( true !== $layout_validity ) {
			$sanitized = $this->remove_invalid_child( $node, $layout_validity );
			return $sanitized ? null : $this->get_required_script_components( $node, $tag_spec, $attr_spec_list );
		}

		// Identify attribute values that don't conform to the attr_spec.
		$disallowed_attributes = $this->sanitize_disallowed_attribute_values_in_node( $node, $attr_spec_list );

		// Remove all invalid attributes.
		if ( ! empty( $disallowed_attributes ) ) {
			/*
			 * Capture all element attributes up front so that differing validation errors result when
			 * one invalid attribute is accepted but the others are still rejected.
			 */
			$element_attributes = [];
			foreach ( $node->attributes as $attribute ) {
				$element_attributes[ $attribute->nodeName ] = $attribute->nodeValue;
			}
			$removed_attributes = [];

			foreach ( $disallowed_attributes as $disallowed_attribute ) {
				/**
				 * Returned vars.
				 *
				 * @var DOMAttr $attr_node
				 * @var string  $error_code
				 * @var array   $error_data
				 */
				list( $attr_node, $error_code, $error_data ) = $disallowed_attribute;

				$validation_error = [
					'code'               => $error_code,
					'element_attributes' => $element_attributes,
				];

				if ( self::DISALLOWED_PROPERTY_IN_ATTR_VALUE === $error_code ) {
					$properties = $this->parse_properties_attribute( $attr_node->nodeValue );

					$validation_error['meta_property_name'] = $error_data['name'];
					if ( ! $this->is_empty_attribute_value( $properties[ $error_data['name'] ] ) ) {
						$validation_error['meta_property_value'] = $properties[ $error_data['name'] ];
					}

					if ( $this->should_sanitize_validation_error( $validation_error, [ 'node' => $attr_node ] ) ) {
						unset( $properties[ $error_data['name'] ] );
						$node->setAttribute( $attr_node->nodeName, $this->serialize_properties_attribute( $properties ) );
					}
				} elseif ( self::MISSING_REQUIRED_PROPERTY_VALUE === $error_code ) {
					$validation_error['meta_property_name']           = $error_data['name'];
					$validation_error['meta_property_value']          = $error_data['value'];
					$validation_error['meta_property_required_value'] = $error_data['required_value'];

					if ( $this->should_sanitize_validation_error( $validation_error, [ 'node' => $attr_node ] ) ) {
						$properties = $this->parse_properties_attribute( $attr_node->nodeValue );
						if ( ! empty( $attr_spec_list[ $attr_node->nodeName ]['value_properties'][ $error_data['name'] ]['mandatory'] ) ) {
							$properties[ $error_data['name'] ] = $error_data['required_value'];
						} else {
							unset( $properties[ $error_data['name'] ] );
						}
						$node->setAttribute( $attr_node->nodeName, $this->serialize_properties_attribute( $properties ) );
					}
				} elseif ( self::MISSING_MANDATORY_PROPERTY === $error_code ) {
					$validation_error['meta_property_name']           = $error_data['name'];
					$validation_error['meta_property_required_value'] = $error_data['required_value'];
					if ( $this->should_sanitize_validation_error( $validation_error, [ 'node' => $attr_node ] ) ) {
						$properties = array_merge(
							$this->parse_properties_attribute( $attr_node->nodeValue ),
							[ $error_data['name'] => $error_data['required_value'] ]
						);
						$node->setAttribute( $attr_node->nodeName, $this->serialize_properties_attribute( $properties ) );
					}
				} else {
					$attr_spec = isset( $attr_spec_list[ $attr_node->nodeName ] ) ? $attr_spec_list[ $attr_node->nodeName ] : [];
					if ( $this->remove_invalid_attribute( $node, $attr_node, $validation_error, $attr_spec ) ) {
						$removed_attributes[] = $attr_node;
					}
				}
			}

			/*
			 * Only run cleanup after the fact to prevent a scenario where invalid markup is kept and so the attribute
			 * is actually not removed. This prevents a "DOMException: Not Found Error" from happening when calling
			 * remove_invalid_attribute() since clean_up_after_attribute_removal() can end up removing invalid link
			 * attributes (like 'target') when there is an invalid 'href' attribute, but if the 'target' attribute is
			 * itself invalid, then if clean_up_after_attribute_removal() is called inside of remove_invalid_attribute()
			 * it can cause a subsequent invocation of remove_invalid_attribute() to try to remove an invalid
			 * attribute that has already been removed from the DOM.
			 */
			foreach ( $removed_attributes as $removed_attribute ) {
				$this->clean_up_after_attribute_removal( $node, $removed_attribute );
			}
		}

		if ( ! empty( $tag_spec[ AMP_Rule_Spec::DESCENDANT_TAG_LIST ] ) ) {
			$allowed_tags = AMP_Allowed_Tags_Generated::get_descendant_tag_list( $tag_spec[ AMP_Rule_Spec::DESCENDANT_TAG_LIST ] );
			if ( ! empty( $allowed_tags ) ) {
				$this->remove_disallowed_descendants( $node, $allowed_tags, $this->get_spec_name( $node, $tag_spec ) );
			}
		}

		// If the node disallows any siblings, remove them.
		if ( ! empty( $tag_spec[ AMP_Rule_Spec::SIBLINGS_DISALLOWED ] ) ) {
			$this->remove_disallowed_siblings( $node, $this->get_spec_name( $node, $tag_spec ) );
		}

		// After attributes have been sanitized (and potentially removed), if mandatory attribute(s) are missing, remove the element.
		$missing_mandatory_attributes = $this->get_missing_mandatory_attributes( $attr_spec_list, $node );
		if ( ! empty( $missing_mandatory_attributes ) ) {
			$sanitized = $this->remove_invalid_child(
				$node,
				[
					'code'       => self::ATTR_REQUIRED_BUT_MISSING,
					'attributes' => $missing_mandatory_attributes,
					'spec_name'  => $this->get_spec_name( $node, $tag_spec ),
				]
			);
			return $sanitized ? null : $this->get_required_script_components( $node, $tag_spec, $attr_spec_list );
		}

		if ( ! empty( $tag_spec[ AMP_Rule_Spec::MANDATORY_ANYOF ] ) ) {
			$anyof_attributes = $this->get_element_attribute_intersection( $node, $tag_spec[ AMP_Rule_Spec::MANDATORY_ANYOF ] );
			if ( 0 === count( $anyof_attributes ) ) {
				$sanitized = $this->remove_invalid_child(
					$node,
					[
						'code'                  => self::MANDATORY_ANYOF_ATTR_MISSING,
						'mandatory_anyof_attrs' => $tag_spec[ AMP_Rule_Spec::MANDATORY_ANYOF ], // @todo Temporary as value can be looked up via spec name. See https://github.com/ampproject/amp-wp/pull/3817.
						'spec_name'             => $this->get_spec_name( $node, $tag_spec ),
					]
				);
				return $sanitized ? null : $this->get_required_script_components( $node, $tag_spec, $attr_spec_list );
			}
		}

		if ( ! empty( $tag_spec[ AMP_Rule_Spec::MANDATORY_ONEOF ] ) ) {
			$oneof_attributes = $this->get_element_attribute_intersection( $node, $tag_spec[ AMP_Rule_Spec::MANDATORY_ONEOF ] );
			if ( 0 === count( $oneof_attributes ) ) {
				$sanitized = $this->remove_invalid_child(
					$node,
					[
						'code'                  => self::MANDATORY_ONEOF_ATTR_MISSING,
						'mandatory_oneof_attrs' => $tag_spec[ AMP_Rule_Spec::MANDATORY_ONEOF ], // @todo Temporary as value can be looked up via spec name. See https://github.com/ampproject/amp-wp/pull/3817.
						'spec_name'             => $this->get_spec_name( $node, $tag_spec ),
					]
				);
				return $sanitized ? null : $this->get_required_script_components( $node, $tag_spec, $attr_spec_list );
			} elseif ( count( $oneof_attributes ) > 1 ) {
				$sanitized = $this->remove_invalid_child(
					$node,
					[
						'code'                  => self::DUPLICATE_ONEOF_ATTRS,
						'duplicate_oneof_attrs' => $oneof_attributes,
						'spec_name'             => $this->get_spec_name( $node, $tag_spec ),
					]
				);
				return $sanitized ? null : $this->get_required_script_components( $node, $tag_spec, $attr_spec_list );
			}
		}

		return $this->get_required_script_components( $node, $tag_spec, $attr_spec_list );
	}

	/**
	 * Get required AMP component scripts.
	 *
	 * @param DOMElement $node           Element.
	 * @param array      $tag_spec       Tag spec.
	 * @param array      $attr_spec_list Attribute spec list.
	 * @return string[] Script component handles.
	 */
	private function get_required_script_components( DOMElement $node, $tag_spec, $attr_spec_list ) {
		$script_components = [];
		if ( ! empty( $tag_spec['requires_extension'] ) ) {
			$script_components = array_merge( $script_components, $tag_spec['requires_extension'] );
		}

		// Add required AMP components for attributes.
		foreach ( $node->attributes as $attribute ) {
			if ( isset( $attr_spec_list[ $attribute->nodeName ]['requires_extension'] ) ) {
				$script_components = array_merge(
					$script_components,
					$attr_spec_list[ $attribute->nodeName ]['requires_extension']
				);
			}
		}

		// Manually add components for attributes; this is hard-coded because attributes do not have requires_extension like tags do. See <https://github.com/ampproject/amp-wp/issues/1808>.
		if ( $node->hasAttribute( 'lightbox' ) ) {
			$script_components[] = 'amp-lightbox-gallery';
		}

		// Check if element needs amp-bind component.
		if ( ! in_array( 'amp-bind', $this->script_components, true ) ) {
			foreach ( $node->attributes as $name => $value ) {
				if ( Amp::BIND_DATA_ATTR_PREFIX === substr( $name, 0, 14 ) ) {
					$script_components[] = 'amp-bind';
					break;
				}
			}
		}
		return $script_components;
	}

	/**
	 * Whether a node is missing a mandatory attribute.
	 *
	 * @param array      $attr_spec The attribute specification.
	 * @param DOMElement $node      The DOMElement of the node to check.
	 * @return bool $is_missing boolean Whether a required attribute is missing.
	 */
	public function is_missing_mandatory_attribute( $attr_spec, DOMElement $node ) {
		return 0 !== count( $this->get_missing_mandatory_attributes( $attr_spec, $node ) );
	}

	/**
	 * Get list of mandatory missing mandatory attributes.
	 *
	 * @param array      $attr_spec The attribute specification.
	 * @param DOMElement $node      The DOMElement of the node to check.
	 * @return string[] Names of missing attributes.
	 */
	private function get_missing_mandatory_attributes( $attr_spec, DOMElement $node ) {
		$missing_attributes = [];

		foreach ( $attr_spec as $attr_name => $attr_spec_rule_value ) {
			if ( empty( $attr_spec_rule_value[ AMP_Rule_Spec::MANDATORY ] ) ) {
				continue;
			}

			if ( '\u' === substr( $attr_name, 0, 2 ) ) {
				$attr_name = html_entity_decode( '&#x' . substr( $attr_name, 2 ) . ';' ); // Probably ⚡.
			}

			if ( ! $node->hasAttribute( $attr_name ) && AMP_Rule_Spec::FAIL === $this->check_attr_spec_rule_mandatory( $node, $attr_name, $attr_spec_rule_value ) ) {
				$missing_attributes[] = $attr_name;
			}
		}

		return $missing_attributes;
	}

	/**
	 * Validate element for its CDATA.
	 *
	 * @since 0.7
	 *
	 * @param DOMElement $element    Element.
	 * @param array      $cdata_spec CDATA.
	 * @return true|array True when valid or error data when invalid.
	 */
	private function validate_cdata_for_node( DOMElement $element, $cdata_spec ) {
		if (
			isset( $cdata_spec['max_bytes'] ) && strlen( $element->textContent ) > $cdata_spec['max_bytes']
			&&
			// Skip the <style amp-custom> tag, as we want to display it even with an excessive size if it passed the style sanitizer.
			// This would mean that AMP was disabled to not break the styling.
			! ( 'style' === $element->nodeName && $element->hasAttribute( 'amp-custom' ) )
		) {
			return [
				'code' => self::CDATA_TOO_LONG,
			];
		}
		if ( isset( $cdata_spec['disallowed_cdata_regex'] ) ) {
			foreach ( $cdata_spec['disallowed_cdata_regex'] as $disallowed_cdata_regex ) {
				if ( preg_match( '@' . $disallowed_cdata_regex['regex'] . '@u', $element->textContent ) ) {
					if ( isset( $disallowed_cdata_regex['error_message'] ) ) {
						// There are only a few error messages, so map them to error codes.
						switch ( $disallowed_cdata_regex['error_message'] ) {
							case 'CSS i-amphtml- name prefix':
								// The prefix used in selectors is handled by style sanitizer.
								return [ 'code' => self::INVALID_CDATA_CSS_I_AMPHTML_NAME ];
							case 'contents':
								return [ 'code' => self::INVALID_CDATA_CONTENTS ];
							case 'html comments':
								return [ 'code' => self::INVALID_CDATA_HTML_COMMENTS ];
						}
					}

					// Note: This fallback case is not currently reachable because all error messages are accounted for in the switch statement.
					return [ 'code' => self::CDATA_VIOLATES_DENYLIST ];
				}
			}
		} elseif ( isset( $cdata_spec['cdata_regex'] ) ) {
			$delimiter = false === strpos( $cdata_spec['cdata_regex'], '@' ) ? '@' : '#';
			if ( ! preg_match( $delimiter . $cdata_spec['cdata_regex'] . $delimiter . 'u', $element->textContent ) ) {
				return [ 'code' => self::MANDATORY_CDATA_MISSING_OR_INCORRECT ];
			}
		} elseif ( isset( $cdata_spec['mandatory_cdata'] ) && $cdata_spec['mandatory_cdata'] !== $element->textContent ) {
			return [ 'code' => self::MANDATORY_CDATA_MISSING_OR_INCORRECT ];
		}

		// When the CDATA is expected to be JSON, ensure it's valid JSON.
		if ( 'script' === $element->nodeName && 'application/json' === $element->getAttribute( 'type' ) ) {
			if ( '' === trim( $element->textContent ) ) {
				return [ 'code' => self::JSON_ERROR_EMPTY ];
			}

			json_decode( $element->textContent );
			$json_last_error = json_last_error();

			if ( JSON_ERROR_NONE !== $json_last_error ) {
				return [ 'code' => $this->get_json_error_code( $json_last_error ) ];
			}
		}

		return true;
	}

	/**
	 * Gets the JSON error code for the last error.
	 *
	 * @link https://www.php.net/manual/en/function.json-last-error.php#refsect1-function.json-last-error-returnvalues
	 *
	 * @param int $json_last_error The last JSON error code.
	 * @return string The error code for the last JSON error.
	 */
	private function get_json_error_code( $json_last_error ) {
		static $possible_json_errors = [
			'JSON_ERROR_CTRL_CHAR',
			'JSON_ERROR_DEPTH',
			'JSON_ERROR_STATE_MISMATCH',
			'JSON_ERROR_SYNTAX',
			'JSON_ERROR_UTF8',
		];

		foreach ( $possible_json_errors as $possible_error ) {
			if ( constant( $possible_error ) === $json_last_error ) {
				return $possible_error;
			}
		}

		return 'JSON_ERROR_SYNTAX';
	}

	/**
	 * Determines is a node is currently valid per its tag specification.
	 *
	 * Checks to see if a node's placement with the DOM is be valid for the
	 * given tag_spec. If there are restrictions placed on the type of node
	 * that can be an immediate parent or an ancestor of this node, then make
	 * sure those restrictions are met.
	 *
	 * This method has no side effects. It should not sanitize the DOM. It is purely to see if the spec matches.
	 *
	 * @since 0.5
	 *
	 * @param DOMElement $node     The node to validate.
	 * @param array      $tag_spec The specification.
	 * @return true|array True if node is valid for spec, or error data array if otherwise.
	 */
	private function validate_tag_spec_for_node( DOMElement $node, $tag_spec ) {

		if ( ! empty( $tag_spec[ AMP_Rule_Spec::MANDATORY_PARENT ] ) && ! $this->has_parent( $node, $tag_spec[ AMP_Rule_Spec::MANDATORY_PARENT ] ) ) {
			return [
				'code'                 => self::WRONG_PARENT_TAG,
				'required_parent_name' => $tag_spec[ AMP_Rule_Spec::MANDATORY_PARENT ],
			];
		}

		// Extension scripts must be in the head. Note this currently never fails because all AMP scripts are moved to the head before sanitization.
		if ( isset( $tag_spec['extension_spec'] ) && ! $this->has_parent( $node, 'head' ) ) {
			return [
				'code'                 => self::WRONG_PARENT_TAG,
				'required_parent_name' => 'head',
			];
		}

		if ( ! empty( $tag_spec[ AMP_Rule_Spec::DISALLOWED_ANCESTOR ] ) ) {
			foreach ( $tag_spec[ AMP_Rule_Spec::DISALLOWED_ANCESTOR ] as $disallowed_ancestor_node_name ) {
				if ( $this->has_ancestor( $node, $disallowed_ancestor_node_name ) ) {
					return [
						'code'                => self::DISALLOWED_TAG_ANCESTOR,
						'disallowed_ancestor' => $disallowed_ancestor_node_name,
					];
				}
			}
		}

		if ( ! empty( $tag_spec[ AMP_Rule_Spec::MANDATORY_ANCESTOR ] ) && ! $this->has_ancestor( $node, $tag_spec[ AMP_Rule_Spec::MANDATORY_ANCESTOR ] ) ) {
			return [
				'code'                   => self::MANDATORY_TAG_ANCESTOR,
				'required_ancestor_name' => $tag_spec[ AMP_Rule_Spec::MANDATORY_ANCESTOR ],
			];
		}

		if ( empty( $tag_spec[ AMP_Rule_Spec::CHILD_TAGS ] ) ) {
			return true;
		}

		$validity = $this->check_valid_children( $node, $tag_spec[ AMP_Rule_Spec::CHILD_TAGS ] );
		if ( true !== $validity ) {
			$validity['tag_spec'] = $this->get_spec_name( $node, $tag_spec );
			return $validity;
		}
		return true;
	}

	/**
	 * Checks to see if a spec is potentially valid.
	 *
	 * Checks the given node based on the attributes present in the node. This does not check every possible constraint
	 * imposed by the validator spec. It only performs the checks that are used to narrow down which set of attribute
	 * specs is most aligned with the given node. As of AMPHTML v1910161528000, the frequency of attribute spec
	 * constraints looks as follows:
	 *
	 *  433: value
	 *  400: mandatory
	 *  222: value_casei
	 *  147: disallowed_value_regex
	 *  115: value_regex
	 *  101: value_url
	 *   77: dispatch_key
	 *   17: value_regex_casei
	 *   15: requires_extension
	 *   12: alternative_names
	 *    2: value_properties
	 *
	 * The constraints that should be the most likely to differentiate one tag spec from another are:
	 *
	 * - value
	 * - mandatory
	 * - value_casei
	 *
	 * For example, there are two <amp-carousel> tag specs, one that has a mandatory lightbox attribute and another that
	 * lacks the lightbox attribute altogether. If an <amp-carousel> has the lightbox attribute, then we can rule out
	 * the tag spec without the lightbox attribute via the mandatory constraint.
	 *
	 * Additionally, there are multiple <amp-date-picker> tag specs, each which vary by the value of the 'type' attribute.
	 * By validating the type 'value' and 'value_casei' constraints here, we can narrow down the tag specs that should
	 * then be used to later validate and sanitize the element (in the sanitize_disallowed_attribute_values_in_node method).
	 *
	 * @see AMP_Tag_And_Attribute_Sanitizer::sanitize_disallowed_attribute_values_in_node()
	 *
	 * @param DOMElement $node           Node.
	 * @param array[]    $attr_spec_list Attribute Spec list.
	 *
	 * @return int Score for how well the attribute spec list matched.
	 */
	private function validate_attr_spec_list_for_node( DOMElement $node, $attr_spec_list ) {
		/*
		 * If node has no attributes there is no point in continuing, but if none of attributes
		 * in the spec list are mandatory, then we give this a score.
		 */
		if ( ! $node->hasAttributes() ) {
			foreach ( $attr_spec_list as $attr_name => $attr_spec_rule ) {
				if ( isset( $attr_spec_rule[ AMP_Rule_Spec::MANDATORY ] ) ) {
					return 0;
				}
			}
			return 1;
		}

		foreach ( $node->attributes as $attr_name => $attr_node ) {
			if ( ! isset( $attr_spec_list[ $attr_name ][ AMP_Rule_Spec::ALTERNATIVE_NAMES ] ) ) {
				continue;
			}
			foreach ( $attr_spec_list[ $attr_name ][ AMP_Rule_Spec::ALTERNATIVE_NAMES ] as $attr_alt_name ) {
				$attr_spec_list[ $attr_alt_name ] = $attr_spec_list[ $attr_name ];

				// Let alternate attribute reciprocally have this attribute as an alternative.
				$attr_spec_list[ $attr_alt_name ][ AMP_Rule_Spec::ALTERNATIVE_NAMES ] = [ $attr_name ];
			}
		}

		$score = 0;

		/*
		 * Keep track of how many of the attribute spec rules are mandatory,
		 * because if none are mandatory, then we will let this rule have a
		 * score since all the invalid attributes can just be removed.
		 */
		$mandatory_count = 0;

		/*
		 * Iterate through each attribute rule in this attr spec list and run
		 * the series of tests. Each filter is given a `$node`, an `$attr_name`,
		 * and an `$attr_spec_rule`. If the `$attr_spec_rule` seems to be valid
		 * for the given node, then the filter should increment the score by one.
		 */
		foreach ( $attr_spec_list as $attr_name => $attr_spec_rule ) {

			// If attr spec rule is empty, then it allows anything.
			if ( empty( $attr_spec_rule ) && $node->hasAttribute( $attr_name ) ) {
				$score += 2;
				continue;
			}

			// Merely having the attribute counts for something, though it may get sanitized out later.
			if ( $node->hasAttribute( $attr_name ) ) {
				$score += 2;
			}

			// If a mandatory attribute is required, and attribute exists, pass.
			if ( isset( $attr_spec_rule[ AMP_Rule_Spec::MANDATORY ] ) ) {
				$mandatory_count++;

				$result = $this->check_attr_spec_rule_mandatory( $node, $attr_name, $attr_spec_rule );
				if ( AMP_Rule_Spec::PASS === $result ) {
					$score += 2;
				} elseif ( AMP_Rule_Spec::FAIL === $result ) {
					return 0;
				}
			}

			/*
			 * Check 'value' - case sensitive
			 * Given attribute's value must exactly equal value of the rule to pass.
			 */
			if ( isset( $attr_spec_rule[ AMP_Rule_Spec::VALUE ] ) ) {
				$result = $this->check_attr_spec_rule_value( $node, $attr_name, $attr_spec_rule );
				if ( AMP_Rule_Spec::PASS === $result ) {
					$score += 2;
				} elseif ( AMP_Rule_Spec::FAIL === $result ) {
					return 0;
				}
			}

			/*
			 * Check 'value_casei' - case insensitive
			 * Given attribute's value must be a case insensitive match to the value of
			 * the rule to pass.
			 */
			if ( isset( $attr_spec_rule[ AMP_Rule_Spec::VALUE_CASEI ] ) ) {
				$result = $this->check_attr_spec_rule_value_casei( $node, $attr_name, $attr_spec_rule );
				if ( AMP_Rule_Spec::PASS === $result ) {
					$score += 2;
				} elseif ( AMP_Rule_Spec::FAIL === $result ) {
					return 0;
				}
			}
		}

		// Give the spec a score if it doesn't have any mandatory attributes, since they could all be removed during sanitization.
		if ( 0 === $mandatory_count && 0 === $score ) {
			$score = 1;
		}

		return $score;
	}

	/**
	 * Get spec name for a given tag spec.
	 *
	 * @since 1.5
	 *
	 * @param DOMElement $element  Element.
	 * @param array      $tag_spec Tag spec.
	 * @return string Spec name.
	 */
	private function get_spec_name( DOMElement $element, $tag_spec ) {
		if ( isset( $tag_spec['spec_name'] ) ) {
			return $tag_spec['spec_name'];
		} elseif ( isset( $tag_spec['extension_spec']['name'] ) ) {
			return sprintf(
				'script[%s=%s]',
				'amp-mustache' === $tag_spec['extension_spec']['name'] ? 'custom-template' : 'custom-element',
				strtolower( $tag_spec['extension_spec']['name'] )
			);
		} else {
			return $element->nodeName;
		}
	}

	/**
	 * Remove invalid AMP attributes values from $node that have been implicitly disallowed.
	 *
	 * Allowed values are found $this->globally_allowed_attributes and in parameter $attr_spec_list
	 *
	 * @see \AMP_Tag_And_Attribute_Sanitizer::validate_attr_spec_list_for_node()
	 * @see https://github.com/ampproject/amphtml/blob/b692bf32880910cd52273cb41935098b86fb6725/validator/engine/validator.js#L3210-L3289
	 *
	 * @param DOMElement $node           Node.
	 * @param array[]    $attr_spec_list Attribute spec list.
	 * @return array Tuples containing attribute to remove, the error code and the error data.
	 */
	private function sanitize_disallowed_attribute_values_in_node( DOMElement $node, $attr_spec_list ) {
		$attrs_to_remove = [];
		$error_data      = null;

		foreach ( $attr_spec_list as $attr_name => $attr_val ) {
			if ( isset( $attr_spec_list[ $attr_name ][ AMP_Rule_Spec::ALTERNATIVE_NAMES ] ) ) {
				foreach ( $attr_spec_list[ $attr_name ][ AMP_Rule_Spec::ALTERNATIVE_NAMES ] as $attr_alt_name ) {
					$attr_spec_list[ $attr_alt_name ] = $attr_spec_list[ $attr_name ];
				}
			}
		}

		foreach ( $node->attributes as $attr_name => $attr_node ) {
			/*
			 * We can't remove attributes inside the 'foreach' loop without
			 * breaking the iteration. So we keep track of the attributes to
			 * remove in the first loop, then remove them in the second loop.
			 */
			if ( ! $this->is_amp_allowed_attribute( $attr_node, $attr_spec_list ) ) {
				$attrs_to_remove[] = [ $attr_node, self::DISALLOWED_ATTR, $error_data ];
				continue;
			}

			// Skip unspecified attribute, likely being data-* attribute.
			if ( ! isset( $attr_spec_list[ $attr_name ] ) ) {
				continue;
			}

			// Check the context to see if we are currently within a template tag.
			// If this is the case and the attribute value contains a template placeholder, we skip sanitization.
			if ( $this->is_inside_mustache_template( $node ) && preg_match( '/{{[^}]+?}}/', $attr_node->nodeValue ) ) {
				continue;
			}

			$attr_spec_rule = $attr_spec_list[ $attr_name ];

			/*
			 * Note that the following checks may have been previously done in validate_attr_spec_list_for_node():
			 *
			 * - check_attr_spec_rule_mandatory
			 * - check_attr_spec_rule_value
			 * - check_attr_spec_rule_value_casei
			 *
			 * They have already been checked because the tag spec should only be considered a candidate for a given
			 * node if it passes those checks, that is, if the shape of the node matches the spec close enough.
			 *
			 * However, if there was only one spec for a given tag, then the validate_attr_spec_list_for_node() would
			 * not have been called, and thus these checks need to be performed here as well.
			 */
			if ( isset( $attr_spec_rule[ AMP_Rule_Spec::VALUE ] ) &&
				AMP_Rule_Spec::FAIL === $this->check_attr_spec_rule_value( $node, $attr_name, $attr_spec_rule ) ) {
				$attrs_to_remove[] = [ $attr_node, self::INVALID_ATTR_VALUE, null ];
			} elseif ( isset( $attr_spec_rule[ AMP_Rule_Spec::VALUE_CASEI ] ) &&
				AMP_Rule_Spec::FAIL === $this->check_attr_spec_rule_value_casei( $node, $attr_name, $attr_spec_rule ) ) {
				$attrs_to_remove[] = [ $attr_node, self::INVALID_ATTR_VALUE_CASEI, null ];
			} elseif ( isset( $attr_spec_rule[ AMP_Rule_Spec::VALUE_REGEX ] ) &&
				AMP_Rule_Spec::FAIL === $this->check_attr_spec_rule_value_regex( $node, $attr_name, $attr_spec_rule ) ) {
				$attrs_to_remove[] = [ $attr_node, self::INVALID_ATTR_VALUE_REGEX, null ];
			} elseif ( isset( $attr_spec_rule[ AMP_Rule_Spec::VALUE_REGEX_CASEI ] ) &&
				AMP_Rule_Spec::FAIL === $this->check_attr_spec_rule_value_regex_casei( $node, $attr_name, $attr_spec_rule ) ) {
				$attrs_to_remove[] = [ $attr_node, self::INVALID_ATTR_VALUE_REGEX_CASEI, null ];
			} elseif ( isset( $attr_spec_rule[ AMP_Rule_Spec::VALUE_URL ][ AMP_Rule_Spec::ALLOWED_PROTOCOL ] ) &&
				AMP_Rule_Spec::FAIL === $this->check_attr_spec_rule_allowed_protocol( $node, $attr_name, $attr_spec_rule ) ) {
				$attrs_to_remove[] = [ $attr_node, self::INVALID_URL_PROTOCOL, null ]; // @todo A javascript: protocol could be treated differently. It should have a JS error type.
			} elseif ( isset( $attr_spec_rule[ AMP_Rule_Spec::VALUE_URL ] ) &&
				AMP_Rule_Spec::FAIL === $this->check_attr_spec_rule_valid_url( $node, $attr_name, $attr_spec_rule ) ) {
				$attrs_to_remove[] = [ $attr_node, self::INVALID_URL, null ];
			} elseif ( isset( $attr_spec_rule[ AMP_Rule_Spec::VALUE_URL ] ) &&
				AMP_Rule_Spec::FAIL === $this->check_attr_spec_rule_disallowed_empty( $node, $attr_name, $attr_spec_rule ) ) {
				$attrs_to_remove[] = [ $attr_node, self::MISSING_URL, null ];
			} elseif ( isset( $attr_spec_rule[ AMP_Rule_Spec::VALUE_URL ][ AMP_Rule_Spec::ALLOW_RELATIVE ] ) &&
				AMP_Rule_Spec::FAIL === $this->check_attr_spec_rule_disallowed_relative( $node, $attr_name, $attr_spec_rule ) ) {
				$attrs_to_remove[] = [ $attr_node, self::DISALLOWED_RELATIVE_URL, null ];
			} elseif ( isset( $attr_spec_rule[ AMP_Rule_Spec::DISALLOWED_VALUE_REGEX ] ) &&
				AMP_Rule_Spec::FAIL === $this->check_attr_spec_rule_disallowed_value_regex( $node, $attr_name, $attr_spec_rule ) ) {
				$attrs_to_remove[] = [ $attr_node, self::INVALID_DISALLOWED_VALUE_REGEX, null ];
			} elseif ( isset( $attr_spec_rule[ AMP_Rule_Spec::VALUE_PROPERTIES ] ) ) {
				$result = $this->check_attr_spec_rule_value_properties( $node, $attr_name, $attr_spec_rule );
				if ( AMP_Rule_Spec::FAIL === $result[0] ) {
					foreach ( $result[1] as $property_error ) {
						$attrs_to_remove[] = [ $attr_node, $property_error[0], $property_error[1] ];
					}
				}
			}
		}

		return $attrs_to_remove;
	}

	/**
	 * Check the validity of the layout attributes for the given element.
	 *
	 * This involves checking the layout, width, height and sizes attributes with AMP specific logic.
	 *
	 * @version 1911070201440
	 * @link https://github.com/ampproject/amphtml/blob/1911070201440/validator/engine/validator.js#L3937
	 *
	 * Adapted from the `validateLayout` method found in `validator.js` from the `ampproject/amphtml`
	 * project on GitHub.
	 *
	 * @param array[][]  $tag_spec Tag spec list.
	 * @param DOMElement $node     Tag to validate.
	 * @return true|array True if layout is valid, or error data if validation fails.
	 */
	private function is_valid_layout( $tag_spec, $node ) {
		// No need to validate if there are no specifications for the layout.
		if ( ! isset( $tag_spec['amp_layout'] ) ) {
			return true;
		}

		// We disable validating layout for tags where one of the layout attributes contains mustache syntax.
		// See <https://github.com/ampproject/amphtml/blob/19f1b72/validator/engine/validator.js#L4301-L4311>.
		if ( $this->is_inside_mustache_template( $node ) && $this->has_layout_attribute_with_mustache_variable( $node ) ) {
			return true;
		}

		$layout_attr  = $node->getAttribute( Attribute::LAYOUT );
		$sizes_attr   = $node->getAttribute( Attribute::SIZES );
		$heights_attr = $node->getAttribute( Attribute::HEIGHTS );
		$allow_fluid  = Layout::FLUID === $layout_attr;
		$allow_auto   = true;

		$input_width = new CssLength( $node->hasAttribute( Attribute::WIDTH ) ? $node->getAttribute( Attribute::WIDTH ) : null );
		$input_width->validate( $allow_auto, $allow_fluid );
		if ( ! $input_width->isValid() ) {
			return [
				'code'      => self::INVALID_LAYOUT_WIDTH,
				'attribute' => Attribute::WIDTH,
			];
		}

		$input_height = new CssLength( $node->hasAttribute( Attribute::HEIGHT ) ? $node->getAttribute( Attribute::HEIGHT ) : null );
		$input_height->validate( $allow_auto, $allow_fluid );
		if ( ! $input_height->isValid() ) {
			return [
				'code'      => self::INVALID_LAYOUT_HEIGHT,
				'attribute' => Attribute::HEIGHT,
			];
		}

		// Now calculate the effective layout attributes.
		$width  = $this->calculate_width( $tag_spec['amp_layout'], $layout_attr, $input_width );
		$height = $this->calculate_height( $tag_spec['amp_layout'], $layout_attr, $input_height );
		$layout = $this->calculate_layout( $layout_attr, $width, $height, $sizes_attr, $heights_attr );

		// Does the tag support the computed layout?
		// See <https://github.com/ampproject/amphtml/blob/19f1b72d/validator/engine/validator.js#L4364-L4391>.
		if ( ! $this->supports_layout( $tag_spec, $layout ) ) {
			/*
			 * Special case. If no layout related attributes were provided, this implies
			 * the CONTAINER layout. However, telling the user that the implied layout
			 * is unsupported for this tag is confusing if all they need is to provide
			 * width and height in, for example, the common case of creating
			 * an AMP-IMG without specifying dimensions. In this case, we emit a
			 * less correct, but simpler error message that could be more useful to
			 * the average user.
			 *
			 * See https://github.com/ampproject/amp-wp/issues/4465
			 */
			if (
				! $layout_attr &&
				Layout::CONTAINER === $layout &&
				$this->supports_layout( $tag_spec, Layout::RESPONSIVE )
			) {
				return [
					'code'      => self::MISSING_LAYOUT_ATTRIBUTES,
					'node_name' => $node->tagName,
				];
			}
			return [
				'code'      => ! $layout_attr ? self::IMPLIED_LAYOUT_INVALID : self::SPECIFIED_LAYOUT_INVALID,
				'layout'    => $layout,
				'node_name' => $node->tagName,
			];
		}

		// No need to go further if there is no layout attribute.
		if ( ! $layout_attr ) {
			return true;
		}

		// Only FLEX_ITEM allows for height to be set to auto.
		if ( $height->isAuto() && Layout::FLEX_ITEM !== $layout ) {
			return [
				'code'      => self::INVALID_LAYOUT_AUTO_HEIGHT,
				'attribute' => Attribute::HEIGHT,
			];
		}

		// FIXED, FIXED_HEIGHT, INTRINSIC, RESPONSIVE must have height set.
		if ( in_array( $layout, [ Layout::FIXED, Layout::FIXED_HEIGHT, Layout::INTRINSIC, Layout::RESPONSIVE ], true )
			&& ! $height->isDefined()
		) {
			return [
				'code'      => self::INVALID_LAYOUT_NO_HEIGHT,
				'attribute' => Attribute::HEIGHT,
			];
		}

		// For FIXED_HEIGHT if width is set it must be auto.
		if ( Layout::FIXED_HEIGHT === $layout && $width->isDefined() && ! $width->isAuto() ) {
			return [
				'code'                => self::INVALID_LAYOUT_FIXED_HEIGHT,
				'attribute'           => Attribute::WIDTH,
				'required_attr_value' => CssLength::AUTO,
			];
		}

		// FIXED, INTRINSIC, RESPONSIVE must have width set and not be auto.
		if ( in_array( $layout, [ Layout::FIXED, Layout::INTRINSIC, Layout::RESPONSIVE ], true ) ) {
			if ( ! $width->isDefined() || $width->isAuto() ) {
				return [
					'code'      => self::INVALID_LAYOUT_AUTO_WIDTH,
					'attribute' => Attribute::WIDTH,
				];
			}
		}

		// INTRINSIC, RESPONSIVE must have same units for height and width.
		if ( in_array( $layout, [ Layout::INTRINSIC, Layout::RESPONSIVE ], true )
			&& $width->getUnit() !== $height->getUnit()
		) {
			return [ 'code' => self::INVALID_LAYOUT_UNIT_DIMENSIONS ];
		}

		// Heights attribute is only allowed for RESPONSIVE layout.
		if ( ! $this->is_empty_attribute_value( $heights_attr ) && Layout::RESPONSIVE !== $layout ) {
			return [
				'code'                => self::INVALID_LAYOUT_HEIGHTS,
				'attribute'           => Attribute::LAYOUT,
				'required_attr_value' => Layout::RESPONSIVE,
			];
		}

		return true;
	}

	/**
	 * Whether the node is inside a mustache template.
	 *
	 * @since 1.5.3
	 *
	 * @param DOMElement $node The node to examine.
	 * @return bool Whether the node is inside a valid mustache template.
	 */
	private function is_inside_mustache_template( DOMElement $node ) {
		if ( ! empty( $this->open_elements[ Tag::TEMPLATE ] ) ) {
			while ( $node->parentNode instanceof DOMElement ) {
				$node = $node->parentNode;
				if ( Tag::TEMPLATE === $node->nodeName && Extension::MUSTACHE === $node->getAttribute( Attribute::TYPE ) ) {
					return true;
				}
			}
		} elseif ( ! empty( $this->open_elements[ Tag::SCRIPT ] ) ) {
			while ( $node->parentNode instanceof DOMElement ) {
				$node = $node->parentNode;
				if ( Tag::SCRIPT === $node->nodeName && Extension::MUSTACHE === $node->getAttribute( Attribute::TEMPLATE ) && Attribute::TYPE_TEXT_PLAIN === $node->getAttribute( Attribute::TYPE ) ) {
					return true;
				}
			}
		}
		return false;
	}

	/**
	 * Whether the node has a layout attribute with variable syntax, like {{foo}}.
	 *
	 * This is important for whether to validate the layout of the node.
	 * Similar to the validation logic in the AMP validator.
	 *
	 * @see https://github.com/ampproject/amphtml/blob/c083d2c6120a251dcc9b0beb33c0336c7d3ca5a8/validator/engine/validator.js#L4038-L4054
	 *
	 * @since 1.5.3
	 *
	 * @param DOMElement $node The node to examine.
	 * @return bool Whether the node has a layout attribute with variable syntax.
	 */
	private function has_layout_attribute_with_mustache_variable( DOMElement $node ) {
		foreach ( [ Attribute::LAYOUT, Attribute::WIDTH, Attribute::HEIGHT, Attribute::SIZES, Attribute::HEIGHTS ] as $attribute ) {
			if ( preg_match( '/{{[^}]+?}}/', $node->getAttribute( $attribute ) ) ) {
				return true;
			}
		}

		return false;
	}

	/**
	 * Calculate the effective width from the input layout and input width.
	 *
	 * This involves considering that some elements, such as amp-audio and
	 * amp-pixel, have natural dimensions (browser or implementation-specific
	 * defaults for width / height).
	 *
	 * Adapted from the `CalculateWidth` method found in `validator.js` from the `ampproject/amphtml`
	 * project on GitHub.
	 *
	 * @version 1911070201440
	 * @link https://github.com/ampproject/amphtml/blob/1911070201440/validator/engine/validator.js#L3451
	 *
	 * @param array     $amp_layout_spec AMP layout specifications for tag.
	 * @param string    $input_layout    Layout for tag.
	 * @param CssLength $input_width     Parsed width.
	 * @return CssLength
	 */
	private function calculate_width( $amp_layout_spec, $input_layout, CssLength $input_width ) {
		if (
			(
				! array_key_exists( $input_layout, Layout::TO_SPEC ) ||
				Layout::FIXED === $input_layout
			) &&
			! $input_width->isDefined() &&
			isset( $amp_layout_spec['defines_default_width'] )
		) {
			$css_length = new CssLength( '1px' );
			$css_length->validate( false, false );
			return $css_length;
		}

		return $input_width;
	}

	/**
	 * Calculate the effective height from input layout and input height.
	 *
	 * Adapted from the `CalculateHeight` method found in `validator.js` from the `ampproject/amphtml`
	 * project on GitHub.
	 *
	 * @version 1911070201440
	 * @link https://github.com/ampproject/amphtml/blob/1911070201440/validator/engine/validator.js#L3493
	 *
	 * @param array     $amp_layout_spec AMP layout specifications for tag.
	 * @param string    $input_layout    Layout for tag.
	 * @param CssLength $input_height    Parsed height.
	 * @return CssLength
	 */
	private function calculate_height( $amp_layout_spec, $input_layout, CssLength $input_height ) {
		if (
			(
				! array_key_exists( $input_layout, Layout::TO_SPEC ) ||
				in_array( $input_layout, [ Layout::FIXED, Layout::FIXED_HEIGHT ], true )
			) &&
			! $input_height->isDefined() &&
			isset( $amp_layout_spec['defines_default_height'] )
		) {
			$css_length = new CssLength( '1px' );
			$css_length->validate( false, false );
			return $css_length;
		}

		return $input_height;
	}

	/**
	 * Calculate the layout.
	 *
	 * This depends on the width / height calculation above.
	 * It happens last because web designers often make
	 * fixed-sized mocks first and then the layout determines how things
	 * will change for different viewports / devices / etc.
	 *
	 * Adapted from the `CalculateLayout` method found in `validator.js` from the `ampproject/amphtml`
	 * project on GitHub.
	 *
	 * @version 1911070201440
	 * @link https://github.com/ampproject/amphtml/blob/1911070201440/validator/engine/validator.js#L3516
	 *
	 * @param string    $layout_attr  Layout attribute.
	 * @param CssLength $width        Parsed width.
	 * @param CssLength $height       Parsed height.
	 * @param string    $sizes_attr   Sizes attribute.
	 * @param string    $heights_attr Heights attribute.
	 * @return string Layout type.
	 */
	private function calculate_layout( $layout_attr, CssLength $width, CssLength $height, $sizes_attr, $heights_attr ) {
		if ( ! $this->is_empty_attribute_value( $layout_attr ) ) {
			return $layout_attr;
		} elseif ( ! $width->isDefined() && ! $height->isDefined() ) {
			return Layout::CONTAINER;
		} elseif (
			( $height->isDefined() && $height->isFluid() ) ||
			( $width->isDefined() && $width->isFluid() )
		) {
			return Layout::FLUID;
		} elseif (
			$height->isDefined() &&
			( ! $width->isDefined() || $width->isAuto() )
		) {
			return Layout::FIXED_HEIGHT;
		} elseif (
			$height->isDefined() &&
			$width->isDefined() &&
			(
				! $this->is_empty_attribute_value( $sizes_attr ) ||
				! $this->is_empty_attribute_value( $heights_attr )
			)
		) {
			return Layout::RESPONSIVE;
		} else {
			return Layout::FIXED;
		}
	}

	/**
	 * Check if attribute is mandatory determine whether it exists in $node.
	 *
	 * When checking for the given attribute it also checks valid alternates.
	 *
	 * @param DOMElement $node           Node.
	 * @param string     $attr_name      Attribute name.
	 * @param array[]    $attr_spec_rule Attribute spec rule.
	 *
	 * @return int
	 *      - AMP_Rule_Spec::PASS - $attr_name is mandatory and it exists
	 *      - AMP_Rule_Spec::FAIL - $attr_name is mandatory, but doesn't exist
	 *      - AMP_Rule_Spec::NOT_APPLICABLE - $attr_name is not mandatory
	 */
	private function check_attr_spec_rule_mandatory( DOMElement $node, $attr_name, $attr_spec_rule ) {
		if ( isset( $attr_spec_rule[ AMP_Rule_Spec::MANDATORY ] ) && $attr_spec_rule[ AMP_Rule_Spec::MANDATORY ] ) {
			if ( $node->hasAttribute( $attr_name ) ) {
				return AMP_Rule_Spec::PASS;
			}

			// Check if an alternative name list is specified.
			if ( isset( $attr_spec_rule[ AMP_Rule_Spec::ALTERNATIVE_NAMES ] ) ) {
				foreach ( $attr_spec_rule[ AMP_Rule_Spec::ALTERNATIVE_NAMES ] as $alt_name ) {
					if ( $node->hasAttribute( $alt_name ) ) {
						return AMP_Rule_Spec::PASS;
					}
				}
			}
			return AMP_Rule_Spec::FAIL;
		}
		return AMP_Rule_Spec::NOT_APPLICABLE;
	}

	/**
	 * Get the intersection of the element attributes with the supplied attributes.
	 *
	 * @param DOMElement $element         The element.
	 * @param string[]   $attribute_names The attribute names.
	 * @return string[] The attributes that matched.
	 */
	private function get_element_attribute_intersection( DOMElement $element, $attribute_names ) {
		$attributes = [];
		foreach ( $attribute_names as $attribute_name ) {
			if ( $element->hasAttribute( $attribute_name ) ) {
				$attributes[] = $attribute_name;
			}
		}
		return $attributes;
	}

	/**
	 * Check if attribute has a value rule determine if its value is valid.
	 *
	 * Checks for value validity by matches against valid values.
	 *
	 * @param DOMElement $node           Node.
	 * @param string     $attr_name      Attribute name.
	 * @param array      $attr_spec_rule Attribute spec rule.
	 *
	 * @return int
	 *      - AMP_Rule_Spec::PASS - $attr_name has a value that matches the rule.
	 *      - AMP_Rule_Spec::FAIL - $attr_name has a value that does *not* match rule.
	 *      - AMP_Rule_Spec::NOT_APPLICABLE - $attr_name does not exist or there
	 *                                        is no rule for this attribute.
	 */
	private function check_attr_spec_rule_value( DOMElement $node, $attr_name, $attr_spec_rule ) {
		if ( isset( $attr_spec_rule[ AMP_Rule_Spec::VALUE ] ) ) {
			if ( $node->hasAttribute( $attr_name ) ) {
				if ( $this->check_matching_attribute_value( $attr_name, $node->getAttribute( $attr_name ), $attr_spec_rule[ AMP_Rule_Spec::VALUE ] ) ) {
					return AMP_Rule_Spec::PASS;
				}

				return AMP_Rule_Spec::FAIL;
			}

			if ( isset( $attr_spec_rule[ AMP_Rule_Spec::ALTERNATIVE_NAMES ] ) ) {
				foreach ( $attr_spec_rule[ AMP_Rule_Spec::ALTERNATIVE_NAMES ] as $alternative_name ) {
					if ( $node->hasAttribute( $alternative_name ) ) {
						if ( $this->check_matching_attribute_value( $attr_name, $node->getAttribute( $alternative_name ), $attr_spec_rule[ AMP_Rule_Spec::VALUE ] ) ) {
							return AMP_Rule_Spec::PASS;
						}

						return AMP_Rule_Spec::FAIL;
					}
				}
			}
		}
		return AMP_Rule_Spec::NOT_APPLICABLE;
	}

	/**
	 * Check that an attribute's value matches is given spec value.
	 *
	 * This takes into account boolean attributes where value can match name (e.g. selected="selected").
	 *
	 * @since 0.7.0
	 * @since 1.0.0 The spec value is now an array.
	 *
	 * @param string       $attr_name   Attribute name.
	 * @param string       $attr_value  Attribute value.
	 * @param string|array $spec_values Attribute spec value(s).
	 * @return bool Is value valid.
	 */
	private function check_matching_attribute_value( $attr_name, $attr_value, $spec_values ) {
		if ( is_string( $spec_values ) ) {
			$spec_values = (array) $spec_values;
		}
		foreach ( $spec_values as $spec_value ) {
			if ( $spec_value === $attr_value || ( '' === $spec_value && strtolower( $attr_value ) === $attr_name ) ) {
				return true;
			}

			// Check for boolean attribute.
			$is_bool_match = (
				'' === $spec_value
				&&
				in_array( $attr_name, AMP_Rule_Spec::$boolean_attributes, true )
				&&
				strtolower( $attr_value ) === strtolower( $attr_name )
			);
			if ( $is_bool_match ) {
				return true;
			}
		}
		return false;
	}

	/**
	 * Check if attribute has a value rule determine if its value matches ignoring case.
	 *
	 * @param DOMElement   $node           Node.
	 * @param string       $attr_name      Attribute name.
	 * @param array|string $attr_spec_rule Attribute spec rule.
	 *
	 * @return int
	 *      - AMP_Rule_Spec::PASS - $attr_name has a value that matches the rule.
	 *      - AMP_Rule_Spec::FAIL - $attr_name has a value that does *not* match rule.
	 *      - AMP_Rule_Spec::NOT_APPLICABLE - $attr_name does not exist or there
	 *                                        is no rule for this attribute.
	 */
	private function check_attr_spec_rule_value_casei( DOMElement $node, $attr_name, $attr_spec_rule ) {
		if ( ! isset( $attr_spec_rule[ AMP_Rule_Spec::VALUE_CASEI ] ) ) {
			return AMP_Rule_Spec::NOT_APPLICABLE;
		}

		$result      = AMP_Rule_Spec::NOT_APPLICABLE;
		$rule_values = (array) $attr_spec_rule[ AMP_Rule_Spec::VALUE_CASEI ];
		foreach ( $rule_values as $rule_value ) {
			$rule_value = strtolower( $rule_value );
			if ( $node->hasAttribute( $attr_name ) ) {
				$attr_value = strtolower( $node->getAttribute( $attr_name ) );
				if ( $attr_value === $rule_value ) {
					return AMP_Rule_Spec::PASS;
				}

				$result = AMP_Rule_Spec::FAIL;
			} elseif ( isset( $attr_spec_rule[ AMP_Rule_Spec::ALTERNATIVE_NAMES ] ) ) {
				foreach ( $attr_spec_rule[ AMP_Rule_Spec::ALTERNATIVE_NAMES ] as $alternative_name ) {
					if ( $node->hasAttribute( $alternative_name ) ) {
						$attr_value = strtolower( $node->getAttribute( $alternative_name ) );
						if ( $attr_value === $rule_value ) {
							return AMP_Rule_Spec::PASS;
						}

						$result = AMP_Rule_Spec::FAIL;
					}
				}
			}
		}
		return $result;
	}

	/**
	 * Check if attribute has a regex value rule determine if it matches.
	 *
	 * @param DOMElement       $node           Node.
	 * @param string           $attr_name      Attribute name.
	 * @param array[]|string[] $attr_spec_rule Attribute spec rule.
	 *
	 * @return int
	 *      - AMP_Rule_Spec::PASS - $attr_name has a value that matches the rule.
	 *      - AMP_Rule_Spec::FAIL - $attr_name has a value that does *not* match rule.
	 *      - AMP_Rule_Spec::NOT_APPLICABLE - $attr_name does not exist or there
	 *                                        is no rule for this attribute.
	 */
	private function check_attr_spec_rule_value_regex( DOMElement $node, $attr_name, $attr_spec_rule ) {
		// Check 'value_regex' - case sensitive regex match.
		if ( isset( $attr_spec_rule[ AMP_Rule_Spec::VALUE_REGEX ] ) && $node->hasAttribute( $attr_name ) ) {
			$rule_value = $attr_spec_rule[ AMP_Rule_Spec::VALUE_REGEX ];

			/*
			 * The regex pattern has '^' and '$' though they are not in the AMP spec.
			 * Leaving them out would allow both '_blank' and 'yyy_blankzzz' to be
			 * matched by a regex rule of '(_blank|_self|_top)'. As the AMP JS validator
			 * only accepts '_blank' we leave it this way for now.
			 */
			if ( preg_match( '/^(' . $rule_value . ')$/u', $node->getAttribute( $attr_name ) ) ) {
				return AMP_Rule_Spec::PASS;
			}

			return AMP_Rule_Spec::FAIL;
		}
		return AMP_Rule_Spec::NOT_APPLICABLE;
	}

	/**
	 * Check if attribute has a case-insensitive regex value rule determine if it matches.
	 *
	 * @param DOMElement       $node           Node.
	 * @param string           $attr_name      Attribute name.
	 * @param array[]|string[] $attr_spec_rule Attribute spec rule.
	 *
	 * @return int
	 *      - AMP_Rule_Spec::PASS - $attr_name has a value that matches the rule.
	 *      - AMP_Rule_Spec::FAIL - $attr_name has a value that does *not* match rule.
	 *      - AMP_Rule_Spec::NOT_APPLICABLE - $attr_name does not exist or there
	 *                                        is no rule for this attribute.
	 */
	private function check_attr_spec_rule_value_regex_casei( DOMElement $node, $attr_name, $attr_spec_rule ) {
		// Check 'value_regex_casei' - case insensitive regex match.
		if ( isset( $attr_spec_rule[ AMP_Rule_Spec::VALUE_REGEX_CASEI ] ) && $node->hasAttribute( $attr_name ) ) {
			$rule_value = $attr_spec_rule[ AMP_Rule_Spec::VALUE_REGEX_CASEI ];

			// See note above regarding the '^' and '$' that are added here.
			if ( preg_match( '/^(' . $rule_value . ')$/ui', $node->getAttribute( $attr_name ) ) ) {
				return AMP_Rule_Spec::PASS;
			}

			return AMP_Rule_Spec::FAIL;
		}
		return AMP_Rule_Spec::NOT_APPLICABLE;
	}

	/**
	 * Check if attribute has a valid host value
	 *
	 * @since 0.7
	 *
	 * @param DOMElement       $node           Node.
	 * @param string           $attr_name      Attribute name.
	 * @param array[]|string[] $attr_spec_rule Attribute spec rule.
	 *
	 * @return int
	 *      - AMP_Rule_Spec::PASS - $attr_name has a value that matches the rule.
	 *      - AMP_Rule_Spec::FAIL - $attr_name has a value that does *not* match rule.
	 *      - AMP_Rule_Spec::NOT_APPLICABLE - $attr_name does not exist or there
	 *                                        is no rule for this attribute.
	 */
	private function check_attr_spec_rule_valid_url( DOMElement $node, $attr_name, $attr_spec_rule ) {
		if ( isset( $attr_spec_rule[ AMP_Rule_Spec::VALUE_URL ] ) && $node->hasAttribute( $attr_name ) ) {
			foreach ( $this->extract_attribute_urls( $node->getAttributeNode( $attr_name ) ) as $url ) {
				$url = $this->normalize_url_from_attribute_value( $url );

				// Check whether the URL is parsable.
				$parts = wp_parse_url( $url );
				if ( false === $parts ) {
					return AMP_Rule_Spec::FAIL;
				}

				// Check if the protocol contains invalid chars (protocolCharIsValid: https://github.com/ampproject/amphtml/blob/af1e3a550feeafd732226202b8d1f26dcefefa18/validator/engine/parse-url.js#L31-L39).
				$protocol = $this->parse_protocol( $url );
				if ( isset( $protocol ) ) {
					if ( ! preg_match( '/^[a-zA-Z0-9\+-]+/i', $protocol ) ) {
						return AMP_Rule_Spec::FAIL;
					}
					$url = substr( $url, strlen( $protocol ) + 1 );
				}

				// Check if the host contains invalid chars (hostCharIsValid: https://github.com/ampproject/amphtml/blob/af1e3a550feeafd732226202b8d1f26dcefefa18/validator/engine/parse-url.js#L62-L103).
				$host = wp_parse_url( urldecode( $url ), PHP_URL_HOST );
				if ( $host && preg_match( '/[!"#$%&\'()*+,\/:;<=>?@[\]^`{|}~\s]/', $host ) ) {
					return AMP_Rule_Spec::FAIL;
				}
			}

			return AMP_Rule_Spec::PASS;
		}

		return AMP_Rule_Spec::NOT_APPLICABLE;
	}

	/**
	 * Parse protocol from URL.
	 *
	 * This may not be a valid protocol (scheme), but it will be where the protocol should be in the URL.
	 *
	 * @link https://github.com/ampproject/amphtml/blob/af1e3a550feeafd732226202b8d1f26dcefefa18/validator/engine/parse-url.js#L235-L282
	 * @param string $url URL.
	 * @return string|null Protocol without colon if matched. Otherwise null.
	 */
	private function parse_protocol( $url ) {
		if ( preg_match( '#^[^/]+?(?=:)#', $url, $matches ) ) {
			return $matches[0];
		}
		return null;
	}

	/**
	 * Normalize a URL that appeared as a tag attribute.
	 *
	 * @param string $url The URL to normalize.
	 * @return string The normalized URL.
	 */
	private function normalize_url_from_attribute_value( $url ) {
		return preg_replace( '/[\t\r\n]/', '', trim( $url ) );
	}

	/**
	 * Check if attribute has a protocol value rule determine if it matches.
	 *
	 * @param DOMElement       $node           Node.
	 * @param string           $attr_name      Attribute name.
	 * @param array[]|string[] $attr_spec_rule Attribute spec rule.
	 *
	 * @return int
	 *      - AMP_Rule_Spec::PASS - $attr_name has a value that matches the rule.
	 *      - AMP_Rule_Spec::FAIL - $attr_name has a value that does *not* match rule.
	 *      - AMP_Rule_Spec::NOT_APPLICABLE - $attr_name does not exist or there
	 *                                        is no rule for this attribute.
	 */
	private function check_attr_spec_rule_allowed_protocol( DOMElement $node, $attr_name, $attr_spec_rule ) {
		if ( isset( $attr_spec_rule[ AMP_Rule_Spec::VALUE_URL ][ AMP_Rule_Spec::ALLOWED_PROTOCOL ] ) ) {
			if ( $node->hasAttribute( $attr_name ) ) {
				foreach ( $this->extract_attribute_urls( $node->getAttributeNode( $attr_name ) ) as $url ) {
					$url_scheme = $this->parse_protocol( $this->normalize_url_from_attribute_value( $url ) );
					if ( $this->args['allow_localhost_http_protocol'] && self::LOCALHOST === wp_parse_url( $url, PHP_URL_HOST ) ) {
						return AMP_Rule_Spec::PASS;
					} elseif ( isset( $url_scheme ) && ! in_array( strtolower( $url_scheme ), $attr_spec_rule[ AMP_Rule_Spec::VALUE_URL ][ AMP_Rule_Spec::ALLOWED_PROTOCOL ], true ) ) {
						return AMP_Rule_Spec::FAIL;
					}
				}
				return AMP_Rule_Spec::PASS;
			}

			if ( isset( $attr_spec_rule[ AMP_Rule_Spec::ALTERNATIVE_NAMES ] ) ) {
				foreach ( $attr_spec_rule[ AMP_Rule_Spec::ALTERNATIVE_NAMES ] as $alternative_name ) {
					if ( $node->hasAttribute( $alternative_name ) ) {
						foreach ( $this->extract_attribute_urls( $node->getAttributeNode( $alternative_name ), $attr_name ) as $url ) {
							$url_scheme = $this->parse_protocol( $this->normalize_url_from_attribute_value( $url ) );
							if ( $this->args['allow_localhost_http_protocol'] && self::LOCALHOST === wp_parse_url( $url, PHP_URL_HOST ) ) {
								return AMP_Rule_Spec::PASS;
							} elseif ( isset( $url_scheme ) && ! in_array( strtolower( $url_scheme ), $attr_spec_rule[ AMP_Rule_Spec::VALUE_URL ][ AMP_Rule_Spec::ALLOWED_PROTOCOL ], true ) ) {
								return AMP_Rule_Spec::FAIL;
							}
						}
						return AMP_Rule_Spec::PASS;
					}
				}
			}
		}
		return AMP_Rule_Spec::NOT_APPLICABLE;
	}

	/**
	 * Extract URLs from attribute.
	 *
	 * @param DOMAttr     $attribute_node Attribute node.
	 * @param string|null $spec_attr_name Non-alternative attribute name for the spec.
	 * @return string[] List of URLs.
	 */
	private function extract_attribute_urls( DOMAttr $attribute_node, $spec_attr_name = null ) {
		/*
		 * Handle the srcset special case where the attribute value can contain multiple parts, each in the format `URL [WIDTH OR PIXEL_DENSITY]`.
		 * So we split the srcset attribute value by commas and then return the first token of each item, omitting width or pixel density descriptor.
		 * This splitting cannot be done for other URLs because it a comma can appear in a URL itself generally, but the syntax can break in srcset,
		 * unless the commas are URL-encoded.
		 */
		if ( 'srcset' === $attribute_node->nodeName || 'srcset' === $spec_attr_name ) {
			return array_filter(
				array_map(
					static function ( $srcset_part ) {
						// Remove descriptors for width and pixel density.
						return preg_replace( '/\s.*$/', '', trim( $srcset_part ) );
					},
					preg_split( '/\s*,\s*/', $attribute_node->nodeValue )
				)
			);
		}

		return [ $attribute_node->nodeValue ];
	}

	/**
	 * Check if attribute has disallowed relative URL value according to rule spec.
	 *
	 * @param DOMElement       $node           Node.
	 * @param string           $attr_name      Attribute name.
	 * @param array[]|string[] $attr_spec_rule Attribute spec rule.
	 *
	 * @return int
	 *      - AMP_Rule_Spec::PASS - $attr_name has a value that matches the rule.
	 *      - AMP_Rule_Spec::FAIL - $attr_name has a value that does *not* match rule.
	 *      - AMP_Rule_Spec::NOT_APPLICABLE - $attr_name does not exist or there
	 *                                        is no rule for this attribute.
	 */
	private function check_attr_spec_rule_disallowed_relative( DOMElement $node, $attr_name, $attr_spec_rule ) {
		if ( isset( $attr_spec_rule[ AMP_Rule_Spec::VALUE_URL ][ AMP_Rule_Spec::ALLOW_RELATIVE ] ) && ! $attr_spec_rule[ AMP_Rule_Spec::VALUE_URL ][ AMP_Rule_Spec::ALLOW_RELATIVE ] ) {
			if ( $node->hasAttribute( $attr_name ) ) {
				foreach ( $this->extract_attribute_urls( $node->getAttributeNode( $attr_name ) ) as $url ) {
					if ( '__amp_source_origin' === $url ) {
						return AMP_Rule_Spec::PASS;
					}

					$parsed_url = wp_parse_url( $url );

					/*
					 *  The JS AMP validator seems to consider 'relative' to mean
					 *  *protocol* relative, not *host* relative for this rule. So,
					 *  a url with an empty 'scheme' is considered "relative" by AMP.
					 *  ie. '//domain.com/path' and '/path' should both be considered
					 *  relative for purposes of AMP validation.
					 */
					if ( empty( $parsed_url['scheme'] ) ) {
						return AMP_Rule_Spec::FAIL;
					}
				}
				return AMP_Rule_Spec::PASS;
			}

			if ( isset( $attr_spec_rule[ AMP_Rule_Spec::ALTERNATIVE_NAMES ] ) ) {
				foreach ( $attr_spec_rule[ AMP_Rule_Spec::ALTERNATIVE_NAMES ] as $alternative_name ) {
					if ( $node->hasAttribute( $alternative_name ) ) {
						foreach ( $this->extract_attribute_urls( $node->getAttributeNode( $alternative_name ), $attr_name ) as $url ) {
							if ( '__amp_source_origin' === $url ) {
								return AMP_Rule_Spec::PASS;
							}

							$parsed_url = wp_parse_url( $url );
							if ( empty( $parsed_url['scheme'] ) ) {
								return AMP_Rule_Spec::FAIL;
							}
						}
					}
				}
				return AMP_Rule_Spec::PASS;
			}
		}
		return AMP_Rule_Spec::NOT_APPLICABLE;
	}

	/**
	 * Check if attribute has disallowed empty value rule determine if value is empty.
	 *
	 * @param DOMElement       $node           Node.
	 * @param string           $attr_name      Attribute name.
	 * @param array[]|string[] $attr_spec_rule Attribute spec rule.
	 *
	 * @return int
	 *      - AMP_Rule_Spec::PASS - $attr_name has a value that matches the rule.
	 *      - AMP_Rule_Spec::FAIL - $attr_name has a value that does *not* match rule.
	 *      - AMP_Rule_Spec::NOT_APPLICABLE - $attr_name does not exist or there
	 *                                        is no rule for this attribute.
	 */
	private function check_attr_spec_rule_disallowed_empty( DOMElement $node, $attr_name, $attr_spec_rule ) {
		if ( isset( $attr_spec_rule[ AMP_Rule_Spec::VALUE_URL ][ AMP_Rule_Spec::ALLOW_EMPTY ] ) ) {
			$allow_empty = $attr_spec_rule[ AMP_Rule_Spec::VALUE_URL ][ AMP_Rule_Spec::ALLOW_EMPTY ];
		} else {
			$allow_empty = empty( $attr_spec_rule[ AMP_Rule_Spec::MANDATORY ] );
		}
		if ( ! $allow_empty && $node->hasAttribute( $attr_name ) ) {
			$attr_value = $node->getAttribute( $attr_name );
			if ( empty( $attr_value ) ) {
				return AMP_Rule_Spec::FAIL;
			}
			return AMP_Rule_Spec::PASS;
		}
		return AMP_Rule_Spec::NOT_APPLICABLE;
	}

	/**
	 * Check if attribute has disallowed value via regex match and determine if value matches.
	 *
	 * @since 0.5
	 *
	 * @param DOMElement       $node           Node.
	 * @param string           $attr_name      Attribute name.
	 * @param array[]|string[] $attr_spec_rule Attribute spec rule.
	 *
	 * @return int
	 *      - AMP_Rule_Spec::PASS - $attr_name has a value that matches the rule.
	 *      - AMP_Rule_Spec::FAIL - $attr_name has a value that does *not* match rule.
	 *      - AMP_Rule_Spec::NOT_APPLICABLE - $attr_name does not exist or there
	 *                                        is no rule for this attribute.
	 */
	private function check_attr_spec_rule_disallowed_value_regex( DOMElement $node, $attr_name, $attr_spec_rule ) {
		if ( isset( $attr_spec_rule[ AMP_Rule_Spec::DISALLOWED_VALUE_REGEX ] ) ) {
			$pattern = '/' . $attr_spec_rule[ AMP_Rule_Spec::DISALLOWED_VALUE_REGEX ] . '/u';
			if ( $node->hasAttribute( $attr_name ) ) {
				$attr_value = $node->getAttribute( $attr_name );
				if ( preg_match( $pattern, $attr_value ) ) {
					return AMP_Rule_Spec::FAIL;
				}

				return AMP_Rule_Spec::PASS;
			}
			if ( isset( $attr_spec_rule[ AMP_Rule_Spec::ALTERNATIVE_NAMES ] ) ) {
				foreach ( $attr_spec_rule[ AMP_Rule_Spec::ALTERNATIVE_NAMES ] as $alternative_name ) {
					if ( $node->hasAttribute( $alternative_name ) ) {
						$attr_value = $node->getAttribute( $alternative_name );
						if ( preg_match( $pattern, $attr_value ) ) {
							return AMP_Rule_Spec::FAIL;
						}

						return AMP_Rule_Spec::PASS;
					}
				}
			}
		}
		return AMP_Rule_Spec::NOT_APPLICABLE;
	}

	/**
	 * Parse properties attribute (e.g. meta viewport).
	 *
	 * @param string $value Attribute value.
	 * @return array Properties.
	 */
	private function parse_properties_attribute( $value ) {
		$properties = [];
		foreach ( explode( ',', $value ) as $pair ) {
			$pair_parts = explode( '=', $pair, 2 );
			if ( 2 !== count( $pair_parts ) ) {
				// This would occur when there are trailing commas, for example.
				continue;
			}
			$properties[ strtolower( trim( $pair_parts[0] ) ) ] = $pair_parts[1];
		}
		return $properties;
	}

	/**
	 * Serialize properties attribute (e.g. meta viewport).
	 *
	 * @param array $properties Properties.
	 * @return string Serialized properties.
	 */
	private function serialize_properties_attribute( $properties ) {
		return implode(
			',',
			array_map(
				static function ( $property_name ) use ( $properties ) {
					return $property_name . '=' . $properties[ $property_name ];
				},
				array_keys( $properties )
			)
		);
	}

	/**
	 * Check if attribute has valid properties.
	 *
	 * @since 0.7
	 *
	 * @param DOMElement       $node           Node.
	 * @param string           $attr_name      Attribute name.
	 * @param array[]|string[] $attr_spec_rule Attribute spec rule.
	 *
	 * @return array {
	 *     Results.
	 *
	 *     @type int     $result_code The result code. It can either be.
	 *                                 - AMP_Rule_Spec::PASS           - $attr_name has a value that matches the rule.
	 *                                 - AMP_Rule_Spec::FAIL           - $attr_name has a value that does *not* match rule.
	 *                                 - AMP_Rule_Spec::NOT_APPLICABLE - $attr_name does not exist or there is no rule for this attribute.
	 *     @type array[] $errors      Property errors.
	 * }
	 */
	private function check_attr_spec_rule_value_properties( DOMElement $node, $attr_name, $attr_spec_rule ) {
		if ( isset( $attr_spec_rule[ AMP_Rule_Spec::VALUE_PROPERTIES ] ) && $node->hasAttribute( $attr_name ) ) {
			$property_errors    = [];
			$properties         = $this->parse_properties_attribute( $node->getAttribute( $attr_name ) );
			$invalid_properties = array_diff( array_keys( $properties ), array_keys( $attr_spec_rule[ AMP_Rule_Spec::VALUE_PROPERTIES ] ) );

			// Fail if there are unrecognized properties.
			foreach ( $invalid_properties as $invalid_property ) {
				$property_errors[] = [
					self::DISALLOWED_PROPERTY_IN_ATTR_VALUE,
					[
						'name'  => $invalid_property,
						'value' => $properties[ $invalid_property ],
					],
				];
			}

			foreach ( $attr_spec_rule[ AMP_Rule_Spec::VALUE_PROPERTIES ] as $prop_name => $property_spec ) {
				// Mandatory property is missing.
				if ( ! empty( $property_spec['mandatory'] ) && ! isset( $properties[ $prop_name ] ) ) {
					$required_value = null;
					if ( isset( $property_spec['value'] ) ) {
						$required_value = $property_spec['value'];
					} elseif ( isset( $property_spec['value_double'] ) ) {
						$required_value = $property_spec['value_double'];
					}
					$property_errors[] = [
						self::MISSING_MANDATORY_PROPERTY,
						[
							'name'           => $prop_name,
							'required_value' => $required_value,
						],
					];
					continue;
				}

				if ( ! isset( $properties[ $prop_name ] ) ) {
					continue;
				}

				$prop_value = $properties[ $prop_name ];

				// Required value is absent, so fail.
				$required_value = null;
				if ( isset( $property_spec['value'] ) ) {
					$required_value = $property_spec['value'];
				} elseif ( isset( $property_spec['value_double'] ) ) {
					$required_value = $property_spec['value_double'];
				}
				if ( isset( $required_value ) && $prop_value !== $required_value ) {
					$property_errors[] = [
						self::MISSING_REQUIRED_PROPERTY_VALUE,
						[
							'name'           => $prop_name,
							'value'          => $prop_value,
							'required_value' => $required_value,
						],
					];
				}
			}

			if ( empty( $property_errors ) ) {
				return [ AMP_Rule_Spec::PASS, [] ];
			} else {
				return [
					AMP_Rule_Spec::FAIL,
					$property_errors,
				];
			}
		}
		return [ AMP_Rule_Spec::NOT_APPLICABLE, [] ];
	}

	/**
	 * Determine if the supplied attribute name is allowed for AMP.
	 *
	 * @since 0.5
	 *
	 * @param DOMAttr          $attr_node      Attribute node.
	 * @param array[]|string[] $attr_spec_list Attribute spec list.
	 * @return bool Return true if attribute name is valid for this attr_spec_list, false otherwise.
	 */
	private function is_amp_allowed_attribute( DOMAttr $attr_node, $attr_spec_list ) {
		$attr_name = $attr_node->nodeName;
		if (
			isset( $attr_spec_list[ $attr_name ] )
			||
			( 'data-' === substr( $attr_name, 0, 5 ) && Amp::BIND_DATA_ATTR_PREFIX !== substr( $attr_name, 0, 14 ) )
			||
			// Allow the 'amp' or '⚡' attribute in <html>, like <html ⚡>.
			( 'html' === $attr_node->parentNode->nodeName && in_array( $attr_node->nodeName, [ 'amp', '⚡' ], true ) )
		) {
			return true;
		}

		$is_allowed_alt_name_attr = isset( $this->rev_alternate_attr_name_lookup[ $attr_name ], $attr_spec_list[ $this->rev_alternate_attr_name_lookup[ $attr_name ] ] );
		if ( $is_allowed_alt_name_attr ) {
			return true;
		}

		/*
		 * Handle special case for reference points which do not have to be direct children.
		 * This is noted as a special case in the AMP validator spec for amp-selector, so that is why it is
		 * a special case here in this method. It is also implemented in this way for the sake of efficiency
		 * to prevent having to waste time in process_node() merging attribute lists. For more on amp-selector's
		 * unique reference point, see:
		 * https://github.com/ampproject/amphtml/blob/1526498116488/extensions/amp-selector/validator-amp-selector.protoascii#L81-L91
		 */
		$descendant_reference_points = [
			'amp-selector'         => 'AMP-SELECTOR option',
			'amp-story-grid-layer' => 'AMP-STORY-GRID-LAYER default', // @todo Consider the more restrictive 'AMP-STORY-GRID-LAYER animate-in'.
		];
		foreach ( $descendant_reference_points as $ancestor_name => $reference_point_spec_name ) {
			if ( empty( $this->open_elements[ $ancestor_name ] ) ) {
				continue;
			}
			$reference_point_spec = AMP_Allowed_Tags_Generated::get_reference_point_spec( $reference_point_spec_name );
			if ( isset( $reference_point_spec[ AMP_Rule_Spec::ATTR_SPEC_LIST ][ $attr_name ] ) ) {
				return true;
			}
		}

		return false;
	}

	/**
	 * Determine if the supplied $node's HTML tag is allowed for AMP.
	 *
	 * @since 0.5
	 *
	 * @param DOMElement $node Node.
	 * @return bool Return true if the specified node's name is an AMP allowed tag, false otherwise.
	 */
	private function is_amp_allowed_tag( DOMElement $node ) {
		return isset( $this->allowed_tags[ $node->nodeName ] );
	}

	/**
	 * Determine if the supplied $node has a parent with the specified spec name.
	 *
	 * @since 0.5
	 *
	 * @todo It would be more robust if the the actual tag spec were looked up (see https://github.com/ampproject/amp-wp/pull/3817) and then matched against the parent. This is needed to support the spec 'subscriptions script ciphertext'.
	 *
	 * @param DOMElement $node             Node.
	 * @param string     $parent_spec_name Parent spec name, for example 'body' or 'form [method=post]'.
	 * @return bool Return true if given node has direct parent with the given name, false otherwise.
	 */
	private function has_parent( DOMElement $node, $parent_spec_name ) {
		$parsed_spec_name = $this->parse_tag_and_attributes_from_spec_name( $parent_spec_name );

		if ( ! $node->parentNode || $node->parentNode->nodeName !== $parsed_spec_name['tag_name'] ) {
			return false;
		}

		// Ensure attributes match; if not move up to the next node.
		foreach ( $parsed_spec_name['attributes'] as $attr_name => $attr_value ) {
			if ( strtolower( $node->getAttribute( $attr_name ) ) !== $attr_value ) {
				return false;
			}
		}

		return true;
	}

	/**
	 * Determine if the supplied $node has an ancestor with the specified tag name.
	 *
	 * @since 0.5
	 *
	 * @param DOMElement $node              Node.
	 * @param string     $ancestor_tag_spec_name Ancestor tag spec name. This looks somewhat like a CSS selector, e.g. 'form div [submitting][template]'.
	 * @return bool Return true if given node has any ancestor with the give name, false otherwise.
	 */
	private function has_ancestor( DOMElement $node, $ancestor_tag_spec_name ) {
		if ( $this->get_ancestor_with_matching_spec_name( $node, $ancestor_tag_spec_name ) ) {
			return true;
		}
		return false;
	}

	/**
	 * Parse tag name and attributes from spec name.
	 *
	 * Given a spec name like 'form [method=post]', extract the tag name 'form' and the attributes.
	 *
	 * @todo This is admittedly rudimentary. It would be more robust to actually look up the tag spec by the name and obtain the required attributes from there, but this is not necessary yet.
	 *
	 * @param string $spec_name Spec name.
	 * @return array Tag name and attributes.
	 */
	private function parse_tag_and_attributes_from_spec_name( $spec_name ) {
		static $parsed_specs = [];
		if ( isset( $parsed_specs[ $spec_name ] ) ) {
			return $parsed_specs[ $spec_name ];
		}

		$attributes = [];

		/*
		 * This matches spec names like:
		 * - body
		 * - form [method=post]
		 * - form > div [submit-error][template]
		 */
		if ( preg_match( '/^(?P<ancestors>.+? )?(?P<tag_name>[a-z0-9_-]+?)( (?P<raw_attrs>\[.+?\]))?$/i', $spec_name, $matches ) ) {
			$tag_name = $matches['tag_name'];

			if ( isset( $matches['raw_attrs'] ) ) {
				$raw_attr_pairs = explode( '][', trim( $matches['raw_attrs'], '[]' ) );
				foreach ( $raw_attr_pairs as $raw_attr_pair ) {
					$raw_attr_pair = explode( '=', $raw_attr_pair );

					$attr_key = $raw_attr_pair[0];
					$attr_val = isset( $raw_attr_pair[1] ) ? $raw_attr_pair[1] : true;

					$attributes[ $attr_key ] = $attr_val;
				}
			}
		} else {
			$tag_name = strtok( $spec_name, ' ' ); // Fallback case.
		}

		$parsed_specs[ $spec_name ] = compact( 'tag_name', 'attributes' );
		return $parsed_specs[ $spec_name ];
	}

	/**
	 * Loop through node's descendants and remove the ones that are not in the allowlist.
	 *
	 * @param DOMElement $node                Node.
	 * @param string[]   $allowed_descendants List of allowed descendant tags.
	 * @param string     $spec_name           Spec name.
	 */
	private function remove_disallowed_descendants( DOMElement $node, $allowed_descendants, $spec_name ) {
		if ( ! $node->hasChildNodes() ) {
			return;
		}

		$child_elements = [];
		for ( $i = 0; $i < $node->childNodes->length; $i++ ) {
			$child = $node->childNodes->item( $i );
			if ( $child instanceof DOMElement ) {
				$child_elements[] = $child;
			}
		}

		foreach ( $child_elements as $child_element ) {
			if ( ! in_array( $child_element->nodeName, $allowed_descendants, true ) ) {
				$this->remove_invalid_child(
					$child_element,
					[
						'code'                => self::DISALLOWED_DESCENDANT_TAG,
						'allowed_descendants' => $allowed_descendants,
						'disallowed_ancestor' => $node->parentNode->nodeName,
						'spec_name'           => $spec_name,
					]
				);
			} else {
				$this->remove_disallowed_descendants( $child_element, $allowed_descendants, $spec_name );
			}
		}
	}

	/**
	 * Loop through node's siblings and remove them.
	 *
	 * @param DOMElement $node      Node.
	 * @param string     $spec_name Spec name.
	 */
	private function remove_disallowed_siblings( DOMElement $node, $spec_name ) {
		$prev_sibling = $node->previousSibling;
		while ( null !== $prev_sibling ) {
			$prev_prev_sibling = $prev_sibling->previousSibling;
			if ( $prev_sibling instanceof Element ) {
				$this->remove_invalid_child(
					$prev_sibling,
					[
						'code'      => self::DISALLOWED_SIBLING_TAG,
						'sibling'   => $node->nodeName,
						'spec_name' => $spec_name,
					]
				);
			}
			$prev_sibling = $prev_prev_sibling;
		}

		$next_sibling = $node->nextSibling;
		while ( null !== $next_sibling ) {
			$next_next_sibling = $next_sibling->nextSibling;
			if ( $next_sibling instanceof Element ) {
				$this->remove_invalid_child(
					$next_sibling,
					[
						'code'      => self::DISALLOWED_SIBLING_TAG,
						'sibling'   => $node->nodeName,
						'spec_name' => $spec_name,
					]
				);
			}
			$next_sibling = $next_next_sibling;
		}
	}

	/**
	 * Check whether the node validates the constraints for children.
	 *
	 * @param DOMElement $node Node.
	 * @param array      $child_tags {
	 *     List of allowed child tag.
	 *
	 *     @type array $first_child_tag_name_oneof   List of tag names that are allowed as the first element child.
	 *     @type array $child_tag_name_oneof         List of tag names that are allowed as children.
	 *     @type int   $mandatory_num_child_tags     Mandatory number of child tags.
	 *     @type int   $mandatory_min_num_child_tags Mandatory minimum number of child tags.
	 * }
	 * @return true|array True if the element satisfies the requirements, or error data array if it should be removed.
	 */
	private function check_valid_children( DOMElement $node, $child_tags ) {
		$child_elements = [];
		for ( $i = 0; $i < $node->childNodes->length; $i++ ) {
			$child = $node->childNodes->item( $i );
			if ( $child instanceof DOMElement ) {
				$child_elements[] = $child;
			}
		}

		// If the first element is not of the required type, invalidate the entire element.
		if ( isset( $child_tags['first_child_tag_name_oneof'] ) && ! empty( $child_elements[0] ) && ! in_array( $child_elements[0]->nodeName, $child_tags['first_child_tag_name_oneof'], true ) ) {
			return [
				'code'            => self::DISALLOWED_FIRST_CHILD_TAG,
				'first_child_tag' => $child_elements[0]->nodeName,
			];
		}

		// Verify that all of the child are among the set of allowed elements.
		if ( isset( $child_tags['child_tag_name_oneof'] ) ) {
			foreach ( $child_elements as $child_element ) {
				if ( ! in_array( $child_element->nodeName, $child_tags['child_tag_name_oneof'], true ) ) {
					return [
						'code'      => self::DISALLOWED_CHILD_TAG,
						'child_tag' => $child_element->nodeName,
					];
				}
			}
		}

		// If there aren't the exact number of elements, then mark this $node as being invalid.
		if ( isset( $child_tags['mandatory_num_child_tags'] ) ) {
			$child_element_count = count( $child_elements );
			if ( $child_element_count === $child_tags['mandatory_num_child_tags'] ) {
				return true;
			} else {
				return [
					'code'                 => self::INCORRECT_NUM_CHILD_TAGS,
					'children_count'       => $child_element_count,
					'required_child_count' => $child_tags['mandatory_num_child_tags'],
				];
			}
		}

		// If there aren't enough elements, then mark this $node as being invalid.
		if ( isset( $child_tags['mandatory_min_num_child_tags'] ) ) {
			$child_element_count = count( $child_elements );
			if ( $child_element_count >= $child_tags['mandatory_min_num_child_tags'] ) {
				return true;
			} else {
				return [
					'code'                     => self::INCORRECT_MIN_NUM_CHILD_TAGS,
					'children_count'           => $child_element_count,
					'required_min_child_count' => $child_tags['mandatory_min_num_child_tags'],
				];
			}
		}

		return true;
	}

	/**
	 * Get the first ancestor node matching the specified tag name for the supplied $node.
	 *
	 * @since 0.5
	 * @todo It would be more robust if the the actual tag spec were looked up and then matched for each ancestor, but this is currently overkill.
	 *
	 * @param DOMElement $node               Node.
	 * @param string     $ancestor_spec_name Ancestor spec name, e.g. 'body' or 'form [method=post]'.
	 * @return DOMNode|null Returns an ancestor node for the name specified, or null if not found.
	 */
	private function get_ancestor_with_matching_spec_name( DOMElement $node, $ancestor_spec_name ) {
		$parsed_spec_name = $this->parse_tag_and_attributes_from_spec_name( $ancestor_spec_name );

		// Do quick check to see if the the ancestor element is even open.
		// Note first isset check is for the sake of \AMP_Tag_And_Attribute_Sanitizer_Attr_Spec_Rules_Test::test_get_ancestor_with_matching_spec_name().
		if ( isset( $this->open_elements['html'] ) && empty( $this->open_elements[ $parsed_spec_name['tag_name'] ] ) ) {
			return null;
		}

		while ( $node->parentNode instanceof DOMElement ) {
			$node = $node->parentNode;
			if ( $node->nodeName === $parsed_spec_name['tag_name'] ) {

				// Ensure attributes match; if not move up to the next node.
				foreach ( $parsed_spec_name['attributes'] as $attr_name => $attr_value ) {
					$match = (
						true === $attr_value ? $node->hasAttribute( $attr_name ) : strtolower( $node->getAttribute( $attr_name ) ) === $attr_value
					);
					if ( ! $match ) {
						continue 2;
					}
				}

				return $node;
			}
		}
		return null;
	}

	/**
	 * Replaces the given node with it's child nodes, if any
	 *
	 * Also adds them to the stack for processing by the sanitize() function.
	 *
	 * @since 0.3.3
	 * @since 1.0 Fix silently removing unrecognized elements.
	 * @see https://github.com/ampproject/amp-wp/issues/1100
	 * @see AMP_Base_Sanitizer::remove_invalid_child()
	 *
	 * @param DOMElement $node Node.
	 * @return bool Whether replacement was done.
	 */
	private function replace_node_with_children( DOMElement $node ) {
		if ( DevMode::isExemptFromValidation( $node ) ) {
			return false;
		}

		if ( ValidationExemption::is_px_verified_for_node( $node ) || ValidationExemption::is_amp_unvalidated_for_node( $node ) ) {
			return false;
		}

		// Replace node with fragment.
		$should_replace = $this->should_sanitize_validation_error( [], compact( 'node' ) );
		if ( ! $should_replace ) {
			ValidationExemption::mark_node_as_amp_unvalidated( $node );
			return false;
		}

		// If node has no children or no parent, just remove the node.
		if ( ! $node->hasChildNodes() ) {
			$parent = $node->parentNode;
			if ( $parent instanceof Element ) {
				$parent->removeChild( $node );
				$this->remove_ancestors_until_not_empty( $parent );
			}
			return true;
		}

		/*
		 * If node has children, replace it with them and push children onto stack
		 *
		 * Create a DOM fragment to hold the children
		 */
		$fragment = $this->dom->createDocumentFragment();

		// Add all children to fragment/stack.
		$child = $node->firstChild;
		while ( $child ) {
			$fragment->appendChild( $child );
			$child = $node->firstChild;
		}

		$node->parentNode->replaceChild( $fragment, $node );
		return true;

	}

	/**
	 * Removes a node from its parent node.
	 *
	 * If removing the node makes the parent node empty, then it will remove the parent
	 * too. It will Continue until a non-empty parent or the 'body' element is reached.
	 *
	 * @since 0.5
	 *
	 * @param DOMElement $node Node.
	 * @return bool Whether removal was done.
	 */
	private function remove_node( DOMElement $node ) {
		/**
		 * Parent.
		 *
		 * @var DOMElement|null $parent
		 */
		$parent = $node->parentNode;
		if ( $parent ) {
			if ( ! $this->remove_invalid_child( $node ) ) {
				return false;
			}
		}

		if ( $parent instanceof Element ) {
			$this->remove_ancestors_until_not_empty( $parent );
		}

		return true;
	}

	/**
	 * Remove ancestor elements until one has attributes or has child nodes.
	 *
	 * @todo Does this parent removal even make sense anymore? Perhaps limit to <p> only.
	 * @param Element $parent Parent.
	 */
	private function remove_ancestors_until_not_empty( Element $parent ) {
		while ( $parent && ! $parent->hasChildNodes() && ! $parent->hasAttributes() && $this->root_element !== $parent ) {
			$node   = $parent;
			$parent = $parent->parentNode;
			if ( $parent ) {
				$parent->removeChild( $node );
			}
		}
	}

	/**
	 * Check whether a given tag spec supports a layout.
	 *
	 * @param array  $tag_spec Tag spec to check.
	 * @param string $layout   Layout to check support for. Based on the constants in the Layout interface.
	 * @param bool   $fallback Value to use for fallback if no explicit support is defined.
	 * @return bool Whether the given tag spec supports the layout.
	 */
	private function supports_layout( $tag_spec, $layout, $fallback = false ) {
		if ( ! isset( $tag_spec['amp_layout']['supported_layouts'] ) ) {
			return $fallback;
		}

		if ( ! array_key_exists( $layout, LAYOUT::TO_SPEC ) ) {
			return false;
		}

		return in_array( Layout::TO_SPEC[ $layout ], $tag_spec['amp_layout']['supported_layouts'], true );
	}
}
PK.3Y�FRݖ/�/<bunyad-amp/includes/sanitizers/class-amp-video-sanitizer.php<?php
/**
 * Class AMP_Video_Sanitizer.
 *
 * @package AMP
 */

use AmpProject\AmpWP\ValidationExemption;
use AmpProject\DevMode;
use AmpProject\Html\Attribute;

/**
 * Class AMP_Video_Sanitizer
 *
 * Converts <video> tags to <amp-video>
 *
 * @since 0.2
 * @internal
 */
class AMP_Video_Sanitizer extends AMP_Base_Sanitizer {
	use AMP_Noscript_Fallback;

	/**
	 * Tag.
	 *
	 * @var string HTML <video> tag to identify and replace with AMP version.
	 *
	 * @since 0.2
	 */
	public static $tag = 'video';

	/**
	 * Default args.
	 *
	 * @var array
	 */
	protected $DEFAULT_ARGS = [
		'add_noscript_fallback' => true,
		'native_video_used'     => false,
	];

	/**
	 * Get mapping of HTML selectors to the AMP component selectors which they may be converted into.
	 *
	 * @return array Mapping.
	 */
	public function get_selector_conversion_mapping() {
		if ( $this->args['native_video_used'] ) {
			return [];
		}
		return [
			'video' => [ 'amp-video', 'amp-youtube' ],
		];
	}

	/**
	 * Sanitize the <video> elements from the HTML contained in this instance's Dom\Document.
	 *
	 * @since 0.2
	 * @since 1.0 Set the filtered child node's src attribute.
	 */
	public function sanitize() {
		$nodes     = $this->dom->getElementsByTagName( self::$tag );
		$num_nodes = $nodes->length;
		if ( 0 === $num_nodes ) {
			return;
		}

		if ( $this->args['add_noscript_fallback'] && ! $this->args['native_video_used'] ) {
			$this->initialize_noscript_allowed_attributes( self::$tag );

			// Omit muted from noscript > video since it causes deprecation warnings in validator.
			unset( $this->noscript_fallback_allowed_attributes['muted'] );
		}

		for ( $i = $num_nodes - 1; $i >= 0; $i-- ) {
			/**
			 * Node.
			 *
			 * @var DOMElement $node
			 */
			$node = $nodes->item( $i );

			// Skip element if already inside of an AMP element as a noscript fallback, or if the element is in dev mode.
			if ( $this->is_inside_amp_noscript( $node ) || DevMode::hasExemptionForNode( $node ) ) {
				continue;
			}

			$amp_data       = $this->get_data_amp_attributes( $node );
			$old_attributes = AMP_DOM_Utils::get_node_attributes_as_assoc_array( $node );
			$old_attributes = $this->filter_data_amp_attributes( $old_attributes, $amp_data );

			$sources        = [];
			$new_attributes = $this->filter_attributes( $old_attributes );
			$layout         = isset( $amp_data['layout'] ) ? $amp_data['layout'] : false;
			if ( isset( $new_attributes['src'] ) ) {
				$new_attributes = $this->filter_video_dimensions( $new_attributes, $new_attributes['src'] );
				if ( $new_attributes['src'] ) {
					$sources[] = $new_attributes['src'];
				}
			}

			// Gather all child nodes and supply empty video dimensions from sources.
			$fallback    = null;
			$child_nodes = [];
			while ( $node->firstChild ) {
				$child_node = $node->removeChild( $node->firstChild );
				if ( $child_node instanceof DOMElement && 'source' === $child_node->nodeName && $child_node->hasAttribute( 'src' ) ) {
					$src = $this->maybe_enforce_https_src( $child_node->getAttribute( 'src' ), true );
					if ( ! $src ) {
						// @todo $this->remove_invalid_child( $child_node ), but this will require refactoring the while loop since it uses firstChild.
						continue; // Skip adding source.
					}
					$sources[] = $src;
					$child_node->setAttribute( 'src', $src );
					$new_attributes = $this->filter_video_dimensions( $new_attributes, $src );
				}

				if ( ! $fallback && $child_node instanceof DOMElement && ! ( 'source' === $child_node->nodeName || 'track' === $child_node->nodeName ) ) {
					$fallback = $child_node;
					$fallback->setAttribute( 'fallback', '' );
				}

				$child_nodes[] = $child_node;
			}

			// At this point, if we're using native <video>, then we just supply the gathered dimensions if we have them
			// and then move along.
			if ( $this->args['native_video_used'] ) {
				foreach ( [ Attribute::WIDTH, Attribute::HEIGHT ] as $attr_name ) {
					if ( ! $node->hasAttribute( $attr_name ) && isset( $new_attributes[ $attr_name ] ) ) {
						$node->setAttribute( $attr_name, $new_attributes[ $attr_name ] );
					}
				}
				ValidationExemption::mark_node_as_px_verified( $node );
				continue;
			}

			/*
			 * Add fallback for video shortcode which is not present by default since wp_mediaelement_fallback()
			 * is not called when wp_audio_shortcode_library is filtered from mediaelement to amp.
			 */
			if ( ! $fallback && ! empty( $sources ) ) {
				$fallback = $this->dom->createElement( 'a' );
				$fallback->setAttribute( 'href', $sources[0] );
				$fallback->setAttribute( 'fallback', '' );
				$fallback->appendChild( $this->dom->createTextNode( $sources[0] ) );
				$child_nodes[] = $fallback;
			}

			if ( empty( $new_attributes['width'] ) && empty( $new_attributes['height'] ) ) {
				$new_attributes[ Attribute::CLASS_ ] = isset( $new_attributes[ Attribute::CLASS_ ] )
					? $new_attributes[ Attribute::CLASS_ ] . ' amp-wp-unknown-size'
					: 'amp-wp-unknown-size';
			}

			$new_attributes = $this->filter_attachment_layout_attributes( $node, $new_attributes, $layout );
			if ( empty( $new_attributes['layout'] ) && ! empty( $new_attributes['width'] ) && ! empty( $new_attributes['height'] ) ) {
				$new_attributes['layout'] = 'intrinsic';
			}
			$new_attributes = $this->set_layout( $new_attributes );

			// Strip out redundant aspect-ratio style which was added in AMP_Core_Block_Handler::ampify_video_block().
			if ( isset( $new_attributes[ Attribute::STYLE ], $new_attributes[ Attribute::WIDTH ], $new_attributes[ Attribute::HEIGHT ] ) ) {
				$styles = $this->parse_style_string( $new_attributes[ Attribute::STYLE ] );
				if (
					isset( $styles[ Attribute::ASPECT_RATIO ] )
					&&
					(
						preg_replace( '/\s/', '', $styles[ Attribute::ASPECT_RATIO ] )
						===
						sprintf( '%d/%d', $new_attributes[ Attribute::WIDTH ], $new_attributes[ Attribute::HEIGHT ] )
					)
				) {
					unset( $styles[ Attribute::ASPECT_RATIO ] );
					if ( empty( $styles ) ) {
						unset( $new_attributes[ Attribute::STYLE ] );
					} else {
						$new_attributes[ Attribute::STYLE ] = $this->reassemble_style_string( $styles );
					}
				}
			}

			// Remove the ID from the original node so that PHP DOM doesn't fail to set it on the replacement element.
			$node->removeAttribute( Attribute::ID );

			/**
			 * Original node.
			 *
			 * @var DOMElement $old_node
			 */
			$old_node = $node->cloneNode( false );

			// @todo Make sure poster and artwork attributes are HTTPS.
			$new_node = AMP_DOM_Utils::create_node( $this->dom, 'amp-video', $new_attributes );
			foreach ( $child_nodes as $child_node ) {
				$new_node->appendChild( $child_node );
				if ( ! ( $child_node instanceof DOMElement ) || ! $child_node->hasAttribute( 'fallback' ) ) {
					$old_node->appendChild( $child_node->cloneNode( true ) );
				}
			}

			// Make sure the updated src and poster are applied to the original.
			foreach ( [ 'src', 'poster', 'artwork' ] as $attr_name ) {
				if ( $new_node->hasAttribute( $attr_name ) ) {
					$old_node->setAttribute( $attr_name, $new_node->getAttribute( $attr_name ) );
				}
			}

			/*
			 * If the node has at least one valid source, replace the old node with it.
			 * Otherwise, just remove the node.
			 *
			 * @todo Add a fallback handler.
			 * See: https://github.com/ampproject/amphtml/issues/2261
			 */
			if ( empty( $sources ) ) {
				$this->remove_invalid_child(
					$node,
					[
						'code'       => AMP_Tag_And_Attribute_Sanitizer::ATTR_REQUIRED_BUT_MISSING,
						'attributes' => [ 'src' ],
						'spec_name'  => 'amp-video',
					]
				);
			} else {
				$node->parentNode->replaceChild( $new_node, $node );

				if ( $this->args['add_noscript_fallback'] ) {
					// Preserve original node in noscript for no-JS environments.
					$this->append_old_node_noscript( $new_node, $old_node, $this->dom );
				}
			}

			$this->did_convert_elements = true;

		}
	}

	/**
	 * Filter video dimensions, try to get width and height from original file if missing.
	 *
	 * The video block will automatically have the width/height supplied for attachments.
	 *
	 * @see \AMP_Core_Block_Handler::ampify_video_block()
	 *
	 * @param array  $new_attributes Attributes.
	 * @param string $src            Video URL.
	 * @return array Modified attributes.
	 */
	protected function filter_video_dimensions( $new_attributes, $src ) {

		// Short-circuit if width and height are already defined.
		if ( ! empty( $new_attributes['width'] ) && ! empty( $new_attributes['height'] ) ) {
			return $new_attributes;
		}

		// Short-circuit if no width and height are required based on the layout.
		$layout = isset( $new_attributes['layout'] ) ? $new_attributes['layout'] : null;
		if ( in_array( $layout, [ 'fill', 'nodisplay', 'flex-item' ], true ) ) {
			return $new_attributes;
		}

		// Get the width and height from the file.
		$path = wp_parse_url( $src, PHP_URL_PATH );
		$ext  = pathinfo( $path, PATHINFO_EXTENSION );
		$name = sanitize_title( wp_basename( $path, ".$ext" ) ); // Extension removed by media_handle_upload().
		$args = [
			'name'        => $name,
			'post_type'   => 'attachment',
			'post_status' => 'inherit',
			'numberposts' => 1,
		];

		$attachments = get_posts( $args );
		if ( ! empty( $attachments ) ) {
			$attachment = array_shift( $attachments );
			$meta_data  = wp_get_attachment_metadata( $attachment->ID );
			if ( empty( $new_attributes['width'] ) && ! empty( $meta_data['width'] ) && 'fixed-height' !== $layout ) {
				$new_attributes['width'] = $meta_data['width'];
			}
			if ( empty( $new_attributes['height'] ) && ! empty( $meta_data['height'] ) ) {
				$new_attributes['height'] = $meta_data['height'];
			}
		}

		return $new_attributes;
	}

	/**
	 * "Filter" HTML attributes for <amp-audio> elements.
	 *
	 * @since 0.2
	 * @since 1.0 Force HTTPS for the src attribute.
	 *
	 * @param string[] $attributes {
	 *      Attributes.
	 *
	 *      @type string    $src        Video URL - Empty if HTTPS required per $this->args['require_https_src']
	 *      @type int       $width      <video> attribute - Set to numeric value if px or %
	 *      @type int       $height     <video> attribute - Set to numeric value if px or %
	 *      @type string    $poster     <video> attribute - Pass along if found
	 *      @type string    $class      <video> attribute - Pass along if found
	 *      @type bool      $controls   <video> attribute - Convert 'false' to empty string ''
	 *      @type bool      $loop       <video> attribute - Convert 'false' to empty string ''
	 *      @type bool      $muted      <video> attribute - Convert 'false' to empty string ''
	 *      @type bool      $autoplay   <video> attribute - Convert 'false' to empty string ''
	 * }
	 * @return array Returns HTML attributes; removes any not specifically declared above from input.
	 */
	private function filter_attributes( $attributes ) {
		$out = [];

		foreach ( $attributes as $name => $value ) {
			switch ( $name ) {
				case 'src':
					$out[ $name ] = $this->maybe_enforce_https_src( $value, true );
					break;

				case 'width':
				case 'height':
					$out[ $name ] = $this->sanitize_dimension( $value, $name );
					break;

				// @todo Convert to HTTPS when is_ssl().
				case 'poster':
				case 'artwork':
					$out[ $name ] = $value;
					break;

				case 'controls':
				case 'loop':
				case 'muted':
				case 'autoplay':
					if ( 'false' !== $value ) {
						$out[ $name ] = '';
					}
					break;

				case 'data-amp-layout':
					$out['layout'] = $value;
					break;

				case 'data-amp-noloading':
					$out['noloading'] = $value;
					break;

				// Skip copying playsinline attributes which are automatically added by amp-video:
				// <https://github.com/ampproject/amphtml/blob/264e5c0/extensions/amp-video/0.1/amp-video.js#L234-L236>.
				case 'playsinline':
				case 'webkit-playsinline':
					break;

				default:
					$out[ $name ] = $value;
			}
		}

		/*
		 * The amp-video will forcibly be muted whenever it is set to autoplay.
		 * So omit the `muted` attribute if it exists.
		 */
		if ( isset( $out['autoplay'], $out['muted'] ) ) {
			unset( $out['muted'] );
		}

		return $out;
	}
}
PK.3YlH.�
�
>bunyad-amp/includes/sanitizers/trait-amp-noscript-fallback.php<?php
/**
 * Trait AMP_Noscript_Fallback.
 *
 * @package AMP
 */

use AmpProject\Dom\Document;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag;

/**
 * Trait AMP_Noscript_Fallback
 *
 * Used for sanitizers that place <noscript> tags with the original nodes on error.
 *
 * @since 1.1
 * @internal
 */
trait AMP_Noscript_Fallback {

	/**
	 * Attributes allowed on noscript fallback elements.
	 *
	 * This is used to prevent duplicated validation errors.
	 *
	 * @since 1.1
	 *
	 * @var array
	 */
	private $noscript_fallback_allowed_attributes = [];

	/**
	 * Initializes the internal allowed attributes array.
	 *
	 * @since 1.1
	 *
	 * @param string $tag Tag name to get allowed attributes for.
	 */
	protected function initialize_noscript_allowed_attributes( $tag ) {
		$this->noscript_fallback_allowed_attributes = array_fill_keys(
			array_keys( AMP_Allowed_Tags_Generated::get_allowed_attributes() ),
			true
		);

		foreach ( AMP_Allowed_Tags_Generated::get_allowed_tag( $tag ) as $tag_spec ) { // Normally 1 iteration.
			if (
				! (
					( isset( $tag_spec['tag_spec']['mandatory_ancestor'] ) && Tag::NOSCRIPT === $tag_spec['tag_spec']['mandatory_ancestor'] )
					||
					( isset( $tag_spec['tag_spec']['mandatory_parent'] ) && Tag::NOSCRIPT === $tag_spec['tag_spec']['mandatory_parent'] )
				)
			) {
				continue;
			}
			foreach ( $tag_spec['attr_spec_list'] as $attr_name => $attr_spec ) {
				$this->noscript_fallback_allowed_attributes[ $attr_name ] = true;
				if ( isset( $attr_spec['alternative_names'] ) ) {
					$this->noscript_fallback_allowed_attributes = array_merge(
						$this->noscript_fallback_allowed_attributes,
						array_fill_keys( $attr_spec['alternative_names'], true )
					);
				}
			}
		}

		// Remove attributes which are likely to cause styling conflicts, as the noscript fallback should get treated like it has fill layout.
		unset(
			$this->noscript_fallback_allowed_attributes[ Attribute::ID ],
			$this->noscript_fallback_allowed_attributes[ Attribute::CLASS_ ],
			$this->noscript_fallback_allowed_attributes[ Attribute::STYLE ]
		);
	}

	/**
	 * Checks whether the given node is within an AMP-specific <noscript> element.
	 *
	 * @since 1.1
	 *
	 * @param DOMNode $node DOM node to check.
	 *
	 * @return bool True if in an AMP noscript element, false otherwise.
	 */
	protected function is_inside_amp_noscript( DOMNode $node ) {
		return 'noscript' === $node->parentNode->nodeName && $node->parentNode->parentNode && 'amp-' === substr( $node->parentNode->parentNode->nodeName, 0, 4 );
	}

	/**
	 * Appends the given old node in a <noscript> element to the new node.
	 *
	 * @since 1.1
	 *
	 * @param DOMElement $new_element New element to append a noscript with the old element to.
	 * @param DOMElement $old_element Old element to append in a noscript.
	 * @param Document   $dom         DOM document instance.
	 */
	protected function append_old_node_noscript( DOMElement $new_element, DOMElement $old_element, Document $dom ) {
		$noscript = $dom->createElement( 'noscript' );
		$noscript->appendChild( $old_element );
		$new_element->appendChild( $noscript );

		// Remove all non-allowed attributes preemptively to prevent doubled validation errors, only leaving the attributes required.
		for ( $i = $old_element->attributes->length - 1; $i >= 0; $i-- ) {
			$attribute = $old_element->attributes->item( $i );
			if ( ! isset( $this->noscript_fallback_allowed_attributes[ $attribute->nodeName ] ) ) {
				$old_element->removeAttribute( $attribute->nodeName );
			}
		}
	}
}
PK.3Y��ӣ#�#Ebunyad-amp/includes/settings/class-amp-customizer-design-settings.php<?php
/**
 * Class AMP_Customizer_Design_Settings
 *
 * @package AMP
 */

use AmpProject\AmpWP\Option;
use AmpProject\AmpWP\Services;

/**
 * Class AMP_Customizer_Design_Settings
 *
 * @internal
 */
class AMP_Customizer_Design_Settings {

	/**
	 * Default header color.
	 *
	 * @var string
	 */
	const DEFAULT_HEADER_COLOR = '#fff';

	/**
	 * Default header background color.
	 *
	 * @var string
	 */
	const DEFAULT_HEADER_BACKGROUND_COLOR = '#0A5F85';

	/**
	 * Default color scheme.
	 *
	 * @var string
	 */
	const DEFAULT_COLOR_SCHEME = 'light';

	/**
	 * Returns whether the AMP design settings are enabled.
	 *
	 * @since 1.1 This always return false when AMP theme support is present.
	 * @since 0.6
	 *
	 * @return bool AMP Customizer design settings enabled.
	 */
	public static function is_amp_customizer_enabled() {
		if ( AMP_Theme_Support::READER_MODE_SLUG !== AMP_Options_Manager::get_option( Option::THEME_SUPPORT ) ) {
			return false;
		}

		/**
		 * Filter whether to enable the AMP default template design settings.
		 *
		 * @since 0.4
		 * @since 0.6 This filter now controls whether or not the default settings, controls, and sections are registered for the Customizer. The AMP panel will be registered regardless.
		 * @param bool $enable Whether to enable the AMP default template design settings. Default true.
		 */
		return apply_filters( 'amp_customizer_is_enabled', true );
	}

	/**
	 * Init.
	 */
	public static function init() {
		if ( self::is_amp_customizer_enabled() ) {
			add_action( 'amp_customizer_init', [ __CLASS__, 'init_customizer' ] );
			add_filter( 'amp_customizer_get_settings', [ __CLASS__, 'append_settings' ] );
		}
	}

	/**
	 * Init customizer.
	 */
	public static function init_customizer() {
		if ( ! Services::get( 'dependency_support' )->has_support() ) {
			return;
		}
		add_action( 'amp_customizer_register_settings', [ __CLASS__, 'register_customizer_settings' ] );
		add_action( 'amp_customizer_register_ui', [ __CLASS__, 'register_customizer_ui' ] );
		add_action( 'amp_customizer_enqueue_preview_scripts', [ __CLASS__, 'enqueue_customizer_preview_scripts' ] );
	}

	/**
	 * Register default Customizer settings for AMP.
	 *
	 * @param WP_Customize_Manager $wp_customize Manager.
	 */
	public static function register_customizer_settings( $wp_customize ) {

		// Header text color setting.
		$wp_customize->add_setting(
			'amp_customizer[header_color]',
			[
				'type'              => 'option',
				'default'           => self::DEFAULT_HEADER_COLOR,
				'sanitize_callback' => 'sanitize_hex_color',
				'transport'         => 'postMessage',
			]
		);

		// Header background color.
		$wp_customize->add_setting(
			'amp_customizer[header_background_color]',
			[
				'type'              => 'option',
				'default'           => self::DEFAULT_HEADER_BACKGROUND_COLOR,
				'sanitize_callback' => 'sanitize_hex_color',
				'transport'         => 'postMessage',
			]
		);

		// Background color scheme.
		$wp_customize->add_setting(
			'amp_customizer[color_scheme]',
			[
				'type'              => 'option',
				'default'           => self::DEFAULT_COLOR_SCHEME,
				'sanitize_callback' => [ __CLASS__, 'sanitize_color_scheme' ],
				'transport'         => 'postMessage',
			]
		);
	}

	/**
	 * Register default Customizer sections and controls for AMP.
	 *
	 * @param WP_Customize_Manager $wp_customize Manager.
	 */
	public static function register_customizer_ui( $wp_customize ) {
		$wp_customize->add_section(
			'amp_design',
			[
				'title' => __( 'Design', 'amp' ),
				'panel' => AMP_Template_Customizer::PANEL_ID,
			]
		);

		// Header text color control.
		$wp_customize->add_control(
			new WP_Customize_Color_Control(
				$wp_customize,
				'amp_header_color',
				[
					'settings' => 'amp_customizer[header_color]',
					'label'    => __( 'Header Text Color', 'amp' ),
					'section'  => 'amp_design',
					'priority' => 10,
				]
			)
		);

		// Header background color control.
		$wp_customize->add_control(
			new WP_Customize_Color_Control(
				$wp_customize,
				'amp_header_background_color',
				[
					'settings' => 'amp_customizer[header_background_color]',
					'label'    => __( 'Header Background & Link Color', 'amp' ),
					'section'  => 'amp_design',
					'priority' => 20,
				]
			)
		);

		// Background color scheme.
		$wp_customize->add_control(
			'amp_color_scheme',
			[
				'settings' => 'amp_customizer[color_scheme]',
				'label'    => __( 'Color Scheme', 'amp' ),
				'section'  => 'amp_design',
				'type'     => 'radio',
				'priority' => 30,
				'choices'  => self::get_color_scheme_names(),
			]
		);

		// Header.
		$wp_customize->selective_refresh->add_partial(
			'amp-wp-header',
			[
				'selector'         => '.amp-wp-header',
				'settings'         => [ 'blogname' ], // @todo Site Icon.
				'render_callback'  => [ __CLASS__, 'render_header_bar' ],
				'fallback_refresh' => false,
			]
		);

		// Footer.
		$wp_customize->selective_refresh->add_partial(
			'amp-wp-footer',
			[
				'selector'            => '.amp-wp-footer',
				'settings'            => [ 'blogname' ],
				'render_callback'     => [ __CLASS__, 'render_footer' ],
				'fallback_refresh'    => false,
				'container_inclusive' => true,
			]
		);
	}

	/**
	 * Render header bar template.
	 */
	public static function render_header_bar() {
		if ( is_singular() ) {
			$post_template = new AMP_Post_Template( get_post() );
			$post_template->load_parts( [ 'header-bar' ] );
		}
	}

	/**
	 * Render footer template.
	 */
	public static function render_footer() {
		if ( is_singular() ) {
			$post_template = new AMP_Post_Template( get_post() );
			$post_template->load_parts( [ 'footer' ] );
		}
	}

	/**
	 * Enqueue scripts for default AMP Customizer preview.
	 *
	 * @global WP_Customize_Manager $wp_customize
	 */
	public static function enqueue_customizer_preview_scripts() {
		global $wp_customize;

		$asset_file   = AMP__DIR__ . '/assets/js/amp-customizer-design-preview-legacy.asset.php';
		$asset        = require $asset_file;
		$dependencies = $asset['dependencies'];
		$version      = $asset['version'];

		wp_enqueue_script(
			'amp-customizer-design-preview',
			amp_get_asset_url( 'js/amp-customizer-design-preview-legacy.js' ),
			array_merge( $dependencies, [ 'amp-customize-preview' ] ),
			$version,
			true
		);
		wp_localize_script(
			'amp-customizer-design-preview',
			'amp_customizer_design',
			[
				'color_schemes' => self::get_color_schemes(),
			]
		);

		// Prevent a theme's registered blogname partial from causing full page refreshes.
		$blogname_partial = $wp_customize->selective_refresh->get_partial( 'blogname' );
		if ( $blogname_partial ) {
			$blogname_partial->fallback_refresh = false;
		}
	}

	/**
	 * Merge default Customizer settings on top of settings for merging into AMP post template.
	 *
	 * @see AMP_Post_Template::build_customizer_settings()
	 *
	 * @param array $settings Settings.
	 * @return array Merged settings.
	 */
	public static function append_settings( $settings ) {
		$settings = wp_parse_args(
			$settings,
			[
				'header_color'            => self::DEFAULT_HEADER_COLOR,
				'header_background_color' => self::DEFAULT_HEADER_BACKGROUND_COLOR,
				'color_scheme'            => self::DEFAULT_COLOR_SCHEME,
			]
		);

		$theme_colors = self::get_colors_for_color_scheme( $settings['color_scheme'] );

		return array_merge(
			$settings,
			$theme_colors,
			[
				'link_color' => $settings['header_background_color'],
			]
		);
	}

	/**
	 * Get color scheme names.
	 *
	 * @return array Color scheme names.
	 */
	protected static function get_color_scheme_names() {
		return [
			'light' => __( 'Light', 'amp' ),
			'dark'  => __( 'Dark', 'amp' ),
		];
	}

	/**
	 * Get color schemes.
	 *
	 * @return array Color schemes.
	 */
	protected static function get_color_schemes() {
		return [
			'light' => [
				// Convert colors to greyscale for light theme color; see <http://goo.gl/2gDLsp>.
				'theme_color'      => '#fff',
				'text_color'       => '#353535',
				'muted_text_color' => '#696969',
				'border_color'     => '#c2c2c2',
			],
			'dark'  => [
				// Convert and invert colors to greyscale for dark theme color; see <http://goo.gl/uVB2cO>.
				'theme_color'      => '#0a0a0a',
				'text_color'       => '#dedede',
				'muted_text_color' => '#b1b1b1',
				'border_color'     => '#707070',
			],
		];
	}

	/**
	 * Get colors for color scheme.
	 *
	 * @param string $scheme Color scheme.
	 * @return array Colors.
	 */
	protected static function get_colors_for_color_scheme( $scheme ) {
		$color_schemes = self::get_color_schemes();

		if ( isset( $color_schemes[ $scheme ] ) ) {
			return $color_schemes[ $scheme ];
		}

		return $color_schemes[ self::DEFAULT_COLOR_SCHEME ];
	}

	/**
	 * Sanitize color scheme.
	 *
	 * @param string $value Color scheme name.
	 * @return string Sanitized name.
	 */
	public static function sanitize_color_scheme( $value ) {
		$schemes      = self::get_color_scheme_names();
		$scheme_slugs = array_keys( $schemes );

		if ( ! in_array( $value, $scheme_slugs, true ) ) {
			$value = self::DEFAULT_COLOR_SCHEME;
		}

		return $value;
	}
}
PK.3Y�,K�__>bunyad-amp/includes/settings/class-amp-customizer-settings.php<?php
/**
 * Class AMP_Customizer_Settings
 *
 * @package AMP
 */

/**
 * Class AMP_Customizer_Settings
 *
 * @internal
 */
class AMP_Customizer_Settings {

	/**
	 * Gets the AMP Customizer settings directly from the option.
	 *
	 * @since 0.6
	 *
	 * @return array Associative array of $setting => $value pairs.
	 */
	private static function get_stored_options() {
		return get_option( 'amp_customizer', [] );
	}

	/**
	 * Gets the AMP Customizer settings.
	 *
	 * @since 0.6
	 *
	 * @return array Associative array of $setting => $value pairs.
	 */
	public static function get_settings() {
		$settings = self::get_stored_options();

		/**
		 * Filters the AMP Customizer settings.
		 *
		 * @since 0.6
		 *
		 * @param array $settings Associative array of $setting => $value pairs.
		 */
		return apply_filters( 'amp_customizer_get_settings', $settings );
	}
}
PK.3YB���Cbunyad-amp/includes/templates/amp-enabled-classic-editor-toggle.php<?php
/**
 * AMP status option in the submit meta box.
 *
 * @package AMP
 */

use AmpProject\AmpWP\Services;

// Check referrer.
if ( ! ( $this instanceof AMP_Post_Meta_Box ) ) {
	return;
}

/**
 * Inherited template vars.
 *
 * @var array  $labels         Labels for enabled or disabled.
 * @var string $status         Enabled or disabled.
 * @var array  $errors         Support errors.
 * @var array  $error_messages AMP enabled error messages.
 */
?>
<div class="misc-pub-section misc-amp-status">
	<span class="amp-icon"></span>
	<?php esc_html_e( 'AMP:', 'amp' ); ?>
	<strong class="amp-status-text"><?php echo esc_html( $labels[ $status ] ); ?></strong>

	<?php if ( ! Services::get( 'dependency_support' )->has_support_from_core() ) : ?>
		<div class="notice notice-info notice-alt inline">
			<p>
				<?php esc_html_e( 'Your version of WordPress is too old to manage whether AMP is enabled. Please upgrade.', 'amp' ); ?>
			</p>
		</div>
	<?php else : ?>
		<a href="#amp_status" class="edit-amp-status hide-if-no-js" role="button">
			<span aria-hidden="true"><?php esc_html_e( 'Edit', 'amp' ); ?></span>
			<span class="screen-reader-text"><?php esc_html_e( 'Edit Status', 'amp' ); ?></span>
		</a>
		<div id="amp-status-select" class="hide-if-js" data-amp-status="<?php echo esc_attr( $status ); ?>">
			<?php if ( empty( $errors ) ) : ?>
				<fieldset>
					<input id="amp-status-enabled" type="radio" name="<?php echo esc_attr( AMP_Post_Meta_Box::STATUS_INPUT_NAME ); ?>" value="<?php echo esc_attr( AMP_Post_Meta_Box::ENABLED_STATUS ); ?>" <?php checked( AMP_Post_Meta_Box::ENABLED_STATUS, $status ); ?>>
					<label for="amp-status-enabled" class="selectit"><?php echo esc_html( $labels['enabled'] ); ?></label>
					<br />
					<input id="amp-status-disabled" type="radio" name="<?php echo esc_attr( AMP_Post_Meta_Box::STATUS_INPUT_NAME ); ?>" value="<?php echo esc_attr( AMP_Post_Meta_Box::DISABLED_STATUS ); ?>" <?php checked( AMP_Post_Meta_Box::DISABLED_STATUS, $status ); ?>>
					<label for="amp-status-disabled" class="selectit"><?php echo esc_html( $labels['disabled'] ); ?></label>
					<br />
					<?php wp_nonce_field( AMP_Post_Meta_Box::NONCE_ACTION, AMP_Post_Meta_Box::NONCE_NAME ); ?>
				</fieldset>
			<?php else : ?>
				<div class="inline notice notice-info notice-alt">
					<p>
						<strong><?php esc_html_e( 'AMP Unavailable', 'amp' ); ?></strong>
					</p>
					<?php foreach ( $error_messages as $error_message ) : ?>
						<p>
							<?php echo $error_message; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
						</p>
					<?php endforeach; ?>
				</div>
			<?php endif; ?>
			<div class="amp-status-actions">
				<?php if ( empty( $errors ) ) : ?>
					<a href="#amp_status" class="save-amp-status hide-if-no-js button"><?php esc_html_e( 'OK', 'amp' ); ?></a>
				<?php endif; ?>
				<a href="#amp_status" class="cancel-amp-status hide-if-no-js button-cancel"><?php esc_html_e( 'Cancel', 'amp' ); ?></a>
			</div>
		</div>
	<?php endif; ?>
</div>
PK.3Y%�O555bunyad-amp/includes/templates/amp-paired-browsing.php<?php
/**
 * AMP Paired Browsing experience template.
 *
 * @package AMP
 */

use AmpProject\AmpWP\QueryVar;
use AmpProject\AmpWP\Admin\PairedBrowsing;

$url         = remove_query_arg( [ PairedBrowsing::APP_QUERY_VAR, QueryVar::NOAMP ], amp_get_current_url() );
$non_amp_url = add_query_arg( QueryVar::NOAMP, QueryVar::NOAMP_MOBILE, $url );
$amp_url     = amp_add_paired_endpoint( $url );
?>

<!DOCTYPE html>
<html <?php language_attributes(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>>
	<head>
		<meta charset="<?php bloginfo( 'charset' ); ?>">
		<title><?php esc_html_e( 'Loading&#8230;', 'amp' ); ?></title>
		<meta name="robots" content="noindex,nofollow">
		<?php print_admin_styles(); ?>
	</head>
	<body>
		<a class="skip-link" href="#non-amp"><?php esc_html_e( 'Skip to the non-AMP iframe', 'amp' ); ?></a>
		<a class="skip-link" href="#amp"><?php esc_html_e( 'Skip to the AMP iframe', 'amp' ); ?></a>
		<section>
			<nav id="header">
				<ul>
					<li class="iframe-label non-amp"><a id="non-amp-link" class="exit-link" title="<?php esc_attr_e( 'Exit paired browsing onto the non-AMP version.', 'amp' ); ?>" href="<?php echo esc_url( $non_amp_url ); ?>"><?php esc_html_e( 'Non-AMP', 'amp' ); ?><span class="dashicons dashicons-migrate"></span></a></li>
					<li class="iframe-label amp"><a id="amp-link" class="exit-link" title="<?php esc_attr_e( 'Exit paired browsing onto the AMP version.', 'amp' ); ?>" href="<?php echo esc_url( $amp_url ); ?>"><?php esc_html_e( 'AMP', 'amp' ); ?><span class="dashicons dashicons-migrate"></span></a></li>
				</ul>
			</nav>
		</section>

		<div class="container">
			<div class="disconnect-overlay">
				<div class="dialog" role="dialog">
					<div class="dialog-icon">
						<span class="dashicons dashicons-warning"></span>
					</div>

					<div class="dialog-text">
						<span class="general">
							<?php esc_html_e( 'The navigated URL is not available for paired browsing.', 'amp' ); ?>
						</span>
					</div>

					<div class="dialog-buttons">
						<a href="#" class="button exit" hidden><?php esc_html_e( 'Exit', 'amp' ); ?></a>
						<button class="button go-back"><?php esc_html_e( 'Go Back', 'amp' ); ?></button>
					</div>
				</div>
			</div>

			<div id="non-amp">
				<iframe
					name="paired-browsing-non-amp"
					src="<?php echo esc_url( $non_amp_url ); ?>"
					sandbox="allow-forms allow-scripts allow-same-origin allow-popups allow-modals"
					title="<?php esc_attr__( 'Non-AMP version', 'amp' ); ?>"
				></iframe>
			</div>

			<div id="amp">
				<iframe
					name="paired-browsing-amp"
					src="<?php echo esc_url( $amp_url ); ?>"
					sandbox="allow-forms allow-scripts allow-same-origin allow-popups allow-modals"
					title="<?php esc_attr__( 'AMP version', 'amp' ); ?>"
				></iframe>
			</div>
		</div>

		<?php print_footer_scripts(); ?>
	</body>
</html>
PK.3Y�2��22=bunyad-amp/includes/templates/class-amp-content-sanitizer.php<?php
/**
 * Class AMP_Content_Sanitizer
 *
 * @package AMP
 */

use AmpProject\Dom\Document;

/**
 * Class AMP_Content_Sanitizer
 *
 * @since 0.4.1
 * @internal
 */
class AMP_Content_Sanitizer {

	/**
	 * Sanitize _content_.
	 *
	 * @since 0.4.1
	 * @since 0.7 Passing return_styles=false in $global_args causes stylesheets to be returned instead of styles.
	 * @codeCoverageIgnore
	 * @deprecated Since 1.0
	 *
	 * @param string  $content HTML content string or DOM document.
	 * @param array[] $sanitizer_classes Sanitizers, with keys as class names and values as arguments.
	 * @param array   $global_args       Global args.
	 * @return array Tuple containing sanitized HTML, scripts array, and styles array (or stylesheets, if return_styles=false is passed in $global_args).
	 */
	public static function sanitize( $content, array $sanitizer_classes, $global_args = [] ) {
		$dom = AMP_DOM_Utils::get_dom_from_content( $content );

		// For back-compat.
		if ( ! isset( $global_args['return_styles'] ) ) {
			$global_args['return_styles'] = true;
		}

		$results = self::sanitize_document( $dom, $sanitizer_classes, $global_args );
		return [
			AMP_DOM_Utils::get_content_from_dom( $dom ),
			$results['scripts'],
			empty( $global_args['return_styles'] ) ? $results['stylesheets'] : $results['styles'],
		];
	}

	/**
	 * Sanitize document.
	 *
	 * @since 0.7
	 *
	 * @param Document $dom               HTML document.
	 * @param array[]  $sanitizer_classes Sanitizers, with keys as class names and values as arguments.
	 * @param array    $args              Global args passed into sanitizers.
	 * @return array {
	 *     Scripts and stylesheets needed by sanitizers.
	 *
	 *     @type array                $scripts     Scripts.
	 *     @type array                $stylesheets Stylesheets. If $args['return_styles'] is empty.
	 *     @type array                $styles      Styles. If $args['return_styles'] is not empty. For legacy purposes.
	 *     @type AMP_Base_Sanitizer[] $sanitizers  Sanitizers.
	 * }
	 */
	public static function sanitize_document( Document $dom, $sanitizer_classes, $args ) {
		$scripts     = [];
		$stylesheets = [];
		$styles      = [];

		$return_styles = ! empty( $args['return_styles'] );
		unset( $args['return_styles'] );

		/**
		 * Sanitizers.
		 *
		 * @var AMP_Base_Sanitizer[] $sanitizers
		 */
		$sanitizers = [];

		// Instantiate the sanitizers.
		foreach ( $sanitizer_classes as $sanitizer_class => $sanitizer_args ) {
			if ( ! class_exists( $sanitizer_class ) ) {
				/* translators: %s is sanitizer class */
				_doing_it_wrong( __METHOD__, sprintf( esc_html__( 'Sanitizer (%s) class does not exist', 'amp' ), esc_html( $sanitizer_class ) ), '0.4.1' );
				continue;
			}

			/**
			 * Sanitizer.
			 *
			 * @type AMP_Base_Sanitizer $sanitizer
			 */
			$sanitizer = new $sanitizer_class( $dom, array_merge( $args, $sanitizer_args ) );

			if ( ! $sanitizer instanceof AMP_Base_Sanitizer ) {
				_doing_it_wrong(
					__METHOD__,
					esc_html(
						sprintf(
							/* translators: 1: sanitizer class. 2: AMP_Base_Sanitizer */
							__( 'Sanitizer (%1$s) must extend `%2$s`', 'amp' ),
							esc_html( $sanitizer_class ),
							AMP_Base_Sanitizer::class
						)
					),
					'0.1'
				);
				continue;
			}

			$sanitizers[ $sanitizer_class ] = $sanitizer;
		}

		// Let the sanitizers know about each other prior to sanitizing.
		foreach ( $sanitizers as $sanitizer ) {
			$sanitizer->init( $sanitizers );
		}

		// Sanitize.
		$sanitizers_to_surface = [
			AMP_Style_Sanitizer::class,
			AMP_Tag_And_Attribute_Sanitizer::class,
		];
		foreach ( $sanitizers as $sanitizer_class => $sanitizer ) {
			/**
			 * Starts the server-timing measurement for an individual sanitizer.
			 *
			 * @since 2.0
			 * @internal
			 *
			 * @param string      $event_name        Name of the event to record.
			 * @param string|null $event_description Optional. Description of the event
			 *                                       to record. Defaults to null.
			 * @param string[]    $properties        Optional. Additional properties to add
			 *                                       to the logged record.
			 * @param bool        $verbose_only      Optional. Whether to only show the
			 *                                       event in verbose mode. Defaults to
			 *                                       false.
			 */
			do_action(
				'amp_server_timing_start',
				strtolower( $sanitizer_class ),
				'',
				[],
				! in_array( $sanitizer_class, $sanitizers_to_surface, true )
			);

			$sanitizer->sanitize();

			$scripts = array_merge( $scripts, $sanitizer->get_scripts() );
			if ( $return_styles ) {
				$styles = array_merge( $styles, $sanitizer->get_styles() );
			} else {
				$stylesheets = array_merge( $stylesheets, $sanitizer->get_stylesheets() );
			}

			/**
			 * Stops the server-timing measurement for an individual sanitizer.
			 *
			 * @since 2.0
			 * @internal
			 *
			 * @param string $event_name Name of the event to stop.
			 */
			do_action(
				'amp_server_timing_stop',
				strtolower( $sanitizer_class )
			);
		}

		return compact( 'scripts', 'styles', 'stylesheets', 'sanitizers' );
	}
}
PK.3Y�����3bunyad-amp/includes/templates/class-amp-content.php<?php
/**
 * Class AMP_Content
 *
 * @package AMP
 */

/**
 * Class AMP_Content
 *
 * @codeCoverageIgnore
 * @deprecated 1.5 Reader mode now sanitizes its entire template through the standard post-processor.
 * @internal
 */
class AMP_Content {

	/**
	 * Content.
	 *
	 * @var string
	 */
	private $content;

	/**
	 * AMP content.
	 *
	 * @var string
	 */
	private $amp_content = '';

	/**
	 * AMP scripts.
	 *
	 * @var array
	 */
	private $amp_scripts = [];

	/**
	 * AMP stylesheets.
	 *
	 * @since 1.0
	 * @var array
	 */
	private $amp_stylesheets = [];

	/**
	 * Args.
	 *
	 * @var array
	 */
	private $args;

	/**
	 * Embed handlers.
	 *
	 * @var AMP_Base_Embed_Handler[]
	 */
	private $embed_handlers;

	/**
	 * Sanitizers, with keys as class names and values as arguments.
	 *
	 * @var array[]
	 */
	private $sanitizer_classes;

	/**
	 * AMP_Content constructor.
	 *
	 * @param string  $content               Content.
	 * @param array[] $embed_handler_classes Embed handlers, with keys as class names and values as arguments.
	 * @param array[] $sanitizer_classes     Sanitizers, with keys as class names and values as arguments.
	 * @param array   $args                  Args.
	 */
	public function __construct( $content, $embed_handler_classes, $sanitizer_classes, $args = [] ) {
		$this->content           = $content;
		$this->args              = $args;
		$this->embed_handlers    = $this->register_embed_handlers( $embed_handler_classes );
		$this->sanitizer_classes = $sanitizer_classes;

		$this->sanitizer_classes[ AMP_Embed_Sanitizer::class ]['embed_handlers'] = $this->embed_handlers;

		$this->transform();
	}

	/**
	 * Get AMP content.
	 *
	 * @return string
	 */
	public function get_amp_content() {
		return $this->amp_content;
	}

	/**
	 * Get AMP scripts.
	 *
	 * @return array
	 */
	public function get_amp_scripts() {
		return $this->amp_scripts;
	}

	/**
	 * Get AMP styles.
	 *
	 * @deprecated Since 1.0 in favor of the get_amp_stylesheets method.
	 * @return array Empty list.
	 */
	public function get_amp_styles() {
		_deprecated_function( __METHOD__, '1.0', __CLASS__ . '::get_amp_stylesheets' );
		return [];
	}

	/**
	 * Get AMP styles.
	 *
	 * @since 1.0
	 * @return array
	 */
	public function get_amp_stylesheets() {
		return $this->amp_stylesheets;
	}

	/**
	 * Transform.
	 */
	private function transform() {
		$content = $this->content;

		// First, embeds + the_content filter.
		/** This filter is documented in wp-includes/post-template.php */
		$content = apply_filters( 'the_content', $content );
		$this->unregister_embed_handlers( $this->embed_handlers );

		// Then, sanitize to strip and/or convert non-amp content.
		$content = $this->sanitize( $content );

		$this->amp_content = $content;
	}

	/**
	 * Add scripts.
	 *
	 * @param array $scripts Scripts.
	 */
	private function add_scripts( $scripts ) {
		$this->amp_scripts = array_merge( $this->amp_scripts, $scripts );
	}

	/**
	 * Add stylesheets.
	 *
	 * @since 1.0
	 * @param array $stylesheets Styles.
	 */
	private function add_stylesheets( $stylesheets ) {
		$this->amp_stylesheets = array_merge( $this->amp_stylesheets, $stylesheets );
	}

	/**
	 * Register embed handlers.
	 *
	 * @param array[] $embed_handler_classes Embed handlers, with keys as class names and values as arguments.
	 * @return AMP_Base_Embed_Handler[] Registered embed handlers.
	 */
	private function register_embed_handlers( $embed_handler_classes ) {
		$embed_handlers = [];

		foreach ( $embed_handler_classes as $embed_handler_class => $args ) {
			$embed_handler = new $embed_handler_class( array_merge( $this->args, $args ) );

			if ( ! $embed_handler instanceof AMP_Base_Embed_Handler ) {
				_doing_it_wrong(
					__METHOD__,
					esc_html(
						sprintf(
							/* translators: 1: embed handler. 2: AMP_Base_Embed_Handler */
							__( 'Embed Handler (%1$s) must extend `%2$s`', 'amp' ),
							esc_html( $embed_handler_class ),
							AMP_Base_Embed_Handler::class
						)
					),
					'0.1'
				);
				continue;
			}

			$embed_handler->register_embed();
			$embed_handlers[] = $embed_handler;
		}

		return $embed_handlers;
	}

	/**
	 * Unregister embed handlers.
	 *
	 * @param AMP_Base_Embed_Handler[] $embed_handlers Embed handlers.
	 */
	private function unregister_embed_handlers( $embed_handlers ) {
		foreach ( $embed_handlers as $embed_handler ) {
			$this->add_scripts( $embed_handler->get_scripts() ); // @todo Why add_scripts here? Shouldn't it be array_diff()?
			$embed_handler->unregister_embed();
		}
	}

	/**
	 * Sanitize.
	 *
	 * @see AMP_Content_Sanitizer::sanitize()
	 * @param string $content Content.
	 * @return string Sanitized content.
	 */
	private function sanitize( $content ) {
		$dom = AMP_DOM_Utils::get_dom_from_content( $content );

		$results = AMP_Content_Sanitizer::sanitize_document( $dom, $this->sanitizer_classes, $this->args );

		$this->add_scripts( $results['scripts'] );
		$this->add_stylesheets( $results['stylesheets'] );

		return AMP_DOM_Utils::get_content_from_dom( $dom );
	}
}
PK.3Y���0�09bunyad-amp/includes/templates/class-amp-post-template.php<?php
/**
 * AMP_Post_Template class.
 *
 * @package AMP
 */

/**
 * Class AMP_Post_Template
 *
 * @since 0.2
 * @internal
 */
class AMP_Post_Template {

	/**
	 * Site icon size.
	 *
	 * @since 0.2
	 * @var int
	 */
	const SITE_ICON_SIZE = 32;

	/**
	 * Content max width.
	 *
	 * @since 0.4
	 * @var int
	 */
	const CONTENT_MAX_WIDTH = 600;

	/**
	 * Default navbar background.
	 *
	 * Needed for 0.3 back-compat
	 *
	 * @since 0.4
	 * @var string
	 */
	const DEFAULT_NAVBAR_BACKGROUND = '#0a89c0';

	/**
	 * Default navbar color.
	 *
	 * Needed for 0.3 back-compat
	 *
	 * @since 0.4
	 * @var string
	 */
	const DEFAULT_NAVBAR_COLOR = '#fff';

	/**
	 * Post template data.
	 *
	 * @since 0.2
	 * @var array
	 */
	private $data;

	/**
	 * Post ID.
	 *
	 * @since 0.2
	 * @var int
	 */
	public $ID;

	/**
	 * Post
	 *
	 * @since 0.2
	 * @var WP_Post
	 */
	public $post;

	/**
	 * AMP_Post_Template constructor.
	 *
	 * @param WP_Post|int $post Post.
	 */
	public function __construct( $post ) {
		if ( is_int( $post ) ) {
			$this->ID   = $post;
			$this->post = get_post( $post );
		} elseif ( $post instanceof WP_Post ) {
			$this->ID   = $post->ID;
			$this->post = $post;
		}
	}

	/**
	 * Set data.
	 *
	 * This is called in the get method the first time it is called.
	 *
	 * @since 1.5
	 *
	 * @see \AMP_Post_Template::get()
	 */
	private function set_data() {
		$content_max_width = self::CONTENT_MAX_WIDTH;
		if ( isset( $GLOBALS['content_width'] ) && $GLOBALS['content_width'] > 0 ) {
			$content_max_width = $GLOBALS['content_width'];
		}

		/**
		 * Filters the content max width for Reader templates.
		 *
		 * @since 0.2
		 *
		 * @param int $content_max_width Content max width.
		 */
		$content_max_width = apply_filters( 'amp_content_max_width', $content_max_width );

		$this->data = [
			'content_max_width'     => $content_max_width,

			'document_title'        => wp_get_document_title(),
			'canonical_url'         => get_permalink( $this->post ),
			'home_url'              => home_url( '/' ),
			'blog_name'             => get_bloginfo( 'name' ),

			'html_tag_attributes'   => [],
			'body_class'            => '',

			/** This filter is documented in includes/amp-helper-functions.php */
			'site_icon_url'         => apply_filters( 'amp_site_icon_url', get_site_icon_url( self::SITE_ICON_SIZE ) ),
			'placeholder_image_url' => amp_get_asset_url( 'images/placeholder-icon.png' ),

			'featured_image'        => false,
			'comments_link_url'     => false,
			'comments_link_text'    => false,

			'amp_runtime_script'    => 'https://cdn.ampproject.org/v0.js', // Deprecated.
			'amp_component_scripts' => [], // Deprecated.

			'customizer_settings'   => [],

			'font_urls'             => [],

			'post_amp_stylesheets'  => [],
			'post_amp_styles'       => [], // Deprecated.

			'amp_analytics'         => amp_add_custom_analytics(),
		];

		$this->build_post_content();
		$this->build_post_data();
		$this->build_customizer_settings();
		$this->build_html_tag_attributes();

		/**
		 * Filters AMP template data.
		 *
		 * @since 0.2
		 *
		 * @param array   $data Template data.
		 * @param WP_Post $post Post.
		 */
		$this->data = apply_filters( 'amp_post_template_data', $this->data, $this->post );
	}

	/**
	 * Get template directory for Reader mode.
	 *
	 * @since 0.2
	 * @return string Template dir.
	 */
	private function get_template_dir() {
		static $template_dir = null;
		if ( ! isset( $template_dir ) ) {
			/**
			 * Filters the Reader template directory.
			 *
			 * @since 0.3.3
			 */
			$template_dir = apply_filters( 'amp_post_template_dir', AMP__DIR__ . '/templates' );
		}
		return $template_dir;
	}

	/**
	 * Getter.
	 *
	 * @param string $property Property name.
	 * @param mixed  $default  Default value.
	 *
	 * @return mixed Value.
	 */
	public function get( $property, $default = null ) {
		if ( empty( $this->data ) ) {
			$this->set_data();
		}

		if ( isset( $this->data[ $property ] ) ) {
			return $this->data[ $property ];
		}

		/* translators: %s is key name */
		_doing_it_wrong( __METHOD__, esc_html( sprintf( __( 'Called for non-existent key ("%s").', 'amp' ), $property ) ), '0.1' );

		return $default;
	}

	/**
	 * Get customizer setting.
	 *
	 * @param string $name    Name.
	 * @param mixed  $default Default value.
	 * @return mixed value.
	 */
	public function get_customizer_setting( $name, $default = null ) {
		$settings = $this->get( 'customizer_settings' );
		if ( ! empty( $settings[ $name ] ) ) {
			return $settings[ $name ];
		}

		return $default;
	}

	/**
	 * Load and print the template parts for the given post.
	 */
	public function load() {
		global $wp_query;
		$template = is_page() || $wp_query->is_posts_page ? 'page' : 'single';
		$this->load_parts( [ $template ] );
	}

	/**
	 * Load template parts.
	 *
	 * @param string[] $templates Templates.
	 */
	public function load_parts( $templates ) {
		foreach ( $templates as $template ) {
			$file = $this->get_template_path( $template );
			$this->verify_and_include( $file, $template );
		}
	}

	/**
	 * Get template path.
	 *
	 * @param string $template Template name.
	 * @return string Template path.
	 */
	private function get_template_path( $template ) {
		return sprintf( '%s/%s.php', $this->get_template_dir(), $template );
	}

	/**
	 * Add data.
	 *
	 * @param array $data Data.
	 */
	private function add_data( $data ) {
		$this->data = array_merge( $this->data, $data );
	}

	/**
	 * Add data by key.
	 *
	 * @param string $key   Key.
	 * @param mixed  $value Value.
	 */
	private function add_data_by_key( $key, $value ) {
		$this->data[ $key ] = $value;
	}

	/**
	 * Build post data.
	 *
	 * @since 0.2
	 */
	private function build_post_data() {
		$post_title              = get_the_title( $this->post );
		$post_publish_timestamp  = $this->build_post_publish_timestamp();
		$post_modified_timestamp = get_post_modified_time( 'U', false, $this->post );
		$post_author             = get_userdata( $this->post->post_author );

		$data = [
			'post'                    => $this->post,
			'post_id'                 => $this->ID,
			'post_title'              => $post_title,
			'post_publish_timestamp'  => $post_publish_timestamp,
			'post_modified_timestamp' => $post_modified_timestamp,
			'post_author'             => $post_author,
		];

		$this->add_data( $data );

		$this->build_post_featured_image();
		$this->build_post_comments_data();
	}

	/**
	 * Build post publish timestamp.
	 *
	 * We can't use `get_the_date( 'U' )` because it always returns the non-GMT value.
	 *
	 * @return int Post publish UTC timestamp.
	 */
	private function build_post_publish_timestamp() {
		$format = 'U';

		if ( empty( $this->post->post_date_gmt ) || '0000-00-00 00:00:00' === $this->post->post_date_gmt ) {
			$timestamp = time();
		} else {
			$timestamp = (int) get_post_time( $format, true, $this->post, true );
		}

		/** This filter is documented in wp-includes/general-template.php. */
		$filtered_timestamp = apply_filters( 'get_the_date', $timestamp, $format, $this->post );

		// Guard against a plugin poorly filtering get_the_date to be something other than a Unix timestamp.
		if ( is_int( $filtered_timestamp ) ) {
			$timestamp = $filtered_timestamp;
		}

		return $timestamp;
	}

	/**
	 * Build post comments data.
	 */
	private function build_post_comments_data() {
		if ( ! post_type_supports( $this->post->post_type, 'comments' ) ) {
			return;
		}

		$comments_open = comments_open( $this->post );

		// Don't show link if close and no comments.
		if ( ! $comments_open
			&& ! $this->post->comment_count ) {
			return;
		}

		$comments_link_url  = get_comments_link( $this->post );
		$comments_link_text = $comments_open
			? __( 'Leave a Comment', 'amp' )
			: __( 'View Comments', 'amp' );

		$this->add_data(
			[
				'comments_link_url'  => $comments_link_url,
				'comments_link_text' => $comments_link_text,
			]
		);
	}

	/**
	 * Build post content.
	 */
	private function build_post_content() {
		if ( post_password_required( $this->post ) ) {
			$content = get_the_password_form( $this->post );
		} else {
			/**
			 * This filter is documented in wp-includes/post-template.php.
			 *
			 * Note: This is intentionally not using get_the_content() because the legacy behavior of posts in
			 * Reader mode is to display multi-page posts as a single page without any pagination links.
			 */
			$content = apply_filters( 'the_content', $this->post->post_content );
		}

		$this->add_data_by_key( 'post_amp_content', $content );
	}

	/**
	 * Build post featured image.
	 */
	private function build_post_featured_image() {
		$post_id       = $this->ID;
		$featured_html = get_the_post_thumbnail( $post_id, 'large' );

		// Skip featured image if no featured image is available.
		if ( ! $featured_html ) {
			return;
		}

		$featured_id    = get_post_thumbnail_id( $post_id );
		$featured_image = get_post( $featured_id );
		if ( ! $featured_image ) {
			return;
		}

		// If an image with the same ID as the featured image exists in the content, skip the featured image markup.
		// Prevents duplicate images, which is especially problematic for photo blogs.
		// A bit crude but it's fast and should cover most cases.
		$post_content = $this->post->post_content;
		if ( false !== strpos( $post_content, 'wp-image-' . $featured_id )
			|| false !== strpos( $post_content, 'attachment_' . $featured_id ) ) {
			return;
		}

		$this->add_data_by_key(
			'featured_image',
			[
				'amp_html' => $featured_html,
				'caption'  => $featured_image->post_excerpt,
			]
		);
	}

	/**
	 * Build customizer settings.
	 */
	private function build_customizer_settings() {
		$settings = AMP_Customizer_Settings::get_settings();

		/**
		 * Filter AMP Customizer settings.
		 *
		 * Inject your Customizer settings here to make them accessible via the getter in your custom style.php template.
		 *
		 * Example:
		 *
		 *     echo esc_html( $this->get_customizer_setting( 'your_setting_key', 'your_default_value' ) );
		 *
		 * @since 0.4
		 *
		 * @param array   $settings Array of AMP Customizer settings.
		 * @param WP_Post $post     Current post object.
		 */
		$this->add_data_by_key( 'customizer_settings', apply_filters( 'amp_post_template_customizer_settings', $settings, $this->post ) );
	}

	/**
	 * Build HTML tag attributes.
	 */
	private function build_html_tag_attributes() {
		$attributes = [];

		if ( function_exists( 'is_rtl' ) && is_rtl() ) {
			$attributes['dir'] = 'rtl';
		}

		$lang = get_bloginfo( 'language' );
		if ( $lang ) {
			$attributes['lang'] = $lang;
		}

		$this->add_data_by_key( 'html_tag_attributes', $attributes );
	}

	/**
	 * Verify and include.
	 *
	 * @param string $file          File.
	 * @param string $template_type Template type.
	 */
	private function verify_and_include( $file, $template_type ) {
		$located_file = $this->locate_template( $file );
		if ( $located_file ) {
			$file = $located_file;
		}

		/**
		 * Filters the template file being loaded for a given template type.
		 *
		 * @since 0.2
		 *
		 * @param string  $file          Template file.
		 * @param string  $template_type Template type.
		 * @param WP_Post $post          Post.
		 */
		$file = apply_filters( 'amp_post_template_file', $file, $template_type, $this->post );
		if ( ! $this->is_valid_template( $file ) ) {
			/* translators: 1: the template file, 2: WP_CONTENT_DIR. */
			_doing_it_wrong( __METHOD__, sprintf( esc_html__( 'Path validation for template (%1$s) failed. Path cannot traverse and must be located in `%2$s`.', 'amp' ), esc_html( $file ), 'WP_CONTENT_DIR' ), '0.1' );
			return;
		}

		/**
		 * Fires before including a template.
		 *
		 * @since 0.4
		 *
		 * @param AMP_Post_Template $this Post template.
		 */
		do_action( "amp_post_template_include_{$template_type}", $this );
		include $file;
	}

	/**
	 * Locate template.
	 *
	 * @param string $file File.
	 * @return string The template filename if one is located.
	 */
	private function locate_template( $file ) {
		$search_file = sprintf( 'amp/%s', basename( $file ) );
		return locate_template( [ $search_file ], false );
	}

	/**
	 * Is valid template.
	 *
	 * @param string $template Template name.
	 * @return bool Whether valid.
	 */
	private function is_valid_template( $template ) {
		if ( false !== strpos( $template, '..' ) ) {
			return false;
		}

		if ( false !== strpos( $template, './' ) ) {
			return false;
		}

		if ( ! file_exists( $template ) ) {
			return false;
		}

		return true;
	}
}
PK.3Y�l;�==8bunyad-amp/includes/templates/reader-template-loader.php<?php
/**
 * Load the reader mode template.
 *
 * @package AMP
 */

/**
 * Queried post.
 *
 * @global WP_Post $post
 */
global $post;

// Populate the $post without calling the_post() to prevent entering The Loop. This ensures that templates which
// contain The Loop will still loop over the posts. Otherwise, if a template contains The Loop then calling the_post()
// here will advance the WP_Query::$current_post to the next_post. See WP_Query::the_post().
$post = get_queried_object(); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
setup_postdata( $post );

/**
 * Fires before rendering a post in AMP.
 *
 * This action is not triggered when 'amp' theme support is present. Instead, you should use 'template_redirect' action and check if `amp_is_request()`.
 *
 * @since 0.2
 *
 * @param int $post_id Post ID.
 */
do_action( 'pre_amp_render_post', get_queried_object_id() );

require_once AMP__DIR__ . '/includes/amp-post-template-functions.php';
amp_post_template_init_hooks();

$amp_post_template = new AMP_Post_Template( $post );
$amp_post_template->load();
PK.3Y��T�551bunyad-amp/includes/utils/class-amp-dom-utils.php<?php
/**
 * Class AMP_DOM_Utils.
 *
 * @package AMP
 */

use AmpProject\AmpWP\Dom\Options;
use AmpProject\Dom\Document;
use AmpProject\Dom\Element;
use AmpProject\Html\Tag;

/**
 * Class AMP_DOM_Utils
 *
 * Functionality to simplify working with Dom\Documents and DOMElements.
 *
 * @since 0.2
 */
class AMP_DOM_Utils {

	/**
	 * Regular expression pattern to match events and actions within an 'on' attribute.
	 *
	 * @since 1.4.0
	 * @var string
	 */
	const AMP_EVENT_ACTIONS_REGEX_PATTERN = '/((?<event>[^:;]+):(?<actions>(?:[^;,\(]+(?:\([^\)]+\))?,?)+))+?/';

	/**
	 * Regular expression pattern to match individual actions within an event.
	 *
	 * @since 1.4.0
	 * @var string
	 */
	const AMP_ACTION_REGEX_PATTERN = '/(?<action>[^(),\s]+(?:\([^\)]+\))?)+/';

	/**
	 * Regular expression pattern to match the contents of the <body> element.
	 *
	 * @since 1.5.0
	 * @var string
	 */
	const HTML_BODY_CONTENTS_PATTERN = '#^.*?<body.*?>(.*)</body>.*?$#si';

	/**
	 * Return a valid Dom\Document representing HTML document passed as a parameter.
	 *
	 * @since 0.7
	 * @see AMP_DOM_Utils::get_content_from_dom_node()
	 * @codeCoverageIgnore
	 * @deprecated Use AmpProject\Dom\Document::fromHtml( $html, $encoding ) instead.
	 *
	 * @param string $document Valid HTML document to be represented by a Dom\Document.
	 * @param string $encoding Optional. Encoding to use for the content.
	 * @return Document|false Returns Dom\Document, or false if conversion failed.
	 */
	public static function get_dom( $document, $encoding = null ) {
		_deprecated_function( __METHOD__, '1.5.0', 'AmpProject\Dom\Document::fromHtml()' );

		$options = Options::DEFAULTS;

		if ( null !== $encoding ) {
			$options[ Document\Option::ENCODING ] = $encoding;
		}

		return Document::fromHtml( $document, $options );
	}

	/**
	 * Determine whether a node can be in the head.
	 *
	 * @link https://github.com/ampproject/amphtml/blob/445d6e3be8a5063e2738c6f90fdcd57f2b6208be/validator/engine/htmlparser.js#L83-L100
	 * @link https://www.w3.org/TR/html5/document-metadata.html
	 * @codeCoverageIgnore
	 * @deprecated Use AmpProject\Dom\Document->isValidHeadNode() instead.
	 *
	 * @param DOMNode $node Node.
	 * @return bool Whether valid head node.
	 */
	public static function is_valid_head_node( DOMNode $node ) {
		_deprecated_function( __METHOD__, '1.5.0', 'AmpProject\Dom\Document->isValidHeadNode()' );
		return Document::fromNode( $node )->isValidHeadNode( $node );
	}

	/**
	 * Return a valid Dom\Document representing arbitrary HTML content passed as a parameter.
	 *
	 * @see Reciprocal function get_content_from_dom()
	 *
	 * @since 0.2
	 *
	 * @param string $content  Valid HTML content to be represented by a Dom\Document.
	 * @param string $encoding Optional. Encoding to use for the content. Defaults to `get_bloginfo( 'charset' )`.
	 *
	 * @return Document|false Returns a DOM document, or false if conversion failed.
	 */
	public static function get_dom_from_content( $content, $encoding = null ) {
		// Detect encoding from the current WordPress installation.
		if ( null === $encoding ) {
			$encoding = get_bloginfo( 'charset' );
		}

		/*
		 * Wrap in dummy tags, since XML needs one parent node.
		 * It also makes it easier to loop through nodes.
		 * We can later use this to extract our nodes.
		 */
		$document = "<html><head></head><body>{$content}</body></html>";

		$options                              = Options::DEFAULTS;
		$options[ Document\Option::ENCODING ] = $encoding;

		return Document::fromHtml( $document, $options );
	}

	/**
	 * Return valid HTML *body* content extracted from the Dom\Document passed as a parameter.
	 *
	 * @since 0.2
	 * @see AMP_DOM_Utils::get_content_from_dom_node() Reciprocal function.
	 *
	 * @param Document $dom Represents an HTML document from which to extract HTML content.
	 * @return string Returns the HTML content of the body element represented in the Dom\Document.
	 */
	public static function get_content_from_dom( Document $dom ) {
		return preg_replace(
			static::HTML_BODY_CONTENTS_PATTERN,
			'$1',
			$dom->saveHTML( $dom->body )
		);
	}

	/**
	 * Return valid HTML content extracted from the DOMNode passed as a parameter.
	 *
	 * @since 0.6
	 * @see AMP_DOM_Utils::get_dom() Where the operations in this method are mirrored.
	 * @see AMP_DOM_Utils::get_content_from_dom() Reciprocal function.
	 * @codeCoverageIgnore
	 * @deprecated Use Dom\Document->saveHtml( $node ) instead.
	 *
	 * @param Document   $dom  Represents an HTML document.
	 * @param DOMElement $node Represents an HTML element of the $dom from which to extract HTML content.
	 * @return string Returns the HTML content represented in the DOMNode
	 */
	public static function get_content_from_dom_node( Document $dom, $node ) {
		_deprecated_function( __METHOD__, '1.5.0', 'AmpProject\Dom\Document::saveHtml()' );
		return $dom->saveHTML( $node );
	}

	/**
	 * Create a new node w/attributes (a DOMElement) and add to the passed Dom\Document.
	 *
	 * @since 0.2
	 *
	 * @param Document $dom        A representation of an HTML document to add the new node to.
	 * @param string   $tag        A valid HTML element tag for the element to be added.
	 * @param string[] $attributes One of more valid attributes for the new node.
	 *
	 * @return Element|false The element for the given $tag, or false on failure
	 */
	public static function create_node( Document $dom, $tag, $attributes ) {
		$node = $dom->createElement( $tag );
		self::add_attributes_to_node( $node, $attributes );

		return $node;
	}

	/**
	 * Extract a DOMElement node's HTML element attributes and return as an array.
	 *
	 * @since 0.2
	 *
	 * @param DOMElement $node Represents an HTML element for which to extract attributes.
	 *
	 * @return string[] The attributes for the passed node, or an
	 *                  empty array if it has no attributes.
	 */
	public static function get_node_attributes_as_assoc_array( $node ) {
		$attributes = [];
		if ( ! $node->hasAttributes() ) {
			return $attributes;
		}

		foreach ( $node->attributes as $attribute ) {
			$attributes[ $attribute->nodeName ] = $attribute->nodeValue;
		}

		return $attributes;
	}

	/**
	 * Add one or more HTML element attributes to a node's DOMElement.
	 *
	 * @since 0.2
	 *
	 * @param DOMElement $node       Represents an HTML element.
	 * @param string[]   $attributes One or more attributes for the node's HTML element.
	 */
	public static function add_attributes_to_node( $node, $attributes ) {
		foreach ( $attributes as $name => $value ) {
			try {
				$node->setAttribute( $name, $value );
			} catch ( DOMException $e ) {
				/*
				 * Catch a "Invalid Character Error" when libxml is able to parse attributes with invalid characters,
				 * but it throws error when attempting to set them via DOM methods. For example, '...this' can be parsed
				 * as an attribute but it will throw an exception when attempting to setAttribute().
				 */
				continue;
			}
		}
	}

	/**
	 * Determines if a DOMElement's node is empty or not..
	 *
	 * @since 0.2
	 *
	 * @param DOMElement $node Represents an HTML element.
	 * @return bool Returns true if the DOMElement has no child nodes and
	 *              the textContent property of the DOMElement is empty;
	 *              Otherwise it returns false.
	 */
	public static function is_node_empty( $node ) {
		return false === $node->hasChildNodes() && empty( $node->textContent );
	}

	/**
	 * Forces HTML element closing tags given a Dom\Document and optional DOMElement.
	 *
	 * @since 0.2
	 * @codeCoverageIgnore
	 * @deprecated
	 * @internal
	 *
	 * @param Document   $dom  Represents HTML document on which to force closing tags.
	 * @param DOMElement $node Represents HTML element to start closing tags on.
	 *                         If not passed, defaults to first child of body.
	 */
	public static function recursive_force_closing_tags( $dom, $node = null ) {
		_deprecated_function( __METHOD__, '0.7' );

		if ( null === $node ) {
			$node = $dom->body;
		}

		if ( XML_ELEMENT_NODE !== $node->nodeType ) {
			return;
		}

		if ( self::is_self_closing_tag( $node->nodeName ) ) {
			/*
			 * Ensure there is no text content to accidentally force a child
			 */
			$node->textContent = '';
			return;
		}

		if ( self::is_node_empty( $node ) ) {
			$text_node = $dom->createTextNode( '' );
			$node->appendChild( $text_node );

			return;
		}

		$num_children = $node->childNodes->length;
		for ( $i = $num_children - 1; $i >= 0; $i -- ) {
			$child = $node->childNodes->item( $i );
			self::recursive_force_closing_tags( $dom, $child );
		}

	}

	/**
	 * Determines if an HTML element tag is validly a self-closing tag per W3C HTML5 specs.
	 *
	 * @since 0.2
	 *
	 * @param string $tag Tag.
	 * @return bool Returns true if a valid self-closing tag, false if not.
	 */
	private static function is_self_closing_tag( $tag ) {
		return in_array( strtolower( $tag ), Tag::SELF_CLOSING_TAGS, true );
	}

	/**
	 * Check whether a given element has a specific class.
	 *
	 * @since 1.4.0
	 *
	 * @param DOMElement $element Element to check the classes of.
	 * @param string     $class   Class to check for.
	 * @return bool Whether the element has the requested class.
	 */
	public static function has_class( DOMElement $element, $class ) {
		if ( ! $element->hasAttribute( 'class' ) ) {
			return false;
		}

		$classes = $element->getAttribute( 'class' );

		return in_array( $class, preg_split( '/\s/', $classes ), true );
	}

	/**
	 * Get the ID for an element.
	 *
	 * If the element does not have an ID, create one first.
	 *
	 * @since 1.4.0
	 * @since 1.5.1 Deprecated for AmpProject\Dom\Document::getElementId()
	 *
	 * @deprecated Use AmpProject\Dom\Document::getElementId() instead.
	 *
	 * @param DOMElement|Element $element Element to get the ID for.
	 * @param string             $prefix  Optional. Defaults to 'amp-wp-id'.
	 * @return string ID to use.
	 */
	public static function get_element_id( $element, $prefix = 'amp-wp-id' ) {
		_deprecated_function(
			'AMP_DOM_Utils::get_element_id',
			'1.5.1',
			'Use AmpProject\Amp\Dom\Document::getElementId() instead'
		);

		return Document::fromNode( $element )->getElementId( $element, $prefix );
	}

	/**
	 * Register an AMP action to an event on a given element.
	 *
	 * If the element already contains one or more events or actions, the method
	 * will assemble them in a smart way.
	 *
	 * @since 1.4.0
	 *
	 * @param DOMElement $element Element to add an action to.
	 * @param string     $event   Event to trigger the action on.
	 * @param string     $action  Action to add.
	 */
	public static function add_amp_action( DOMElement $element, $event, $action ) {
		$event_action_string = "{$event}:{$action}";

		if ( ! $element->hasAttribute( 'on' ) ) {
			// There's no "on" attribute yet, so just add it and be done.
			$element->setAttribute( 'on', $event_action_string );
			return;
		}

		$element->setAttribute(
			'on',
			self::merge_amp_actions(
				$element->getAttribute( 'on' ),
				$event_action_string
			)
		);
	}

	/**
	 * Merge two sets of AMP events & actions.
	 *
	 * @since 1.4.0
	 *
	 * @param string $first  First event/action string.
	 * @param string $second First event/action string.
	 * @return string Merged event/action string.
	 */
	public static function merge_amp_actions( $first, $second ) {
		$events = [];
		foreach ( [ $first, $second ] as $event_action_string ) {
			$matches = [];
			$results = preg_match_all( self::AMP_EVENT_ACTIONS_REGEX_PATTERN, $event_action_string, $matches );

			if ( ! $results || ! isset( $matches['event'] ) ) {
				continue;
			}

			foreach ( $matches['event'] as $index => $event ) {
				$events[ $event ][] = $matches['actions'][ $index ];
			}
		}

		$value_strings = [];
		foreach ( $events as $event => $action_strings_array ) {
			$actions_array = [];
			array_walk(
				$action_strings_array,
				static function ( $actions ) use ( &$actions_array ) {
					$matches = [];
					$results = preg_match_all( self::AMP_ACTION_REGEX_PATTERN, $actions, $matches );

					if ( ! $results || ! isset( $matches['action'] ) ) {
						$actions_array[] = $actions;
						return;
					}

					$actions_array = array_merge( $actions_array, $matches['action'] );
				}
			);

			$actions         = implode( ',', array_unique( array_filter( $actions_array ) ) );
			$value_strings[] = "{$event}:{$actions}";
		}

		return implode( ';', $value_strings );
	}

	/**
	 * Copy one or more attributes from one element to the other.
	 *
	 * @param array|string $attributes        Attribute name or array of attribute names to copy.
	 * @param DOMElement   $from              DOM element to copy the attributes from.
	 * @param DOMElement   $to                DOM element to copy the attributes to.
	 * @param string       $default_separator Default separator to use for multiple values if the attribute is not known.
	 */
	public static function copy_attributes( $attributes, DOMElement $from, DOMElement $to, $default_separator = ',' ) {
		foreach ( (array) $attributes as $attribute ) {
			if ( $from->hasAttribute( $attribute ) ) {
				$values = $from->getAttribute( $attribute );
				if ( $to->hasAttribute( $attribute ) ) {
					switch ( $attribute ) {
						case 'on':
							$values = self::merge_amp_actions( $to->getAttribute( $attribute ), $values );
							break;
						case 'class':
							$values = $to->getAttribute( $attribute ) . ' ' . $values;
							break;
						default:
							$values = $to->getAttribute( $attribute ) . $default_separator . $values;
					}
				}
				$to->setAttribute( $attribute, $values );
			}
		}
	}
}
PK.3Y�Q��2bunyad-amp/includes/utils/class-amp-html-utils.php<?php
/**
 * Class AMP_HTML_Utils
 *
 * @package AMP
 */

/**
 * Class with static HTML utility methods.
 *
 * @internal
 */
class AMP_HTML_Utils {

	/**
	 * Generates HTML markup for a given tag, attributes and content.
	 *
	 * @param string $tag_name   Tag name.
	 * @param array  $attributes Associative array of $attribute => $value pairs.
	 * @param string $content    Inner content for the generated node.
	 * @return string HTML markup.
	 */
	public static function build_tag( $tag_name, $attributes = [], $content = '' ) {
		$attr_string = self::build_attributes_string( $attributes );
		return sprintf( '<%1$s %2$s>%3$s</%1$s>', sanitize_key( $tag_name ), $attr_string, $content );
	}

	/**
	 * Generates a HTML attributes string from given attributes.
	 *
	 * @param array $attributes Associative array of $attribute => $value pairs.
	 * @return string HTML attributes string.
	 */
	public static function build_attributes_string( $attributes ) {
		$string = [];
		foreach ( $attributes as $name => $value ) {
			if ( '' === $value ) {
				$string[] = sprintf( '%s', sanitize_key( $name ) );
			} else {
				$string[] = sprintf( '%s="%s"', sanitize_key( $name ), esc_attr( $value ) );
			}
		}
		return implode( ' ', $string );
	}

	/**
	 * Checks whether the given string is valid JSON.
	 *
	 * @param string $data String hopefully containing JSON.
	 * @return bool True if the string is valid JSON, false otherwise.
	 */
	public static function is_valid_json( $data ) {
		json_decode( $data );
		return ( json_last_error() === JSON_ERROR_NONE );
	}
}
PK.3YN
�m�5�5Abunyad-amp/includes/utils/class-amp-image-dimension-extractor.php<?php
/**
 * Class AMP_Image_Dimension_Extractor
 *
 * @package AMP
 */

/**
 * Class with static methods to extract image dimensions.
 *
 * @internal
 */
class AMP_Image_Dimension_Extractor {

	const STATUS_FAILED_LAST_ATTEMPT     = 'failed';
	const STATUS_IMAGE_EXTRACTION_FAILED = 'failed';

	/**
	 * Internal flag whether callbacks have been registered.
	 *
	 * @var bool
	 */
	private static $callbacks_registered = false;

	/**
	 * Extracts dimensions from image URLs.
	 *
	 * @since 0.2
	 *
	 * @param array|string $urls Array of URLs to extract dimensions from, or a single URL string.
	 * @return array|string Extracted dimensions keyed by original URL, or else the single set of dimensions if one URL string is passed.
	 */
	public static function extract( $urls ) {
		if ( ! self::$callbacks_registered ) {
			self::register_callbacks();
		}

		$return_dimensions = [];

		// Back-compat for users calling this method directly.
		$is_single = is_string( $urls );
		if ( $is_single ) {
			$urls = [ $urls ];
		}

		// Normalize URLs and also track a map of normalized-to-original as we'll need it to reformat things when returning the data.
		$url_map         = [];
		$normalized_urls = [];
		foreach ( $urls as $original_url ) {
			$normalized_url = self::normalize_url( $original_url );
			if ( false !== $normalized_url ) {
				$url_map[ $original_url ] = $normalized_url;
				$normalized_urls[]        = $normalized_url;
			} else {
				// This is not a URL we can extract dimensions from, so default to false.
				$return_dimensions[ $original_url ] = false;
			}
		}

		$extracted_dimensions = array_fill_keys( $normalized_urls, false );

		/**
		 * Filters the dimensions extracted from image URLs.
		 *
		 * @since 0.5.1
		 *
		 * @param array $extracted_dimensions Extracted dimensions, initially mapping images URLs to false.
		 */
		$extracted_dimensions = apply_filters( 'amp_extract_image_dimensions_batch', $extracted_dimensions );

		// We need to return a map with the original (un-normalized URL) as we that to match nodes that need dimensions.
		foreach ( $url_map as $original_url => $normalized_url ) {
			$return_dimensions[ $original_url ] = $extracted_dimensions[ $normalized_url ];
		}

		// Back-compat: just return the dimensions, not the full mapped array.
		if ( $is_single ) {
			return current( $return_dimensions );
		}

		return $return_dimensions;
	}

	/**
	 * Normalizes the given URL.
	 *
	 * This method ensures the URL has a scheme and, if relative, is prepended the WordPress site URL.
	 *
	 * @param string $url URL to normalize.
	 * @return string|false Normalized URL, or false if normalization failed.
	 */
	public static function normalize_url( $url ) {
		if ( empty( $url ) ) {
			return false;
		}

		if ( 0 === strpos( $url, 'data:' ) ) {
			return false;
		}

		$normalized_url = $url;

		if ( 0 === strpos( $url, '//' ) ) {
			$normalized_url = set_url_scheme( $url, 'http' );
		} else {
			$parsed = wp_parse_url( $url );
			if ( ! isset( $parsed['host'] ) ) {
				$path = '';
				if ( isset( $parsed['path'] ) ) {
					$path .= $parsed['path'];
				}
				if ( isset( $parsed['query'] ) ) {
					$path .= '?' . $parsed['query'];
				}
				$home      = home_url();
				$home_path = wp_parse_url( $home, PHP_URL_PATH );
				if ( ! empty( $home_path ) ) {
					$home = substr( $home, 0, - strlen( $home_path ) );
				}
				$normalized_url = $home . $path;
			}
		}

		/**
		 * Apply filters on the normalized image URL for dimension extraction.
		 *
		 * @since 1.1
		 *
		 * @param string $normalized_url Normalized image URL.
		 * @param string $url            Original image URL.
		 */
		$normalized_url = apply_filters( 'amp_normalized_dimension_extractor_image_url', $normalized_url, $url );

		return $normalized_url;
	}

	/**
	 * Registers the necessary callbacks.
	 */
	private static function register_callbacks() {
		self::$callbacks_registered = true;

		add_filter( 'amp_extract_image_dimensions_batch', [ __CLASS__, 'extract_by_filename_or_filesystem' ], 100 );
		add_filter( 'amp_extract_image_dimensions_batch', [ __CLASS__, 'extract_by_downloading_images' ], 999, 1 );

		/**
		 * Fires after the amp_extract_image_dimensions_batch filter has been added to extract by downloading images.
		 *
		 * @since 0.5.1
		 */
		do_action( 'amp_extract_image_dimensions_batch_callbacks_registered' );
	}

	/**
	 * Extract dimensions from filename if dimension exists or from file system.
	 *
	 * @param array $dimensions Image urls mapped to dimensions.
	 * @return array Dimensions mapped to image urls, or false if they could not be retrieved
	 */
	public static function extract_by_filename_or_filesystem( $dimensions ) {

		if ( empty( $dimensions ) || ! is_array( $dimensions ) ) {
			return [];
		}

		$using_ext_object_cache = wp_using_ext_object_cache();
		$ext_types              = wp_get_ext_types();
		if ( empty( $ext_types['image'] ) ) {
			return $dimensions;
		}
		$image_ext_types = $ext_types['image'];
		unset( $ext_types );

		$upload_dir      = wp_get_upload_dir();
		$base_upload_uri = trailingslashit( $upload_dir['baseurl'] );
		$base_upload_dir = trailingslashit( $upload_dir['basedir'] );

		foreach ( $dimensions as $url => $value ) {

			// Check whether some other callback attached to the filter already provided dimensions for this image.
			if ( ! empty( $value ) && is_array( $value ) ) {
				continue;
			}

			$url_without_query_fragment = strtok( $url, '?#' );

			// Parse info out of the URL, including the file extension and (optionally) the dimensions.
			if ( ! preg_match( '/(?:-(?<width>[1-9][0-9]*)x(?<height>[1-9][0-9]*))?\.(?<ext>\w+)$/', $url_without_query_fragment, $matches ) ) {
				continue;
			}

			// Skip images don't have recognized extensions.
			if ( ! in_array( strtolower( $matches['ext'] ), $image_ext_types, true ) ) {
				continue;
			}

			// Use image dimension from the file name.
			if ( ! empty( $matches['width'] ) && ! empty( $matches['height'] ) ) {
				$dimensions[ $url ] = [
					'width'  => (int) $matches['width'],
					'height' => (int) $matches['height'],
				];
				continue;
			}

			// Verify that the URL is for an uploaded file.
			if ( 0 !== strpos( $url_without_query_fragment, $base_upload_uri ) ) {
				continue;
			}
			$upload_relative_path = substr( $url_without_query_fragment, strlen( $base_upload_uri ) );

			// Bail if the URL contains relative paths.
			if ( 0 !== validate_file( $upload_relative_path ) ) {
				continue;
			}

			// Get image dimension from file system.
			$image_file = $base_upload_dir . $upload_relative_path;

			$image_size = [];

			list( $transient_name ) = self::get_transient_names( $url );

			// When using an external object cache, try to first see if dimensions have already been obtained. This is
			// not done for a non-external object cache (i.e. when wp_options is used for transients) because then
			// we are not storing the dimensions in a transient, because it is more performant to read the dimensions
			// from the filesystem--both in terms of time and storage--than to store dimensions in wp_options.
			if ( $using_ext_object_cache ) {
				$image_size = get_transient( $transient_name );
				$image_size = ( ! empty( $image_size ) && is_array( $image_size ) ) ? $image_size : [];
			}

			if ( empty( $image_size ) && file_exists( $image_file ) ) {
				if ( function_exists( 'wp_getimagesize' ) ) {
					$image_size = wp_getimagesize( $image_file );
				} elseif ( function_exists( 'getimagesize' ) ) {
					$image_size = @getimagesize( $image_file ); // phpcs:ignore WordPress.PHP.NoSilencedErrors
				}

				if ( $using_ext_object_cache && ! empty( $image_size ) && is_array( $image_size ) ) {
					set_transient( $transient_name, $image_size );
				}
			}

			if ( ! empty( $image_size ) && is_array( $image_size ) ) {
				$dimensions[ $url ] = [
					'width'  => (int) $image_size[0],
					'height' => (int) $image_size[1],
				];
			}
		}

		return $dimensions;
	}

	/**
	 * Get transient names.
	 *
	 * @param string $url Image URL.
	 * @return array {
	 *     @type string $0 Transient name for storing dimensions.
	 *     @type string $1 Transient name for image fetching lock.
	 * }
	 */
	private static function get_transient_names( $url ) {
		$url_hash = md5( $url );
		return [
			sprintf( 'amp_img_%s', $url_hash ),
			sprintf( 'amp_lock_%s', $url_hash ),
		];
	}

	/**
	 * Extract dimensions from downloaded images (or transient/cached dimensions from downloaded images)
	 *
	 * @param array $dimensions Image urls mapped to dimensions.
	 * @param bool  $mode       Deprecated.
	 * @return array Dimensions mapped to image urls, or false if they could not be retrieved
	 */
	public static function extract_by_downloading_images( $dimensions, $mode = false ) {
		if ( $mode ) {
			_deprecated_argument( __METHOD__, 'AMP 1.1' );
		}

		$transient_expiration = 30 * DAY_IN_SECONDS;

		$urls_to_fetch = [];
		$images        = [];

		self::determine_which_images_to_fetch( $dimensions, $urls_to_fetch );
		try {
			self::fetch_images( $urls_to_fetch, $images );
			self::process_fetched_images( $urls_to_fetch, $images, $dimensions, $transient_expiration );
		} catch ( Exception $exception ) {
			trigger_error( esc_html( $exception->getMessage() ), E_USER_WARNING ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_trigger_error
		}

		return $dimensions;
	}

	/**
	 * Determine which images to fetch by checking for dimensions in transient/cache.
	 * Creates a short lived transient that acts as a semaphore so that another visitor
	 * doesn't trigger a remote fetch for the same image at the same time.
	 *
	 * @param array $dimensions Image urls mapped to dimensions.
	 * @param array $urls_to_fetch Urls of images to fetch because dimensions are not in transient/cache.
	 */
	private static function determine_which_images_to_fetch( &$dimensions, &$urls_to_fetch ) {
		foreach ( $dimensions as $url => $value ) {

			// Check whether some other callback attached to the filter already provided dimensions for this image.
			if ( is_array( $value ) || empty( $url ) ) {
				continue;
			}

			list( $transient_name, $transient_lock_name ) = self::get_transient_names( $url );

			$cached_dimensions = get_transient( $transient_name );

			// If we're able to retrieve the dimensions from a transient, set them and move on.
			if ( is_array( $cached_dimensions ) ) {
				$dimensions[ $url ] = [
					'width'  => $cached_dimensions[0],
					'height' => $cached_dimensions[1],
				];
				continue;
			}

			// If the value in the transient reflects we couldn't get dimensions for this image the last time we tried, move on.
			if ( self::STATUS_FAILED_LAST_ATTEMPT === $cached_dimensions ) {
				$dimensions[ $url ] = false;
				continue;
			}

			// If somebody is already trying to extract dimensions for this transient right now, move on.
			if ( false !== get_transient( $transient_lock_name ) ) {
				$dimensions[ $url ] = false;
				continue;
			}

			// Include the image as a url to fetch.
			$urls_to_fetch[ $url ]                        = [];
			$urls_to_fetch[ $url ]['url']                 = $url;
			$urls_to_fetch[ $url ]['transient_name']      = $transient_name;
			$urls_to_fetch[ $url ]['transient_lock_name'] = $transient_lock_name;
			set_transient( $transient_lock_name, 1, MINUTE_IN_SECONDS );
		}
	}

	/**
	 * Fetch dimensions of remote images
	 *
	 * @throws Exception When cURL handle cannot be added.
	 *
	 * @param array $urls_to_fetch Image src urls to fetch.
	 * @param array $images Array to populate with results of image/dimension inspection.
	 */
	private static function fetch_images( $urls_to_fetch, &$images ) {
		$urls   = array_keys( $urls_to_fetch );
		$client = new \FasterImage\FasterImage();

		/**
		 * Filters the user agent for obtaining the image dimensions.
		 *
		 * @param string $user_agent User agent.
		 */
		$client->setUserAgent( apply_filters( 'amp_extract_image_dimensions_get_user_agent', self::get_default_user_agent() ) );
		$client->setBufferSize( 1024 );
		$client->setSslVerifyHost( true );
		$client->setSslVerifyPeer( true );

		$images = $client->batch( $urls );
	}

	/**
	 * Determine success or failure of remote fetch, integrate fetched dimensions into url to dimension mapping,
	 * cache fetched dimensions via transient and release/delete semaphore transient
	 *
	 * @param array $urls_to_fetch List of image urls that were fetched and transient names corresponding to each (for unlocking semaphore, setting "real" transient).
	 * @param array $images Results of remote fetch mapping fetched image url to dimensions.
	 * @param array $dimensions Map of image url to dimensions to be updated with results of remote fetch.
	 * @param int   $transient_expiration Duration image dimensions should exist in transient/cache.
	 */
	private static function process_fetched_images( $urls_to_fetch, $images, &$dimensions, $transient_expiration ) {
		foreach ( $urls_to_fetch as $url_data ) {
			$image_data = $images[ $url_data['url'] ];
			if ( self::STATUS_IMAGE_EXTRACTION_FAILED === $image_data['size'] ) {
				$dimensions[ $url_data['url'] ] = false;
				set_transient( $url_data['transient_name'], self::STATUS_FAILED_LAST_ATTEMPT, $transient_expiration );
			} else {
				$dimensions[ $url_data['url'] ] = [
					'width'  => $image_data['size'][0],
					'height' => $image_data['size'][1],
				];
				set_transient(
					$url_data['transient_name'],
					[
						$image_data['size'][0],
						$image_data['size'][1],
					],
					$transient_expiration
				);
			}
			delete_transient( $url_data['transient_lock_name'] );
		}
	}

	/**
	 * Get default user agent
	 *
	 * @return string
	 */
	public static function get_default_user_agent() {
		return 'amp-wp, v' . AMP__VERSION . ', ' . home_url();
	}
}
PK.3Yi�|JJ4bunyad-amp/includes/utils/class-amp-string-utils.php<?php
/**
 * Class AMP_String_Utils
 *
 * @package AMP
 */

/**
 * Class with static string utility methods.
 *
 * @internal
 */
class AMP_String_Utils {

	/**
	 * Checks whether a given string ends in the given substring.
	 *
	 * @param string $haystack Input string.
	 * @param string $needle   Substring to look for at the end of $haystack.
	 * @return bool True if $haystack ends in $needle, false otherwise.
	 */
	public static function endswith( $haystack, $needle ) {
		return '' !== $haystack
			&& '' !== $needle
			&& substr( $haystack, -strlen( $needle ) ) === $needle;
	}
}
PK.3Y �c_����Dbunyad-amp/includes/validation/class-amp-validated-url-post-type.php<?php
/**
 * Class AMP_Validated_URL_Post_Type
 *
 * @package AMP
 */

use AmpProject\AmpWP\Admin\OptionsMenu;
use AmpProject\AmpWP\Admin\ValidationCounts;
use AmpProject\AmpWP\Icon;
use AmpProject\AmpWP\Option;
use AmpProject\AmpWP\QueryVar;
use AmpProject\AmpWP\Services;

/**
 * Class AMP_Validated_URL_Post_Type
 *
 * @since 1.0
 * @internal
 */
class AMP_Validated_URL_Post_Type {

	/**
	 * The slug of the post type to store URLs that have AMP errors.
	 *
	 * @var string
	 */
	const POST_TYPE_SLUG = 'amp_validated_url';

	/**
	 * Postmeta key for storing stylesheet data.
	 *
	 * @var string
	 */
	const STYLESHEETS_POST_META_KEY = '_amp_stylesheets';

	/**
	 * Postmeta key for storing queried object data.
	 *
	 * @var string
	 */
	const QUERIED_OBJECT_POST_META_KEY = '_amp_queried_object';

	/**
	 * Postmeta key for storing validated environment data.
	 *
	 * @var string
	 */
	const VALIDATED_ENVIRONMENT_POST_META_KEY = '_amp_validated_environment';

	/**
	 * Postmeta key for storing PHP fatal error data.
	 *
	 * @var string
	 */
	const PHP_FATAL_ERROR_POST_META_KEY = '_amp_php_fatal_error';

	/**
	 * The action to recheck URLs for AMP validity.
	 *
	 * @var string
	 */
	const VALIDATE_ACTION = 'amp_validate';

	/**
	 * The action to bulk recheck URLs for AMP validity.
	 *
	 * @var string
	 */
	const BULK_VALIDATE_ACTION = 'amp_bulk_validate';

	/**
	 * Action to update the status of AMP validation errors.
	 *
	 * @var string
	 */
	const UPDATE_POST_TERM_STATUS_ACTION = 'amp_update_validation_error_status';

	/**
	 * The query arg for whether there are remaining errors after rechecking URLs.
	 *
	 * @var string
	 */
	const REMAINING_ERRORS = 'amp_remaining_errors';

	/**
	 * The handle for the post edit screen script.
	 *
	 * @var string
	 */
	const EDIT_POST_SCRIPT_HANDLE = 'amp-validated-url-post-edit-screen';

	/**
	 * The query arg for the number of URLs tested.
	 *
	 * @var string
	 */
	const URLS_TESTED = 'amp_urls_tested';

	/**
	 * The nonce action for rechecking a URL.
	 *
	 * @var string
	 */
	const NONCE_ACTION = 'amp_recheck_';

	/**
	 * The name of the side meta box on the CPT post.php page.
	 *
	 * @var string
	 */
	const STATUS_META_BOX = 'amp_validation_status';

	/**
	 * The transient key to use for caching the number of URLs with new validation errors.
	 *
	 * @var string
	 */
	const NEW_VALIDATION_ERROR_URLS_COUNT_TRANSIENT = 'amp_new_validation_error_urls_count';

	/**
	 * The name of the input that captures the current state of validation errors.
	 *
	 * @var string
	 */
	const VALIDATION_ERRORS_INPUT_KEY = 'validation_errors';

	/**
	 * The total number of errors associated with a URL, regardless of the maximum that can display.
	 *
	 * @var int
	 */
	public static $total_errors_for_url;

	/**
	 * Registers the post type to store URLs with validation errors.
	 *
	 * @return void
	 */
	public static function register() {
		add_action( 'amp_plugin_update', [ __CLASS__, 'handle_plugin_update' ] );

		$dev_tools_user_access = Services::get( 'dev_tools.user_access' );

		// Show in the admin menu if dev tools are enabled for the user or if the user is on any dev tools screen.
		$show_in_menu = (
			$dev_tools_user_access->is_user_enabled()
			||
			( isset( $_GET['post_type'] ) && self::POST_TYPE_SLUG === $_GET['post_type'] ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			||
			( isset( $_GET['post'], $_GET['action'] ) && 'edit' === $_GET['action'] && self::POST_TYPE_SLUG === get_post_type( (int) $_GET['post'] ) ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			||
			( isset( $_GET['taxonomy'] ) && AMP_Validation_Error_Taxonomy::TAXONOMY_SLUG === $_GET['taxonomy'] ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended
		);
		if ( $show_in_menu && current_user_can( 'manage_options' ) ) {
			$show_in_menu = AMP_Options_Manager::OPTION_NAME;
		}

		register_post_type(
			self::POST_TYPE_SLUG,
			[
				'labels'       => [
					'all_items'          => __( 'All Validated URLs', 'amp' ),
					'name'               => _x( 'AMP Validated URLs', 'post type general name', 'amp' ),
					'menu_name'          => __( 'Validated URLs', 'amp' ),
					'singular_name'      => __( 'Validated URL', 'amp' ),
					'not_found'          => __( 'No validated URLs found', 'amp' ),
					'not_found_in_trash' => __( 'No forgotten validated URLs', 'amp' ),
					'search_items'       => __( 'Search validated URLs', 'amp' ),
					'edit_item'          => ' ', // Overwritten in JS, so this prevents the page header from appearing and changing.
				],
				'supports'     => false,
				'public'       => false,
				'show_ui'      => true,
				'show_in_menu' => $show_in_menu,
				'map_meta_cap' => false,
				'capabilities' => array_merge(
					array_fill_keys(
						[
							'edit_post',
							'read_post',
							'delete_post',
							'edit_posts',
							'edit_others_posts',
							'delete_posts',
							'publish_posts',
							'read_private_posts',
						],
						AMP_Validation_Manager::VALIDATE_CAPABILITY
					),
					[
						// Hide the add new post link, as new posts are created programmatically.
						'create_posts' => 'do_not_allow',
					]
				),
				// @todo Show in rest.
			]
		);

		if ( $show_in_menu ) {
			add_action( 'admin_menu', [ __CLASS__, 'update_validated_url_menu_item' ] );
		}

		// Rename the top-level menu from "Validated URLs" to "AMP DevTools" when the user does not have access to the AMP settings screen.
		if ( $show_in_menu && ! current_user_can( 'manage_options' ) ) {
			add_action(
				'admin_menu',
				static function () {
					global $menu;
					foreach ( $menu as &$menu_item ) {
						if ( 'edit.php?post_type=' . self::POST_TYPE_SLUG === $menu_item[2] ) {
							$menu_item[0] = esc_html__( 'AMP DevTools', 'amp' );
							$menu_item[6] = OptionsMenu::ICON_BASE64_SVG;
							break;
						}
					}
				}
			);
		}

		// Ensure cached count of URLs with new validation errors is flushed whenever a URL is updated, trashed, or deleted.
		$handle_delete = static function ( $post_id ) {
			if ( static::POST_TYPE_SLUG === get_post_type( $post_id ) ) {
				delete_transient( static::NEW_VALIDATION_ERROR_URLS_COUNT_TRANSIENT );
				delete_transient( AMP_Validation_Error_Taxonomy::TRANSIENT_KEY_ERROR_INDEX_COUNTS );
			}
		};
		add_action( 'save_post_' . self::POST_TYPE_SLUG, $handle_delete );
		add_action( 'trash_post', $handle_delete );
		add_action( 'delete_post', $handle_delete );

		if ( is_admin() ) {
			self::add_admin_hooks();
		}
	}

	/**
	 * Handle update to plugin.
	 *
	 * @param string $old_version Old version.
	 */
	public static function handle_plugin_update( $old_version ) {

		// Update the old post type slug from amp_invalid_url to amp_validated_url.
		if ( '1.0-' === substr( $old_version, 0, 4 ) || version_compare( $old_version, '1.0', '<' ) ) {
			global $wpdb;
			$post_ids = get_posts(
				[
					'post_type'      => 'amp_invalid_url',
					'fields'         => 'ids',
					'posts_per_page' => -1,
				]
			);
			foreach ( $post_ids as $post_id ) {
				// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery
				$wpdb->update(
					$wpdb->posts,
					[ 'post_type' => self::POST_TYPE_SLUG ],
					[ 'ID' => $post_id ]
				);
				clean_post_cache( $post_id );
			}
		}
	}

	/**
	 * Add admin hooks.
	 */
	public static function add_admin_hooks() {
		add_action( 'admin_enqueue_scripts', [ __CLASS__, 'enqueue_post_list_screen_scripts' ] );

		// Edit post screen hooks.
		add_action( 'admin_enqueue_scripts', [ __CLASS__, 'enqueue_edit_post_screen_scripts' ] );
		add_action( 'add_meta_boxes', [ __CLASS__, 'add_meta_boxes' ], PHP_INT_MAX );
		add_action( 'edit_form_after_title', [ __CLASS__, 'render_single_url_list_table' ] );
		add_filter( 'edit_' . AMP_Validation_Error_Taxonomy::TAXONOMY_SLUG . '_per_page', [ __CLASS__, 'get_terms_per_page' ] );
		add_action( 'admin_init', [ __CLASS__, 'add_taxonomy' ] );
		add_action( 'edit_form_top', [ __CLASS__, 'print_url_as_title' ] );

		// Post list screen hooks.
		add_filter(
			'view_mode_post_types',
			static function( $post_types ) {
				return array_diff( $post_types, [ AMP_Validated_URL_Post_Type::POST_TYPE_SLUG ] );
			}
		);
		add_action(
			'load-edit.php',
			static function() {
				if ( 'edit-' . AMP_Validated_URL_Post_Type::POST_TYPE_SLUG !== get_current_screen()->id ) {
					return;
				}
				add_action(
					'admin_head-edit.php',
					static function() {
						global $mode;
						$mode = 'list'; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
					}
				);
			}
		);
		add_action( 'admin_notices', [ __CLASS__, 'render_link_to_error_index_screen' ] );
		add_filter( 'the_title', [ __CLASS__, 'filter_the_title_in_post_list_table' ], 10, 2 );
		add_action( 'restrict_manage_posts', [ __CLASS__, 'render_post_filters' ], 10, 2 );
		add_filter( 'manage_' . self::POST_TYPE_SLUG . '_posts_columns', [ __CLASS__, 'add_post_columns' ] );
		add_filter( 'manage_' . self::POST_TYPE_SLUG . '_columns', [ __CLASS__, 'add_single_post_columns' ] );
		add_action( 'manage_posts_custom_column', [ __CLASS__, 'output_custom_column' ], 10, 2 );
		add_filter( 'bulk_actions-edit-' . self::POST_TYPE_SLUG, [ __CLASS__, 'filter_bulk_actions' ], 10, 2 );
		add_filter( 'bulk_actions-' . self::POST_TYPE_SLUG, '__return_false' );
		add_filter( 'handle_bulk_actions-edit-' . self::POST_TYPE_SLUG, [ __CLASS__, 'handle_bulk_action' ], 10, 3 );
		add_action( 'admin_notices', [ __CLASS__, 'print_admin_notice' ] );
		add_action( 'admin_action_' . self::VALIDATE_ACTION, [ __CLASS__, 'handle_validate_request' ] );
		add_action( 'post_action_' . self::UPDATE_POST_TERM_STATUS_ACTION, [ __CLASS__, 'handle_validation_error_status_update' ] );
		add_filter( 'post_row_actions', [ __CLASS__, 'filter_post_row_actions' ], PHP_INT_MAX - 1, 2 );
		add_filter( sprintf( 'views_edit-%s', self::POST_TYPE_SLUG ), [ __CLASS__, 'filter_table_views' ] );
		add_filter( 'bulk_post_updated_messages', [ __CLASS__, 'filter_bulk_post_updated_messages' ], 10, 2 );
		add_filter( 'admin_title', [ __CLASS__, 'filter_admin_title' ] );

		// Hide irrelevant "published" label in the AMP Validated URLs post list.
		add_filter(
			'post_date_column_status',
			static function ( $status, $post ) {
				if ( AMP_Validated_URL_Post_Type::POST_TYPE_SLUG === get_post_type( $post ) ) {
					$status = '';
				}

				return $status;
			},
			10,
			2
		);

		// Prevent query vars from persisting after redirect.
		add_filter(
			'removable_query_args',
			static function ( $query_vars ) {
				$query_vars[] = 'amp_actioned';
				$query_vars[] = 'amp_taxonomy_terms_updated';
				$query_vars[] = AMP_Validated_URL_Post_Type::REMAINING_ERRORS;
				$query_vars[] = 'amp_urls_tested';
				$query_vars[] = 'amp_validate_error';

				return $query_vars;
			}
		);
	}

	/**
	 * Enqueue style.
	 */
	public static function enqueue_post_list_screen_scripts() {
		$screen = get_current_screen();

		if ( ! $screen instanceof \WP_Screen ) {
			return;
		}

		// Enqueue this on both the 'AMP Validated URLs' page and the single URL page.
		if ( 'edit-' . self::POST_TYPE_SLUG === $screen->id || self::POST_TYPE_SLUG === $screen->id ) {
			wp_enqueue_style(
				'amp-admin-tables',
				amp_get_asset_url( 'css/admin-tables.css' ),
				[ 'amp-icons' ],
				AMP__VERSION
			);

			wp_styles()->add_data( 'amp-admin-tables', 'rtl', 'replace' );
		}

		if ( 'edit-' . self::POST_TYPE_SLUG !== $screen->id ) {
			return;
		}

		wp_register_style(
			'amp-validation-tooltips',
			amp_get_asset_url( 'css/amp-validation-tooltips.css' ),
			[ 'wp-pointer' ],
			AMP__VERSION
		);

		wp_styles()->add_data( 'amp-validation-tooltips', 'rtl', 'replace' );

		$asset_file   = AMP__DIR__ . '/assets/js/amp-validation-tooltips.asset.php';
		$asset        = require $asset_file;
		$dependencies = $asset['dependencies'];
		$version      = $asset['version'];

		wp_register_script(
			'amp-validation-tooltips',
			amp_get_asset_url( 'js/amp-validation-tooltips.js' ),
			$dependencies,
			$version,
			true
		);

		wp_enqueue_style(
			'amp-validation-error-taxonomy',
			amp_get_asset_url( 'css/amp-validation-error-taxonomy.css' ),
			[ 'common', 'amp-validation-tooltips', 'amp-icons' ],
			AMP__VERSION
		);

		wp_styles()->add_data( 'amp-validation-error-taxonomy', 'rtl', 'replace' );

		wp_enqueue_script(
			'amp-validation-detail-toggle',
			amp_get_asset_url( 'js/amp-validation-detail-toggle.js' ),
			[ 'wp-dom-ready', 'wp-i18n', 'amp-validation-tooltips' ],
			AMP__VERSION,
			true
		);
	}

	/**
	 * On the 'AMP Validated URLs' screen, renders a link to the 'Error Index' page.
	 *
	 * @see AMP_Validation_Error_Taxonomy::render_link_to_invalid_urls_screen()
	 */
	public static function render_link_to_error_index_screen() {
		if ( ! ( get_current_screen() && 'edit' === get_current_screen()->base && self::POST_TYPE_SLUG === get_current_screen()->post_type ) ) {
			return;
		}

		$taxonomy_object = get_taxonomy( AMP_Validation_Error_Taxonomy::TAXONOMY_SLUG );
		if ( ! current_user_can( $taxonomy_object->cap->manage_terms ) ) {
			return;
		}

		$id = 'link-errors-index';

		printf(
			'<a href="%s" hidden class="page-title-action" id="%s" style="margin-left: 1rem;">%s</a>',
			esc_url( get_admin_url( null, 'edit-tags.php?taxonomy=' . AMP_Validation_Error_Taxonomy::TAXONOMY_SLUG . '&post_type=' . self::POST_TYPE_SLUG ) ),
			esc_attr( $id ),
			esc_html__( 'View Error Index', 'amp' )
		);

		?>
		<script>
			jQuery( function( $ ) {
				// Move the link to after the heading, as it also looks like there's no action for this.
				$( <?php echo wp_json_encode( '#' . $id ); ?> ).removeAttr( 'hidden' ).insertAfter( $( '.wp-heading-inline' ) );
			} );
		</script>
		<?php
	}

	/**
	 * Update the "Validated URLs" menu item label and append a count of how many validation error posts there are
	 * next to it.
	 *
	 * @global array $submenu
	 */
	public static function update_validated_url_menu_item() {
		global $submenu;

		$post_type_menu_slug = 'edit.php?post_type=' . self::POST_TYPE_SLUG;
		$parent_menu_slug    = current_user_can( 'manage_options' ) ? AMP_Options_Manager::OPTION_NAME : $post_type_menu_slug;

		if ( ! isset( $submenu[ $parent_menu_slug ] ) ) {
			return;
		}

		foreach ( $submenu[ $parent_menu_slug ] as &$submenu_item ) {
			if ( $post_type_menu_slug === $submenu_item[2] ) {
				// Use the `menu_name` label as the submenu label instead of the `all_items` label.
				$menu_name_label = get_post_type_object( self::POST_TYPE_SLUG )->labels->menu_name;
				$submenu_item[0] = $menu_name_label;

				if ( ValidationCounts::is_needed() ) {
					// Append markup to display a loading spinner while the unreviewed count is being fetched.
					$submenu_item[0] .= ' <span id="amp-new-validation-url-count"></span>';
				}

				break;
			}
		}
	}

	/**
	 * Get the count of URLs that have new validation errors.
	 *
	 * @since 1.3
	 *
	 * @return int Count of new validation error URLs.
	 */
	public static function get_validation_error_urls_count() {
		$count = get_transient( static::NEW_VALIDATION_ERROR_URLS_COUNT_TRANSIENT );
		if ( false !== $count ) {
			// Handle case where integer stored in transient gets returned as string when persistent object cache is not
			// used. This is due to wp_options.option_value being a string.
			return (int) $count;
		}

		// Make sure filter is added in REST API context which is otherwise only added via AMP_Validation_Error_Taxonomy::add_admin_hooks().
		$callback   = [ AMP_Validation_Error_Taxonomy::class, 'filter_posts_where_for_validation_error_status' ];
		$priority   = 10;
		$has_filter = has_filter( 'posts_where', $callback );
		if ( false === $has_filter ) {
			add_filter( 'posts_where', $callback, $priority, 2 );
		}

		$query = new WP_Query(
			[
				'post_type'              => self::POST_TYPE_SLUG,
				AMP_Validation_Error_Taxonomy::VALIDATION_ERROR_STATUS_QUERY_VAR => [
					AMP_Validation_Error_Taxonomy::VALIDATION_ERROR_NEW_REJECTED_STATUS,
					AMP_Validation_Error_Taxonomy::VALIDATION_ERROR_NEW_ACCEPTED_STATUS,
				],
				'update_post_meta_cache' => false,
				'update_post_term_cache' => false,
			]
		);

		// Remove filter if we added it in this method.
		if ( false === $has_filter ) {
			remove_filter( 'posts_where', $callback, $priority );
		}

		$count = $query->found_posts;

		set_transient( static::NEW_VALIDATION_ERROR_URLS_COUNT_TRANSIENT, $count, DAY_IN_SECONDS );

		return $count;
	}

	/**
	 * Gets validation errors for a given validated URL post.
	 *
	 * @param string|int|WP_Post $url Either the URL string or a post (ID or WP_Post) of amp_validated_url type.
	 * @param array              $args {
	 *     Args.
	 *
	 *     @type bool $ignore_accepted Exclude validation errors that are accepted (invalid markup removed). Default false.
	 * }
	 * @return array List of errors, with keys for term, data, status, and (sanitization) forced.
	 */
	public static function get_invalid_url_validation_errors( $url, $args = [] ) {
		$args = array_merge(
			[
				'ignore_accepted' => false,
			],
			$args
		);

		// Look up post by URL or ensure the amp_validated_url object.
		if ( is_string( $url ) ) {
			$post = self::get_invalid_url_post( $url );
		} else {
			$post = get_post( $url );
		}
		if ( ! $post || self::POST_TYPE_SLUG !== $post->post_type ) {
			return [];
		}

		// Skip when parse error.
		$stored_validation_errors = json_decode( $post->post_content, true );
		if ( ! is_array( $stored_validation_errors ) ) {
			return [];
		}

		$errors = [];
		foreach ( $stored_validation_errors as $stored_validation_error ) {
			if ( ! isset( $stored_validation_error['term_slug'] ) ) {
				continue;
			}

			$term = AMP_Validation_Error_Taxonomy::get_term( $stored_validation_error['term_slug'] );
			if ( ! $term ) {
				continue;
			}

			$sanitization = AMP_Validation_Error_Taxonomy::get_validation_error_sanitization( $stored_validation_error['data'] );
			if ( $args['ignore_accepted'] && ( AMP_Validation_Error_Taxonomy::VALIDATION_ERROR_NEW_ACCEPTED_STATUS === $sanitization['status'] || AMP_Validation_Error_Taxonomy::VALIDATION_ERROR_ACK_ACCEPTED_STATUS === $sanitization['status'] ) ) {
				continue;
			}

			$errors[] = array_merge(
				[
					'term' => $term,
					'data' => $stored_validation_error['data'],
				],
				$sanitization
			);
		}
		return $errors;
	}

	/**
	 * Display summary of the validation error counts for a given post.
	 *
	 * @param int|WP_Post $post Post of amp_validated_url type.
	 */
	public static function display_invalid_url_validation_error_counts_summary( $post ) {
		$validation_errors = self::get_invalid_url_validation_errors( $post );
		$counts            = self::count_invalid_url_validation_errors( $validation_errors );

		$removed_count = ( $counts['new_accepted'] + $counts['ack_accepted'] );
		$kept_count    = ( $counts['new_rejected'] + $counts['ack_rejected'] );

		$result = [];

		if ( $kept_count ) {
			$title = '';
			if ( $counts['new_rejected'] > 0 && $counts['ack_rejected'] > 0 ) {
				$title = sprintf(
					/* translators: %s is the count of new validation errors */
					_n(
						'%s validation error with kept markup is new',
						'%s validation errors with kept markup are new',
						$counts['new_rejected'],
						'amp'
					),
					$counts['new_rejected']
				);
			}
			$result[] = sprintf(
				'<span class="status-text %s" title="%s">%s %s: %s</span>',
				esc_attr( $counts['new_rejected'] > 0 ? 'has-new' : '' ),
				esc_attr( $title ),
				Icon::invalid()->to_html(),
				esc_html__( 'Invalid markup kept', 'amp' ),
				number_format_i18n( $kept_count )
			);
		}
		if ( $removed_count ) {
			$title = '';
			if ( $counts['new_accepted'] > 0 && $counts['ack_accepted'] > 0 ) {
				$title = sprintf(
					/* translators: %s is the count of new validation errors */
					_n(
						'%s validation error with removed markup is new',
						'%s validation errors with removed markup are new',
						$counts['new_rejected'],
						'amp'
					),
					$counts['new_accepted']
				);
			}
			$icon     = ( $counts['new_accepted'] + $counts['new_rejected'] ) > 0 ? Icon::removed() : Icon::valid();
			$result[] = sprintf(
				'<span class="status-text %s" title="%s">%s %s: %s</span>',
				esc_attr( $counts['new_accepted'] > 0 ? 'has-new' : '' ),
				esc_attr( $title ),
				$icon->to_html(),
				esc_html__( 'Invalid markup removed', 'amp' ),
				number_format_i18n( $removed_count )
			);
		}
		if ( 0 === $removed_count && 0 === $kept_count ) {
			$result[] = sprintf(
				'<span class="status-text">%s %s</span>',
				Icon::valid()->to_html(),
				esc_html__( 'All markup valid', 'amp' )
			);
		}

		echo implode( '', $result ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped

		printf( '<input class="amp-validation-error-new" type="hidden" value="%d">', (int) ( $counts['new_accepted'] + $counts['new_rejected'] > 0 ) );
	}

	/**
	 * Gets the existing custom post that stores errors for the $url, if it exists.
	 *
	 * @param string $url     The (in)valid URL.
	 * @param array  $options {
	 *     Options.
	 *
	 *     @type bool $normalize       Whether to normalize the URL.
	 *     @type bool $include_trashed Include trashed.
	 * }
	 * @return WP_Post|null The post of the existing custom post, or null.
	 */
	public static function get_invalid_url_post( $url, $options = [] ) {
		$default = [
			'normalize'       => true,
			'include_trashed' => false,
		];
		$options = wp_parse_args( $options, $default );

		if ( $options['normalize'] ) {
			$url = self::normalize_url_for_storage( $url );
		}
		$slug = md5( $url );

		$post = get_page_by_path( $slug, OBJECT, self::POST_TYPE_SLUG );
		if ( $post instanceof WP_Post ) {
			return $post;
		}

		if ( $options['include_trashed'] ) {
			$post = get_page_by_path( $slug . '__trashed', OBJECT, self::POST_TYPE_SLUG );
			if ( $post instanceof WP_Post ) {
				return $post;
			}
		}

		return null;
	}

	/**
	 * Get the URL from a given amp_validated_url post.
	 *
	 * The URL will be returned with the amp query var added to it if the site is not canonical. The post_title
	 * is always stored using the canonical AMP-less URL.
	 *
	 * @param int|WP_Post $post Post.
	 * @return string|null The URL stored for the post or null if post does not exist or it is not the right type.
	 */
	public static function get_url_from_post( $post ) {
		$post = get_post( $post );
		if ( ! $post || self::POST_TYPE_SLUG !== $post->post_type ) {
			return null;
		}
		$url = $post->post_title;

		// Add AMP query var if in transitional mode.
		if ( ! amp_is_canonical() ) {
			$url = amp_add_paired_endpoint( $url );
		}

		// Set URL scheme based on whether HTTPS is current.
		$url = set_url_scheme( $url, ( 'http' === wp_parse_url( home_url(), PHP_URL_SCHEME ) ) ? 'http' : 'https' );

		return $url;
	}

	/**
	 * Get the markup status preview URL.
	 *
	 * Adds a _wpnonce query param for the markup status preview action.
	 *
	 * @since 1.5.0
	 *
	 * @param string $url Frontend URL to preview markup status changes.
	 * @return string Preview URL.
	 */
	protected static function get_markup_status_preview_url( $url ) {
		return add_query_arg(
			'_wpnonce',
			wp_create_nonce( AMP_Validation_Manager::MARKUP_STATUS_PREVIEW_ACTION ),
			$url
		);
	}

	/**
	 * Normalize a URL for storage.
	 *
	 * The AMP query param is removed to facilitate switching between standard and transitional.
	 * The URL scheme is also normalized to HTTPS to help with transition from HTTP to HTTPS.
	 *
	 * @param string $url URL.
	 * @return string Normalized URL.
	 */
	public static function normalize_url_for_storage( $url ) {
		// Only ever store the canonical version.
		if ( ! amp_is_canonical() ) {
			$url = amp_remove_paired_endpoint( $url );
		}

		// Remove fragment identifier in the rare case it could be provided. It is irrelevant for validation.
		$url = strtok( $url, '#' );

		// Query args to be removed from validated URLs.
		$removable_query_vars = array_merge(
			wp_removable_query_args(),
			[ 'preview_id', 'preview_nonce', 'preview', QueryVar::NOAMP, AMP_Validation_Manager::VALIDATE_QUERY_VAR ]
		);

		// Normalize query args, removing all that are not recognized or which are removable.
		$url_parts = explode( '?', $url, 2 );
		if ( 2 === count( $url_parts ) ) {
			$args = wp_parse_args( $url_parts[1] );
			foreach ( $removable_query_vars as $removable_query_arg ) {
				unset( $args[ $removable_query_arg ] );
			}
			$url = $url_parts[0];
			if ( ! empty( $args ) ) {
				$url = $url_parts[0] . '?' . build_query( $args );
			}
		}

		// Normalize the scheme as HTTPS.
		$url = set_url_scheme( $url, 'https' );

		return $url;
	}

	/**
	 * Stores the validation errors.
	 *
	 * If there are no validation errors provided, then any existing amp_validated_url post is deleted.
	 *
	 * @param array  $validation_errors Validation errors.
	 * @param string $url               URL on which the validation errors occurred. Will be normalized to non-AMP version.
	 * @param array  $args {
	 *     Args.
	 *
	 *     @type int|WP_Post $invalid_url_post Post to update. Optional. If empty, then post is looked up by URL.
	 *     @type array       $queried_object   Queried object, including keys for type and id. May be empty.
	 *     @type array       $stylesheets      Stylesheet data. May be empty.
	 *     @type array       $php_fatal_error  PHP Fatal Error. May be empty.
	 * }
	 * @return int|WP_Error $post_id The post ID of the custom post type used, or WP_Error on failure.
	 * @global WP $wp
	 */
	public static function store_validation_errors( $validation_errors, $url, $args = [] ) {
		$url  = self::normalize_url_for_storage( $url );
		$slug = md5( $url );
		$post = null;
		if ( ! empty( $args['invalid_url_post'] ) ) {
			$post = get_post( $args['invalid_url_post'] );
		}
		if ( ! $post ) {
			$post = self::get_invalid_url_post(
				$url,
				[
					'include_trashed' => true,
					'normalize'       => false, // Since already normalized.
				]
			);
		}

		/*
		 * The details for individual validation errors is stored in the amp_validation_error taxonomy terms.
		 * The post content just contains the slugs for these terms and the sources for the given instance of
		 * the validation error.
		 */
		$stored_validation_errors = [];

		// Prevent Kses from corrupting JSON in description.
		$pre_term_description_filters = [
			'wp_filter_kses'       => has_filter( 'pre_term_description', 'wp_filter_kses' ),
			'wp_targeted_link_rel' => has_filter( 'pre_term_description', 'wp_targeted_link_rel' ),
		];
		foreach ( $pre_term_description_filters as $callback => $priority ) {
			if ( false !== $priority ) {
				remove_filter( 'pre_term_description', $callback, $priority );
			}
		}

		$terms = [];
		foreach ( $validation_errors as $data ) {
			$term_data = AMP_Validation_Error_Taxonomy::prepare_validation_error_taxonomy_term( $data );
			$term_slug = $term_data['slug'];

			if ( ! isset( $terms[ $term_slug ] ) ) {
				// Not using WP_Term_Query since more likely individual terms are cached and wp_insert_term() will itself look at this cache anyway.
				$term = AMP_Validation_Error_Taxonomy::get_term( $term_slug );
				if ( ! ( $term instanceof WP_Term ) ) {
					/*
					 * The default term_group is 0 so that is AMP_Validation_Error_Taxonomy::VALIDATION_ERROR_NEW_REJECTED_STATUS.
					 * If sanitization auto-acceptance is enabled, then the term_group will be updated below.
					 */
					$r = wp_insert_term( $term_slug, AMP_Validation_Error_Taxonomy::TAXONOMY_SLUG, wp_slash( $term_data ) );
					if ( is_wp_error( $r ) ) {
						continue;
					}
					$term_id = $r['term_id'];
					update_term_meta( $term_id, 'created_date_gmt', current_time( 'mysql', true ) );

					/*
					 * When sanitization is forced by filter, make sure the term is created with the filtered status.
					 * For some reason, the wp_insert_term() function doesn't work with the term_group being passed in.
					 */
					$sanitization = AMP_Validation_Error_Taxonomy::get_validation_error_sanitization( $data );
					if ( 'with_filter' === $sanitization['forced'] ) {
						$term_data['term_group'] = $sanitization['status'];
						wp_update_term(
							$term_id,
							AMP_Validation_Error_Taxonomy::TAXONOMY_SLUG,
							[
								'term_group' => $sanitization['status'],
							]
						);
					} elseif ( AMP_Validation_Manager::is_sanitization_auto_accepted( $data ) ) {
						$term_data['term_group'] = AMP_Validation_Error_Taxonomy::VALIDATION_ERROR_NEW_ACCEPTED_STATUS;
						wp_update_term(
							$term_id,
							AMP_Validation_Error_Taxonomy::TAXONOMY_SLUG,
							[
								'term_group' => $term_data['term_group'],
							]
						);
					}

					$term = get_term( $term_id );
				}
				$terms[ $term_slug ] = $term;
			}

			$stored_validation_errors[] = compact( 'term_slug', 'data' );
		}

		// Finish preventing Kses from corrupting JSON in description.
		foreach ( $pre_term_description_filters as $callback => $priority ) {
			if ( false !== $priority ) {
				add_filter( 'pre_term_description', $callback, $priority );
			}
		}

		$post_content = wp_json_encode( $stored_validation_errors );
		$placeholder  = 'amp_validated_url_content_placeholder' . wp_rand();

		// Guard against Kses from corrupting content by adding post_content after content_save_pre filter applies.
		$insert_post_content = static function( $post_data ) use ( $placeholder, $post_content ) {
			$should_supply_post_content = (
				isset( $post_data['post_content'], $post_data['post_type'] )
				&&
				$placeholder === $post_data['post_content']
				&&
				AMP_Validated_URL_Post_Type::POST_TYPE_SLUG === $post_data['post_type']
			);
			if ( $should_supply_post_content ) {
				$post_data['post_content'] = wp_slash( $post_content );
			}
			return $post_data;
		};
		add_filter( 'wp_insert_post_data', $insert_post_content );

		// Create a new invalid AMP URL post, or update the existing one.
		$r = wp_insert_post(
			wp_slash(
				[
					'ID'           => $post ? $post->ID : null,
					'post_type'    => self::POST_TYPE_SLUG,
					'post_title'   => $url,
					'post_name'    => $slug,
					'post_content' => $placeholder, // Content is provided via wp_insert_post_data filter above to guard against Kses-corruption.
					'post_status'  => 'publish',
				]
			),
			true
		);
		remove_filter( 'wp_insert_post_data', $insert_post_content );
		if ( is_wp_error( $r ) ) {
			return $r;
		}
		$post_id = $r;
		wp_set_object_terms( $post_id, wp_list_pluck( $terms, 'term_id' ), AMP_Validation_Error_Taxonomy::TAXONOMY_SLUG );

		update_post_meta( $post_id, self::VALIDATED_ENVIRONMENT_POST_META_KEY, self::get_validated_environment() );
		if ( isset( $args['queried_object'] ) ) {
			update_post_meta( $post_id, self::QUERIED_OBJECT_POST_META_KEY, $args['queried_object'] );
		}
		if ( isset( $args['stylesheets'] ) ) {
			// Note that json_encode() is being used here because wp_slash() will coerce scalar values to strings.
			update_post_meta( $post_id, self::STYLESHEETS_POST_META_KEY, wp_slash( wp_json_encode( $args['stylesheets'] ) ) );
		}
		if ( isset( $args['php_fatal_error'] ) ) {
			if ( empty( $args['php_fatal_error'] ) ) {
				delete_post_meta( $post_id, self::PHP_FATAL_ERROR_POST_META_KEY );
			} else {
				// Note that json_encode() is being used here because wp_slash() will coerce scalar values to strings.
				update_post_meta( $post_id, self::PHP_FATAL_ERROR_POST_META_KEY, wp_slash( wp_json_encode( $args['php_fatal_error'] ) ) );
			}
		}

		delete_transient( static::NEW_VALIDATION_ERROR_URLS_COUNT_TRANSIENT );

		return $post_id;
	}

	/**
	 * Delete batch of stylesheets postmeta.
	 *
	 * Given that parsed CSS can be quite large (250KB+) and is not de-duplicated across each validated URL, it is important
	 * to not store the stylesheet data indefinitely in order to not excessively bloat the database. The reality is that
	 * keeping around the parsed stylesheet data is of little value given that it will quickly go stale as themes and
	 * plugins are updated.
	 *
	 * @since 2.0
	 *
	 * @param int          $count  Count of batch size to delete.
	 * @param string|array $before Date before which to find amp_validated_url posts to delete.
	 *                             Accepts strtotime()-compatible string, or array of 'year', 'month', 'day' values.
	 * @return int Count of postmeta that were deleted.
	 */
	public static function delete_stylesheets_postmeta_batch( $count, $before ) {
		$deleted = 0;
		$query   = new WP_Query(
			[
				'post_type'      => self::POST_TYPE_SLUG,
				'meta_key'       => self::STYLESHEETS_POST_META_KEY,
				'date_query'     => [
					[
						'before' => $before,
					],
				],
				'fields'         => 'ids',
				'orderby'        => 'date',
				'order'          => 'ASC',
				'posts_per_page' => $count,
			]
		);
		foreach ( $query->get_posts() as $post_id ) {
			if ( delete_post_meta( $post_id, self::STYLESHEETS_POST_META_KEY ) ) {
				$deleted++;
			}
		}
		return $deleted;
	}

	/**
	 * Garbage-collect validated URL posts.
	 *
	 * Now with Site Scanning in v2.2, the most recently published post will be validated on a weekly basis. If the user
	 * never sees the list of Validated URLs--such as when the user doesn't have DevTools turned on--the end result is
	 * a perpetual increase in the number of validated URLs. Over time this will result in validation data taking up
	 * more and more of the database. When all of the validation errors associated with a validated URL are unreviewed,
	 * or if all of the validation errors are related to other validated URLs as well, then there is no need to keep
	 * the old validated URLs in perpetuity. They should be garbage-collected.
	 *
	 * @since 2.2
	 *
	 * @param int          $count  Count of batch size to delete. Default is 100.
	 * @param string|array $before Date before which to find amp_validated_url posts to delete.
	 *                             Accepts strtotime()-compatible string, or array of 'year', 'month', 'day' values.
	 * @return int Count of deleted posts.
	 */
	public static function garbage_collect_validated_urls( $count = 100, $before = '1 week ago' ) {
		$deleted = 0;

		// The random order in this query is needed in case the oldest 100 URLs end up not being eligible for garbage-
		// collection. In that case, garbage collection would get stuck. So by getting a random set of validated URLs
		// we can prevent the garbage collection from ceasing to function.
		$query = new WP_Query(
			[
				'post_type'      => self::POST_TYPE_SLUG,
				'orderby'        => 'rand', // phpcs:ignore WordPressVIPMinimum.Performance.OrderByRand.orderby_orderby -- Due to garbage collection, there should not be more than a dozen posts.
				'posts_per_page' => $count,
				'date_query'     => [
					[
						'before' => $before,
					],
				],
			]
		);
		foreach ( $query->get_posts() as $post ) {
			if ( ! self::is_post_safe_to_garbage_collect( $post ) ) {
				continue;
			}

			if ( wp_delete_post( $post->ID ) ) {
				$deleted++;
			}
		}

		return $deleted;
	}

	/**
	 * Check whether an amp_validated_url post is safe to garbage-collect.
	 *
	 * @since 2.2
	 *
	 * @param WP_Post $validated_url_post Validated URL post.
	 * @return bool Whether safe to garbage-collect.
	 */
	public static function is_post_safe_to_garbage_collect( WP_Post $validated_url_post ) {
		// Check sanity.
		if ( self::POST_TYPE_SLUG !== $validated_url_post->post_type ) {
			return false;
		}

		// Skip non-stale validated URLs.
		if ( count( self::get_post_staleness( $validated_url_post ) ) === 0 ) {
			return false;
		}

		$validation_error_terms = wp_get_post_terms( $validated_url_post->ID, AMP_Validation_Error_Taxonomy::TAXONOMY_SLUG );
		if ( ! is_array( $validation_error_terms ) ) {
			return false;
		}

		/** @var WP_Term[] $validation_error_terms */
		foreach ( $validation_error_terms as $validation_error_term ) {
			// If this error is associated with other URL(s), the reference count will remain non-zero if this validated
			// URL is garbage-collected, and thus the term will not be removed as part of the Clear Empty operation.
			if ( $validation_error_term->count > 1 ) {
				continue;
			}

			// If the validation error has been reviewed (aka acknowledged), then check to make sure that the
			// validation error is associated with at least one other URL. This is so that when a user clicks
			// Clear Empty they won't inadvertently clear out the reviewed validation error terms. This is only
			// relevant when the user has DevTools turned on, as this is the way that a term could have the
			// reviewed state in the first place.
			if (
				in_array(
					$validation_error_term->term_group,
					[
						AMP_Validation_Error_Taxonomy::VALIDATION_ERROR_ACK_ACCEPTED_STATUS,
						AMP_Validation_Error_Taxonomy::VALIDATION_ERROR_ACK_REJECTED_STATUS,
					],
					true
				)
			) {
				// This URL is the only one that is associated with the term, so it's not safe to garbage collect.
				return false;
			}

			// If the term's removal status is not the same as the default removed status for the validation
			// error, and this is the only instance of that validation error for a URL, then skip removing the URL.
			$is_sanitized = in_array(
				$validation_error_term->term_group,
				[
					AMP_Validation_Error_Taxonomy::VALIDATION_ERROR_NEW_ACCEPTED_STATUS,
					AMP_Validation_Error_Taxonomy::VALIDATION_ERROR_ACK_ACCEPTED_STATUS,
				],
				true
			);
			$error_data   = json_decode( $validation_error_term->description, true );
			if (
				is_array( $error_data )
				&&
				AMP_Validation_Manager::is_sanitization_auto_accepted( $error_data ) !== $is_sanitized
			) {
				return false;
			}
		}

		return true;
	}

	/**
	 * Get recent validation errors by source.
	 *
	 * @since 2.0
	 * @todo This can be stored in object cache, invalidated whenever a validated URL post is inserted/updated/deleted.
	 *
	 * @param int $count Maximum count of validated URLs to gather validation errors from.
	 * @return array Multidimensional array where root keys are source types, sub-keys are source names, and leaf arrays are the validation error terms, data, and the post IDs the error occurs on.
	 */
	public static function get_recent_validation_errors_by_source( $count = 100 ) {
		$posts = get_posts(
			[
				'post_type'      => self::POST_TYPE_SLUG,
				'posts_per_page' => $count,
				'orderby'        => 'date',
				'order'          => 'desc',
			]
		);

		$errors_by_source = [];

		foreach ( $posts as $post ) {
			// Skip validated URLs which are stale since results will be misleading.
			if ( self::get_post_staleness( $post ) ) {
				continue;
			}

			$validation_errors = self::get_invalid_url_validation_errors( $post );
			if ( empty( $validation_errors ) ) {
				continue;
			}

			foreach ( $validation_errors as $validation_error ) {
				if ( empty( $validation_error['data']['sources'] ) || ! $validation_error['term'] instanceof WP_Term ) {
					continue;
				}
				foreach ( $validation_error['data']['sources'] as $source ) {
					if ( ! isset( $source['type'], $source['name'] ) ) {
						continue;
					}
					$data = json_decode( $validation_error['term']->description, true );
					if ( ! is_array( $data ) ) {
						continue;
					}

					if ( ! isset( $errors_by_source[ $source['type'] ][ $source['name'] ][ $validation_error['term']->slug ] ) ) {
						$errors_by_source[ $source['type'] ][ $source['name'] ][ $validation_error['term']->slug ] = [
							'term'     => $validation_error['term'],
							'data'     => $data,
							'post_ids' => [],
						];
					}
					$errors_by_source[ $source['type'] ][ $source['name'] ][ $validation_error['term']->slug ]['post_ids'][] = $post->ID;
				}
			}
		}

		return $errors_by_source;
	}

	/**
	 * Get the environment properties which will likely effect whether validation results are stale.
	 *
	 * @return array Environment.
	 */
	public static function get_validated_environment() {
		$plugin_registry = Services::get( 'plugin_registry' );

		$theme     = [];
		$theme_obj = null;
		if ( Services::get( 'reader_theme_loader' )->is_enabled() ) {
			$theme_obj = Services::get( 'reader_theme_loader' )->get_reader_theme();
		}
		if ( ! $theme_obj instanceof WP_Theme ) {
			$theme_obj = wp_get_theme();
		}
		if ( ! $theme_obj->errors() ) {
			$theme[ $theme_obj->get_stylesheet() ] = $theme_obj->get( 'Version' );

			$parent_theme_obj = $theme_obj->parent();
			if ( $parent_theme_obj ) {
				$theme[ $parent_theme_obj->get_stylesheet() ] = $parent_theme_obj->get( 'Version' );
			}
		}

		return [
			'theme'   => $theme,
			'plugins' => wp_list_pluck( $plugin_registry->get_plugins( true, false ), 'Version' ), // @todo What about multiple plugins being in the same directory?
			'options' => wp_array_slice_assoc(
				AMP_Options_Manager::get_options(),
				[
					Option::ALL_TEMPLATES_SUPPORTED,
					Option::READER_THEME,
					Option::SUPPORTED_POST_TYPES,
					Option::SUPPORTED_TEMPLATES,
					Option::THEME_SUPPORT,
				]
			),
		];
	}

	/**
	 * Get the differences between the current themes, plugins, and relevant options when amp_validated_url post was last updated and now.
	 *
	 * @param int|WP_Post $post Post of amp_validated_url type.
	 * @return array {
	 *     Staleness of the validation results. An empty array if the results are fresh.
	 *
	 *     @type string $theme   The theme that was active but is no longer. Absent if theme is the same.
	 *     @type array  $plugins Plugins that used to be active but are no longer, or which are active now but weren't. Also includes plugins that have version updates. Absent if the plugins were the same.
	 *     @type array  $options Options that used to be set. Absent if the options were the same.
	 * }
	 */
	public static function get_post_staleness( $post ) {
		$post = get_post( $post );
		if ( empty( $post ) || self::POST_TYPE_SLUG !== $post->post_type ) {
			return [];
		}

		$old_validated_environment = get_post_meta( $post->ID, self::VALIDATED_ENVIRONMENT_POST_META_KEY, true );
		$new_validated_environment = self::get_validated_environment();

		$staleness = [];

		// Theme difference.
		if ( isset( $old_validated_environment['theme'] ) && $new_validated_environment['theme'] !== $old_validated_environment['theme'] ) {
			if ( is_string( $old_validated_environment['theme'] ) ) {
				$old_validated_environment['theme'] = [
					$old_validated_environment['theme'] => null,
				];
			}

			$new_active_theme = array_diff_assoc( $new_validated_environment['theme'], $old_validated_environment['theme'] );
			if ( ! empty( $new_active_theme ) ) {
				$staleness['theme']['new'] = array_keys( $new_active_theme );
			}
			$old_active_theme = array_diff_assoc( $old_validated_environment['theme'], $new_validated_environment['theme'] );
			if ( ! empty( $old_active_theme ) ) {
				$staleness['theme']['old'] = array_keys( $old_active_theme );
			}
		}

		// Plugin difference.
		if ( isset( $old_validated_environment['plugins'] ) ) {
			$new_active_plugins = array_diff_assoc( $new_validated_environment['plugins'], $old_validated_environment['plugins'] );
			if ( ! empty( $new_active_plugins ) ) {
				$staleness['plugins']['new'] = array_keys( $new_active_plugins );
			}
			$old_active_plugins = array_diff_assoc( $old_validated_environment['plugins'], $new_validated_environment['plugins'] );
			if ( ! empty( $old_active_plugins ) ) {
				$staleness['plugins']['old'] = array_keys( $old_active_plugins );
			}
		}

		// Options difference.
		if ( isset( $old_validated_environment['options'] ) ) {
			$old_options = $old_validated_environment['options'];
		} else {
			$old_options = [];
		}
		$option_differences = [];
		foreach ( $new_validated_environment['options'] as $option => $value ) {
			if ( ! isset( $old_options[ $option ] ) ) {
				$option_differences[ $option ] = null;
			} elseif ( $old_options[ $option ] !== $value ) {
				$option_differences[ $option ] = $old_options[ $option ];
			}
		}
		if ( ! empty( $option_differences ) ) {
			$staleness['options'] = $option_differences;
		}

		return $staleness;
	}

	/**
	 * Adds post columns to the UI for the validation errors.
	 *
	 * @param array $columns The post columns.
	 * @return array $columns The new post columns.
	 */
	public static function add_post_columns( $columns ) {
		$columns = array_merge(
			$columns,
			[
				AMP_Validation_Error_Taxonomy::ERROR_STATUS => sprintf(
					'%s<span class="dashicons dashicons-editor-help tooltip-button" tabindex="0"></span><div class="tooltip" hidden data-content="%s"></div>',
					esc_html__( 'Markup Status', 'amp' ),
					esc_attr(
						sprintf(
							'<h3>%s</h3><p>%s</p>',
							__( 'Markup Status', 'amp' ),
							__( 'When invalid markup is removed it will not block a URL from being served as AMP; the validation error will be sanitized, where the offending markup is stripped from the response to ensure AMP validity. If invalid AMP markup is kept, then URLs is occurs on will not be served as AMP pages.', 'amp' )
						)
					)
				),
				AMP_Validation_Error_Taxonomy::FOUND_ELEMENTS_AND_ATTRIBUTES => esc_html__( 'Invalid Markup', 'amp' ),
				AMP_Validation_Error_Taxonomy::SOURCES_INVALID_OUTPUT => esc_html__( 'Sources', 'amp' ),
				'css_usage' => esc_html__( 'CSS Usage', 'amp' ),
			]
		);

		if ( isset( $columns['title'] ) ) {
			$columns['title'] = esc_html__( 'URL', 'amp' );
		}

		// Move date to end.
		if ( isset( $columns['date'] ) ) {
			unset( $columns['date'] );
			$columns['date'] = esc_html__( 'Last Checked', 'amp' );
		}

		if ( ! empty( $_GET[ AMP_Validation_Error_Taxonomy::TAXONOMY_SLUG ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			unset( $columns['error_status'], $columns[ AMP_Validation_Error_Taxonomy::REMOVED_ELEMENTS ], $columns[ AMP_Validation_Error_Taxonomy::REMOVED_ATTRIBUTES ] );
			$columns[ AMP_Validation_Error_Taxonomy::SOURCES_INVALID_OUTPUT ] = esc_html__( 'Sources', 'amp' );
			$columns['date']  = esc_html__( 'Last Checked', 'amp' );
			$columns['title'] = esc_html__( 'URL', 'amp' );
		}

		return $columns;
	}

	/**
	 * Adds post columns to the /wp-admin/post.php page for amp_validated_url.
	 *
	 * @return array The filtered post columns.
	 */
	public static function add_single_post_columns() {
		return [
			'cb'                          => '<input type="checkbox" />',
			'error_code'                  => __( 'Error', 'amp' ),
			'error_type'                  => __( 'Type', 'amp' ),
			'details'                     => sprintf(
				'%s<span class="dashicons dashicons-editor-help tooltip-button" tabindex="0"></span><div class="tooltip" hidden data-content="%s"></div>',
				esc_html__( 'Context', 'amp' ),
				esc_attr(
					sprintf(
						'<h3>%s</h3><p>%s</p>',
						esc_html__( 'Context', 'amp' ),
						esc_html__( 'The parent element of where the error occurred.', 'amp' )
					)
				)
			),
			'sources_with_invalid_output' => __( 'Sources', 'amp' ),
			'status'                      => sprintf(
				'%s<span class="dashicons dashicons-editor-help tooltip-button" tabindex="0"></span><div class="tooltip" hidden data-content="%s"></div>',
				esc_html__( 'Markup Status', 'amp' ),
				esc_attr(
					sprintf(
						'<h3>%s</h3><p>%s</p>',
						esc_html__( 'Markup Status', 'amp' ),
						esc_html__( 'When invalid markup is removed it will not block a URL from being served as AMP; the validation error will be sanitized, where the offending markup is stripped from the response to ensure AMP validity. If invalid AMP markup is kept, then URLs is occurs on will not be served as AMP pages.', 'amp' )
					)
				)
			),
			'reviewed'                    => sprintf(
				'%s<span class="dashicons dashicons-editor-help tooltip-button" tabindex="0"></span><div class="tooltip" hidden data-content="%s"></div>',
				esc_html__( 'Reviewed', 'amp' ),
				esc_attr(
					sprintf(
						'<h3>%s</h3><p>%s</p>',
						esc_html__( 'Reviewed', 'amp' ),
						esc_html__( 'Confirm that the action being taken on the invalid markup (causing a validation error) has been seen and approved.', 'amp' )
					)
				)
			),
		];
	}

	/**
	 * Outputs custom columns in the /wp-admin UI for the AMP validation errors.
	 *
	 * @param string $column_name The name of the column.
	 * @param int    $post_id     The ID of the post for the column.
	 * @return void
	 */
	public static function output_custom_column( $column_name, $post_id ) {
		$post = get_post( $post_id );
		if ( self::POST_TYPE_SLUG !== $post->post_type ) {
			return;
		}

		$validation_errors = self::get_invalid_url_validation_errors( $post_id );
		$error_summary     = AMP_Validation_Error_Taxonomy::summarize_validation_errors( wp_list_pluck( $validation_errors, 'data' ) );

		switch ( $column_name ) {
			case 'error_status':
				$staleness = self::get_post_staleness( $post_id );
				if ( ! empty( $staleness ) ) {
					echo '<p><strong><em>' . esc_html__( 'Stale results', 'amp' ) . '</em></strong></p>';
				}
				self::display_invalid_url_validation_error_counts_summary( $post_id );
				break;
			case AMP_Validation_Error_Taxonomy::FOUND_ELEMENTS_AND_ATTRIBUTES:
				$items = [];
				if ( ! empty( $error_summary[ AMP_Validation_Error_Taxonomy::REMOVED_ELEMENTS ] ) ) {
					foreach ( $error_summary[ AMP_Validation_Error_Taxonomy::REMOVED_ELEMENTS ] as $name => $count ) {
						if ( 1 === (int) $count ) {
							$items[] = sprintf( '<code>&lt;%s&gt;</code>', esc_html( $name ) );
						} else {
							$items[] = sprintf( '<code>&lt;%s&gt;</code> (%d)', esc_html( $name ), $count );
						}
					}
				}
				if ( ! empty( $error_summary[ AMP_Validation_Error_Taxonomy::REMOVED_ATTRIBUTES ] ) ) {
					foreach ( $error_summary[ AMP_Validation_Error_Taxonomy::REMOVED_ATTRIBUTES ] as $name => $count ) {
						if ( 1 === (int) $count ) {
							$items[] = sprintf( '<code>%s</code>', esc_html( $name ) );
						} else {
							$items[] = sprintf( '<code>%s</code> (%d)', esc_html( $name ), $count );
						}
					}
				}
				if ( ! empty( $error_summary['removed_pis'] ) ) {
					foreach ( $error_summary['removed_pis'] as $name => $count ) {
						if ( 1 === (int) $count ) {
							$items[] = sprintf( '<code>&lt;?%s&hellip;?&gt;</code>', esc_html( $name ) );
						} else {
							$items[] = sprintf( '<code>&lt;?%s&hellip;?&gt;</code> (%d)', esc_html( $name ), $count );
						}
					}
				}
				if ( ! empty( $items ) ) {
					$imploded_items = implode( ',</div><div>', $items );
					echo sprintf( '<div>%s</div>', $imploded_items ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
				} else {
					esc_html_e( '--', 'amp' );
				}
				break;
			case 'css_usage':
				$style_custom_cdata_spec = null;
				foreach ( AMP_Allowed_Tags_Generated::get_allowed_tag( 'style' ) as $spec_rule ) {
					if ( isset( $spec_rule[ AMP_Rule_Spec::TAG_SPEC ]['spec_name'] ) && AMP_Style_Sanitizer::STYLE_AMP_CUSTOM_SPEC_NAME === $spec_rule[ AMP_Rule_Spec::TAG_SPEC ]['spec_name'] ) {
						$style_custom_cdata_spec = $spec_rule[ AMP_Rule_Spec::CDATA ];
					}
				}
				$stylesheets = json_decode( get_post_meta( $post->ID, self::STYLESHEETS_POST_META_KEY, true ), true );
				if ( ! is_array( $stylesheets ) || ! $style_custom_cdata_spec ) {
					echo esc_html( _x( 'n/a', 'CSS usage not available', 'amp' ) );
				} else {
					$total_size = 0;
					foreach ( $stylesheets as $stylesheet ) {
						if ( ! isset( $stylesheet['group'] ) || 'amp-custom' !== $stylesheet['group'] || ! empty( $stylesheet['duplicate'] ) ) {
							continue;
						}
						$total_size += $stylesheet['final_size'];
					}

					$css_usage_percentage = ( $total_size / $style_custom_cdata_spec['max_bytes'] ) * 100;
					if ( $css_usage_percentage > 100 ) {
						$color = '#a00'; // Red.
					} elseif ( $css_usage_percentage >= AMP_Style_Sanitizer::CSS_BUDGET_WARNING_PERCENTAGE ) {
						$color = '#d98500'; // Orange.
					} else {
						$color = '#006505'; // Green.
					}
					printf(
						'<span style="color:%s">%s%%</span>',
						esc_attr( $color ),
						esc_html( number_format_i18n( ceil( $css_usage_percentage ) ) )
					);
				}
				break;
			case AMP_Validation_Error_Taxonomy::SOURCES_INVALID_OUTPUT:
				if ( 0 === count( array_filter( $error_summary ) ) || empty( $error_summary[ AMP_Validation_Error_Taxonomy::SOURCES_INVALID_OUTPUT ] ) ) {
					esc_html_e( '--', 'amp' );
				} else {
					self::render_sources_column( $error_summary[ AMP_Validation_Error_Taxonomy::SOURCES_INVALID_OUTPUT ], $post_id );
				}
				break;
		}
	}

	/**
	 * Renders the sources column on the the single error URL page and the 'AMP Validated URLs' page.
	 *
	 * @param array $sources The summary of errors.
	 * @param int   $post_id The ID of the amp_validated_url post.
	 */
	public static function render_sources_column( $sources, $post_id ) {
		$active_theme          = null;
		$validated_environment = get_post_meta( $post_id, self::VALIDATED_ENVIRONMENT_POST_META_KEY, true );
		if ( isset( $validated_environment['theme'] ) ) {
			$active_theme = $validated_environment['theme'];
		}

		$output          = [];
		$plugin_registry = Services::get( 'plugin_registry' );
		foreach ( wp_array_slice_assoc( $sources, [ 'plugin', 'mu-plugin' ] ) as $type => $slugs ) {
			$plugin_names = [];
			$plugin_slugs = array_unique( $slugs );
			foreach ( $plugin_slugs as $plugin_slug ) {
				if ( 'mu-plugin' === $type ) {
					$plugin_names[] = $plugin_slug;
				} else {
					// Skip including Gutenberg in the summary if there is another plugin, since Gutenberg is like core.
					if ( 'gutenberg' === $plugin_slug && count( $slugs ) > 1 ) {
						continue;
					}

					$plugin_name = $plugin_slug;
					$plugin      = $plugin_registry->get_plugin_from_slug( $plugin_slug );
					if ( $plugin ) {
						$plugin_name = $plugin['data']['Name'];
					}
					$plugin_names[] = $plugin_name;
				}
			}
			$count = count( $plugin_names );
			if ( 1 === $count ) {
				$output[] = sprintf( '<strong class="source"><span class="dashicons dashicons-admin-plugins"></span>%s</strong>', esc_html( $plugin_names[0] ) );
			} else {
				$output[] = '<details class="source">';
				$output[] = sprintf(
					'<summary class="details-attributes__summary"><strong class="source"><span class="dashicons dashicons-admin-plugins"></span>%s (%d)</strong></summary>',
					'mu-plugin' === $type ? esc_html__( 'Must-Use Plugins', 'amp' ) : esc_html__( 'Plugins', 'amp' ),
					$count
				);
				$output[] = '<div>';
				$output[] = implode( '<br/>', array_unique( $plugin_names ) );
				$output[] = '</div>';
				$output[] = '</details>';
			}
		}
		if ( isset( $sources['theme'] ) && empty( $sources['embed'] ) ) {
			foreach ( array_unique( $sources['theme'] ) as $theme_slug ) {
				$theme_obj = wp_get_theme( $theme_slug );
				if ( ! $theme_obj->errors() ) {
					$theme_name = $theme_obj->get( 'Name' );
				} else {
					$theme_name = $theme_slug;
				}
				$output[] = sprintf( '<strong class="source"><span class="dashicons dashicons-admin-appearance"></span>%s</strong>', esc_html( $theme_name ) );
			}
		}
		if ( isset( $sources['core'] ) ) {
			$core_sources = array_unique( $sources['core'] );
			$count        = count( $core_sources );
			if ( 1 === $count ) {
				$output[] = sprintf( '<strong class="source"><span class="dashicons dashicons-wordpress-alt"></span>%s</strong>', esc_html( $core_sources[0] ) );
			} else {
				$output[] = '<details class="source">';
				$output[] = sprintf( '<summary class="details-attributes__summary"><strong class="source"><span class="dashicons dashicons-wordpress-alt"></span>%s (%d)</strong></summary>', esc_html__( 'Other', 'amp' ), $count );
				$output[] = '<div>';
				$output[] = implode( '<br/>', array_unique( $sources['core'] ) );
				$output[] = '</div>';
				$output[] = '</details>';
			}
		}

		if ( empty( $output ) && ! empty( $sources['embed'] ) ) {
			$output[] = sprintf( '<strong class="source"><span class="dashicons dashicons-wordpress-alt"></span>%s</strong>', esc_html__( 'Embed', 'amp' ) );
		}

		if ( empty( $output ) && ! empty( $sources['blocks'] ) ) {
			foreach ( array_unique( $sources['blocks'] ) as $block ) {
				$block_title = AMP_Validation_Error_Taxonomy::get_block_title( $block );

				if ( $block_title ) {
					$output[] = sprintf(
						'<strong class="source"><span class="dashicons dashicons-edit"></span>%s</strong>',
						esc_html( $block_title )
					);
				} else {
					$output[] = sprintf(
						'<strong class="source"><span class="dashicons dashicons-edit"></span><code>%s</code></strong>',
						esc_html( $block )
					);
				}
			}
		}

		if ( empty( $output ) && ! empty( $sources['hook'] ) ) {
			switch ( $sources['hook'] ) {
				case 'the_content':
					$dashicon    = 'edit';
					$source_name = __( 'Content', 'amp' );
					break;
				case 'the_excerpt':
					$dashicon    = 'edit';
					$source_name = __( 'Excerpt', 'amp' );
					break;
				default:
					$dashicon    = 'wordpress-alt';
					$source_name = sprintf(
						/* translators: %s is the hook name */
						__( 'Hook: %s', 'amp' ),
						$sources['hook']
					);
			}
			$output[] = sprintf( '<strong class="source"><span class="dashicons dashicons-%s"></span>%s</strong>', esc_attr( $dashicon ), esc_html( $source_name ) );
		}

		if ( empty( $sources ) && $active_theme ) {
			$theme_obj = wp_get_theme( $active_theme );
			if ( ! $theme_obj->errors() ) {
				$theme_name = $theme_obj->get( 'Name' );
			} else {
				$theme_name = $active_theme;
			}
			$output[] = '<div class="source">';
			$output[] = '<span class="dashicons dashicons-admin-appearance"></span>';
			/* translators: %s is the guessed theme as the source for the error */
			$output[] = esc_html( sprintf( __( '%s (?)', 'amp' ), $theme_name ) );
			$output[] = '</div>';
		}

		echo implode( '', $output ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
	}

	/**
	 * Adds a 'Recheck' bulk action to the edit.php page and modifies the 'Move to Trash' text.
	 *
	 * Ensure only delete action is present, not trash.
	 *
	 * @param array $actions The bulk actions in the edit.php page.
	 * @return array $actions The filtered bulk actions.
	 */
	public static function filter_bulk_actions( $actions ) {
		$has_delete = ( isset( $actions['trash'] ) || isset( $actions['delete'] ) );
		unset( $actions['trash'], $actions['delete'] );
		if ( $has_delete ) {
			$actions['delete'] = esc_html__( 'Forget', 'amp' );
		}

		unset( $actions['edit'] );
		$actions[ self::BULK_VALIDATE_ACTION ] = esc_html__( 'Recheck', 'amp' );
		return $actions;
	}

	/**
	 * Handles the 'Recheck' bulk action on the edit.php page.
	 *
	 * @param string $redirect The URL of the redirect.
	 * @param string $action   The action.
	 * @param array  $items    The items on which to take the action.
	 * @return string $redirect The filtered URL of the redirect.
	 */
	public static function handle_bulk_action( $redirect, $action, $items ) {
		if ( self::BULK_VALIDATE_ACTION !== $action ) {
			return $redirect;
		}
		$remaining_invalid_urls = [];

		$errors = [];

		foreach ( $items as $item ) {
			$post = get_post( $item );
			if ( empty( $post ) || ! current_user_can( 'edit_post', $post->ID ) ) {
				continue;
			}

			$url = self::get_url_from_post( $post );
			if ( empty( $url ) ) {
				continue;
			}

			$validity = AMP_Validation_Manager::validate_url_and_store( $url );
			if ( is_wp_error( $validity ) ) {
				$errors[] = AMP_Validation_Manager::get_validate_url_error_message( $validity->get_error_code(), $validity->get_error_message() );
				continue;
			}

			$validation_errors      = wp_list_pluck( $validity['results'], 'error' );
			$unaccepted_error_count = count(
				array_filter(
					$validation_errors,
					static function( $error ) {
						return ! AMP_Validation_Error_Taxonomy::is_validation_error_sanitized( $error );
					}
				)
			);
			if ( $unaccepted_error_count > 0 ) {
				$remaining_invalid_urls[] = $validity['url'];
			}
		}

		// Get the URLs that still have errors after rechecking.
		$args = [
			self::URLS_TESTED => count( $items ),
		];
		if ( ! empty( $errors ) ) {
			$args['amp_validate_error'] = AMP_Validation_Manager::serialize_validation_error_messages( $errors );
		} else {
			$args[ self::REMAINING_ERRORS ] = count( $remaining_invalid_urls );
		}

		$redirect = remove_query_arg( wp_removable_query_args(), $redirect );
		return add_query_arg( rawurlencode_deep( $args ), $redirect );
	}

	/**
	 * Outputs an admin notice after rechecking URL(s) on the custom post page.
	 *
	 * @return void
	 */
	public static function print_admin_notice() {
		if ( ! get_current_screen() || self::POST_TYPE_SLUG !== get_current_screen()->post_type ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			return;
		}

		if ( isset( $_GET['amp_validate_error'] ) && is_string( $_GET['amp_validate_error'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			// phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- The input var is validated by the unserialize_validation_error_messages method.
			$errors = AMP_Validation_Manager::unserialize_validation_error_messages( wp_unslash( $_GET['amp_validate_error'] ) );
			if ( $errors ) {
				foreach ( array_unique( $errors ) as $error_message ) {
					printf(
						'<div class="notice is-dismissible error"><p>%s</p><button type="button" class="notice-dismiss"><span class="screen-reader-text">%s</span></button></div>',
						wp_kses(
							$error_message,
							[
								'a'    => array_fill_keys( [ 'href', 'target' ], true ),
								'code' => [],
							]
						),
						esc_html__( 'Dismiss this notice.', 'amp' )
					);
				}
			}
		}

		if ( isset( $_GET[ self::REMAINING_ERRORS ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			$count_urls_tested = isset( $_GET[ self::URLS_TESTED ] ) ? (int) $_GET[ self::URLS_TESTED ] : 1; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			$errors_remain     = ! empty( $_GET[ self::REMAINING_ERRORS ] ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			if ( $errors_remain ) {
				$message = _n(
					'The rechecked URL still has remaining invalid markup kept.',
					'The rechecked URLs still have remaining invalid markup kept.',
					$count_urls_tested,
					'amp'
				);
				$class   = 'notice-warning';
			} else {
				$message = _n(
					'The rechecked URL is free of non-removed invalid markup.',
					'The rechecked URLs are free of non-removed invalid markup.',
					$count_urls_tested,
					'amp'
				);
				$class   = 'updated';
			}

			printf(
				'<div class="notice is-dismissible %s"><p>%s</p><button type="button" class="notice-dismiss"><span class="screen-reader-text">%s</span></button></div>',
				esc_attr( $class ),
				esc_html( $message ),
				esc_html__( 'Dismiss this notice.', 'amp' )
			);
		}

		if ( isset( $_GET['amp_taxonomy_terms_updated'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			$count = (int) $_GET['amp_taxonomy_terms_updated']; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			$class = 'updated';
			printf(
				'<div class="notice is-dismissible %s"><p>%s</p><button type="button" class="notice-dismiss"><span class="screen-reader-text">%s</span></button></div>',
				esc_attr( $class ),
				esc_html(
					sprintf(
						/* translators: %s is count of validation errors updated */
						_n(
							'Updated %s validation error.',
							'Updated %s validation errors.',
							$count,
							'amp'
						),
						number_format_i18n( $count )
					)
				),
				esc_html__( 'Dismiss this notice.', 'amp' )
			);
		}

		// Add notice for PHP fatal error during validation request.
		$post = get_post();
		if ( $post instanceof WP_Post && 'post' === get_current_screen()->base ) {
			self::render_php_fatal_error_admin_notice( $post );
		}

		/**
		 * Adds notices to the single error page.
		 * 1. If the error does not occur in any validated URL: Notice with button to delete the error.
		 * 2. Notice with detailed error information in an expanding box.
		 */
		if ( ! empty( $_GET[ AMP_Validation_Error_Taxonomy::TAXONOMY_SLUG ] ) && isset( $_GET['post_type'] ) && self::POST_TYPE_SLUG === $_GET['post_type'] ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			$error_id = sanitize_key( wp_unslash( $_GET[ AMP_Validation_Error_Taxonomy::TAXONOMY_SLUG ] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended

			$error = AMP_Validation_Error_Taxonomy::get_term( $error_id );
			if ( ! $error ) {
				return;
			}

			// @todo Update this to use the method which will be developed in PR #1429 AMP_Validation_Error_Taxonomy::get_term_error() .
			$validation_error = json_decode( $error->description, true );
			if ( ! is_array( $validation_error ) ) {
				$validation_error = [];
			}
			$sanitization = AMP_Validation_Error_Taxonomy::get_validation_error_sanitization( $validation_error );
			$error_title  = AMP_Validation_Error_Taxonomy::get_error_title_from_code( $validation_error );

			if ( 0 === $error->count ) {
				echo '<div class="notice accept-reject-error"><p>';

				esc_html_e( 'There are no validated URLs with this validation error. Would you like to delete it?', 'amp' );

				$delete_url = wp_nonce_url(
					add_query_arg(
						[
							'action'  => 'delete',
							'term_id' => $error->term_id,
						]
					),
					'delete'
				);

				printf(
					' <a class="button button-small button-primary reject" href="%s">%s</a> ',
					esc_url( $delete_url ),
					esc_html__( 'Delete', 'amp' )
				);

				echo '</p></div>';
			}

			$status_text   = AMP_Validation_Error_Taxonomy::get_status_text_with_icon( $sanitization, true );
			$status_detail = sprintf( '<dt>%s</dt><dd>%s</dd>', esc_html__( 'Status', 'amp' ), wp_kses_post( $status_text ) );

			$error_details = AMP_Validation_Error_Taxonomy::render_single_url_error_details( $validation_error, $error, false, false );
			$error_details = str_replace( '<dl class="detailed">', '<dl class="detailed">' . $status_detail, $error_details );

			$class = 'notice error-details';
			if ( ! ( $sanitization['term_status'] & AMP_Validation_Error_Taxonomy::ACKNOWLEDGED_VALIDATION_ERROR_BIT_MASK ) ) {
				$class .= ' unreviewed';
			}

			?>
			<div class="<?php echo esc_attr( $class ); ?>">
				<ul>
					<?php echo $error_details; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
				</ul>
			</div>
			<?php

			$heading = wp_kses_post( $error_title );
			?>
			<script type="text/javascript">
				jQuery( function( $ ) {
					$( 'h1.wp-heading-inline' ).html( <?php echo wp_json_encode( $heading ); ?> );
				});
			</script>
			<?php
		}
	}

	/**
	 * Render PHP fatal error admin notice.
	 *
	 * @param WP_Post $post Post.
	 */
	private static function render_php_fatal_error_admin_notice( WP_Post $post ) {
		$error = get_post_meta( $post->ID, self::PHP_FATAL_ERROR_POST_META_KEY, true );
		if ( empty( $error ) ) {
			return;
		}
		$error_data = json_decode( $error, true );
		if ( ! is_array( $error_data ) || ! isset( $error_data['message'], $error_data['file'], $error_data['line'] ) ) {
			return;
		}
		?>
		<div class="notice notice-error">
			<p><?php echo AMP_Validation_Manager::get_validate_url_error_message( 'fatal_error_during_validation' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?></p>
			<?php if ( defined( 'WP_DEBUG_DISPLAY' ) && WP_DEBUG_DISPLAY ) : ?>
				<blockquote>
					<pre><?php echo esc_html( $error_data['message'] ); ?></pre>
				</blockquote>
				<p>
					<?php esc_html_e( 'Location:', 'amp' ); ?>
					<code><?php echo esc_html( sprintf( '%s:%d', $error_data['file'], $error_data['line'] ) ); ?></code>
				</p>
			<?php endif; ?>
		</div>
		<?php
	}

	/**
	 * Handles clicking 'recheck' on the inline post actions and in the admin bar on the frontend.
	 *
	 * @throws Exception But it is caught. This is here for a PHPCS bug.
	 */
	public static function handle_validate_request() {
		check_admin_referer( self::NONCE_ACTION );
		if ( ! AMP_Validation_Manager::has_cap() ) {
			wp_die( esc_html__( 'You do not have permissions to validate an AMP URL. Did you get logged out?', 'amp' ) );
		}

		$post = null;
		$url  = null;
		$args = [];

		try {
			if ( isset( $_GET['post'] ) ) {
				$post = (int) $_GET['post'];
				if ( $post <= 0 ) {
					throw new Exception( 'unknown_post' );
				}
				$post = get_post( $post );
				if ( ! $post || self::POST_TYPE_SLUG !== $post->post_type ) {
					throw new Exception( 'invalid_post' );
				}
				if ( ! current_user_can( 'edit_post', $post->ID ) ) {
					throw new Exception( 'unauthorized' );
				}
				$url = self::get_url_from_post( $post );
			} elseif ( isset( $_GET['url'] ) ) {
				$url = wp_validate_redirect( esc_url_raw( wp_unslash( $_GET['url'] ) ), null );
				if ( ! $url ) {
					throw new Exception( 'illegal_url' );
				}
				// Don't let non-admins create new amp_validated_url posts.
				if ( ! AMP_Validation_Manager::has_cap() ) {
					throw new Exception( 'unauthorized' );
				}
			}

			if ( ! $url ) {
				throw new Exception( 'missing_url' );
			}

			$validity = AMP_Validation_Manager::validate_url_and_store( $url );
			if ( is_wp_error( $validity ) ) {
				throw new Exception( AMP_Validation_Manager::get_validate_url_error_message( $validity->get_error_code(), $validity->get_error_message() ) );
			}

			$errors   = wp_list_pluck( $validity['results'], 'error' );
			$redirect = get_edit_post_link( $validity['post_id'], 'raw' );

			$error_count = count(
				array_filter(
					$errors,
					static function ( $error ) {
						return ! AMP_Validation_Error_Taxonomy::is_validation_error_sanitized( $error );
					}
				)
			);

			$args[ self::URLS_TESTED ]      = '1';
			$args[ self::REMAINING_ERRORS ] = $error_count;
		} catch ( Exception $e ) {
			$args['amp_validate_error'] = AMP_Validation_Manager::serialize_validation_error_messages(
				[ $e->getMessage() ]
			);
			$args[ self::URLS_TESTED ]  = '0';

			if ( $post && self::POST_TYPE_SLUG === $post->post_type ) {
				$redirect = get_edit_post_link( $post->ID, 'raw' );
			} else {
				$redirect = admin_url(
					add_query_arg(
						[ 'post_type' => self::POST_TYPE_SLUG ],
						'edit.php'
					)
				);
			}
		}

		wp_safe_redirect( add_query_arg( rawurlencode_deep( $args ), $redirect ) );
		exit();
	}

	/**
	 * Re-check validated URL post for whether it has blocking validation errors.
	 *
	 * @param int|WP_Post $post Post.
	 * @return array|WP_Error List of blocking validation results, or a WP_Error in the case of failure.
	 */
	public static function recheck_post( $post ) {
		if ( ! $post ) {
			return new WP_Error( 'missing_post' );
		}
		$post = get_post( $post );
		if ( ! $post ) {
			return new WP_Error( 'missing_post' );
		}
		$url = self::get_url_from_post( $post );
		if ( ! $url ) {
			return new WP_Error( 'missing_url' );
		}

		$validity = AMP_Validation_Manager::validate_url_and_store( $url, $post );
		if ( is_wp_error( $validity ) ) {
			return $validity;
		}

		$validation_errors  = wp_list_pluck( $validity['results'], 'error' );
		$validation_results = [];
		foreach ( $validation_errors  as $error ) {
			$sanitized = AMP_Validation_Error_Taxonomy::is_validation_error_sanitized( $error ); // @todo Consider re-using $validity['results'][x]['sanitized'], unless auto-sanitize is causing problem.

			$validation_results[] = compact( 'error', 'sanitized' );
		}
		return $validation_results;
	}

	/**
	 * Handle validation error status update.
	 *
	 * @see AMP_Validation_Error_Taxonomy::handle_validation_error_update()
	 * @todo This is duplicated with logic in AMP_Validation_Error_Taxonomy. All of the term updating needs to be refactored to make use of the REST API.
	 */
	public static function handle_validation_error_status_update() {
		check_admin_referer( self::UPDATE_POST_TERM_STATUS_ACTION, self::UPDATE_POST_TERM_STATUS_ACTION . '_nonce' );

		if ( empty( $_POST[ self::VALIDATION_ERRORS_INPUT_KEY ] ) || ! is_array( $_POST[ self::VALIDATION_ERRORS_INPUT_KEY ] ) ) {
			return;
		}
		$post = get_post();
		if ( ! $post || self::POST_TYPE_SLUG !== $post->post_type ) {
			return;
		}

		if ( ! AMP_Validation_Manager::has_cap() || ! current_user_can( 'edit_post', $post->ID ) ) {
			wp_die( esc_html__( 'You do not have permissions to validate an AMP URL. Did you get logged out?', 'amp' ) );
		}

		$updated_count = 0;

		$has_pre_term_description_filter = has_filter( 'pre_term_description', 'wp_filter_kses' );
		if ( false !== $has_pre_term_description_filter ) {
			remove_filter( 'pre_term_description', 'wp_filter_kses', $has_pre_term_description_filter );
		}

		// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Sanitization performed in loop.
		foreach ( $_POST[ self::VALIDATION_ERRORS_INPUT_KEY ] as $term_slug => $data ) {
			if ( ! is_array( $data ) ) {
				continue;
			}

			$status = isset( $data[ AMP_Validation_Manager::VALIDATION_ERROR_TERM_STATUS_QUERY_VAR ] )
				? $data[ AMP_Validation_Manager::VALIDATION_ERROR_TERM_STATUS_QUERY_VAR ]
				: null;

			$status_acknowledged = isset( $data[ AMP_Validation_Error_Taxonomy::VALIDATION_ERROR_ACKNOWLEDGE_ACTION ] );

			if ( ! is_numeric( $status ) ) {
				continue;
			}
			$term_slug = sanitize_key( $term_slug );
			$term      = AMP_Validation_Error_Taxonomy::get_term( $term_slug );
			if ( ! $term ) {
				continue;
			}
			$term_group = AMP_Validation_Error_Taxonomy::sanitize_term_status( $status );
			if ( null === $term_group ) {
				continue;
			}

			$term_group = $status_acknowledged
				? $term_group | AMP_Validation_Error_Taxonomy::ACKNOWLEDGED_VALIDATION_ERROR_BIT_MASK
				: $term_group & ~ AMP_Validation_Error_Taxonomy::ACKNOWLEDGED_VALIDATION_ERROR_BIT_MASK;

			if ( $term_group !== $term->term_group ) {
				$updated_count++;
				wp_update_term( $term->term_id, AMP_Validation_Error_Taxonomy::TAXONOMY_SLUG, compact( 'term_group' ) );
			}
		}

		if ( false !== $has_pre_term_description_filter ) {
			add_filter( 'pre_term_description', 'wp_filter_kses', $has_pre_term_description_filter );
		}

		$args = [
			'amp_taxonomy_terms_updated' => $updated_count,
		];

		// Re-check the post after the validation status change.
		if ( $updated_count > 0 ) {
			$validation_results = self::recheck_post( $post->ID );
			if ( ! is_wp_error( $validation_results ) ) {
				$args[ self::REMAINING_ERRORS ] = count(
					array_filter(
						$validation_results,
						static function( $result ) {
							return ! $result['sanitized'];
						}
					)
				);
			}

			delete_transient( static::NEW_VALIDATION_ERROR_URLS_COUNT_TRANSIENT );
		}

		$redirect = wp_get_referer();
		if ( ! $redirect ) {
			$redirect = get_edit_post_link( $post->ID, 'raw' );
		}

		$redirect = remove_query_arg( wp_removable_query_args(), $redirect );
		wp_safe_redirect( add_query_arg( $args, $redirect ) );
		exit();
	}

	/**
	 * Enqueue scripts for the edit post screen.
	 */
	public static function enqueue_edit_post_screen_scripts() {
		$current_screen = get_current_screen();
		if ( 'post' !== $current_screen->base || self::POST_TYPE_SLUG !== $current_screen->post_type ) {
			return;
		}

		// Eliminate autosave since it is only relevant for the content editor.
		wp_dequeue_script( 'autosave' );

		$asset_file   = AMP__DIR__ . '/assets/js/' . self::EDIT_POST_SCRIPT_HANDLE . '.asset.php';
		$asset        = require $asset_file;
		$dependencies = $asset['dependencies'];
		$version      = $asset['version'];

		wp_enqueue_script(
			self::EDIT_POST_SCRIPT_HANDLE,
			amp_get_asset_url( 'js/' . self::EDIT_POST_SCRIPT_HANDLE . '.js' ),
			$dependencies,
			$version,
			true
		);

		// @todo This is likely dead code.
		$current_screen = get_current_screen();
		$post           = get_post();
		if ( $post && $current_screen && 'post' === $current_screen->base && self::POST_TYPE_SLUG === $current_screen->post_type ) {
			$data = [
				'amp_enabled' => self::is_amp_enabled_on_post( $post ),
			];

			wp_localize_script(
				self::EDIT_POST_SCRIPT_HANDLE,
				'ampValidation',
				$data
			);
		}

		if ( function_exists( 'wp_set_script_translations' ) ) {
			wp_set_script_translations( self::EDIT_POST_SCRIPT_HANDLE, 'amp' );
		} elseif ( function_exists( 'wp_get_jed_locale_data' ) || function_exists( 'gutenberg_get_jed_locale_data' ) ) {
			$locale_data  = function_exists( 'wp_get_jed_locale_data' ) ? wp_get_jed_locale_data( 'amp' ) : gutenberg_get_jed_locale_data( 'amp' );
			$translations = wp_json_encode( $locale_data );

			wp_add_inline_script(
				self::EDIT_POST_SCRIPT_HANDLE,
				'wp.i18n.setLocaleData( ' . $translations . ', "amp" );',
				'after'
			);
		}
	}

	/**
	 * Adds the meta boxes to the CPT post.php page.
	 *
	 * @global array $wp_meta_boxes
	 * @return void
	 */
	public static function add_meta_boxes() {
		global $wp_meta_boxes;
		$stylesheets_metabox_id = 'amp_stylesheets';

		remove_meta_box( 'submitdiv', self::POST_TYPE_SLUG, 'side' );
		remove_meta_box( 'slugdiv', self::POST_TYPE_SLUG, 'normal' );
		add_meta_box(
			self::STATUS_META_BOX,
			__( 'Status', 'amp' ),
			[ __CLASS__, 'print_status_meta_box' ],
			self::POST_TYPE_SLUG,
			'side',
			'default',
			[ '__back_compat_meta_box' => true ]
		);
		add_meta_box(
			$stylesheets_metabox_id,
			__( 'Stylesheets', 'amp' ),
			[ __CLASS__, 'print_stylesheets_meta_box' ],
			self::POST_TYPE_SLUG,
			'normal',
			'default',
			[ '__back_compat_meta_box' => true ]
		);

		// Ensure only the expected metaboxes are shown on this screen.
		// Note the O(n^3) complexity here is not a concern because each nested array has only a few items.
		$allowed_metaboxes = [ 'slugdiv', 'submitdiv', self::STATUS_META_BOX, $stylesheets_metabox_id ];
		foreach ( $wp_meta_boxes[ self::POST_TYPE_SLUG ] as $context => $metabox_contexts ) {
			foreach ( $metabox_contexts as $metabox_priorities ) {
				foreach ( array_keys( $metabox_priorities ) as $id ) {
					if ( ! in_array( $id, $allowed_metaboxes, true ) ) {
						remove_meta_box( $id, self::POST_TYPE_SLUG, $context );
					}
				}
			}
		}
	}

	/**
	 * Outputs the markup of the side meta box in the CPT post.php page.
	 *
	 * This is partially copied from meta-boxes.php.
	 * Adds 'Published on,' and links to move to trash and recheck.
	 *
	 * @param WP_Post $post The post for which to output the box.
	 * @return void
	 */
	public static function print_status_meta_box( WP_Post $post ) {
		?>
		<style>
			#amp_validation_status .inside {
				margin: 0;
				padding: 0;
			}
			#re-check-action {
				float: left;
			}
		</style>
		<div id="submitpost" class="submitbox">
			<?php wp_nonce_field( self::UPDATE_POST_TERM_STATUS_ACTION, self::UPDATE_POST_TERM_STATUS_ACTION . '_nonce', false ); ?>
			<div id="minor-publishing">
				<div class="curtime misc-pub-section">
					<span id="timestamp">
					<?php
					printf(
						/* translators: %s: The date this was published */
						wp_kses_post( __( 'Last checked: <b>%s</b>', 'amp' ) ),
						/* translators: Meta box date format */
						esc_html( date_i18n( __( 'M j, Y @ H:i', 'amp' ), strtotime( $post->post_date ) ) )
					);
					?>
					</span>
				</div>
				<div id="minor-publishing-actions">
					<div id="re-check-action">
						<a class="button button-secondary" href="<?php echo esc_url( self::get_recheck_url( $post ) ); ?>">
							<?php esc_html_e( 'Recheck', 'amp' ); ?>
						</a>
					</div>
					<div id="preview-action">
						<button type="button" name="action" class="preview button" id="preview_validation_errors"><?php esc_html_e( 'Preview Changes', 'amp' ); ?></button>
					</div>
					<div class="clear"></div>
				</div>
				<div id="misc-publishing-actions">

					<div class="misc-pub-section">
						<?php
						$staleness = self::get_post_staleness( $post );
						if ( ! empty( $staleness ) ) {
							echo '<div class="notice notice-info notice-alt inline"><p>';
							echo '<b>';
							esc_html_e( 'Stale results', 'amp' );
							echo '</b>';
							echo '<br>';
							if ( ! empty( $staleness['theme'] ) && ! empty( $staleness['plugins'] ) ) {
								esc_html_e( 'The theme and plugins have changed since these results were obtained.', 'amp' );
								echo ' ';
							} elseif ( ! empty( $staleness['theme'] ) ) {
								esc_html_e( 'The theme has changed since these results were obtained.', 'amp' );
								echo ' ';
							} elseif ( ! empty( $staleness['plugins'] ) ) {
								esc_html_e( 'Plugins have been updated since these results were obtained.', 'amp' );
								echo ' ';
							}
							esc_html_e( 'Please recheck.', 'amp' );
							echo '</p></div>';
						}
						?>

						<?php
						$counts = self::count_invalid_url_validation_errors( self::get_invalid_url_validation_errors( $post ) );

						if ( 0 < ( $counts['new_rejected'] + $counts['new_accepted'] ) ) {
							?>
							<strong id="amp-invalid-markup" class="status-text">
								<span class="amp-icon amp-invalid"></span>
								<?php esc_html_e( 'Invalid markup not reviewed', 'amp' ); ?>
							</strong>
							<?php
							esc_html_e(
								'For each instance of invalid markup, determine whether it can be safely removed or it needs to be kept. You can change the Markup Status (Removed or Kept) and click the Preview Changes button to see its impact on the page. Once the proper action has been taken (Remove or Keep), you can toggle the checkbox the instance as Reviewed.',
								'amp'
							);
							echo '<br><br>';
						}
						?>

						<?php
						$is_amp_enabled = self::is_amp_enabled_on_post( $post );
						$class          = $is_amp_enabled ? 'amp-enabled' : 'amp-disabled';
						?>
						<strong id="amp-enabled-icon" class="status-text <?php echo esc_attr( $class ); ?>">
							<?php
							if ( $is_amp_enabled ) {
								esc_html_e( 'AMP enabled', 'amp' );
							} else {
								esc_html_e( 'AMP disabled', 'amp' );
							}
							?>
						</strong>
						<?php if ( $is_amp_enabled && count( array_filter( $counts ) ) > 0 ) : ?>
							<?php esc_html_e( 'AMP is enabled because no invalid markup is being kept.', 'amp' ); ?>
						<?php elseif ( ! $is_amp_enabled ) : ?>
							<?php esc_html_e( 'AMP is disabled because some invalid markup has been kept. To enable AMP to be served, either mark the invalid markup as &#8220;removed&#8221; or provide an AMP-compatible fix that eliminates the invalid markup from being generated in the first place.', 'amp' ); ?>
						<?php endif; ?>
					</div>

					<div class="misc-pub-section">
						<?php
						$actions = [];

						ob_start();
						$view_label     = __( 'View URL', 'amp' );
						$queried_object = get_post_meta( $post->ID, self::QUERIED_OBJECT_POST_META_KEY, true );
						if ( isset( $queried_object['id'], $queried_object['type'] ) ) {
							if ( 'post' === $queried_object['type'] && get_post( $queried_object['id'] ) && post_type_exists( get_post( $queried_object['id'] )->post_type ) ) {
								$post_type_object = get_post_type_object( get_post( $queried_object['id'] )->post_type );
								edit_post_link( $post_type_object->labels->edit_item, '', '', $queried_object['id'] );
								$view_label = $post_type_object->labels->view_item;
							} elseif ( 'term' === $queried_object['type'] && get_term( $queried_object['id'] ) && taxonomy_exists( get_term( $queried_object['id'] )->taxonomy ) ) {
								$taxonomy_object = get_taxonomy( get_term( $queried_object['id'] )->taxonomy );
								edit_term_link( $taxonomy_object->labels->edit_item, '', '', get_term( $queried_object['id'] ) );
								$view_label = $taxonomy_object->labels->view_item;
							} elseif ( 'user' === $queried_object['type'] ) {
								$link = get_edit_user_link( $queried_object['id'] );
								if ( $link ) {
									printf( '<a href="%s">%s</a>', esc_url( $link ), esc_html__( 'Edit User', 'amp' ) );
								}
								$view_label = __( 'View User', 'amp' );
							}
						}
						$actions['edit'] = ob_get_clean();
						$actions['view'] = sprintf( '<a href="%s">%s</a>', esc_url( self::get_url_from_post( $post ) ), esc_html( $view_label ) );

						/**
						 * Filters the array of action links shown in the status metabox.
						 *
						 * @since 2.1
						 * @internal
						 *
						 * @param string[] $actions Action links.
						 * @param WP_Post  $post    Validated URL post.
						 */
						$actions = apply_filters( 'amp_validated_url_status_actions', $actions, $post );

						echo wp_kses(
							implode( ' | ', array_filter( $actions ) ),
							[
								'a' => array_fill_keys( [ 'href' ], true ),
							]
						);
						?>
					</div>
				</div>
			</div>
			<div id="major-publishing-actions">
				<div id="delete-action">
					<a class="submitdelete deletion" href="<?php echo esc_url( get_delete_post_link( $post->ID, '', true ) ); ?>">
						<?php esc_html_e( 'Forget', 'amp' ); ?>
					</a>
				</div>
				<div id="publishing-action">
					<button type="submit" name="action" class="button button-primary" value="<?php echo esc_attr( self::UPDATE_POST_TERM_STATUS_ACTION ); ?>"><?php esc_html_e( 'Update', 'amp' ); ?></button>
				</div>
				<div class="clear"></div>
			</div>
		</div><!-- /submitpost -->

		<script>
		jQuery( function( $ ) {
			var validateUrl, postId;
			validateUrl = <?php echo wp_json_encode( self::get_markup_status_preview_url( self::get_url_from_post( $post ) ) ); ?>;
			postId = <?php echo wp_json_encode( $post->ID ); ?>;
			$( '#preview_validation_errors' ).on( 'click', function() {
				var params = {}, validatePreviewUrl = validateUrl;
				params.preview = '1';
				$( '.amp-validation-error-status' ).each( function() {
					if ( this.value && ! this.options[ this.selectedIndex ].defaultSelected ) {
						params[ this.name ] = this.value;
					}
				} );
				validatePreviewUrl += '&' + $.param( params );
				validatePreviewUrl += '#development=1';
				window.open( validatePreviewUrl, 'amp-validation-error-term-status-preview-' + String( postId ) );
			} );
		} );
		</script>
		<?php
	}

	/**
	 * Renders stylesheet info for the validated URL.
	 *
	 * @param WP_Post $post The post for the meta box.
	 * @return void
	 */
	public static function print_stylesheets_meta_box( $post ) {
		$stylesheets = get_post_meta( $post->ID, self::STYLESHEETS_POST_META_KEY, true );
		if ( empty( $stylesheets ) ) {
			printf(
				'<p><em>%s</em></p>',
				wp_kses_post(
					sprintf(
						/* translators: placeholder is URL to recheck the post */
						__( 'Stylesheet information for this URL is no longer available. Such data is automatically deleted after a week to reduce database storage. It is of little value to store long-term given that it becomes stale as themes and plugins are updated. To obtain the latest stylesheet information, <a href="%s">recheck this URL</a>.', 'amp' ),
						esc_url( self::get_recheck_url( $post ) . '#amp_stylesheets' )
					)
				)
			);
			return;
		}
		$stylesheets = json_decode( $stylesheets, true );
		if ( ! is_array( $stylesheets ) ) {
			printf(
				'<p><em>%s</em></p>',
				esc_html__( 'Unable to retrieve data for stylesheets.', 'amp' )
			);
			return;
		}

		$style_custom_cdata_spec = null;
		foreach ( AMP_Allowed_Tags_Generated::get_allowed_tag( 'style' ) as $spec_rule ) {
			if ( isset( $spec_rule[ AMP_Rule_Spec::TAG_SPEC ]['spec_name'] ) && AMP_Style_Sanitizer::STYLE_AMP_CUSTOM_SPEC_NAME === $spec_rule[ AMP_Rule_Spec::TAG_SPEC ]['spec_name'] ) {
				$style_custom_cdata_spec = $spec_rule[ AMP_Rule_Spec::CDATA ];
			}
		}

		$included_final_size    = 0;
		$included_original_size = 0;
		$excluded_final_size    = 0;
		$excluded_original_size = 0;
		$excluded_stylesheets   = 0;
		$max_final_size         = 0;

		$included_status  = 1;
		$excessive_status = 2;
		$excluded_status  = 3;

		// Determine which stylesheets are included based on their priorities.
		$pending_stylesheet_indices = array_keys( $stylesheets );
		usort(
			$pending_stylesheet_indices,
			static function ( $a, $b ) use ( $stylesheets ) {
				return $stylesheets[ $a ]['priority'] - $stylesheets[ $b ]['priority'];
			}
		);
		foreach ( $pending_stylesheet_indices as $i ) {
			// @todo Add information about amp-keyframes as well.
			if ( ! isset( $stylesheets[ $i ]['group'] ) || 'amp-custom' !== $stylesheets[ $i ]['group'] || ! empty( $stylesheets[ $i ]['duplicate'] ) ) {
				continue;
			}
			$max_final_size = max( $max_final_size, $stylesheets[ $i ]['final_size'] );
			if ( $stylesheets[ $i ]['included'] ) {
				$included_final_size    += $stylesheets[ $i ]['final_size'];
				$included_original_size += $stylesheets[ $i ]['original_size'];

				if (
					$included_final_size >= $style_custom_cdata_spec['max_bytes']
					&&
					$stylesheets[ $i ]['final_size'] > 0
				) {
					$stylesheets[ $i ]['status'] = $excessive_status;
				} else {
					$stylesheets[ $i ]['status'] = $included_status;
				}
			} else {
				$excluded_final_size    += $stylesheets[ $i ]['final_size'];
				$excluded_original_size += $stylesheets[ $i ]['original_size'];
				$excluded_stylesheets++;
				$stylesheets[ $i ]['status'] = $excluded_status;
			}
		}

		?>

		<?php if ( ! AMP_Style_Sanitizer::has_required_php_css_parser() ) : ?>
			<div class="notice notice-alt notice-warning inline">
				<p>
					<?php esc_html_e( 'AMP CSS processing is limited because a conflicting version of PHP-CSS-Parser has been loaded by another plugin or theme. Tree shaking is not available.', 'amp' ); ?>
				</p>
			</div>
		<?php endif; ?>

		<table class="amp-stylesheet-summary">
			<tr>
				<th>
					<?php esc_html_e( 'Total CSS size prior to minification:', 'amp' ); ?>
				</th>
				<td>
					<?php echo esc_html( number_format_i18n( $included_original_size + $excluded_original_size ) ); ?>
					<abbr title="<?php esc_attr_e( 'bytes', 'amp' ); ?>"><?php echo esc_html_x( 'B', 'abbreviation for bytes', 'amp' ); ?></abbr>
				</td>
			</tr>
			<tr>
				<th>
					<?php esc_html_e( 'Total CSS size after minification:', 'amp' ); ?>
				</th>
				<td>
					<?php echo esc_html( number_format_i18n( $included_final_size + $excluded_final_size ) ); ?>
					<abbr title="<?php esc_attr_e( 'bytes', 'amp' ); ?>"><?php echo esc_html_x( 'B', 'abbreviation for bytes', 'amp' ); ?></abbr>
				</td>
			</tr>
			<tr>
				<th>
					<?php
					echo esc_html(
						sprintf(
							/* translators: %s is max kilobytes */
							__( 'Percentage of used CSS budget (%sKB):', 'amp' ),
							number_format_i18n( $style_custom_cdata_spec['max_bytes'] / 1000 )
						)
					);
					?>
				</th>
				<td>
					<?php
					$percentage_budget_used = ( ( $included_final_size + $excluded_final_size ) / $style_custom_cdata_spec['max_bytes'] ) * 100;

					printf( '%.1f%% ', $percentage_budget_used ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
					if ( $percentage_budget_used > 100 ) {
						$icon = Icon::invalid();
					} elseif ( $percentage_budget_used >= AMP_Style_Sanitizer::CSS_BUDGET_WARNING_PERCENTAGE ) {
						$icon = Icon::warning();
					} else {
						$icon = Icon::valid();
					}

					echo $icon->to_html(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
					?>
				</td>
			</tr>
			<tr>
				<th>
					<?php
					echo esc_html(
						sprintf(
							/* translators: %s is the number of stylesheets excluded */
							_n( 'Excluded minified CSS (%s stylesheet):', 'Excluded minified CSS size (%s stylesheets):', $excluded_stylesheets, 'amp' ),
							number_format_i18n( $excluded_stylesheets )
						)
					);
					?>
				</th>
				<td>
					<?php echo esc_html( number_format_i18n( $excluded_final_size ) ); ?>
					<abbr title="<?php esc_attr_e( 'bytes', 'amp' ); ?>"><?php echo esc_html_x( 'B', 'abbreviation for bytes', 'amp' ); ?></abbr>
				</td>
			</tr>
		</table>

		<?php if ( $percentage_budget_used > 100 ) : ?>
			<div class="notice notice-alt notice-error inline">
				<p>
					<?php if ( 0 === $excluded_stylesheets ) : ?>
						<?php esc_html_e( 'You have exceeded the CSS budget. The page will not be served as a valid AMP page.', 'amp' ); ?>
					<?php else : ?>
						<?php esc_html_e( 'You have exceeded the CSS budget. Stylesheets deemed of lesser priority have been excluded from the page.', 'amp' ); ?>
					<?php endif; ?>
					<?php esc_html_e( 'Please review the flagged stylesheets below and determine if the current theme or a particular plugin is including excessive CSS.', 'amp' ); ?>
				</p>
			</div>
		<?php elseif ( $percentage_budget_used >= AMP_Style_Sanitizer::CSS_BUDGET_WARNING_PERCENTAGE ) : ?>
			<div class="notice notice-alt notice-warning inline">
				<p>
					<?php esc_html_e( 'You are nearing the limit of the CSS budget. Once this limit is reached, stylesheets deemed of lesser priority will be excluded from the page. Please review the stylesheets below and determine if the current theme or a particular plugin is including excessive CSS.', 'amp' ); ?>
				</p>
			</div>
		<?php endif; ?>

		<table class="amp-stylesheet-list wp-list-table widefat fixed striped">
			<thead>
			<tr>
				<th class="column-stylesheet_expand"></th>
				<th class="column-stylesheet_order"><?php esc_html_e( 'Order', 'amp' ); ?></th>
				<th class="column-original_size">
					<?php esc_html_e( 'Original', 'amp' ); ?>
					(<abbr title="<?php esc_attr_e( 'bytes', 'amp' ); ?>"><?php echo esc_html_x( 'B', 'abbreviation for bytes', 'amp' ); ?></abbr>)
				</th>
				<th class="column-minified"><?php esc_html_e( 'Minified', 'amp' ); ?></th>
				<th class="column-final_size">
					<?php esc_html_e( 'Final', 'amp' ); ?>
					(<abbr title="<?php esc_attr_e( 'bytes', 'amp' ); ?>"><?php echo esc_html_x( 'B', 'abbreviation for bytes', 'amp' ); ?></abbr>)
				</th>
				<th class="column-percentage"><?php esc_html_e( 'Percent', 'amp' ); ?></th>
				<th class="column-priority"><?php esc_html_e( 'Priority', 'amp' ); ?></th>
				<th class="column-stylesheet_included"><?php esc_html_e( 'Included', 'amp' ); ?></th>
				<th class="column-markup"><?php esc_html_e( 'Markup', 'amp' ); ?></th>
				<th class="column-sources_with_invalid_output"><?php esc_html_e( 'Sources', 'amp' ); ?></th>
			</tr>
			</thead>
			<tbody>
			<?php $row = 1; ?>
			<?php foreach ( $stylesheets as $stylesheet ) : ?>
				<?php
				// @todo Add information about amp-keyframes as well.
				if ( ! isset( $stylesheet['group'] ) || 'amp-custom' !== $stylesheet['group'] || ! empty( $stylesheet['duplicate'] ) ) {
					continue;
				}

				$origin_html = '<' . $stylesheet['element']['name'];
				if ( ! empty( $stylesheet['element']['attributes'] ) ) {
					$attributes = $stylesheet['element']['attributes'];
					if ( ! empty( $attributes['class'] ) ) {
						$attributes['class'] = trim( preg_replace( '/(^|\s)amp-wp-\w+(\s|$)/', ' ', $attributes['class'] ) );
						if ( empty( $attributes['class'] ) ) {
							unset( $attributes['class'] );
						}
					}
					if ( isset( $attributes[ AMP_Style_Sanitizer::ORIGINAL_STYLE_ATTRIBUTE_NAME ] ) ) {
						$attributes['style'] = $attributes[ AMP_Style_Sanitizer::ORIGINAL_STYLE_ATTRIBUTE_NAME ];
						unset( $attributes[ AMP_Style_Sanitizer::ORIGINAL_STYLE_ATTRIBUTE_NAME ] );
					}
					if ( ! empty( $attributes ) ) {
						foreach ( $attributes as $name => $value ) {
							if ( '' === $value ) {
								$origin_html .= ' ' . sprintf( '%s', esc_html( $name ) );
							} else {
								$origin_html .= ' ' . sprintf( '%s="%s"', esc_html( $name ), esc_attr( $value ) );
							}
						}
					}
				}
				$origin_html .= '>';

				if ( 0 === $stylesheet['original_size'] ) {
					$ratio = 1;
				} else {
					$ratio = $stylesheet['final_size'] / $stylesheet['original_size'];
				}
				?>
				<tr class="<?php echo esc_attr( sprintf( 'stylesheet level-0 %s', 0 === $row % 2 ? 'even' : 'odd' ) ); ?>">
					<td class="column-stylesheet_expand">
						<button class="toggle-stylesheet-details" type="button">
							<span class="screen-reader-text"><?php esc_html_e( 'Expand/collapse', 'amp' ); ?></span>
						</button>
					</td>
					<td class="column-stylesheet_order">
						<?php echo (int) $row; ?>
					</td>
					<td class="column-original_size">
						<?php
						echo esc_html( number_format_i18n( $stylesheet['original_size'] ) );
						?>
					</td>
					<td class="column-minified">
						<?php
						if ( $ratio <= 1 ) {
							echo esc_html( sprintf( '-%.1f%%', ( 1.0 - $ratio ) * 100 ) );
						} else {
							echo esc_html( sprintf( '+%.1f%%', -1 * ( 1.0 - $ratio ) * 100 ) );
						}
						?>
					</td>
					<td class="column-final_size">
						<?php
						echo esc_html( number_format_i18n( $stylesheet['final_size'] ) );
						?>
					</td>
					<td class="column-percentage">
						<?php
						$percentage = $stylesheet['final_size'] / ( $included_final_size + $excluded_final_size );
						?>
						<meter value="<?php echo esc_attr( $stylesheet['final_size'] ); ?>" min="0" max="<?php echo esc_attr( $included_final_size + $excluded_final_size ); ?>" title="<?php esc_attr_e( 'Stylesheet bytes of total CSS added to page', 'amp' ); ?>">
							<?php echo esc_html( round( ( $percentage ) * 100 ) ) . '%'; ?>
						</meter>
					</td>
					<td class="column-priority">
						<?php echo esc_html( $stylesheet['priority'] ); ?>
					</td>
					<td class="column-stylesheet_included">
						<?php
						switch ( $stylesheet['status'] ) {
							case $included_status:
								printf( '<span title="%s" class="amp-icon amp-valid"></span>', esc_attr__( 'Stylesheet included', 'amp' ) );
								break;
							case $excessive_status:
								printf( '<span title="%s" class="amp-icon amp-warning"></span>', esc_attr__( 'Stylesheet overruns CSS budget yet it is still included on page', 'amp' ) );
								break;
							case $excluded_status:
								printf( '<span title="%s" class="amp-icon amp-invalid"></span>', esc_attr__( 'Stylesheet excluded due to exceeding CSS budget', 'amp' ) );
								break;
						}
						?>
					</td>
					<td class="column-markup">
						<?php
						$origin_abbr_text = '?';
						if ( 'link_element' === $stylesheet['origin'] ) {
							$origin_abbr_text = '<link&nbsp;&hellip;>'; // @todo Consider adding the basename of the CSS file.
						} elseif ( 'style_element' === $stylesheet['origin'] ) {
							$origin_abbr_text = '<style>';
						} elseif ( 'style_attribute' === $stylesheet['origin'] ) {
							$origin_abbr_text = 'style="&hellip;"';
						}
						$needs_abbr = $origin_abbr_text !== $origin_html;
						if ( $needs_abbr ) {
							printf( '<abbr title="%s">', esc_attr( $origin_html ) );
						}
						printf( '<code>%s</code>', esc_html( $origin_abbr_text ) );
						if ( $needs_abbr ) {
							echo '</abbr>';
						}
						echo '</code>';
						?>
					</td>
					<td class="column-sources_with_invalid_output">
						<?php
						if ( empty( $stylesheet['sources'] ) ) {
							esc_html_e( '--', 'amp' );
						} else {
							self::render_sources_column( AMP_Validation_Error_Taxonomy::summarize_sources( $stylesheet['sources'] ), $post->ID );
						}
						?>
					</td>
				</tr>
				<tr class="<?php echo esc_attr( sprintf( 'stylesheet-details level-0 %s', 0 === $row % 2 ? 'even' : 'odd' ) ); ?>">
					<td colspan="10">
						<dl class="detailed">
							<dt><?php esc_html_e( 'Original Markup', 'amp' ); ?></dt>
							<dd><code class="stylesheet-origin-markup"><?php echo esc_html( $origin_html ); ?></code></dd>

							<?php if ( isset( $stylesheet['element']['attributes']['href'] ) ) : ?>
								<dt><?php esc_html_e( 'Stylesheet URL', 'amp' ); ?></dt>
								<dd>
									<?php
									printf(
										'<a href="%s" target="_blank">%s</a>',
										esc_url( $stylesheet['element']['attributes']['href'] ),
										esc_html( $stylesheet['element']['attributes']['href'] )
									);
									?>
								</dd>
							<?php endif; ?>

							<dt><?php esc_html_e( 'Sources', 'amp' ); ?></dt>
							<dd>
								<?php AMP_Validation_Error_Taxonomy::render_sources( $stylesheet['sources'] ); ?>
							</dd>

							<dt><?php esc_html_e( 'CSS Code', 'amp' ); ?></dt>
							<dd>
								<?php
								ob_start();
								echo '<code class="shaken-stylesheet">';
								$open_parens = 0;
								$ins_count   = 0;
								$del_count   = 0;
								foreach ( $stylesheet['shaken_tokens'] as $shaken_token ) {
									if ( $shaken_token[0] ) {
										$ins_count++;
									} else {
										$del_count++;
									}

									if ( is_array( $shaken_token[1] ) ) {
										echo '<span class="declaration-block">';
										$selector_count = count( $shaken_token[1] );
										foreach ( array_keys( $shaken_token[1] ) as $i => $selector ) {
											$included = $shaken_token[1][ $selector ];
											echo $included ? '<ins class="selector">' : '<del class="selector">';
											echo str_repeat( "\t", $open_parens ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped

											$selector_html = preg_replace(
												'/(:root|html)(:not\(#_\))+/',
												sprintf(
													'<abbr title="%s">$0</abbr>',
													esc_attr(
														'style_attribute' === $stylesheet['origin']
															?
															__( 'Selector generated to increase specificity so the cascade is preserved for properties moved from style attribute to CSS rules in style[amp-custom].', 'amp' )
															:
															__( 'Selector generated to increase specificity for important properties so that the CSS cascade is preserved. AMP does not allow important properties.', 'amp' )
													)
												),
												esc_html( $selector )
											);
											if ( 'style_attribute' === $stylesheet['origin'] ) {
												$selector_html = preg_replace(
													'/\.amp-wp-\w+/',
													sprintf(
														'<abbr title="%s">$0</abbr>',
														esc_attr__( 'Class name generated during extraction of inline style to style[amp-custom].', 'amp' )
													),
													$selector_html
												);
											}
											$selector_html = preg_replace(
												'/:not\((#_)+\)/',
												sprintf(
													'<abbr title="%s">$0</abbr>',
													esc_attr__( 'Pseudo-class selector used to increase specificity for rule extracted from inline styles and/or properties with !important qualifiers.', 'amp' )
												),
												$selector_html
											);

											echo $selector_html; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped

											if ( $i + 1 < $selector_count ) {
												echo ',';
											}
											echo $included ? '</ins>' : '</del>';
										}

										echo $shaken_token[0] ? '<ins>' : '<del>';
										echo str_repeat( "\t", $open_parens + 1 ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
										echo '{ ' . esc_html( implode( '; ', $shaken_token[2] ) ) . '; }';
										echo $shaken_token[0] ? '</ins>' : '</del>';

										echo '</span>';
									} elseif ( is_string( $shaken_token[1] ) ) {
										echo $shaken_token[0] ? '<ins class="">' : '<del class="">';

										$parent_count_diff = substr_count( $shaken_token[1], '{' ) - substr_count( $shaken_token[1], '}' );
										if ( $parent_count_diff >= 0 ) {
											echo str_repeat( "\t", $open_parens ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
										} else {
											echo str_repeat( "\t", $open_parens + $parent_count_diff ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
										}
										$open_parens += $parent_count_diff;

										echo esc_html( $shaken_token[1] );

										echo $shaken_token[0] ? '</ins>' : '</del>';
									}
								}
								echo '</code>';
								$html = trim( ob_get_clean() );

								if ( 0 === $ins_count && 0 === $del_count ) {
									printf(
										'<p><em>%s</em></p>',
										esc_html__( 'The stylesheet was empty after minification (removal of comments and whitespace).', 'amp' )
									);
								} elseif ( 0 === $ins_count ) {
									printf(
										'<p><em>%s</em></p>',
										esc_html__( 'All of the stylesheet was removed during tree-shaking.', 'amp' )
									);
								}

								if ( 0 !== $ins_count || 0 !== $del_count ) {
									if ( $del_count > 0 ) {
										printf(
											'<p><label><input type="checkbox" class="show-removed-styles"> %s</label></p>',
											esc_html__( 'Show styles removed during tree-shaking', 'amp' )
										);
									}
									echo $html; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
								}
								?>
							</dd>
						</dl>
					</td>
				</tr>
				<?php $row++; ?>
			<?php endforeach; ?>
			</tbody>
		</table>
		<?php
	}

	/**
	 * Renders the single URL list table.
	 *
	 * Mainly copied from edit-tags.php.
	 * This is output on the post.php page for amp_validated_url,
	 * where the editor normally would be.
	 * But it's really more similar to /wp-admin/edit-tags.php than a post.php page,
	 * as this outputs a WP_Terms_List_Table of amp_validation_error terms.
	 *
	 * @todo: complete this, as it may need to use more logic from edit-tags.php.
	 * @param WP_Post $post The post for the meta box.
	 * @return void
	 */
	public static function render_single_url_list_table( $post ) {
		if ( self::POST_TYPE_SLUG !== $post->post_type ) {
			return;
		}

		$taxonomy        = AMP_Validation_Error_Taxonomy::TAXONOMY_SLUG;
		$taxonomy_object = get_taxonomy( $taxonomy );
		if ( ! $taxonomy_object ) {
			wp_die( esc_html__( 'Invalid taxonomy.', 'amp' ) );
		}

		/**
		 * Set the order of the terms in the order of occurrence.
		 *
		 * Note that this function will call \AMP_Validation_Error_Taxonomy::get_term() repeatedly, and the
		 * object cache will be pre-populated with terms due to the term query in the term list table.
		 *
		 * @return WP_Term[]
		 */
		$override_terms_in_occurrence_order = static function() use ( $post ) {
			return wp_list_pluck( AMP_Validated_URL_Post_Type::get_invalid_url_validation_errors( $post ), 'term' );
		};

		add_filter( 'get_terms', $override_terms_in_occurrence_order );

		$wp_list_table = _get_list_table( 'WP_Terms_List_Table' );
		get_current_screen()->set_screen_reader_content(
			[
				'heading_pagination' => $taxonomy_object->labels->items_list_navigation,
				'heading_list'       => $taxonomy_object->labels->items_list,
			]
		);

		$wp_list_table->prepare_items();
		$wp_list_table->views();

		// The inline script depends on data from the list table.
		self::$total_errors_for_url = $wp_list_table->get_pagination_arg( 'total_items' );

		?>
		<form class="search-form wp-clearfix" method="get">
			<input type="hidden" name="taxonomy" value="<?php echo esc_attr( $taxonomy ); ?>" />
			<input type="hidden" name="post_type" value="<?php echo esc_attr( $post->post_type ); ?>" />
			<?php $wp_list_table->search_box( esc_html__( 'Search Errors', 'amp' ), 'invalid-url-search' ); ?>
		</form>

		<div id="remove-keep-buttons" class="hidden">
			<button type="button" class="button action remove"><?php esc_html_e( 'Remove', 'amp' ); ?></button>
			<button type="button" class="button action keep"><?php esc_html_e( 'Keep', 'amp' ); ?></button>
			<button type="button" class="button action reviewed-toggle reviewed"><?php esc_html_e( 'Mark reviewed', 'amp' ); ?></button>
			<button type="button" class="button action reviewed-toggle unreviewed"><?php esc_html_e( 'Mark unreviewed', 'amp' ); ?></button>
			<button type="button" class="button action copy-all"><?php esc_html_e( 'Copy to clipboard', 'amp' ); ?></button>
			<div id="vertical-divider"></div>
		</div>
		<div id="url-post-filter" class="alignleft actions">
			<?php AMP_Validation_Error_Taxonomy::render_error_type_filter(); ?>
		</div>
		<?php
		AMP_Validation_Error_Taxonomy::reset_validation_error_row_index();
		$wp_list_table->display();
		?>

		<?php
		remove_filter( 'get_terms', $override_terms_in_occurrence_order );
	}

	/**
	 * Gets the number of amp_validation_error terms that should appear on the single amp_validated_url /wp-admin/post.php page.
	 *
	 * @param int $terms_per_page The number of terms on a page.
	 * @return int The number of terms on the page.
	 */
	public static function get_terms_per_page( $terms_per_page ) {
		global $pagenow;
		if ( 'post.php' === $pagenow ) {
			return PHP_INT_MAX;
		}
		return $terms_per_page;
	}

	/**
	 * Adds the taxonomy to the $_REQUEST, so that it is available in WP_Screen and WP_Terms_List_Table.
	 *
	 * It would be ideal to do this in render_single_url_list_table(),
	 * but set_current_screen() looks to run before that, and that needs access to the 'taxonomy'.
	 */
	public static function add_taxonomy() {
		global $pagenow;

		if ( 'post.php' !== $pagenow || ! isset( $_REQUEST['post'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			return;
		}

		$post_id = (int) $_REQUEST['post']; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
		if ( ! empty( $post_id ) && self::POST_TYPE_SLUG === get_post_type( $post_id ) ) {
			$_REQUEST['taxonomy'] = AMP_Validation_Error_Taxonomy::TAXONOMY_SLUG;
		}
	}

	/**
	 * Show URL at the top of the edit form in place of the title (since title support is not present).
	 *
	 * @param WP_Post $post Post.
	 */
	public static function print_url_as_title( $post ) {
		if ( self::POST_TYPE_SLUG !== $post->post_type ) {
			return;
		}

		$url = self::get_url_from_post( $post );
		if ( ! $url ) {
			return;
		}

		// @todo For URLs without a queried object, this should eventually be augmented to indicate the query type (e.g. Homepage, Search Results, Date Archive, etc)
		$entity_title = self::get_validated_url_title();
		?>
		<?php if ( $entity_title ) : ?>
			<h2><em><?php echo esc_html( $entity_title ); ?></em></h2>
		<?php endif; ?>
		<h2 class="amp-validated-url">
			<a href="<?php echo esc_url( $url ); ?>">
				<span class="dashicons dashicons-admin-links"></span>
				<?php echo esc_html( $url ); ?>
			</a>
		</h2>
		<?php
	}

	/**
	 * Strip host name from AMP validated URL being printed.
	 *
	 * @param string $title Title.
	 * @param int    $id Post ID.
	 *
	 * @return string Title.
	 */
	public static function filter_the_title_in_post_list_table( $title, $id = null ) {
		if ( function_exists( 'get_current_screen' ) && get_current_screen() && get_current_screen()->base === 'edit' && get_current_screen()->post_type === self::POST_TYPE_SLUG && self::POST_TYPE_SLUG === get_post_type( $id ) ) {
			$title = preg_replace( '#^(\w+:)?//[^/]+#', '', $title );
		}
		return $title;
	}

	/**
	 * Renders the filters on the validated URL post type edit.php page.
	 *
	 * @param string $post_type The slug of the post type.
	 * @param string $which     The location for the markup, either 'top' or 'bottom'.
	 */
	public static function render_post_filters( $post_type, $which ) {
		if ( self::POST_TYPE_SLUG === $post_type && 'top' === $which ) {
			AMP_Validation_Error_Taxonomy::render_error_status_filter();
			AMP_Validation_Error_Taxonomy::render_error_type_filter();
		}
	}

	/**
	 * Gets the URL to recheck the post for AMP validity.
	 *
	 * Appends a query var to $redirect_url.
	 * On clicking the link, it checks if errors still exist for $post.
	 *
	 * @param  string|WP_Post $url_or_post   The post storing the validation error or the URL to check.
	 * @return string The URL to recheck the post.
	 */
	public static function get_recheck_url( $url_or_post ) {
		$args = [
			'action' => self::VALIDATE_ACTION,
		];
		if ( is_string( $url_or_post ) ) {
			$args['url'] = $url_or_post;
		} elseif ( $url_or_post instanceof WP_Post && self::POST_TYPE_SLUG === $url_or_post->post_type ) {
			$args['post'] = $url_or_post->ID;
		}

		return wp_nonce_url(
			add_query_arg( rawurlencode_deep( $args ), admin_url() ),
			self::NONCE_ACTION
		);
	}

	/**
	 * Filters the document title on the single URL page at /wp-admin/post.php.
	 *
	 * @global string $title
	 *
	 * @param string $admin_title Document title.
	 * @return string Filtered document title.
	 */
	public static function filter_admin_title( $admin_title ) {
		global $title;
		if ( self::is_validated_url_admin_screen() ) {

			// This is not ideal to set this in a filter, but it's the only apparent way to set the variable for admin-header.php.
			$title = __( 'AMP Validated URL', 'amp' ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited

			/* translators: Admin screen title. %s: Admin screen name */
			$admin_title = sprintf( __( '%s &#8212; WordPress', 'default' ), $title );
		}
		return $admin_title;
	}

	/**
	 * Determines whether the current screen is for a validated URL.
	 *
	 * @return bool Is screen.
	 */
	private static function is_validated_url_admin_screen() {
		global $pagenow;
		return ! (
			'post.php' !== $pagenow
			||
			! isset( $_GET['post'], $_GET['action'] ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			||
			self::POST_TYPE_SLUG !== get_post_type( $_GET['post'] ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
		);
	}

	/**
	 * Gets the title for validated URL, corresponding with the title for the queried object.
	 *
	 * @param int|WP_Post $post Post for the validated URL.
	 * @return string|null Title, or null if none is available.
	 */
	public static function get_validated_url_title( $post = null ) {
		$name = null;
		$post = get_post( $post );
		if ( ! $post ) {
			return null;
		}

		// Mainly uses the same conditionals as print_status_meta_box().
		$queried_object = get_post_meta( $post->ID, self::QUERIED_OBJECT_POST_META_KEY, true );
		if ( isset( $queried_object['type'], $queried_object['id'] ) ) {
			$name = null;
			if ( 'post' === $queried_object['type'] && get_post( $queried_object['id'] ) ) {
				$name = html_entity_decode( get_the_title( $queried_object['id'] ), ENT_QUOTES );
			} elseif ( 'term' === $queried_object['type'] && get_term( $queried_object['id'] ) ) {
				$name = get_term( $queried_object['id'] )->name;
			} elseif ( 'user' === $queried_object['type'] && get_user_by( 'ID', $queried_object['id'] ) ) {
				$name = get_user_by( 'ID', $queried_object['id'] )->display_name;
			}
		}

		return $name;
	}

	/**
	 * Filters post row actions.
	 *
	 * Manages links for details, recheck, view, forget, and forget permanently.
	 *
	 * @param array   $actions Row action links.
	 * @param WP_Post $post Current WP post.
	 *
	 * @return array Filtered action links.
	 */
	public static function filter_post_row_actions( $actions, $post ) {
		if ( ! is_object( $post ) || self::POST_TYPE_SLUG !== $post->post_type ) {
			return $actions;
		}

		// Inline edits are not relevant.
		unset( $actions['inline hide-if-no-js'] );

		if ( isset( $actions['edit'] ) ) {
			$actions['edit'] = sprintf(
				'<a href="%s">%s</a>',
				esc_url( get_edit_post_link( $post ) ),
				esc_html__( 'Details', 'amp' )
			);
		}

		if ( 'trash' !== $post->post_status && current_user_can( 'edit_post', $post->ID ) ) {
			$url = self::get_url_from_post( $post );
			if ( $url ) {
				$actions['view'] = sprintf(
					'<a href="%s">%s</a>',
					esc_url( $url ),
					esc_html__( 'View', 'amp' )
				);
			}

			$actions[ self::VALIDATE_ACTION ] = sprintf(
				'<a href="%s">%s</a>',
				esc_url( self::get_recheck_url( $post ) ),
				esc_html__( 'Recheck', 'amp' )
			);
			if ( self::get_post_staleness( $post ) ) {
				$actions[ self::VALIDATE_ACTION ] = sprintf( '<em>%s</em>', $actions[ self::VALIDATE_ACTION ] );
			}
		}

		// Replace 'Trash' with 'Forget' (which permanently deletes).
		$has_delete = ( isset( $actions['trash'] ) || isset( $actions['delete'] ) );
		unset( $actions['trash'], $actions['delete'] );
		if ( $has_delete ) {
			$actions['delete'] = sprintf(
				'<a href="%s" class="submitdelete" aria-label="%s">%s</a>',
				get_delete_post_link( $post->ID, '', true ),
				/* translators: %s: post title */
				esc_attr( sprintf( __( 'Forget &#8220;%s&#8221;', 'amp' ), self::get_url_from_post( $post ) ) ),
				esc_html__( 'Forget', 'amp' )
			);
		}

		$actions = wp_array_slice_assoc(
			$actions,
			[ 'edit', self::VALIDATE_ACTION, 'view', 'delete' ]
		);

		return $actions;
	}

	/**
	 * Filters table views for the post type.
	 *
	 * @param array $views Array of table view links keyed by status slug.
	 * @return array Filtered views.
	 */
	public static function filter_table_views( $views ) {
		// Replace 'Trash' text with 'Forgotten'.
		if ( isset( $views['trash'] ) ) {
			$status = get_post_status_object( 'trash' );

			$views['trash'] = str_replace( $status->label, esc_html__( 'Forgotten', 'amp' ), $views['trash'] );
		}

		return $views;
	}

	/**
	 * Filters messages displayed after bulk updates.
	 *
	 * Note that trashing is replaced with deletion whenever possible, so the trashed and untrashed messages will not be used in practice.
	 *
	 * @param array $messages    Bulk message text.
	 * @param array $bulk_counts Post numbers for the current message.
	 * @return array Filtered messages.
	 */
	public static function filter_bulk_post_updated_messages( $messages, $bulk_counts ) {
		if ( get_current_screen()->id === sprintf( 'edit-%s', self::POST_TYPE_SLUG ) ) {
			$messages['post'] = array_merge(
				$messages['post'],
				[
					/* translators: %s is the number of posts forgotten */
					'deleted'   => _n(
						'%s validated URL forgotten.',
						'%s validated URLs forgotten.',
						$bulk_counts['deleted'],
						'amp'
					),
					/* translators: %s is the number of posts forgotten */
					'trashed'   => _n(
						'%s validated URL forgotten.',
						'%s validated URLs forgotten.',
						$bulk_counts['trashed'],
						'amp'
					),
					/* translators: %s is the number of posts restored from trash. */
					'untrashed' => _n(
						'%s validated URL unforgotten.',
						'%s validated URLs unforgotten.',
						$bulk_counts['untrashed'],
						'amp'
					),
				]
			);
		}

		return $messages;
	}

	/**
	 * Is AMP Enabled on Post
	 *
	 * @param WP_Post $post Post object to check.
	 *
	 * @return bool Whether enabled.
	 */
	public static function is_amp_enabled_on_post( WP_Post $post ) {
		$validation_errors = self::get_invalid_url_validation_errors( $post );
		$counts            = self::count_invalid_url_validation_errors( $validation_errors );
		return 0 === ( $counts['new_rejected'] + $counts['ack_rejected'] );
	}

	/**
	 * Count URL Validation Errors
	 *
	 * @param array $validation_errors Validation errors.
	 *
	 * @return int[]
	 */
	protected static function count_invalid_url_validation_errors( $validation_errors ) {
		$counts = array_fill_keys(
			[ 'new_accepted', 'ack_accepted', 'new_rejected', 'ack_rejected' ],
			0
		);
		foreach ( $validation_errors as $error ) {
			switch ( $error['term']->term_group ) {
				case AMP_Validation_Error_Taxonomy::VALIDATION_ERROR_NEW_REJECTED_STATUS:
					$counts['new_rejected']++;
					break;
				case AMP_Validation_Error_Taxonomy::VALIDATION_ERROR_NEW_ACCEPTED_STATUS:
					$counts['new_accepted']++;
					break;
				case AMP_Validation_Error_Taxonomy::VALIDATION_ERROR_ACK_ACCEPTED_STATUS:
					$counts['ack_accepted']++;
					break;
				case AMP_Validation_Error_Taxonomy::VALIDATION_ERROR_ACK_REJECTED_STATUS:
					$counts['ack_rejected']++;
					break;
			}
		}
		return $counts;
	}
}
PK.3Y�xB�0�0Hbunyad-amp/includes/validation/class-amp-validation-callback-wrapper.php<?php
/**
 * Class AMP_Validation_Callback_Wrapper
 *
 * @package AMP
 */

/**
 * Class AMP_Validation_Callback_Wrapper
 *
 * @since 1.2.1
 * @internal
 */
class AMP_Validation_Callback_Wrapper implements ArrayAccess {

	/**
	 * Callback data.
	 *
	 * @var array
	 */
	protected $callback;

	/**
	 * Function to call before invoking the callback.
	 *
	 * @var callable|null
	 */
	protected $before_invoke;

	/**
	 * AMP_Validation_Callback_Wrapper constructor.
	 *
	 * @param array         $callback {
	 *     The callback data.
	 *
	 *     @type callable $function
	 *     @type int      $accepted_args
	 *     @type array    $source
	 *     @type array    $indirect_sources
	 * }
	 * @param callable|null $before_invoke Additional callback to run before invoking original callback. Optional.
	 */
	public function __construct( $callback, $before_invoke = null ) {
		$this->callback      = $callback;
		$this->before_invoke = $before_invoke;
	}

	/**
	 * Get callback function.
	 *
	 * @return callable
	 */
	public function get_callback_function() {
		return $this->callback['function'];
	}

	/**
	 * Prepare for invocation.
	 *
	 * @since 1.5
	 *
	 * @param mixed ...$args Arguments.
	 * @return array Preparation data.
	 *
	 * @global WP_Scripts|null $wp_scripts
	 * @global WP_Styles|null  $wp_styles
	 */
	protected function prepare( ...$args ) {
		global $wp_scripts, $wp_styles;

		if ( isset( $wp_styles ) && $wp_styles instanceof WP_Styles ) {
			$styles = $wp_styles;
		} elseif ( isset( $args[0] ) && $args[0] instanceof WP_Styles ) {
			$styles = $args[0]; // This is a special case for wp_default_styles().
		} else {
			$styles = null;
		}
		if ( isset( $wp_scripts ) && $wp_scripts instanceof WP_Scripts ) {
			$scripts = $wp_scripts;
		} elseif ( isset( $args[0] ) && $args[0] instanceof WP_Scripts ) {
			$scripts = $args[0]; // This is a special case for wp_default_scripts().
		} else {
			$scripts = null;
		}

		if ( isset( $styles ) ) {
			$before_styles_enqueued   = $styles->queue;
			$before_styles_registered = array_keys( $styles->registered );
			$before_styles_extras     = wp_list_pluck( $styles->registered, 'extra' );
		} else {
			$before_styles_registered = [];
			$before_styles_enqueued   = [];
			$before_styles_extras     = [];
		}
		if ( isset( $scripts ) ) {
			$before_scripts_enqueued   = $scripts->queue;
			$before_scripts_registered = array_keys( $scripts->registered );
			$before_scripts_extras     = wp_list_pluck( $scripts->registered, 'extra' );
		} else {
			$before_scripts_registered = [];
			$before_scripts_enqueued   = [];
			$before_scripts_extras     = [];
		}

		$is_filter = isset( $this->callback['source']['hook'] ) && ! did_action( $this->callback['source']['hook'] );

		// Wrap the markup output of (action) hooks in source comments.
		AMP_Validation_Manager::$hook_source_stack[] = $this->callback['source'];
		if ( ! $is_filter && AMP_Validation_Manager::can_output_buffer() ) {
			$has_buffer_started = ob_start( [ AMP_Validation_Manager::class, 'wrap_buffer_with_source_comments' ] );
		} else {
			$has_buffer_started = false;
		}

		return compact(
			'styles',
			'before_styles_registered',
			'before_styles_enqueued',
			'before_styles_extras',
			'scripts',
			'before_scripts_registered',
			'before_scripts_enqueued',
			'before_scripts_extras',
			'is_filter',
			'has_buffer_started'
		);
	}

	/**
	 * Invoke wrapped callback.
	 *
	 * @param array ...$args Args.
	 * @return mixed Response.
	 */
	public function __invoke( ...$args ) {
		if ( $this->before_invoke ) {
			call_user_func( $this->before_invoke );
		}

		$preparation = $this->prepare( ...$args );

		$result = call_user_func_array(
			$this->callback['function'],
			array_slice( $args, 0, (int) $this->callback['accepted_args'] )
		);

		$this->finalize( $preparation );

		return $result;
	}

	/**
	 * Invoke wrapped callback with first argument passed by reference.
	 *
	 * @since 1.5
	 *
	 * @param object $first_arg     First argument.
	 * @param array  ...$other_args Other arguments.
	 * @return mixed
	 */
	public function invoke_with_first_ref_arg( &$first_arg, ...$other_args ) {
		if ( $this->before_invoke ) {
			call_user_func( $this->before_invoke );
		}

		$preparation = $this->prepare( $first_arg, ...$other_args );

		$function            = $this->callback['function'];
		$other_accepted_args = array_slice( $other_args, 0, (int) $this->callback['accepted_args'] - 1 );

		if ( $function instanceof self ) {
			$result = $function->invoke_with_first_ref_arg(
				$first_arg,
				...$other_accepted_args
			);
		} else {
			$result = $function(
				$first_arg,
				...$other_accepted_args
			);
		}

		$this->finalize( $preparation );

		return $result;
	}

	/**
	 * Finalize invocation.
	 *
	 * @since 1.5
	 *
	 * @param array $preparation Preparation data.
	 *
	 * @global WP_Scripts|null $wp_scripts
	 * @global WP_Styles|null  $wp_styles
	 */
	protected function finalize( array $preparation ) {
		// If a script/style was registered or enqueued in the callback, these should now be defined if not defined already.
		global $wp_scripts, $wp_styles;

		if ( $preparation['has_buffer_started'] ) {
			ob_end_flush();
		}
		array_pop( AMP_Validation_Manager::$hook_source_stack );

		if ( isset( $wp_styles ) && $wp_styles instanceof WP_Styles ) {
			$styles = $wp_styles;
		} elseif ( isset( $preparation['styles'] ) && $preparation['styles'] instanceof WP_Styles ) {
			$styles = $preparation['styles'];
		}
		if ( isset( $styles ) ) {
			$this->finalize_styles(
				$styles,
				$preparation['before_styles_registered'],
				$preparation['before_styles_enqueued'],
				$preparation['before_styles_extras']
			);
		}

		if ( isset( $wp_scripts ) && $wp_scripts instanceof WP_Scripts ) {
			$scripts = $wp_scripts;
		} elseif ( isset( $preparation['scripts'] ) && $preparation['scripts'] instanceof WP_Scripts ) {
			$scripts = $preparation['scripts'];
		}
		if ( isset( $scripts ) ) {
			$this->finalize_scripts(
				$scripts,
				$preparation['before_scripts_registered'],
				$preparation['before_scripts_enqueued'],
				$preparation['before_scripts_extras']
			);
		}
	}

	/**
	 * Finalize styles after invocation.
	 *
	 * @since 1.5
	 *
	 * @param WP_Styles $wp_styles         Styles registry.
	 * @param string[]  $before_registered Style handles registered before invocation.
	 * @param string[]  $before_enqueued   Style handles enqueued before invocation.
	 * @param array[]   $before_extras     Style extras before invocation.
	 */
	protected function finalize_styles( WP_Styles $wp_styles, array $before_registered, array $before_enqueued, array $before_extras ) {

		$sources = [ $this->callback['source'] ];
		if ( ! empty( $this->callback['indirect_sources'] ) ) {
			$sources = array_merge( $sources, $this->callback['indirect_sources'] );
		}

		// Keep track of which source enqueued the styles.
		// Note: Only the first time a style is registered/enqueued will be detected.
		$added_handles = array_unique(
			array_merge(
				array_diff( $wp_styles->queue, $before_enqueued ),
				array_diff( array_keys( $wp_styles->registered ), $before_registered )
			)
		);
		foreach ( $added_handles as $handle ) {
			foreach ( $sources as $source ) {
				AMP_Validation_Manager::$enqueued_style_sources[ $handle ][] = array_merge(
					$source,
					[ 'dependency_type' => 'style' ],
					compact( 'handle' )
				);
			}
		}

		// Keep track of which source added an inline style.
		foreach ( $wp_styles->registered as $handle => $dependency ) {
			if ( empty( $dependency->extra['after'] ) ) {
				continue;
			}

			$additions = array_diff(
				array_filter( $dependency->extra['after'] ),
				array_filter( isset( $before_extras[ $handle ]['after'] ) ? (array) $before_extras[ $handle ]['after'] : [] )
			);
			foreach ( $additions as $addition ) {
				foreach ( $sources as $source ) {
					AMP_Validation_Manager::$extra_style_sources[ $handle ][ $addition ][] = array_merge(
						$source,
						[
							'dependency_type' => 'style',
							'extra_key'       => 'after',
							'text'            => $addition,
						],
						compact( 'handle' )
					);
				}
			}
		}
	}

	/**
	 * Finalize scripts after invocation.
	 *
	 * @since 1.5
	 *
	 * @param WP_Scripts $wp_scripts        Scripts registry.
	 * @param string[]   $before_registered Script handles registered before invocation.
	 * @param string[]   $before_enqueued   Script handles enqueued before invocation.
	 * @param array[]    $before_extras     Script extras before invocation.
	 */
	protected function finalize_scripts( WP_Scripts $wp_scripts, array $before_registered, array $before_enqueued, array $before_extras ) {

		$sources = [ $this->callback['source'] ];
		if ( ! empty( $this->callback['indirect_sources'] ) ) {
			$sources = array_merge( $sources, $this->callback['indirect_sources'] );
		}

		// Keep track of which source enqueued the scripts.
		// Note: Only the first time a script is registered/enqueued will be detected.
		$added_handles = array_unique(
			array_merge(
				array_diff( $wp_scripts->queue, $before_enqueued ),
				array_diff( array_keys( $wp_scripts->registered ), $before_registered )
			)
		);
		foreach ( $added_handles as $added_handle ) {
			$handles = [ $added_handle ];

			// Account for case where registered script is a placeholder for a set of scripts (e.g. jquery).
			if ( isset( $wp_scripts->registered[ $added_handle ] ) && empty( $wp_scripts->registered[ $added_handle ]->src ) ) {
				$handles = array_merge( $handles, $wp_scripts->registered[ $added_handle ]->deps );
			}

			foreach ( $handles as $handle ) {
				foreach ( $sources as $source ) {
					AMP_Validation_Manager::$enqueued_script_sources[ $handle ][] = array_merge(
						$source,
						[ 'dependency_type' => 'script' ],
						compact( 'handle' )
					);
				}
			}
		}

		// Keep track of which source added inline scripts.
		foreach ( $wp_scripts->registered as $handle => $dependency ) {
			if ( empty( $dependency->extra ) ) {
				continue;
			}
			foreach ( [ 'data', 'before', 'after' ] as $key ) {
				if ( empty( $dependency->extra[ $key ] ) ) {
					continue;
				}

				if ( empty( $before_extras[ $handle ][ $key ] ) ) {
					$before = [];
				} elseif ( 'data' === $key ) {
					// Undo concatenation done by \WP_Scripts::localize().
					$before = explode( "\n", $before_extras[ $handle ][ $key ] );
				} else {
					$before = $before_extras[ $handle ][ $key ];
				}

				if ( empty( $dependency->extra[ $key ] ) ) {
					$after = [];
				} elseif ( 'data' === $key ) {
					// Undo concatenation done by \WP_Scripts::localize().
					$after = explode( "\n", $dependency->extra[ $key ] );
				} else {
					$after = $dependency->extra[ $key ];
				}

				$additions = array_diff(
					array_filter( $after ),
					array_filter( $before )
				);
				foreach ( $additions as $addition ) {
					foreach ( $sources as $source ) {
						AMP_Validation_Manager::$extra_script_sources[ $addition ][] = array_merge(
							$source,
							[
								'dependency_type' => 'script',
								'extra_key'       => $key,
								'text'            => $addition,
							],
							compact( 'handle' )
						);
					}
				}
			}
		}
	}

	/**
	 * Offset set.
	 *
	 * @param mixed $offset Offset.
	 * @param mixed $value  Value.
	 */
	#[\ReturnTypeWillChange]
	public function offsetSet( $offset, $value ) {
		if ( ! is_array( $this->callback['function'] ) ) {
			return;
		}
		if ( is_null( $offset ) ) {
			$this->callback['function'][] = $value;
		} else {
			$this->callback['function'][ $offset ] = $value;
		}
	}

	/**
	 * Offset exists.
	 *
	 * @param mixed $offset Offset.
	 * @return bool Exists.
	 */
	#[\ReturnTypeWillChange]
	public function offsetExists( $offset ) {
		if ( ! is_array( $this->callback['function'] ) ) {
			return false;
		}
		return isset( $this->callback['function'][ $offset ] );
	}

	/**
	 * Offset unset.
	 *
	 * @param mixed $offset Offset.
	 */
	#[\ReturnTypeWillChange]
	public function offsetUnset( $offset ) {
		if ( ! is_array( $this->callback['function'] ) ) {
			return;
		}
		unset( $this->callback['function'][ $offset ] );
	}

	/**
	 * Offset get.
	 *
	 * @param mixed $offset Offset.
	 * @return mixed|null Value.
	 */
	#[\ReturnTypeWillChange]
	public function offsetGet( $offset ) {
		if ( is_array( $this->callback['function'] ) && isset( $this->callback['function'][ $offset ] ) ) {
			return $this->callback['function'][ $offset ];
		}
		return null;
	}
}
PK.3Y�#6IF�F�Fbunyad-amp/includes/validation/class-amp-validation-error-taxonomy.php<?php
/**
 * Class AMP_Validation_Error_Taxonomy
 *
 * @package AMP
 */

use AmpProject\AmpWP\Icon;
use AmpProject\AmpWP\Services;
use AmpProject\AmpWP\Admin\ValidationCounts;

/**
 * Class AMP_Validation_Error_Taxonomy
 *
 * @since 1.0
 * @internal
 */
class AMP_Validation_Error_Taxonomy {

	/**
	 * The slug of the taxonomy to store AMP errors.
	 *
	 * @var string
	 */
	const TAXONOMY_SLUG = 'amp_validation_error';

	/**
	 * Acknowledged validation error bit mask.
	 *
	 * @var int
	 */
	const ACKNOWLEDGED_VALIDATION_ERROR_BIT_MASK = 2; // === 0b10.

	/**
	 * Accepted validation error bit mask.
	 *
	 * @var int
	 */
	const ACCEPTED_VALIDATION_ERROR_BIT_MASK = 1; // === 0b01.

	/**
	 * Term group for new validation_error terms which are rejected (not auto-accepted).
	 *
	 * @var int
	 */
	const VALIDATION_ERROR_NEW_REJECTED_STATUS = 0; // == 0b00 == ^ACKNOWLEDGED_VALIDATION_ERROR_BIT_MASK | ^ACCEPTED_VALIDATION_ERROR_BIT_MASK.

	/**
	 * Term group for new validation_error terms which are auto-accepted.
	 *
	 * @var int
	 */
	const VALIDATION_ERROR_NEW_ACCEPTED_STATUS = 1; // == 0b01 == ^ACKNOWLEDGED_VALIDATION_ERROR_BIT_MASK | ACCEPTED_VALIDATION_ERROR_BIT_MASK.

	/**
	 * Term group for validation_error terms that the accepts and thus can be sanitized and does not disable AMP.
	 *
	 * @var int
	 */
	const VALIDATION_ERROR_ACK_ACCEPTED_STATUS = 3; // == 0b11 == ACKNOWLEDGED_VALIDATION_ERROR_BIT_MASK | ACCEPTED_VALIDATION_ERROR_BIT_MASK.

	/**
	 * Term group for validation_error terms that the user flags as being blockers to enabling AMP.
	 *
	 * @var int
	 */
	const VALIDATION_ERROR_ACK_REJECTED_STATUS = 2; // == 0b10 == ACKNOWLEDGED_VALIDATION_ERROR_BIT_MASK | ^ACCEPTED_VALIDATION_ERROR_BIT_MASK.

	/**
	 * Action name for ignoring a validation error.
	 *
	 * @var string
	 */
	const VALIDATION_ERROR_ACKNOWLEDGE_ACTION = 'amp_validation_error_ack';

	/**
	 * Action name for ignoring a validation error.
	 *
	 * @var string
	 */
	const VALIDATION_ERROR_ACCEPT_ACTION = 'amp_validation_error_accept';

	/**
	 * Action name for rejecting a validation error.
	 *
	 * @var string
	 */
	const VALIDATION_ERROR_REJECT_ACTION = 'amp_validation_error_reject';

	/**
	 * Action name for clearing empty validation error terms.
	 *
	 * @var string
	 */
	const VALIDATION_ERROR_CLEAR_EMPTY_ACTION = 'amp_validation_error_terms_clear_empty';

	/**
	 * Query var used when filtering by validation error status or passing updates.
	 *
	 * @var string
	 */
	const VALIDATION_ERROR_STATUS_QUERY_VAR = 'amp_validation_error_status';

	/**
	 * Query var used when filtering for the validation error type.
	 *
	 * @var string
	 */
	const VALIDATION_ERROR_TYPE_QUERY_VAR = 'amp_validation_error_type';

	/**
	 * Query var used for ordering list by error code.
	 *
	 * @var string
	 */
	const VALIDATION_DETAILS_ERROR_CODE_QUERY_VAR = 'amp_validation_code';

	/**
	 * Query var used to indicate how many terms were deleted.
	 *
	 * @var string
	 */
	const VALIDATION_ERRORS_CLEARED_QUERY_VAR = 'amp_validation_errors_cleared';

	/**
	 * The <option> value to not filter at all, like for 'All Statuses'.
	 *
	 * This is also used in WP_List_Table, like for the 'Bulk Actions' option.
	 * When this is present, this ensures that this isn't filtered.
	 *
	 * @var string
	 */
	const NO_FILTER_VALUE = '';

	/**
	 * The 'type' of error for invalid HTML elements, like <frame>.
	 *
	 * These usually have the 'code' of AMP_Tag_And_Attribute_Sanitizer::DISALLOWED_TAG.
	 * Except for AMP_Tag_And_Attribute_Sanitizer::DISALLOWED_TAG errors for a <script>, which have the JS_ERROR_TYPE.
	 * This allows filtering by type in the taxonomy page, like displaying only HTML element errors, or only CSS errors.
	 *
	 * @var string
	 */
	const HTML_ELEMENT_ERROR_TYPE = 'html_element_error';

	/**
	 * The 'type' of error for invalid HTML attributes.
	 *
	 * Banned attributes include i-amp-*.
	 * But on* attributes, like onclick, have the JS_ERROR_TYPE.
	 *
	 * @var string
	 */
	const HTML_ATTRIBUTE_ERROR_TYPE = 'html_attribute_error';

	/**
	 * The 'type' of error that applies to the error 'code' of AMP_Tag_And_Attribute_Sanitizer::DISALLOWED_TAG when the node is a <script>.
	 * This applies both when enqueuing a script, and when a <script> is echoed directly.
	 *
	 * @var string
	 */
	const JS_ERROR_TYPE = 'js_error';

	/**
	 * The 'type' of all CSS errors, no matter what the 'code'.
	 *
	 * @var string
	 */
	const CSS_ERROR_TYPE = 'css_error';

	/**
	 * The key for removed elements.
	 *
	 * @var string
	 */
	const REMOVED_ELEMENTS = 'removed_elements';

	/**
	 * The key for found elements and attributes.
	 *
	 * @var string
	 */
	const FOUND_ELEMENTS_AND_ATTRIBUTES = 'found_elements_and_attributes';

	/**
	 * The key for removed attributes.
	 *
	 * @var string
	 */
	const REMOVED_ATTRIBUTES = 'removed_attributes';

	/**
	 * The key in the response for the sources that have invalid output.
	 *
	 * @var string
	 */
	const SOURCES_INVALID_OUTPUT = 'sources_with_invalid_output';

	/**
	 * The key for the error status.
	 *
	 * @var string
	 */
	const ERROR_STATUS = 'error_status';

	/**
	 * Key for the transient storing error index counts.
	 *
	 * @var string
	 */
	const TRANSIENT_KEY_ERROR_INDEX_COUNTS = 'amp_error_index_counts';

	/**
	 * Current row index for the validated URL's validation error being displayed.
	 *
	 * @var int
	 */
	protected static $current_validation_error_row_index = 0;

	/**
	 * Whether the terms_clauses filter should apply to a term query for validation errors to limit to a given status.
	 *
	 * This is set to false when calling wp_count_terms() for the admin menu and for the views.
	 *
	 * @see AMP_Validation_Manager::get_validation_error_count()
	 * @var bool
	 */
	protected static $should_filter_terms_clauses_for_error_validation_status;

	/**
	 * Registers the taxonomy to store the validation errors.
	 *
	 * @return void
	 */
	public static function register() {
		$dev_tools_user_access = Services::get( 'dev_tools.user_access' );

		// Show in the admin menu if dev tools are enabled for the user or if the user is on any dev tools screen.
		$show_in_menu = (
			$dev_tools_user_access->is_user_enabled()
			||
			( isset( $_GET['post_type'] ) && AMP_Validated_URL_Post_Type::POST_TYPE_SLUG === $_GET['post_type'] ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			||
			( isset( $_GET['post'], $_GET['action'] ) && 'edit' === $_GET['action'] && AMP_Validated_URL_Post_Type::POST_TYPE_SLUG === get_post_type( (int) $_GET['post'] ) ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			||
			( isset( $_GET['taxonomy'] ) && self::TAXONOMY_SLUG === $_GET['taxonomy'] ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			||
			( isset( $_GET[ self::TAXONOMY_SLUG ] ) ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended
		);

		register_taxonomy(
			self::TAXONOMY_SLUG,
			AMP_Validated_URL_Post_Type::POST_TYPE_SLUG,
			[
				'labels'             => [
					'name'                  => _x( 'AMP Validation Error Index', 'taxonomy general name', 'amp' ),
					'singular_name'         => _x( 'AMP Validation Error', 'taxonomy singular name', 'amp' ),
					'search_items'          => __( 'Search AMP Validation Errors', 'amp' ),
					'all_items'             => __( 'All AMP Validation Errors', 'amp' ),
					'edit_item'             => __( 'Edit AMP Validation Error', 'amp' ),
					'update_item'           => __( 'Update AMP Validation Error', 'amp' ),
					'menu_name'             => __( 'Error Index', 'amp' ),
					'back_to_items'         => __( 'Back to AMP Validation Errors', 'amp' ),
					'popular_items'         => __( 'Frequent Validation Errors', 'amp' ),
					'view_item'             => __( 'View Validation Error', 'amp' ),
					'add_new_item'          => __( 'Add New Validation Error', 'amp' ), // Makes no sense.
					'new_item_name'         => __( 'New Validation Error Hash', 'amp' ), // Makes no sense.
					'not_found'             => __( 'No validation errors found.', 'amp' ),
					'no_terms'              => __( 'Validation Error', 'amp' ),
					'items_list_navigation' => __( 'Validation errors navigation', 'amp' ),
					'items_list'            => __( 'Validation errors list', 'amp' ),
					/* translators: Tab heading when selecting from the most used terms */
					'most_used'             => __( 'Most Used Validation Errors', 'amp' ),
				],
				'public'             => false,
				'show_ui'            => true, // @todo False because we need a custom UI.
				'show_tagcloud'      => false,
				'show_in_quick_edit' => false,
				'hierarchical'       => false, // Or true? Code could be the parent term?
				'show_in_menu'       => $show_in_menu,
				'meta_box_cb'        => false,
				'capabilities'       => [
					'manage_terms' => AMP_Validation_Manager::VALIDATE_CAPABILITY, // Needed to give access to the term list table.
					'delete_terms' => AMP_Validation_Manager::VALIDATE_CAPABILITY, // Needed so the checkbox (cb) table column will work.
					'assign_terms' => 'do_not_allow', // Block assign_terms since associating terms with posts is done programmatically.
					'edit_terms'   => 'do_not_allow', // Terms are created (and updated) programmatically.
				],
			]
		);

		if ( is_admin() ) {
			self::add_admin_hooks();
		}

		add_action( 'created_' . self::TAXONOMY_SLUG, [ __CLASS__, 'clear_cached_counts' ] );
		add_action( 'edited_' . self::TAXONOMY_SLUG, [ __CLASS__, 'clear_cached_counts' ] );
		add_action( 'delete_' . self::TAXONOMY_SLUG, [ __CLASS__, 'clear_cached_counts' ] );
	}

	/**
	 * Get amp_validation_error taxonomy term by slug or error properties.
	 *
	 * @since 1.0
	 * @see get_term_by()
	 *
	 * @param string|array $error Slug for term or array of term data.
	 * @return WP_Term|false Queried term or false if no match.
	 */
	public static function get_term( $error ) {
		$slug = null;
		if ( is_string( $error ) ) {
			$slug = $error;
		} elseif ( is_array( $error ) ) {
			$term_data = self::prepare_validation_error_taxonomy_term( $error );
			$slug      = $term_data['slug'];
		}
		if ( ! $slug ) {
			_doing_it_wrong( __METHOD__, esc_html__( 'Method must be passed a term slug (string) or error attributes (array).', 'amp' ), '1.0' );
			return false;
		}

		return get_term_by( 'slug', $slug, self::TAXONOMY_SLUG );
	}

	/**
	 * Delete all amp_validation_error terms that have zero counts (no amp_validated_url posts associated with them).
	 *
	 * @since 1.0
	 *
	 * @return int Count of terms that were deleted.
	 */
	public static function delete_empty_terms() {
		global $wpdb;
		// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
		$empty_term_ids = $wpdb->get_col(
			$wpdb->prepare( "SELECT term_id FROM $wpdb->term_taxonomy WHERE taxonomy = %s AND count = 0", self::TAXONOMY_SLUG )
		);

		if ( empty( $empty_term_ids ) ) {
			return 0;
		}

		// Make sure the term counts are still accurate.
		wp_update_term_count_now( $empty_term_ids, self::TAXONOMY_SLUG );

		$deleted_count = 0;
		foreach ( $empty_term_ids as $term_id ) {
			if ( true === self::delete_empty_term( $term_id ) ) {
				$deleted_count++;
			}
		}
		return $deleted_count;
	}

	/**
	 * Delete an amp_validation_error term if it has no amp_validated_url posts associated with it.
	 *
	 * @param int $term_id Term ID.
	 * @return bool True if deleted, false otherwise.
	 */
	public static function delete_empty_term( $term_id ) {
		$term = get_term( (int) $term_id, self::TAXONOMY_SLUG );

		// Skip if the term count was not actually 0.
		if ( ! $term instanceof WP_Term || 0 !== $term->count ) {
			return false;
		}

		if ( true === wp_delete_term( $term->term_id, self::TAXONOMY_SLUG ) ) {
			return true;
		}

		return false;
	}

	/**
	 * Sanitize term status(es).
	 *
	 * @param int|int[]|string $status One or more statuses (including comma-delimited string).
	 * @param array            $options {
	 *     Options.
	 *
	 *     @type bool $multiple Multiple, whether to extract more than one. Default false.
	 * }
	 * @return int|int[]|null Returns an integer unless the multiple option is passed. Null if invalid.
	 */
	public static function sanitize_term_status( $status, $options = [] ) {
		$multiple = ! empty( $options['multiple'] );

		// Catch case where an empty string is supplied. Prevent casting to 0.
		if ( ! is_numeric( $status ) && empty( $status ) ) {
			return $multiple ? [] : null;
		}

		if ( is_string( $status ) ) {
			$statuses = wp_parse_id_list( $status );
		} else {
			$statuses = array_map( 'absint', (array) $status );
		}

		$statuses = array_intersect(
			[
				self::VALIDATION_ERROR_NEW_REJECTED_STATUS,
				self::VALIDATION_ERROR_NEW_ACCEPTED_STATUS,
				self::VALIDATION_ERROR_ACK_ACCEPTED_STATUS,
				self::VALIDATION_ERROR_ACK_REJECTED_STATUS,
			],
			$statuses
		);
		$statuses = array_values( array_unique( $statuses ) );

		if ( ! $multiple ) {
			return array_shift( $statuses );
		}

		return $statuses;
	}

	/**
	 * Prepare term_group IN condition for SQL WHERE clause.
	 *
	 * @param int[] $groups Term groups.
	 * @return string SQL.
	 */
	public static function prepare_term_group_in_sql( $groups ) {
		global $wpdb;
		return $wpdb->prepare(
			'IN ( ' . implode( ', ', array_fill( 0, count( $groups ), '%d' ) ) . ' )',
			$groups
		);
	}

	/**
	 * Prepare a validation error for lookup or insertion as taxonomy term.
	 *
	 * @param array $error Validation error.
	 * @return array Term fields.
	 */
	public static function prepare_validation_error_taxonomy_term( $error ) {
		unset( $error['sources'] );
		ksort( $error );
		$description = wp_json_encode( $error );
		$term_slug   = md5( $description );
		return [
			'slug'        => $term_slug,
			'name'        => $term_slug,
			'description' => $description,
		];
	}

	/**
	 * Determine whether a validation error should be sanitized.
	 *
	 * @since 1.0
	 * @see AMP_Validation_Error_Taxonomy::get_validation_error_sanitization()
	 * @see AMP_Validation_Manager::is_sanitization_auto_accepted()
	 *
	 * @param array $error Validation error.
	 * @return bool Whether error should be sanitized.
	 */
	public static function is_validation_error_sanitized( $error ) {
		$sanitization = self::get_validation_error_sanitization( $error );
		return (
			self::VALIDATION_ERROR_ACK_ACCEPTED_STATUS === $sanitization['status']
			||
			self::VALIDATION_ERROR_NEW_ACCEPTED_STATUS === $sanitization['status']
		);
	}

	/**
	 * Get the validation error sanitization.
	 *
	 * @since 1.0
	 * @see AMP_Validation_Manager::is_sanitization_auto_accepted()
	 *
	 * @param array $error Validation error.
	 * @return array {
	 *     Validation error sanitization.
	 *
	 *     @type int          $status      Validation status.
	 *     @type int          $term_status The initial validation status prior to being overridden by previewing, option, or filter.
	 *     @type false|string $forced      If and how the status is overridden from its initial term status.
	 * }
	 */
	public static function get_validation_error_sanitization( $error ) {
		$term_data = self::prepare_validation_error_taxonomy_term( $error );
		$term      = self::get_term( $term_data['slug'] );
		$statuses  = [
			self::VALIDATION_ERROR_NEW_REJECTED_STATUS,
			self::VALIDATION_ERROR_NEW_ACCEPTED_STATUS,
			self::VALIDATION_ERROR_ACK_ACCEPTED_STATUS,
			self::VALIDATION_ERROR_ACK_REJECTED_STATUS,
		];
		if ( ! empty( $term ) && in_array( $term->term_group, $statuses, true ) ) {
			$term_status = $term->term_group;
		} else {
			$term_status = AMP_Validation_Manager::is_sanitization_auto_accepted( $error ) ? self::VALIDATION_ERROR_NEW_ACCEPTED_STATUS : self::VALIDATION_ERROR_NEW_REJECTED_STATUS;
		}

		$forced = false;
		$status = $term_status;

		// See note in AMP_Validation_Manager::add_validation_error_sourcing() for why amp_validation_error_sanitized filter isn't used.
		if ( isset( AMP_Validation_Manager::$validation_error_status_overrides[ $term_data['slug'] ] ) ) {
			$status = AMP_Validation_Manager::$validation_error_status_overrides[ $term_data['slug'] ];
			$forced = 'with_preview';
		}

		/**
		 * Filters whether the validation error should be sanitized.
		 *
		 * Returning true this indicates that the validation error is acceptable
		 * and should not be considered a blocker to render AMP. Returning null
		 * means that the default status should be used.
		 *
		 * Note that the $node is not passed here to ensure that the filter can be
		 * applied on validation errors that have been stored. Likewise, the $sources
		 * are also omitted because these are only available during an explicit
		 * validation request and so they are not suitable for plugins to vary
		 * sanitization by.
		 *
		 * @since 1.0
		 * @see AMP_Validation_Manager::is_sanitization_auto_accepted() Which controls whether an error is initially accepted or rejected for sanitization.
		 *
		 * @param null|bool $sanitized Whether sanitized; this is initially null, and changing it to bool causes the validation error to be forced.
		 * @param array $error Validation error being sanitized.
		 */
		$sanitized = apply_filters( 'amp_validation_error_sanitized', null, $error );

		if ( null !== $sanitized ) {
			$forced = 'with_filter';
			$status = $sanitized ? self::VALIDATION_ERROR_ACK_ACCEPTED_STATUS : self::VALIDATION_ERROR_ACK_REJECTED_STATUS;
		}

		return compact( 'status', 'forced', 'term_status' );
	}

	/**
	 * Automatically (forcibly) accept validation errors that arise (that is, remove the invalid markup causing the validation errors).
	 *
	 * @since 1.0
	 *
	 * @param array|true $acceptable_errors Acceptable validation errors, where keys are codes and values are either `true` or sparse array to check as subset. If just true, then all validation errors are accepted.
	 */
	public static function accept_validation_errors( $acceptable_errors ) {
		if ( empty( $acceptable_errors ) ) {
			return;
		}
		add_filter(
			'amp_validation_error_sanitized',
			static function( $sanitized, $error ) use ( $acceptable_errors ) {
				if ( true === $acceptable_errors ) {
					return true;
				}

				if ( isset( $acceptable_errors[ $error['code'] ] ) ) {
					if ( true === $acceptable_errors[ $error['code'] ] ) {
						return true;
					}
					foreach ( $acceptable_errors[ $error['code'] ] as $acceptable_error_props ) {
						if ( AMP_Validation_Error_Taxonomy::is_array_subset( $error, $acceptable_error_props ) ) {
							return true;
						}
					}
				}
				return $sanitized;
			},
			10,
			2
		);
	}

	/**
	 * Check if one array is a sparse subset of another array.
	 *
	 * @param array $superset Superset array.
	 * @param array $subset   Subset array.
	 *
	 * @return bool Whether subset is contained in superset.
	 */
	public static function is_array_subset( $superset, $subset ) {
		foreach ( $subset as $key => $subset_value ) {
			if ( ! isset( $superset[ $key ] ) || gettype( $subset_value ) !== gettype( $superset[ $key ] ) ) {
				return false;
			}
			if ( is_array( $subset_value ) ) {
				if ( ! self::is_array_subset( $superset[ $key ], $subset_value ) ) {
					return false;
				}
			} elseif ( $superset[ $key ] !== $subset_value ) {
				return false;
			}
		}
		return true;
	}

	/**
	 * Get the count of validation error terms, optionally restricted by term group (e.g. accepted or rejected).
	 *
	 * @param array $args  {
	 *    Args passed into wp_count_terms().
	 *
	 *     @type int|int[]|string $group        Term group(s), including comma-separated ID list.
	 * }
	 * @return int Term count.
	 */
	public static function get_validation_error_count( $args = [] ) {
		$args = array_merge(
			[
				'group' => null,
			],
			$args
		);

		$cache_key     = wp_json_encode( $args );
		$cached_counts = get_transient( self::TRANSIENT_KEY_ERROR_INDEX_COUNTS );
		if ( empty( $cached_counts ) ) {
			$cached_counts = [];
		}

		if ( isset( $cached_counts[ $cache_key ] ) ) {
			return $cached_counts[ $cache_key ];
		}

		$groups = null;
		if ( isset( $args['group'] ) ) {
			$groups = self::sanitize_term_status( $args['group'], [ 'multiple' => true ] );
		}

		$filter = static function( $clauses ) use ( $groups ) {
			$clauses['where'] .= ' AND t.term_group ' . AMP_Validation_Error_Taxonomy::prepare_term_group_in_sql( $groups );
			return $clauses;
		};
		if ( isset( $args['group'] ) ) {
			add_filter( 'terms_clauses', $filter );
		}
		self::$should_filter_terms_clauses_for_error_validation_status = false;
		$term_count = wp_count_terms( self::TAXONOMY_SLUG, $args );
		self::$should_filter_terms_clauses_for_error_validation_status = true;
		if ( isset( $args['group'] ) ) {
			remove_filter( 'terms_clauses', $filter );
		}

		$result = (int) $term_count;

		$cached_counts[ $cache_key ] = $result;
		set_transient( self::TRANSIENT_KEY_ERROR_INDEX_COUNTS, $cached_counts, DAY_IN_SECONDS );

		return $result;
	}

	/**
	 * Add support for querying posts by amp_validation_error_status and by error type.
	 *
	 * Add recognition of amp_validation_error_status query var for amp_validated_url post queries.
	 * Also, conditionally filter for error type, like js_error or css_error.
	 *
	 * @see WP_Tax_Query::get_sql_for_clause()
	 *
	 * @param string   $where SQL WHERE clause.
	 * @param WP_Query $query Query.
	 * @return string Modified WHERE clause.
	 */
	public static function filter_posts_where_for_validation_error_status( $where, WP_Query $query ) {
		global $wpdb;

		// If the post type is not correct, return the $where clause unchanged.
		if ( ! in_array( AMP_Validated_URL_Post_Type::POST_TYPE_SLUG, (array) $query->get( 'post_type' ), true ) ) {
			return $where;
		}

		$error_statuses = [];
		if ( false !== $query->get( self::VALIDATION_ERROR_STATUS_QUERY_VAR, false ) ) {
			$error_statuses = self::sanitize_term_status( $query->get( self::VALIDATION_ERROR_STATUS_QUERY_VAR ), [ 'multiple' => true ] );
		}
		$error_type = sanitize_key( $query->get( self::VALIDATION_ERROR_TYPE_QUERY_VAR ) );

		/*
		 * Selecting the 'All Statuses' <option> sends a value of '' to indicate that this should not filter.
		 */
		$is_error_status_present = ! empty( $error_statuses );
		$is_error_type_present   = in_array( $error_type, self::get_error_types(), true );

		// If neither the error status nor the type is present, there is no need to filter the $where clause.
		if ( ! $is_error_status_present && ! $is_error_type_present ) {
			return $where;
		}

		$sql_select = $wpdb->prepare(
			"
				SELECT 1
				FROM $wpdb->term_relationships
				INNER JOIN $wpdb->term_taxonomy ON $wpdb->term_taxonomy.term_taxonomy_id = $wpdb->term_relationships.term_taxonomy_id
				INNER JOIN $wpdb->terms ON $wpdb->terms.term_id = $wpdb->term_taxonomy.term_id
				WHERE
					$wpdb->term_taxonomy.taxonomy = %s
					AND
					$wpdb->term_relationships.object_id = $wpdb->posts.ID
			",
			self::TAXONOMY_SLUG
		);

		if ( $is_error_status_present ) {
			$sql_select .= " AND $wpdb->terms.term_group " . self::prepare_term_group_in_sql( $error_statuses );
		}

		if ( $is_error_type_present ) {
			$sql_select .= $wpdb->prepare(
				" AND $wpdb->term_taxonomy.description LIKE %s ",
				'%"type":"' . $wpdb->esc_like( $error_type ) . '"%'
			);
		}

		$sql_select .= ' LIMIT 1 ';

		$where .= " AND ( $sql_select ) ";

		return $where;
	}

	/**
	 * Gets the AMP validation response.
	 *
	 * Returns the current validation errors the sanitizers found in rendering the page.
	 *
	 * @param array $validation_errors Validation errors.
	 * @return array The AMP validity of the markup.
	 */
	public static function summarize_validation_errors( $validation_errors ) {
		$results            = [];
		$removed_elements   = [];
		$removed_attributes = [];
		$removed_pis        = [];
		$sources            = [];
		foreach ( $validation_errors as $validation_error ) {
			$code = isset( $validation_error['code'] ) ? $validation_error['code'] : null;

			if ( AMP_Tag_And_Attribute_Sanitizer::DISALLOWED_TAG === $code ) {
				if ( ! isset( $removed_elements[ $validation_error['node_name'] ] ) ) {
					$removed_elements[ $validation_error['node_name'] ] = 0;
				}
				++$removed_elements[ $validation_error['node_name'] ];
			} elseif ( AMP_Tag_And_Attribute_Sanitizer::DISALLOWED_ATTR === $code ) {
				if ( ! isset( $removed_attributes[ $validation_error['node_name'] ] ) ) {
					$removed_attributes[ $validation_error['node_name'] ] = 0;
				}
				++$removed_attributes[ $validation_error['node_name'] ];
			} elseif ( AMP_Tag_And_Attribute_Sanitizer::DISALLOWED_PROCESSING_INSTRUCTION === $code ) {
				if ( ! isset( $removed_pis[ $validation_error['node_name'] ] ) ) {
					$removed_pis[ $validation_error['node_name'] ] = 0;
				}
				++$removed_pis[ $validation_error['node_name'] ];
			}

			if ( ! empty( $validation_error['sources'] ) ) {
				$sources = array_merge( $sources, $validation_error['sources'] );
			}
		}

		$results = array_merge(
			[
				self::SOURCES_INVALID_OUTPUT => self::summarize_sources( $sources ),
			],
			compact(
				'removed_elements',
				'removed_attributes',
				'removed_pis'
			),
			$results
		);

		return $results;
	}

	/**
	 * Summarize sources.
	 *
	 * @param array $sources Sources.
	 * @return array Summarized (de-duped) sources.
	 */
	public static function summarize_sources( $sources ) {
		$summarized_sources = [];
		foreach ( $sources as $source ) {
			if ( isset( $source['hook'] ) ) {
				$summarized_sources['hook'] = $source['hook'];
			}
			if ( isset( $source['type'], $source['name'] ) ) {
				$summarized_sources[ $source['type'] ][] = $source['name'];
			} elseif ( isset( $source['embed'] ) ) {
				$summarized_sources['embed'] = true;
			}
			if ( isset( $source['block_name'] ) ) {
				$summarized_sources['blocks'][] = $source['block_name'];
			}
		}

		// Remove core if there is a plugin or theme.
		if ( isset( $summarized_sources['core'] ) && ( isset( $summarized_sources['theme'] ) || isset( $summarized_sources['plugin'] ) ) ) {
			unset( $summarized_sources['core'] );
		}
		return $summarized_sources;
	}

	/**
	 * Add admin hooks.
	 */
	public static function add_admin_hooks() {
		add_filter( 'redirect_term_location', [ __CLASS__, 'add_term_filter_query_var' ], 10, 2 );
		add_action( 'load-edit-tags.php', [ __CLASS__, 'add_group_terms_clauses_filter' ] );
		add_action( 'load-edit-tags.php', [ __CLASS__, 'add_error_type_clauses_filter' ] );
		add_action( 'load-post.php', [ __CLASS__, 'add_error_type_clauses_filter' ] );
		add_action( 'load-edit-tags.php', [ __CLASS__, 'add_order_clauses_from_description_json' ] );
		add_action( 'load-post.php', [ __CLASS__, 'add_order_clauses_from_description_json' ] );
		add_action( sprintf( 'after-%s-table', self::TAXONOMY_SLUG ), [ __CLASS__, 'render_taxonomy_filters' ] );
		add_action( sprintf( 'after-%s-table', self::TAXONOMY_SLUG ), [ __CLASS__, 'render_link_to_invalid_urls_screen' ] );
		add_filter( 'terms_clauses', [ __CLASS__, 'filter_terms_clauses_for_description_search' ], 10, 3 );
		add_action( 'admin_notices', [ __CLASS__, 'add_admin_notices' ] );
		add_filter( self::TAXONOMY_SLUG . '_row_actions', [ __CLASS__, 'filter_tag_row_actions' ], PHP_INT_MAX, 2 );
		if ( get_taxonomy( self::TAXONOMY_SLUG )->show_in_menu ) {
			add_action( 'admin_menu', [ __CLASS__, 'add_admin_menu_validation_error_item' ] );
		}
		add_filter( 'manage_' . self::TAXONOMY_SLUG . '_custom_column', [ __CLASS__, 'filter_manage_custom_columns' ], 10, 3 );
		add_filter( 'manage_' . AMP_Validated_URL_Post_Type::POST_TYPE_SLUG . '_sortable_columns', [ __CLASS__, 'add_single_post_sortable_columns' ] );
		add_filter( 'posts_where', [ __CLASS__, 'filter_posts_where_for_validation_error_status' ], 10, 2 );
		add_filter( 'post_action_' . self::VALIDATION_ERROR_REJECT_ACTION, [ __CLASS__, 'handle_single_url_page_bulk_and_inline_actions' ] );
		add_filter( 'post_action_' . self::VALIDATION_ERROR_ACCEPT_ACTION, [ __CLASS__, 'handle_single_url_page_bulk_and_inline_actions' ] );
		add_filter( 'handle_bulk_actions-edit-' . self::TAXONOMY_SLUG, [ __CLASS__, 'handle_validation_error_update' ], 10, 3 );
		add_action( 'load-edit-tags.php', [ __CLASS__, 'handle_inline_edit_request' ] );
		add_action( 'load-edit-tags.php', [ __CLASS__, 'handle_clear_empty_terms_request' ] );
		add_action( 'load-edit.php', [ __CLASS__, 'handle_inline_edit_request' ] );

		// Prevent query vars from persisting after redirect.
		add_filter(
			'removable_query_args',
			static function( $query_vars ) {
				$query_vars[] = 'amp_actioned';
				$query_vars[] = 'amp_actioned_count';
				$query_vars[] = 'amp_validation_errors_not_deleted';
				$query_vars[] = AMP_Validation_Error_Taxonomy::VALIDATION_ERRORS_CLEARED_QUERY_VAR;
				return $query_vars;
			}
		);

		// Add recognition of amp_validation_error_status and type query vars (which will only apply in admin since post type is not publicly_queryable).
		add_filter(
			'query_vars',
			static function( $query_vars ) {
				$query_vars[] = AMP_Validation_Error_Taxonomy::VALIDATION_ERROR_STATUS_QUERY_VAR;
				$query_vars[] = AMP_Validation_Error_Taxonomy::VALIDATION_ERROR_TYPE_QUERY_VAR;
				return $query_vars;
			}
		);

		// Default ordering terms by ID descending so that new terms appear at the top.
		add_filter(
			'get_terms_defaults',
			static function( $args, $taxonomies ) {
				if ( [ AMP_Validation_Error_Taxonomy::TAXONOMY_SLUG ] === $taxonomies ) {
					$args['orderby'] = 'term_id';
					$args['order']   = 'DESC';
				}
				return $args;
			},
			10,
			2
		);

		// Remove bulk actions.
		add_filter( 'bulk_actions-edit-' . self::TAXONOMY_SLUG, '__return_empty_array' );

		// Override the columns displayed for the validation error terms.
		add_filter(
			'manage_edit-' . self::TAXONOMY_SLUG . '_columns',
			static function() {
				return [
					'error_code'       => esc_html__( 'Error', 'amp' ),
					'status'           => sprintf(
						'%s<span class="dashicons dashicons-editor-help tooltip-button" tabindex="0"></span><div class="tooltip" hidden data-content="%s"></div>',
						esc_html__( 'Markup Status', 'amp' ),
						esc_attr(
							sprintf(
								'<h3>%s</h3><p>%s</p>',
								esc_html__( 'Markup Status', 'amp' ),
								__( 'When invalid markup is removed it will not block a URL from being served as AMP; the validation error will be sanitized, where the offending markup is stripped from the response to ensure AMP validity. If invalid AMP markup is kept, then URLs is occurs on will not be served as AMP pages.', 'amp' )
							)
						)
					),
					'details'          => sprintf(
						'%s<span class="dashicons dashicons-editor-help tooltip-button" tabindex="0"></span><div class="tooltip" hidden data-content="%s"></div>',
						esc_html__( 'Context', 'amp' ),
						esc_attr(
							sprintf(
								'<h3>%s</h3><p>%s</p>',
								esc_html__( 'Context', 'amp' ),
								esc_html__( 'The parent element of where the error occurred.', 'amp' )
							)
						)
					),
					'error_type'       => esc_html__( 'Type', 'amp' ),
					'created_date_gmt' => esc_html__( 'Last Seen', 'amp' ),
					'posts'            => esc_html__( 'URLs', 'amp' ),
				];
			}
		);

		// Let the created date column sort by term ID.
		add_filter(
			'manage_edit-' . self::TAXONOMY_SLUG . '_sortable_columns',
			static function( $sortable_columns ) {
				$sortable_columns['created_date_gmt'] = 'term_id';
				$sortable_columns['error_type']       = AMP_Validation_Error_Taxonomy::VALIDATION_ERROR_TYPE_QUERY_VAR;
				$sortable_columns['error_code']       = AMP_Validation_Error_Taxonomy::VALIDATION_DETAILS_ERROR_CODE_QUERY_VAR;
				return $sortable_columns;
			}
		);

		// Hide empty term addition form.
		add_action(
			'admin_enqueue_scripts',
			static function() {
				$current_screen = get_current_screen();
				if ( ! $current_screen ) {
					return;
				}

				if ( AMP_Validation_Error_Taxonomy::TAXONOMY_SLUG === $current_screen->taxonomy ) {
					wp_add_inline_style(
						'common',
						'
					#col-left { display: none; }
					#col-right { float:none; width: auto; }

					/* Improve column widths */
					td.column-details pre, td.column-sources pre { overflow:auto; }
					th.column-created_date_gmt { width:15%; }
					th.column-status { width:15%; }
				'
					);

					wp_register_style(
						'amp-validation-tooltips',
						amp_get_asset_url( 'css/amp-validation-tooltips.css' ),
						[ 'wp-pointer' ],
						AMP__VERSION
					);

					wp_styles()->add_data( 'amp-validation-tooltips', 'rtl', 'replace' );

					$asset_file   = AMP__DIR__ . '/assets/js/amp-validation-tooltips.asset.php';
					$asset        = require $asset_file;
					$dependencies = $asset['dependencies'];
					$version      = $asset['version'];

					wp_register_script(
						'amp-validation-tooltips',
						amp_get_asset_url( 'js/amp-validation-tooltips.js' ),
						$dependencies,
						$version,
						true
					);

					wp_enqueue_style(
						'amp-validation-error-taxonomy',
						amp_get_asset_url( 'css/amp-validation-error-taxonomy.css' ),
						[ 'common', 'amp-validation-tooltips', 'amp-icons' ],
						AMP__VERSION
					);

					wp_styles()->add_data( 'amp-validation-error-taxonomy', 'rtl', 'replace' );

					wp_enqueue_script(
						'amp-validation-detail-toggle',
						amp_get_asset_url( 'js/amp-validation-detail-toggle.js' ),
						[ 'wp-dom-ready', 'wp-i18n', 'amp-validation-tooltips' ],
						AMP__VERSION,
						true
					);
				}

				if ( 'post' === $current_screen->base && AMP_Validated_URL_Post_Type::POST_TYPE_SLUG === $current_screen->post_type ) {
					wp_enqueue_style(
						'amp-validation-single-error-url',
						amp_get_asset_url( 'css/amp-validation-single-error-url.css' ),
						[ 'common', 'amp-icons' ],
						AMP__VERSION
					);

					wp_styles()->add_data( 'amp-validation-single-error-url', 'rtl', 'replace' );

					$asset_file   = AMP__DIR__ . '/assets/js/amp-validation-single-error-url-details.asset.php';
					$asset        = require $asset_file;
					$dependencies = $asset['dependencies'];
					$version      = $asset['version'];

					wp_enqueue_script(
						'amp-validation-single-error-url-details',
						amp_get_asset_url( 'js/amp-validation-single-error-url-details.js' ),
						$dependencies,
						$version,
						true
					);
				}
			}
		);

		// Make sure parent menu item is expanded when visiting the taxonomy term page.
		// This only applies if there is the top-level menu for the AMP settings admin screen. Otherwise, the parent file
		// is automatically the amp_validated_url post type screen.
		if ( current_user_can( 'manage_options' ) ) {
			add_filter(
				'parent_file',
				static function ( $parent_file ) {
					if ( get_current_screen()->taxonomy === AMP_Validation_Error_Taxonomy::TAXONOMY_SLUG ) {
						$parent_file = AMP_Options_Manager::OPTION_NAME;
					}
					return $parent_file;
				},
				10,
				2
			);
		}

		// Replace the primary column to be error instead of the removed name column..
		add_filter(
			'list_table_primary_column',
			static function( $primary_column ) {
				if ( get_current_screen() && AMP_Validation_Error_Taxonomy::TAXONOMY_SLUG === get_current_screen()->taxonomy ) {
					$primary_column = 'error_code';
				}
				return $primary_column;
			}
		);

		// Jump to the requested line when opening the file editor.
		add_action(
			'admin_enqueue_scripts',
			function ( $hook_suffix ) {
				if ( ! isset( $_GET['line'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
					return;
				}
				$line = (int) $_GET['line']; // phpcs:ignore WordPress.Security.NonceVerification.Recommended

				if ( 'plugin-editor.php' === $hook_suffix || 'theme-editor.php' === $hook_suffix ) {
					wp_add_inline_script(
						'wp-theme-plugin-editor',
						sprintf(
							'
								(
									function( originalInitCodeEditor ) {
										wp.themePluginEditor.initCodeEditor = function init() {
											originalInitCodeEditor.apply( this, arguments );
											this.instance.codemirror.doc.setCursor( %d - 1 );
										};
									}
								)( wp.themePluginEditor.initCodeEditor );
							',
							wp_json_encode( $line )
						)
					);
				}
			}
		);
	}

	/**
	 * Filter the term redirect URL, to possibly add query vars to filter by term status or type.
	 *
	 * On clicking the 'Filter' button on the 'AMP Validation Errors' taxonomy page,
	 * edit-tags.php processes the POST request that this submits.
	 * Then, it redirects to a URL to display the page again.
	 * This filter callback looks for a value for VALIDATION_ERROR_TYPE_QUERY_VAR in the $_POST request.
	 * That means that the user filtered by error type, like 'js_error'.
	 * It then passes that value to the redirect URL as a query var,
	 * So that the taxonomy page will be filtered for that error type.
	 *
	 * @see AMP_Validation_Error_Taxonomy::add_error_type_clauses_filter() for the filtering of the 'where' clause, based on the query vars.
	 * @param string      $url The $url to redirect to.
	 * @param WP_Taxonomy $tax The WP_Taxonomy object.
	 * @return string The filtered URL.
	 */
	public static function add_term_filter_query_var( $url, $tax ) {
		if (
			self::TAXONOMY_SLUG !== $tax->name
			||
			! isset( $_POST['post_type'] ) // phpcs:ignore WordPress.Security.NonceVerification.Missing
			||
			AMP_Validated_URL_Post_Type::POST_TYPE_SLUG !== $_POST['post_type'] // phpcs:ignore WordPress.Security.NonceVerification.Missing
		) {
			return $url;
		}

		// If the error type query var is valid, pass it along in the redirect $url.
		if (
			isset( $_POST[ self::VALIDATION_ERROR_TYPE_QUERY_VAR ] ) // phpcs:ignore WordPress.Security.NonceVerification.Missing
			&&
			in_array(
				$_POST[ self::VALIDATION_ERROR_TYPE_QUERY_VAR ], // phpcs:ignore WordPress.Security.NonceVerification.Missing
				array_merge( self::get_error_types(), [ self::NO_FILTER_VALUE ] ),
				true
			)
		) {
			$url = add_query_arg(
				self::VALIDATION_ERROR_TYPE_QUERY_VAR,
				sanitize_key( wp_unslash( $_POST[ self::VALIDATION_ERROR_TYPE_QUERY_VAR ] ) ), // phpcs:ignore WordPress.Security.NonceVerification.Missing
				$url
			);
		}

		// If the error status query var is valid, pass it along in the redirect $url.
		$groups = [];
		if ( isset( $_POST[ self::VALIDATION_ERROR_STATUS_QUERY_VAR ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing
			// phpcs:ignore WordPress.Security.NonceVerification.Missing, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
			$groups = self::sanitize_term_status( wp_unslash( $_POST[ self::VALIDATION_ERROR_STATUS_QUERY_VAR ] ), [ 'multiple' => true ] );
		}
		if ( ! empty( $groups ) ) {
			$url = add_query_arg(
				[ self::VALIDATION_ERROR_STATUS_QUERY_VAR => $groups ],
				$url
			);
		} else {
			$url = remove_query_arg( self::VALIDATION_ERROR_STATUS_QUERY_VAR, $url );
		}

		return $url;
	}

	/**
	 * Filter amp_validation_error term query by term group when requested.
	 */
	public static function add_group_terms_clauses_filter() {
		if ( self::TAXONOMY_SLUG !== get_current_screen()->taxonomy || ! isset( $_GET[ self::VALIDATION_ERROR_STATUS_QUERY_VAR ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			return;
		}
		self::$should_filter_terms_clauses_for_error_validation_status = true;
		// phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
		$groups = self::sanitize_term_status( wp_unslash( $_GET[ self::VALIDATION_ERROR_STATUS_QUERY_VAR ] ), [ 'multiple' => true ] );
		if ( empty( $groups ) ) {
			return;
		}
		add_filter(
			'terms_clauses',
			static function( $clauses, $taxonomies ) use ( $groups ) {
				if ( AMP_Validation_Error_Taxonomy::TAXONOMY_SLUG === $taxonomies[0] && AMP_Validation_Error_Taxonomy::$should_filter_terms_clauses_for_error_validation_status ) {
					$clauses['where'] .= ' AND t.term_group ' . AMP_Validation_Error_Taxonomy::prepare_term_group_in_sql( $groups );
				}
				return $clauses;
			},
			10,
			2
		);
	}

	/**
	 * Adds filter for amp_validation_error term query by type, like in the 'AMP Validation Errors' taxonomy page.
	 *
	 * Filters 'load-edit-tags.php' and 'load-post.php',
	 * as the post.php page is like an edit-tags.php page,
	 * in that it has a WP_Terms_List_Table of validation error terms.
	 * Allows viewing only a certain type at a time, like only JS errors.
	 */
	public static function add_error_type_clauses_filter() {
		if ( self::TAXONOMY_SLUG !== get_current_screen()->taxonomy || ! isset( $_GET[ self::VALIDATION_ERROR_TYPE_QUERY_VAR ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			return;
		}

		$type = sanitize_key( wp_unslash( $_GET[ self::VALIDATION_ERROR_TYPE_QUERY_VAR ] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
		if ( ! in_array( $type, self::get_error_types(), true ) ) {
			return;
		}

		add_filter(
			'terms_clauses',
			static function( $clauses, $taxonomies ) use ( $type ) {
				global $wpdb;
				if ( AMP_Validation_Error_Taxonomy::TAXONOMY_SLUG === $taxonomies[0] ) {
					$clauses['where'] .= $wpdb->prepare( ' AND tt.description LIKE %s', '%"type":"' . $wpdb->esc_like( $type ) . '"%' );
				}
				return $clauses;
			},
			10,
			2
		);
	}

	/**
	 * If ordering the list by a field in the description JSON, locate the best spot in the JSON string by which to sort alphabetically.
	 *
	 * This is used both on the taxonomy edit-tags.php page
	 * and the single URL post.php page, as that page also has a list table of terms.
	 */
	public static function add_order_clauses_from_description_json() {
		if ( self::TAXONOMY_SLUG !== get_current_screen()->taxonomy ) {
			return;
		}

		$sortable_column_vars = [
			self::VALIDATION_ERROR_TYPE_QUERY_VAR,
			self::VALIDATION_DETAILS_ERROR_CODE_QUERY_VAR,
		];

		if ( ! isset( $_GET['orderby'] ) || ! in_array( $_GET['orderby'], $sortable_column_vars, true ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			return;
		}

		add_filter(
			'terms_clauses',
			static function( $clauses ) {
				global $wpdb;

				if ( isset( $_GET['order'] ) && 'desc' === $_GET['order'] ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
					$clauses['order'] = 'DESC';
				} else {
					$clauses['order'] = 'ASC';
				}

				switch ( $_GET['orderby'] ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
					case AMP_Validation_Error_Taxonomy::VALIDATION_ERROR_TYPE_QUERY_VAR:
						$clauses['orderby'] = $wpdb->prepare(
							'ORDER BY SUBSTR(tt.description, LOCATE(%s, tt.description, LOCATE(%s, tt.description)))',
							'"type":"',
							'}' // Start substr search after the first closing bracket to skip the "type" nested in the element_attributes object.
						);
						break;

					case AMP_Validation_Error_Taxonomy::VALIDATION_DETAILS_ERROR_CODE_QUERY_VAR:
						$clauses['orderby'] = $wpdb->prepare(
							'ORDER BY SUBSTR(tt.description, LOCATE(%s, tt.description))',
							'"code":"'
						);
						break;
				}

				return $clauses;
			},
			10,
			2
		);
	}

	/**
	 * Outputs the taxonomy filter UI for this taxonomy type.
	 *
	 * Similar to what appears on /wp-admin/edit.php for posts and pages,
	 * this outputs <select> elements to choose the error status and type,
	 * and a 'Filter' submit button that filters for them.
	 *
	 * @param string $taxonomy_name The name of the taxonomy.
	 */
	public static function render_taxonomy_filters( $taxonomy_name ) {
		if ( self::TAXONOMY_SLUG !== $taxonomy_name ) {
			return;
		}

		$div_id = 'amp-tax-filter';
		?>
		<div id="<?php echo esc_attr( $div_id ); ?>" class="alignleft actions">
			<?php
			self::render_error_status_filter();
			self::render_error_type_filter();
			submit_button( __( 'Apply Filter', 'amp' ), '', 'filter_action', false, [ 'id' => 'doaction' ] );
			self::render_clear_empty_button();
			?>
		</div>

		<script>
			( function ( $ ) {
				$( function() {
					// Move the filter UI after the 'Bulk Actions' <select>, as it looks like there's no way to do this with only an action.
					$( '#<?php echo $div_id; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>' ).insertAfter( $( '.tablenav.top .bulkactions' ) );
				} );
			} )( jQuery );
		</script>
		<?php
	}

	/**
	 * On the 'Error Index' screen, renders a link to the 'AMP Validated URLs' page.
	 *
	 * @see AMP_Validated_URL_Post_Type::render_link_to_error_index_screen()
	 *
	 * @param string $taxonomy_name The name of the taxonomy.
	 */
	public static function render_link_to_invalid_urls_screen( $taxonomy_name ) {
		if ( self::TAXONOMY_SLUG !== $taxonomy_name ) {
			return;
		}

		$post_type_object = get_post_type_object( AMP_Validated_URL_Post_Type::POST_TYPE_SLUG );
		if ( ! current_user_can( $post_type_object->cap->edit_posts ) ) {
			return;
		}

		$id = 'link-errors-url';

		printf(
			'<a href="%s" class="page-title-action" id="%s" hidden style="margin-left: 1rem;">%s</a>',
			esc_url(
				add_query_arg(
					'post_type',
					AMP_Validated_URL_Post_Type::POST_TYPE_SLUG,
					admin_url( 'edit.php' )
				)
			),
			esc_attr( $id ),
			esc_html__( 'View Validated URLs', 'amp' )
		);

		?>
		<script>
			jQuery( function( $ ) {
				// Move the link to after the heading, as it also looks like there's no action for this.
				$( <?php echo wp_json_encode( '#' . $id ); ?> ).removeAttr( 'hidden' ).insertAfter( $( '.wp-heading-inline' ) );
			} );
		</script>
		<?php
	}

	/**
	 * Renders the error status filter <select> element.
	 *
	 * There is a difference how the errors are counted, depending on which screen this is on.
	 * For example: Removed Markup (10).
	 * This status filter <select> element is rendered on the validation error post page (Errors by URL),
	 * and the validation error taxonomy page (Error Index).
	 * On the taxonomy page, this simply needs to count the number of terms with a given type.
	 * On the post page, this needs to count the number of posts that have at least one error of a given type.
	 */
	public static function render_error_status_filter() {
		global $wp_query;
		$screen_base = get_current_screen()->base;

		if ( 'edit-tags' === $screen_base ) {
			$rejected_term_count = self::get_validation_error_count( [ 'group' => [ self::VALIDATION_ERROR_NEW_REJECTED_STATUS, self::VALIDATION_ERROR_ACK_REJECTED_STATUS ] ] );
			$accepted_term_count = self::get_validation_error_count( [ 'group' => [ self::VALIDATION_ERROR_NEW_ACCEPTED_STATUS, self::VALIDATION_ERROR_ACK_ACCEPTED_STATUS ] ] );
			$unreviewed_count    = self::get_validation_error_count( [ 'group' => [ self::VALIDATION_ERROR_NEW_REJECTED_STATUS, self::VALIDATION_ERROR_NEW_ACCEPTED_STATUS ] ] );

		} elseif ( 'edit' === $screen_base ) {
			$args = [
				'post_type'              => AMP_Validated_URL_Post_Type::POST_TYPE_SLUG,
				'update_post_meta_cache' => false,
				'update_post_term_cache' => false,
			];

			$error_type = sanitize_key( $wp_query->get( self::VALIDATION_ERROR_TYPE_QUERY_VAR ) );
			if ( $error_type && in_array( $error_type, self::get_error_types(), true ) ) {
				$args[ self::VALIDATION_ERROR_TYPE_QUERY_VAR ] = $error_type;
			}

			$with_new_query   = new WP_Query(
				array_merge(
					$args,
					[
						self::VALIDATION_ERROR_STATUS_QUERY_VAR => [
							self::VALIDATION_ERROR_NEW_ACCEPTED_STATUS,
							self::VALIDATION_ERROR_NEW_REJECTED_STATUS,
						],
					]
				)
			);
			$unreviewed_count = $with_new_query->found_posts;

			$with_rejected_query = new WP_Query(
				array_merge(
					$args,
					[
						self::VALIDATION_ERROR_STATUS_QUERY_VAR => [
							self::VALIDATION_ERROR_NEW_REJECTED_STATUS,
							self::VALIDATION_ERROR_ACK_REJECTED_STATUS,
						],
					]
				)
			);
			$rejected_term_count = $with_rejected_query->found_posts;

			$with_accepted_query = new WP_Query(
				array_merge(
					$args,
					[
						self::VALIDATION_ERROR_STATUS_QUERY_VAR => [
							self::VALIDATION_ERROR_NEW_ACCEPTED_STATUS,
							self::VALIDATION_ERROR_ACK_ACCEPTED_STATUS,
						],
					]
				)
			);
			$accepted_term_count = $with_accepted_query->found_posts;
		} else {
			return;
		}

		$selected_groups = [];
		if ( isset( $_GET[ self::VALIDATION_ERROR_STATUS_QUERY_VAR ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			// phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
			$selected_groups = self::sanitize_term_status( $_GET[ self::VALIDATION_ERROR_STATUS_QUERY_VAR ], [ 'multiple' => true ] );
		}
		if ( ! empty( $selected_groups ) ) {
			sort( $selected_groups );
			$error_status_filter_value = implode( ',', $selected_groups );
		} else {
			$error_status_filter_value = self::NO_FILTER_VALUE;
		}

		?>
		<label for="<?php echo esc_attr( self::VALIDATION_ERROR_STATUS_QUERY_VAR ); ?>" class="screen-reader-text"><?php esc_html_e( 'Filter by markup status', 'amp' ); ?></label>
		<select name="<?php echo esc_attr( self::VALIDATION_ERROR_STATUS_QUERY_VAR ); ?>" id="<?php echo esc_attr( self::VALIDATION_ERROR_STATUS_QUERY_VAR ); ?>">
			<option value="<?php echo esc_attr( self::NO_FILTER_VALUE ); ?>"><?php esc_html_e( 'All statuses', 'amp' ); ?></option>
			<?php
			$options_config = [
				[
					'text'        => 'edit' === $screen_base ? _x( 'With unreviewed errors', 'terms', 'amp' ) : _x( 'Unreviewed errors', 'terms', 'amp' ),
					'value'       => self::VALIDATION_ERROR_NEW_REJECTED_STATUS . ',' . self::VALIDATION_ERROR_NEW_ACCEPTED_STATUS,
					'error_count' => $unreviewed_count,
				],
				[
					'text'        => 'edit' === $screen_base ? _x( 'With removed markup', 'terms', 'amp' ) : _x( 'Removed markup', 'terms', 'amp' ),
					'value'       => self::VALIDATION_ERROR_NEW_ACCEPTED_STATUS . ',' . self::VALIDATION_ERROR_ACK_ACCEPTED_STATUS,
					'error_count' => $accepted_term_count,
				],
				[
					'text'        => 'edit' === $screen_base ? _x( 'With kept markup', 'terms', 'amp' ) : _x( 'Kept markup', 'terms', 'amp' ),
					'value'       => self::VALIDATION_ERROR_NEW_REJECTED_STATUS . ',' . self::VALIDATION_ERROR_ACK_REJECTED_STATUS,
					'error_count' => $rejected_term_count,
				],
			];

			foreach ( $options_config as $option_config ) {
				self::output_error_status_filter_option_markup(
					$option_config['text'],
					$option_config['value'],
					$option_config['error_count'],
					$error_status_filter_value
				);
			}
			?>
		</select>
		<?php
	}

	/**
	 * Output the option markup for a error status filter.
	 *
	 * @param string $option_text    Option text.
	 * @param string $option_value   Option value.
	 * @param int    $error_count    Error count for error status.
	 * @param string $selected_value Currently selected value.
	 */
	private static function output_error_status_filter_option_markup( $option_text, $option_value, $error_count, $selected_value ) {
		printf(
			'<option value="%s" %s>%s <span class="count">(%s)</span></option>',
			esc_attr( $option_value ),
			selected( $selected_value, $option_value, false ),
			esc_html( $option_text ),
			esc_html( number_format_i18n( $error_count ) )
		);
	}

	/**
	 * Gets all of the possible error types.
	 *
	 * @return string[] Error types.
	 */
	public static function get_error_types() {
		return [ self::HTML_ELEMENT_ERROR_TYPE, self::HTML_ATTRIBUTE_ERROR_TYPE, self::JS_ERROR_TYPE, self::CSS_ERROR_TYPE ];
	}

	/**
	 * Renders the filter for error type.
	 *
	 * This type filter <select> element is rendered on the validation error post page (Errors by URL),
	 * and the validation error taxonomy page (Error Index).
	 */
	public static function render_error_type_filter() {
		$error_type_filter_value = isset( $_GET[ self::VALIDATION_ERROR_TYPE_QUERY_VAR ] ) ? sanitize_key( wp_unslash( $_GET[ self::VALIDATION_ERROR_TYPE_QUERY_VAR ] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Recommended

		/*
		 * On the 'Errors by URL' page, the <option> text should be different.
		 * For example, it should be 'With JS Errors' instead of 'JS Errors'.
		 */
		$screen_base = get_current_screen()->base;
		?>
		<label for="<?php echo esc_attr( self::VALIDATION_ERROR_TYPE_QUERY_VAR ); ?>" class="screen-reader-text"><?php esc_html_e( 'Filter by error type', 'amp' ); ?></label>
		<select name="<?php echo esc_attr( self::VALIDATION_ERROR_TYPE_QUERY_VAR ); ?>" id="<?php echo esc_attr( self::VALIDATION_ERROR_TYPE_QUERY_VAR ); ?>">
			<option value="<?php echo esc_attr( self::NO_FILTER_VALUE ); ?>">
				<?php esc_html_e( 'All types of invalid markup', 'amp' ); ?>
			</option>
			<option value="<?php echo esc_attr( self::HTML_ELEMENT_ERROR_TYPE ); ?>" <?php selected( $error_type_filter_value, self::HTML_ELEMENT_ERROR_TYPE ); ?>>
				<?php if ( 'edit' === $screen_base ) : ?>
					<?php esc_html_e( 'With invalid HTML elements', 'amp' ); ?>
				<?php else : ?>
					<?php esc_html_e( 'Invalid HTML elements', 'amp' ); ?>
				<?php endif; ?>
			</option>
			<option value="<?php echo esc_attr( self::HTML_ATTRIBUTE_ERROR_TYPE ); ?>" <?php selected( $error_type_filter_value, self::HTML_ATTRIBUTE_ERROR_TYPE ); ?>>
				<?php if ( 'edit' === $screen_base ) : ?>
					<?php esc_html_e( 'With invalid HTML attributes', 'amp' ); ?>
				<?php else : ?>
					<?php esc_html_e( 'Invalid HTML attributes', 'amp' ); ?>
				<?php endif; ?>
			</option>
			<option value="<?php echo esc_attr( self::JS_ERROR_TYPE ); ?>" <?php selected( $error_type_filter_value, self::JS_ERROR_TYPE ); ?>>
				<?php if ( 'edit' === $screen_base ) : ?>
					<?php esc_html_e( 'With invalid JS', 'amp' ); ?>
				<?php else : ?>
					<?php esc_html_e( 'Invalid JS', 'amp' ); ?>
				<?php endif; ?>
			</option>
			<option value="<?php echo esc_attr( self::CSS_ERROR_TYPE ); ?>" <?php selected( $error_type_filter_value, self::CSS_ERROR_TYPE ); ?>>
				<?php if ( 'edit' === $screen_base ) : ?>
					<?php esc_html_e( 'With invalid CSS', 'amp' ); ?>
				<?php else : ?>
					<?php esc_html_e( 'Invalid CSS', 'amp' ); ?>
				<?php endif; ?>
			</option>
		</select>
		<?php
	}

	/**
	 * Render the button for clearing empty taxonomy terms.
	 *
	 * If there are no terms with a 0 count then this outputs nothing.
	 */
	public static function render_clear_empty_button() {
		global $wpdb;
		// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
		$count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->term_taxonomy WHERE taxonomy = %s AND count = 0", self::TAXONOMY_SLUG ) );
		if ( $count > 0 ) {
			wp_nonce_field( self::VALIDATION_ERROR_CLEAR_EMPTY_ACTION, self::VALIDATION_ERROR_CLEAR_EMPTY_ACTION . '_nonce', false );
			submit_button( __( 'Clear Empty', 'amp' ), '', self::VALIDATION_ERROR_CLEAR_EMPTY_ACTION, false );
		}
	}

	/**
	 * Include searching taxonomy term descriptions and sources term meta.
	 *
	 * @param array $clauses    Clauses.
	 * @param array $taxonomies Taxonomies.
	 * @param array $args       Args.
	 * @return array Clauses.
	 */
	public static function filter_terms_clauses_for_description_search( $clauses, $taxonomies, $args ) {
		global $wpdb;
		if ( ! empty( $args['search'] ) && in_array( self::TAXONOMY_SLUG, $taxonomies, true ) ) {
			$clauses['where'] = preg_replace(
				'#(?<=\()(?=\(t\.name LIKE \')#',
				$wpdb->prepare( '(tt.description LIKE %s) OR ', '%' . $wpdb->esc_like( $args['search'] ) . '%' ),
				$clauses['where']
			);
		}
		return $clauses;
	}

	/**
	 * Show notices for changes to amp_validation_error terms.
	 */
	public static function add_admin_notices() {
		if ( ! ( self::TAXONOMY_SLUG === get_current_screen()->taxonomy || AMP_Validated_URL_Post_Type::POST_TYPE_SLUG === get_current_screen()->post_type ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			return;
		}

		// Show success messages for accepting/rejecting validation errors.
		if ( ! empty( $_GET['amp_actioned'] ) && ! empty( $_GET['amp_actioned_count'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			$actioned = sanitize_key( $_GET['amp_actioned'] ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			$count    = (int) $_GET['amp_actioned_count']; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			$message  = null;
			if ( 'delete' === $actioned ) {
				$message = sprintf(
					/* translators: %s is number of errors accepted */
					_n(
						'Deleted %s instance of validation errors.',
						'Deleted %s instances of validation errors.',
						number_format_i18n( $count ),
						'amp'
					),
					$count
				);
			}

			if ( $message ) {
				printf( '<div class="notice notice-success is-dismissible"><p>%s</p></div>', esc_html( $message ) );
			}
		}

		// Show success message for clearing empty terms.
		if ( isset( $_GET[ self::VALIDATION_ERRORS_CLEARED_QUERY_VAR ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			$cleared_count = (int) $_GET[ self::VALIDATION_ERRORS_CLEARED_QUERY_VAR ]; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			printf(
				'<div class="notice notice-success is-dismissible"><p>%s</p></div>',
				esc_html(
					sprintf(
						/* translators: %s is the number of validation errors cleared */
						_n(
							'Cleared %s validation error for invalid markup that no longer occurs on the site.',
							'Cleared %s validation errors for invalid markup that no longer occur on the site.',
							$cleared_count,
							'amp'
						),
						number_format_i18n( $cleared_count )
					)
				)
			);
		}
	}

	/**
	 * Get the validation data and source info from the validated URL if available (as it should be).
	 *
	 * @param WP_Term $term Term.
	 * @return array|null Validation data if successfully retrieved from the validated URL post, or else null.
	 */
	private static function get_current_validation_error_data_from_post( WP_Term $term ) {
		$post = get_post();
		if ( ! $post instanceof WP_Post || AMP_Validated_URL_Post_Type::POST_TYPE_SLUG !== $post->post_type ) {
			return null;
		}

		$validation_errors = AMP_Validated_URL_Post_Type::get_invalid_url_validation_errors( $post );
		if ( ! isset( $validation_errors[ self::$current_validation_error_row_index ] ) ) {
			return null;
		}

		$validation_error = $validation_errors[ self::$current_validation_error_row_index ];
		if ( $term->term_id !== $validation_error['term']->term_id ) {
			return null;
		}

		return $validation_error['data'];
	}

	/**
	 * Returns JSON-formatted error details for an error term.
	 *
	 * @param WP_Term $term Term.
	 * @return string Encoded JSON.
	 */
	public static function get_error_details_json( WP_Term $term ) {
		$validation_data = self::get_current_validation_error_data_from_post( $term );

		// Fall back to obtaining the validation data from the term itself (without sources).
		if ( null === $validation_data ) {
			$validation_data = json_decode( $term->description, true );
		}

		// Total failure to obtain the validation data.
		if ( ! is_array( $validation_data ) ) {
			return wp_json_encode( [] );
		}

		// Convert the numeric constant value of the node_type to its constant name.
		$xml_reader_reflection_class = new ReflectionClass( 'XMLReader' );
		$constants                   = $xml_reader_reflection_class->getConstants();
		foreach ( $constants as $key => $value ) {
			if ( $validation_data['node_type'] === $value ) {
				$validation_data['node_type'] = $key;
				break;
			}
		}

		$validation_data['removed']  = (bool) ( (int) $term->term_group & self::ACCEPTED_VALIDATION_ERROR_BIT_MASK );
		$validation_data['reviewed'] = (bool) ( (int) $term->term_group & self::ACKNOWLEDGED_VALIDATION_ERROR_BIT_MASK );

		return wp_json_encode( $validation_data );
	}

	/**
	 * Reset the index for the current validation error being displayed.
	 */
	public static function reset_validation_error_row_index() {
		self::$current_validation_error_row_index = 0;
	}

	/**
	 * Add row actions.
	 *
	 * @param array   $actions Actions.
	 * @param WP_Term $tag     Tag.
	 * @return array Actions.
	 */
	public static function filter_tag_row_actions( $actions, WP_Term $tag ) {
		global $pagenow;

		$term_id = $tag->term_id;
		$term    = get_term( $term_id ); // We don't want filter=display given by $tag.

		/*
		 * Hide deletion link since a validation error should only be removed once
		 * it no longer has an occurrence on the site. When a validated URL is re-checked
		 * and it no longer has this validation error, then the count will be decremented.
		 * When a validation error term no longer has a count, then it is hidden from the
		 * list table. A cron job could periodically delete terms that have no counts.
		 */
		unset( $actions['delete'] );

		if ( 'post.php' === $pagenow ) {
			$actions['details'] = sprintf(
				'<button type="button" aria-label="%s" class="single-url-detail-toggle button-link">%s</button>',
				esc_attr__( 'Toggle error details', 'amp' ),
				esc_html__( 'Details', 'amp' )
			);

			$actions['copy'] = sprintf(
				'<button type="button" class="single-url-detail-copy button-link" data-error-json="%s">%s</button>',
				esc_attr( self::get_error_details_json( $term ) ),
				esc_html__( 'Copy to clipboard', 'amp' )
			);
		} elseif ( 'edit-tags.php' === $pagenow ) {
			$actions['details'] = sprintf(
				'<a href="%s">%s</a>',
				admin_url(
					add_query_arg(
						[
							self::TAXONOMY_SLUG => $term->name,
							'post_type'         => AMP_Validated_URL_Post_Type::POST_TYPE_SLUG,
						],
						'edit.php'
					)
				),
				esc_html__( 'Details', 'amp' )
			);

			if ( 0 === $term->count ) {
				$actions['delete'] = sprintf(
					'<a href="%s">%s</a>',
					wp_nonce_url(
						add_query_arg( array_merge( [ 'action' => 'delete' ], compact( 'term_id' ) ) ),
						'delete'
					),
					esc_html__( 'Delete', 'amp' )
				);
			}
		}

		$actions = wp_array_slice_assoc( $actions, [ 'details', 'delete', 'copy' ] );

		self::$current_validation_error_row_index++;

		return $actions;
	}

	/**
	 * Show AMP validation errors under AMP admin menu.
	 */
	public static function add_admin_menu_validation_error_item() {
		$menu_item_label = esc_html__( 'Error Index', 'amp' );

		if ( ValidationCounts::is_needed() ) {
			// Append markup to display a loading spinner while the unreviewed count is being fetched.
			$menu_item_label .= ' <span id="amp-new-error-index-count"></span>';
		}

		$post_menu_slug = 'edit.php?post_type=' . AMP_Validated_URL_Post_Type::POST_TYPE_SLUG;
		$term_menu_slug = 'edit-tags.php?taxonomy=' . self::TAXONOMY_SLUG . '&post_type=' . AMP_Validated_URL_Post_Type::POST_TYPE_SLUG;

		global $submenu;
		if ( current_user_can( 'manage_options' ) ) {
			$taxonomy_caps = (object) get_taxonomy( self::TAXONOMY_SLUG )->cap; // Yes, cap is an object not an array.
			add_submenu_page(
				AMP_Options_Manager::OPTION_NAME,
				$menu_item_label,
				$menu_item_label,
				$taxonomy_caps->manage_terms,
				// The following esc_attr() is sadly needed due to <https://github.com/WordPress/wordpress-develop/blob/4.9.5/src/wp-admin/menu-header.php#L201>.
				esc_attr( $term_menu_slug )
			);
		} elseif ( isset( $submenu[ $post_menu_slug ] ) ) {
			foreach ( $submenu[ $post_menu_slug ] as &$submenu_item ) {
				if ( esc_attr( $term_menu_slug ) === $submenu_item[2] ) {
					$submenu_item[0] = $menu_item_label;
				}
			}
		}
	}

	/**
	 * Provides a reader-friendly string for a term's error type.
	 *
	 * @param string $error_type The error type from the term's validation error JSON.
	 * @return string Reader-friendly string.
	 */
	public static function get_reader_friendly_error_type_text( $error_type ) {
		switch ( $error_type ) {
			case 'js_error':
				return esc_html__( 'JS', 'amp' );

			case 'html_element_error':
				return esc_html__( 'HTML element', 'amp' );

			case 'html_attribute_error':
				return esc_html__( 'HTML attribute', 'amp' );

			case 'css_error':
				return esc_html__( 'CSS', 'amp' );

			default:
				return $error_type;
		}
	}

	/**
	 * Provides the label for the details summary element.
	 *
	 * @param array $validation_error Validation error data.
	 * @return string The label.
	 */
	public static function get_details_summary_label( $validation_error ) {
		$error_type = isset( $validation_error['type'] ) ? $validation_error['type'] : null;
		$node_type  = isset( $validation_error['node_type'] ) ? $validation_error['node_type'] : null;

		if ( self::CSS_ERROR_TYPE === $error_type ) {
			$summary_label = sprintf( '<%s>', $validation_error['node_name'] );
		} elseif ( isset( $validation_error['parent_name'] ) ) {
			$summary_label = sprintf( '<%s>', $validation_error['parent_name'] );
		} elseif ( isset( $validation_error['node_name'] ) && XML_ELEMENT_NODE === $node_type ) {
			$summary_label = sprintf( '<%s>', $validation_error['node_name'] );
		} else {
			$summary_label = '&hellip;';
		}

		return sprintf( '<code>%s</code>', esc_html( $summary_label ) );
	}

	/**
	 * Supply the content for the custom columns.
	 *
	 * @param string $content     Column content.
	 * @param string $column_name Column name.
	 * @param int    $term_id     Term ID.
	 * @return string Content.
	 */
	public static function filter_manage_custom_columns( $content, $column_name, $term_id ) {
		global $pagenow;

		$term = get_term( $term_id );

		$validation_error = json_decode( $term->description, true );
		if ( ! isset( $validation_error['code'] ) ) {
			$validation_error['code'] = 'unknown';
		}

		switch ( $column_name ) {
			case 'error_code':
				if ( 'post.php' === $pagenow ) {
					$content .= sprintf(
						'<button type="button" aria-label="%s" class="single-url-detail-toggle">',
						esc_attr__( 'Toggle error details', 'amp' )
					);
					$content .= wp_kses_post( self::get_error_title_from_code( $validation_error ) );
				} else {
					$content .= '<p>';
					$content .= sprintf(
						'<a class="row-title" href="%s">%s',
						admin_url(
							add_query_arg(
								[
									self::TAXONOMY_SLUG => $term->name,
									'post_type'         => AMP_Validated_URL_Post_Type::POST_TYPE_SLUG,
								],
								'edit.php'
							)
						),
						wp_kses_post( self::get_error_title_from_code( $validation_error ) )
					);
				}

				if ( 'post.php' === $pagenow ) {
					$content .= '</button>';
				} else {
					$content .= '</a>';
					$content .= '</p>';
				}

				$message = null;
				switch ( $validation_error['code'] ) {
					case AMP_Tag_And_Attribute_Sanitizer::JSON_ERROR_EMPTY:
						$message = __( 'Expected JSON, got an empty value', 'amp' );
						break;
					case AMP_Tag_And_Attribute_Sanitizer::JSON_ERROR_DEPTH:
						$message = __( 'The maximum stack depth has been exceeded', 'amp' );
						break;
					case AMP_Tag_And_Attribute_Sanitizer::JSON_ERROR_STATE_MISMATCH:
						$message = __( 'Invalid or malformed JSON', 'amp' );
						break;
					case AMP_Tag_And_Attribute_Sanitizer::JSON_ERROR_CTRL_CHAR:
						$message = __( 'Control character error, possibly incorrectly encoded', 'amp' );
						break;
					case AMP_Tag_And_Attribute_Sanitizer::JSON_ERROR_SYNTAX:
						$message = __( 'Syntax error', 'amp' );
						break;
					case AMP_Tag_And_Attribute_Sanitizer::JSON_ERROR_UTF8:
						/* translators: %s: UTF-8, a charset */
						$message = sprintf( __( 'Malformed %s characters, possibly incorrectly encoded', 'amp' ), 'UTF-8' );
						break;
					default:
						if ( isset( $validation_error['message'] ) ) {
							$message = $validation_error['message'];
						}
				}

				if ( $message ) {
					$content .= sprintf( '<p>%s</p>', esc_html( $message ) );
				}

				break;
			case 'status':
				// Output whether the validation error has been seen via hidden field since we can't set the 'new' class on the <tr> directly.
				// This will get read via amp-validated-url-post-edit-screen.js.
				$is_new   = ! ( (int) $term->term_group & self::ACKNOWLEDGED_VALIDATION_ERROR_BIT_MASK );
				$content .= sprintf( '<input class="amp-validation-error-new" type="hidden" value="%d">', (int) $is_new );

				$is_removed = (bool) ( (int) $term->term_group & self::ACCEPTED_VALIDATION_ERROR_BIT_MASK );

				if ( 'post.php' === $pagenow ) {
					$status_select_name = sprintf(
						'%s[%s][%s]',
						AMP_Validated_URL_Post_Type::VALIDATION_ERRORS_INPUT_KEY,
						$term->slug,
						AMP_Validation_Manager::VALIDATION_ERROR_TERM_STATUS_QUERY_VAR
					);

					ob_start();
					?>
					<div class="amp-validation-error-status-dropdown">
						<label for="<?php echo esc_attr( $status_select_name ); ?>" class="screen-reader-text">
							<?php esc_html_e( 'Markup Status', 'amp' ); ?>
						</label>
						<select class="amp-validation-error-status" name="<?php echo esc_attr( $status_select_name ); ?>">
							<option value="<?php echo esc_attr( self::VALIDATION_ERROR_ACK_ACCEPTED_STATUS ); ?>" <?php selected( $is_removed ); ?>>
								<?php esc_html_e( 'Removed', 'amp' ); ?>
							</option>
							<option value="<?php echo esc_attr( self::VALIDATION_ERROR_ACK_REJECTED_STATUS ); ?>" <?php selected( ! $is_removed ); ?>>
								<?php esc_html_e( 'Kept', 'amp' ); ?>
							</option>
						</select>
						</div>
					<?php
					$content .= ob_get_clean();
				} else {
					$sanitization = self::get_validation_error_sanitization( $validation_error );
					$content     .= self::get_status_text_with_icon( $sanitization );
					$content     .= sprintf( '<input class="amp-validation-error-status" type="hidden" value="%d">', (int) $is_removed );
				}
				break;
			case 'created_date_gmt':
				$created_datetime = null;
				$created_date_gmt = get_term_meta( $term_id, 'created_date_gmt', true );
				if ( $created_date_gmt ) {
					try {
						$created_datetime = new DateTime( $created_date_gmt, new DateTimeZone( 'UTC' ) );
						$timezone_string  = get_option( 'timezone_string' );
						if ( ! $timezone_string && get_option( 'gmt_offset' ) ) {
							$timezone_string = timezone_name_from_abbr( '', get_option( 'gmt_offset' ) * HOUR_IN_SECONDS, false );
						}
						if ( $timezone_string ) {
							$created_datetime->setTimezone( new DateTimeZone( get_option( 'timezone_string' ) ) );
						}
					} catch ( Exception $e ) {
						unset( $e );
					}
				}
				if ( ! $created_datetime ) {
					$time_ago = __( 'n/a', 'amp' );
				} else {
					$time_ago = sprintf(
						'<abbr title="%s">%s</abbr>',
						esc_attr(
							$created_datetime->format(
								/* translators: localized date and time format, see http://php.net/date */
								__( 'F j, Y g:i a', 'amp' )
							)
						),
						/* translators: %s: the human-readable time difference. */
						esc_html( sprintf( __( '%s ago', 'amp' ), human_time_diff( $created_datetime->getTimestamp() ) ) )
					);
				}

				if ( $created_datetime ) {
					$time_ago = sprintf(
						'<time datetime="%s">%s</time>',
						$created_datetime->format( 'c' ),
						$time_ago
					);
				}
				$content .= $time_ago;

				break;
			case 'details':
				if ( 'post.php' === $pagenow ) {
					return self::render_single_url_error_details( $validation_error, $term );
				}

				if ( isset( $validation_error['parent_name'] ) ) {
					$summary = self::get_details_summary_label( $validation_error );

					unset( $validation_error['error_type'], $validation_error['parent_name'] );

					$attributes         = [];
					$attributes_heading = '';
					if ( ! empty( $validation_error['node_attributes'] ) ) {
						$attributes_heading = sprintf( '<div class="details-attributes__title">%s:</div>', esc_html( self::get_source_key_label( 'node_attributes', $validation_error ) ) );
						$attributes         = $validation_error['node_attributes'];
					} elseif ( ! empty( $validation_error['element_attributes'] ) ) {
						$attributes         = $validation_error['element_attributes'];
						$attributes_heading = sprintf( '<div class="details-attributes__title">%s:</div>', esc_html( self::get_source_key_label( 'element_attributes', $validation_error ) ) );
					}

					if ( empty( $attributes ) ) {
						$content .= $summary;
					} else {
						$content  = '<details>';
						$content .= '<summary class="details-attributes__summary">';
						$content .= $summary;
						$content .= '</summary>';

						$content .= $attributes_heading;
						$content .= '<ul class="details-attributes__list">';

						foreach ( $attributes as $attr => $value ) {
							$content .= sprintf( '<li><span class="details-attributes__attr">%s</span>', esc_html( $attr ) );

							if ( ! empty( $value ) ) {
								$content .= sprintf( ': <span class="details-attributes__value">%s</span>', esc_html( $value ) );
							}

							$content .= '</li>';
						}

						$content .= '</ul>';
						$content .= '</details>';
					}
				}

				break;
			case 'sources_with_invalid_output':
				if ( ! isset( $_GET['post'], $_GET['action'] ) || 'edit' !== $_GET['action'] ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
					break;
				}
				$url_post_id       = (int) $_GET['post']; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
				$validation_errors = AMP_Validated_URL_Post_Type::get_invalid_url_validation_errors( $url_post_id );
				$validation_errors = array_filter(
					$validation_errors,
					static function( $error ) use ( $term ) {
						return $error['term']->term_id === $term->term_id;
					}
				);
				$error_summary     = self::summarize_validation_errors( wp_list_pluck( $validation_errors, 'data' ) );

				if ( empty( $error_summary[ self::SOURCES_INVALID_OUTPUT ] ) ) {
					esc_html_e( '--', 'amp' );
				} else {
					AMP_Validated_URL_Post_Type::render_sources_column(
						$error_summary[ self::SOURCES_INVALID_OUTPUT ],
						$url_post_id
					);
				}
				break;
			case 'error_type':
				if ( isset( $validation_error['type'] ) ) {
					$text = self::get_reader_friendly_error_type_text( $validation_error['type'] );
					if ( 'post.php' === $pagenow ) {
						$content .= sprintf(
							'<p data-error-type="%s">%s</p>',
							isset( $validation_error['type'] ) ? $validation_error['type'] : '',
							esc_html( $text )
						);
					} else {
						$content .= $text;
					}
				} else {
					$content .= esc_html__( 'Misc', 'amp' );
				}
				break;
			case 'reviewed':
				if ( 'post.php' === $pagenow ) {
					$checked    = checked( 0 < ( (int) $term->term_group & self::ACKNOWLEDGED_VALIDATION_ERROR_BIT_MASK ), true, false );
					$input_name = sprintf(
						'%s[%s][%s]',
						AMP_Validated_URL_Post_Type::VALIDATION_ERRORS_INPUT_KEY,
						$term->slug,
						self::VALIDATION_ERROR_ACKNOWLEDGE_ACTION
					);
					$content   .= sprintf( '<input class="amp-validation-error-status-review" type="checkbox" name="%s" %s />', esc_attr( $input_name ), $checked );
				}
		}
		return $content;
	}

	/**
	 * Adds post columns to the /wp-admin/post.php page for amp_validated_url.
	 *
	 * @param array $sortable_columns The sortable columns.
	 * @return array $sortable_columns The filtered sortable columns.
	 */
	public static function add_single_post_sortable_columns( $sortable_columns ) {
		return array_merge(
			$sortable_columns,
			[
				'error_code' => self::VALIDATION_DETAILS_ERROR_CODE_QUERY_VAR,
				'error_type' => self::VALIDATION_ERROR_TYPE_QUERY_VAR,
			]
		);
	}

	/**
	 * Renders error details when viewing a single URL page.
	 *
	 * @param array   $validation_error Validation error data.
	 * @param WP_Term $term The validation error term.
	 * @param bool    $wrap_with_details Whether to wrap the error details markup with a <details> element.
	 * @param bool    $with_summary Whether to include the summary for the <details> element.
	 * @return string HTML for the details section.
	 */
	public static function render_single_url_error_details( $validation_error, $term, $wrap_with_details = true, $with_summary = true ) {
		// Get the sources, if they exist.
		if ( isset( $_GET['post'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			$validation_errors = AMP_Validated_URL_Post_Type::get_invalid_url_validation_errors( (int) $_GET['post'] ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			foreach ( $validation_errors as $error ) {
				if ( isset( $error['data']['sources'], $error['term']->term_id ) && $error['term']->term_id === $term->term_id ) {
					$validation_error['sources'] = $error['data']['sources'];
					break;
				}
			}
		}

		ob_start();
		?>

		<dl class="detailed">
			<dt><?php esc_html_e( 'Information', 'amp' ); ?></dt>
			<dd class="detailed">
				<p>
					<?php if ( isset( $validation_error['type'] ) && self::JS_ERROR_TYPE === $validation_error['type'] ) : ?>
						<?php
						echo wp_kses_post(
							sprintf(
								/* translators: 1: script,  2: Documentation URL, 3: Documentation URL, 4: Documentation URL, 5: onclick, 6: Documentation URL, 7: amp-bind, 8: Documentation URL, 9: amp-script */
								__( 'AMP does not allow the use of JS %1$s tags unless they are for loading <a href="%2$s">AMP components</a>, which are added automatically by the AMP plugin. For any page to be served as AMP, all invalid script tags must be removed from the page. Instead of custom or third-party JS, please consider using AMP components and functionality such as <a href="%6$s">%7$s</a> and <a href="%4$s">actions and events</a> (as opposed to JS event handler attributes like %5$s). Some custom JS can be added if encapsulated in the <a href="%8$s">%9$s</a>. Learn more about <a href="%3$s">how AMP works</a>.', 'amp' ),
								'<code>&lt;script&gt;</code>',
								'https://amp.dev/documentation/components/',
								'https://amp.dev/about/how-amp-works/',
								'https://amp.dev/documentation/guides-and-tutorials/learn/amp-actions-and-events/',
								'<code>onclick</code>',
								'https://amp.dev/documentation/components/amp-bind/',
								'amp-bind',
								'https://amp.dev/documentation/components/amp-script/',
								'amp-script'
							)
						)
						?>
					<?php elseif ( isset( $validation_error['type'] ) && self::CSS_ERROR_TYPE === $validation_error['type'] ) : ?>
						<?php
						echo wp_kses_post(
							sprintf(
								/* translators: 1: Documentation URL, 2: Documentation URL, 3: !important */
								__( 'AMP allows you to <a href="%1$s">style your pages using CSS</a> in much the same way as regular HTML pages, however there are some <a href="%2$s">restrictions</a>. Nevertheless, the AMP plugin automatically inlines external stylesheets, transforms %3$s qualifiers, and uses tree shaking to remove the majority of CSS rules that do not apply to the current page. Nevertheless, AMP does have a 75KB limit and tree shaking cannot always reduce the amount of CSS under this limit; when this happens an excessive CSS error will result.', 'amp' ),
								'https://amp.dev/documentation/guides-and-tutorials/develop/style_and_layout/',
								'https://amp.dev/documentation/guides-and-tutorials/develop/style_and_layout/style_pages/',
								'<code>!important</code>'
							)
						)
						?>
					<?php else : ?>
						<?php
						echo wp_kses_post(
							sprintf(
								/* translators: 1: Documentation URL, 2: Documentation URL. */
								__( 'AMP allows a specific set of elements and attributes on valid AMP pages. Learn about the <a href="%1$s">AMP HTML specification</a>. If an element or attribute is not allowed in AMP, it must be removed for the page to be <a href="%2$s">cached and eligible for prerendering</a>.', 'amp' ),
								'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/',
								'https://amp.dev/documentation/guides-and-tutorials/learn/amp-caches-and-cors/how_amp_pages_are_cached/'
							)
						)
						?>
					<?php endif; ?>
				</p>
				<p>
					<?php echo wp_kses_post( __( 'If all invalid markup is &#8220;removed&#8221; the page will be served as AMP. However, the impact that the removal has on the page must be assessed to determine if the result is acceptable. If any invalid markup is &#8220;kept&#8221; then the page will not be served as AMP.', 'amp' ) ); ?>
				</p>
			</dd>

			<dt><?php esc_html_e( 'Error code', 'amp' ); ?></dt>
			<dd><code><?php echo esc_html( $validation_error['code'] ); ?></code></dd>

			<?php if ( AMP_Tag_And_Attribute_Sanitizer::DISALLOWED_TAG === $validation_error['code'] && isset( $validation_error['node_attributes'] ) ) : ?>
				<dt><?php esc_html_e( 'Invalid markup', 'amp' ); ?></dt>
				<dd class="detailed">
					<code>
						<mark>
						<?php
						echo '&lt;' . esc_html( $validation_error['node_name'] );
						if ( count( $validation_error['node_attributes'] ) > 0 ) {
							echo ' &hellip; ';
						}
						echo '&gt;';
						?>
						</mark>
					</code>
				</dd>
			<?php elseif ( AMP_Tag_And_Attribute_Sanitizer::DISALLOWED_ATTR === $validation_error['code'] && isset( $validation_error['element_attributes'] ) ) : ?>
				<dt><?php esc_html_e( 'Invalid markup', 'amp' ); ?></dt>
				<dd class="detailed">
					<code>
						<?php
						echo '&lt;' . esc_html( $validation_error['parent_name'] );
						if ( count( $validation_error['element_attributes'] ) > 1 ) {
							echo ' &hellip;';
						}
						echo '<mark>';
						printf( ' %s="%s"', esc_html( $validation_error['node_name'] ), esc_html( $validation_error['element_attributes'][ $validation_error['node_name'] ] ) );
						echo '</mark>';
						if ( count( $validation_error['element_attributes'] ) > 1 ) {
							echo ' &hellip;';
						}
						echo '&gt;';
						?>
					</code>
				</dd>
			<?php endif; ?>

			<?php foreach ( $validation_error as $key => $value ) : ?>
				<?php
				$is_element_attributes = ( 'node_attributes' === $key || 'element_attributes' === $key );
				if ( $is_element_attributes && empty( $value ) ) {
					continue;
				}
				if ( in_array( $key, [ 'code', 'type', 'css_property_value', 'mandatory_anyof_attrs', 'meta_property_value', 'meta_property_required_value', 'mandatory_oneof_attrs' ], true ) ) {
					continue; // Handled above.
				}
				if ( in_array( $key, [ 'spec_name', 'tag_spec', 'spec_names', 'node_type', 'allowed_descendants' ], true ) ) {
					continue;
				}
				?>
				<dt><?php echo esc_html( self::get_source_key_label( $key, $validation_error ) ); ?></dt>
				<dd class="detailed">
					<?php if ( in_array( $key, [ 'node_name', 'parent_name', 'required_parent_name', 'required_attr_value', 'css_selector', 'class_name' ], true ) ) : ?>
						<code><?php echo esc_html( $value ); ?></code>
					<?php elseif ( 'css_property_name' === $key ) : ?>
						<?php
						if ( isset( $validation_error['css_property_value'] ) && is_scalar( $validation_error['css_property_value'] ) ) {
							printf(
								'<code>%s: %s</code>',
								esc_html( $value ),
								esc_html( $validation_error['css_property_value'] )
							);
						} else {
							printf( '<code>%s</code>', esc_html( $value ) );
						}
						?>
					<?php elseif ( 'meta_property_name' === $key ) : ?>
						<?php
						printf( '<code>%s</code>', esc_html( $value ) );
						if ( isset( $validation_error['meta_property_value'] ) ) {
							printf( ': <code>%s</code>', esc_html( $validation_error['meta_property_value'] ) );
						}
						if ( isset( $validation_error['meta_property_required_value'] ) ) {
							printf(
								' (%s: <code>%s</code>)',
								esc_html__( 'required value', 'amp' ),
								esc_html( $validation_error['meta_property_required_value'] )
							);
						}
						?>
					<?php elseif ( 'text' === $key ) : ?>
						<?php self::render_code_details( $value ); ?>
					<?php elseif ( 'sources' === $key ) : ?>
						<?php self::render_sources( $value ); ?>
					<?php elseif ( 'attributes' === $key ) : ?>
						<ul>
							<?php foreach ( $value as $attr ) : ?>
								<?php
								printf( '<li><code>%s</code></li>', esc_html( $attr ) );
								?>
								<br />
							<?php endforeach; ?>
						</ul>
					<?php elseif ( $is_element_attributes ) : ?>
						<table class="element-attributes">
							<?php foreach ( $value as $attr_name => $attr_value ) : ?>
								<tr>
								<?php
								$attr_name_class = empty( $attr_value ) ? '' : 'has-attr-value';
								printf( '<th class="%1$s"><code>%2$s</code></th>', esc_attr( $attr_name_class ), esc_html( $attr_name ) );
								echo '<td>';
								if ( ! empty( $attr_value ) ) {
									echo '<code>';
									$is_url = in_array( $attr_name, [ 'href', 'src' ], true );
									if ( $is_url ) {
										// Remove non-helpful normalized version.
										$url_query = wp_parse_url( $attr_value, PHP_URL_QUERY );
										if ( $url_query && false !== strpos( 'ver=__normalized__', $url_query ) ) {
											$attr_value = remove_query_arg( 'ver', $attr_value );
										}

										printf( '<a href="%s" target="_blank">', esc_url( $attr_value ) );
									}
									echo esc_html( $attr_value );
									if ( $is_url ) {
										echo '</a>';
									}
									echo '</code>';
								}

								echo '</td>';
								?>
								</tr>
							<?php endforeach; ?>
						</table>
					<?php elseif ( 'duplicate_oneof_attrs' === $key ) : ?>
						<ul>
						<?php foreach ( $value as $attr ) : ?>
							<li><code><?php echo esc_html( $attr ); ?></code></li>
						<?php endforeach; ?>
						</ul>
					<?php elseif ( is_array( $value ) ) : ?>
						<?php foreach ( $value as $value_key => $attr ) : ?>
							<?php
							if ( is_int( $value_key ) ) {
								echo esc_html( $attr );
							} else {
								printf( '<strong>%s</strong>', esc_html( $value_key ) );
								if ( ! empty( $attr ) ) {
									echo ': ';
									echo esc_html( $attr );
								}
							}
							?>
							<br />
						<?php endforeach; ?>
					<?php elseif ( is_string( $value ) || is_int( $value ) ) : ?>
						<?php echo esc_html( $value ); ?>
					<?php endif; ?>
				</dd>
			<?php endforeach; ?>
		</dl>
		<?php

		$output = ob_get_clean();

		if ( $with_summary ) {
			$output = sprintf( '<summary class="details-attributes__summary">%s</summary>%s', self::get_details_summary_label( $validation_error ), $output );
		}

		if ( $wrap_with_details ) {
			$output = '<details class="details-attributes">' . $output . '</details>';
		}

		return $output;
	}

	/**
	 * Get the URL for opening the file for a AMP validation error in an external editor.
	 *
	 * @since 1.4
	 *
	 * @param array $source Source for AMP validation error.
	 * @return string|null File editor URL or null if not available.
	 */
	private static function get_file_editor_url( $source ) {
		if ( ! isset( $source['file'], $source['line'], $source['type'], $source['name'] ) ) {
			return null;
		}

		$edit_url = null;

		/**
		 * Filters the template for the URL for linking to an external editor to open a file for editing.
		 *
		 * Users of IDEs that support opening files in via web protocols can use this filter to override
		 * the edit link to result in their editor opening rather than the theme/plugin editor.
		 *
		 * The initial filtered value is null, requiring extension plugins to supply the URL template
		 * string themselves. If no template string is provided, links to the theme/plugin editors will
		 * be provided if available. For example, for an extension plugin to cause file edit links to
		 * open in PhpStorm, the following filter can be used:
		 *
		 *     add_filter( 'amp_validation_error_source_file_editor_url_template', function () {
		 *         return 'phpstorm://open?file={{file}}&line={{line}}';
		 *     } );
		 *
		 * For a template to be considered, the string '{{file}}' must be present in the filtered value.
		 *
		 * @since 1.4
		 *
		 * @param string|null $editor_url_template Editor URL template.
		 */
		$editor_url_template = apply_filters( 'amp_validation_error_source_file_editor_url_template', null );

		// Supply the file path to the editor template.
		if ( null !== $editor_url_template && false !== strpos( $editor_url_template, '{{file}}' ) ) {
			$file_path = null;
			if ( 'core' === $source['type'] ) {
				if ( 'wp-includes' === $source['name'] ) {
					$file_path = ABSPATH . WPINC . '/' . $source['file'];
				} elseif ( 'wp-admin' === $source['name'] ) {
					$file_path = ABSPATH . 'wp-admin/' . $source['file'];
				}
			} elseif ( 'plugin' === $source['type'] ) {
				$file_path = WP_PLUGIN_DIR . '/' . $source['name'];
				if ( $source['name'] !== $source['file'] ) {
					$file_path .= '/' . $source['file'];
				}
			} elseif ( 'mu-plugin' === $source['type'] ) {
				$file_path = WPMU_PLUGIN_DIR . '/' . $source['name'];
			} elseif ( 'theme' === $source['type'] ) {
				$theme = wp_get_theme( $source['name'] );
				if ( $theme instanceof WP_Theme && ! $theme->errors() ) {
					$file_path = $theme->get_stylesheet_directory() . '/' . $source['file'];
				}
			}

			if ( $file_path && file_exists( $file_path ) ) {
				/**
				 * Filters the file path to be opened in an external editor for a given AMP validation error source.
				 *
				 * This is useful to map the file path from inside of a Docker container or VM to the host machine.
				 *
				 * @since 1.4
				 *
				 * @param string|null $editor_url_template Editor URL template.
				 * @param array       $source              Source information.
				 */
				$file_path = apply_filters( 'amp_validation_error_source_file_path', $file_path, $source );
				if ( $file_path ) {
					$edit_url = str_replace(
						[
							'{{file}}',
							'{{line}}',
						],
						[
							rawurlencode( $file_path ),
							rawurlencode( $source['line'] ),
						],
						$editor_url_template
					);
				}
			}
		}

		// Fall back to using the theme/plugin editors if no external editor is offered.
		if ( ! $edit_url ) {
			if ( 'plugin' === $source['type'] && current_user_can( 'edit_plugins' ) ) {
				$plugin_registry = Services::get( 'plugin_registry' );
				$plugin          = $plugin_registry->get_plugin_from_slug( $source['name'] );
				if ( $plugin ) {
					$file = $source['file'];

					// Prepend the plugin directory name to the file name as the plugin editor requires.
					$i = strpos( $plugin['file'], '/' );
					if ( false !== $i ) {
						$file = substr( $plugin['file'], 0, $i ) . '/' . $file;
					}

					$edit_url = add_query_arg(
						[
							'plugin' => rawurlencode( $plugin['file'] ),
							'file'   => rawurlencode( $file ),
							'line'   => rawurlencode( $source['line'] ),
						],
						admin_url( 'plugin-editor.php' )
					);
				}
			} elseif ( 'theme' === $source['type'] && current_user_can( 'edit_themes' ) ) {
				$edit_url = add_query_arg(
					[
						'file'  => rawurlencode( $source['file'] ),
						'theme' => rawurlencode( $source['name'] ),
						'line'  => rawurlencode( $source['line'] ),
					],
					admin_url( 'theme-editor.php' )
				);
			}
		}

		return $edit_url;
	}

	/**
	 * Render source name.
	 *
	 * @since 1.4
	 *
	 * @param string $name Name.
	 * @param string $type Type.
	 */
	private static function render_source_name( $name, $type ) {
		$nicename = null;
		switch ( $type ) {
			case 'theme':
				$theme = wp_get_theme( $name );
				if ( ! $theme->errors() ) {
					$nicename = $theme->get( 'Name' );
				}
				break;
			case 'plugin':
				$plugin_registry = Services::get( 'plugin_registry' );
				$plugin          = $plugin_registry->get_plugin_from_slug( $name );
				if ( $plugin && ! empty( $plugin['data']['Name'] ) ) {
					$nicename = $plugin['data']['Name'];
				}
				break;
		}
		echo ' ';

		if ( $nicename ) {
			printf( '%s (<code>%s</code>)', esc_html( $nicename ), esc_html( $name ) );
		} else {
			echo '<code>' . esc_html( $name ) . '</code>';
		}
	}

	/**
	 * Render sources.
	 *
	 * @param array $sources Sources.
	 */
	public static function render_sources( $sources ) {
		?>
		<details>
			<summary>
				<?php
				$source_count = count( $sources );
				echo esc_html(
					sprintf(
						/* translators: %s: number of sources. */
						_n(
							'Source stack (%s)',
							'Source stack (%s)',
							$source_count,
							'amp'
						),
						number_format_i18n( $source_count )
					)
				);
				?>
			</summary>
			<table class="validation-error-sources">
				<?php foreach ( $sources as $i => $source ) : ?>
					<?php
					$source_table_rows = $source;

					if ( isset( $source['file'], $source['line'] ) ) {
						unset( $source_table_rows['file'], $source_table_rows['line'] );
						$source_table_rows['location'] = [
							'link_text' => $source['file'] . ':' . $source['line'],
							'link_url'  => self::get_file_editor_url( $source ),
						];
					}
					$is_filter = ! empty( $source['filter'] );
					unset( $source_table_rows['filter'] );

					$dependency_type = null;
					if ( isset( $source['dependency_type'] ) ) {
						$dependency_type = $source['dependency_type'];
						unset( $source_table_rows['dependency_type'] );
					}

					$priority = null;
					if ( isset( $source['priority'] ) ) {
						$priority = $source['priority'];
						unset( $source_table_rows['priority'] );
					}

					$row_span = count( $source_table_rows );
					?>
					<tbody>
						<?php foreach ( array_keys( $source_table_rows ) as $j => $key ) : ?>
							<?php
							$value = $source_table_rows[ $key ];
							?>
							<tr>
								<?php if ( 0 === $j ) : ?>
									<th rowspan="<?php echo esc_attr( $row_span ); ?>" scope="rowgroup">
										#<?php echo esc_html( $i + 1 ); ?>
									</th>
								<?php endif; ?>
								<th scope="row">
									<?php
									switch ( $key ) {
										case 'name':
											esc_html_e( 'Name', 'amp' );
											break;
										case 'post_id':
											esc_html_e( 'Post ID', 'amp' );
											break;
										case 'post_type':
											esc_html_e( 'Post Type', 'amp' );
											break;
										case 'handle':
											if ( 'script' === $dependency_type ) {
												esc_html_e( 'Enqueued Script', 'amp' );
											} elseif ( 'style' === $dependency_type ) {
												esc_html_e( 'Enqueued Style', 'amp' );
											}
											break;
										case 'dependency_handle':
											if ( 'script' === $dependency_type ) {
												esc_html_e( 'Dependent Script', 'amp' );
											} elseif ( 'style' === $dependency_type ) {
												esc_html_e( 'Dependent Style', 'amp' );
											}
											break;
										case 'extra_key':
											esc_html_e( 'Inline Type', 'amp' );
											break;
										case 'text':
											esc_html_e( 'Inline Text', 'amp' );
											break;
										case 'block_content_index':
											esc_html_e( 'Block Index', 'amp' );
											break;
										case 'block_name':
											esc_html_e( 'Block Name', 'amp' );
											break;
										case 'shortcode':
											esc_html_e( 'Shortcode', 'amp' );
											break;
										case 'type':
											esc_html_e( 'Type', 'amp' );
											break;
										case 'function':
											esc_html_e( 'Function', 'amp' );
											break;
										case 'location':
											esc_html_e( 'Location', 'amp' );
											break;
										case 'sources':
											esc_html_e( 'Sources', 'amp' );
											break;
										case 'hook':
											if ( $is_filter ) {
												esc_html_e( 'Filter', 'amp' );
											} else {
												esc_html_e( 'Action', 'amp' );
											}
											break;
										default:
											echo esc_html( $key );
									}
									echo ':';
									?>
								</th>
								<td>
									<?php if ( 'sources' === $key && is_array( $value ) ) : ?>
										<?php self::render_sources( $value ); ?>
									<?php elseif ( 'type' === $key ) : ?>
										<?php
										switch ( $value ) {
											case 'theme':
												echo '<span class="dashicons dashicons-admin-appearance"></span> ';
												esc_html_e( 'Theme', 'amp' );
												break;
											case 'plugin':
												echo '<span class="dashicons dashicons-admin-plugins"></span> ';
												esc_html_e( 'Plugin', 'amp' );
												break;
											case 'mu-plugin':
												echo '<span class="dashicons dashicons-admin-plugins"></span> ';
												esc_html_e( 'Must-Use Plugin', 'amp' );
												break;
											case 'core':
												echo '<span class="dashicons dashicons-wordpress-alt"></span> ';
												esc_html_e( 'Core', 'amp' );
												break;
											default:
												echo esc_html( (string) $value );
										}
										?>
									<?php elseif ( 'name' === $key && isset( $source['type'] ) ) : ?>
										<?php self::render_source_name( $value, $source['type'] ); ?>
									<?php elseif ( 'extra_key' === $key ) : ?>
										<?php if ( 'style' === $dependency_type ) : ?>
											<code>wp_add_inline_style( <?php echo esc_html( wp_json_encode( $source['handle'] ) ); ?>, &hellip; )</code>
										<?php elseif ( 'data' === $value ) : ?>
											<code>wp_localize_script( <?php echo esc_html( wp_json_encode( $source['handle'] ) ); ?>, &hellip; )</code>
										<?php elseif ( 'before' === $value ) : ?>
											<code>wp_add_inline_script( <?php echo esc_html( wp_json_encode( $source['handle'] ) ); ?>, &hellip;, 'before' )</code>
										<?php elseif ( 'after' === $value ) : ?>
											<code>wp_add_inline_script( <?php echo esc_html( wp_json_encode( $source['handle'] ) ); ?>, &hellip;, 'after' )</code>
										<?php endif; ?>
									<?php elseif ( 'hook' === $key ) : ?>
										<code><?php echo esc_html( (string) $value ); ?></code>
										<?php
										if ( null !== $priority ) {
											echo esc_html(
												sprintf(
													/* translators: %d is the hook priority */
													__( '(priority %d)', 'amp' ),
													$priority
												)
											);
										}
										?>
									<?php elseif ( 'location' === $key ) : ?>
										<?php
										if ( ! empty( $value['link_url'] ) ) {
											printf(
												'<a href="%s" %s>',
												// Note that esc_attr() used instead of esc_url() to allow IDE protocols.
												esc_attr( $value['link_url'] ),
												// Open link in new window unless the user has filtered the URL to open their system IDE.
												in_array( wp_parse_url( $value['link_url'], PHP_URL_SCHEME ), [ 'http', 'https' ], true ) ? 'target="_blank"' : ''
											);
										}
										?>
										<?php echo esc_html( $value['link_text'] ); ?>
										<?php if ( ! empty( $value['link_url'] ) ) : ?>
											</a>
										<?php endif; ?>
									<?php elseif ( 'function' === $key ) : ?>
										<code><?php echo esc_html( '{closure}' === $value ? $value : $value . '()' ); ?></code>
									<?php elseif ( 'shortcode' === $key || 'handle' === $key || 'dependency_handle' === $key ) : ?>
										<code><?php echo esc_html( $value ); ?></code>
									<?php elseif ( 'block_name' === $key ) : ?>
										<?php
										$block_title = self::get_block_title( $value );
										if ( $block_title ) {
											printf( '%s (<code>%s</code>)', esc_html( $block_title ), esc_html( $value ) );
										} else {
											printf( '<code>%s</code>', esc_html( $value ) );
										}
										?>
									<?php elseif ( 'post_type' === $key ) : ?>
										<?php
										$post_type = get_post_type_object( $value );
										if ( $post_type && isset( $post_type->labels->singular_name ) ) {
											echo esc_html( $post_type->labels->singular_name );
											printf( ' (<code>%s</code>)', esc_html( $value ) );
										} else {
											printf( '<code>%s</code>', esc_html( $value ) );
										}
										?>
									<?php elseif ( 'text' === $key ) : ?>
										<?php self::render_code_details( $value ); ?>
									<?php elseif ( is_scalar( $value ) ) : ?>
										<?php echo esc_html( (string) $value ); ?>
									<?php else : ?>
										<pre><?php echo esc_html( wp_json_encode( $value, 128 /* JSON_PRETTY_PRINT */ | 64 /* JSON_UNESCAPED_SLASHES */ ) ); ?></pre>
									<?php endif; ?>
								</td>
							</tr>
						<?php endforeach; ?>
					</tbody>
				<?php endforeach; ?>
				</tbody>
			</table>
		</details>
		<?php
	}

	/**
	 * Render code details.
	 *
	 * @param string $text Text.
	 */
	private static function render_code_details( $text ) {
		$length = strlen( $text );
		?>
		<details>
			<summary>
				<?php
				echo esc_html(
					sprintf(
						/* translators: %s is the byte count */
						_n(
							'%s byte',
							'%s bytes',
							$length,
							'amp'
						),
						number_format_i18n( $length )
					)
				);
				?>
			</summary>
			<pre><?php echo esc_html( $text ); ?></pre>
		</details>
		<?php
	}

	/**
	 * Get block name for a given block slug.
	 *
	 * @since 1.4
	 *
	 * @todo Blocks should eventually be registered server-side with titles.
	 * @param string $block_name Block slug.
	 * @return string Block title.
	 */
	public static function get_block_title( $block_name ) {
		$block_title = null;
		if ( 'core/html' === $block_name ) {
			$block_title = __( 'Custom HTML', 'amp' );
		}
		return $block_title;
	}

	/**
	 * Gets the translated error type name from the given the validation error.
	 *
	 * @param array $validation_error The validation error data.
	 * @return string|null $slug The translated type of the error.
	 */
	public static function get_translated_type_name( $validation_error ) {
		if ( ! isset( $validation_error['type'] ) ) {
			return null;
		}

		$translated_names = [
			self::HTML_ELEMENT_ERROR_TYPE   => __( 'HTML Element', 'amp' ),
			self::HTML_ATTRIBUTE_ERROR_TYPE => __( 'HTML Attribute', 'amp' ),
			self::JS_ERROR_TYPE             => __( 'JavaScript', 'amp' ),
			self::CSS_ERROR_TYPE            => __( 'CSS', 'amp' ),
		];

		if ( isset( $translated_names[ $validation_error['type'] ] ) ) {
			return $translated_names[ $validation_error['type'] ];
		}

		return null;
	}

	/**
	 * Handle inline edit links.
	 */
	public static function handle_inline_edit_request() {
		// Check for necessary arguments.
		if ( ! isset( $_GET['action'], $_GET['_wpnonce'], $_GET['term_id'] ) ) {  // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			return;
		}

		// Check if we are on either the taxonomy page or a single error page (which has the post_type argument).
		if ( self::TAXONOMY_SLUG !== get_current_screen()->taxonomy && ! isset( $_GET['post_type'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			return;
		}

		// If we have a post_type check that it is the correct one.
		if ( isset( $_GET['post_type'] ) && AMP_Validated_URL_Post_Type::POST_TYPE_SLUG !== $_GET['post_type'] ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			return;
		}
		$action = sanitize_key( $_GET['action'] ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
		check_admin_referer( $action );
		$taxonomy_caps = (object) get_taxonomy( self::TAXONOMY_SLUG )->cap; // Yes, cap is an object not an array.
		if ( ! current_user_can( $taxonomy_caps->manage_terms ) ) {
			return;
		}

		$referer  = wp_get_referer();
		$term_id  = (int) $_GET['term_id']; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
		$redirect = self::handle_validation_error_update( $referer, $action, [ $term_id ] );

		if ( $redirect !== $referer ) {
			wp_safe_redirect( $redirect );
			exit;
		}
	}

	/**
	 * On the single URL page, handles the bulk actions of 'Remove' (formerly 'Accept') and 'Keep' (formerly 'Reject').
	 *
	 * On /wp-admin/post.php, this handles these bulk actions.
	 * This page is more like an edit-tags.php page, in that it has a WP_Terms_List_Table of amp_validation_error terms.
	 * So this reuses handle_validation_error_update(), which the edit-tags.php page uses.
	 *
	 * @param int $post_id The ID of the post for which to apply the bulk action.
	 */
	public static function handle_single_url_page_bulk_and_inline_actions( $post_id ) {
		if ( ! isset( $_REQUEST['action'] ) || AMP_Validated_URL_Post_Type::POST_TYPE_SLUG !== get_post_type( $post_id ) ) {  // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			return;
		}

		$action              = sanitize_key( $_REQUEST['action'] ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
		$term_ids            = isset( $_POST['delete_tags'] ) ? array_filter( array_map( 'intval', (array) $_POST['delete_tags'] ) ) : []; // phpcs:ignore WordPress.Security.NonceVerification.Missing
		$single_term_id      = isset( $_GET['term_id'] ) ? (int) $_GET['term_id'] : null; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
		$redirect_query_args = [
			'action'       => 'edit',
			'amp_actioned' => $action,
		];

		if ( $term_ids ) {
			// If this is a bulk action.
			self::handle_validation_error_update( null, $action, $term_ids );
			$redirect_query_args['amp_actioned_count'] = count( $term_ids );
		} elseif ( $single_term_id ) {
			// If this is an inline action, like 'Details' or 'Delete'.
			self::handle_validation_error_update( null, $action, [ $single_term_id ] );
			$redirect_query_args['amp_actioned_count'] = 1;
		}

		// Even if the user didn't select any errors to bulk edit, redirect back to the same page.
		if ( wp_safe_redirect(
			add_query_arg(
				$redirect_query_args,
				get_edit_post_link( $post_id, 'raw' )
			)
		) ) {
			exit(); // @codeCoverageIgnore
		}
	}

	/**
	 * Handle bulk and inline edits to amp_validation_error terms.
	 *
	 * @param string $redirect_to Redirect to.
	 * @param string $action      Action.
	 * @param int[]  $term_ids    Term IDs.
	 *
	 * @return string Redirect.
	 */
	public static function handle_validation_error_update( $redirect_to, $action, $term_ids ) {
		if ( 'delete' !== $action ) {
			return $redirect_to;
		}

		global $pagenow;

		$has_pre_term_description_filter = has_filter( 'pre_term_description', 'wp_filter_kses' );
		if ( false !== $has_pre_term_description_filter ) {
			remove_filter( 'pre_term_description', 'wp_filter_kses', $has_pre_term_description_filter );
		}

		$updated_count = 0;
		foreach ( $term_ids as $term_id ) {
			if ( self::delete_empty_term( $term_id ) ) {
				$updated_count++;
			}
		}

		if ( $updated_count ) {
			delete_transient( AMP_Validated_URL_Post_Type::NEW_VALIDATION_ERROR_URLS_COUNT_TRANSIENT );
		}

		if ( false !== $has_pre_term_description_filter ) {
			add_filter( 'pre_term_description', 'wp_filter_kses', $has_pre_term_description_filter );
		}

		// Bail if `$redirect_to` is passed as null.
		if ( null === $redirect_to ) {
			return $redirect_to;
		}

		$term_ids_count = count( $term_ids );
		if ( 'edit.php' === $pagenow && 1 === $updated_count ) {
			// Redirect to error index screen if deleting an validation error with no associated validated URLs.
			$redirect_to = add_query_arg(
				[
					'amp_actioned'       => $action,
					'amp_actioned_count' => $term_ids_count,
				],
				esc_url( get_admin_url( null, 'edit-tags.php?taxonomy=' . self::TAXONOMY_SLUG . '&post_type=' . AMP_Validated_URL_Post_Type::POST_TYPE_SLUG ) )
			);
		} else {
			$redirect_to = add_query_arg(
				[
					'amp_actioned'       => $action,
					'amp_actioned_count' => $term_ids_count,
				],
				$redirect_to
			);
		}

		return $redirect_to;
	}

	/**
	 * Handle request to delete empty terms.
	 */
	public static function handle_clear_empty_terms_request() {
		if ( ! isset( $_POST[ self::VALIDATION_ERROR_CLEAR_EMPTY_ACTION ], $_POST[ self::VALIDATION_ERROR_CLEAR_EMPTY_ACTION . '_nonce' ] ) ) {
			return;
		}
		if ( ! check_ajax_referer( self::VALIDATION_ERROR_CLEAR_EMPTY_ACTION, self::VALIDATION_ERROR_CLEAR_EMPTY_ACTION . '_nonce', false ) ) {
			wp_die( esc_html__( 'The link you followed has expired.', 'amp' ) );
		}

		$taxonomy_caps = (object) get_taxonomy( self::TAXONOMY_SLUG )->cap; // Yes, cap is an object not an array.
		if ( ! current_user_can( $taxonomy_caps->manage_terms ) ) {
			wp_die( esc_html__( 'You do not have authorization.', 'amp' ) );
		}

		$deleted_terms = self::delete_empty_terms();

		$referer = wp_validate_redirect( wp_get_raw_referer() );
		if ( ! $referer ) {
			return;
		}

		$redirect = add_query_arg( self::VALIDATION_ERRORS_CLEARED_QUERY_VAR, $deleted_terms, $referer );

		wp_safe_redirect( $redirect );
		exit;
	}

	/**
	 * Determine whether a validation error is for a JS script element.
	 *
	 * @param array $validation_error Validation error.
	 * @return bool Is for scrip JS element.
	 */
	private static function is_validation_error_for_js_script_element( $validation_error ) {
		return (
			isset( $validation_error['node_name'] )
			&&
			'script' === $validation_error['node_name']
			&&
			(
				isset( $validation_error['node_attributes']['src'] )
				||
				empty( $validation_error['node_attributes']['type'] )
				||
				false !== strpos( $validation_error['node_attributes']['type'], 'javascript' )
			)
		);
	}

	/**
	 * Get Error Title from Code
	 *
	 * @todo The message here should be constructed in the sanitizer that emitted the validation error in the first place.
	 *
	 * @param array $validation_error Validation error.
	 * @return string Title with some formatting markup.
	 */
	public static function get_error_title_from_code( $validation_error ) {
		switch ( $validation_error['code'] ) {
			case AMP_Tag_And_Attribute_Sanitizer::DISALLOWED_TAG:
				if ( self::is_validation_error_for_js_script_element( $validation_error ) ) {
					if ( isset( $validation_error['node_attributes']['src'] ) ) {
						$title    = esc_html__( 'Invalid script', 'amp' );
						$basename = basename( wp_parse_url( $validation_error['node_attributes']['src'], PHP_URL_PATH ) );
						if ( $basename ) {
							$title .= sprintf( ': <code>%s</code>', esc_html( $basename ) );
						}
					} else {
						$title = esc_html__( 'Invalid inline script', 'amp' );
					}
				} else {
					$title  = esc_html__( 'Invalid element', 'amp' );
					$title .= sprintf( ': <code>&lt;%s&gt;</code>', esc_html( $validation_error['node_name'] ) );
				}
				return $title;
			case AMP_Tag_And_Attribute_Sanitizer::DISALLOWED_ATTR:
				return sprintf(
					'%s: <code>%s</code>',
					esc_html__( 'Invalid attribute', 'amp' ),
					esc_html( $validation_error['node_name'] )
				);
			case AMP_Tag_And_Attribute_Sanitizer::DISALLOWED_PROCESSING_INSTRUCTION:
				return sprintf(
					'%s: <code>&lt;%s%s&hellip;%s&gt;</code>',
					esc_html__( 'Invalid processing instruction', 'amp' ),
					'?',
					esc_html( $validation_error['node_name'] ),
					'?'
				);
			case AMP_Style_Sanitizer::STYLESHEET_TOO_LONG:
				return esc_html__( 'Excessive CSS', 'amp' );
			case AMP_Style_Sanitizer::CSS_SYNTAX_INVALID_AT_RULE:
				return sprintf(
					'%s: <code>@%s</code>',
					esc_html__( 'Illegal CSS at-rule', 'amp' ),
					esc_html( $validation_error['at_rule'] )
				);
			case AMP_Tag_And_Attribute_Sanitizer::DUPLICATE_UNIQUE_TAG:
				return sprintf(
					'%s: <code>&lt;%s&gt;</code>',
					esc_html__( 'Duplicate element', 'amp' ),
					esc_html( $validation_error['node_name'] )
				);
			case AMP_Style_Sanitizer::CSS_SYNTAX_INVALID_DECLARATION:
				return esc_html__( 'Unrecognized CSS', 'amp' );
			case AMP_Style_Sanitizer::CSS_SYNTAX_PARSE_ERROR:
				return esc_html__( 'CSS parse error', 'amp' );
			case AMP_Style_Sanitizer::STYLESHEET_FETCH_ERROR:
				return esc_html__( 'Stylesheet fetch error', 'amp' );
			case AMP_Style_Sanitizer::CSS_SYNTAX_INVALID_PROPERTY:
			case AMP_Style_Sanitizer::CSS_SYNTAX_INVALID_PROPERTY_NOLIST:
				$title = esc_html__( 'Illegal CSS property', 'amp' );
				if ( isset( $validation_error['css_property_name'] ) ) {
					$title .= sprintf( ': <code>%s</code>', esc_html( $validation_error['css_property_name'] ) );
				}
				return $title;
			case AMP_Style_Sanitizer::CSS_DISALLOWED_SELECTOR:
				return esc_html__( 'Illegal CSS selector', 'amp' );
			case AMP_Style_Sanitizer::DISALLOWED_ATTR_CLASS_NAME:
				$title = esc_html__( 'Disallowed class name', 'amp' );
				if ( isset( $validation_error['class_name'] ) ) {
					$title .= sprintf( ': <code>%s</code>', esc_html( $validation_error['class_name'] ) );
				}
				return $title;
			case AMP_Tag_And_Attribute_Sanitizer::CDATA_TOO_LONG:
			case AMP_Tag_And_Attribute_Sanitizer::MANDATORY_CDATA_MISSING_OR_INCORRECT:
			case AMP_Tag_And_Attribute_Sanitizer::INVALID_CDATA_HTML_COMMENTS:
			case AMP_Tag_And_Attribute_Sanitizer::INVALID_CDATA_CSS_I_AMPHTML_NAME:
			case AMP_Tag_And_Attribute_Sanitizer::INVALID_CDATA_CONTENTS:
			case AMP_Tag_And_Attribute_Sanitizer::CDATA_VIOLATES_DENYLIST:
				return esc_html__( 'Illegal text content', 'amp' );
			case AMP_Tag_And_Attribute_Sanitizer::JSON_ERROR_CTRL_CHAR:
			case AMP_Tag_And_Attribute_Sanitizer::JSON_ERROR_DEPTH:
			case AMP_Tag_And_Attribute_Sanitizer::JSON_ERROR_EMPTY:
			case AMP_Tag_And_Attribute_Sanitizer::JSON_ERROR_STATE_MISMATCH:
			case AMP_Tag_And_Attribute_Sanitizer::JSON_ERROR_SYNTAX:
			case AMP_Tag_And_Attribute_Sanitizer::JSON_ERROR_UTF8:
				return esc_html__( 'Invalid JSON', 'amp' );
			case AMP_Style_Sanitizer::CSS_SYNTAX_INVALID_IMPORTANT:
				$title = esc_html__( 'Illegal CSS !important property', 'amp' );
				if ( isset( $validation_error['css_property_name'] ) ) {
					$title .= sprintf( ': <code>%s</code>', esc_html( $validation_error['css_property_name'] ) );
				}
				return $title;
			case AMP_Tag_And_Attribute_Sanitizer::DISALLOWED_PROPERTY_IN_ATTR_VALUE:
				$title = esc_html__( 'Invalid property', 'amp' );
				if ( isset( $validation_error['meta_property_name'] ) ) {
					$title .= sprintf( ': <code>%s</code>', esc_html( $validation_error['meta_property_name'] ) );
				}
				return $title;
			case AMP_Tag_And_Attribute_Sanitizer::MISSING_MANDATORY_PROPERTY:
				$title = esc_html__( 'Missing required property', 'amp' );
				if ( isset( $validation_error['meta_property_name'] ) ) {
					$title .= sprintf( ': <code>%s</code>', esc_html( $validation_error['meta_property_name'] ) );
				}
				return $title;
			case AMP_Tag_And_Attribute_Sanitizer::MISSING_REQUIRED_PROPERTY_VALUE:
				$title = sprintf(
					/* translators: %1$s is the property name, %2$s is the value for the property */
					esc_html__( 'Invalid value for %1$s property: %2$s', 'amp' ),
					'<code>' . esc_html( $validation_error['meta_property_name'] ) . '</<code>',
					'<code>' . esc_html( $validation_error['meta_property_value'] ) . '</code>'
				);

				return $title;
			case AMP_Tag_And_Attribute_Sanitizer::ATTR_REQUIRED_BUT_MISSING:
				$title = esc_html__( 'Missing required attribute', 'amp' );
				if ( isset( $validation_error['attributes'][0] ) ) {
					$title .= sprintf( ': <code>%s</code>', esc_html( $validation_error['attributes'][0] ) );
				}
				return $title;
			case AMP_Tag_And_Attribute_Sanitizer::DUPLICATE_ONEOF_ATTRS:
				$title = esc_html__( 'Mutually exclusive attributes encountered', 'amp' );
				if ( ! empty( $validation_error['duplicate_oneof_attrs'] ) ) {
					$title .= ': ';
					$title .= implode(
						', ',
						array_map(
							static function ( $attribute_name ) {
								return sprintf( '<code>%s</code>', $attribute_name );
							},
							$validation_error['duplicate_oneof_attrs']
						)
					);
				}
				return $title;
			case AMP_Tag_And_Attribute_Sanitizer::MANDATORY_ONEOF_ATTR_MISSING:
			case AMP_Tag_And_Attribute_Sanitizer::MANDATORY_ANYOF_ATTR_MISSING:
				$attributes_key = null;
				if ( AMP_Tag_And_Attribute_Sanitizer::MANDATORY_ONEOF_ATTR_MISSING === $validation_error['code'] ) {
					$title          = esc_html__( 'Missing exclusive mandatory attribute', 'amp' );
					$attributes_key = 'mandatory_oneof_attrs';
				} else {
					$title          = esc_html__( 'Missing at least one mandatory attribute', 'amp' );
					$attributes_key = 'mandatory_anyof_attrs';
				}

				// @todo This should not be needed because we can look it up from the spec. See https://github.com/ampproject/amp-wp/pull/3817.
				if ( ! empty( $validation_error[ $attributes_key ] ) ) {
					$title .= ': ';
					$title .= implode(
						', ',
						array_map(
							static function ( $attribute_name ) {
								return sprintf( '<code>%s</code>', $attribute_name );
							},
							$validation_error[ $attributes_key ]
						)
					);
				}
				return $title;

			case AMP_Tag_And_Attribute_Sanitizer::DISALLOWED_CHILD_TAG:
				return sprintf(
					/* translators: %1$s is the child tag, %2$s is node name */
					esc_html__( 'Tag %1$s is disallowed as child of tag %2$s', 'amp' ),
					'<code>' . esc_html( $validation_error['child_tag'] ) . '</code>',
					'<code>' . esc_html( $validation_error['node_name'] ) . '</code>'
				);

			case AMP_Tag_And_Attribute_Sanitizer::DISALLOWED_FIRST_CHILD_TAG:
				return sprintf(
					/* translators: %1$s is the first child tag, %2$s is node name */
					esc_html__( 'Tag %1$s is disallowed as first child of tag %2$s', 'amp' ),
					'<code>' . esc_html( $validation_error['first_child_tag'] ) . '</code>',
					'<code>' . esc_html( $validation_error['node_name'] ) . '</code>'
				);

			case AMP_Tag_And_Attribute_Sanitizer::INCORRECT_NUM_CHILD_TAGS:
				return sprintf(
					esc_html(
						/* translators: %1$s is the node name, %2$s is required child count */
						_n(
							'Tag %1$s must have %2$s child tag',
							'Tag %1$s must have %2$s child tags',
							(int) $validation_error['required_child_count'],
							'amp'
						)
					),
					'<code>' . esc_html( $validation_error['node_name'] ) . '</code>',
					esc_html( number_format_i18n( (int) $validation_error['required_child_count'] ) )
				);

			case AMP_Tag_And_Attribute_Sanitizer::INCORRECT_MIN_NUM_CHILD_TAGS:
				return sprintf(
					esc_html(
						/* translators: %1$s is the node name, %2$s is required child count */
						_n(
							'Tag %1$s must have a minimum of %2$s child tag',
							'Tag %1$s must have a minimum of %2$s child tags',
							(int) $validation_error['required_min_child_count'],
							'amp'
						)
					),
					'<code>' . esc_html( $validation_error['node_name'] ) . '</code>',
					esc_html( number_format_i18n( (int) $validation_error['required_min_child_count'] ) )
				);

			case AMP_Tag_And_Attribute_Sanitizer::WRONG_PARENT_TAG:
				return sprintf(
					/* translators: %1$s is the node name, %2$s is parent name */
					esc_html__( 'The parent tag of tag %1$s cannot be %2$s', 'amp' ),
					'<code>' . esc_html( $validation_error['node_name'] ) . '</code>',
					'<code>' . esc_html( $validation_error['parent_name'] ) . '</code>'
				);

			case AMP_Tag_And_Attribute_Sanitizer::DISALLOWED_TAG_ANCESTOR:
			case AMP_Tag_And_Attribute_Sanitizer::DISALLOWED_DESCENDANT_TAG:
				return sprintf(
					/* translators: %1$s is the node name, %2$s is the disallowed ancestor tag name */
					esc_html__( 'The tag %1$s may not appear as a descendant of tag %2$s', 'amp' ),
					'<code>' . esc_html( $validation_error['node_name'] ) . '</code>',
					'<code>' . esc_html( $validation_error['disallowed_ancestor'] ) . '</code>'
				);

			case AMP_Tag_And_Attribute_Sanitizer::MANDATORY_TAG_ANCESTOR:
				return sprintf(
					/* translators: %1$s is the node name, %2$s is the required ancestor tag name */
					esc_html__( 'The tag %1$s may only appear as a descendant of tag %2$s', 'amp' ),
					'<code>' . esc_html( $validation_error['node_name'] ) . '</code>',
					'<code>' . esc_html( $validation_error['required_ancestor_name'] ) . '</code>'
				);

			case AMP_Tag_And_Attribute_Sanitizer::INVALID_ATTR_VALUE:
			case AMP_Tag_And_Attribute_Sanitizer::INVALID_ATTR_VALUE_CASEI:
			case AMP_Tag_And_Attribute_Sanitizer::INVALID_ATTR_VALUE_REGEX:
			case AMP_Tag_And_Attribute_Sanitizer::INVALID_ATTR_VALUE_REGEX_CASEI:
			case AMP_Tag_And_Attribute_Sanitizer::INVALID_DISALLOWED_VALUE_REGEX:
				return sprintf(
					/* translators: %s is the attribute name */
					esc_html__( 'The attribute %s is set to an invalid value', 'amp' ),
					'<code>' . esc_html( $validation_error['node_name'] ) . '</code>'
				);

			case AMP_Tag_And_Attribute_Sanitizer::INVALID_URL_PROTOCOL:
				$parsed_url       = wp_parse_url( $validation_error['element_attributes'][ $validation_error['node_name'] ] );
				$invalid_protocol = isset( $parsed_url['scheme'] ) ? $parsed_url['scheme'] . ':' : '(null)';

				return sprintf(
					/* translators: %1$s is the invalid protocol, %2$s is attribute name */
					esc_html__( 'Invalid URL protocol %1$s for attribute %2$s', 'amp' ),
					'<code>' . esc_html( $invalid_protocol ) . '</code>',
					'<code>' . esc_html( $validation_error['node_name'] ) . '</code>'
				);

			case AMP_Tag_And_Attribute_Sanitizer::INVALID_URL:
				return sprintf(
					/* translators: %1$s is the invalid URL, %2$s is attribute name */
					esc_html__( 'Malformed URL %1$s for attribute %2$s', 'amp' ),
					'<code>' . esc_html( $validation_error['element_attributes'][ $validation_error['node_name'] ] ) . '</code>',
					'<code>' . esc_html( $validation_error['node_name'] ) . '</code>'
				);

			case AMP_Tag_And_Attribute_Sanitizer::DISALLOWED_RELATIVE_URL:
				return sprintf(
					/* translators: %1$s is the relative URL, %2$s is attribute name */
					esc_html__( 'The relative URL %1$s for attribute %2$s is disallowed', 'amp' ),
					'<code>' . esc_html( $validation_error['element_attributes'][ $validation_error['node_name'] ] ) . '</code>',
					'<code>' . esc_html( $validation_error['node_name'] ) . '</code>'
				);

			case AMP_Tag_And_Attribute_Sanitizer::MISSING_URL:
				return sprintf(
					/* translators: %1$s is attribute name */
					esc_html__( 'Missing URL for attribute %s', 'amp' ),
					'<code>' . esc_html( $validation_error['node_name'] ) . '</code>'
				);

			case AMP_Tag_And_Attribute_Sanitizer::DUPLICATE_DIMENSIONS:
				return sprintf(
					/* translators: %1$s is the attribute name, %2$s is the tag name */
					esc_html__( 'Multiple image candidates with the same width or pixel density found in attribute %1$s in tag %2$s', 'amp' ),
					'<code>' . esc_html( $validation_error['node_name'] ) . '</code>',
					'<code>' . esc_html( $validation_error['parent_name'] ) . '</code>'
				);

			case AMP_Tag_And_Attribute_Sanitizer::INVALID_LAYOUT_WIDTH:
			case AMP_Tag_And_Attribute_Sanitizer::INVALID_LAYOUT_HEIGHT:
			case AMP_Tag_And_Attribute_Sanitizer::INVALID_LAYOUT_AUTO_HEIGHT:
			case AMP_Tag_And_Attribute_Sanitizer::INVALID_LAYOUT_NO_HEIGHT:
			case AMP_Tag_And_Attribute_Sanitizer::INVALID_LAYOUT_FIXED_HEIGHT:
			case AMP_Tag_And_Attribute_Sanitizer::INVALID_LAYOUT_AUTO_WIDTH:
			case AMP_Tag_And_Attribute_Sanitizer::INVALID_LAYOUT_HEIGHTS:
				if ( isset( $validation_error['node_attributes'][ $validation_error['attribute'] ] ) ) {
					return sprintf(
						/* translators: %1$s is the invalid attribute value, %2$s is the attribute name */
						esc_html__( 'Invalid value %1$s for attribute %2$s', 'amp' ),
						empty( $validation_error['node_attributes'][ $validation_error['attribute'] ] )
							? esc_html__( '(empty)', 'amp' )
							: '<code>' . esc_html( $validation_error['node_attributes'][ $validation_error['attribute'] ] ) . '</code>',
						'<code>' . esc_html( $validation_error['attribute'] ) . '</code>'
					);
				} else {
					return sprintf(
						/* translators: %s is the invalid attribute value */
						esc_html__( 'Invalid or missing value for attribute %s', 'amp' ),
						'<code>' . esc_html( $validation_error['attribute'] ) . '</code>'
					);
				}

			case AMP_Tag_And_Attribute_Sanitizer::INVALID_LAYOUT_UNIT_DIMENSIONS:
				return esc_html__( 'Inconsistent units for width and height', 'amp' );

			case AMP_Tag_And_Attribute_Sanitizer::MISSING_LAYOUT_ATTRIBUTES:
				return sprintf(
					/* translators: %1$s is the element name, %2$s is the attribute name 'width', %3$s is the attribute name 'height' */
					esc_html__( 'Incomplete layout attributes specified for tag %1$s. For example, provide attributes %2$s and %3$s', 'amp' ),
					'<code>' . esc_html( $validation_error['node_name'] ) . '</code>',
					'<code>width</code>',
					'<code>height</code>'
				);

			case AMP_Tag_And_Attribute_Sanitizer::IMPLIED_LAYOUT_INVALID:
				return sprintf(
					/* translators: %1$s is the layout, %2$s is the tag */
					esc_html__( 'The implied layout %1$s is not supported by tag %2$s.', 'amp' ),
					'<code>' . esc_html( $validation_error['layout'] ) . '</code>',
					'<code>' . esc_html( $validation_error['node_name'] ) . '</code>'
				);

			case AMP_Tag_And_Attribute_Sanitizer::SPECIFIED_LAYOUT_INVALID:
				return sprintf(
					/* translators: %1$s is the layout, %2$s is the tag */
					esc_html__( 'The specified layout %1$s is not supported by tag %2$s.', 'amp' ),
					'<code>' . esc_html( $validation_error['layout'] ) . '</code>',
					'<code>' . esc_html( $validation_error['node_name'] ) . '</code>'
				);

			case AMP_Form_Sanitizer::POST_FORM_HAS_ACTION_XHR_WHEN_NATIVE_USED:
				return sprintf(
					/* translators: %1$s is 'POST', %2$s is 'action-xhr' */
					esc_html__( 'Native %1$s form has %2$s attribute.', 'amp' ),
					'<code>POST</code>',
					'<code>action-xhr</code>'
				);

			case AMP_Script_Sanitizer::CUSTOM_EXTERNAL_SCRIPT:
				return sprintf(
					/* translators: %s is script basename */
					esc_html__( 'Custom external script %s encountered', 'amp' ),
					'<code>' . basename( strtok( $validation_error['node_attributes']['src'], '?#' ) ) . '</code>'
				);

			case AMP_Script_Sanitizer::CUSTOM_INLINE_SCRIPT:
				return esc_html__( 'Custom inline script encountered', 'amp' );

			case AMP_Script_Sanitizer::CUSTOM_EVENT_HANDLER_ATTR:
				return sprintf(
					/* translators: %s is attribute name */
					esc_html__( 'Event handler attribute %s encountered', 'amp' ),
					'<code>' . $validation_error['node_name'] . '</code>'
				);

			default:
				/* translators: %s error code */
				return sprintf( esc_html__( 'Unknown error (%s)', 'amp' ), $validation_error['code'] );
		}
	}

	/**
	 * Get label for object key in validation error source.
	 *
	 * @param string $key              Key.
	 * @param array  $validation_error Validation error.
	 * @return string Label for key.
	 */
	public static function get_source_key_label( $key, $validation_error ) {
		switch ( $key ) {
			case 'code':
				return __( 'Code', 'amp' );
			case 'at_rule':
				return __( 'At-rule', 'amp' );
			case 'node_attributes':
			case 'element_attributes':
				return __( 'Element attributes', 'amp' );
			case 'node_name':
				if ( AMP_Tag_And_Attribute_Sanitizer::DISALLOWED_ATTR === $validation_error['code'] ) {
					return __( 'Attribute name', 'amp' );
				} elseif ( AMP_Tag_And_Attribute_Sanitizer::DISALLOWED_TAG === $validation_error['code'] ) {
					return __( 'Element name', 'amp' );
				} else {
					return __( 'Node name', 'amp' );
				}
			case 'parent_name':
				return __( 'Parent element', 'amp' );
			case 'css_property_name':
				return __( 'CSS property', 'amp' );
			case 'css_selector':
				return __( 'CSS selector', 'amp' );
			case 'class_name':
				return __( 'Class name', 'amp' );
			case 'duplicate_oneof_attrs':
				return __( 'Mutually exclusive attributes', 'amp' );
			case 'text':
				return __( 'Text content', 'amp' );
			case 'type':
				return __( 'Type', 'amp' );
			case 'sources':
				return __( 'Sources', 'amp' );
			case 'meta_property_name':
				if (
					AMP_Tag_And_Attribute_Sanitizer::DISALLOWED_PROPERTY_IN_ATTR_VALUE === $validation_error['code'] ||
					AMP_Tag_And_Attribute_Sanitizer::MISSING_REQUIRED_PROPERTY_VALUE === $validation_error['code']
				) {
					return __( 'Invalid property', 'amp' );
				} elseif ( AMP_Tag_And_Attribute_Sanitizer::MISSING_MANDATORY_PROPERTY === $validation_error['code'] ) {
					return __( 'Missing property', 'amp' );
				}

				return __( 'Property name', 'amp' );
			case 'property_value':
				if ( AMP_Tag_And_Attribute_Sanitizer::DISALLOWED_PROPERTY_IN_ATTR_VALUE === $validation_error['code'] ) {
					return __( 'Invalid property value', 'amp' );
				} elseif ( AMP_Tag_And_Attribute_Sanitizer::MISSING_REQUIRED_PROPERTY_VALUE === $validation_error['code'] ) {
					return __( 'Required property value', 'amp' );
				}

				return __( 'Property value', 'amp' );
			case 'attributes':
				return __( 'Missing attributes', 'amp' );
			case 'child_tag':
				return __( 'Child tag', 'amp' );
			case 'first_child_tag':
				return __( 'First child tag', 'amp' );
			case 'children_count':
				return __( 'Children count', 'amp' );
			case 'required_child_count':
				return __( 'Required child count', 'amp' );
			case 'required_min_child_count':
				return __( 'Required minimum child count', 'amp' );
			case 'required_parent_name':
				return __( 'Required parent element', 'amp' );
			case 'disallowed_ancestor':
				return __( 'Disallowed ancestor element', 'amp' );
			case 'required_ancestor_name':
				return __( 'Required ancestor element', 'amp' );
			case 'attribute':
				return __( 'Invalid attribute', 'amp' );
			case 'required_attr_value':
				return __( 'Required attribute value', 'amp' );
			case 'url':
				return __( 'URL', 'amp' );
			case 'message':
				return __( 'Message', 'amp' );
			case 'duplicate_dimensions':
				return __( 'Duplicate dimensions', 'amp' );
			default:
				return $key;
		}
	}

	/**
	 * Get Status Text with Icon
	 *
	 * @see \AMP_Validation_Error_Taxonomy::get_validation_error_sanitization()
	 *
	 * @param array $sanitization     Sanitization.
	 * @param bool  $include_reviewed Include reviewed/unreviewed status.
	 * @return string Status text.
	 */
	public static function get_status_text_with_icon( $sanitization, $include_reviewed = false ) {
		if ( $sanitization['term_status'] & self::ACCEPTED_VALIDATION_ERROR_BIT_MASK ) {
			$icon = Icon::removed();
			$text = __( 'Removed', 'amp' );
		} else {
			$icon = Icon::invalid();
			$text = __( 'Kept', 'amp' );
		}

		if ( $include_reviewed ) {
			$text .= ' (';
			if ( $sanitization['term_status'] & self::ACKNOWLEDGED_VALIDATION_ERROR_BIT_MASK ) {
				$text .= __( 'Reviewed', 'amp' );
			} else {
				$text .= __( 'Unreviewed', 'amp' );
			}
			$text .= ')';
		}

		return sprintf( '<span class="status-text">%s %s</span>', $icon->to_html(), esc_html( $text ) );
	}

	/**
	 * Deletes cached term counts.
	 */
	public static function clear_cached_counts() {
		delete_transient( self::TRANSIENT_KEY_ERROR_INDEX_COUNTS );
	}
}
PK.3Y$��$`$`?bunyad-amp/includes/validation/class-amp-validation-manager.php<?php
/**
 * Class AMP_Validation_Manager
 *
 * @package AMP
 */

use AmpProject\AmpWP\DevTools\UserAccess;
use AmpProject\AmpWP\Icon;
use AmpProject\AmpWP\Option;
use AmpProject\AmpWP\QueryVar;
use AmpProject\AmpWP\Services;
use AmpProject\Dom\Document;
use AmpProject\Exception\MaxCssByteCountExceeded;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag;

/**
 * Class AMP_Validation_Manager
 *
 * @since 0.7
 * @internal
 */
class AMP_Validation_Manager {

	/**
	 * Query var that triggers validation.
	 *
	 * @var string
	 */
	const VALIDATE_QUERY_VAR = 'amp_validate';

	/**
	 * Key for amp_validate query var array for nonce to authorize validation.
	 *
	 * @var string
	 */
	const VALIDATE_QUERY_VAR_NONCE = 'nonce';

	/**
	 * Key for amp_validate query var array for whether to store the validation results in an amp_validated_url post.
	 *
	 * @var string
	 */
	const VALIDATE_QUERY_VAR_CACHE = 'cache';

	/**
	 * Key for amp_validate query var array for whether to return previously-stored the validation results if an
	 * amp_validated_url post exists for the URL and it is not stale.
	 *
	 * @var string
	 */
	const VALIDATE_QUERY_VAR_CACHED_IF_FRESH = 'cached_if_fresh';

	/**
	 * Key for amp_validate query var array for whether to omit stylesheets data.
	 *
	 * @var string
	 */
	const VALIDATE_QUERY_VAR_OMIT_STYLESHEETS = 'omit_stylesheets';

	/**
	 * Key for amp_validate query var array to bust the cache.
	 *
	 * @var string
	 */
	const VALIDATE_QUERY_VAR_CACHE_BUST = 'cache_bust';

	/**
	 * Key for amp_validate query var array to force Standard template mode.
	 *
	 * @var string
	 */
	const VALIDATE_QUERY_VAR_FORCE_STANDARD_MODE = 'force_standard_mode';

	/**
	 * Meta capability for validation.
	 *
	 * Note that this is mapped to 'manage_options' by default via `AMP_Validation_Manager::map_meta_cap()`. Using a
	 * meta capability allows a site to customize which users get access to perform validation.
	 *
	 * @see AMP_Validation_Manager::map_meta_cap()
	 * @var string
	 */
	const VALIDATE_CAPABILITY = 'amp_validate';

	/**
	 * Action name for previewing the status change for invalid markup.
	 *
	 * @var string
	 */
	const MARKUP_STATUS_PREVIEW_ACTION = 'amp_markup_status_preview';

	/**
	 * Query var for passing status preview/update for validation error.
	 *
	 * @var string
	 */
	const VALIDATION_ERROR_TERM_STATUS_QUERY_VAR = 'amp_validation_error_term_status';

	/**
	 * The errors encountered when validating.
	 *
	 * @var array[] {
	 *     @type array $error     Error data.
	 *     @type bool  $sanitized Whether sanitized.
	 * }
	 */
	public static $validation_results = [];

	/**
	 * Sources that enqueue (or register) each script.
	 *
	 * @var array
	 */
	public static $enqueued_script_sources = [];

	/**
	 * Sources for script extras that are attached to each dependency.
	 *
	 * The keys are the values of the extras being added; the values are an array of the source(s) that caused the extra
	 * to be added.
	 *
	 * @since 1.5
	 * @var array[]
	 */
	public static $extra_script_sources = [];

	/**
	 * Sources that enqueue (or register) each style.
	 *
	 * @var array
	 */
	public static $enqueued_style_sources = [];

	/**
	 * Sources for style extras that are attached to each dependency.
	 *
	 * The keys are the style handles, and the values are mappings of the inline CSS to the array of sources.
	 *
	 * @since 1.5
	 * @var array[]
	 */
	public static $extra_style_sources = [];

	/**
	 * Post IDs for posts that have been updated which need to be re-validated.
	 *
	 * Keys are post IDs and values are whether the post has been re-validated.
	 *
	 * @deprecated In 2.1 the classic editor block validation was removed. This is not removed yet since there is a mini plugin that uses it: https://gist.github.com/westonruter/31ac0e056b8b1278c98f8a9f548fcc1a.
	 * @var bool[]
	 */
	public static $posts_pending_frontend_validation = [];

	/**
	 * Current sources gathered for a given hook currently being run.
	 *
	 * @see AMP_Validation_Manager::wrap_hook_callbacks()
	 * @see AMP_Validation_Manager::decorate_filter_source()
	 * @var array[]
	 */
	protected static $current_hook_source_stack = [];

	/**
	 * Index for where block appears in a post's content.
	 *
	 * @var int
	 */
	protected static $block_content_index = 0;

	/**
	 * Hook source stack.
	 *
	 * This has to be public for the sake of PHP 5.3.
	 *
	 * @since 0.7
	 * @var array[]
	 */
	public static $hook_source_stack = [];

	/**
	 * Original render_callbacks for blocks at the time of wrapping.
	 *
	 * Keys are block names, values are the render_callback callables.
	 *
	 * @see AMP_Validation_Manager::wrap_block_callbacks()
	 * @var array<string, callable>
	 */
	protected static $original_block_render_callbacks = [];

	/**
	 * Collection of backtraces for when wp_editor() was called.
	 *
	 * @var array
	 */
	protected static $wp_editor_sources = [];

	/**
	 * Whether a validate request is being performed.
	 *
	 * When responding to a request to validate a URL, instead of an HTML document being returned, a JSON document is
	 * returned with any errors that were encountered during validation.
	 *
	 * @see AMP_Validation_Manager::get_validate_response_data()
	 *
	 * @var bool
	 */
	protected static $is_validate_request = false;

	/**
	 * Overrides for validation errors.
	 *
	 * @var array
	 */
	public static $validation_error_status_overrides = [];

	/**
	 * Whether the admin bar item was added for AMP.
	 *
	 * @var bool
	 */
	protected static $amp_admin_bar_item_added = false;

	/**
	 * Get dev tools user access service.
	 *
	 * @return UserAccess
	 */
	private static function get_dev_tools_user_access() {
		$service = Services::get( 'dev_tools.user_access' );
		return $service;
	}

	/**
	 * Initialize.
	 *
	 * @return void
	 */
	public static function init() {
		add_filter( 'map_meta_cap', [ __CLASS__, 'map_meta_cap' ], 100, 2 );
		AMP_Validated_URL_Post_Type::register();
		AMP_Validation_Error_Taxonomy::register();

		add_action( 'enqueue_block_editor_assets', [ __CLASS__, 'enqueue_block_validation' ] );
		add_action( 'admin_bar_menu', [ __CLASS__, 'add_admin_bar_menu_items' ], 101 );
		add_action( 'wp', [ __CLASS__, 'maybe_fail_validate_request' ] );
		add_action( 'wp', [ __CLASS__, 'maybe_send_cached_validate_response' ], 20 );
		add_action( 'wp', [ __CLASS__, 'override_validation_error_statuses' ] );

		// Allow query parameter to force a response to be served with Standard mode (AMP-first). This query parameter
		// is only honored when doing a validation request or when the user is able to do validation. This is used as
		// part of Site Scanning in order to determine if the primary theme is suitable for serving AMP.
		if ( ! amp_is_canonical() ) {
			$filter_hooks = [
				'default_option_' . AMP_Options_Manager::OPTION_NAME,
				'option_' . AMP_Options_Manager::OPTION_NAME,
			];
			foreach ( $filter_hooks as $filter_hook ) {
				add_filter( $filter_hook, [ __CLASS__, 'filter_options_when_force_standard_mode_request' ] );
			}
		}
	}

	/**
	 * Filter AMP options to set Standard template mode if it is an AMP-override request.
	 *
	 * @param array|false $options Options.
	 * @return array Filtered options.
	 */
	public static function filter_options_when_force_standard_mode_request( $options ) {
		if ( ! $options ) {
			$options = [];
		}

		if (
			self::is_validate_request()
			&&
			self::get_validate_request_args()[ self::VALIDATE_QUERY_VAR_FORCE_STANDARD_MODE ]
		) {
			$options[ Option::THEME_SUPPORT ]           = AMP_Theme_Support::STANDARD_MODE_SLUG;
			$options[ Option::ALL_TEMPLATES_SUPPORTED ] = true;
		}

		return $options;
	}

	/**
	 * Determine if a post supports AMP validation.
	 *
	 * @since 1.2
	 *
	 * @param WP_Post|int $post Post.
	 * @return bool Whether post supports AMP validation.
	 */
	public static function post_supports_validation( $post ) {
		$post = get_post( $post );
		if ( ! $post ) {
			return false;
		}

		return (
			// Skip if the post type is not viewable on the frontend, since we need a permalink to validate.
			in_array( $post->post_type, AMP_Post_Type_Support::get_eligible_post_types(), true )
			&&
			! wp_is_post_autosave( $post )
			&&
			! wp_is_post_revision( $post )
			&&
			'auto-draft' !== $post->post_status
			&&
			'trash' !== $post->post_status
			&&
			amp_is_post_supported( $post )
		);
	}

	/**
	 * Return whether sanitization is initially accepted (by default) for newly encountered validation errors.
	 *
	 * To reject all new validation errors by default, a filter can be used like so:
	 *
	 *     add_filter( 'amp_validation_error_default_sanitized', '__return_false' );
	 *
	 * Whether or not a validation error is then actually sanitized is the ultimately determined by the
	 * `amp_validation_error_sanitized` filter.
	 *
	 * @since 1.0
	 * @see AMP_Validation_Error_Taxonomy::is_validation_error_sanitized()
	 * @see AMP_Validation_Error_Taxonomy::get_validation_error_sanitization()
	 *
	 * @param array $error Optional. Validation error. Will query the general status if no error provided.
	 * @return bool Whether sanitization is forcibly accepted.
	 */
	public static function is_sanitization_auto_accepted( $error = null ) {

		if ( $error && amp_is_canonical() ) {
			// Excessive CSS on AMP-first sites must not be removed by default since removing CSS can severely break a site.
			$accepted = AMP_Style_Sanitizer::STYLESHEET_TOO_LONG !== $error['code'];
		} else {
			$accepted = true;
		}

		/**
		 * Filters whether sanitization is accepted for a newly-encountered validation error .
		 *
		 * This only applies to validation errors that have not been encountered before. To override the sanitization
		 * status of existing validation errors, use the `amp_validation_error_sanitized` filter.
		 *
		 * @since 1.4
		 * @see AMP_Validation_Error_Taxonomy::get_validation_error_sanitization()
		 *
		 * @param bool       $accepted Default accepted.
		 * @param array|null $error    Validation error. May be null when asking if accepting sanitization is enabled by default.
		 */
		return apply_filters( 'amp_validation_error_default_sanitized', $accepted, $error );
	}

	/**
	 * Add menu items to admin bar for AMP.
	 *
	 * When on a non-AMP response (transitional mode), then the admin bar item should include:
	 * - Icon: LINK SYMBOL when AMP not known to be invalid and sanitization is not forced, or CROSS MARK when AMP is known to be valid.
	 * - Parent admin item and first submenu item: link to AMP version.
	 * - Second submenu item: link to validate the URL.
	 *
	 * When on transitional AMP response:
	 * - Icon: CHECK MARK if no unaccepted validation errors on page, or WARNING SIGN if there are unaccepted validation errors which are being forcibly sanitized.
	 *         Otherwise, if there are unsanitized validation errors then a redirect to the non-AMP version will be done.
	 * - Parent admin item and first submenu item: link to non-AMP version.
	 * - Second submenu item: link to validate the URL.
	 *
	 * When on AMP-first response:
	 * - Icon: CHECK MARK if no unaccepted validation errors on page, or WARNING SIGN if there are unaccepted validation errors.
	 * - Parent admin and first submenu item: link to validate the URL.
	 *
	 * @see AMP_Validation_Manager::finalize_validation() Where the emoji is updated.
	 * @see amp_add_admin_bar_view_link() Where an admin bar item may have been added already for Reader/Transitional modes.
	 *
	 * @param WP_Admin_Bar $wp_admin_bar Admin bar.
	 */
	public static function add_admin_bar_menu_items( $wp_admin_bar ) {
		if ( is_admin() || ! self::get_dev_tools_user_access()->is_user_enabled() || ! amp_is_available() ) {
			self::$amp_admin_bar_item_added = false;
			return;
		}

		$is_amp_request = amp_is_request();
		$current_url    = remove_query_arg(
			array_merge( wp_removable_query_args(), [ QueryVar::NOAMP ] ),
			amp_get_current_url()
		);

		if ( amp_is_canonical() ) {
			$amp_url     = $current_url;
			$non_amp_url = add_query_arg(
				QueryVar::NOAMP,
				QueryVar::NOAMP_AVAILABLE,
				$current_url
			);
		} elseif ( $is_amp_request ) {
			$amp_url     = $current_url;
			$non_amp_url = add_query_arg(
				QueryVar::NOAMP,
				QueryVar::NOAMP_MOBILE,
				amp_remove_paired_endpoint( $current_url )
			);
		} else {
			$amp_url     = amp_add_paired_endpoint( $current_url );
			$non_amp_url = $current_url;
		}

		$validate_url = AMP_Validated_URL_Post_Type::get_recheck_url( AMP_Validated_URL_Post_Type::get_invalid_url_post( $amp_url ) ?: $amp_url );

		// Construct the parent admin bar item.
		if ( $is_amp_request ) {
			$icon = Icon::valid(); // This will get overridden in AMP_Validation_Manager::finalize_validation() if there are unaccepted errors.
			$href = $validate_url;
		} else {
			$icon = Icon::link();
			$href = $amp_url;
		}

		$icon_html = $icon->to_html(
			[
				'id'    => 'amp-admin-bar-item-status-icon',
				'class' => 'ab-icon',
			]
		);

		$validate_url_title = __( 'Validate URL', 'amp' );

		$parent = [
			'id'    => 'amp',
			'title' => sprintf(
				'%s %s',
				$icon_html,
				esc_html__( 'AMP', 'amp' )
			),
			'href'  => esc_url( $href ),
			'meta'  => [
				'title' => esc_attr( $is_amp_request ? $validate_url_title : __( 'View AMP version', 'amp' ) ),
			],
		];

		// Construct admin bar item for validation.
		$validate_item = [
			'parent' => 'amp',
			'id'     => 'amp-validity',
			'title'  => esc_html( $validate_url_title ),
			'href'   => esc_url( $validate_url ),
		];

		// Construct admin bar item to link to AMP version or non-AMP version.
		$wp_admin_bar->remove_node( 'amp-view' ); // Remove so we can re-add in the right position.
		$link_item = [
			'parent' => 'amp',
			'id'     => 'amp-view',
			'href'   => esc_url( $is_amp_request ? $non_amp_url : $amp_url ),
		];
		if ( amp_is_canonical() ) {
			$link_item['title'] = esc_html__( 'View with AMP disabled', 'amp' );
		} else {
			$link_item['title'] = esc_html( $is_amp_request ? __( 'View non-AMP version', 'amp' ) : __( 'View AMP version', 'amp' ) );
		}

		// Add top-level menu item. Note that this will correctly merge/amend any existing AMP nav menu item added in amp_add_admin_bar_view_link().
		$wp_admin_bar->add_node( $parent );

		if ( $is_amp_request ) {
			$wp_admin_bar->add_node( $validate_item );
			$wp_admin_bar->add_node( $link_item );
		} else {
			$wp_admin_bar->add_node( $link_item );
			$wp_admin_bar->add_node( $validate_item );
		}

		// Add settings link to admin bar.
		if ( current_user_can( 'manage_options' ) ) {
			$wp_admin_bar->add_node(
				[
					'parent' => 'amp',
					'id'     => 'amp-settings',
					'title'  => esc_html__( 'Settings', 'amp' ),
					'href'   => esc_url( admin_url( add_query_arg( 'page', AMP_Options_Manager::OPTION_NAME, 'admin.php' ) ) ),
				]
			);
		}

		self::$amp_admin_bar_item_added = true;
	}

	/**
	 * Override validation error statuses (when requested).
	 *
	 * When a query var is present along with the required nonce, override the status of the invalid markup
	 * as requested.
	 *
	 * @since 1.5.0
	 */
	public static function override_validation_error_statuses() {
		$override_validation_error_statuses = (
			isset( $_REQUEST['preview'] )
			&&
			! empty( $_REQUEST[ AMP_Validated_URL_Post_Type::VALIDATION_ERRORS_INPUT_KEY ] ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			&&
			is_array( $_REQUEST[ AMP_Validated_URL_Post_Type::VALIDATION_ERRORS_INPUT_KEY ] ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended
		);
		if ( ! $override_validation_error_statuses ) {
			return;
		}
		if ( ! isset( $_REQUEST['_wpnonce'] ) || ! wp_verify_nonce( sanitize_key( $_REQUEST['_wpnonce'] ), self::MARKUP_STATUS_PREVIEW_ACTION ) ) {
			wp_die(
				esc_html__( 'Preview link expired. Please try again.', 'amp' ),
				esc_html__( 'Error', 'amp' ),
				[ 'response' => 401 ]
			);
		}

		/*
		 * This can't just easily add an amp_validation_error_sanitized filter because the the filter_sanitizer_args() method
		 * currently needs to obtain the list of overrides to create a parsed_cache_variant.
		 */
		foreach ( $_REQUEST[ AMP_Validated_URL_Post_Type::VALIDATION_ERRORS_INPUT_KEY ] as $slug => $data ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
			if ( ! isset( $data[ self::VALIDATION_ERROR_TERM_STATUS_QUERY_VAR ] ) ) {
				continue;
			}

			$slug   = sanitize_key( $slug );
			$status = (int) $data[ self::VALIDATION_ERROR_TERM_STATUS_QUERY_VAR ];
			self::$validation_error_status_overrides[ $slug ] = $status;
			ksort( self::$validation_error_status_overrides );
		}
	}

	/**
	 * Short-circuit validation requests which are for URLs that are not AMP pages.
	 *
	 * @since 2.1
	 */
	public static function maybe_fail_validate_request() {
		if ( ! self::is_validate_request() || amp_is_request() ) {
			return;
		}

		if ( ! amp_is_available() ) {
			$code    = 'AMP_NOT_AVAILABLE';
			$message = __( 'The requested URL is not an AMP page. AMP may have been disabled for the URL. If so, you can forget the Validated URL.', 'amp' );
		} else {
			$code    = 'AMP_NOT_REQUESTED';
			$message = __( 'The requested URL is not an AMP page.', 'amp' );
		}
		wp_send_json( compact( 'code', 'message' ), 400 );
	}

	/**
	 * Whether a validate request is being performed.
	 *
	 * When responding to a request to validate a URL, instead of an HTML document being returned, a JSON document is
	 * returned with any errors that were encountered during validation.
	 *
	 * @see AMP_Validation_Manager::get_validate_response_data()
	 *
	 * @return bool
	 */
	public static function is_validate_request() {
		return self::$is_validate_request;
	}

	/**
	 * Get validate request args.
	 *
	 * @return array {
	 *     Args.
	 *
	 *     @type string|null $nonce            None to authorize validate request or null if none was supplied.
	 *     @type bool        $cache            Whether to store results in amp_validated_url post.
	 *     @type bool        $cached_if_fresh  Whether to return previously-stored results if not stale.
	 *     @type bool        $omit_stylesheets Whether to omit stylesheet data in the validate response.
	 * }
	 */
	private static function get_validate_request_args() {
		$defaults = [
			self::VALIDATE_QUERY_VAR_NONCE               => null,
			self::VALIDATE_QUERY_VAR_CACHE               => false,
			self::VALIDATE_QUERY_VAR_CACHED_IF_FRESH     => false,
			self::VALIDATE_QUERY_VAR_OMIT_STYLESHEETS    => false,
			self::VALIDATE_QUERY_VAR_FORCE_STANDARD_MODE => false,
		];

		if ( ! isset( $_GET[ self::VALIDATE_QUERY_VAR ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			return $defaults;
		}

		$unsanitized_values = $_GET[ self::VALIDATE_QUERY_VAR ]; // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized

		if ( is_string( $unsanitized_values ) ) {
			$unsanitized_values = [
				self::VALIDATE_QUERY_VAR_NONCE => $unsanitized_values,
			];
		} elseif ( ! is_array( $unsanitized_values ) ) {
			return $defaults;
		}

		$args = $defaults;
		foreach ( $unsanitized_values as $key => $unsanitized_value ) {
			switch ( $key ) {
				case self::VALIDATE_QUERY_VAR_NONCE:
					$args[ $key ] = sanitize_key( $unsanitized_value );
					break;
				default:
					$args[ $key ] = rest_sanitize_boolean( $unsanitized_value );
			}
		}

		return $args;
	}

	/**
	 * Initialize a validate request.
	 *
	 * This function is called as early as possible, at the plugins_loaded action, to see if the current request is to
	 * validate the response. If the validate query arg is absent, then this does nothing. If the query arg is present,
	 * but the value is not a valid auth key, then wp_send_json() is invoked to short-circuit with a failure. Otherwise,
	 * the static $is_validate_request variable is set to true.
	 *
	 * @since 1.5
	 */
	public static function init_validate_request() {
		$should_validate_response = self::should_validate_response();

		if ( true === $should_validate_response ) {
			self::add_validation_error_sourcing();
			self::$is_validate_request = true;

			if ( '1' === (string) ini_get( 'display_errors' ) ) {
				// Suppress the display of fatal errors that may arise during validation so that they will not be counted
				// as actual validation errors.
				ini_set( 'display_errors', 0 ); // phpcs:ignore WordPress.PHP.IniSet.display_errors_Blacklisted
			}
		} else {
			self::$is_validate_request = false;

			// Short-circuit validation requests that are unauthorized.
			if ( $should_validate_response instanceof WP_Error ) {
				wp_send_json(
					[
						'code'    => $should_validate_response->get_error_code(),
						'message' => $should_validate_response->get_error_message(),
					],
					401
				);
			}
		}
	}

	/**
	 * Add hooks for doing determining sources for validation errors during preprocessing/sanitizing.
	 */
	public static function add_validation_error_sourcing() {
		add_action( 'wp', [ __CLASS__, 'wrap_widget_callbacks' ] );

		$int_min = defined( 'PHP_INT_MIN' ) ? PHP_INT_MIN : ~PHP_INT_MAX; // phpcs:ignore PHPCompatibility.Constants.NewConstants.php_int_minFound
		add_filter( 'register_block_type_args', [ __CLASS__, 'wrap_block_callbacks' ], $int_min );
		add_action( 'all', [ __CLASS__, 'wrap_hook_callbacks' ] );
		$wrapped_filters = [ 'the_content', 'the_excerpt' ];
		foreach ( $wrapped_filters as $wrapped_filter ) {
			add_filter( $wrapped_filter, [ __CLASS__, 'decorate_filter_source' ], PHP_INT_MAX );
		}

		add_filter( 'do_shortcode_tag', [ __CLASS__, 'decorate_shortcode_source' ], PHP_INT_MAX, 2 );
		add_filter( 'embed_oembed_html', [ __CLASS__, 'decorate_embed_source' ], PHP_INT_MAX, 3 );

		// The `WP_Block_Type_Registry` class was added in WordPress 5.0.0. Because of that it sometimes caused issues
		// on the AMP Validated URL screen when on WordPress 4.9.
		if ( class_exists( 'WP_Block_Type_Registry' ) ) {
			add_filter(
				'the_content',
				[
					__CLASS__,
					'add_block_source_comments',
				],
				8
			); // The do_blocks() function runs at priority 9.
		}

		add_filter( 'the_editor', [ __CLASS__, 'filter_the_editor_to_detect_sources' ] );
	}

	/**
	 * Filter `the_editor` to detect the theme/plugin responsible for calling it `wp_editor()`.
	 *
	 * @since 2.2
	 * @see wp_editor()
	 *
	 * @param string $output Editor's HTML markup.
	 * @return string Editor's HTML markup (unchanged).
	 */
	public static function filter_the_editor_to_detect_sources( $output ) {
		$file_reflection = Services::get( 'dev_tools.file_reflection' );

		// Find the first plugin/theme in the call stack.
		$backtrace = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_debug_backtrace -- Only way to find theme/plugin responsible for calling.
		foreach ( $backtrace as $call ) {
			if (
				! empty( $call['function'] )
				&&
				! empty( $call['file'] )
				&&
				'wp_editor' === $call['function']
			) {
				$source = $file_reflection->get_file_source( $call['file'] );
				if ( $source ) {
					self::$wp_editor_sources[] = $source;
				}
				break;
			}
		}

		return $output;
	}

	/**
	 * Handle save_post action to queue re-validation of the post on the frontend.
	 *
	 * This is intended to only apply to post edits made in the classic editor.
	 *
	 * @deprecated In 2.1 the classic editor block validation was removed.
	 * @codeCoverageIgnore
	 */
	public static function handle_save_post_prompting_validation() {
		_deprecated_function( __METHOD__, '2.1' );
	}

	/**
	 * Validate the posts pending frontend validation.
	 *
	 * @see AMP_Validation_Manager::handle_save_post_prompting_validation()
	 *
	 * @deprecated In 2.1 the classic editor block validation was removed.
	 * @codeCoverageIgnore
	 */
	public static function validate_queued_posts_on_frontend() {
		_deprecated_function( __METHOD__, '2.1' );
	}

	/**
	 * Map the amp_validate meta capability to the primitive manage_options capability.
	 *
	 * Using a meta capability allows a site to customize which users get access to perform validation.
	 *
	 * @param string[] $caps Array of the user's capabilities.
	 * @param string   $cap  Capability name.
	 * @return string[] Filtered primitive capabilities.
	 */
	public static function map_meta_cap( $caps, $cap ) {
		if ( self::VALIDATE_CAPABILITY === $cap ) {
			// Note that $caps most likely only contains a single item anyway, but only swapping out the one meta
			// capability with the primitive capability allows a site to add additional required capabilities.
			$position = array_search( $cap, $caps, true );
			if ( false !== $position ) {
				$caps[ $position ] = 'manage_options';
			}
		}
		return $caps;
	}

	/**
	 * Whether the user has the required capability to validate.
	 *
	 * Checks for permissions before validating.
	 *
	 * @param int|WP_User|null $user User to check for the capability. If null, the current user is used.
	 * @return boolean $has_cap Whether the current user has the capability.
	 */
	public static function has_cap( $user = null ) {
		if ( null === $user ) {
			$user = wp_get_current_user();
		}
		return user_can( $user, self::VALIDATE_CAPABILITY );
	}

	/**
	 * Add validation error.
	 *
	 * @param array $error Error info, especially code.
	 * @param array $data Additional data, including the node.
	 *
	 * @return bool Whether the validation error should result in sanitization.
	 */
	public static function add_validation_error( array $error, array $data = [] ) {
		$node    = null;
		$sources = null;

		if ( isset( $data['node'] ) && $data['node'] instanceof DOMNode ) {
			$node = $data['node'];
		}

		if ( self::is_validate_request() ) {
			if ( ! empty( $error['sources'] ) ) {
				$sources = $error['sources'];
			} elseif ( $node ) {
				$sources = self::locate_sources( $node );
			}
		}
		unset( $error['sources'] );

		if ( ! isset( $error['code'] ) ) {
			$error['code'] = 'unknown';
		}

		/**
		 * Filters the validation error array.
		 *
		 * This allows plugins to add amend additional properties which can help with
		 * more accurately identifying a validation error beyond the name of the parent
		 * node and the element's attributes. The $sources are also omitted because
		 * these are only available during an explicit validation request and so they
		 * are not suitable for plugins to vary sanitization by. If looking to force a
		 * validation error to be ignored, use the 'amp_validation_error_sanitized'
		 * filter instead of attempting to return an empty value with this filter (as
		 * that is not supported).
		 *
		 * @since 1.0
		 *
		 * @param array $error Validation error to be printed.
		 * @param array $context   {
		 *     Context data for validation error sanitization.
		 *
		 *     @type DOMNode $node Node for which the validation error is being reported. May be null.
		 * }
		 */
		$error = apply_filters( 'amp_validation_error', $error, compact( 'node' ) );

		$sanitization = AMP_Validation_Error_Taxonomy::get_validation_error_sanitization( $error );
		$sanitized    = (
			AMP_Validation_Error_Taxonomy::VALIDATION_ERROR_NEW_ACCEPTED_STATUS === $sanitization['status']
			||
			AMP_Validation_Error_Taxonomy::VALIDATION_ERROR_ACK_ACCEPTED_STATUS === $sanitization['status']
		);

		/*
		 * Ignore validation errors which are forcibly sanitized by filter. This includes errors accepted via
		 * AMP_Validation_Error_Taxonomy::accept_validation_errors(), such as the acceptable_errors in core themes.
		 * This was introduced in <https://github.com/ampproject/amp-wp/pull/1413> to prevent forcibly-sanitized
		 * validation errors from being reported, to avoid noise and wasted storage. It was inadvertently
		 * reverted in de7b04b but then restored as part of <https://github.com/ampproject/amp-wp/pull/1413>.
		 */
		if ( $sanitized && 'with_filter' === $sanitization['forced'] ) {
			return true;
		}

		// Add sources back into the $error for referencing later. @todo It may be cleaner to store sources separately to avoid having to re-remove later during storage.
		$error = array_merge( $error, compact( 'sources' ) );

		self::$validation_results[] = compact( 'error', 'sanitized' );
		return $sanitized;
	}

	/**
	 * Reset the stored removed nodes and attributes.
	 *
	 * After testing if the markup is valid,
	 * these static values will remain.
	 * So reset them in case another test is needed.
	 *
	 * @return void
	 */
	public static function reset_validation_results() {
		self::$validation_results              = [];
		self::$enqueued_style_sources          = [];
		self::$enqueued_script_sources         = [];
		self::$extra_script_sources            = [];
		self::$extra_style_sources             = [];
		self::$original_block_render_callbacks = [];
		self::$wp_editor_sources               = [];
	}

	/**
	 * Checks the AMP validity of the post content.
	 *
	 * If it's not valid AMP, it displays an error message above the 'Classic' editor.
	 *
	 * This is essentially a PHP implementation of ampBlockValidation.handleValidationErrorsStateChange() in JS.
	 *
	 * @deprecated In 2.1 the classic editor block validation was removed.
	 * @codeCoverageIgnore
	 * @return void
	 */
	public static function print_edit_form_validation_status() {
		_deprecated_function( __METHOD__, '2.1' );
	}

	/**
	 * Get source start comment.
	 *
	 * @param array $source   Source data.
	 * @param bool  $is_start Whether the comment is the start or end.
	 * @return string HTML Comment.
	 */
	public static function get_source_comment( array $source, $is_start = true ) {
		unset( $source['reflection'] );
		return sprintf(
			'<!--%samp-source-stack %s-->',
			$is_start ? '' : '/',
			str_replace( '--', '', wp_json_encode( $source ) )
		);
	}

	/**
	 * Parse source comment.
	 *
	 * @param DOMComment $comment Comment.
	 * @return array|null Parsed source or null if not a source comment.
	 */
	public static function parse_source_comment( DOMComment $comment ) {
		if ( ! preg_match( '#^\s*(?P<closing>/)?amp-source-stack\s+(?P<args>{.+})\s*$#s', $comment->nodeValue, $matches ) ) {
			return null;
		}

		$source  = json_decode( $matches['args'], true );
		$closing = ! empty( $matches['closing'] );

		return compact( 'source', 'closing' );
	}

	/**
	 * Recursively determine if a given dependency depends on another.
	 *
	 * @since 1.3
	 *
	 * @param WP_Dependencies $dependencies      Dependencies.
	 * @param string          $current_handle    Current handle.
	 * @param string          $dependency_handle Dependency handle.
	 * @return bool Whether the current handle is a dependency of the dependency handle.
	 */
	protected static function has_dependency( WP_Dependencies $dependencies, $current_handle, $dependency_handle ) {
		if ( $current_handle === $dependency_handle ) {
			return true;
		}
		if ( ! isset( $dependencies->registered[ $current_handle ] ) ) {
			return false;
		}
		foreach ( $dependencies->registered[ $current_handle ]->deps as $handle ) {
			if ( self::has_dependency( $dependencies, $handle, $dependency_handle ) ) {
				return true;
			}
		}
		return false;
	}

	/**
	 * Determine if a script element matches a given script handle.
	 *
	 * @param DOMElement $element       Element.
	 * @param string     $script_handle Script handle.
	 * @return bool
	 */
	protected static function is_matching_script( DOMElement $element, $script_handle ) {

		// Use the ID attribute which was added to printed scripts after WP ?.?.
		if ( $element->getAttribute( Attribute::ID ) === "{$script_handle}-js" ) {
			return true;
		}

		if ( ! isset( wp_scripts()->registered[ $script_handle ] ) ) {
			return false;
		}

		$script_dependency = wp_scripts()->registered[ $script_handle ];
		if ( empty( $script_dependency->src ) ) {
			return false;
		}

		// Script src attribute is haystack because includes protocol and may include query args (like ver).
		return false !== strpos(
			$element->getAttribute( 'src' ),
			preg_replace( '#^https?:(?=//)#', '', $script_dependency->src )
		);
	}

	/**
	 * Walk back tree to find the open sources.
	 *
	 * @todo This method and others for sourcing could be moved to a separate class.
	 *
	 * @param DOMNode $node Node to look for.
	 * @return array[][] {
	 *       The data of the removed sources (theme, plugin, or mu-plugin).
	 *
	 *       @type string $name The name of the source.
	 *       @type string $type The type of the source.
	 * }
	 */
	public static function locate_sources( DOMNode $node ) {
		$dom      = Document::fromNode( $node );
		$comments = $dom->xpath->query( 'preceding::comment()[ starts-with( ., "amp-source-stack" ) or starts-with( ., "/amp-source-stack" ) ]', $node );
		$sources  = [];
		$matches  = [];

		foreach ( $comments as $comment ) {
			$parsed_comment = self::parse_source_comment( $comment );
			if ( ! $parsed_comment ) {
				continue;
			}
			if ( $parsed_comment['closing'] ) {
				array_pop( $sources );
			} else {
				$sources[] = $parsed_comment['source'];
			}
		}

		$is_enqueued_link = (
			$node instanceof DOMElement
			&&
			'link' === $node->nodeName
			&&
			preg_match( '/(?P<handle>.+)-css$/', (string) $node->getAttribute( Attribute::ID ), $matches )
			&&
			wp_styles()->query( $matches['handle'] )
		);
		if ( $is_enqueued_link ) {
			// Directly enqueued stylesheet.
			if ( isset( self::$enqueued_style_sources[ $matches['handle'] ] ) ) {
				$sources = array_merge(
					self::$enqueued_style_sources[ $matches['handle'] ],
					$sources
				);
			}

			// Stylesheet added as a dependency.
			foreach ( wp_styles()->done as $style_handle ) {
				if ( $matches['handle'] !== $style_handle ) {
					continue;
				}

				foreach (
					self::find_done_dependent_handles( wp_styles(), $style_handle, array_keys( self::$enqueued_style_sources ) )
					as
					$enqueued_style_sources_handle
				) {
					$sources = array_merge(
						array_map(
							static function ( $enqueued_style_source ) use ( $style_handle ) {
								$enqueued_style_source['dependency_handle'] = $style_handle;
								return $enqueued_style_source;
							},
							self::$enqueued_style_sources[ $enqueued_style_sources_handle ]
						),
						$sources
					);
				}
			}
		}

		$is_inline_style = (
			$node instanceof DOMElement
			&&
			'style' === $node->nodeName
			&&
			$node->firstChild instanceof DOMText
			&&
			$node->hasAttribute( Attribute::ID )
			&&
			preg_match( '/^(?P<handle>.+)-inline-css$/', $node->getAttribute( Attribute::ID ), $matches )
			&&
			wp_styles()->query( $matches['handle'] )
			&&
			isset( self::$extra_style_sources[ $matches['handle'] ] )
		);
		if ( $is_inline_style ) {
			$text = $node->textContent;
			foreach ( self::$extra_style_sources[ $matches['handle'] ] as $css => $extra_sources ) {
				if ( false !== strpos( $text, $css ) ) {
					$sources = array_merge(
						$sources,
						$extra_sources
					);
				}
			}
		}

		if ( $node instanceof DOMElement && 'script' === $node->nodeName ) {
			$enqueued_script_handles = array_intersect( wp_scripts()->done, array_keys( self::$enqueued_script_sources ) );

			if ( $node->hasAttribute( 'src' ) ) {

				// External scripts, directly enqueued.
				foreach ( $enqueued_script_handles as $enqueued_script_handle ) {
					if ( ! self::is_matching_script( $node, $enqueued_script_handle ) ) {
						continue;
					}
					$sources = array_merge(
						self::$enqueued_script_sources[ $enqueued_script_handle ],
						$sources
					);
					break;
				}

				// External scripts, added as a dependency.
				foreach ( wp_scripts()->done as $script_handle ) {
					if ( ! self::is_matching_script( $node, $script_handle ) ) {
						continue;
					}

					foreach (
						self::find_done_dependent_handles( wp_scripts(), $script_handle, array_keys( self::$enqueued_script_sources ) )
						as
						$enqueued_script_sources_handle
					) {
						$sources = array_merge(
							array_map(
								static function ( $enqueued_script_source ) use ( $script_handle ) {
									$enqueued_script_source['dependency_handle'] = $script_handle;
									return $enqueued_script_source;
								},
								self::$enqueued_script_sources[ $enqueued_script_sources_handle ]
							),
							$sources
						);
					}
				}
			} elseif ( $node->firstChild instanceof DOMText ) {
				$text = $node->textContent;

				$script_handle = null;
				$script_type   = null;
				if (
					$node->hasAttribute( Attribute::ID )
					&&
					preg_match( '/^(.+)-js-(extra|after|before|translations)/', $node->getAttribute( Attribute::ID ), $matches )
				) {
					$script_handle = $matches[1];
					$script_type   = $matches[2];
				}

				if ( 'translations' === $script_type ) {

					// Obtain sources for script translations.
					if ( isset( self::$enqueued_script_sources[ $script_handle ] ) ) {
						$sources = array_merge( $sources, self::$enqueued_script_sources[ $script_handle ] );
					}

					foreach (
						self::find_done_dependent_handles( wp_scripts(), $script_handle, array_keys( self::$enqueued_script_sources ) )
						as
						$enqueued_script_sources_handle
					) {
						$sources = array_merge(
							array_map(
								static function ( $enqueued_script_source ) use ( $script_handle ) {
									$enqueued_script_source['dependency_handle'] = $script_handle;
									return $enqueued_script_source;
								},
								self::$enqueued_script_sources[ $enqueued_script_sources_handle ]
							),
							$sources
						);
					}
				} else {
					// Identify the inline script sources.
					foreach ( self::$extra_script_sources as $extra_data => $extra_sources ) {
						if ( false === strpos( $text, $extra_data ) ) {
							continue;
						}

						$has_non_core = false;
						foreach ( $extra_sources as $extra_source ) {
							if ( 'core' !== $extra_source['type'] ) {
								$has_non_core = true;
								break;
							}
						}

						if ( $has_non_core ) {
							$sources = array_merge(
								$sources,
								$extra_sources
							);
						} else {
							if ( isset( self::$enqueued_script_sources[ $script_handle ] ) ) {
								$sources = array_merge( $sources, self::$enqueued_script_sources[ $script_handle ] );
							}

							foreach (
								self::find_done_dependent_handles( wp_scripts(), $script_handle, array_keys( self::$enqueued_script_sources ) )
								as
								$enqueued_script_sources_handle
							) {
								$sources = array_merge(
									array_map(
										static function ( $enqueued_script_source ) use ( $script_handle ) {
											$enqueued_script_source['dependency_handle'] = $script_handle;
											return $enqueued_script_source;
										},
										self::$enqueued_script_sources[ $enqueued_script_sources_handle ]
									),
									$sources
								);
							}
						}
					}
				}

				// Add indirect sources for inline scripts added by wp_editor().
				foreach ( $sources as $source ) {
					if ( isset( $source['function'] ) && '_WP_Editors::editor_js' === $source['function'] ) {
						$sources = array_merge( $sources, self::$wp_editor_sources );
					}
				}
			}
		}

		$sources = array_values( array_unique( $sources, SORT_REGULAR ) );

		return $sources;
	}

	/**
	 * Find dependent handles that have been printed.
	 *
	 * @param WP_Dependencies $dependencies Dependencies.
	 * @param string          $handle Handle.
	 * @param string[]        $enqueued_handles Enqueued handles.
	 * @return string[] Found handles.
	 */
	private static function find_done_dependent_handles( WP_Dependencies $dependencies, $handle, $enqueued_handles ) {
		$dependent_handles = [];
		foreach ( $enqueued_handles as $enqueued_handle ) {
			if (
				$enqueued_handle !== $handle
				&&
				$dependencies->query( $enqueued_handle, 'done' )
				&&
				self::has_dependency( $dependencies, $enqueued_handle, $handle )
			) {
				$dependent_handles[] = $enqueued_handle;
			}
		}
		return $dependent_handles;
	}

	/**
	 * Add block source comments.
	 *
	 * @param string $content Content prior to blocks being processed.
	 * @return string Content with source comments added.
	 */
	public static function add_block_source_comments( $content ) {
		self::$block_content_index = 0;

		$start_block_pattern = implode(
			'',
			[
				'#<!--\s+',
				'(?P<closing>/)?',
				'wp:(?P<name>\S+)',
				'(?:\s+(?P<attributes>\{.*?\}))?',
				'\s+(?P<self_closing>\/)?',
				'-->#s',
			]
		);

		return preg_replace_callback(
			$start_block_pattern,
			[ __CLASS__, 'handle_block_source_comment_replacement' ],
			$content
		);
	}

	/**
	 * Handle block source comment replacement.
	 *
	 * @see \AMP_Validation_Manager::add_block_source_comments()
	 *
	 * @param array $matches Matches.
	 *
	 * @return string Replaced.
	 */
	protected static function handle_block_source_comment_replacement( $matches ) {
		$replaced = $matches[0];

		// Obtain source information for block.
		$source = [
			'block_name' => $matches['name'],
			'post_id'    => get_the_ID(),
		];

		if ( empty( $matches['closing'] ) ) {
			$source['block_content_index'] = self::$block_content_index;
			++self::$block_content_index;
		}

		// Make implicit core namespace explicit.
		$is_implicit_core_namespace = ( false === strpos( $source['block_name'], '/' ) );
		$source['block_name']       = $is_implicit_core_namespace ? 'core/' . $source['block_name'] : $source['block_name'];

		if ( ! empty( $matches['attributes'] ) ) {
			$source['block_attrs'] = json_decode( $matches['attributes'] );
		}
		$block_type = WP_Block_Type_Registry::get_instance()->get_registered( $source['block_name'] );
		if ( $block_type && $block_type->is_dynamic() ) {
			$render_callback = $block_type->render_callback;

			// Access the underlying callback which was wrapped by ::wrap_block_callbacks() below.
			while ( $render_callback instanceof AMP_Validation_Callback_Wrapper ) {
				$render_callback = $render_callback->get_callback_function();
			}

			$callback_reflection = Services::get( 'dev_tools.callback_reflection' );
			$callback_source     = $callback_reflection->get_source( $render_callback );

			// Handle special case to undo the wrapping that Gutenberg does in gutenberg_inject_default_block_context().
			if (
				$callback_source
				&&
				'plugin' === $callback_source['type']
				&&
				'gutenberg' === $callback_source['name']
				&&
				array_key_exists( $source['block_name'], self::$original_block_render_callbacks )
			) {
				$callback_source = $callback_reflection->get_source( self::$original_block_render_callbacks[ $source['block_name'] ] );
			}

			if ( $callback_source ) {
				$source = array_merge(
					$source,
					$callback_source
				);
			}
		}

		if ( ! empty( $matches['closing'] ) ) {
			$replaced .= self::get_source_comment( $source, false );
		} else {
			$replaced = self::get_source_comment( $source, true ) . $replaced;
			if ( ! empty( $matches['self_closing'] ) ) {
				unset( $source['block_content_index'] );
				$replaced .= self::get_source_comment( $source, false );
			}
		}
		return $replaced;
	}

	/**
	 * Wrap callbacks for registered blocks to keep track of queued assets and the source for anything printed for validation.
	 *
	 * @param array $args Array of arguments for registering a block type.
	 *
	 * @return array Array of arguments for registering a block type.
	 */
	public static function wrap_block_callbacks( $args ) {

		if ( ! isset( $args['render_callback'] ) || ! is_callable( $args['render_callback'] ) ) {
			return $args;
		}

		$callback_reflection = Services::get( 'dev_tools.callback_reflection' );
		$source              = $callback_reflection->get_source( $args['render_callback'] );

		if ( ! $source ) {
			return $args;
		}

		unset( $source['reflection'] ); // Omit from stored source.
		$original_function = $args['render_callback'];

		if ( isset( $args['name'] ) ) {
			self::$original_block_render_callbacks[ $args['name'] ] = $original_function;
		}

		$args['render_callback'] = new AMP_Validation_Callback_Wrapper(
			[
				'function'      => $original_function,
				'source'        => $source,
				'accepted_args' => 3, // The three args passed to render_callback are $attributes, $content, and $block.
			]
		);

		return $args;
	}

	/**
	 * Wrap callbacks for registered widgets to keep track of queued assets and the source for anything printed for validation.
	 *
	 * @return void
	 * @global array $wp_registered_widgets
	 */
	public static function wrap_widget_callbacks() {
		global $wp_registered_widgets;
		$callback_reflection = Services::get( 'dev_tools.callback_reflection' );
		foreach ( $wp_registered_widgets as $widget_id => &$registered_widget ) {
			$source = $callback_reflection->get_source( $registered_widget['callback'] );
			if ( ! $source ) {
				continue;
			}
			$source['widget_id'] = $widget_id;
			unset( $source['reflection'] ); // Omit from stored source.

			$function      = $registered_widget['callback'];
			$accepted_args = 2; // For the $instance and $args arguments.
			$callback      = compact( 'function', 'accepted_args', 'source' );

			$registered_widget['callback'] = new AMP_Validation_Callback_Wrapper( $callback );
		}
	}

	/**
	 * Wrap filter/action callback functions for a given hook.
	 *
	 * Wrapped callback functions are reset to their original functions after invocation.
	 * This runs at the 'all' action. The shutdown hook is excluded.
	 *
	 * @global WP_Hook[] $wp_filter
	 * @param string $hook Hook name for action or filter.
	 * @return void
	 */
	public static function wrap_hook_callbacks( $hook ) {
		global $wp_filter;

		if ( ! isset( $wp_filter[ $hook ] ) || 'shutdown' === $hook ) {
			return;
		}

		$callback_reflection = Services::get( 'dev_tools.callback_reflection' );

		self::$current_hook_source_stack[ $hook ] = [];
		foreach ( $wp_filter[ $hook ]->callbacks as $priority => &$callbacks ) {
			foreach ( $callbacks as &$callback ) {
				$source = $callback_reflection->get_source( $callback['function'] );
				if ( ! $source ) {
					continue;
				}

				// Skip considering ourselves.
				if ( 'AMP_Validation_Manager::add_block_source_comments' === $source['function'] ) {
					continue;
				}

				$indirect_sources = [];
				if ( '_WP_Editors::enqueue_scripts' === $source['function'] ) {
					$indirect_sources = self::$wp_editor_sources;
				}

				/**
				 * Reflection.
				 *
				 * @var ReflectionFunction|ReflectionMethod $reflection
				 */
				$reflection = $source['reflection'];
				unset( $source['reflection'] ); // Omit from stored source.

				// Add hook to stack for decorate_filter_source to read from.
				self::$current_hook_source_stack[ $hook ][] = $source;

				/*
				 * Wrapped callbacks cause PHP warnings when the wrapped function has arguments passed by reference.
				 * We have a special case to support functions that have the first argument passed by reference, namely
				 * wp_default_scripts() and wp_default_styles(). But other configurations are bypassed.
				 */
				$passed_by_ref = self::has_parameters_passed_by_reference( $reflection );
				if ( $passed_by_ref > 1 ) {
					continue;
				}

				$source['hook']     = $hook;
				$source['priority'] = $priority;
				$original_function  = $callback['function'];

				$wrapped_callback = new AMP_Validation_Callback_Wrapper(
					array_merge(
						$callback,
						compact( 'priority', 'source', 'indirect_sources' )
					),
					static function () use ( &$callback, $original_function ) {
						// Restore the original callback function in case other plugins are introspecting filters.
						// This logic runs immediately before the original function is actually invoked.
						$callback['function'] = $original_function;
					}
				);

				if ( 1 === $passed_by_ref ) {
					$callback['function'] = [ $wrapped_callback, 'invoke_with_first_ref_arg' ];
				} else {
					$callback['function'] = $wrapped_callback;
				}
			}
		}
	}

	/**
	 * Determine whether the given reflection method/function has params passed by reference.
	 *
	 * @since 0.7
	 * @param ReflectionFunction|ReflectionMethod $reflection Reflection.
	 * @return int Whether there are parameters passed by reference, where 0 means none were passed, 1 means the first was passed, and 2 means some other configuration.
	 */
	protected static function has_parameters_passed_by_reference( $reflection ) {
		$status = 0;
		foreach ( $reflection->getParameters() as $i => $parameter ) {
			if ( $parameter->isPassedByReference() ) {
				if ( 0 === $i ) {
					$status = 1;
				} else {
					$status = 2;
					break;
				}
			}
		}
		return $status;
	}

	/**
	 * Filters the output created by a shortcode callback.
	 *
	 * @since 0.7
	 *
	 * @param string $output Shortcode output.
	 * @param string $tag    Shortcode name.
	 * @return string Output.
	 * @global array $shortcode_tags
	 */
	public static function decorate_shortcode_source( $output, $tag ) {
		global $shortcode_tags;
		if ( ! isset( $shortcode_tags[ $tag ] ) ) {
			return $output;
		}

		$callback_reflection = Services::get( 'dev_tools.callback_reflection' );

		$source = $callback_reflection->get_source( $shortcode_tags[ $tag ] );
		if ( empty( $source ) ) {
			return $output;
		}
		$source['shortcode'] = $tag;

		$output = implode(
			'',
			[
				self::get_source_comment( $source, true ),
				$output,
				self::get_source_comment( $source, false ),
			]
		);
		return $output;
	}

	/**
	 * Filters the output created by embeds.
	 *
	 * @since 1.0
	 *
	 * @param string $output Embed output.
	 * @param string $url    URL.
	 * @param array  $attr   Attributes.
	 * @return string Output.
	 */
	public static function decorate_embed_source( $output, $url, $attr ) {
		$source = [
			'embed' => $url,
			'attr'  => $attr,
		];
		return implode(
			'',
			[
				self::get_source_comment( $source, true ),
				trim( $output ),
				self::get_source_comment( $source, false ),
			]
		);
	}

	/**
	 * Wraps output of a filter to add source stack comments.
	 *
	 * @todo Duplicate with AMP_Validation_Manager::wrap_buffer_with_source_comments()?
	 * @param string $value Value.
	 * @return string Value wrapped in source comments.
	 */
	public static function decorate_filter_source( $value ) {

		// Abort if the output is not a string and it doesn't contain any HTML tags.
		if ( ! is_string( $value ) || ! preg_match( '/<.+?>/s', $value ) ) {
			return $value;
		}

		$post   = get_post();
		$source = [
			'hook'   => current_filter(),
			'filter' => true,
		];
		if ( $post ) {
			$source['post_id']   = $post->ID;
			$source['post_type'] = $post->post_type;
		}
		if ( isset( self::$current_hook_source_stack[ current_filter() ] ) ) {
			$sources = self::$current_hook_source_stack[ current_filter() ];
			array_pop( $sources ); // Remove self.
			$source['sources'] = $sources;
		}
		return implode(
			'',
			[
				self::get_source_comment( $source, true ),
				$value,
				self::get_source_comment( $source, false ),
			]
		);
	}

	/**
	 * Gets the plugin or theme of the callback, if one exists.
	 *
	 * @deprecated 2.0.2 Use \AmpProject\AmpWP\DevTools\CallbackReflection::get_source().
	 * @codeCoverageIgnore
	 *
	 * @param string|array|callable $callback The callback for which to get the plugin.
	 * @return array|null {
	 *     The source data.
	 *
	 *     @type string $type     Source type (core, plugin, mu-plugin, or theme).
	 *     @type string $name     Source name.
	 *     @type string $file     Relative file path based on the type.
	 *     @type string $function Normalized function name.
	 *     @type ReflectionMethod|ReflectionFunction $reflection Reflection.
	 * }
	 */
	public static function get_source( $callback ) {
		_deprecated_function(
			__METHOD__,
			'2.0.2',
			'\AmpProject\AmpWP\DevTools\CallbackReflection::get_source'
		);
		return Services::get( 'dev_tools.callback_reflection' )
			->get_source( $callback );
	}

	/**
	 * Check whether or not output buffering is currently possible.
	 *
	 * This is to guard against a fatal error: "ob_start(): Cannot use output buffering in output buffering display handlers".
	 *
	 * @return bool Whether output buffering is allowed.
	 */
	public static function can_output_buffer() {

		// Output buffering for validation can only be done while overall output buffering is being done for the response.
		if ( ! AMP_Theme_Support::is_output_buffering() ) {
			return false;
		}

		// Abort when in shutdown since output has finished, when we're likely in the overall output buffering display handler.
		if ( did_action( 'shutdown' ) ) {
			return false;
		}

		// Check if any functions in call stack are output buffering display handlers.
		$called_functions = [];
		$backtrace        = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_debug_backtrace -- Only way to find out if we are in a buffering display handler.
		foreach ( $backtrace as $call_stack ) {
			if ( '{closure}' === $call_stack['function'] ) {
				$called_functions[] = 'Closure::__invoke';
			} elseif ( isset( $call_stack['class'] ) ) {
				$called_functions[] = sprintf( '%s::%s', $call_stack['class'], $call_stack['function'] );
			} else {
				$called_functions[] = $call_stack['function'];
			}
		}
		return 0 === count( array_intersect( ob_list_handlers(), $called_functions ) );
	}

	/**
	 * Wraps a callback in comments if it outputs markup.
	 *
	 * If the sanitizer removes markup,
	 * this indicates which plugin it was from.
	 * The call_user_func_array() logic is mainly copied from WP_Hook:apply_filters().
	 *
	 * @deprecated No longer used as of 2.2.1.
	 * @codeCoverageIgnore
	 *
	 * @param array $callback {
	 *     The callback data.
	 *
	 *     @type callable $function
	 *     @type int      $accepted_args
	 *     @type array    $source
	 * }
	 * @return AMP_Validation_Callback_Wrapper $wrapped_callback The callback, wrapped in comments.
	 */
	public static function wrapped_callback( $callback ) {
		return new AMP_Validation_Callback_Wrapper( $callback );
	}

	/**
	 * Wrap output buffer with source comments.
	 *
	 * A key reason for why this is a method and not a closure is so that
	 * the can_output_buffer method will be able to identify it by name.
	 *
	 * @since 0.7
	 * @todo Is duplicate of \AMP_Validation_Manager::decorate_filter_source()?
	 *
	 * @param string $output Output buffer.
	 * @return string Output buffer conditionally wrapped with source comments.
	 */
	public static function wrap_buffer_with_source_comments( $output ) {
		if ( empty( self::$hook_source_stack ) ) {
			return $output;
		}

		$source = self::$hook_source_stack[ count( self::$hook_source_stack ) - 1 ];

		// Wrap output that contains HTML tags (as opposed to actions that trigger in HTML attributes).
		if ( ! empty( $output ) && preg_match( '/<.+?>/s', $output ) ) {
			$output = implode(
				'',
				[
					self::get_source_comment( $source, true ),
					$output,
					self::get_source_comment( $source, false ),
				]
			);
		}
		return $output;
	}

	/**
	 * Get nonce for performing amp_validate request.
	 *
	 * The returned nonce is irrespective of the authenticated user.
	 *
	 * @return string Nonce.
	 */
	public static function get_amp_validate_nonce() {
		return wp_hash( self::VALIDATE_QUERY_VAR . wp_nonce_tick(), 'nonce' );
	}

	/**
	 * Whether the request is to validate URL for validation errors.
	 *
	 * All AMP responses get validated, but when the amp_validate query parameter is present, then the source information
	 * for each validation error is captured and the validation results are returned as JSON instead of the AMP HTML page.
	 *
	 * @return bool|WP_Error Whether to validate. False is returned if it is not a validate request. WP_Error returned
	 *                       if unauthenticated, unauthorized, and/or invalid nonce supplied. True returned if
	 *                       validate response should be served.
	 */
	public static function should_validate_response() {
		$args = self::get_validate_request_args();

		if ( null === $args[ self::VALIDATE_QUERY_VAR_NONCE ] ) {
			return false;
		}

		if ( ! hash_equals( self::get_amp_validate_nonce(), $args[ self::VALIDATE_QUERY_VAR_NONCE ] ) ) {
			return new WP_Error(
				'http_request_failed',
				__( 'Nonce authentication failed.', 'amp' )
			);
		}

		return true;
	}

	/**
	 * Get response data for a validate request.
	 *
	 * @see AMP_Content_Sanitizer::sanitize_document()
	 *
	 * @param array $sanitization_results {
	 *     Results of sanitizing a document, as returned by AMP_Content_Sanitizer::sanitize_document().
	 *
	 *     @type array                $scripts     Scripts.
	 *     @type array                $stylesheets Stylesheets.
	 *     @type AMP_Base_Sanitizer[] $sanitizers  Sanitizers.
	 * }
	 * @return array Validate response data.
	 */
	public static function get_validate_response_data( $sanitization_results ) {
		$data = [
			'results'        => self::$validation_results,
			'queried_object' => null,
			'url'            => amp_get_current_url(),
		];

		$queried_object = get_queried_object();
		if ( $queried_object ) {
			$data['queried_object'] = [];
			$queried_object_id      = get_queried_object_id();
			if ( $queried_object_id ) {
				$data['queried_object']['id'] = $queried_object_id;
			}
			if ( $queried_object instanceof WP_Post ) {
				$data['queried_object']['type'] = 'post';
			} elseif ( $queried_object instanceof WP_Term ) {
				$data['queried_object']['type'] = 'term';
			} elseif ( $queried_object instanceof WP_User ) {
				$data['queried_object']['type'] = 'user';
			} elseif ( $queried_object instanceof WP_Post_Type ) {
				$data['queried_object']['type'] = 'post_type';
			}
		}

		/**
		 * Sanitizers
		 *
		 * @var AMP_Base_Sanitizer[] $sanitizers
		 */
		$sanitizers = $sanitization_results['sanitizers'];
		foreach ( $sanitizers as $class_name => $sanitizer ) {
			$sanitizer_data = $sanitizer->get_validate_response_data();

			$conflicting_keys = array_intersect( array_keys( $sanitizer_data ), array_keys( $data ) );
			if ( ! empty( $conflicting_keys ) ) {
				_doing_it_wrong(
					esc_html( "$class_name::get_validate_response_data" ),
					esc_html( 'Method is returning array with conflicting keys: ' . implode( ', ', $conflicting_keys ) ),
					'1.5'
				);
			} else {
				$data = array_merge( $data, $sanitizer_data );
			}
		}

		return $data;
	}

	/**
	 * Remove source stack comments which appear inside of script and style tags.
	 *
	 * HTML comments that appear inside of script and style elements get parsed as text content. AMP does not allow
	 * such HTML comments to appear inside of CDATA, resulting in validation errors to be emitted when validating a
	 * page that happens to have source stack comments output when generating JSON data (e.g. All in One SEO).
	 * Additionally, when source stack comments are output inside of style elements the result can either be CSS
	 * parse errors or incorrect stylesheet sizes being reported due to the presence of the source stack comments.
	 * So to prevent these issues from occurring, the source stack comments need to be removed from the document prior
	 * to sanitizing.
	 *
	 * @since 1.5
	 *
	 * @param Document $dom Document.
	 */
	public static function remove_illegal_source_stack_comments( Document $dom ) {
		/**
		 * Script element.
		 *
		 * @var DOMText $text
		 */
		foreach ( $dom->xpath->query( '//text()[ contains( ., "<!--amp-source-stack" ) ][ parent::script or parent::style ]' ) as $text ) {
			$text->nodeValue = preg_replace( '#<!--/?amp-source-stack.*?-->#s', '', $text->nodeValue );
		}
	}

	/**
	 * Send validate response.
	 *
	 * @since 2.2
	 * @see AMP_Theme_Support::prepare_response()
	 *
	 * @param array      $sanitization_results Sanitization results.
	 * @param int        $status_code          Status code.
	 * @param array|null $last_error           Last error.
	 * @return string JSON.
	 */
	public static function send_validate_response( $sanitization_results, $status_code, $last_error ) {
		status_header( 200 );
		if ( ! headers_sent() ) {
			header( 'Content-Type: application/json; charset=utf-8' );
		}
		$data = [
			'http_status_code' => $status_code,
			'php_fatal_error'  => false,
		];
		if ( $last_error && in_array( $last_error['type'], [ E_ERROR, E_RECOVERABLE_ERROR, E_CORE_ERROR, E_COMPILE_ERROR, E_USER_ERROR, E_PARSE ], true ) ) {
			$data['php_fatal_error'] = $last_error;
		}
		$data = array_merge( $data, self::get_validate_response_data( $sanitization_results ) );

		$args = self::get_validate_request_args();

		$data['revalidated'] = true;

		if ( $args[ self::VALIDATE_QUERY_VAR_CACHE ] ) {
			$validation_errors = wp_list_pluck( $data['results'], 'error' );

			$validated_url_post_id = AMP_Validated_URL_Post_Type::store_validation_errors(
				$validation_errors,
				amp_get_current_url(),
				$data
			);
			if ( is_wp_error( $validated_url_post_id ) ) {
				status_header( 500 );
				return wp_json_encode(
					[
						'code'    => $validated_url_post_id->get_error_code(),
						'message' => $validated_url_post_id->get_error_message(),
					]
				);
			} else {
				status_header( 201 );
				$data['validated_url_post'] = [
					'id'        => $validated_url_post_id,
					'edit_link' => get_edit_post_link( $validated_url_post_id, 'raw' ),
				];
			}
		}

		if ( $args[ self::VALIDATE_QUERY_VAR_OMIT_STYLESHEETS ] ) {
			unset( $data['stylesheets'] );
		}

		$data['url'] = remove_query_arg( self::VALIDATE_QUERY_VAR, $data['url'] );

		return wp_json_encode( $data, JSON_UNESCAPED_SLASHES );
	}

	/**
	 * Send cached validate response if it is requested and available.
	 *
	 * When a validate request is made with the `amp_validate[cached_if_fresh]=true` query parameter, before a page
	 * begins rendering a check is made for whether there is already an `amp_validated_url` post for the current URL.
	 * If there is, and the post is not stale, then the previous results are returned without re-rendering page and
	 * obtaining the validation data.
	 */
	public static function maybe_send_cached_validate_response() {
		if ( ! self::is_validate_request() ) {
			return;
		}
		$args = self::get_validate_request_args();

		if ( ! $args[ self::VALIDATE_QUERY_VAR_CACHED_IF_FRESH ] ) {
			return;
		}

		$post = AMP_Validated_URL_Post_Type::get_invalid_url_post( amp_get_current_url() );
		if ( ! ( $post instanceof WP_Post ) ) {
			return;
		}

		$staleness = AMP_Validated_URL_Post_Type::get_post_staleness( $post );
		if ( count( $staleness ) > 0 ) {
			return;
		}

		$response = [
			'http_status_code'   => 200, // Note: This is not currently cached in postmeta.
			'php_fatal_error'    => false,
			'results'            => [],
			'queried_object'     => null,
			'url'                => null,
			'revalidated'        => false, // Since cached was used.
			'validated_url_post' => [
				'id'        => $post->ID,
				'edit_link' => get_edit_post_link( $post->ID, 'raw' ),
			],
		];

		if ( ! $args[ self::VALIDATE_QUERY_VAR_OMIT_STYLESHEETS ] ) {
			$stylesheets = get_post_meta( $post->ID, AMP_Validated_URL_Post_Type::STYLESHEETS_POST_META_KEY, true );
			if ( $stylesheets ) {
				$response['stylesheets'] = json_decode( $stylesheets, true );
			}
		}

		$stored_validation_errors = json_decode( $post->post_content, true );
		if ( is_array( $stored_validation_errors ) ) {
			$response['results'] = array_map(
				static function ( $stored_validation_error ) {
					$error     = $stored_validation_error['data'];
					$sanitized = AMP_Validation_Error_Taxonomy::is_validation_error_sanitized( $error );
					return compact( 'error', 'sanitized' );
				},
				$stored_validation_errors
			);
		}

		$queried_object = get_post_meta( $post->ID, AMP_Validated_URL_Post_Type::QUERIED_OBJECT_POST_META_KEY, true );
		if ( $queried_object ) {
			$response['queried_object'] = $queried_object;
		}

		$php_fatal_error = get_post_meta( $post->ID, AMP_Validated_URL_Post_Type::PHP_FATAL_ERROR_POST_META_KEY, true );
		if ( $php_fatal_error ) {
			$response['php_fatal_error'] = $php_fatal_error;
		}

		$response['url'] = AMP_Validated_URL_Post_Type::get_url_from_post( $post );

		wp_send_json( $response, 200, JSON_UNESCAPED_SLASHES );
	}

	/**
	 * Finalize validation.
	 *
	 * @see AMP_Validation_Manager::add_admin_bar_menu_items()
	 *
	 * @param Document $dom Document.
	 * @return bool Whether the document should be displayed to the user.
	 */
	public static function finalize_validation( Document $dom ) {
		$total_count      = 0;
		$kept_count       = 0;
		$unreviewed_count = 0;
		foreach ( self::$validation_results as $validation_result ) {
			$sanitization = AMP_Validation_Error_Taxonomy::get_validation_error_sanitization( $validation_result['error'] );
			if ( ! ( (int) $sanitization['status'] & AMP_Validation_Error_Taxonomy::ACCEPTED_VALIDATION_ERROR_BIT_MASK ) ) {
				++$kept_count;
			}
			if ( ! ( (int) $sanitization['status'] & AMP_Validation_Error_Taxonomy::ACKNOWLEDGED_VALIDATION_ERROR_BIT_MASK ) ) {
				++$unreviewed_count;
			}
			++$total_count;
		}

		/*
		 * Override AMP status in admin bar set in \AMP_Validation_Manager::add_admin_bar_menu_items()
		 * when there are validation errors which have not been explicitly accepted.
		 */
		if ( is_admin_bar_showing() && self::$amp_admin_bar_item_added && $total_count > 0 ) {
			self::update_admin_bar_item( $dom, $total_count, $kept_count, $unreviewed_count );
		}

		// If no invalid markup is kept, then the page should definitely be displayed to the user.
		if ( 0 === $kept_count ) {
			return true;
		}

		// When overrides are present, go ahead and display to the user.
		if ( ! empty( self::$validation_error_status_overrides ) ) {
			return true;
		}

		$sandboxing_level = amp_get_sandboxing_level();

		/*
		 * In AMP-first, documents with invalid AMP markup can still be served. The amp attribute will be omitted in
		 * order to prevent GSC from complaining about a validation error already surfaced inside of WordPress.
		 * This is intended to not serve dirty AMP, but rather a non-AMP document (intentionally not valid AMP) that
		 * contains the AMP runtime and AMP components.
		 *
		 * Otherwise, if in Paired AMP then redirect to the non-AMP version if the current user isn't an user who
		 * can manage validation error statuses (access developer tools) and change the AMP options for the template
		 * mode. Such users should be able to see kept invalid markup on the AMP page even though it is invalid.
		 *
		 * Also, if sandboxing is not set to strict mode, then the page should be displayed to the user.
		 */
		if ( amp_is_canonical() || ( 1 === $sandboxing_level || 2 === $sandboxing_level ) ) {
			return true;
		}

		// Otherwise, since it is in a paired mode, only allow showing the dirty AMP page if the user is authorized.
		// If not, normally the result is redirection to the non-AMP version.
		return self::has_cap() || is_customize_preview();
	}

	/**
	 * Override AMP status in admin bar set in \AMP_Validation_Manager::add_admin_bar_menu_items()
	 * when there are validation errors which have not been explicitly accepted.
	 *
	 * @param Document $dom              Document.
	 * @param int      $total_count      Total count of validation errors (more than 0).
	 * @param int      $kept_count       Count of validation errors with invalid markup kept.
	 * @param int      $unreviewed_count Count of unreviewed validation errors.
	 */
	private static function update_admin_bar_item( Document $dom, $total_count, $kept_count, $unreviewed_count ) {
		$parent_menu_item = $dom->getElementById( 'wp-admin-bar-amp' );
		if ( ! $parent_menu_item instanceof DOMElement ) {
			return;
		}

		$parent_menu_link = $dom->xpath->query( './a[ @href ]', $parent_menu_item )->item( 0 );
		$admin_bar_icon   = $dom->xpath->query( './span[ @id = "amp-admin-bar-item-status-icon" ]', $parent_menu_link )->item( 0 );
		$validate_link    = $dom->xpath->query( './/li[ @id = "wp-admin-bar-amp-validity" ]/a[ @href ]', $parent_menu_item )->item( 0 );
		if ( ! $parent_menu_link instanceof DOMElement || ! $admin_bar_icon instanceof DOMElement || ! $validate_link instanceof DOMElement ) {
			return;
		}

		/*
		 * When in Paired AMP, non-administrators accessing the AMP version will get redirected to the non-AMP version
		 * if there are is kept invalid markup. In Paired AMP, the AMP plugin never intends to advertise the availability
		 * of dirty AMP pages. However, in AMP-first (Standard mode), there is no non-AMP version to redirect to, so
		 * kept invalid markup does not cause redirection but rather the `amp` attribute is removed from the AMP page
		 * to serve an intentionally invalid AMP page with the AMP runtime loaded which is exempted from AMP validation
		 * (and excluded from being indexed as an AMP page). So this is why the first conditional will only show the
		 * error icon for kept markup when _not_ AMP-first. This will only be displayed to administrators who are directly
		 * accessing the AMP version. Otherwise, if there is no kept invalid markup _or_ it is AMP-first, then the AMP
		 * admin bar item will be updated to show if there are any unreviewed validation errors (regardless of whether
		 * they are kept or removed).
		 */
		if ( $kept_count > 0 && ! amp_is_canonical() ) {
			$admin_bar_icon->setAttribute( 'class', 'ab-icon amp-icon ' . Icon::INVALID );
		} elseif ( $unreviewed_count > 0 || $kept_count > 0 ) {
			$admin_bar_icon->setAttribute( 'class', 'ab-icon amp-icon ' . Icon::WARNING );
		}

		// Update the text of the link to reflect the status of the validation error(s).
		$items = [];
		if ( $unreviewed_count > 0 ) {
			if ( $unreviewed_count === $total_count ) {
				/* translators: text is describing validation issue(s) */
				$items[] = _n(
					'unreviewed',
					'all unreviewed',
					$unreviewed_count,
					'amp'
				);
			} else {
				$items[] = sprintf(
					/* translators: %s the total count of unreviewed validation errors */
					_n(
						'%s unreviewed',
						'%s unreviewed',
						$unreviewed_count,
						'amp'
					),
					number_format_i18n( $unreviewed_count )
				);
			}
		}
		if ( $kept_count > 0 ) {
			if ( $kept_count === $total_count ) {
				/* translators: text is describing validation issue(s) */
				$items[] = _n(
					'kept',
					'all kept',
					$kept_count,
					'amp'
				);
			} else {
				$items[] = sprintf(
					/* translators: %s the total count of unreviewed validation errors */
					_n(
						'%s kept',
						'%s kept',
						$kept_count,
						'amp'
					),
					number_format_i18n( $kept_count )
				);
			}
		}
		if ( empty( $items ) ) {
			/* translators: text is describing validation issue(s) */
			$items[] = _n(
				'reviewed',
				'all reviewed',
				$total_count,
				'amp'
			);
		}

		$text = sprintf(
			/* translators: %s is total count of validation errors */
			_n(
				'%s issue:',
				'%s issues:',
				$total_count,
				'amp'
			),
			number_format_i18n( $total_count )
		);
		$text .= ' ' . implode( ', ', $items );

		$validate_link->appendChild( $dom->createTextNode( ' ' ) );
		$small = $dom->createElement( Tag::SMALL );
		try {
			$small->setAttribute( Attribute::STYLE, 'font-size: smaller' );
		} catch ( MaxCssByteCountExceeded $e ) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedCatch
			// Making the font size smaller is just a nice-to-have.
		}
		$small->appendChild( $dom->createTextNode( sprintf( '(%s)', $text ) ) );
		$validate_link->appendChild( $small );
	}

	/**
	 * Adds the validation callback if front-end validation is needed.
	 *
	 * @param array $sanitizers The AMP sanitizers.
	 * @return array $sanitizers The filtered AMP sanitizers.
	 */
	public static function filter_sanitizer_args( $sanitizers ) {
		foreach ( $sanitizers as &$args ) {
			$args['validation_error_callback'] = __CLASS__ . '::add_validation_error';
		}

		if ( isset( $sanitizers[ AMP_Style_Sanitizer::class ] ) ) {
			$sanitizers[ AMP_Style_Sanitizer::class ]['should_locate_sources'] = self::is_validate_request();

			$css_validation_errors = [];
			foreach ( self::$validation_error_status_overrides as $slug => $status ) {
				$term = AMP_Validation_Error_Taxonomy::get_term( $slug );
				if ( ! $term ) {
					continue;
				}
				$validation_error = json_decode( $term->description, true );

				$is_css_validation_error = (
					is_array( $validation_error )
					&&
					isset( $validation_error['code'] )
					&&
					in_array( $validation_error['code'], AMP_Style_Sanitizer::get_css_parser_validation_error_codes(), true )
				);
				if ( $is_css_validation_error ) {
					$css_validation_errors[ $slug ] = $status;
				}
			}
			if ( ! empty( $css_validation_errors ) ) {
				$sanitizers[ AMP_Style_Sanitizer::class ]['parsed_cache_variant'] = md5( wp_json_encode( $css_validation_errors ) );
			}
		}

		return $sanitizers;
	}

	/**
	 * Validate a URL to be validated.
	 *
	 * @param string $url URL.
	 * @return string|WP_Error Validated URL or else error.
	 */
	private static function validate_validation_url( $url ) {
		$validated_url = wp_validate_redirect( $url );
		if ( ! $validated_url ) {
			return new WP_Error(
				'http_request_failed',
				/* translators: %s is the URL being redirected to. */
				sprintf( __( 'Unable to validate a URL on another site. Attempted to validate: %s', 'amp' ), $url )
			);
		}
		return $validated_url;
	}

	/**
	 * Validates a given URL.
	 *
	 * The validation errors will be stored in the validation status custom post type,
	 * as well as in a transient.
	 *
	 * @param string $url The URL to validate. This need not include the amp query var.
	 * @return WP_Error|array {
	 *     Response.
	 *
	 *     @type array  $results          Validation results, where each nested array contains an error key and sanitized key.
	 *     @type string $url              Final URL that was checked or redirected to.
	 *     @type array  $queried_object   Queried object, including keys for 'type' and 'id'.
	 *     @type array  $stylesheets      Stylesheet data.
	 *     @type string $php_fatal_error  PHP fatal error which occurred during validation.
	 * }
	 */
	public static function validate_url( $url ) {
		if ( ! amp_is_canonical() && ! amp_has_paired_endpoint( $url ) ) {
			$url = amp_add_paired_endpoint( $url );
		}

		$added_query_vars = [
			self::VALIDATE_QUERY_VAR => [
				self::VALIDATE_QUERY_VAR_NONCE      => self::get_amp_validate_nonce(),
				self::VALIDATE_QUERY_VAR_CACHE_BUST => wp_rand(),
			],
		];

		// Ensure the URL to be validated is on the site.
		$validation_url = self::validate_validation_url( $url );
		if ( is_wp_error( $validation_url ) ) {
			return $validation_url;
		}
		$validation_url = add_query_arg( $added_query_vars, $validation_url );

		$r = null;

		/** This filter is documented in wp-includes/class-http.php */
		$allowed_redirects = apply_filters( 'http_request_redirection_count', 5 );
		for ( $redirect_count = 0; $redirect_count < $allowed_redirects; $redirect_count++ ) {
			$r = wp_remote_get(
				$validation_url,
				[
					'cookies'     => wp_unslash( $_COOKIE ), // phpcs:ignore WordPressVIPMinimum.Variables.RestrictedVariables.cache_constraints___COOKIE -- Pass along cookies so private pages and drafts can be accessed.
					'timeout'     => 15, // phpcs:ignore WordPressVIPMinimum.Performance.RemoteRequestTimeout.timeout_timeout -- Increase from default of 5 to give extra time for the plugin to identify the sources for any given validation errors.
					/** This filter is documented in wp-includes/class-wp-http-streams.php */
					'sslverify'   => apply_filters( 'https_local_ssl_verify', false ),
					'redirection' => 0, // Because we're in a loop for redirection.
					'headers'     => [
						'Cache-Control' => 'no-cache',
					],
				]
			);

			// If the response is not a redirect, then break since $r is all we need.
			$response_code   = wp_remote_retrieve_response_code( $r );
			$location_header = wp_remote_retrieve_header( $r, 'Location' );
			$is_redirect     = (
				$response_code
				&&
				$response_code > 300 && $response_code < 400
				&&
				$location_header
			);
			if ( ! $is_redirect ) {
				break;
			}

			// Ensure absolute URL.
			if ( '/' === substr( $location_header, 0, 1 ) ) {
				$location_header = preg_replace( '#(^https?://[^/]+)/.*#', '$1', home_url( '/' ) ) . $location_header;
			}

			// Prevent following a redirect to another site, which won't work for validation anyway.
			$validation_url = self::validate_validation_url( $location_header );
			if ( is_wp_error( $validation_url ) ) {
				return $validation_url;
			}
			$validation_url = add_query_arg( $added_query_vars, $validation_url );
		}

		if ( is_wp_error( $r ) ) {
			return $r;
		}

		$response = trim( wp_remote_retrieve_body( $r ) );
		if ( wp_remote_retrieve_response_code( $r ) >= 400 ) {
			$data = json_decode( $response, true );
			return new WP_Error(
				is_array( $data ) && isset( $data['code'] ) ? $data['code'] : wp_remote_retrieve_response_code( $r ),
				is_array( $data ) && isset( $data['message'] ) ? $data['message'] : wp_remote_retrieve_response_message( $r )
			);
		}

		if ( wp_remote_retrieve_response_code( $r ) >= 300 ) {
			return new WP_Error(
				'http_request_failed',
				__( 'Too many redirects.', 'amp' )
			);
		}

		$url = remove_query_arg(
			array_keys( $added_query_vars ),
			$validation_url
		);

		// Strip byte order mark (BOM).
		while ( "\xEF\xBB\xBF" === substr( $response, 0, 3 ) ) {
			$response = substr( $response, 3 );
		}

		// Strip any leading whitespace.
		$response = ltrim( $response );

		// Strip HTML comments that may have been injected at the end of the response (e.g. by a caching plugin).
		while ( ! empty( $response ) ) {
			$response = rtrim( $response );
			$length   = strlen( $response );

			if ( $length < 3 || '-' !== $response[ $length - 3 ] || '-' !== $response[ $length - 2 ] || '>' !== $response[ $length - 1 ] ) {
				break;
			}

			$start = strrpos( $response, '<!--' );

			if ( false === $start ) {
				break;
			}

			$response = substr( $response, 0, $start );
		}

		if ( '' === $response ) {
			return new WP_Error( 'white_screen_of_death' );
		}
		if ( '{' !== substr( $response, 0, 1 ) ) {
			return new WP_Error( 'response_not_json' );
		}
		$validation = json_decode( $response, true );
		if ( json_last_error() || ! isset( $validation['results'] ) || ! is_array( $validation['results'] ) ) {
			return new WP_Error( 'malformed_json_validation_errors' );
		}

		return array_merge(
			$validation,
			compact( 'url' )
		);
	}

	/**
	 * Validate URL and store result.
	 *
	 * @param string      $url  URL to validate.
	 * @param int|WP_Post $post The amp_validated_url post to update. Optional. If empty, then post is looked up by URL.
	 * @return WP_Error|array {
	 *     Error on failure, or array on success.
	 *
	 *     @type int    $post_id          ID for the amp_validated_url post.
	 *     @type array  $results          Validation results, where each nested array contains an error key and sanitized key.
	 *     @type string $url              Final URL that was checked or redirected to.
	 *     @type array  $queried_object   Queried object, including keys for 'type' and 'id'.
	 *     @type array  $stylesheets      Stylesheet data.
	 *     @type string $php_fatal_error  PHP fatal error which occurred during validation.
	 * }
	 */
	public static function validate_url_and_store( $url, $post = null ) {
		$validity = self::validate_url( $url );
		if ( $validity instanceof WP_Error ) {
			return $validity;
		}

		$args = wp_array_slice_assoc( $validity, [ 'queried_object', 'stylesheets', 'php_fatal_error' ] );
		if ( $post ) {
			$args['invalid_url_post'] = $post;
		}

		$result = AMP_Validated_URL_Post_Type::store_validation_errors(
			wp_list_pluck( $validity['results'], 'error' ),
			$validity['url'],
			$args
		);
		if ( $result instanceof WP_Error ) {
			return $result;
		}
		$validity['post_id'] = $result;
		return $validity;
	}

	/**
	 * Serialize validation error messages.
	 *
	 * In order to safely pass validation error messages through redirects with query parameters, they must be serialized
	 * with a HMAC for security. The messages contain markup so the HMAC prevents tampering.
	 *
	 * @since 1.4.2
	 * @see AMP_Validation_Manager::unserialize_validation_error_messages()
	 *
	 * @param string[] $messages Messages.
	 * @return string Serialized.
	 */
	public static function serialize_validation_error_messages( $messages ) {
		$encoded_messages = base64_encode( wp_json_encode( array_unique( $messages ) ) ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_encode
		return wp_hash( $encoded_messages . wp_nonce_tick(), 'nonce' ) . ':' . $encoded_messages;
	}

	/**
	 * Unserialize validation error messages.
	 *
	 * @since 1.4.2
	 * @see AMP_Validation_Manager::serialize_validation_error_messages()
	 *
	 * @param string $serialized Serialized messages.
	 * @return string[]|null
	 */
	public static function unserialize_validation_error_messages( $serialized ) {
		$parts = explode( ':', $serialized, 2 );
		if (
			count( $parts ) !== 2
			||
			! hash_equals(
				$parts[0],
				wp_hash( $parts[1] . wp_nonce_tick(), 'nonce' )
			)
		) {
			return null;
		}
		return json_decode( base64_decode( $parts[1] ), true ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_decode
	}

	/**
	 * Get error message for a validate URL failure.
	 *
	 * @param string $error_code    Error code.
	 * @param string $error_message Error message, typically technical such as from HTTP status text or cURL error message.
	 * @return string Error message with HTML markup which has had its translated strings passed through wp_kses().
	 */
	public static function get_validate_url_error_message( $error_code, $error_message = '' ) {
		$check_error_log = sprintf(
			/* translators: %1$s is link to Debugging in WordPress, %2$s is WP_DEBUG_LOG */
			__( 'Please check your server PHP error logs; to do this you may need to <a href="%1$s" target="_blank">enable</a> %2$s.', 'amp' ),
			esc_url( 'https://wordpress.org/support/article/debugging-in-wordpress/' ),
			'<code>WP_DEBUG_LOG</code>'
		);

		if ( $error_message ) {
			$error_message = rtrim( $error_message, '.' ) . '.';
		}

		$support_forum_message = sprintf(
			/* translators: %1$s: Link to support forum. %2$s: Link to new topic form in support forum. */
			__( 'If you are stuck, please search the <a href="%1$s">support forum</a> for possible related topics, or otherwise start a <a href="%2$s">new support topic</a> including the error message, the URL to your site, and your active theme/plugins.', 'amp' ),
			esc_url( 'https://wordpress.org/support/plugin/amp/' ),
			esc_url( 'https://wordpress.org/support/plugin/amp/#new-topic-0' )
		);

		$site_health_message = sprintf(
			/* translators: %s is link to Site Health */
			__( 'Please check your <a href="%s">Site Health</a> to verify it can perform loopback requests.', 'amp' ),
			esc_url( admin_url( 'site-health.php' ) )
		);

		$support_forum_message .= ' ' . sprintf(
			/* translators: %s is the URL to Site Health Info. */
			__( 'Please include your <a href="%s">Site Health Info</a>.', 'amp' ),
			esc_url( admin_url( 'site-health.php?tab=debug' ) )
		);

		$implode_non_empty_strings_with_spaces_and_sanitize = static function ( $strings ) {
			return wp_kses(
				implode( ' ', array_filter( $strings ) ),
				[
					'a'    => array_fill_keys( [ 'href', 'target' ], true ),
					'code' => [],
				]
			);
		};

		switch ( $error_code ) {
			case 'http_request_failed':
				return $implode_non_empty_strings_with_spaces_and_sanitize(
					[
						esc_html__( 'Failed to fetch URL to validate.', 'amp' ),
						esc_html( $error_message ),
						$site_health_message,
						$support_forum_message,
					]
				);
			case 'white_screen_of_death':
				return $implode_non_empty_strings_with_spaces_and_sanitize(
					[
						esc_html__( 'Unable to validate URL. A white screen of death was encountered which is likely due to a PHP fatal error.', 'amp' ),
						esc_html( $error_message ),
						$check_error_log,
						$support_forum_message,
					]
				);
			case '404':
				return $implode_non_empty_strings_with_spaces_and_sanitize(
					[
						esc_html__( 'The fetched URL was not found. It may have been deleted. If so, you can trash this.', 'amp' ),
						esc_html( $error_message ),
						$support_forum_message,
					]
				);
			case '500':
				return $implode_non_empty_strings_with_spaces_and_sanitize(
					[
						esc_html__( 'An internal server error occurred when fetching the URL for validation.', 'amp' ),
						esc_html( $error_message ),
						$check_error_log,
						$support_forum_message,
					]
				);
			case 'fatal_error_during_validation':
				return $implode_non_empty_strings_with_spaces_and_sanitize(
					[
						esc_html__( 'A PHP fatal error occurred while validating the URL. This may indicate either a bug in theme/plugin code or it may be due to an issue in the AMP plugin itself.', 'amp' ),
						defined( 'WP_DEBUG_DISPLAY' ) && WP_DEBUG_DISPLAY
							? esc_html__( 'The error details appear below.', 'amp' )
							/* translators: %s is WP_DEBUG_DISPLAY */
							: $check_error_log . ' ' . wp_kses_post( sprintf( __( 'Alternatively, you may enable %s to show the error details below.', 'amp' ), '<code>WP_DEBUG_DISPLAY</code>' ) ),
						$support_forum_message,
					]
				);
			case 'response_not_json':
				return $implode_non_empty_strings_with_spaces_and_sanitize(
					[
						esc_html__( 'URL validation failed due to the AMP validation request not returning JSON data. This may be due to a PHP fatal error occurring.', 'amp' ),
						esc_html( $error_message ),
						$check_error_log,
						$support_forum_message,
					]
				);
			case 'malformed_json_validation_errors':
				return $implode_non_empty_strings_with_spaces_and_sanitize(
					[
						esc_html__( 'URL validation failed due to unexpected JSON in AMP validation response.', 'amp' ),
						esc_html( $error_message ),
						$support_forum_message,
					]
				);
			default:
				return $implode_non_empty_strings_with_spaces_and_sanitize(
					[
						/* translators: %s is error code */
						esc_html( sprintf( __( 'URL validation failed. Error code: %s.', 'amp' ), $error_code ) ),
						esc_html( $error_message ),
						$support_forum_message,
					]
				);
		}
	}

	/**
	 * Enqueues the block validation script.
	 *
	 * @return void
	 */
	public static function enqueue_block_validation() {
		/*
		 * The AMP_Validation_Manager::post_supports_validation() method is not being used here because
		 * a post's status for validation checking can change during the life of the editor, such as when
		 * the user toggles AMP back on after having turned it off, and then gets the validation
		 * warnings appearing due to the amp-block-validation having been enqueued already.
		 */
		if ( ! self::get_dev_tools_user_access()->is_user_enabled() ) {
			return;
		}

		// Block validation script uses features only available beginning with WP 5.6.
		$dependency_support = Services::get( 'dependency_support' );
		if ( ! $dependency_support->has_support() ) {
			return; // @codeCoverageIgnore
		}

		// Only enqueue scripts on the block editor for AMP-enabled posts.
		$editor_support = Services::get( 'editor.editor_support' );
		if ( ! $editor_support->is_current_screen_block_editor_for_amp_enabled_post_type() ) {
			return;
		}

		$slug = 'amp-block-validation';

		$asset_file   = AMP__DIR__ . '/assets/js/' . $slug . '.asset.php';
		$asset        = require $asset_file;
		$dependencies = $asset['dependencies'];
		$version      = $asset['version'];

		wp_enqueue_script(
			$slug,
			amp_get_asset_url( "js/{$slug}.js" ),
			$dependencies,
			$version,
			true
		);

		wp_enqueue_style(
			$slug,
			amp_get_asset_url( "css/{$slug}.css" ),
			false,
			AMP__VERSION
		);

		wp_styles()->add_data( $slug, 'rtl', 'replace' );

		$block_sources = Services::has( 'dev_tools.block_sources' ) ? Services::get( 'dev_tools.block_sources' ) : null;

		$plugin_registry = Services::get( 'plugin_registry' );

		$plugin_names = array_map(
			static function ( $plugin ) {
				return isset( $plugin['Name'] ) ? $plugin['Name'] : '';
			},
			$plugin_registry->get_plugins()
		);

		$data = [
			'HTML_ATTRIBUTE_ERROR_TYPE'            => AMP_Validation_Error_Taxonomy::HTML_ATTRIBUTE_ERROR_TYPE,
			'HTML_ELEMENT_ERROR_TYPE'              => AMP_Validation_Error_Taxonomy::HTML_ELEMENT_ERROR_TYPE,
			'JS_ERROR_TYPE'                        => AMP_Validation_Error_Taxonomy::JS_ERROR_TYPE,
			'CSS_ERROR_TYPE'                       => AMP_Validation_Error_Taxonomy::CSS_ERROR_TYPE,
			'VALIDATION_ERROR_NEW_REJECTED_STATUS' => AMP_Validation_Error_Taxonomy::VALIDATION_ERROR_NEW_REJECTED_STATUS,
			'VALIDATION_ERROR_NEW_ACCEPTED_STATUS' => AMP_Validation_Error_Taxonomy::VALIDATION_ERROR_NEW_ACCEPTED_STATUS,
			'VALIDATION_ERROR_ACK_REJECTED_STATUS' => AMP_Validation_Error_Taxonomy::VALIDATION_ERROR_ACK_REJECTED_STATUS,
			'VALIDATION_ERROR_ACK_ACCEPTED_STATUS' => AMP_Validation_Error_Taxonomy::VALIDATION_ERROR_ACK_ACCEPTED_STATUS,
			'isSanitizationAutoAccepted'           => self::is_sanitization_auto_accepted(),
			'blockSources'                         => $block_sources ? $block_sources->get_block_sources() : null,
			'pluginNames'                          => $plugin_names,
			'themeName'                            => wp_get_theme()->get( 'Name' ),
			'themeSlug'                            => wp_get_theme()->get_stylesheet(),
		];

		wp_add_inline_script(
			$slug,
			sprintf(
				'var ampBlockValidation = %s;',
				wp_json_encode( $data )
			),
			'before'
		);

		if ( function_exists( 'wp_set_script_translations' ) ) {
			wp_set_script_translations( $slug, 'amp' );
		} elseif ( function_exists( 'wp_get_jed_locale_data' ) || function_exists( 'gutenberg_get_jed_locale_data' ) ) {
			$locale_data  = function_exists( 'wp_get_jed_locale_data' ) ? wp_get_jed_locale_data( 'amp' ) : gutenberg_get_jed_locale_data( 'amp' );
			$translations = wp_json_encode( $locale_data );

			wp_add_inline_script(
				$slug,
				'wp.i18n.setLocaleData( ' . $translations . ', "amp" );',
				'after'
			);
		}
	}
}
PK.3Y�/��9bunyad-amp/includes/widgets/class-amp-widget-archives.php<?php
/**
 * Class AMP_Widget_Archives
 *
 * @since 0.7.0
 * @package AMP
 * @codeCoverageIgnore
 */

_deprecated_file( __FILE__, '2.0.0' );

/**
 * Class AMP_Widget_Archives
 *
 * @deprecated As of 2.0 the AMP_Core_Block_Handler will sanitize the core widgets instead.
 * @internal
 * @since 0.7.0
 * @package AMP
 */
class AMP_Widget_Archives extends WP_Widget_Archives {

	/**
	 * Echoes the markup of the widget.
	 *
	 * Mainly copied from WP_Widget_Archives::widget()
	 * Changes include:
	 * An id for the <form>.
	 * More escaping.
	 * The dropdown is now filtered with 'wp_dropdown_cats.'
	 * This enables adding an 'on' attribute, with the id of the form.
	 * So changing the dropdown value will redirect to the category page, with valid AMP.
	 *
	 * @since 0.7.0
	 *
	 * @param array $args Widget display data.
	 * @param array $instance Data for widget.
	 * @return void
	 */
	public function widget( $args, $instance ) {
		if ( ! amp_is_request() ) {
			parent::widget( $args, $instance );
			return;
		}

		$c = ! empty( $instance['count'] ) ? '1' : '0';
		$d = ! empty( $instance['dropdown'] ) ? '1' : '0';

		/** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
		$title = apply_filters( 'widget_title', empty( $instance['title'] ) ? __( 'Archives', 'default' ) : $instance['title'], $instance, $this->id_base );
		echo wp_kses_post( $args['before_widget'] );
		if ( $title ) :
			echo wp_kses_post( $args['before_title'] . $title . $args['after_title'] );
		endif;

		if ( $d ) :
			$dropdown_id = "{$this->id_base}-dropdown-{$this->number}";
			?>
			<form action="<?php echo esc_url( home_url() ); ?>" method="get" target="_top">
				<label class="screen-reader-text" for="<?php echo esc_attr( $dropdown_id ); ?>"><?php echo esc_html( $title ); ?></label>
				<select id="<?php echo esc_attr( $dropdown_id ); ?>" name="archive-dropdown" on="change:AMP.navigateTo(url=event.value)">
					<?php

					/** This filter is documented in wp-includes/widgets/class-wp-widget-archives.php */
					$dropdown_args = apply_filters(
						'widget_archives_dropdown_args',
						[
							'type'            => 'monthly',
							'format'          => 'option',
							'show_post_count' => $c,
						]
					);

					switch ( $dropdown_args['type'] ) {
						case 'yearly':
							$label = __( 'Select Year', 'default' );
							break;
						case 'monthly':
							$label = __( 'Select Month', 'default' );
							break;
						case 'daily':
							$label = __( 'Select Day', 'default' );
							break;
						case 'weekly':
							$label = __( 'Select Week', 'default' );
							break;
						default:
							$label = __( 'Select Post', 'default' );
							break;
					}
					?>
					<option value=""><?php echo esc_html( $label ); ?></option>
					<?php wp_get_archives( $dropdown_args ); ?>
				</select>
			</form>
		<?php else : ?>
			<ul>
				<?php

				/** This filter is documented in wp-includes/widgets/class-wp-widget-archives.php */
				wp_get_archives(
					apply_filters(
						'widget_archives_args',
						[
							'type'            => 'monthly',
							'show_post_count' => $c,
						]
					)
				);
				?>
			</ul>
			<?php
		endif;
		echo wp_kses_post( $args['after_widget'] );
	}
}
PK.3Y$�2]BB;bunyad-amp/includes/widgets/class-amp-widget-categories.php<?php
/**
 * Class AMP_Widget_Categories
 *
 * @since 0.7.0
 * @package AMP
 * @codeCoverageIgnore
 */

_deprecated_file( __FILE__, '2.0.0' );

/**
 * Class AMP_Widget_Categories
 *
 * @deprecated As of 2.0 the AMP_Core_Block_Handler will sanitize the core widgets instead.
 * @internal
 * @since 0.7.0
 * @package AMP
 */
class AMP_Widget_Categories extends WP_Widget_Categories {

	/**
	 * Echoes the markup of the widget.
	 *
	 * Mainly copied from WP_Widget_Categories::widget()
	 * There's now an id for the <form>.
	 * And the dropdown is now filtered with 'wp_dropdown_cats.'
	 * This enables adding an 'on' attribute, with the id of the form.
	 * So changing the dropdown value will redirect to the category page, with valid AMP.
	 *
	 * @since 0.7.0
	 *
	 * @param array $args Widget display data.
	 * @param array $instance Data for widget.
	 * @return void
	 */
	public function widget( $args, $instance ) {
		if ( ! amp_is_request() ) {
			parent::widget( $args, $instance );
			return;
		}

		static $first_dropdown = true;
		$title                 = ! empty( $instance['title'] ) ? $instance['title'] : __( 'Categories', 'default' );
		/** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
		$title = apply_filters( 'widget_title', $title, $instance, $this->id_base );
		$c     = ! empty( $instance['count'] ) ? '1' : '0';
		$h     = ! empty( $instance['hierarchical'] ) ? '1' : '0';
		$d     = ! empty( $instance['dropdown'] ) ? '1' : '0';
		echo wp_kses_post( $args['before_widget'] );
		if ( $title ) {
			echo wp_kses_post( $args['before_title'] . $title . $args['after_title'] );
		}
		$cat_args = [
			'orderby'      => 'name',
			'show_count'   => $c,
			'hierarchical' => $h,
		];
		if ( $d ) :
			$form_id = sprintf( 'widget-categories-dropdown-%d', $this->number );
			printf( '<form action="%s" method="get" target="_top" id="%s">', esc_url( home_url() ), esc_attr( $form_id ) );
			$dropdown_id    = $first_dropdown ? 'cat' : "{$this->id_base}-dropdown-{$this->number}";
			$first_dropdown = false;
			echo '<label class="screen-reader-text" for="' . esc_attr( $dropdown_id ) . '">' . esc_html( $title ) . '</label>';
			$cat_args['show_option_none'] = __( 'Select Category', 'default' );
			$cat_args['id']               = $dropdown_id;

			$dropdown = wp_dropdown_categories(
				array_merge(
					/** This filter is documented in wp-includes/widgets/class-wp-widget-categories.php */
					apply_filters( 'widget_categories_dropdown_args', $cat_args, $instance ),
					[ 'echo' => false ]
				)
			);
			$dropdown = preg_replace(
				'/(?<=<select\b)/',
				sprintf( '<select on="change:%s.submit"', esc_attr( $form_id ) ),
				$dropdown,
				1
			);
			echo $dropdown; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
			echo '</form>';
		else :
			?>
			<ul>
			<?php
			$cat_args['title_li'] = '';

			/** This filter is documented in wp-includes/widgets/class-wp-widget-categories.php */
			wp_list_categories( apply_filters( 'widget_categories_args', $cat_args, $instance ) );
			?>
			</ul>
			<?php
		endif;
		echo wp_kses_post( $args['after_widget'] );
	}
}
PK.3Y�;�t335bunyad-amp/includes/widgets/class-amp-widget-text.php<?php
/**
 * Class AMP_Widget_Text
 *
 * @since 0.7.0
 * @package AMP
 * @codeCoverageIgnore
 */

_deprecated_file( __FILE__, '2.0.0' );

if ( class_exists( 'WP_Widget_Text' ) ) {
	/**
	 * Class AMP_Widget_Text
	 *
	 * @since 0.7.0
	 * @deprecated As of 2.0 the AMP_Core_Block_Handler will sanitize the core widgets instead.
	 * @internal
	 * @package AMP
	 */
	class AMP_Widget_Text extends WP_Widget_Text {

		/**
		 * Overrides the parent callback that strips width and height attributes.
		 *
		 * @param array $matches The matches returned from preg_replace_callback().
		 * @return string $html The markup, unaltered.
		 */
		public function inject_video_max_width_style( $matches ) {
			if ( amp_is_request() ) {
				return $matches[0];
			}
			return parent::inject_video_max_width_style( $matches );
		}
	}

}
PK.3Y��re

.bunyad-amp/src/AmpSlugCustomizationWatcher.php<?php
/**
 * Class AmpSlugCustomizationWatcher.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP;

use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;

/**
 * Service for redirecting mobile users to the AMP version of a page.
 *
 * @package AmpProject\AmpWP
 * @internal
 */
final class AmpSlugCustomizationWatcher implements Service, Registerable {

	/**
	 * Action at which a slug can be considered late-defined, which is the ideal case.
	 *
	 * @var string
	 */
	const LATE_DETERMINATION_ACTION = 'after_setup_theme';

	/**
	 * Whether the slug was customized early (at plugins_loaded action, priority 8).
	 *
	 * @var bool
	 */
	protected $is_customized_early = false;

	/**
	 * Whether the slug was customized early (at after_setup_theme action, priority 4).
	 *
	 * @var bool
	 */
	protected $is_customized_late = false;

	/**
	 * Register.
	 */
	public function register() {
		// This is at priority 8 because ReaderThemeLoader::override_theme runs at priority 9, which in turn runs right
		// before _wp_customize_include at priority 10. A slug is customized early if it is customized at priority 8.
		add_action( 'plugins_loaded', [ $this, 'determine_early_customization' ], 8 );
	}

	/**
	 * Whether the slug was customized early (at plugins_loaded action, priority 8).
	 *
	 * @return bool
	 */
	public function did_customize_early() {
		return $this->is_customized_early;
	}

	/**
	 * Whether the slug was customized early (at after_setup_theme action, priority 4).
	 *
	 * @return bool
	 */
	public function did_customize_late() {
		return $this->is_customized_late;
	}

	/**
	 * Determine if the slug was customized early.
	 *
	 * Early customization happens by plugins_loaded action at priority 8; this is required in order for the slug to be
	 * used by `ReaderThemeLoader::override_theme()` which runs at priority 9; this method in turn must run before
	 * before `_wp_customize_include()` which runs at plugins_loaded priority 10. At that point the current theme gets
	 * determined, so for Reader themes to apply the logic in `ReaderThemeLoader` must run beforehand.
	 */
	public function determine_early_customization() {
		if ( QueryVar::AMP !== amp_get_slug( true ) ) {
			$this->is_customized_early = true;
		} else {
			add_action( self::LATE_DETERMINATION_ACTION, [ $this, 'determine_late_customization' ], 4 );
		}
	}

	/**
	 * Determine if the slug was defined late.
	 *
	 * Late slug customization often happens when a theme itself defines `AMP_QUERY_VAR`. This is too late for the plugin
	 * to be able to offer Reader themes which must have `AMP_QUERY_VAR` defined by plugins_loaded priority 9. Also,
	 * defining `AMP_QUERY_VAR` is fundamentally incompatible since loading a Reader theme means preventing the original
	 * theme from ever being loaded, and thus the theme's customized `AMP_QUERY_VAR` will never be read.
	 *
	 * This method must run before `amp_after_setup_theme()` which runs at the after_setup_theme action priority 5. In
	 * this function, the `amp_get_slug()` function is called which will then set the query var for the remainder of the
	 * request.
	 *
	 * @see amp_after_setup_theme()
	 */
	public function determine_late_customization() {
		if ( QueryVar::AMP !== amp_get_slug( true ) ) {
			$this->is_customized_late = true;
		}
	}
}
PK.3Y�ԇ�))bunyad-amp/src/AmpWpPlugin.php<?php
/**
 * Final class AmpWpPlugin.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP;

use AmpProject\AmpWP\Admin;
use AmpProject\AmpWP\BackgroundTask;
use AmpProject\AmpWP\BackgroundTask\BackgroundTaskDeactivator;
use AmpProject\AmpWP\Infrastructure\Injector;
use AmpProject\AmpWP\Infrastructure\ServiceBasedPlugin;
use AmpProject\AmpWP\Instrumentation;
use AmpProject\AmpWP\Optimizer\AmpWPConfiguration;
use AmpProject\AmpWP\Optimizer\HeroCandidateFiltering;
use AmpProject\AmpWP\Optimizer\OptimizerService;
use AmpProject\AmpWP\RemoteRequest\CachedRemoteGetRequest;
use AmpProject\AmpWP\RemoteRequest\WpHttpRemoteGetRequest;
use AmpProject\AmpWP\Support\SupportCliCommand;
use AmpProject\AmpWP\Support\SupportRESTController;
use AmpProject\AmpWP\Validation\ScannableURLProvider;
use AmpProject\AmpWP\Validation\URLValidationCron;
use AmpProject\AmpWP\Validation\URLValidationProvider;
use AmpProject\Optimizer;
use AmpProject\RemoteGetRequest;
use AmpProject\RemoteRequest\FallbackRemoteGetRequest;
use AmpProject\RemoteRequest\FilesystemRemoteGetRequest;

/**
 * The AmpWpPlugin class is the composition root of the plugin.
 *
 * In here we assemble our infrastructure, configure it for the specific use
 * case the plugin is meant to solve and then kick off the services so that they
 * can hook themselves into the WordPress lifecycle.
 *
 * @since 2.0
 * @internal
 */
final class AmpWpPlugin extends ServiceBasedPlugin {
	/*
	 * The "plugin" is only a tool to hook arbitrary code up to the WordPress
	 * execution flow.
	 *
	 * The main structure we use to modularize our code is "services". These are
	 * what makes up the actual plugin, and they provide self-contained pieces
	 * of code that can work independently.
	 */

	// Whether to enable filtering by default or not.
	const ENABLE_FILTERS_DEFAULT = false;

	/**
	 * Prefix to use for all actions and filters.
	 *
	 * This is used to make the filters for the dependency injector unique.
	 *
	 * @var string
	 */
	const HOOK_PREFIX = 'amp_';

	/**
	 * List of services.
	 *
	 * The services array contains a map of <identifier> => <service class name>
	 * associations.
	 *
	 * @var string[]
	 */
	const SERVICES = [
		'admin.analytics_menu'               => Admin\AnalyticsOptionsSubmenu::class,
		'admin.after_activation_site_scan'   => Admin\AfterActivationSiteScan::class,
		'admin.google_fonts'                 => Admin\GoogleFonts::class,
		'admin.onboarding_menu'              => Admin\OnboardingWizardSubmenu::class,
		'admin.onboarding_wizard'            => Admin\OnboardingWizardSubmenuPage::class,
		'admin.options_menu'                 => Admin\OptionsMenu::class,
		'admin.paired_browsing'              => Admin\PairedBrowsing::class,
		'admin.plugin_row_meta'              => Admin\PluginRowMeta::class,
		'admin.support_screen'               => Admin\SupportScreen::class,
		'admin.support'                      => Admin\SupportLink::class,
		'admin.polyfills'                    => Admin\Polyfills::class,
		'admin.user_rest_endpoint_extension' => Admin\UserRESTEndpointExtension::class,
		'admin.validation_counts'            => Admin\ValidationCounts::class,
		'admin.amp_plugins'                  => Admin\AmpPlugins::class,
		'admin.amp_themes'                   => Admin\AmpThemes::class,
		'amp_slug_customization_watcher'     => AmpSlugCustomizationWatcher::class,
		'background_task_deactivator'        => BackgroundTaskDeactivator::class,
		'block_uniqid_transformer'           => BlockUniqidTransformer::class,
		'cli.command_namespace'              => Cli\CommandNamespaceRegistration::class,
		'cli.optimizer_command'              => Cli\OptimizerCommand::class,
		'cli.transformer_command'            => Cli\TransformerCommand::class,
		'cli.validation_command'             => Cli\ValidationCommand::class,
		'cli.option_command'                 => Cli\OptionCommand::class,
		'css_transient_cache.ajax_handler'   => Admin\ReenableCssTransientCachingAjaxAction::class,
		'css_transient_cache.monitor'        => BackgroundTask\MonitorCssTransientCaching::class,
		'dependency_support'                 => DependencySupport::class,
		'dev_tools.block_sources'            => DevTools\BlockSources::class,
		'dev_tools.callback_reflection'      => DevTools\CallbackReflection::class,
		'dev_tools.error_page'               => DevTools\ErrorPage::class,
		'dev_tools.file_reflection'          => DevTools\FileReflection::class,
		'dev_tools.likely_culprit_detector'  => DevTools\LikelyCulpritDetector::class,
		'dev_tools.user_access'              => DevTools\UserAccess::class,
		'editor.editor_support'              => Editor\EditorSupport::class,
		'extra_theme_and_plugin_headers'     => ExtraThemeAndPluginHeaders::class,
		'loading_error'                      => LoadingError::class,
		'mobile_redirection'                 => MobileRedirection::class,
		'obsolete_block_attribute_remover'   => ObsoleteBlockAttributeRemover::class,
		'optimizer'                          => OptimizerService::class,
		'optimizer.hero_candidate_filtering' => HeroCandidateFiltering::class,
		'paired_routing'                     => PairedRouting::class,
		'paired_url'                         => PairedUrl::class,
		'plugin_activation_notice'           => Admin\PluginActivationNotice::class,
		'plugin_registry'                    => PluginRegistry::class,
		'plugin_suppression'                 => PluginSuppression::class,
		'reader_theme_loader'                => ReaderThemeLoader::class,
		'reader_theme_support_features'      => ReaderThemeSupportFeatures::class,
		'rest.options_controller'            => OptionsRESTController::class,
		'rest.scannable_urls_controller'     => Validation\ScannableURLsRestController::class,
		'rest.validation_counts_controller'  => Validation\ValidationCountsRestController::class,
		'sandboxing'                         => Sandboxing::class,
		'server_timing'                      => Instrumentation\ServerTiming::class,
		'site_health_integration'            => Admin\SiteHealth::class,
		'support'                            => SupportCliCommand::class,
		'support_rest_controller'            => SupportRESTController::class,
		'url_validation_cron'                => URLValidationCron::class,
		'url_validation_rest_controller'     => Validation\URLValidationRESTController::class,
		'validated_url_stylesheet_gc'        => BackgroundTask\ValidatedUrlStylesheetDataGarbageCollection::class,
		'validated_data_gc'                  => BackgroundTask\ValidationDataGarbageCollection::class,
		'validation.scannable_url_provider'  => ScannableURLProvider::class,
		'validation.url_validation_provider' => URLValidationProvider::class,
	];

	/**
	 * Get the list of services to register.
	 *
	 * The services array contains a map of <identifier> => <service class name>
	 * associations.
	 *
	 * @return array<string> Associative array of identifiers mapped to fully
	 *                       qualified class names.
	 */
	protected function get_service_classes() {
		return self::SERVICES;
	}

	/**
	 * Get the bindings for the dependency injector.
	 *
	 * The bindings array contains a map of <interface> => <implementation>
	 * mappings, both of which should be fully qualified class names (FQCNs).
	 *
	 * The <interface> does not need to be the actual PHP `interface` language
	 * construct, it can be a `class` as well.
	 *
	 * Whenever you ask the injector to "make()" an <interface>, it will resolve
	 * these mappings and return an instance of the final <class> it found.
	 *
	 * @return array<string> Associative array of fully qualified class names.
	 */
	protected function get_bindings() {
		return [
			Optimizer\Configuration::class => AmpWPConfiguration::class,
		];
	}

	/**
	 * Get the argument bindings for the dependency injector.
	 *
	 * The arguments array contains a map of <class> => <associative array of
	 * arguments> mappings.
	 *
	 * The array is provided in the form <argument name> => <argument value>.
	 *
	 * @return array<array> Associative array of arrays mapping argument names
	 *                      to argument values.
	 */
	protected function get_arguments() {
		return [
			Instrumentation\ServerTiming::class => [
				// Wrapped in a closure so it is lazily evaluated. Otherwise,
				// is_user_logged_in() breaks because it's used too early.
				'verbose' => static function () {
					return is_user_logged_in()
						&& current_user_can( 'manage_options' )
						&& isset( $_GET[ QueryVar::VERBOSE_SERVER_TIMING ] ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended
						&& filter_var(
							$_GET[ QueryVar::VERBOSE_SERVER_TIMING ], // phpcs:ignore WordPress.Security.NonceVerification.Recommended
							FILTER_VALIDATE_BOOLEAN
						);
				},
			],
		];
	}

	/**
	 * Get the shared instances for the dependency injector.
	 *
	 * The shared instances array contains a list of FQCNs that are meant to be
	 * reused. For multiple "make()" requests, the injector will return the same
	 * instance reference for these, instead of always returning a new one.
	 *
	 * This effectively turns these FQCNs into a "singleton", without incurring
	 * all the drawbacks of the Singleton design anti-pattern.
	 *
	 * @return array<string> Array of fully qualified class names.
	 */
	protected function get_shared_instances() {
		return [
			AmpSlugCustomizationWatcher::class,
			PluginRegistry::class,
			Instrumentation\StopWatch::class,
			DependencySupport::class,
			DevTools\CallbackReflection::class,
			DevTools\FileReflection::class,
			ReaderThemeLoader::class,
			ReaderThemeSupportFeatures::class,
			BackgroundTask\BackgroundTaskDeactivator::class,
			PairedRouting::class,
			LoadingError::class,
			Injector::class,
		];
	}

	/**
	 * Get the delegations for the dependency injector.
	 *
	 * The delegations array contains a map of <class> => <callable>
	 * mappings.
	 *
	 * The <callable> is basically a factory to provide custom instantiation
	 * logic for the given <class>.
	 *
	 * @return array<callable> Associative array of callables.
	 */
	protected function get_delegations() {
		return [
			Injector::class         => static function () {
				return Services::get( 'injector' );
			},
			RemoteGetRequest::class => static function () {
				$fallback_pipeline = new FallbackRemoteGetRequest(
					new WpHttpRemoteGetRequest(),
					new FilesystemRemoteGetRequest( Optimizer\LocalFallback::getMappings() )
				);

				return new CachedRemoteGetRequest( $fallback_pipeline, WEEK_IN_SECONDS );
			},
		];
	}
}
PK.3Y:ji���%bunyad-amp/src/AmpWpPluginFactory.php<?php
/**
 * Final class AmpWpPluginFactory.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP;

use AmpProject\AmpWP\Infrastructure\Plugin;

/**
 * The plugin factory is responsible for instantiating the plugin and returning
 * that instance.
 *
 * It can decide whether to return a shared or a fresh instance as needed.
 *
 * To read more about why this is preferable to a Singleton,
 *
 * @see https://www.alainschlesser.com/singletons-shared-instances/
 * @since 2.0
 * @internal
 */
final class AmpWpPluginFactory {

	/**
	 * Create and return an instance of the plugin.
	 *
	 * This always returns a shared instance. This way, outside code can always
	 * get access to the object instance of the plugin.
	 *
	 * @return Plugin Plugin instance.
	 */
	public static function create() {
		static $plugin = null;

		if ( null === $plugin ) {
			$plugin = new AmpWpPlugin();
		}

		return $plugin;
	}
}
PK.3Y{�����)bunyad-amp/src/BlockUniqidTransformer.php<?php
/**
 * Class BlockUniqidTransformer.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP;

use AMP_Block_Uniqid_Sanitizer;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;

/**
 * Transform uniqid-based IDs into cacheable IDs based on wp_unique_id.
 *
 * Random strings based on `uniqid()` should not be used to generate CSS class
 * names and used in inline styles so that parsed CSS transient caching is not
 * automatically disabled.
 *
 * Instead, `wp_unique_id()` should be used so that the IDs in the class names
 * are more predictable and the CSS transient caching works as expected.
 *
 * @link https://github.com/ampproject/amp-wp/pull/6925
 * @link https://github.com/WordPress/gutenberg/issues/38889
 *
 * @package AmpProject\AmpWP
 * @since 2.2.2
 * @internal
 */
final class BlockUniqidTransformer implements Service, Registerable {

	/**
	 * Gutenberg version.
	 *
	 * @var string
	 */
	private $gutenberg_version = null;

	/**
	 * Construct.
	 */
	public function __construct() {
		if ( defined( 'GUTENBERG_VERSION' ) ) {
			$this->gutenberg_version = GUTENBERG_VERSION;
		}
	}

	/**
	 * Check whether the Gutenberg plugin is present and if its one of the affected versions.
	 *
	 * Elements was added in 10.7 via WordPress/gutenberg#31524
	 * Layout was added in 11.2 via WordPress/gutenberg#33359
	 * Duotone was added in 11.7 via WordPress/gutenberg#34667
	 * `uniqid` has been replaced by `wp_unique_id` in 12.7 via WordPress/gutenberg#38891
	 *
	 * @param string|null $version Gutenberg version to check. If null, current version is used.
	 * @return bool Whether affected Gutenberg version.
	 */
	public function is_affected_gutenberg_version( $version = null ) {
		if ( empty( $version ) ) {
			$version = $this->gutenberg_version;
		}

		if ( empty( $version ) ) {
			return false;
		}

		return (
			version_compare( $version, '10.7', '>=' )
			&&
			version_compare( $version, '12.7', '<' )
		);
	}

	/**
	 * Check whether WordPress version is affected by the `uniqid` issue.
	 *
	 * The affected WordPress version is 5.9. However, the duotone filter was first
	 * introduced in WordPress 5.8 and it makes use of the `uniqid`, too.
	 *
	 * @param string|null $version WordPress core version to check. If null, current version is used.
	 * @return bool Whether affected WP version.
	 */
	public function is_affected_wordpress_version( $version = null ) {
		if ( empty( $version ) ) {
			$version = get_bloginfo( 'version' );
		}
		return (
			version_compare( $version, '5.8', '>=' )
			&&
			version_compare( $version, '5.9.3', '<' )
		);
	}

	/**
	 * Check whether the transformer is necessary.
	 *
	 * @return bool Whether the conditional object is needed.
	 */
	public function is_necessary() {
		return (
			$this->is_affected_gutenberg_version()
			||
			$this->is_affected_wordpress_version()
		);
	}

	/**
	 * Register the service with the system.
	 *
	 * @return void
	 */
	public function register() {
		if ( ! $this->is_necessary() ) {
			return;
		}

		add_filter(
			'amp_content_sanitizers',
			static function ( $sanitizers ) {
				$sanitizers = array_merge(
					[ AMP_Block_Uniqid_Sanitizer::class => [] ],
					$sanitizers
				);
				return $sanitizers;
			}
		);
	}
}
PK.3Y_��-��(bunyad-amp/src/ConfigurationArgument.php<?php
/**
 * Interface ConfigurationArgument.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP;

/**
 * Constants for the options that the AmpWP plugin supports.
 *
 * @package AmpProject\AmpWP
 * @since 2.0
 * @internal
 */
interface ConfigurationArgument {

	const ENABLE_ESM       = 'enable_esm';
	const ENABLE_OPTIMIZER = 'enable_optimizer';
	const ENABLE_SSR       = 'enable_ssr';
}
PK.3Y�z���$bunyad-amp/src/DependencySupport.php<?php
/**
 * Class to determine support for AMP plugin features.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP;

use AmpProject\AmpWP\Infrastructure\Service;

/**
 * DependencySupport class.
 *
 * @internal
 * @package AmpProject\AmpWP
 * @since 2.1.2
 */
class DependencySupport implements Service {

	/**
	 * The minimum version of Gutenberg supported.
	 *
	 * @var string
	 */
	const GB_MIN_VERSION = '9.2.0';

	/**
	 * The minimum version of WordPress supported.
	 *
	 * @var string
	 */
	const WP_MIN_VERSION = '5.6';

	/**
	 * Determines whether core or Gutenberg provides minimal support.
	 *
	 * @return bool
	 */
	public function has_support() {
		return $this->has_support_from_core() || $this->has_support_from_gutenberg_plugin();
	}

	/**
	 * Returns whether the Gutenberg plugin provides minimal support.
	 *
	 * @return bool
	 */
	public function has_support_from_gutenberg_plugin() {
		return defined( 'GUTENBERG_VERSION' ) && version_compare( GUTENBERG_VERSION, self::GB_MIN_VERSION, '>=' );
	}

	/**
	 * Returns whether WP core provides minimum Gutenberg support.
	 *
	 * @return bool
	 */
	public function has_support_from_core() {
		return version_compare( get_bloginfo( 'version' ), self::WP_MIN_VERSION, '>=' );
	}
}
PK.3Y^C�HFF-bunyad-amp/src/ExtraThemeAndPluginHeaders.php<?php
/**
 * Class ExtraThemeAndPluginHeaders.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP;

use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;

/**
 * Registers the 'AMP' extra header for themes and plugins.
 *
 * @package AmpProject\AmpWP
 * @since 2.0
 * @internal
 */
final class ExtraThemeAndPluginHeaders implements Service, Registerable {

	/**
	 * Header name.
	 *
	 * @var string
	 */
	const AMP_HEADER = 'AMP';

	/**
	 * AMP header value indicating legacy template support.
	 *
	 * @var string
	 */
	const AMP_HEADER_LEGACY = 'legacy';

	/**
	 * Register the service with the system.
	 *
	 * @return void
	 */
	public function register() {
		// Filter must be added as soon as possible since once wp_get_themes() is called, the results are cached.
		add_filter( 'extra_theme_headers', [ $this, 'filter_extra_headers' ] );
	}

	/**
	 * Add 'AMP' to the list of headers parsed from a theme's style.css or plugin's bootstrap file.
	 *
	 * For prior precedent here, WooCommerce adds a 'Woo' header.
	 *
	 * @see wc_enable_wc_plugin_headers()
	 * @see \WC_Helper::get_local_woo_themes()
	 *
	 * @param string[] $headers Headers.
	 * @return string[] Amended headers.
	 */
	public function filter_extra_headers( $headers ) {
		$headers[] = self::AMP_HEADER;
		return $headers;
	}
}
PK.3Y�kn�	�	bunyad-amp/src/Icon.php<?php
/**
 * Class Icon.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP;

/**
 * Icons used to visually represent the state of a validation error.
 *
 * @package AmpProject\AmpWP
 * @since 2.0
 * @internal
 */
final class Icon {

	/**
	 * Indicates there are validation errors for the AMP page.
	 */
	const INVALID = 'amp-invalid';

	/**
	 * Indicates there are validation errors for the AMP page that were removed.
	 */
	const REMOVED = 'amp-removed';

	/**
	 * Indicate an AMP version of the page is available.
	 */
	const LINK = 'amp-link';

	/**
	 * Indicates the page is valid AMP.
	 */
	const VALID = 'amp-valid';

	/**
	 * Indicates there are validation errors which have not been explicitly accepted.
	 */
	const WARNING = 'amp-warning';

	/**
	 * Indicates being on an AMP page.
	 */
	const LOGO = 'amp-logo';

	/**
	 * Icon class name.
	 *
	 * @var string
	 */
	private $icon;

	/**
	 * Constructor.
	 *
	 * @param string $icon Icon class name.
	 */
	private function __construct( $icon ) {
		$this->icon = $icon;
	}

	/**
	 * Invalid icon.
	 *
	 * @return Icon
	 */
	public static function invalid() {
		return new self( self::INVALID );
	}

	/**
	 * Removed icon.
	 *
	 * @return Icon
	 */
	public static function removed() {
		return new self( self::REMOVED );
	}

	/**
	 * Link icon
	 *
	 * @return Icon
	 */
	public static function link() {
		return new self( self::LINK );
	}

	/**
	 * Valid icon
	 *
	 * @return Icon
	 */
	public static function valid() {
		return new self( self::VALID );
	}

	/**
	 * Warning icon
	 *
	 * @return Icon
	 */
	public static function warning() {
		return new self( self::WARNING );
	}

	/**
	 * Logo icon
	 *
	 * @return Icon
	 */
	public static function logo() {
		return new self( self::LOGO );
	}

	/**
	 * Render icon as HTML.
	 *
	 * @param array $attributes List of attributes to add to HTML output.
	 * @return string Rendered HTML.
	 */
	public function to_html( $attributes = [] ) {
		$icon_class = 'amp-icon ' . $this->icon;

		$attributes['class'] = ! empty( $attributes['class'] )
			? $attributes['class'] . ' ' . $icon_class
			: $icon_class;

		$attributes_string = implode(
			' ',
			array_map(
				static function ( $key, $value ) {
					return sprintf(
						'%s="%s"',
						esc_attr( sanitize_key( $key ) ),
						esc_attr( $value )
					);
				},
				array_keys( $attributes ),
				$attributes
			)
		);

		return wp_kses_post( sprintf( '<span %s></span>', $attributes_string ) );
	}
}
PK.3Y������bunyad-amp/src/LoadingError.php<?php
/**
 * Class LoadingError.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP;

use AmpProject\AmpWP\Infrastructure\Service;

/**
 * Client-side app loading error markup and styles.
 *
 * @package AmpProject\AmpWP
 * @since 2.1.3
 * @internal
 */
final class LoadingError implements Service {

	/**
	 * Render error message along with necessary styles.
	 */
	public function render() {
		?>
		<div id="amp-pre-loading-spinner" class="amp-spinner-container">
			<span class="amp-loading-spinner">
				<span class="screen-reader-text">
					<?php esc_html_e( 'Loading', 'amp' ); ?>
				</span>
			</span>
		</div>

		<div id="amp-loading-failure" class="error-screen-container">
			<div class="error-screen components-panel">
				<h1>
					<?php esc_html_e( 'Something went wrong.', 'amp' ); ?>
				</h1>

				<?php
				printf(
					'<p class="amp-loading-failure-script">%s</p>',
					wp_kses(
						sprintf(
							/* translators: %s is the AMP support forum URL. */
							__( 'Check your connection and open your browser console to see if there are any error messages. You may share them on the <a href="%s" target="_blank" rel="noreferrer noopener">support forum</a>.', 'amp' ),
							esc_url( __( 'https://wordpress.org/support/plugin/amp/', 'amp' ) )
						),
						[
							'a' => [
								'href'   => true,
								'target' => true,
								'rel'    => true,
							],
						]
					)
				);
				?>

				<noscript>
					<p class="amp-loading-failure-noscript"><?php esc_html_e( 'You must have JavaScript enabled to use this page.', 'amp' ); ?></p>
				</noscript>
			</div>
		</div>
		<style>
			#amp-loading-failure {
				visibility: hidden;
				animation: amp-wp-show-element 30s steps(1, end) 0s 1 normal both;
			}

			#amp-pre-loading-spinner {
				visibility: visible;
				animation: amp-wp-hide-element 30s steps(1, end) 0s 1 normal both; /* This could probably reuse amp-wp-show-element if reversed. */
			}

			.amp-loading-failure-noscript {
				display: none;
			}

			@keyframes amp-wp-show-element {
				from {
					visibility: hidden;
				}
				to {
					visibility: visible;
				}
			}

			@keyframes amp-wp-hide-element {
				from {
					visibility: visible;
				}
				to {
					visibility: hidden;
				}
			}

			@keyframes amp-loading-spinner {
				from {
					transform: rotate(0deg);
				}
				to {
					transform: rotate(360deg);
				}
			}

			body.no-js #amp-loading-failure {
				animation: none;
				visibility: visible;
			}

			body.no-js .amp-loading-failure-noscript {
				display: block;
			}

			body.no-js #amp-pre-loading-spinner,
			body.no-js .amp-loading-failure-script {
				display: none;
			}

			.amp-spinner-container .amp-loading-spinner {
				display: inline-block;
				background-color: #949494;
				width: 18px;
				height: 18px;
				opacity: 0.7;
				border-radius: 100%;
				position: relative;
			}

			.amp-spinner-container .amp-loading-spinner::before {
				content: '';
				position: absolute;
				background-color: #fff;
				width: calc(18px / 4.5);
				height: calc(18px / 4.5);
				border-radius: 100%;
				transform-origin: calc(18px / 3) calc(18px / 3);
				top: calc((18px - 18px * (2 / 3)) / 2);
				left: calc((18px - 18px * (2 / 3)) / 2);
				animation: amp-loading-spinner 1s infinite linear;
			}
		</style>
		<?php
	}
}
PK.3Y�jB�]�]$bunyad-amp/src/MobileRedirection.php<?php
/**
 * Class MobileRedirection.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP;

use AMP_HTTP;
use AMP_Options_Manager;
use AMP_Theme_Support;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;
use AmpProject\Html\Attribute;

/**
 * Service for redirecting mobile users to the AMP version of a page.
 *
 * @package AmpProject\AmpWP
 * @since 2.0
 * @internal
 */
final class MobileRedirection implements Service, Registerable {

	/**
	 * Regular expression for regular expressions. So meta.
	 *
	 * This must work in both PHP and cross-browser JS, which is why the 's' flag is not used. Also, this will get
	 * passed as the pattern argument to the RegExp constructor in JS, whereas in PHP it will be used as the pattern
	 * surrounded by the '#' delimiter.
	 *
	 * @var string
	 */
	const REGEX_REGEX = '^\/((?:.|\n)+)\/([i]*)$';

	/**
	 * The name of the cookie or session storage key that persists the user's preference for viewing the non-AMP version of a page when on mobile.
	 *
	 * @var string
	 */
	const DISABLED_STORAGE_KEY = 'amp_mobile_redirect_disabled';

	/**
	 * PairedRouting instance.
	 *
	 * @var PairedRouting
	 */
	private $paired_routing;

	/**
	 * MobileRedirection constructor.
	 *
	 * @param PairedRouting $paired_routing Paired Routing.
	 */
	public function __construct( PairedRouting $paired_routing ) {
		$this->paired_routing = $paired_routing;
	}

	/**
	 * Register.
	 */
	public function register() {
		add_filter( 'amp_default_options', [ $this, 'filter_default_options' ] );
		add_filter( 'amp_options_updating', [ $this, 'sanitize_options' ], 10, 2 );

		if ( ! amp_is_canonical() ) {
			$sandboxing_level           = amp_get_sandboxing_level();
			$is_mobile_redirect_enabled = AMP_Options_Manager::get_option( Option::MOBILE_REDIRECT );

			// Add alternative link if mobile redirection is enabled or sandboxing level is set to loose or moderate.
			if ( $is_mobile_redirect_enabled || ( 1 === $sandboxing_level || 2 === $sandboxing_level ) ) {
				add_action( 'wp_head', [ $this, 'add_mobile_alternative_link' ] );
			}

			if ( ! $is_mobile_redirect_enabled ) {
				add_action( 'template_redirect', [ $this, 'maybe_add_mobile_switcher_link' ], PHP_INT_MAX );
			} else {
				add_action( 'template_redirect', [ $this, 'redirect' ], PHP_INT_MAX );

				// Enable AMP-to-AMP linking by default to avoid redirecting to AMP version when navigating.
				// A low priority is used so that sites can continue overriding this if they have done so.
				add_filter( 'amp_to_amp_linking_enabled', '__return_true', 0 );

				add_filter( 'comment_post_redirect', [ $this, 'filter_comment_post_redirect' ] );

				// Amend the comments/respond links to go to non-AMP page when in legacy Reader mode.
				if ( amp_is_legacy() ) {
					add_filter( 'get_comments_link', [ $this, 'add_noamp_mobile_query_var' ] ); // For get_comments_link().
					add_filter( 'respond_link', [ $this, 'add_noamp_mobile_query_var' ] ); // For comments_popup_link().
				}
			}
		}
	}

	/**
	 * Add default option.
	 *
	 * @param array $defaults Default options.
	 * @return array Defaults.
	 */
	public function filter_default_options( $defaults ) {
		$defaults[ Option::MOBILE_REDIRECT ] = true;
		return $defaults;
	}

	/**
	 * Sanitize options.
	 *
	 * @param array $options     Existing options with already-sanitized values for updating.
	 * @param array $new_options Unsanitized options being submitted for updating.
	 *
	 * @return array Sanitized options.
	 */
	public function sanitize_options( $options, $new_options ) {
		if ( isset( $new_options[ Option::MOBILE_REDIRECT ] ) ) {
			$options[ Option::MOBILE_REDIRECT ] = rest_sanitize_boolean( $new_options[ Option::MOBILE_REDIRECT ] );
		}
		return $options;
	}

	/**
	 * Get the AMP version of the current URL.
	 *
	 * @return string AMP URL.
	 */
	public function get_current_amp_url() {
		$url = $this->paired_routing->add_endpoint( amp_get_current_url() );
		$url = remove_query_arg( QueryVar::NOAMP, $url );
		return $url;
	}

	/**
	 * Add redirection logic if available for request.
	 */
	public function redirect() {
		// If a site is AMP-first or AMP is not available for the request, then no redirection functionality will apply.
		// Additionally, prevent adding redirection logic in the Customizer preview since that will currently complicate things.
		if ( amp_is_canonical() || ! amp_is_available() ) {
			return;
		}

		$js = $this->is_using_client_side_redirection();

		if ( ! $js ) {
			// If using server-side redirection, make sure that caches vary by user agent.
			if ( ! headers_sent() ) {
				header( 'Vary: User-Agent', false );
			}

			// Now abort if it's not an AMP page and the user agent is not mobile, since there won't be any redirection
			// to the AMP version and we don't need to show a footer link to go to the AMP version.
			if ( ! $this->is_mobile_request() && ! amp_is_request() ) {
				return;
			}
		}

		// Print the mobile switcher styles.
		$this->add_mobile_switcher_head_hooks();

		if ( ! amp_is_request() ) {
			if ( $js ) {
				// Add mobile redirection script.
				add_action( 'wp_head', [ $this, 'add_mobile_redirect_script' ], ~PHP_INT_MAX );
			} elseif ( ! $this->is_redirection_disabled_via_cookie() ) {
				if ( $this->is_redirection_disabled_via_query_param() ) {
					// Persist disabling mobile redirection for the session if redirection is disabled for the current request.
					$this->set_mobile_redirection_disabled_cookie( true );
				} else {
					// Redirect to the AMP version since is_mobile_request and redirection not disabled by cookie or query param.
					if ( wp_safe_redirect( $this->get_current_amp_url(), 302 ) ) {
						exit;
					}
				}
			}

			// Add a link to the footer to allow for navigation to the AMP version.
			$this->add_mobile_switcher_footer_hooks();
		} else {
			if ( ! $js && $this->is_redirection_disabled_via_cookie() ) {
				$this->set_mobile_redirection_disabled_cookie( false );
			}

			$this->add_a2a_linking_hooks();

			// Add a link to the footer to allow for navigation to the non-AMP version.
			$this->add_mobile_switcher_footer_hooks();
		}
	}

	/**
	 * Add mobile switcher link in footer when serving an AMP page.
	 */
	public function maybe_add_mobile_switcher_link() {
		if ( amp_is_request() ) {
			$this->add_mobile_switcher_head_hooks();
			$this->add_mobile_switcher_footer_hooks();
		}
	}

	/**
	 * Add mobile version switcher head hooks.
	 */
	private function add_mobile_switcher_head_hooks() {
		add_action( 'wp_head', [ $this, 'add_mobile_version_switcher_styles' ] );
		add_action( 'amp_post_template_head', [ $this, 'add_mobile_version_switcher_styles' ] ); // For legacy Reader mode theme.
	}

	/**
	 * Add mobile version switcher footer hooks.
	 */
	private function add_mobile_switcher_footer_hooks() {
		add_action( 'wp_footer', [ $this, 'add_mobile_version_switcher_link' ] );
		add_action( 'amp_post_template_footer', [ $this, 'add_mobile_version_switcher_link' ] ); // For legacy Reader mode theme.
	}

	/**
	 * Add AMP-to-AMP linking hooks.
	 */
	private function add_a2a_linking_hooks() {
		add_filter( 'amp_to_amp_linking_element_excluded', [ $this, 'filter_amp_to_amp_linking_element_excluded' ], 100, 2 );
		add_filter( 'amp_to_amp_linking_element_query_vars', [ $this, 'filter_amp_to_amp_linking_element_query_vars' ], 10, 2 );
	}

	/**
	 * Ensure that links/forms which point to ?noamp up-front are excluded from AMP-to-AMP linking.
	 *
	 * @param bool   $excluded Excluded.
	 * @param string $url      URL considered for exclusion.
	 * @return bool Element excluded from AMP-to-AMP linking.
	 */
	public function filter_amp_to_amp_linking_element_excluded( $excluded, $url ) {
		if ( ! $excluded ) {
			$query_string = wp_parse_url( $url, PHP_URL_QUERY );
			if ( ! empty( $query_string ) ) {
				$query_vars = [];
				parse_str( $query_string, $query_vars );
				$excluded = array_key_exists( QueryVar::NOAMP, $query_vars );
			}
		}
		return $excluded;
	}

	/**
	 * Ensure that links/forms which point to ?noamp up-front are excluded from AMP-to-AMP linking.
	 *
	 * @param string[] $query_vars Query vars.
	 * @param bool     $excluded   Whether the element was excluded from AMP-to-AMP linking.
	 * @return string[] Query vars to add to the element.
	 */
	public function filter_amp_to_amp_linking_element_query_vars( $query_vars, $excluded ) {
		if ( $excluded ) {
			$query_vars[ QueryVar::NOAMP ] = QueryVar::NOAMP_MOBILE;
		}
		return $query_vars;
	}

	/**
	 * Determine if the current request is from a mobile device by looking at the User-Agent request header.
	 *
	 * This only applies if client-side redirection has been disabled.
	 *
	 * @return bool True if current request is from a mobile device, otherwise false.
	 */
	public function is_mobile_request() {
		/**
		 * Filters whether the current request is from a mobile device. This is provided as a means to short-circuit
		 * the normal determination of a mobile request below.
		 *
		 * @since 2.0
		 *
		 * @param null $is_mobile Whether the current request is from a mobile device.
		 */
		$pre_is_mobile = apply_filters( 'amp_pre_is_mobile', null );

		if ( null !== $pre_is_mobile ) {
			return (bool) $pre_is_mobile;
		}

		if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) {
			return false;
		}

		// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPressVIPMinimum.Variables.RestrictedVariables.cache_constraints___SERVER__HTTP_USER_AGENT__ -- Value is used only in pattern matching. Logic not used by default since requires amp_mobile_client_side_redirection filter opt-in.
		$current_user_agent = wp_unslash( $_SERVER['HTTP_USER_AGENT'] );
		$regex_regex        = sprintf( '#%s#', self::REGEX_REGEX );
		foreach ( $this->get_mobile_user_agents() as $user_agent_pattern ) {
			if (
				(
					preg_match( $regex_regex, $user_agent_pattern ) // So meta!
					&&
					preg_match( $user_agent_pattern, $current_user_agent )
				)
				||
				false !== strpos( $current_user_agent, $user_agent_pattern )
			) {
				return true;
			}
		}

		return false;
	}

	/**
	 * Determine if mobile redirection should be done via JavaScript.
	 *
	 * If auto-redirection is disabled due to being in the Customizer preview or in AMP Dev Mode (and thus possibly in
	 * Paired Browsing), then client-side redirection is forced.
	 *
	 * @return bool True if mobile redirection should be done, false otherwise.
	 */
	public function is_using_client_side_redirection() {
		if ( is_customize_preview() || Services::has( 'admin.paired_browsing' ) ) {
			return true;
		}

		/**
		 * Filters whether mobile redirection should be done client-side (via JavaScript).
		 *
		 * If false, a server-side solution will be used instead (via PHP). It's important to verify that server-side
		 * redirection does not conflict with a site's page caching logic. To assist with this, you may need to hook
		 * into the `amp_pre_is_mobile` filter.
		 *
		 * Beware that disabling this will result in a cookie being set when the user decides to leave the mobile version.
		 * This may require updating the site's privacy policy or getting user consent for GDPR compliance. Nevertheless,
		 * since the cookie is not used for tracking this may not be necessary.
		 *
		 * Please note that this does not apply when in the Customizer preview or when in AMP Dev Mode (and thus possible
		 * Paired Browsing), since server-side redirects would not be able to be prevented as required.
		 *
		 * @since 2.0
		 *
		 * @param bool $should_redirect_via_js Whether JS redirection should be used to take mobile visitors to the AMP version.
		 */
		return (bool) apply_filters( 'amp_mobile_client_side_redirection', true );
	}

	/**
	 * Get a list of mobile user agents to use for comparison against the user agent from the current request.
	 *
	 * Each entry may either be a simple string needle, or it be a regular expression serialized as a string in the form
	 * of `/pattern/[i]*`. If a user agent string does not match this pattern, then the string will be used as a simple
	 * string needle for the haystack.
	 *
	 * @return string[] An array of mobile user agent search strings (and regex patterns).
	 */
	public function get_mobile_user_agents() {
		// Default list compiled from the user agents listed in `wp_is_mobile()`.
		$default_user_agents = [
			'Mobile',
			'Android',
			'Silk/',
			'Kindle',
			'BlackBerry',
			'Opera Mini',
			'Opera Mobi',
		];

		/**
		 * Filters the list of user agents used to determine if the user agent from the current request is a mobile one.
		 *
		 * @since 2.0
		 *
		 * @param string[] $user_agents List of mobile user agent search strings (and regex patterns).
		 */
		return apply_filters( 'amp_mobile_user_agents', $default_user_agents );
	}

	/**
	 * Determine if mobile redirection is disabled via query param.
	 *
	 * @return bool True if disabled, false otherwise.
	 */
	public function is_redirection_disabled_via_query_param() {
		return isset( $_GET[ QueryVar::NOAMP ] ) && QueryVar::NOAMP_MOBILE === wp_unslash( $_GET[ QueryVar::NOAMP ] ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
	}

	/**
	 * Determine if mobile redirection is disabled via cookie.
	 *
	 * @return bool True if disabled, false otherwise.
	 */
	public function is_redirection_disabled_via_cookie() {
		return isset( $_COOKIE[ self::DISABLED_STORAGE_KEY ] );
	}

	/**
	 * Sets a cookie to disable/enable mobile redirection for the current browser session.
	 *
	 * @param bool $add Whether to add (true) or remove (false) the cookie.
	 * @return void
	 */
	public function set_mobile_redirection_disabled_cookie( $add ) {
		if ( $add ) {
			$value   = '1';
			$expires = 0; // Time till expiry. Setting it to `0` means the cookie will only last for the current browser session.

			// phpcs:ignore WordPressVIPMinimum.Variables.RestrictedVariables.cache_constraints___COOKIE -- Cookies not used by default. Requires amp_mobile_client_side_redirection filter opt-in
			$_COOKIE[ self::DISABLED_STORAGE_KEY ] = $value;
		} else {
			$value   = null;
			$expires = time() - YEAR_IN_SECONDS;

			// phpcs:ignore WordPressVIPMinimum.Variables.RestrictedVariables.cache_constraints___COOKIE -- Cookies not used by default. Requires amp_mobile_client_side_redirection filter opt-in
			unset( $_COOKIE[ self::DISABLED_STORAGE_KEY ] );
		}

		if ( headers_sent() ) {
			return;
		}

		$path     = wp_parse_url( home_url( '/' ), PHP_URL_PATH ); // Path.
		$secure   = is_ssl();                                      // Whether cookie should be transmitted over a secure HTTPS connection.
		$httponly = true;                                          // Access via JS is unnecessary since cookie only get/set via PHP.
		$samesite = 'strict';                                      // Prevents the cookie from being sent by the browser to the target site in all cross-site browsing context.
		$domain   = COOKIE_DOMAIN;

		// phpcs:ignore WordPressVIPMinimum.Functions.RestrictedFunctions.cookies_setcookie -- Cookies not used by default. Requires amp_mobile_client_side_redirection filter opt-in
		setcookie(
			self::DISABLED_STORAGE_KEY,
			$value,
			compact( 'expires', 'path', 'secure', 'httponly', 'samesite', 'domain' )
		);
	}

	/**
	 * Output the mobile redirection Javascript code.
	 */
	public function add_mobile_redirect_script() {
		$source = file_get_contents( __DIR__ . '/../assets/js/mobile-redirection.js' ); // phpcs:ignore WordPress.WP.AlternativeFunctions

		$exports = [
			'ampUrl'             => $this->get_current_amp_url(),
			'noampQueryVarName'  => QueryVar::NOAMP,
			'noampQueryVarValue' => QueryVar::NOAMP_MOBILE,
			'disabledStorageKey' => self::DISABLED_STORAGE_KEY,
			'mobileUserAgents'   => $this->get_mobile_user_agents(),
			'regexRegex'         => self::REGEX_REGEX,
			'isCustomizePreview' => is_customize_preview(),
			'isAmpDevMode'       => amp_is_dev_mode(),
		];

		$source = str_replace( 'AMP_MOBILE_REDIRECTION', wp_json_encode( $exports ), $source );

		if ( function_exists( 'wp_print_inline_script_tag' ) ) {
			wp_print_inline_script_tag( $source );
		} else {
			echo $this->get_inline_script_tag( $source ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
		}
	}

	/**
	 * Wraps inline JavaScript in `<script>` tag.
	 *
	 * This is copied from WordPress 5.7, the version in which it was introduced.
	 *
	 * @see wp_get_inline_script_tag()
	 *
	 * @param string $javascript Inline JavaScript code.
	 * @param array  $attributes  Optional. Key-value pairs representing `<script>` tag attributes.
	 * @return string String containing inline JavaScript code wrapped around `<script>` tag.
	 */
	private function get_inline_script_tag( $javascript, $attributes = [] ) {
		if ( ! isset( $attributes['type'] ) && ! is_admin() && ! current_theme_supports( 'html5', 'script' ) ) {
			$attributes['type'] = 'text/javascript';
		}

		/** This filter is documented in wp-includes/script-loader.php */
		$attributes = apply_filters( 'wp_inline_script_attributes', $attributes, $javascript );

		$javascript = "\n" . trim( $javascript, "\n\r " ) . "\n";

		return sprintf( "<script%s>%s</script>\n", $this->sanitize_script_attributes( $attributes ), $javascript );
	}

	/**
	 * Sanitizes an attributes array into an attributes string to be placed inside a `<script>` tag.
	 *
	 * This is copied from WordPress 5.7, the version in which it was introduced.
	 *
	 * @see wp_sanitize_script_attributes()
	 *
	 * @param array $attributes Key-value pairs representing `<script>` tag attributes.
	 * @return string String made of sanitized `<script>` tag attributes.
	 */
	private function sanitize_script_attributes( $attributes ) {
		$html5_script_support = ! is_admin() && ! current_theme_supports( 'html5', 'script' );
		$attributes_string    = '';

		// If HTML5 script tag is supported, only the attribute name is added
		// to $attributes_string for entries with a boolean value, and that are true.
		foreach ( $attributes as $attribute_name => $attribute_value ) {
			if ( is_bool( $attribute_value ) ) {
				if ( $attribute_value ) {
					$attributes_string .= $html5_script_support ? sprintf( ' %1$s="%2$s"', esc_attr( $attribute_name ), esc_attr( $attribute_name ) ) : ' ' . $attribute_name;
				}
			} else {
				$attributes_string .= sprintf( ' %1$s="%2$s"', esc_attr( $attribute_name ), esc_attr( $attribute_value ) );
			}
		}
		return $attributes_string;
	}

	/**
	 * Add rel=alternate link for AMP version.
	 *
	 * @link https://developers.google.com/search/mobile-sites/mobile-seo/separate-urls#annotation-in-the-html
	 */
	public function add_mobile_alternative_link() {
		if ( amp_is_available() && ! amp_is_request() ) {
			printf(
				'<link rel="alternate" type="text/html" media="only screen and (max-width: 640px)" href="%s">',
				esc_url( $this->get_current_amp_url() )
			);
		}
	}

	/**
	 * Redirect to AMP page after submitting comment if the URL is on this site.
	 *
	 * This avoids the need for a secondary redirect after having been redirected to the non-AMP URL.
	 *
	 * @param string $url URL.
	 * @return string Amended URL.
	 */
	public function filter_comment_post_redirect( $url ) {
		if (
			isset( AMP_HTTP::$purged_amp_query_vars[ AMP_HTTP::ACTION_XHR_CONVERTED_QUERY_VAR ] )
			&&
			wp_parse_url( home_url(), PHP_URL_HOST ) === wp_parse_url( $url, PHP_URL_HOST )
		) {
			$url = $this->paired_routing->add_endpoint( $url );
		}
		return $url;
	}

	/**
	 * Add `?noamp=mobile` to a given URL.
	 *
	 * @param string $url URL.
	 * @return string Amended URL.
	 */
	public function add_noamp_mobile_query_var( $url ) {
		return add_query_arg( QueryVar::NOAMP, QueryVar::NOAMP_MOBILE, $url );
	}

	/**
	 * Print the styles for the mobile version switcher.
	 */
	public function add_mobile_version_switcher_styles() {
		/**
		 * Filters whether the default mobile version switcher styles are printed.
		 *
		 * @since 2.0
		 *
		 * @param bool $used Whether the styles are printed.
		 */
		if ( ! apply_filters( 'amp_mobile_version_switcher_styles_used', true ) ) {
			return;
		}
		$source = file_get_contents( AMP__DIR__ . '/assets/css/amp-mobile-version-switcher' . ( is_rtl() ? '-rtl' : '' ) . '.css' ); // phpcs:ignore WordPress.WP.AlternativeFunctions

		if ( 'twentytwentyone' === get_template() ) {
			// When on a non-AMP page and the mobile menu is open, the mobile version link is incorrectly shown at the
			// top of the page. In that case, the mobile version link is hidden.
			$source .= '
				body.lock-scrolling > #amp-mobile-version-switcher {
					display: none;
				}
			';
		}

		printf( '<style>%s</style>', $source ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
	}

	/**
	 * Output the link for the mobile version switcher.
	 */
	public function add_mobile_version_switcher_link() {
		$should_redirect_via_js = $this->is_using_client_side_redirection();

		$is_amp = amp_is_request();
		if ( $is_amp ) {
			$rel  = [ Attribute::REL_NOFOLLOW ];
			$url  = add_query_arg( QueryVar::NOAMP, QueryVar::NOAMP_MOBILE, $this->paired_routing->remove_endpoint( amp_get_current_url() ) );
			$text = __( 'Exit mobile version', 'amp' );
		} else {
			$rel  = [];
			$url  = $this->get_current_amp_url();
			$text = __( 'Go to mobile version', 'amp' );
		}

		/**
		 * Filters the text to be used in the mobile switcher link.
		 *
		 * Use the `amp_is_request()` function to determine whether you are filtering the
		 * text for the link to go to the non-AMP version or the AMP version.
		 *
		 * @since 2.0
		 *
		 * @param string $text Link text to display.
		 */
		$text = apply_filters( 'amp_mobile_version_switcher_link_text', $text );

		if ( empty( $text ) ) {
			return;
		}

		$hide_switcher = (
			// The switcher must always be shown in the AMP version to allow accessing the non-AMP version.
			! $is_amp
			&&
			// The switcher should be hidden if using client-side redirection since JS will determine if it is a mobile
			// device and thus whether the switcher should be displayed.
			$should_redirect_via_js
		);

		$container_id = 'amp-mobile-version-switcher';
		?>
		<div id="<?php echo esc_attr( $container_id ); ?>" <?php printf( $hide_switcher ? 'hidden' : '' ); ?>>
			<a rel="<?php echo esc_attr( implode( ' ', $rel ) ); ?>" href="<?php echo esc_url( $url ); ?>">
				<?php echo esc_html( $text ); ?>
			</a>
		</div>

		<?php
		// Note that the switcher link is disabled in Reader mode because there is a separate toggle to switch versions,
		// and because there are controls which are AMP-specific which don't apply when switching between versions.
		$is_amp_reader_customizer = (
			is_customize_preview()
			&&
			AMP_Theme_Support::READER_MODE_SLUG === AMP_Options_Manager::get_option( Option::THEME_SUPPORT )
		);

		$is_possibly_paired_browsing = (
			Services::has( 'admin.paired_browsing' )
			&&
			! is_customize_preview()
		);

		if ( $is_amp_reader_customizer || $is_possibly_paired_browsing ) :
			$exports = [
				'containerId'              => $container_id,
				'isReaderCustomizePreview' => $is_amp_reader_customizer,
				'notApplicableMessage'     => __( 'This link is not applicable in this context. It remains here for preview purposes only.', 'amp' ),
			];
			?>
			<script data-ampdevmode>
			(function( { containerId, isReaderCustomizePreview, notApplicableMessage } ) {
				addEventListener( 'DOMContentLoaded', () => {
					if ( isReaderCustomizePreview || [ 'paired-browsing-non-amp', 'paired-browsing-amp' ].includes( window.name ) ) {
						const link = document.querySelector( `#${containerId} a[href]` );
						link.style.cursor = 'not-allowed';
						link.addEventListener( 'click', ( event ) => {
							event.preventDefault();
							event.stopPropagation();
							alert( notApplicableMessage );
						} );
					}
				} );
			})( <?php echo wp_json_encode( $exports ); ?> );
			</script>
		<?php endif; ?>
		<?php
	}
}
PK.3Y��l9BB0bunyad-amp/src/ObsoleteBlockAttributeRemover.php<?php
/**
 * Class ObsoleteBlockAttributeRemover.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP;

use AmpProject\AmpWP\Infrastructure\Delayed;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;
use WP_REST_Response;

/**
 * Removes obsolete data-amp-* attributes from block markup in post content.
 *
 * These HTML attributes serve as processing instructions to control how the sanitizers handle converting HTML to AMP.
 * For each HTML attribute there is also a block attribute, so if there is a data-amp-carousel HTML attribute then there
 * is also an ampCarousel block attribute. The block attributes were originally mirrored onto the HTML attributes because
 * the 'render_block' filter was not available in Gutenberg (or WordPress Core) when this was first implemented; now that
 * this filter is available, there is no need to duplicate/mirror the attributes, and so they are injected into the
 * root HTML element via `AMP_Core_Block_Handler::filter_rendered_block()`. In hindsight, instead of having the data
 * mirrored between block attributes and HTML attributes, the block attributes should have perhaps used an 'attribute'
 * as the block attribute 'source'. Then again, that may have complicated things yet further to migrate away from using
 * these data attributes. A key reason for why these HTML data-* attributes are bad is that they cause block validation
 * errors. If someone creates a Gallery block and enables a carousel, then if they go and deactivate the AMP plugin,
 * this block will then show as having a block validation error. If, however, we restrict the block attributes to only
 * be in the block comment, then no block validation errors occur. Also, since the 'render_block' filter is now
 * available, the reason for storing these block attributes as data-amp-* HTML attributes in post_content is now obsolete.
 *
 * @see AMP_Core_Block_Handler::filter_rendered_block()
 * @see AMP_Gallery_Block_Sanitizer
 * @link https://github.com/ampproject/amp-wp/pull/4775
 *
 * @package AmpProject\AmpWP
 * @since 2.0
 * @internal
 */
final class ObsoleteBlockAttributeRemover implements Service, Registerable, Delayed {

	/**
	 * Obsolete attributes.
	 *
	 * @var string[]
	 */
	const OBSOLETE_ATTRIBUTES = [
		'data-amp-carousel',
		'data-amp-layout',
		'data-amp-lightbox',
		'data-amp-noloading',
	];

	/**
	 * Get registration action.
	 *
	 * @return string
	 */
	public static function get_registration_action() {
		return 'rest_api_init';
	}

	/**
	 * Register the service with the system.
	 *
	 * @return void
	 */
	public function register() {
		foreach ( get_post_types_by_support( 'editor' ) as $post_type ) {
			add_filter( "rest_prepare_{$post_type}", [ $this, 'filter_rest_prepare_post' ] );
		}
	}

	/**
	 * Get obsolete attribute regular expression to match the obsolete attribute key/value pair in an HTML start tag..
	 *
	 * @return string Regular expression pattern.
	 */
	protected function get_obsolete_attribute_pattern() {
		static $pattern = null;
		if ( ! $pattern ) {
			$pattern = sprintf( '/\s(%s)="[^"]*+"/', implode( '|', self::OBSOLETE_ATTRIBUTES ) );
		}
		return $pattern;
	}

	/**
	 * Filter post response object to purge obsolete attributes from the raw content.
	 *
	 * @param WP_REST_Response $response Response.
	 * @return WP_REST_Response Response.
	 */
	public function filter_rest_prepare_post( WP_REST_Response $response ) {
		if ( isset( $response->data['content']['raw'] ) ) {
			$response->data['content']['raw'] = preg_replace_callback(
				'#(?P<block_comment>(?><!--\s*+wp:\w+.*?-->)\s*+)(?P<start_tag><[a-z][a-z0-9_:-]*+\s[^>]*+>)#s',
				function ( $matches ) {
					return $matches['block_comment'] . preg_replace( $this->get_obsolete_attribute_pattern(), '', $matches['start_tag'] );
				},
				$response->data['content']['raw']
			);
		}
		return $response;
	}
}
PK.3Y��:���bunyad-amp/src/Option.php<?php
/**
 * Interface Option.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP;

/**
 * An interface to share knowledge about options stored in the AMP Options Manager.
 *
 * @package AmpProject\AmpWP
 * @since 2.0
 * @internal
 */
interface Option {

	/**
	 * Serve all templates as AMP regardless of what is being queried.
	 *
	 * Default value: true
	 *
	 * @var string
	 */
	const ALL_TEMPLATES_SUPPORTED = 'all_templates_supported';

	/**
	 * List of JSON objects that should be injected into the <amp-analytics> component.
	 *
	 * @see https://developers.google.com/analytics/devguides/collection/amp-analytics/
	 *
	 * Default value: []
	 *
	 * @var string
	 */
	const ANALYTICS = 'analytics';

	/**
	 * Persist the fact that the transient caching of stylesheets needs to be disabled.
	 *
	 * @var string
	 */
	const DISABLE_CSS_TRANSIENT_CACHING = 'amp_css_transient_monitor_disable_caching';

	/**
	 * Indicate the structure for paired AMP URLs.
	 *
	 * Default value: 'query_var'
	 *
	 * @var string
	 */
	const PAIRED_URL_STRUCTURE = 'paired_url_structure';

	/**
	 * Query var paired URL structure.
	 *
	 * This is the default, where all AMP URLs end in `?amp=1`.
	 *
	 * @var string
	 */
	const PAIRED_URL_STRUCTURE_QUERY_VAR = 'query_var';

	/**
	 * Path suffix paired URL structure.
	 *
	 * This adds `/amp/` to all URLs, even pages and archives. This is a popular option for those who feel query params
	 * are bad for SEO.
	 *
	 * @var string
	 */
	const PAIRED_URL_STRUCTURE_PATH_SUFFIX = 'path_suffix';

	/**
	 * Legacy transitional paired URL structure.
	 *
	 * This involves using `?amp` for all paired AMP URLs.
	 *
	 * @var string
	 */
	const PAIRED_URL_STRUCTURE_LEGACY_TRANSITIONAL = 'legacy_transitional';

	/**
	 * Legacy transitional paired URL structure.
	 *
	 * This involves using `/amp/` for all non-hierarchical post URLs which lack endpoints or query vars, or else using
	 * the same `?amp` as used by legacy transitional.
	 *
	 * @var string
	 */
	const PAIRED_URL_STRUCTURE_LEGACY_READER = 'legacy_reader';

	/**
	 * Redirect mobile visitors to the AMP version of a page when the site is in Transitional or Reader mode.
	 *
	 * Default value: false
	 *
	 * @var string
	 */
	const MOBILE_REDIRECT = 'mobile_redirect';

	/**
	 * The list of post types that have support for AMP.
	 *
	 * The provided value should be an array of WordPress post-type slugs.
	 *
	 * Default value: [ 'post' ]
	 *
	 * @var string
	 */
	const SUPPORTED_POST_TYPES = 'supported_post_types';

	/**
	 * List of WordPress template conditionals to define what templates are supported by AMP.
	 *
	 * Default value: [ 'is_singular' ]
	 *
	 * @var string
	 */
	const SUPPORTED_TEMPLATES = 'supported_templates';

	/**
	 * The template mode that is being used for AMP support.
	 *
	 * Currently valid values are:
	 * - AMP_Theme_Support::STANDARD_MODE_SLUG
	 * - AMP_Theme_Support::TRANSITIONAL_MODE_SLUG
	 * - AMP_Theme_Support::READER_MODE_SLUG
	 *
	 * Default value: AMP_Theme_Support::READER_MODE_SLUG
	 *
	 * @var string
	 */
	const THEME_SUPPORT = 'theme_support';

	/**
	 * The slug of the theme selected to be used on AMP pages in reader mode.
	 *
	 * Default value: legacy
	 *
	 * @var string
	 */
	const READER_THEME = 'reader_theme';

	/**
	 * Theme support features from the primary theme.
	 *
	 * When using a Reader theme, the theme support features from the primary theme are stored in this option so that
	 * they will be available when the Reader theme is active.
	 *
	 * @var string
	 */
	const PRIMARY_THEME_SUPPORT = 'primary_theme_support';

	/**
	 * The key of the option storing whether the setup wizard has been completed.
	 *
	 * @var string
	 */
	const PLUGIN_CONFIGURED = 'plugin_configured';

	/**
	 * The key of the option storing whether to delete AMP data upon uninstalling the plugin.
	 *
	 * @var string
	 */
	const DELETE_DATA_AT_UNINSTALL = 'delete_data_at_uninstall';

	/**
	 * The key of the option storing whether to use native img tag instead of amp-img tag.
	 *
	 * @var string
	 */
	const USE_NATIVE_IMG_TAG = 'use_native_img_tag';

	/**
	 * Cached slug when it is defined late.
	 *
	 * @var string
	 */
	const LATE_DEFINED_SLUG = 'late_defined_slug';

	/**
	 * Suppressed plugins
	 *
	 * @var string
	 */
	const SUPPRESSED_PLUGINS = 'suppressed_plugins';

	/**
	 * Suppressed plugins, last version.
	 *
	 * @var string
	 */
	const SUPPRESSED_PLUGINS_LAST_VERSION = 'last_version';

	/**
	 * Suppressed plugins, timestamp.
	 *
	 * @var string
	 */
	const SUPPRESSED_PLUGINS_TIMESTAMP = 'timestamp';

	/**
	 * Suppressed plugins, username.
	 *
	 * @var string
	 */
	const SUPPRESSED_PLUGINS_USERNAME = 'username';


	/**
	 * Option key for enabling sandboxing.
	 *
	 * @var string
	 */
	const SANDBOXING_ENABLED = 'sandboxing_enabled';

	/**
	 * Option key for sandboxing level.
	 *
	 * @var string
	 */
	const SANDBOXING_LEVEL = 'sandboxing_level';

	/**
	 * Version of the AMP plugin for which the options were last saved.
	 *
	 * This allows for recognizing updates and triggering update-specific logic.
	 *
	 * @var string
	 */
	const VERSION = 'version';

	// ---------------------- Deprecated options down below ---------------------- //

	/**
	 * Whether to accept or reject sanitization results by default.
	 *
	 * @deprecated Removed with version 1.4.0
	 *
	 * @var string
	 */
	const AUTO_ACCEPT_SANITIZATION = 'auto_accept_sanitization';

	/**
	 * Whether the AMP stories experience is enabled.
	 *
	 * @deprecated Removed with version 1.5.0
	 *
	 * @var string
	 */
	const ENABLE_AMP_STORIES = 'enable_amp_stories';

	/**
	 * Whether responses should be statically cached.
	 *
	 * @deprecated Removed with version 1.5.0
	 *
	 * @var string
	 */
	const ENABLE_RESPONSE_CACHING = 'enable_response_caching';

	/**
	 * List of AMP experiences that are currently active.
	 *
	 * @deprecated Removed with version 1.5.0
	 *
	 * @var string
	 */
	const EXPERIENCES = 'experiences';

	/**
	 * Base URL to use when exporting a story to the file system.
	 *
	 * @deprecated Removed with version 1.5.0
	 *
	 * @var string
	 */
	const STORY_EXPORT_BASE_URL = 'story_export_base_url';

	/**
	 * Settings for the AMP stories experience.
	 *
	 * @deprecated Removed with version 1.5.0
	 *
	 * @var string
	 */
	const STORY_SETTINGS = 'story_settings';

	/**
	 * Version string at which the story templates were generated and persisted.
	 *
	 * This allows for recognizing story template updates and triggering update-specific logic.
	 *
	 * @deprecated Removed with version 1.5.0
	 *
	 * @var string
	 */
	const STORY_TEMPLATES_VERSION = 'story_templates_version';
}
PK.3Y+�b�++(bunyad-amp/src/OptionsRESTController.php<?php
/**
 * Rest endpoint for fetching and updating plugin options from admin screens.
 *
 * @package AMP
 * @since 2.0
 */

namespace AmpProject\AmpWP;

use AMP_Options_Manager;
use AMP_Post_Type_Support;
use AMP_Theme_Support;
use AmpProject\AmpWP\Admin\OnboardingWizardSubmenu;
use AmpProject\AmpWP\Admin\ReaderThemes;
use AmpProject\AmpWP\Infrastructure\Delayed;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;
use WP_Error;
use WP_REST_Controller;
use WP_REST_Request;
use WP_REST_Response;
use WP_REST_Server;

/**
 * OptionsRESTController class.
 *
 * @since 2.0
 * @internal
 */
final class OptionsRESTController extends WP_REST_Controller implements Delayed, Service, Registerable {

	/**
	 * Key for a preview permalink added to the endpoint data.
	 *
	 * @var string
	 */
	const PREVIEW_PERMALINK = 'preview_permalink';

	/**
	 * Key for suppressible plugins data added to the endpoint.
	 *
	 * @var string
	 */
	const SUPPRESSIBLE_PLUGINS = 'suppressible_plugins';

	/**
	 * Key for post type data.
	 *
	 * @var string
	 */
	const SUPPORTABLE_POST_TYPES = 'supportable_post_types';

	/**
	 * Key for supportable templates data.
	 *
	 * @var string
	 */
	const SUPPORTABLE_TEMPLATES = 'supportable_templates';

	/**
	 * Key for the read-only property providing a link to the onboarding wizard if available.
	 *
	 * @var string
	 */
	const ONBOARDING_WIZARD_LINK = 'onboarding_wizard_link';

	/**
	 * Key for the read-only customizer link property.
	 *
	 * @var string
	 */
	const CUSTOMIZER_LINK = 'customizer_link';

	/**
	 * Reader themes provider class.
	 *
	 * @var ReaderThemes
	 */
	private $reader_themes;

	/**
	 * PluginSuppression instance.
	 *
	 * @var PluginSuppression
	 */
	private $plugin_suppression;

	/**
	 * Cached results of get_item_schema.
	 *
	 * @var array
	 */
	protected $schema;

	/**
	 * Get the action to use for registering the service.
	 *
	 * @return string Registration action to use.
	 */
	public static function get_registration_action() {
		return 'rest_api_init';
	}

	/**
	 * Constructor.
	 *
	 * @param ReaderThemes      $reader_themes Reader themes helper class instance.
	 * @param PluginSuppression $plugin_suppression An instance of the PluginSuppression class.
	 */
	public function __construct( ReaderThemes $reader_themes, PluginSuppression $plugin_suppression ) {
		$this->namespace          = 'amp/v1';
		$this->rest_base          = 'options';
		$this->reader_themes      = $reader_themes;
		$this->plugin_suppression = $plugin_suppression;
	}

	/**
	 * Registers all routes for the controller.
	 */
	public function register() {
		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base,
			[
				[
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => [ $this, 'get_items' ],
					'args'                => [],
					'permission_callback' => [ $this, 'get_items_permissions_check' ],
				],
				[
					'methods'             => WP_REST_Server::EDITABLE,
					'callback'            => [ $this, 'update_items' ],
					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::EDITABLE ),
					'permission_callback' => [ $this, 'get_items_permissions_check' ],
				],
				'schema' => [ $this, 'get_public_item_schema' ],
			]
		);
	}

	/**
	 * Checks whether the current user has permission to manage options.
	 *
	 * @param  WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has permission; WP_Error object otherwise.
	 */
	public function get_items_permissions_check( $request ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
		if ( ! current_user_can( 'manage_options' ) ) {
			return new WP_Error(
				'amp_rest_cannot_manage_options',
				__( 'Sorry, you are not allowed to manage options for the AMP plugin for WordPress.', 'amp' ),
				[ 'status' => rest_authorization_required_code() ]
			);
		}

		return true;
	}

	/**
	 * Retrieves all AMP plugin options.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_items( $request ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
		$options    = AMP_Options_Manager::get_options();
		$properties = $this->get_item_schema()['properties'];

		$options = wp_array_slice_assoc( $options, array_keys( $properties ) );

		// Add the preview permalink. The permalink can't be handled via AMP_Options_Manager::get_options because
		// amp_admin_get_preview_permalink calls AMP_Options_Manager::get_options, leading to infinite recursion.
		$options[ self::PREVIEW_PERMALINK ] = amp_admin_get_preview_permalink();

		$options[ self::SUPPRESSIBLE_PLUGINS ]   = $this->plugin_suppression->get_suppressible_plugins_with_details();
		$options[ self::SUPPORTABLE_POST_TYPES ] = array_map(
			static function( $slug ) {
				$post_type                 = (array) get_post_type_object( $slug );
				$post_type['supports_amp'] = post_type_supports( $post_type['name'], AMP_Post_Type_Support::SLUG );
				return $post_type;
			},
			AMP_Post_Type_Support::get_eligible_post_types()
		);

		$options[ self::SUPPORTABLE_TEMPLATES ] = $this->get_nested_supportable_templates( AMP_Theme_Support::get_supportable_templates() );

		$options[ Option::SUPPRESSED_PLUGINS ] = $this->plugin_suppression->prepare_suppressed_plugins_for_response( $options[ Option::SUPPRESSED_PLUGINS ] );

		$options[ self::ONBOARDING_WIZARD_LINK ] = get_admin_url( null, add_query_arg( [ 'page' => OnboardingWizardSubmenu::SCREEN_ID ], 'admin.php' ) );

		$options[ self::CUSTOMIZER_LINK ] = amp_get_customizer_url();

		/**
		 * Filters options for services to add additional REST items.
		 *
		 * @internal
		 *
		 * @param array $service_options REST Options for Services.
		 */
		$service_options = apply_filters( 'amp_rest_options', [] );
		if ( ! is_array( $service_options ) ) {
			$service_options = [];
		}

		$options = array_merge(
			$options,
			$service_options
		);

		return rest_ensure_response( $options );
	}

	/**
	 * Provides a hierarchical array of supportable templates.
	 *
	 * @param array[]     $supportable_templates Template options.
	 * @param string|null $parent_template_id    The parent to provide templates for.
	 * @return array[] Supportable templates with nesting.
	 */
	private function get_nested_supportable_templates( $supportable_templates, $parent_template_id = null ) {
		$nested_supportable_templates = [];

		foreach ( $supportable_templates as $id => $supportable_template ) {
			if (
				$parent_template_id ?
					empty( $supportable_template['parent'] ) || $parent_template_id !== $supportable_template['parent']
					:
					! empty( $supportable_template['parent'] )
			) {
				continue;
			}

			// Skip showing an option if it doesn't have a label.
			if ( empty( $supportable_template['label'] ) ) {
				continue;
			}

			$supportable_template['id']       = $id;
			$supportable_template['children'] = $this->get_nested_supportable_templates( $supportable_templates, $id );

			// Omit obsolete properties.
			unset(
				$supportable_template['supported'],
				$supportable_template['user_supported'],
				$supportable_template['immutable']
			);

			$nested_supportable_templates[] = $supportable_template;
		}

		return $nested_supportable_templates;
	}

	/**
	 * Updates AMP plugin options.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function update_items( $request ) {
		$params = $request->get_params();

		AMP_Options_Manager::update_options( wp_array_slice_assoc( $params, array_keys( $this->get_item_schema()['properties'] ) ) );

		return rest_ensure_response( $this->get_items( $request ) );
	}

	/**
	 * Retrieves the schema for plugin options provided by the endpoint.
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( ! $this->schema ) {
			$this->schema = [
				'$schema'    => 'http://json-schema.org/draft-04/schema#',
				'title'      => 'amp-wp-options',
				'type'       => 'object',
				'properties' => [
					// Note: The sanitize_callback from AMP_Options_Manager::register_settings() is applying to this option.
					Option::THEME_SUPPORT            => [
						'type' => 'string',
						'enum' => [
							AMP_Theme_Support::READER_MODE_SLUG,
							AMP_Theme_Support::STANDARD_MODE_SLUG,
							AMP_Theme_Support::TRANSITIONAL_MODE_SLUG,
						],
					],
					Option::READER_THEME             => [
						'type'        => 'string',
						'arg_options' => [
							'validate_callback' => function ( $value ) {
								// Note: The validate_callback is used instead of enum in order to prevent leaking the list of themes.
								return $this->reader_themes->theme_data_exists( $value );
							},
						],
					],
					Option::MOBILE_REDIRECT          => [
						'type'    => 'boolean',
						'default' => false,
					],
					self::PREVIEW_PERMALINK          => [
						'type'     => 'string',
						'readonly' => true,
						'format'   => 'url',
					],
					Option::PLUGIN_CONFIGURED        => [
						'type'    => 'boolean',
						'default' => false,
					],
					Option::ALL_TEMPLATES_SUPPORTED  => [
						'type' => 'boolean',
					],
					Option::SUPPRESSED_PLUGINS       => [
						'type' => 'object',
					],
					self::SUPPRESSIBLE_PLUGINS       => [
						'type'     => 'object',
						'readonly' => true,
					],
					Option::SUPPORTED_TEMPLATES      => [
						'type'  => 'array',
						'items' => [
							'type' => 'string',
						],
					],
					Option::SUPPORTED_POST_TYPES     => [
						'type'  => 'array',
						'items' => [
							'type' => 'string',
						],
					],
					Option::ANALYTICS                => [
						'type' => 'object',
					],
					Option::DELETE_DATA_AT_UNINSTALL => [
						'type'    => 'boolean',
						'default' => true,
					],
					Option::USE_NATIVE_IMG_TAG       => [
						'type'    => 'boolean',
						'default' => false,
					],
					self::SUPPORTABLE_POST_TYPES     => [
						'type'     => 'array',
						'readonly' => true,
					],
					self::SUPPORTABLE_TEMPLATES      => [
						'type'     => 'array',
						'readonly' => true,
					],
					self::ONBOARDING_WIZARD_LINK     => [
						'type'     => 'url',
						'readonly' => true,
					],
					self::CUSTOMIZER_LINK            => [
						'type'     => 'url',
						'readonly' => true,
					],
				],
			];

			/**
			 * Filters schema for services to add additional items.
			 *
			 * @internal
			 *
			 * @param array $schema Schema.
			 */
			$services_schema = apply_filters( 'amp_rest_options_schema', [] );
			if ( ! is_array( $services_schema ) ) {
				$services_schema = [];
			}

			$this->schema['properties'] = array_merge(
				$this->schema['properties'],
				$services_schema
			);
		}

		return $this->schema;
	}
}
PK.3Yu���� bunyad-amp/src/PairedRouting.php<?php
/**
 * Class PairedRouting.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP;

use AMP_Options_Manager;
use AMP_Theme_Support;
use AmpProject\AmpWP\DevTools\CallbackReflection;
use AMP_Post_Type_Support;
use AmpProject\AmpWP\Infrastructure\Injector;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;
use AmpProject\AmpWP\Admin\ReaderThemes;
use AmpProject\AmpWP\PairedUrlStructure\LegacyReaderUrlStructure;
use AmpProject\AmpWP\PairedUrlStructure\LegacyTransitionalUrlStructure;
use AmpProject\AmpWP\PairedUrlStructure\QueryVarUrlStructure;
use AmpProject\AmpWP\PairedUrlStructure\PathSuffixUrlStructure;
use WP_Query;
use WP_Rewrite;
use WP;
use WP_Hook;
use WP_Post;
use WP_Term;
use WP_Term_Query;
use WP_User;

/**
 * Service for routing users to and from paired AMP URLs.
 *
 * @package AmpProject\AmpWP
 * @since 2.1
 * @internal
 */
final class PairedRouting implements Service, Registerable {

	/**
	 * Paired URL structures.
	 *
	 * Mapping of the option key to the corresponding paired URL structure class.
	 *
	 * @var string[]
	 */
	const PAIRED_URL_STRUCTURES = [
		Option::PAIRED_URL_STRUCTURE_QUERY_VAR           => QueryVarUrlStructure::class,
		Option::PAIRED_URL_STRUCTURE_PATH_SUFFIX         => PathSuffixUrlStructure::class,
		Option::PAIRED_URL_STRUCTURE_LEGACY_TRANSITIONAL => LegacyTransitionalUrlStructure::class,
		Option::PAIRED_URL_STRUCTURE_LEGACY_READER       => LegacyReaderUrlStructure::class,
	];

	/**
	 * Custom paired URL structure.
	 *
	 * This involves a site adding the necessary filters to implement their own paired URL structure.
	 *
	 * @var string
	 */
	const PAIRED_URL_STRUCTURE_CUSTOM = 'custom';

	/**
	 * Key for AMP paired examples.
	 *
	 * @see amp_get_slug()
	 * @var string
	 */
	const PAIRED_URL_EXAMPLES = 'paired_url_examples';

	/**
	 * Key for the AMP slug.
	 *
	 * @see amp_get_slug()
	 * @var string
	 */
	const AMP_SLUG = 'amp_slug';

	/**
	 * REST API field name for entities already using the AMP slug as name.
	 *
	 * @see amp_get_slug()
	 * @var string
	 */
	const ENDPOINT_PATH_SLUG_CONFLICTS = 'endpoint_path_slug_conflicts';

	/**
	 * REST API field name for whether permalinks are being used in rewrite rules.
	 *
	 * @see WP_Rewrite::using_permalinks()
	 * @var string
	 */
	const REWRITE_USING_PERMALINKS = 'rewrite_using_permalinks';

	/**
	 * Key for the custom paired structure sources.
	 *
	 * @var string
	 */
	const CUSTOM_PAIRED_ENDPOINT_SOURCES = 'custom_paired_endpoint_sources';

	/**
	 * Action which is triggered when the late-defined slug needs to be updated in options.
	 *
	 * @var string
	 */
	const ACTION_UPDATE_LATE_DEFINED_SLUG_OPTION = 'amp_update_late_defined_slug_option';

	/**
	 * Paired URL service.
	 *
	 * @var PairedUrl
	 */
	private $paired_url;

	/**
	 * Paired URL structure.
	 *
	 * @var PairedUrlStructure
	 */
	private $paired_url_structure;

	/**
	 * Callback reflection.
	 *
	 * @var CallbackReflection
	 */
	private $callback_reflection;

	/**
	 * AMP slug customization watcher.
	 *
	 * @var AmpSlugCustomizationWatcher
	 */
	private $amp_slug_customization_watcher;

	/**
	 * Plugin registry.
	 *
	 * @var PluginRegistry
	 */
	private $plugin_registry;

	/**
	 * Injector.
	 *
	 * @var Injector
	 */
	private $injector;

	/**
	 * Whether the request had the /amp/ endpoint suffix.
	 *
	 * @var bool
	 */
	private $did_request_endpoint;

	/**
	 * Current nesting level for the request.
	 *
	 * This is used to capture cases where `WP::parse_request()` is called from inside of a `request`
	 * filter, a case of a nested/recursive request. It is similar in concept to `ob_get_level()` for
	 * output buffering.
	 *
	 * @var int
	 */
	private $current_request_nesting_level = 0;

	/**
	 * Original environment variables that were rewritten before parsing the request.
	 *
	 * @see PairedRouting::detect_endpoint_in_environment()
	 * @see PairedRouting::restore_path_endpoint_in_environment()
	 * @var array
	 */
	private $suspended_environment_variables = [];

	/**
	 * PairedRouting constructor.
	 *
	 * @param Injector                    $injector                       Injector.
	 * @param CallbackReflection          $callback_reflection            Callback reflection.
	 * @param PluginRegistry              $plugin_registry                Plugin registry.
	 * @param PairedUrl                   $paired_url                     Paired URL service.
	 * @param AmpSlugCustomizationWatcher $amp_slug_customization_watcher AMP slug customization watcher.
	 */
	public function __construct( Injector $injector, CallbackReflection $callback_reflection, PluginRegistry $plugin_registry, PairedUrl $paired_url, AmpSlugCustomizationWatcher $amp_slug_customization_watcher ) {
		$this->injector                       = $injector;
		$this->callback_reflection            = $callback_reflection;
		$this->plugin_registry                = $plugin_registry;
		$this->paired_url                     = $paired_url;
		$this->amp_slug_customization_watcher = $amp_slug_customization_watcher;
	}

	/**
	 * Register.
	 */
	public function register() {
		add_filter( 'amp_rest_options_schema', [ $this, 'filter_rest_options_schema' ] );
		add_filter( 'amp_rest_options', [ $this, 'filter_rest_options' ] );

		add_filter( 'amp_default_options', [ $this, 'filter_default_options' ], 10, 2 );
		add_filter( 'amp_options_updating', [ $this, 'sanitize_options' ], 10, 2 );

		add_action( self::ACTION_UPDATE_LATE_DEFINED_SLUG_OPTION, [ $this, 'update_late_defined_slug_option' ] );
		add_action( AmpSlugCustomizationWatcher::LATE_DETERMINATION_ACTION, [ $this, 'check_stale_late_defined_slug_option' ] );

		add_action( 'template_redirect', [ $this, 'redirect_extraneous_paired_endpoint' ], 9 );

		// Priority 7 needed to run before PluginSuppression::initialize() at priority 8.
		add_action( 'plugins_loaded', [ $this, 'initialize_paired_request' ], 7 );
	}

	/**
	 * Get the late defined slug, or null if it was not defined late.
	 *
	 * @return string|null Slug or null.
	 */
	public function get_late_defined_slug() {
		return $this->amp_slug_customization_watcher->did_customize_late() ? amp_get_slug() : null;
	}

	/**
	 * Update late-defined slug option.
	 */
	public function update_late_defined_slug_option() {
		AMP_Options_Manager::update_option( Option::LATE_DEFINED_SLUG, $this->get_late_defined_slug() );
	}

	/**
	 * Check whether the late-defined slug option is stale and a single event needs to be scheduled to update it.
	 */
	public function check_stale_late_defined_slug_option() {
		$late_defined_slug = $this->get_late_defined_slug();
		if ( AMP_Options_Manager::get_option( Option::LATE_DEFINED_SLUG ) !== $late_defined_slug ) {
			wp_schedule_single_event( time(), self::ACTION_UPDATE_LATE_DEFINED_SLUG_OPTION );
		}
	}

	/**
	 * Get the paired URL structure.
	 *
	 * @return PairedUrlStructure Paired URL structure.
	 */
	public function get_paired_url_structure() {
		if ( ! $this->paired_url_structure instanceof PairedUrlStructure ) {
			/**
			 * Filters to allow a custom paired URL structure to be used.
			 *
			 * @param string $structure_class Paired URL structure class.
			 */
			$structure_class = apply_filters( 'amp_custom_paired_url_structure', null );

			if ( ! $structure_class || ! is_subclass_of( $structure_class, PairedUrlStructure::class ) ) {
				$structure_slug = AMP_Options_Manager::get_option( Option::PAIRED_URL_STRUCTURE );
				if ( array_key_exists( $structure_slug, self::PAIRED_URL_STRUCTURES ) ) {
					$structure_class = self::PAIRED_URL_STRUCTURES[ $structure_slug ];
				} else {
					$structure_class = QueryVarUrlStructure::class;
				}
			}

			$this->paired_url_structure = $this->injector->make( $structure_class );
		}
		return $this->paired_url_structure;
	}

	/**
	 * Filter the REST options schema to add items.
	 *
	 * @param array $schema Schema.
	 * @return array Schema.
	 */
	public function filter_rest_options_schema( $schema ) {
		return array_merge(
			$schema,
			[
				Option::PAIRED_URL_STRUCTURE       => [
					'type' => 'string',
					'enum' => array_keys( self::PAIRED_URL_STRUCTURES ),
				],
				self::PAIRED_URL_EXAMPLES          => [
					'type'     => 'object',
					'readonly' => true,
				],
				self::AMP_SLUG                     => [
					'type'     => 'string',
					'readonly' => true,
				],
				self::ENDPOINT_PATH_SLUG_CONFLICTS => [
					'type'     => 'object',
					'readonly' => true,
				],
				self::REWRITE_USING_PERMALINKS     => [
					'type'     => 'boolean',
					'readonly' => true,
				],
			]
		);
	}

	/**
	 * Filter the REST options to add items.
	 *
	 * @param array $options Options.
	 * @return array Options.
	 */
	public function filter_rest_options( $options ) {
		$options[ self::AMP_SLUG ] = amp_get_slug();

		if ( $this->has_custom_paired_url_structure() ) {
			$options[ Option::PAIRED_URL_STRUCTURE ] = self::PAIRED_URL_STRUCTURE_CUSTOM;
		} else {
			$options[ Option::PAIRED_URL_STRUCTURE ] = AMP_Options_Manager::get_option( Option::PAIRED_URL_STRUCTURE );

			// Handle edge case where an unrecognized paired URL structure was saved.
			if ( ! in_array( $options[ Option::PAIRED_URL_STRUCTURE ], array_keys( self::PAIRED_URL_STRUCTURES ), true ) ) {
				$defaults = $this->filter_default_options( [], $options );

				$options[ Option::PAIRED_URL_STRUCTURE ] = $defaults[ Option::PAIRED_URL_STRUCTURE ];
			}
		}

		$options[ self::PAIRED_URL_EXAMPLES ] = $this->get_paired_url_examples();

		$options[ self::CUSTOM_PAIRED_ENDPOINT_SOURCES ] = $this->get_custom_paired_structure_sources();

		$options[ self::ENDPOINT_PATH_SLUG_CONFLICTS ] = $this->get_endpoint_path_slug_conflicts();

		$options[ self::REWRITE_USING_PERMALINKS ] = $this->is_using_permalinks();

		return $options;
	}

	/**
	 * Get the entities that are already using the AMP slug.
	 *
	 * @return array|null Conflict data or null if there are no conflicts.
	 * @global WP_Rewrite $wp_rewrite
	 */
	public function get_endpoint_path_slug_conflicts() {
		global $wp_rewrite;

		$conflicts = [];
		$amp_slug  = amp_get_slug();

		$post_query = new WP_Query(
			[
				'post_type'      => 'any',
				'name'           => $amp_slug,
				'posts_per_page' => 100,
			]
		);
		if ( $post_query->post_count > 0 ) {
			$conflicts['posts'] = array_map(
				static function ( WP_Post $post ) {
					$post_type = get_post_type_object( $post->post_type );
					return [
						'id'        => $post->ID,
						'edit_link' => get_edit_post_link( $post->ID, 'raw' ),
						'title'     => $post->post_title,
						'post_type' => $post->post_type,
						'label'     => isset( $post_type->labels->singular_name )
									? $post_type->labels->singular_name
									: null,
					];
				},
				$post_query->posts
			);
		}

		$term_query = new WP_Term_Query(
			[
				'slug'       => $amp_slug,
				'hide_empty' => false,
			]
		);
		if ( $term_query->terms ) {
			$conflicts['terms'] = array_map(
				static function ( WP_Term $term ) {
					$taxonomy = get_taxonomy( $term->taxonomy );
					return [
						'id'        => $term->term_id,
						'edit_link' => get_edit_term_link( $term->term_id, $term->taxonomy ),
						'taxonomy'  => $term->taxonomy,
						'name'      => $term->name,
						'label'     => isset( $taxonomy->labels->singular_name )
									? $taxonomy->labels->singular_name
									: null,
					];
				},
				$term_query->terms
			);
		}

		$user = get_user_by( 'slug', $amp_slug );
		if ( $user instanceof WP_User ) {
			$conflicts['user'] = [
				'id'        => $user->ID,
				'edit_link' => get_edit_user_link( $user->ID ),
				'name'      => $user->display_name,
			];
		}

		foreach ( get_post_types( [], 'objects' ) as $post_type ) {
			if (
				$amp_slug === $post_type->query_var
				||
				( isset( $post_type->rewrite['slug'] ) && $post_type->rewrite['slug'] === $amp_slug )
			) {
				$conflicts['post_type'] = [
					'name'  => $post_type->name,
					'label' => isset( $post_type->labels->name )
							? $post_type->labels->name
							: null,
				];
				break;
			}
		}

		foreach ( get_taxonomies( [], 'objects' ) as $taxonomy ) {
			if (
				$amp_slug === $taxonomy->query_var
				||
				( isset( $taxonomy->rewrite['slug'] ) && $taxonomy->rewrite['slug'] === $amp_slug )
			) {
				$conflicts['taxonomy'] = [
					'name'  => $taxonomy->name,
					'label' => isset( $taxonomy->labels->name )
							? $taxonomy->labels->name
							: null,

				];
				break;
			}
		}

		foreach ( $wp_rewrite->endpoints as $endpoint ) {
			if ( isset( $endpoint[1] ) && $amp_slug === $endpoint[1] ) {
				$conflicts['rewrite'][] = 'endpoint';
				break;
			}
		}
		foreach (
			[
				'author_base',
				'comments_base',
				'search_base',
				'pagination_base',
				'feed_base',
				'comments_pagination_base',
			]
			as
			$key
		) {
			if ( isset( $wp_rewrite->$key ) && $amp_slug === $wp_rewrite->$key ) {
				$conflicts['rewrite'][] = $key;
			}
		}

		if ( empty( $conflicts ) ) {
			return null;
		}

		return $conflicts;
	}

	/**
	 * Add paired hooks.
	 */
	public function initialize_paired_request() {
		if ( amp_is_canonical() ) {
			return;
		}

		// Run necessary logic to properly route a request using the registered paired URL structures.
		$this->detect_endpoint_in_environment();
		add_filter( 'do_parse_request', [ $this, 'extract_endpoint_from_environment_before_parse_request' ], PHP_INT_MAX );
		add_filter( 'request', [ $this, 'filter_request_after_endpoint_extraction' ] );
		add_action( 'parse_request', [ $this, 'restore_path_endpoint_in_environment' ], defined( 'PHP_INT_MIN' ) ? PHP_INT_MIN : ~PHP_INT_MAX ); // phpcs:ignore PHPCompatibility.Constants.NewConstants.php_int_minFound

		// Reserve the 'amp' slug for paired URL structures that use paths.
		if ( $this->is_using_path_suffix() ) {
			// Note that the wp_unique_term_slug filter does not work in the same way. It will only be applied if there
			// is actually a duplicate, whereas the wp_unique_post_slug filter applies regardless.
			add_filter( 'wp_unique_post_slug', [ $this, 'filter_unique_post_slug' ], 10, 4 );
		}

		add_action( 'parse_query', [ $this, 'correct_query_when_is_front_page' ] );
		add_action( 'wp', [ $this, 'add_paired_request_hooks' ] );
		add_action( 'admin_notices', [ $this, 'add_permalink_settings_notice' ] );
	}

	/**
	 * Determine whether the paired URL structure is using a path suffix (including the legacy Reader structure).
	 *
	 * @return bool
	 */
	public function is_using_path_suffix() {
		return in_array(
			AMP_Options_Manager::get_option( Option::PAIRED_URL_STRUCTURE ),
			[
				Option::PAIRED_URL_STRUCTURE_PATH_SUFFIX,
				Option::PAIRED_URL_STRUCTURE_LEGACY_READER,
			],
			true
		);
	}

	/**
	 * Detect the paired endpoint from the PATH_INFO or REQUEST_URI.
	 *
	 * This is necessary to avoid needing to rely on WordPress's rewrite rules to identify AMP requests.
	 * Rewrite rules are not suitable because rewrite endpoints can't be used across all URLs,
	 * and the request is parsed too late in order to switch to the Reader theme.
	 *
	 * The environment variables containing the endpoint are scrubbed of it during `WP::parse_request()`
	 * by means of the `PairedRouting::extract_endpoint_from_environment_before_parse_request()` method which runs
	 * at the `do_parse_request` filter.
	 *
	 * @see PairedRouting::extract_endpoint_from_environment_before_parse_request()
	 */
	public function detect_endpoint_in_environment() {
		$this->did_request_endpoint = false;

		// Detect and purge the AMP endpoint from the request.
		foreach ( [ 'REQUEST_URI', 'PATH_INFO' ] as $var_name ) {
			if ( empty( $_SERVER[ $var_name ] ) ) {
				continue;
			}

			$paired_url_structure = $this->get_paired_url_structure();

			// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
			$old_path = wp_unslash( $_SERVER[ $var_name ] ); // Because of wp_magic_quotes().
			if ( ! $paired_url_structure->has_endpoint( $old_path ) ) {
				continue;
			}

			$new_path = $paired_url_structure->remove_endpoint( $old_path );

			$this->suspended_environment_variables[ $var_name ] = [ $old_path, $new_path ];

			$this->did_request_endpoint = true;
		}
	}

	/**
	 * Override environment before parsing the request.
	 *
	 * This happens at the beginning of `WP::parse_request()` and then it is reset when it finishes
	 * via the `PairedRouting::restore_path_endpoint_in_environment()` method at the `parse_request`
	 * action.
	 *
	 * @see WP::parse_request()
	 *
	 * @param bool $do_parse_request Whether or not to parse the request.
	 * @return bool Passed-through argument.
	 */
	public function extract_endpoint_from_environment_before_parse_request( $do_parse_request ) {
		// If request parsing was aborted, then there's nothing for us to do.
		if ( ! $do_parse_request ) {
			return $do_parse_request;
		}

		// Only do something if doing the outermost request. Note that this function runs with the
		// latest priority in order to make sure that any other `do_parse_request` filter will have
		// already applied, and thus we know that the request is indeed going to be parsed.
		if (
			$this->did_request_endpoint
			&&
			0 === $this->current_request_nesting_level
		) {
			foreach ( $this->suspended_environment_variables as $var_name => list( , $new_path ) ) {
				$_SERVER[ $var_name ] = wp_slash( $new_path ); // Because of wp_magic_quotes().
			}
		}

		// Increase the nesting level so we can prevent calling ourselves for any recursive calls
		// to `WP::parse_request()` during the `request` filter.
		$this->current_request_nesting_level++;

		return $do_parse_request;
	}

	/**
	 * Filter the request to add the AMP query var if endpoint was detected in the environment.
	 *
	 * @param array $query_vars Query vars.
	 * @return array Query vars.
	 */
	public function filter_request_after_endpoint_extraction( $query_vars ) {
		if ( $this->did_request_endpoint ) {
			$query_vars[ amp_get_slug() ] = true;
		}
		return $query_vars;
	}

	/**
	 * Restore the path endpoint in environment.
	 *
	 * @see PairedRouting::detect_endpoint_in_environment()
	 *
	 * @param WP $wp WP object.
	 */
	public function restore_path_endpoint_in_environment( WP $wp ) {
		// Since the request has finished the parsing which was detected above in the
		// `PairedRouting::extract_endpoint_from_environment_before_parse_request()`
		// method, now decrement the level.
		$this->current_request_nesting_level--;

		// Only run for the outermost/root request when an AMP endpoint was requested.
		if (
			! $this->did_request_endpoint
			||
			0 !== $this->current_request_nesting_level
		) {
			return;
		}
		foreach ( $this->suspended_environment_variables as $var_name => list( $old_path, ) ) {
			$_SERVER[ $var_name ] = wp_slash( $old_path ); // Because of wp_magic_quotes().
		}
		$this->suspended_environment_variables = [];

		// In case a plugin is looking at $wp->request to see if it is AMP, ensure the path endpoint is added.
		// WordPress is not including it because it was removed in extract_endpoint_from_environment_before_parse_request.

		$request_path = '/';
		if ( $wp->request ) {
			$request_path .= trailingslashit( $wp->request );
		}
		$endpoint_url = $this->add_endpoint( $request_path );
		$request_path = wp_parse_url( $endpoint_url, PHP_URL_PATH );
		$wp->request  = trim( $request_path, '/' );
	}

	/**
	 * Filters the post slug to prevent conflicting with the 'amp' slug.
	 *
	 * @see wp_unique_post_slug()
	 *
	 * @param string $slug        Slug.
	 * @param int    $post_id     Post ID.
	 * @param string $post_status The post status.
	 * @param string $post_type   Post type.
	 * @return string Slug.
	 * @global \wpdb $wpdb WP DB.
	 */
	public function filter_unique_post_slug( $slug, $post_id, /** @noinspection PhpUnusedParameterInspection */ $post_status, $post_type ) {
		global $wpdb;

		$amp_slug = amp_get_slug();
		if ( $amp_slug !== $slug ) {
			return $slug;
		}

		$suffix = 2;
		do {
			$alt_slug   = "$slug-$suffix";
			$slug_check = $wpdb->get_var( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Logic adapted from wp_unique_post_slug().
				$wpdb->prepare(
					"SELECT COUNT(*) FROM $wpdb->posts WHERE post_name = %s AND post_type = %s AND ID != %d LIMIT 1",
					$alt_slug,
					$post_type,
					$post_id
				)
			);
			$suffix++;
		} while ( $slug_check );
		$slug = $alt_slug;

		return $slug;
	}

	/**
	 * Add hooks based for AMP pages and other hooks for non-AMP pages.
	 */
	public function add_paired_request_hooks() {
		if ( $this->has_endpoint() ) {
			add_filter( 'old_slug_redirect_url', [ $this, 'maybe_add_paired_endpoint' ], 1000 );
			add_filter( 'redirect_canonical', [ $this, 'maybe_add_paired_endpoint' ], 1000 );

			if ( $this->is_using_path_suffix() ) {
				// Filter priority of 0 to purge /amp/ before other filters manipulate it.
				add_filter( 'get_pagenum_link', [ $this, 'filter_get_pagenum_link' ], 0 );
				add_filter( 'redirect_canonical', [ $this, 'filter_redirect_canonical_to_fix_cpage_requests' ], 0 );
			}
		} else {
			add_action( 'wp_head', 'amp_add_amphtml_link' );
		}
	}

	/**
	 * Fix pagenum link when using a path suffix.
	 *
	 * When paired AMP URLs end in /amp/, on the blog index page a call to `the_posts_pagination()` will result in
	 * unexpected links being added to the page. For example, `get_pagenum_link(2)` will result in `/blog/amp/page/2/`
	 * instead of the expected `/blog/page/2/amp/`. And then, when on the 2nd page of results (`/blog/page/2/amp/`), a
	 * call to `get_pagenum_link(3)` will result in an even more unexpected link pointing to `/blog/page/2/amp/page/3/`
	 * instead of `/blog/page/3/amp/`, whereas `get_pagenum_link(1)` will return `/blog/page/2/amp/` as opposed to the
	 * expected `/blog/amp/`. Note that `get_pagenum_link()` is used as the `base` for `paginate_links()` in
	 * `get_the_posts_pagination()`, and it uses as its base `remove_query_arg('paged')` which returns the `REQUEST_URI`.
	 *
	 * @see get_pagenum_link()
	 * @see get_the_posts_pagination()
	 *
	 * @param string $link Pagenum link.
	 * @return string Fixed pagenum link.
	 * @global WP_Rewrite $wp_rewrite
	 */
	public function filter_get_pagenum_link( $link ) {
		global $wp_rewrite;

		// Only relevant when using permalinks.
		if ( ! $wp_rewrite instanceof WP_Rewrite || ! $wp_rewrite->using_permalinks() ) {
			return $link;
		}

		$delimiter = ':';
		$pattern   = $delimiter;

		// If the current page is a paged request (e.g. /page/2/), then we need to first strip that out from the link.
		if ( is_paged() ) {
			$pattern .= sprintf(
				'/%s/%d',
				preg_quote( $wp_rewrite->pagination_base, $delimiter ),
				get_query_var( 'paged' )
			);
		}

		// Now we remove the AMP path segment followed by any additional paged path segments, if they are present.
		// This matches paths like:
		// * /blog/amp/
		// * /blog/amp/page/2/
		// As well as allowing for the lack of a trailing slash and/or the presence of query args and/or a hash target.
		$pattern .= sprintf(
			'/%s((/%s/\d+)?/?(\?.*?)?(#.*)?)$',
			preg_quote( amp_get_slug(), ':' ),
			preg_quote( $wp_rewrite->pagination_base, ':' )
		);

		$pattern .= $delimiter;

		return preg_replace(
			$pattern,
			'$1',
			$link
		);
	}

	/**
	 * Add notice to permalink settings screen for where to customize the paired URL structure.
	 */
	public function add_permalink_settings_notice() {
		if ( 'options-permalink' !== get_current_screen()->id ) {
			return;
		}
		?>
		<div class="notice notice-info">
			<p>
				<?php
				echo wp_kses(
					sprintf(
						/* translators: %s is the URL to the settings screen */
						__( 'To customize the structure of the paired AMP URLs (given the site is not using the Standard template mode), go to the <a href="%s">Paired URL Structure</a> section on the AMP settings screen.', 'amp' ),
						esc_url( admin_url( add_query_arg( 'page', AMP_Options_Manager::OPTION_NAME, 'admin.php' ) ) . '#paired-url-structure' )
					),
					[ 'a' => array_fill_keys( [ 'href' ], true ) ]
				);
				?>
			</p>
		</div>
		<?php
	}

	/**
	 * Fix up canonical redirect URLs to put the comments pagination base in the right place.
	 *
	 * @param string $redirect_url Canonical redirect URL.
	 * @return string Updated canonical URL.
	 * @global WP_Rewrite $wp_rewrite
	 */
	public function filter_redirect_canonical_to_fix_cpage_requests( $redirect_url ) {
		global $wp_rewrite;

		if (
			! empty( $redirect_url )
			&&
			get_query_var( 'cpage' )
			&&
			$wp_rewrite instanceof WP_Rewrite
			&&
			! empty( $wp_rewrite->comments_pagination_base )
		) {
			$amp_slug = amp_get_slug();
			$regex    = sprintf(
				":/(%s-[0-9]+)/%s/\\1(/*)($|\?|\#):",
				preg_quote( $wp_rewrite->comments_pagination_base, ':' ),
				preg_quote( $amp_slug, ':' )
			);

			$redirect_url = preg_replace( $regex, "/\\1/{$amp_slug}\\2\\3", $redirect_url );
		}

		return $redirect_url;
	}

	/**
	 * Determine whether permalinks are being used.
	 *
	 * @return bool If permalinks are enabled.
	 */
	public function is_using_permalinks() {
		return ! empty( get_option( 'permalink_structure' ) );
	}

	/**
	 * Add default option.
	 *
	 * @param array $defaults Default options.
	 * @param array $options  Current options.
	 * @return array Defaults.
	 */
	public function filter_default_options( $defaults, $options ) {
		$value = Option::PAIRED_URL_STRUCTURE_QUERY_VAR;

		if (
			isset( $options[ Option::VERSION ], $options[ Option::THEME_SUPPORT ], $options[ Option::READER_THEME ] )
			&&
			version_compare( $options[ Option::VERSION ], '2.1', '<' )
		) {
			if (
				AMP_Theme_Support::READER_MODE_SLUG === $options[ Option::THEME_SUPPORT ]
				&&
				ReaderThemes::DEFAULT_READER_THEME === $options[ Option::READER_THEME ]
				&&
				$this->is_using_permalinks()
			) {
				$value = Option::PAIRED_URL_STRUCTURE_LEGACY_READER;
			} elseif ( AMP_Theme_Support::STANDARD_MODE_SLUG !== $options[ Option::THEME_SUPPORT ] ) {
				$value = Option::PAIRED_URL_STRUCTURE_LEGACY_TRANSITIONAL;
			}
		}

		$defaults[ Option::PAIRED_URL_STRUCTURE ] = $value;
		$defaults[ Option::LATE_DEFINED_SLUG ]    = null;

		return $defaults;
	}

	/**
	 * Sanitize options.
	 *
	 * Note that in a REST API context this is redundant with the enum defined in the schema.
	 *
	 * @param array $options     Existing options with already-sanitized values for updating.
	 * @param array $new_options Unsanitized options being submitted for updating.
	 * @return array Sanitized options.
	 */
	public function sanitize_options( $options, $new_options ) {
		// Cache the AMP slug in options when it is defined late so that it can be referred to early at plugins_loaded.
		$options[ Option::LATE_DEFINED_SLUG ] = $this->get_late_defined_slug();

		if (
			isset( $new_options[ Option::PAIRED_URL_STRUCTURE ] )
			&&
			in_array( $new_options[ Option::PAIRED_URL_STRUCTURE ], array_keys( self::PAIRED_URL_STRUCTURES ), true )
		) {
			$options[ Option::PAIRED_URL_STRUCTURE ] = $new_options[ Option::PAIRED_URL_STRUCTURE ];
		}
		return $options;
	}

	/**
	 * Determine a given URL is for a paired AMP request.
	 *
	 * If no URL is provided, then it will check whether WordPress has already parsed the AMP
	 * query var as part of the request. If still not present, then it will get the current URL
	 * and check if it has an endpoint.
	 *
	 * @param string $url URL to examine. If empty, will use the current URL.
	 * @return bool True if the AMP query parameter is set with the required value, false if not.
	 * @global WP_Query $wp_the_query
	 */
	public function has_endpoint( $url = '' ) {
		if ( empty( $url ) ) {
			// This is a shortcut to avoid needing to re-parse the current URL.
			if ( $this->did_request_endpoint ) {
				return true;
			}

			$slug = amp_get_slug();

			// On frontend, continue support case where the query var has been (manually) set.
			global $wp_the_query;
			if (
				$wp_the_query instanceof WP_Query
				&&
				false !== $wp_the_query->get( $slug, false )
			) {
				return true;
			}

			// When not in a frontend context (e.g. the Customizer), the query var is the only possibility.
			if (
				is_admin()
				&&
				isset( $_GET[ $slug ] ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			) {
				return true;
			}

			$url = amp_get_current_url();
		}
		return $this->get_paired_url_structure()->has_endpoint( $url );
	}

	/**
	 * Turn a given URL into a paired AMP URL.
	 *
	 * @param string $url URL.
	 * @return string AMP URL.
	 */
	public function add_endpoint( $url ) {
		return $this->get_paired_url_structure()->add_endpoint( $url );
	}

	/**
	 * Remove the paired AMP endpoint from a given URL.
	 *
	 * @param string $url URL.
	 * @return string URL with AMP stripped.
	 */
	public function remove_endpoint( $url ) {
		return $this->get_paired_url_structure()->remove_endpoint( $url );
	}

	/**
	 * Determine whether a custom paired URL structure is being used.
	 *
	 * @return bool Whether custom paired URL structure is used.
	 */
	public function has_custom_paired_url_structure() {
		return has_filter( 'amp_custom_paired_url_structure' );
	}

	/**
	 * Get paired URLs for all available structures.
	 *
	 * @param string $url URL.
	 * @return array Paired URLs keyed by structure.
	 */
	public function get_all_structure_paired_urls( $url ) {
		$paired_urls = [];
		foreach ( self::PAIRED_URL_STRUCTURES as $structure_slug => $structure_class ) {
			/** @var PairedUrlStructure $structure */
			$structure = $this->injector->make( $structure_class );

			$paired_urls[ $structure_slug ] = $structure->add_endpoint( $url );
		}

		if ( $this->has_custom_paired_url_structure() ) {
			$paired_urls[ self::PAIRED_URL_STRUCTURE_CUSTOM ] = $this->add_endpoint( $url );
		}

		return $paired_urls;
	}

	/**
	 * Get paired URL examples.
	 *
	 * @return array[] Keys are the structures, values are arrays of paired URLs using the structure.
	 */
	public function get_paired_url_examples() {
		$supported_post_types     = AMP_Post_Type_Support::get_supported_post_types();
		$hierarchical_post_types  = array_intersect(
			$supported_post_types,
			get_post_types( [ 'hierarchical' => true ] )
		);
		$chronological_post_types = array_intersect(
			$supported_post_types,
			get_post_types( [ 'hierarchical' => false ] )
		);

		$examples = [];
		foreach ( [ $chronological_post_types, $hierarchical_post_types ] as $post_types ) {
			if ( empty( $post_types ) ) {
				continue;
			}
			$posts = get_posts(
				[
					'post_type'   => $post_types,
					'post_status' => 'publish',
				]
			);
			foreach ( $posts as $post ) {
				if ( count( AMP_Post_Type_Support::get_support_errors( $post ) ) !== 0 ) {
					continue;
				}
				$paired_urls = $this->get_all_structure_paired_urls( get_permalink( $post ) );
				foreach ( $paired_urls as $structure => $paired_url ) {
					$examples[ $structure ][] = $paired_url;
				}
				continue 2;
			}
		}
		return $examples;
	}

	/**
	 * Get sources for the custom paired URL structure (if any).
	 *
	 * @return array Sources. Each item is an array with keys for type, slug, and name.
	 * @global WP_Hook[] $wp_filter Filter registry.
	 */
	public function get_custom_paired_structure_sources() {
		global $wp_filter;
		if ( ! $this->has_custom_paired_url_structure() ) {
			return [];
		}

		if ( ! isset( $wp_filter['amp_custom_paired_url_structure'] ) ) {
			return []; // @codeCoverageIgnore
		}
		$hook = $wp_filter['amp_custom_paired_url_structure'];
		if ( ! $hook instanceof WP_Hook ) {
			return []; // @codeCoverageIgnore
		}

		$sources = [];
		foreach ( $hook->callbacks as $callbacks ) {
			foreach ( $callbacks as $callback ) {
				$source = $this->callback_reflection->get_source( $callback['function'] );
				if ( ! $source ) {
					continue;
				}

				$type = $source['type'];
				$slug = $source['name'];
				$name = null;

				if ( 'plugin' === $type ) {
					$plugin = $this->plugin_registry->get_plugin_from_slug( $slug );
					if ( isset( $plugin['data']['Name'] ) ) {
						$name = $plugin['data']['Name'];
					}
				} elseif ( 'theme' === $type ) {
					$theme = wp_get_theme( $slug );
					if ( ! $theme->errors() ) {
						$name = $theme->get( 'Name' );
					}
				}

				$source = compact( 'type', 'slug', 'name' );
				if ( in_array( $source, $sources, true ) ) {
					continue;
				}

				$sources[] = $source;
			}
		}

		return $sources;
	}

	/**
	 * Fix up WP_Query for front page when amp query var is present.
	 *
	 * Normally the front page would not get served if a query var is present other than preview, page, paged, and cpage.
	 *
	 * @see WP_Query::parse_query()
	 * @link https://github.com/WordPress/wordpress-develop/blob/0baa8ae85c670d338e78e408f8d6e301c6410c86/src/wp-includes/class-wp-query.php#L951-L971
	 *
	 * @param WP_Query $query Query.
	 */
	public function correct_query_when_is_front_page( WP_Query $query ) {
		$is_front_page_query = (
			$query->is_main_query()
			&&
			$query->is_home()
			&&
			// Is AMP endpoint.
			false !== $query->get( amp_get_slug(), false )
			&&
			// Is query not yet fixed up to be front page.
			! $query->is_front_page()
			&&
			// Is showing pages on front.
			'page' === get_option( 'show_on_front' )
			&&
			// Has page on front set.
			get_option( 'page_on_front' )
			&&
			// See line in WP_Query::parse_query() at <https://github.com/WordPress/wordpress-develop/blob/0baa8ae/src/wp-includes/class-wp-query.php#L961>.
			0 === count( array_diff( array_keys( wp_parse_args( $query->query ) ), [ amp_get_slug(), 'preview', 'page', 'paged', 'cpage' ] ) )
		);
		if ( $is_front_page_query ) {
			$query->is_home     = false;
			$query->is_page     = true;
			$query->is_singular = true;
			$query->set( 'page_id', get_option( 'page_on_front' ) );
		}
	}

	/**
	 * Add the paired endpoint to a URL.
	 *
	 * This is used with the `redirect_canonical` and `old_slug_redirect_url` filters to prevent removal of the `/amp/`
	 * endpoint.
	 *
	 * @param string|false $url URL. This may be false if another filter is attempting to stop redirection.
	 * @return string Resulting URL with AMP endpoint added if needed.
	 */
	public function maybe_add_paired_endpoint( $url ) {
		if ( $url ) {
			$url = $this->add_endpoint( $url );
		}
		return $url;
	}

	/**
	 * Redirect to remove the extraneous/erroneous paired endpoint from the requested URI.
	 *
	 * When in Standard mode, the behavior is to strip off /amp/ if it is present on the requested URL when it is a 404.
	 * This ensures that sites switching to AMP-first will have their /amp/ URLs redirecting to the non-AMP, rather than
	 * attempting to redirect to some post that has 'amp' beginning their post slug. Otherwise, in Standard mode a
	 * redirect happens to remove the 'amp' query var if present.
	 *
	 * When in a Paired AMP mode, this handles a case where an AMP page that has a link to `./amp/` can inadvertently
	 * cause an infinite URL space such as `./amp/amp/amp/amp/…`. It also handles the case where the AMP endpoint is
	 * requested but AMP is not available.
	 */
	public function redirect_extraneous_paired_endpoint() {
		$requested_url = amp_get_current_url();
		$redirect_url  = null;

		$has_path_suffix = $this->paired_url->has_path_suffix( $requested_url );
		$has_query_var   = $this->paired_url->has_query_var( $requested_url );
		if ( amp_is_canonical() ) {
			if ( is_404() && $has_path_suffix ) {
				// Always redirect to strip off /amp/ in the case of a 404.
				$redirect_url = $this->paired_url->remove_path_suffix( $requested_url );
			} elseif ( $has_query_var ) {
				// Strip extraneous query var from AMP-first sites.
				$redirect_url = $this->paired_url->remove_query_var( $requested_url );
			}
		} else {
			// Calling wp_old_slug_redirect() here is to account for a site that does not have AMP enabled for the 404 template.
			// This method is running at template_redirect priority 9 in order to run before redirect_canonical() which runs at
			// priority 10. However, wp_old_slug_redirect() also runs at priority 10 (normally), and it needs to run before the
			// redirection happens here since it could be that the 404 template would actually not be getting served but rather
			// the user should be getting redirected to the new permalink where a singular template is served. For this reason,
			// wp_old_slug_redirect() is called just-in-time, and maybe_add_paired_endpoint is added as a filter for
			// old_slug_redirect_url which ensures that the AMP endpoint will persist the slug redirect.
			wp_old_slug_redirect(); // phpcs:ignore WordPressVIPMinimum.Functions.RestrictedFunctions.wp_old_slug_redirect_wp_old_slug_redirect

			if ( is_404() && $has_path_suffix ) {
				// To account for switching the paired URL structure from `/amp/` to `?amp=1`, add the query var if in Paired
				// AMP mode. Note this is not necessary to do when sites have switched from a query var to an endpoint suffix
				// because the query var will always be recognized whereas the reverse is not always true.
				// This also prevents an infinite URL space under /amp/ endpoint.
				$redirect_url = $this->add_endpoint( $this->paired_url->remove_path_suffix( $requested_url ) );
			} elseif ( $this->has_endpoint() && ! amp_is_available() ) {
				// Redirect to non-AMP URL if AMP is not available.
				$redirect_url = $this->remove_endpoint( $requested_url );
			}
		}

		if ( $redirect_url && $redirect_url !== $requested_url ) {
			$status_code = current_user_can( 'manage_options' ) ? 302 : 301;
			if ( wp_safe_redirect( $redirect_url, $status_code ) ) {
				exit; // @codeCoverageIgnore
			}
		}
	}
}
PK.3Y]]��bunyad-amp/src/PairedUrl.php<?php
/**
 * Class PairedUrl.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP;

use AmpProject\AmpWP\Infrastructure\Service;

/**
 * Service for manipulating a paired URL.
 *
 * @package AmpProject\AmpWP
 * @since 2.1
 */
final class PairedUrl implements Service {

	/**
	 * Strip paired query var.
	 *
	 * @param string $url URL (or REQUEST_URI).
	 * @return string URL.
	 */
	public function remove_query_var( $url ) {
		$url = remove_query_arg( amp_get_slug(), $url );
		$url = str_replace( '?#', '#', $url ); // See <https://core.trac.wordpress.org/ticket/44499>.
		return $url;
	}

	/**
	 * Determine whether the given URL has the endpoint suffix.
	 *
	 * @param string $url URL (or REQUEST_URI).
	 * @return bool Has endpoint suffix.
	 */
	public function has_path_suffix( $url ) {
		$path    = wp_parse_url( $url, PHP_URL_PATH );
		$pattern = sprintf(
			':/%s/?$:',
			preg_quote( amp_get_slug(), ':' )
		);

		return (bool) preg_match( $pattern, $path );
	}

	/**
	 * Strip paired endpoint suffix.
	 *
	 * @param string $url URL (or REQUEST_URI).
	 * @return string URL.
	 */
	public function remove_path_suffix( $url ) {
		return preg_replace(
			sprintf(
				':/%s(?=/?(\?|#|$)):',
				preg_quote( amp_get_slug(), ':' )
			),
			'',
			$url
		);
	}

	/**
	 * Determine whether the given URL has the query var.
	 *
	 * @param string $url URL (or REQUEST_URI).
	 * @return bool Has query var.
	 */
	public function has_query_var( $url ) {
		$parsed_url = wp_parse_url( $url );
		if ( ! empty( $parsed_url['query'] ) ) {
			$query_vars = [];
			wp_parse_str( $parsed_url['query'], $query_vars );
			if ( isset( $query_vars[ amp_get_slug() ] ) ) {
				return true;
			}
		}
		return false;
	}

	/**
	 * Get paired AMP URL using query var (`?amp=1`).
	 *
	 * @param string $url   URL (or REQUEST_URI).
	 * @param string $value Value. Defaults to 1.
	 * @return string AMP URL.
	 */
	public function add_query_var( $url, $value = '1' ) {
		return add_query_arg( amp_get_slug(), $value, $url );
	}

	/**
	 * Get paired AMP URL using a endpoint suffix.
	 *
	 * @todo The URL parsing and serialization logic here should ideally be put into a reusable class.
	 *
	 * @param string $url URL (or REQUEST_URI).
	 * @return string AMP URL.
	 */
	public function add_path_suffix( $url ) {
		$url = $this->remove_path_suffix( $url );

		$parsed_url = wp_parse_url( $url );
		if ( false === $parsed_url ) {
			$parsed_url = [];
		}

		$parsed_url = array_merge(
			wp_parse_url( home_url( '/' ) ),
			$parsed_url
		);

		if ( empty( $parsed_url['scheme'] ) ) {
			$parsed_url['scheme'] = is_ssl() ? 'https' : 'http';
		}
		if ( empty( $parsed_url['host'] ) ) {
			// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
			$parsed_url['host'] = ! empty( $_SERVER['HTTP_HOST'] ) ? wp_unslash( $_SERVER['HTTP_HOST'] ) : 'localhost';
		}

		$parsed_url['path']  = trailingslashit( $parsed_url['path'] );
		$parsed_url['path'] .= user_trailingslashit( amp_get_slug(), 'amp' );

		$amp_url = $parsed_url['scheme'] . '://';
		if ( ! empty( $parsed_url['user'] ) ) {
			$amp_url .= $parsed_url['user'];
			if ( ! empty( $parsed_url['pass'] ) ) {
				$amp_url .= ':' . $parsed_url['pass'];
			}
			$amp_url .= '@';
		}
		$amp_url .= $parsed_url['host'];
		if ( ! empty( $parsed_url['port'] ) ) {
			$amp_url .= ':' . $parsed_url['port'];
		}
		$amp_url .= $parsed_url['path'];
		if ( ! empty( $parsed_url['query'] ) ) {
			$amp_url .= '?' . $parsed_url['query'];
		}
		if ( ! empty( $parsed_url['fragment'] ) ) {
			$amp_url .= '#' . $parsed_url['fragment'];
		}

		return $amp_url;
	}
}
PK.3Yp���%bunyad-amp/src/PairedUrlStructure.php<?php
/**
 * Abstract class PairedUrlStructure.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP;

/**
 * Interface for classes that implement a PairedUrl.
 *
 * @package AmpProject\AmpWP
 * @since 2.1
 */
abstract class PairedUrlStructure {

	/**
	 * Paired URL service.
	 *
	 * @var PairedUrl
	 */
	protected $paired_url;

	/**
	 * PairedUrlStructure constructor.
	 *
	 * @param PairedUrl $paired_url Paired URL service.
	 */
	public function __construct( PairedUrl $paired_url ) {
		$this->paired_url = $paired_url;
	}

	/**
	 * Determine a given URL is for a paired AMP request.
	 *
	 * @param string $url URL (or REQUEST_URI).
	 * @return bool True if the URL has the paired endpoint.
	 */
	public function has_endpoint( $url ) {
		return $url !== $this->remove_endpoint( $url );
	}

	/**
	 * Turn a given URL into a paired AMP URL.
	 *
	 * @param string $url URL (or REQUEST_URI).
	 * @return string AMP URL.
	 */
	abstract public function add_endpoint( $url );

	/**
	 * Remove the paired AMP endpoint from a given URL.
	 *
	 * @param string $url URL (or REQUEST_URI).
	 * @return string URL with AMP stripped.
	 */
	abstract public function remove_endpoint( $url );
}
PK.3Y�Cp��!bunyad-amp/src/PluginRegistry.php<?php
/**
 * Class PluginRegistry.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP;

use AmpProject\AmpWP\Infrastructure\Service;

/**
 * Get information about plugins and their current status.
 *
 * @package AmpProject\AmpWP
 * @internal
 * @since 2.0
 */
final class PluginRegistry implements Service {

	/**
	 * Plugin folder.
	 *
	 * @var string
	 */
	private $plugin_folder = '';

	/**
	 * Get absolute path to plugin directory.
	 *
	 * @see WP_PLUGIN_DIR
	 * @return string Plugin directory.
	 */
	public function get_plugin_dir() {
		$plugin_dir = WP_PLUGIN_DIR;
		if ( $this->plugin_folder ) {
			$plugin_dir .= '/' . trim( $this->plugin_folder, '/' );
		}
		return $plugin_dir;
	}

	/**
	 * Get plugin slug from file.
	 *
	 * If the plugin file is in a directory, then the slug is just the directory name. Otherwise, if the file is not
	 * inside of a directory and is just a single-file plugin, then the slug is the filename of the PHP file.
	 *
	 * @see \WP_CLI\Utils\get_plugin_name()
	 *
	 * @param string $plugin_file Plugin file.
	 * @return string Plugin slug.
	 */
	public function get_plugin_slug_from_file( $plugin_file ) {
		return strtok( $plugin_file, '/' );
	}

	/**
	 * Get array of installed plugins, keyed by slug.
	 *
	 * @param bool $active_only Limit the returned plugins to just those which are active.
	 * @param bool $omit_core   Omit core plugins that should never be listed. These are in particular AMP and Gutenberg.
	 * @return array Plugins keyed by slug.
	 */
	public function get_plugins( $active_only = false, $omit_core = true ) {
		$active_plugins = get_option( 'active_plugins', [] );

		$plugins = [];
		foreach ( $this->get_plugins_data() as $plugin_file => $plugin ) {
			if ( $active_only && ! in_array( $plugin_file, $active_plugins, true ) ) {
				continue;
			}

			$plugin_slug = $this->get_plugin_slug_from_file( $plugin_file );

			/*
			 * When a plugin has a nested plugin, such as foo/foo.php also having foo/extra.php, discard the extra.php
			 * instance from the registry in favor of only keeping the "main" plugin file entry for foo.php. This is
			 * done because when the Reflection API is being used to determine which plugin a given piece of markup is
			 * coming from, it cannot absolutely determine which plugin file was responsible for including the PHP file
			 * that the function was defined inside of.
			 */
			if ( isset( $plugins[ $plugin_slug ] ) && basename( $plugins[ $plugin_slug ]['File'] ) === "{$plugin_slug}.php" ) {
				continue;
			}

			$plugins[ $plugin_slug ] = array_merge(
				[ 'File' => $plugin_file ], // PascalCase is used for consistency with the other keys.
				$plugin
			);
		}

		if ( $omit_core ) {
			unset( $plugins['amp'], $plugins['gutenberg'] );
		}

		return $plugins;
	}

	/**
	 * Find a plugin from a slug.
	 *
	 * A slug is a plugin directory name like 'amp' or if the plugin is just a single file, then the PHP file in
	 * the plugins directory.
	 *
	 * @param string $plugin_slug Plugin slug.
	 * @param bool   $must_use    Whether the slug is for a must-use plugin.
	 * @return array|null {
	 *     Plugin data if found, otherwise null.
	 *
	 *     @type string $name Plugin name (file).
	 *     @type array  $data Plugin data.
	 * }
	 */
	public function get_plugin_from_slug( $plugin_slug, $must_use = false ) {
		$plugins = $must_use ? $this->get_mu_plugins_data() : $this->get_plugins_data();
		if ( isset( $plugins[ $plugin_slug ] ) ) {
			return [
				'file' => $plugin_slug,
				'data' => $plugins[ $plugin_slug ],
			];
		}
		foreach ( $plugins as $plugin_file => $plugin_data ) {
			if ( strtok( $plugin_file, '/' ) === $plugin_slug ) {
				return [
					'file' => $plugin_file,
					'data' => $plugin_data,
				];
			}
		}
		return null;
	}

	/**
	 * Get the plugins data from WordPress.
	 *
	 * @return array[]
	 */
	private function get_plugins_data() {
		require_once ABSPATH . 'wp-admin/includes/plugin.php';
		return get_plugins(
			$this->plugin_folder ? '/' . trim( $this->plugin_folder, '/' ) : ''
		);
	}

	/**
	 * Gets the MU plugins on the site.
	 *
	 * @return array[]
	 */
	private function get_mu_plugins_data() {
		require_once ABSPATH . 'wp-admin/includes/plugin.php';
		return get_mu_plugins();
	}
}
PK.3Y
9�C�C$bunyad-amp/src/PluginSuppression.php<?php
/**
 * Class PluginSuppression.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP;

use AMP_Options_Manager;
use AMP_Theme_Support;
use AMP_Validation_Error_Taxonomy;
use AMP_Validation_Manager;
use AMP_Validated_URL_Post_Type;
use AmpProject\AmpWP\Admin\ReaderThemes;
use AmpProject\AmpWP\DevTools\CallbackReflection;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;
use WP_Block_Type_Registry;
use WP_Hook;
use WP_Term;
use WP_Widget;
use WP_User;

/**
 * Suppress plugins from running by removing their hooks and nullifying their shortcodes, widgets, and blocks.
 *
 * @package AmpProject\AmpWP
 * @internal
 * @since 2.0
 */
final class PluginSuppression implements Service, Registerable {

	/**
	 * Plugin registry to use.
	 *
	 * @var PluginRegistry
	 */
	private $plugin_registry;

	/**
	 * Callback reflector to use.
	 *
	 * @var CallbackReflection
	 */
	private $callback_reflection;

	/**
	 * Paired Routing.
	 *
	 * @var PairedRouting
	 */
	private $paired_routing;

	/**
	 * Original render callbacks for blocks.
	 *
	 * Populated via the `register_block_type_args` filter at the moment the block is first registered. This is useful
	 * to detect a suppressed plugin's blocks which had their `render_callback` wrapped by another function before
	 * plugin suppression is started at the `wp` action.
	 *
	 * @see gutenberg_current_parsed_block_tracking()
	 * @var array
	 */
	private $original_block_render_callbacks = [];

	/**
	 * Instantiate the plugin suppression service.
	 *
	 * @param PluginRegistry     $plugin_registry     Plugin registry to use.
	 * @param CallbackReflection $callback_reflection Callback reflector to use.
	 * @param PairedRouting      $paired_routing      Paired routing service to use.
	 */
	public function __construct( PluginRegistry $plugin_registry, CallbackReflection $callback_reflection, PairedRouting $paired_routing ) {
		$this->plugin_registry     = $plugin_registry;
		$this->callback_reflection = $callback_reflection;
		$this->paired_routing      = $paired_routing;
	}

	/**
	 * Register the service with the system.
	 */
	public function register() {
		add_filter( 'amp_default_options', [ $this, 'filter_default_options' ] );
		add_filter( 'amp_options_updating', [ $this, 'sanitize_options' ], 10, 2 );
		add_filter( 'plugin_row_meta', [ $this, 'filter_plugin_row_meta' ], 10, 2 );

		add_filter(
			'register_block_type_args',
			function ( $props, $block_name ) {
				if ( isset( $props['render_callback'] ) ) {
					$this->original_block_render_callbacks[ $block_name ] = $props['render_callback'];
				}
				return $props;
			},
			~PHP_INT_MAX,
			2
		);

		// Priority 8 needed to run before ReaderThemeLoader::override_theme() at priority 9.
		add_action( 'plugins_loaded', [ $this, 'initialize' ], 8 );
	}

	/**
	 * Initialize.
	 */
	public function initialize() {
		// When a Reader theme is selected and an AMP request is being made, start suppressing as early as possible.
		// This can be done because we know it is an AMP page due to the query parameter, but it also _has_ to be done
		// specifically for the case of accessing the AMP Customizer (in which customize.php is requested with the query
		// parameter) in order to prevent the registration of Customizer controls from suppressed plugins. Suppression
		// could be done early for Transitional mode as well since a query parameter is also used for frontend requests
		// but there is no similar need to suppress the registration of Customizer controls in Transitional mode since
		// there is no separate Customizer for AMP in Transitional mode (or legacy Reader mode).
		// @todo This check could be replaced with ( ! amp_is_canonical() && $this->paired_routing->has_endpoint() ).
		if ( $this->is_reader_theme_request() ) {
			$this->suppress_plugins();
		} else {
			$min_priority = defined( 'PHP_INT_MIN' ) ? PHP_INT_MIN : ~PHP_INT_MAX; // phpcs:ignore PHPCompatibility.Constants.NewConstants.php_int_minFound

			// In Standard mode we _have_ to wait for the wp action because with the absence of a query parameter
			// we have to rely on amp_is_request() and the WP_Query to determine whether a plugin should be suppressed.
			add_action( 'wp', [ $this, 'maybe_suppress_plugins' ], $min_priority );
		}
	}

	/**
	 * Is reader theme request.
	 *
	 * @return bool
	 */
	public function is_reader_theme_request() {
		return (
			AMP_Theme_Support::READER_MODE_SLUG === AMP_Options_Manager::get_option( Option::THEME_SUPPORT )
			&&
			ReaderThemes::DEFAULT_READER_THEME !== AMP_Options_Manager::get_option( Option::READER_THEME )
			&&
			$this->paired_routing->has_endpoint()
		);
	}

	/**
	 * Add default option.
	 *
	 * @param array $defaults Default options.
	 * @return array Defaults.
	 */
	public function filter_default_options( $defaults ) {
		$defaults[ Option::SUPPRESSED_PLUGINS ] = [];
		return $defaults;
	}

	/**
	 * Suppress plugins if on an AMP endpoint.
	 *
	 * @return bool Whether plugins are being suppressed.
	 */
	public function maybe_suppress_plugins() {
		if ( amp_is_request() ) {
			return $this->suppress_plugins();
		}
		return false;
	}

	/**
	 * Suppress plugins.
	 *
	 * @return bool Whether plugins are being suppressed.
	 */
	public function suppress_plugins() {
		$suppressed = AMP_Options_Manager::get_option( Option::SUPPRESSED_PLUGINS );
		if ( empty( $suppressed ) ) {
			return false;
		}

		$suppressed_plugin_slugs = array_keys( $suppressed );

		$this->suppress_hooks( $suppressed_plugin_slugs );
		$this->suppress_shortcodes( $suppressed_plugin_slugs );
		$this->suppress_blocks( $suppressed_plugin_slugs );
		$this->suppress_widgets( $suppressed_plugin_slugs );

		return true;
	}

	/**
	 * Sanitize options.
	 *
	 * @param array $options     Existing options with already-sanitized values for updating.
	 * @param array $new_options Unsanitized options being submitted for updating.
	 *
	 * @return array Sanitized options.
	 */
	public function sanitize_options( $options, $new_options ) {
		if ( ! isset( $new_options[ Option::SUPPRESSED_PLUGINS ] ) ) {
			return $options;
		}

		$option                    = $options[ Option::SUPPRESSED_PLUGINS ];
		$posted_suppressed_plugins = $new_options[ Option::SUPPRESSED_PLUGINS ];

		$plugins = $this->plugin_registry->get_plugins( true );
		foreach ( $posted_suppressed_plugins as $plugin_slug => $suppressed ) {
			if ( ! isset( $plugins[ $plugin_slug ] ) ) {
				unset( $option[ $plugin_slug ] );
				continue;
			}

			$suppressed = rest_sanitize_boolean( $suppressed );
			if ( isset( $option[ $plugin_slug ] ) && ! $suppressed ) {

				// Remove the plugin from being suppressed.
				unset( $option[ $plugin_slug ] );
			} elseif ( ! isset( $option[ $plugin_slug ] ) && $suppressed && array_key_exists( $plugin_slug, $plugins ) ) {
				$user = wp_get_current_user();

				$option[ $plugin_slug ] = [
					// Note that we store the version that was suppressed so that we can alert the user when to check again.
					Option::SUPPRESSED_PLUGINS_LAST_VERSION => $plugins[ $plugin_slug ]['Version'],
					Option::SUPPRESSED_PLUGINS_TIMESTAMP => time(),
					Option::SUPPRESSED_PLUGINS_USERNAME  => $user->ID ? $user->user_nicename : null,
				];
			}
		}

		$options[ Option::SUPPRESSED_PLUGINS ] = $option;

		return $options;
	}

	/**
	 * Provides validation errors for a plugin specified by slug.
	 *
	 * @param string $plugin_slug Plugin slug.
	 * @return array Validation errors.
	 */
	private function get_sorted_plugin_validation_errors( $plugin_slug ) {
		$errors_by_source = AMP_Validated_URL_Post_Type::get_recent_validation_errors_by_source();

		if ( ! isset( $errors_by_source['plugin'][ $plugin_slug ] ) ) {
			return [];
		}

		$validation_errors = $errors_by_source['plugin'][ $plugin_slug ];

		usort(
			$validation_errors,
			static function ( $a, $b ) {
				/** @var WP_Term */
				$a_term = $a['term'];

				/** @var WP_Term */
				$b_term = $b['term'];

				$a_reviewed = ( (int) $a_term->term_group & AMP_Validation_Error_Taxonomy::ACKNOWLEDGED_VALIDATION_ERROR_BIT_MASK );
				$b_reviewed = ( (int) $b_term->term_group & AMP_Validation_Error_Taxonomy::ACKNOWLEDGED_VALIDATION_ERROR_BIT_MASK );
				if ( $a_reviewed !== $b_reviewed ) {
					return (int) $a_reviewed - (int) $b_reviewed;
				}

				$a_removed = ( (int) $a_term->term_group & AMP_Validation_Error_Taxonomy::ACCEPTED_VALIDATION_ERROR_BIT_MASK );
				$b_removed = ( (int) $b_term->term_group & AMP_Validation_Error_Taxonomy::ACCEPTED_VALIDATION_ERROR_BIT_MASK );
				return (int) $a_removed - (int) $b_removed;
			}
		);

		// Because this data will be accessed via REST, add additional fields that are not easily rendered in JS.
		$validation_errors = array_map(
			static function( $validation_error ) {
				$term = $validation_error['term'];

				$validation_error['edit_url'] = admin_url(
					add_query_arg(
						[
							AMP_Validation_Error_Taxonomy::TAXONOMY_SLUG => $term->name,
							'post_type' => AMP_Validated_URL_Post_Type::POST_TYPE_SLUG,
						],
						'edit.php'
					)
				);

				$validation_error['title'] = AMP_Validation_Error_Taxonomy::get_error_title_from_code( $validation_error['data'] );

				$validation_error['is_removed']  = (bool) ( (int) $term->term_group & AMP_Validation_Error_Taxonomy::ACCEPTED_VALIDATION_ERROR_BIT_MASK );
				$validation_error['is_reviewed'] = (bool) ( (int) $term->term_group & AMP_Validation_Error_Taxonomy::ACKNOWLEDGED_VALIDATION_ERROR_BIT_MASK );
				$validation_error['tooltip']     = sprintf(
					/* translators: %1 is whether validation error is 'removed' or 'kept', %2 is whether validation error is 'reviewed' or 'unreviewed' */
					__( 'Invalid markup causing the validation error is %1$s and %2$s. See all validated URL(s) with this validation error.', 'amp' ),
					$validation_error['is_removed'] ? __( 'removed', 'amp' ) : __( 'kept', 'amp' ),
					$validation_error['is_reviewed'] ? __( 'reviewed', 'amp' ) : __( 'unreviewed', 'amp' )
				);

				return $validation_error;
			},
			$validation_errors
		);

		return $validation_errors;
	}

	/**
	 * Provides a keyed array of active plugins with keys being slugs and values being plugin info plus validation error details.
	 *
	 * Plugins are sorted by validation error count, in descending order.
	 *
	 * @return array Plugins.
	 */
	public function get_suppressible_plugins_with_details() {
		$plugins = [];
		foreach ( $this->plugin_registry->get_plugins( true ) as $slug => $plugin ) {
			$plugin['validation_errors'] = $this->get_sorted_plugin_validation_errors( $slug );
			$plugins[ $slug ]            = $plugin;
		}
		return $plugins;
	}

	/**
	 * Prepare suppressed plugins for response.
	 *
	 * Augment the suppressed plugins data with additional information.
	 *
	 * @param array $suppressed_plugins Suppressed plugins.
	 * @return array Prepared suppressed plugins.
	 */
	public function prepare_suppressed_plugins_for_response( $suppressed_plugins ) {
		return array_map(
			function ( $suppressed_plugin ) {
				if ( ! is_array( $suppressed_plugin ) ) {
					return $suppressed_plugin;
				}

				if ( isset( $suppressed_plugin['username'] ) ) {
					$username = $suppressed_plugin['username'];
					unset( $suppressed_plugin['username'] );
					$suppressed_plugin['user'] = $this->prepare_user_for_response( $username );
				}

				return $suppressed_plugin;
			},
			$suppressed_plugins
		);
	}

	/**
	 * Prepare user for response.
	 *
	 * @param string $username Username.
	 * @return array User data.
	 */
	private function prepare_user_for_response( $username ) {
		$response = [
			'slug' => $username,
		];

		$user = get_user_by( 'slug', $username );
		if ( $user ) {
			$response['name'] = $user->display_name;
		}

		return $response;
	}

	/**
	 * Suppress plugin hooks.
	 *
	 * @param string[] $suppressed_plugins Suppressed plugins.
	 * @global WP_Hook[] $wp_filter
	 */
	private function suppress_hooks( $suppressed_plugins ) {
		global $wp_filter;
		/** @var WP_Hook $filter */
		foreach ( $wp_filter as $tag => $filter ) {
			foreach ( $filter->callbacks as $priority => $prioritized_callbacks ) {
				foreach ( $prioritized_callbacks as $callback ) {
					if ( $this->is_callback_plugin_suppressed( $callback['function'], $suppressed_plugins ) ) {
						// Obtain the original function which is necessary to pass into remove_filter() so that the
						// expected key will be generated by _wp_filter_build_unique_id(). Alternatively, this could
						// just below do `unset( $filter->callbacks[ $priority ][ $function_key ] )` but it seems safer
						// to re-use all the existing logic in remove_filter().
						$original_function = $this->callback_reflection->get_unwrapped_callback( $callback['function'] );

						$filter->remove_filter( $tag, $original_function, $priority );
					}
				}
			}
		}
	}

	/**
	 * Suppress plugin shortcodes.
	 *
	 * @param string[] $suppressed_plugins Suppressed plugins.
	 * @global array $shortcode_tags
	 */
	private function suppress_shortcodes( $suppressed_plugins ) {
		global $shortcode_tags;

		foreach ( array_keys( $shortcode_tags ) as $tag ) {
			if ( $this->is_callback_plugin_suppressed( $shortcode_tags[ $tag ], $suppressed_plugins ) ) {
				add_shortcode( $tag, '__return_empty_string' );
			}
		}
	}

	/**
	 * Suppress plugin blocks.
	 *
	 * @todo What about static blocks added?
	 *
	 * @param string[] $suppressed_plugins Suppressed plugins.
	 */
	private function suppress_blocks( $suppressed_plugins ) {
		if ( ! class_exists( 'WP_Block_Type_Registry' ) ) {
			return;
		}

		$registry = WP_Block_Type_Registry::get_instance();

		foreach ( $registry->get_all_registered() as $block_type ) {
			if ( ! $block_type->is_dynamic() ) {
				continue;
			}

			if (
				$this->is_callback_plugin_suppressed( $block_type->render_callback, $suppressed_plugins )
				||
				(
					isset( $this->original_block_render_callbacks[ $block_type->name ] )
					&&
					$this->is_callback_plugin_suppressed( $this->original_block_render_callbacks[ $block_type->name ], $suppressed_plugins )
				)
			) {
				unset( $block_type->script, $block_type->style );
				$block_type->render_callback = '__return_empty_string';
			}
		}
	}

	/**
	 * Suppress plugin widgets.
	 *
	 * @see AMP_Validation_Manager::wrap_widget_callbacks() Which needs to run after this.
	 *
	 * @param string[] $suppressed_plugins Suppressed plugins.
	 * @global array $wp_registered_widgets
	 */
	private function suppress_widgets( $suppressed_plugins ) {
		global $wp_registered_widgets;
		foreach ( $wp_registered_widgets as &$registered_widget ) {
			if ( $this->is_callback_plugin_suppressed( $registered_widget['callback'], $suppressed_plugins ) ) {
				// This is primarily needed for widgets registered without WP_Widget.
				$registered_widget['callback'] = '__return_null';
			}
		}

		// The above will ensure that widgets registered via WP_Widget or wp_register_sidebar_widget() will both be
		// suppressed from being output. One additional case, which also applies to WP_Widget, is when the_widget()
		// is used to render a widget. For that, the 'widget_display_callback' filter below is used (in WP>=5.3).

		add_filter(
			'widget_display_callback',
			/**
			 * Prevent WP_Widgets from suppressed plugins from being rendered in sidebars and via the_widget().
			 *
			 * @param array     $instance   The current widget instance's settings.
			 * @param WP_Widget $widget_obj The current widget instance.
			 * @return array|false Instance or false if suppressed.
			 */
			function ( $instance, $widget_obj ) use ( $suppressed_plugins ) {
				if ( $this->is_callback_plugin_suppressed( [ $widget_obj, 'display_callback' ], $suppressed_plugins ) ) {
					$instance = false;
				}
				return $instance;
			},
			PHP_INT_MAX,
			2
		);
	}

	/**
	 * Determine whether callback is from a suppressed plugin.
	 *
	 * @param callable $callback           Callback.
	 * @param string[] $suppressed_plugins Suppressed plugins.
	 * @return bool Whether from suppressed plugin.
	 */
	private function is_callback_plugin_suppressed( $callback, $suppressed_plugins ) {
		$source = $this->callback_reflection->get_source( $callback );
		return (
			isset( $source['type'], $source['name'] ) &&
			'plugin' === $source['type'] &&
			in_array( $source['name'], $suppressed_plugins, true )
		);
	}

	/**
	 * Add meta if plugin is suppressed in AMP page.
	 *
	 * @param array  $plugin_meta An array of the plugin's metadata.
	 * @param string $plugin_file Path to the plugin file relative to the plugins directory.
	 *
	 * @return array An array of the plugin's metadata
	 */
	public function filter_plugin_row_meta( $plugin_meta, $plugin_file ) {

		// Do not show on the network plugins screen.
		if ( is_network_admin() ) {
			return $plugin_meta;
		}

		$suppressed_plugins = AMP_Options_Manager::get_option( 'suppressed_plugins' );
		$plugin_slug        = $this->plugin_registry->get_plugin_slug_from_file( $plugin_file );
		if ( isset( $suppressed_plugins[ $plugin_slug ] ) ) {
			$plugin_meta[] = sprintf(
				'<a href="%s" aria-label="%s">%s</a>',
				esc_url( admin_url( 'admin.php?page=amp-options' ) . '#plugin-suppression' ),
				esc_attr__( 'Visit AMP Settings', 'amp' ),
				esc_html__( 'Suppressed on AMP Pages', 'amp' )
			);
		}

		return $plugin_meta;
	}
}
PK.3Y�I��$$bunyad-amp/src/QueryVar.php<?php
/**
 * Interface QueryVar.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP;

/**
 * An interface to capture URL query vars used in the plugin.
 *
 * @package AmpProject\AmpWP
 * @since 2.0
 * @internal
 */
interface QueryVar {

	/**
	 * Query var used to signal the request for an AMP page.
	 *
	 * Historically this value may be filtered via `amp_query_var` or overridden via the `AMP_QUERY_VAR` constant. The
	 * value then was also used as an endpoint (`/amp/`) in addition to being used as a URL query var (`?amp`).
	 * Nevertheless, in 2.0 this will no longer be supported in the theme itself when a Reader theme is selected.
	 * Additionally, the logic for determining whether a request is for an AMP endpoint or not may also be arbitrarily
	 * overridden as of amp-wp#2204.
	 *
	 * @link https://github.com/ampproject/amp-wp/issues/2204
	 * @see amp_get_slug()
	 * @var string
	 */
	const AMP = 'amp';

	/**
	 * Query var used to signal the request for an non-AMP page.
	 *
	 * This is used in a paired mode (Transitional or Reader) in two ways:
	 *
	 * - To indicate that a mobile visitor should not be redirected to the AMP version. This is used in links from the
	 *   AMP version back to the non-AMP version to prevent redirection. The value for the query var in this case is
	 *   the NOAMP_MOBILE constant below.
	 * - To indicate that the AMP version should not even be made available when making a request. This is used when a
	 *   user had tried to access the AMP version but there were validation errors which have kept invalid markup,
	 *   causing the AMP version to not be available. In such case, non-authenticated users who cannot validate are then
	 *   redirected to the non-AMP version with this query var added, along the below NOAMP_AVAILABLE constant as the value.
	 *
	 * This has no effect on an AMP-first site (Standard mode).
	 *
	 * @var string
	 */
	const NOAMP = 'noamp';

	/**
	 * Value for the noamp query var to indicate that a mobile visitor should not be redirected to the AMP version of a page.
	 *
	 * @var string
	 */
	const NOAMP_MOBILE = 'mobile';

	/**
	 * Value for the noamp query var to indicate that AMP should be disabled entirely for a given request.
	 *
	 * @var string
	 */
	const NOAMP_AVAILABLE = 'available';

	/**
	 * Value for the query var that allows switching to verbose server-timing output.
	 *
	 * @var string
	 */
	const VERBOSE_SERVER_TIMING = 'amp_verbose_server_timing';

	/**
	 * Query parameter provided to customize.php to indicate that the preview should be loaded with an AMP URL.
	 *
	 * @var string
	 */
	const AMP_PREVIEW = 'amp_preview';

	/**
	 * Query parameter provided to Settings Screen to indicate that a scan should be automatically initiated if the results are stale.
	 *
	 * @var string
	 */
	const AMP_SCAN_IF_STALE = 'amp-scan-if-stale';
}
PK.3Y�+�k�0�0$bunyad-amp/src/ReaderThemeLoader.php<?php
/**
 * Class ReaderThemeLoader.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP;

use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;
use AMP_Options_Manager;
use AMP_Theme_Support;
use AmpProject\AmpWP\Admin\ReaderThemes;
use WP_Theme;
use WP_Customize_Manager;

/**
 * Switches to the designated Reader theme when template mode enabled and when requesting an AMP page.
 *
 * This class does not implement Conditional because other services need to always be able to access this
 * service in order to determine whether or a Reader theme is loaded, and if so, what the previously-active theme was.
 *
 * @package AmpProject\AmpWP
 * @since 2.0
 * @internal
 */
final class ReaderThemeLoader implements Service, Registerable {

	/**
	 * Paired routing service.
	 *
	 * @var PairedRouting
	 */
	private $paired_routing;

	/**
	 * Reader theme.
	 *
	 * @var WP_Theme|null
	 */
	private $reader_theme;

	/**
	 * Active theme.
	 *
	 * Theme which was active before switching to the Reader theme.
	 *
	 * @var WP_Theme
	 */
	private $active_theme;

	/**
	 * Whether the active theme was overridden with the Reader theme.
	 *
	 * @var bool
	 */
	private $theme_overridden = false;

	/**
	 * ReaderThemeLoader constructor.
	 *
	 * @param PairedRouting $paired_routing Paired routing service.
	 */
	public function __construct( PairedRouting $paired_routing ) {
		$this->paired_routing = $paired_routing;
	}

	/**
	 * Is Reader mode with a Reader theme selected.
	 *
	 * @param array $options Options to check. If omitted, the currently-saved options are used.
	 * @return bool Whether new Reader mode.
	 */
	public function is_enabled( $options = null ) {
		// If the theme was overridden then we know it is enabled. We can't check get_template() at this point because
		// it will be identical to $reader_theme.
		if ( $this->is_theme_overridden() ) {
			return true;
		}

		if ( null === $options ) {
			$options = AMP_Options_Manager::get_options();
		}

		// If Reader mode is not enabled, then a Reader theme is definitely not going to be served.
		if (
			! isset( $options[ Option::THEME_SUPPORT ] )
			||
			AMP_Theme_Support::READER_MODE_SLUG !== $options[ Option::THEME_SUPPORT ]
		) {
			return false;
		}

		// If the Legacy Reader mode is active, then a Reader theme is not going to be served.
		if ( ! isset( $options[ Option::READER_THEME ] ) ) {
			return false;
		}
		$reader_theme = $options[ Option::READER_THEME ];
		if ( ReaderThemes::DEFAULT_READER_THEME === $reader_theme ) {
			return false;
		}

		// If the Reader theme does not exist, then we cannot switch to the reader theme. The Legacy Reader theme will
		// be used as a fallback instead.
		if ( ! wp_get_theme( $reader_theme )->exists() ) {
			return false;
		}

		// Lastly, if the active theme is not the same as the reader theme, then we can switch to the reader theme.
		// Otherwise, the site should instead be in Transitional mode. Note that get_stylesheet() is used as opposed
		// to get_template() because the active theme should be allowed to be a child theme of a Reader theme.
		return get_stylesheet() !== $reader_theme;
	}

	/**
	 * Whether the active theme was overridden with the reader theme.
	 *
	 * @return bool Whether theme overridden.
	 */
	public function is_theme_overridden() {
		return $this->theme_overridden;
	}

	/**
	 * Register the service with the system.
	 *
	 * @return void
	 */
	public function register() {
		// The following needs to run at plugins_loaded because that is when _wp_customize_include runs. Otherwise, the
		// most logical action would be setup_theme.
		add_action( 'plugins_loaded', [ $this, 'override_theme' ], 9 );

		add_filter( 'wp_prepare_themes_for_js', [ $this, 'filter_wp_prepare_themes_to_indicate_reader_theme' ] );
		add_action( 'admin_print_footer_scripts-themes.php', [ $this, 'inject_theme_single_template_modifications' ] );
	}

	/**
	 * Filter themes for JS to remove action to delete the selected Reader theme and show a notice.
	 *
	 * @param array $prepared_themes Array of theme data.
	 * @return array Themes.
	 */
	public function filter_wp_prepare_themes_to_indicate_reader_theme( $prepared_themes ) {
		if ( ! $this->is_enabled() ) {
			return $prepared_themes;
		}

		$reader_theme_obj = $this->get_reader_theme();
		if ( ! $reader_theme_obj instanceof WP_Theme ) {
			return $prepared_themes;
		}
		$reader_theme = $reader_theme_obj->get_stylesheet();

		if ( isset( $prepared_themes[ $reader_theme ] ) ) {

			// Make sure the AMP Reader theme appears right after the active theme in the list.
			$stylesheet = get_stylesheet();
			if ( isset( $prepared_themes[ $stylesheet ] ) ) {
				$prepared_themes = array_merge(
					[
						$stylesheet   => $prepared_themes[ $stylesheet ],
						$reader_theme => $prepared_themes[ $reader_theme ],
					],
					$prepared_themes
				);
			}

			// Prevent Reader theme from being deleted.
			unset( $prepared_themes[ $reader_theme ]['actions']['delete'] );

			// Make sure the Customize link goes to AMP.
			$prepared_themes[ $reader_theme ]['actions']['customize'] = amp_get_customizer_url();

			// Force the theme to be styled as Active.
			$prepared_themes[ $reader_theme ]['active'] = true;

			// Make sure the hacked Backbone template will use the AMP action links.
			$prepared_themes[ $reader_theme ]['ampActiveReaderTheme'] = true;

			// Add AMP Reader theme notice.
			$prepared_themes[ $reader_theme ]['ampReaderThemeNotice'] = sprintf(
				wp_kses(
					/* translators: placeholder is link to AMP settings screen */
					__( 'This has been <a href="%s">selected</a> as the AMP Reader theme.', 'amp' ),
					[
						'a' => [ 'href' => true ],
					]
				),
				esc_url( add_query_arg( 'page', AMP_Options_Manager::OPTION_NAME, admin_url( 'admin.php' ) ) . '#reader-themes' )
			);
		}

		return $prepared_themes;
	}

	/**
	 * Inject new logic into the Backbone templates for rendering a theme lightbox.
	 *
	 * This is admittedly hacky, but WordPress doesn't provide a much better option.
	 */
	public function inject_theme_single_template_modifications() {
		if ( ! $this->is_enabled() ) {
			return;
		}

		$reader_theme = $this->get_reader_theme();
		if ( ! $reader_theme instanceof WP_Theme ) {
			return;
		}

		?>
		<script>
			(function( themeSingleTmpl ) {
				if ( ! themeSingleTmpl ) {
					return;
				}
				let text = themeSingleTmpl.text;

				text = text.replace(
					/(?=<p class="theme-description">)/,
					`
					<# if ( data.ampReaderThemeNotice ) { #>
						<div class="notice notice-info notice-alt inline">
							<p>{{{ data.ampReaderThemeNotice }}}</p><?php // phpcs:ignore WordPressVIPMinimum.Security.Mustache.OutputNotation -- Contains link and already sanitized with Kses. ?>
						</div>
					<# } #>
					`
				);

				// Inject our action links.
				text = text.replace(
					/(<div class="active-theme">)((?:.|\s)+?)(<\/div>)/,
					( match, startDiv, actionLinks, endDiv ) => {
						return `
							${startDiv}
							<# if ( data.ampActiveReaderTheme ) { #>
								<a href="{{ data.actions.customize }}" class="button button-primary customize load-customize hide-if-no-customize">
									<?php esc_html_e( 'Customize', 'default' ); ?>
								</a>
								<a href="<?php echo esc_url( add_query_arg( 'page', AMP_Options_Manager::OPTION_NAME, admin_url( 'admin.php' ) ) ); ?>" class="button button-secondary">
									<?php esc_html_e( 'AMP Settings', 'amp' ); ?>
								</a>
							<# } else { #>
								${actionLinks}
							<# } #>
							${endDiv}
						`;
					}
				);

				themeSingleTmpl.text = text;
			})( document.getElementById( 'tmpl-theme-single' ) );

			(function ( themeTmpl, ssrThemeNamePrefixElement ) {
				// First update the card that was rendered server-side in wp-admin/themes.php.
				if ( ssrThemeNamePrefixElement ) {
					ssrThemeNamePrefixElement.textContent = <?php echo wp_json_encode( _x( 'Reader:', 'prefix for theme card in list', 'amp' ) ); ?>;
				}

				// Then update the Mustache template so that future renders will also have the proper prefix.
				if ( themeTmpl ) {
					themeTmpl.text = themeTmpl.text.replace(
						/(<div class="theme-id-container">)(\s*<# if)/,
						function ( match, startDiv ) {
							return `
							${startDiv}
							<# if ( data.ampActiveReaderTheme ) { #>
								<h2 class="theme-name" id="{{ data.id }}-name">
									<span><?php echo esc_html( _x( 'Reader:', 'prefix for theme card in list', 'amp' ) ); ?></span> {{ data.name }}
								</h2>
							<# } else if
						`;
						}
					);
				}
			}) (
				document.getElementById( 'tmpl-theme' ),
				document.querySelector( <?php echo wp_json_encode( sprintf( '#%s-name > span', $reader_theme->get_stylesheet() ) ); ?> )
			);
		</script>
		<?php

	}

	/**
	 * Get reader theme.
	 *
	 * If the Reader template mode is enabled
	 *
	 * @return WP_Theme|null Theme if selected and no errors.
	 */
	public function get_reader_theme() {
		if ( $this->reader_theme instanceof WP_Theme ) {
			return $this->reader_theme;
		}

		$reader_theme_slug = AMP_Options_Manager::get_option( Option::READER_THEME );
		if ( ! $reader_theme_slug ) {
			return null;
		}

		$reader_theme = wp_get_theme( $reader_theme_slug );
		if ( $reader_theme->errors() ) {
			return null;
		}

		return $reader_theme;
	}

	/**
	 * Get active theme.
	 *
	 * The theme that was active before switching to the Reader theme.
	 *
	 * @return WP_Theme WP_Theme instance.
	 */
	public function get_active_theme() {
		return $this->active_theme;
	}

	/**
	 * Switch theme if in Reader mode, a Reader theme was selected, and the AMP query var is present.
	 *
	 * Note that AMP_Theme_Support will redirect to the non-AMP version if AMP is not available for the query.
	 *
	 * @see WP_Customize_Manager::start_previewing_theme() which provides for much of the inspiration here.
	 * @see switch_theme() which ensures the new theme includes the old theme's theme mods.
	 */
	public function override_theme() {
		$this->theme_overridden = false;

		if ( ! $this->is_enabled() || ! $this->paired_routing->has_endpoint() ) {
			return;
		}

		$theme = $this->get_reader_theme();
		if ( ! $theme instanceof WP_Theme ) {
			return;
		}

		$this->active_theme     = wp_get_theme();
		$this->reader_theme     = $theme;
		$this->theme_overridden = true;

		$get_template   = function () {
			return $this->reader_theme->get_template();
		};
		$get_stylesheet = function () {
			return $this->reader_theme->get_stylesheet();
		};

		add_filter( 'stylesheet', $get_stylesheet );
		add_filter( 'template', $get_template );
		add_filter(
			'pre_option_current_theme',
			function () {
				return $this->reader_theme->display( 'Name' );
			}
		);

		// @link: https://core.trac.wordpress.org/ticket/20027
		add_filter( 'pre_option_stylesheet', $get_stylesheet );
		add_filter( 'pre_option_template', $get_template );

		// Handle custom theme roots.
		add_filter(
			'pre_option_stylesheet_root',
			function () {
				return get_raw_theme_root( $this->reader_theme->get_stylesheet(), true );
			}
		);
		add_filter(
			'pre_option_template_root',
			function () {
				return get_raw_theme_root( $this->reader_theme->get_template(), true );
			}
		);

		$this->disable_widgets();
		add_filter( 'customize_previewable_devices', [ $this, 'customize_previewable_devices' ] );
		add_action( 'customize_register', [ $this, 'remove_customizer_themes_panel' ], 11 );
	}

	/**
	 * Disable widgets.
	 */
	public function disable_widgets() {
		add_filter( 'sidebars_widgets', '__return_empty_array', PHP_INT_MAX );
		add_filter(
			'customize_loaded_components',
			static function( $components ) {
				return array_diff( $components, [ 'widgets' ] );
			}
		);
		remove_theme_support( 'widgets-block-editor' );
	}

	/**
	 * Make tablet (smartphone) the default device when opening AMP Customizer.
	 *
	 * @param array $devices Devices.
	 * @return array Devices.
	 */
	public function customize_previewable_devices( $devices ) {
		if ( isset( $devices['tablet'] ) ) {
			unset( $devices['desktop']['default'] );
			$devices['tablet']['default'] = true;
		}
		return $devices;
	}

	/**
	 * Remove themes panel from AMP Customizer.
	 *
	 * @param WP_Customize_Manager $wp_customize Customize manager.
	 */
	public function remove_customizer_themes_panel( WP_Customize_Manager $wp_customize ) {
		$wp_customize->remove_panel( 'themes' );
	}
}
PK.3Y6�ie;U;U-bunyad-amp/src/ReaderThemeSupportFeatures.php<?php
/**
 * Class ReaderThemeSupportFeatures.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP;

use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;
use AMP_Options_Manager;
use Theme_Upgrader;

/**
 * Stores the primary theme's theme support features when Reader template mode is active and then adds the necessary styles to support them.
 *
 * Note that this service is not conditional based on whether Reader mode is selected because it needs to run logic
 * when transitioning from non-reader to Reader mode.
 *
 * @package AmpProject\AmpWP
 * @since 2.1
 * @internal
 */
final class ReaderThemeSupportFeatures implements Service, Registerable {

	/**
	 * Theme feature slug for editor-color-palette.
	 *
	 * @var string
	 */
	const FEATURE_EDITOR_COLOR_PALETTE = 'editor-color-palette';

	/**
	 * Theme feature slug for editor-gradient-presets.
	 *
	 * @var string
	 */
	const FEATURE_EDITOR_GRADIENT_PRESETS = 'editor-gradient-presets';

	/**
	 * Theme feature slug for editor-font-sizes.
	 *
	 * @var string
	 */
	const FEATURE_EDITOR_FONT_SIZES = 'editor-font-sizes';

	/**
	 * Key slug.
	 *
	 * @var string
	 */
	const KEY_SLUG = 'slug';

	/**
	 * Key size.
	 *
	 * @var string
	 */
	const KEY_SIZE = 'size';

	/**
	 * Key color.
	 *
	 * @var string
	 */
	const KEY_COLOR = 'color';

	/**
	 * Key gradient.
	 *
	 * @var string
	 */
	const KEY_GRADIENT = 'gradient';

	/**
	 * Key gradients.
	 *
	 * @var string
	 */
	const KEY_GRADIENTS = 'gradients';

	/**
	 * Key palette.
	 *
	 * @var string
	 */
	const KEY_PALETTE = 'palette';

	/**
	 * Key fontSizes.
	 *
	 * @var string
	 */
	const KEY_FONT_SIZES = 'fontSizes';

	/**
	 * Key typography.
	 *
	 * @var string
	 */
	const KEY_TYPOGRAPHY = 'typography';

	/**
	 * Key for `theme` presets in block editor.
	 * Key for `theme` context in `wp_get_global_settings()`.
	 *
	 * @var string
	 */
	const KEY_THEME = 'theme';

	/**
	 * Key for `default` presets in block editor.
	 *
	 * @var string
	 */
	const KEY_DEFAULT = 'default';

	/**
	 * Key for `spacing` presets in theme.json.
	 *
	 * @var string
	 */
	const KEY_SPACING = 'spacing';

	/**
	 * Key for `steps` presets in theme.json.
	 *
	 * @var string
	 */
	const KEY_STEPS = 'steps';

	/**
	 * Key for `spacingSizes` presets in theme.json.
	 *
	 * @var string
	 */
	const KEY_SPACING_SIZES = 'spacingSizes';

	/**
	 * Key for `spacingScale` presets in theme.json.
	 *
	 * @var string
	 */
	const KEY_SPACING_SCALE = 'spacingScale';

	/**
	 * Key for `customSpacingSize` presets in theme.json.
	 *
	 * @var string
	 */
	const KEY_CUSTOM_SPACING_SIZE = 'customSpacingSize';

	/**
	 * Action fired when the cached primary_theme_support should be updated.
	 *
	 * @var string
	 */
	const ACTION_UPDATE_CACHED_PRIMARY_THEME_SUPPORT = 'amp_update_cached_primary_theme_support';

	/**
	 * Supported features.
	 *
	 * @var array[]
	 */
	const SUPPORTED_FEATURES = [
		self::FEATURE_EDITOR_COLOR_PALETTE    => [ self::KEY_SLUG, self::KEY_COLOR ],
		self::FEATURE_EDITOR_GRADIENT_PRESETS => [ self::KEY_SLUG, self::KEY_GRADIENT ],
		self::FEATURE_EDITOR_FONT_SIZES       => [ self::KEY_SLUG, self::KEY_SIZE ],
	];

	/**
	 * The theme.json paths mapping to be fetched using `wp_get_global_settings()`.
	 *
	 * @var array[]
	 */
	const SUPPORTED_THEME_JSON_FEATURES = [
		self::FEATURE_EDITOR_COLOR_PALETTE    => [ self::KEY_COLOR, self::KEY_PALETTE ],
		self::FEATURE_EDITOR_GRADIENT_PRESETS => [ self::KEY_COLOR, self::KEY_GRADIENTS ],
		self::FEATURE_EDITOR_FONT_SIZES       => [ self::KEY_TYPOGRAPHY, self::KEY_FONT_SIZES ],
	];

	/**
	 * Reader theme loader.
	 *
	 * @var ReaderThemeLoader
	 */
	private $reader_theme_loader;

	/**
	 * ReaderThemeLoader constructor.
	 *
	 * @param ReaderThemeLoader $reader_theme_loader Reader theme loader.
	 */
	public function __construct( ReaderThemeLoader $reader_theme_loader ) {
		$this->reader_theme_loader = $reader_theme_loader;
	}

	/**
	 * Register the service with the system.
	 *
	 * @return void
	 */
	public function register() {
		add_filter( 'amp_options_updating', [ $this, 'filter_amp_options_updating' ] );
		add_action( 'after_switch_theme', [ $this, 'handle_theme_update' ] );
		add_action( self::ACTION_UPDATE_CACHED_PRIMARY_THEME_SUPPORT, [ $this, 'update_cached_theme_support' ] );
		add_action(
			'upgrader_process_complete',
			function ( $upgrader ) {
				if ( $upgrader instanceof Theme_Upgrader ) {
					$this->update_cached_theme_support();
				}
			}
		);

		add_action( 'amp_post_template_head', [ $this, 'print_theme_support_styles' ] );
		add_action(
			'wp_head',
			[ $this, 'print_theme_support_styles' ],
			9 // Because wp_print_styles happens at priority 8, and we want the primary theme's colors to override any conflicting theme color assignments.
		);
	}

	/**
	 * Check whether all the required props are present for a given feature item.
	 *
	 * @param string $feature Feature name.
	 * @param array  $props   Props to check.
	 *
	 * @return bool Whether all are present.
	 */
	public function has_required_feature_props( $feature, $props ) {
		if ( empty( $props ) || ! is_array( $props ) ) {
			return false;
		}
		foreach ( self::SUPPORTED_FEATURES[ $feature ] as $required_prop ) {
			if ( ! array_key_exists( $required_prop, $props ) ) {
				return false;
			}
		}
		return true;
	}

	/**
	 * Filter the AMP options when they are updated to add the primary theme's features.
	 *
	 * @param array $options Options.
	 * @return array Options.
	 */
	public function filter_amp_options_updating( $options ) {
		if ( $this->reader_theme_loader->is_enabled( $options ) ) {
			$options[ Option::PRIMARY_THEME_SUPPORT ] = $this->get_theme_support_features( true );
		} else {
			$options[ Option::PRIMARY_THEME_SUPPORT ] = null;
		}
		return $options;
	}

	/**
	 * Handle updating the cached primary_theme_support after updating/switching theme.
	 *
	 * In the case of switching the theme via WP-CLI, it could be that the next request is for an AMP page and
	 * the `check_theme_switched()` function will run in the context of a Reader theme being loaded. In that case,
	 * the added theme support won't be for the primary theme and we need to schedule an immediate event in WP-Cron to
	 * try again in the context of a cron request in which a Reader theme will never be overriding the primary theme.
	 */
	public function handle_theme_update() {
		if ( $this->reader_theme_loader->is_theme_overridden() ) {
			wp_schedule_single_event( time(), self::ACTION_UPDATE_CACHED_PRIMARY_THEME_SUPPORT );
		} else {
			$this->update_cached_theme_support();
		}
	}

	/**
	 * Update primary theme's cached theme support.
	 */
	public function update_cached_theme_support() {
		if ( $this->reader_theme_loader->is_enabled() ) {
			AMP_Options_Manager::update_option( Option::PRIMARY_THEME_SUPPORT, $this->get_theme_support_features( true ) );
		} else {
			AMP_Options_Manager::update_option( Option::PRIMARY_THEME_SUPPORT, null );
		}
	}

	/**
	 * Get the theme support features.
	 *
	 * @param bool $reduced Whether to reduce the feature props down to just what is required.
	 * @return array Theme support features.
	 */
	public function get_theme_support_features( $reduced = false ) {
		$features = [];

		foreach ( array_keys( self::SUPPORTED_FEATURES ) as $feature_key ) {
			if ( $this->theme_has_theme_json() && function_exists( 'wp_get_global_settings' ) ) {
				$feature_value   = [];
				$global_settings = wp_get_global_settings( self::SUPPORTED_THEME_JSON_FEATURES[ $feature_key ], self::KEY_THEME );

				if ( isset( $global_settings[ self::KEY_THEME ] ) ) {
					$feature_value = array_merge( $feature_value, $global_settings[ self::KEY_THEME ] );
				}

				if ( isset( $global_settings[ self::KEY_DEFAULT ] ) ) {
					$feature_value = array_merge( $feature_value, $global_settings[ self::KEY_DEFAULT ] );
				}
			} else {
				$feature_value = current( (array) get_theme_support( $feature_key ) );
			}

			if ( ! is_array( $feature_value ) || empty( $feature_value ) ) {
				continue;
			}

			// Avoid reducing font sizes if theme.json is used for the sake of fluid typography.
			if ( $this->theme_has_theme_json() && self::FEATURE_EDITOR_FONT_SIZES === $feature_key ) {
				$reduced = false;
			}

			if ( $reduced ) {
				$features[ $feature_key ] = [];

				foreach ( $feature_value as $item ) {
					if ( $this->has_required_feature_props( $feature_key, $item ) ) {
						$features[ $feature_key ][] = wp_array_slice_assoc( $item, self::SUPPORTED_FEATURES[ $feature_key ] );
					}
				}
			} else {
				$features[ $feature_key ] = $feature_value;
			}
		}

		return $features;
	}

	/**
	 * Determines whether the request is for an AMP page in Reader mode.
	 *
	 * @return bool Whether AMP Reader request.
	 */
	public function is_reader_request() {
		return (
			( amp_is_legacy() || $this->reader_theme_loader->is_theme_overridden() )
			&&
			amp_is_request()
		);
	}

	/**
	 * Print theme support styles.
	 */
	public function print_theme_support_styles() {
		if ( ! $this->is_reader_request() ) {
			return;
		}

		$features = [];
		if ( $this->reader_theme_loader->is_enabled() ) {
			$features = AMP_Options_Manager::get_option( Option::PRIMARY_THEME_SUPPORT );
		} elseif ( amp_is_legacy() ) {
			$features = $this->get_theme_support_features();
		}

		if ( empty( $features ) ) {
			return;
		}

		foreach ( array_keys( self::SUPPORTED_FEATURES ) as $feature ) {
			if ( empty( $features[ $feature ] ) || ! is_array( $features[ $feature ] ) ) {
				continue;
			}
			$value = $features[ $feature ];
			switch ( $feature ) {
				case self::FEATURE_EDITOR_COLOR_PALETTE:
					$this->print_editor_color_palette_styles( $value );
					break;
				case self::FEATURE_EDITOR_FONT_SIZES:
					$this->print_editor_font_sizes_styles( $value );
					break;
				case self::FEATURE_EDITOR_GRADIENT_PRESETS:
					$this->print_editor_gradient_presets_styles( $value );
					break;
			}
		}

		// Print the custom properties for the spacing sizes.
		if ( $this->theme_has_theme_json() && function_exists( 'wp_get_global_settings' ) ) {
			$this->print_spacing_sizes_custom_properties();
		}
	}

	/**
	 * Print editor-color-palette styles.
	 *
	 * @param array $color_palette Color palette.
	 */
	private function print_editor_color_palette_styles( array $color_palette ) {
		echo '<style id="amp-wp-theme-support-editor-color-palette">';
		foreach ( $color_palette as $color_option ) {
			if ( ! $this->has_required_feature_props( self::FEATURE_EDITOR_COLOR_PALETTE, $color_option ) ) {
				continue;
			}

			// If not a valid hex color, skip it.
			if ( ! preg_match( '/^[0-9a-f]{3}[0-9a-f]{3}?$/i', ltrim( $color_option[ self::KEY_COLOR ], '#' ) ) ) {
				continue;
			}

			// There is no standard way to retrieve or derive the `color` style property when the editor color is being used
			// for the background, so the best alternative at the moment is to guess a good default value based on the
			// luminance of the editor color.
			$text_color = 127 > $this->get_relative_luminance_from_hex( $color_option[ self::KEY_COLOR ] ) ? '#fff' : '#000';

			printf(
				':root .has-%1$s-background-color { background-color: %2$s; color: %3$s; }',
				sanitize_key( $color_option[ self::KEY_SLUG ] ),
				$color_option[ self::KEY_COLOR ], // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
				$text_color // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
			);
		}
		foreach ( $color_palette as $color_option ) {
			if ( ! isset( $color_option[ self::KEY_SLUG ], $color_option[ self::KEY_COLOR ] ) ) {
				continue;
			}

			printf(
				':root .has-%1$s-color { color: %2$s; }',
				sanitize_key( $color_option[ self::KEY_SLUG ] ),
				$color_option[ self::KEY_COLOR ] // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
			);
		}
		echo '</style>';
	}

	/**
	 * Print editor-font-sizes styles.
	 *
	 * @param array $font_sizes Font sizes.
	 */
	private function print_editor_font_sizes_styles( array $font_sizes ) {
		echo '<style id="amp-wp-theme-support-editor-font-sizes">';
		foreach ( $font_sizes as $font_size ) {
			if ( ! $this->has_required_feature_props( self::FEATURE_EDITOR_FONT_SIZES, $font_size ) ) {
				continue;
			}

			// Just in case the font size is not in the expected format.
			$font_size[ self::KEY_SIZE ] = $this->get_typography_value_and_unit( $font_size[ self::KEY_SIZE ] );

			if ( ! is_array( $font_size[ self::KEY_SIZE ] ) || empty( $font_size[ self::KEY_SIZE ] ) ) {
				continue;
			}

			// Normalize the font size value to a string.
			$font_size[ self::KEY_SIZE ] = $font_size[ self::KEY_SIZE ]['value'] . $font_size[ self::KEY_SIZE ]['unit'];

			if ( ! is_string( $font_size[ self::KEY_SIZE ] ) ) {
				continue;
			}

			printf(
				':root .is-%1$s-text, :root .has-%1$s-font-size { font-size: %2$s; }',
				sanitize_key( $font_size[ self::KEY_SLUG ] ),
				function_exists( 'wp_get_typography_font_size_value' )
					// phpcs:disable WordPressVIPMinimum.Functions.StripTags.StripTagsOneParameter
					? strip_tags( wp_get_typography_font_size_value( $font_size ) ) // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
					: strip_tags( $font_size[ self::KEY_SIZE ] ) // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
					// phpcs:enable WordPressVIPMinimum.Functions.StripTags.StripTagsOneParameter
			);
		}
		echo '</style>';
	}

	/**
	 * Print editor-gradient-presets styles.
	 *
	 * @param array $gradient_presets Gradient presets.
	 */
	private function print_editor_gradient_presets_styles( array $gradient_presets ) {
		echo '<style id="amp-wp-theme-support-editor-gradient-presets">';
		foreach ( $gradient_presets as $gradient_preset ) {
			if ( ! $this->has_required_feature_props( self::FEATURE_EDITOR_GRADIENT_PRESETS, $gradient_preset ) ) {
				continue;
			}
			printf(
				'.has-%s-gradient-background { background: %s; }',
				sanitize_key( $gradient_preset[ self::KEY_SLUG ] ),
				$gradient_preset[ self::KEY_GRADIENT ] // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
			);
		}
		echo '</style>';
	}

	/**
	 * Print spacing sizes custom properties.
	 */
	private function print_spacing_sizes_custom_properties() {
		$custom_properties              = [];
		$spacing_sizes                  = wp_get_global_settings( [ self::KEY_SPACING, self::KEY_SPACING_SIZES ], self::KEY_THEME );
		$is_wp_generating_spacing_sizes = 0 !== wp_get_global_settings( [ self::KEY_SPACING, self::KEY_SPACING_SCALE ], self::KEY_THEME )[ self::KEY_STEPS ];
		$custom_spacing_size            = wp_get_global_settings( [ self::KEY_SPACING, self::KEY_CUSTOM_SPACING_SIZE ], self::KEY_THEME );

		if ( ! $is_wp_generating_spacing_sizes && $custom_spacing_size ) {
			if ( isset( $spacing_sizes[ self::KEY_THEME ] ) ) {
				$custom_properties = array_merge( $custom_properties, $spacing_sizes[ self::KEY_THEME ] );
			}
		} else {
			if ( isset( $spacing_sizes[ self::KEY_DEFAULT ] ) ) {
				$custom_properties = array_merge( $custom_properties, $spacing_sizes[ self::KEY_DEFAULT ] );
			}
		}

		if ( empty( $custom_properties ) ) {
			return;
		}

		echo '<style id="amp-wp-theme-support-spacing-sizes-custom-properties">';
		echo ':root {';
		foreach ( $custom_properties as $custom_property ) {
			if ( ! isset( $custom_property[ self::KEY_SIZE ], $custom_property[ self::KEY_SLUG ] ) ) {
				continue;
			}

			printf(
				'--wp--preset--spacing--%1$s: %2$s;',
				sanitize_key( $custom_property[ self::KEY_SLUG ] ),
				// phpcs:disable WordPressVIPMinimum.Functions.StripTags.StripTagsOneParameter
				strip_tags( $custom_property[ self::KEY_SIZE ] ) // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
				// phpcs:enable WordPressVIPMinimum.Functions.StripTags.StripTagsOneParameter
			);
		}
		echo '}';
		echo '</style>';
	}

	/**
	 * Get relative luminance from color hex value.
	 *
	 * Copied from `\Twenty_Twenty_One_Custom_Colors::get_relative_luminance_from_hex()`.
	 *
	 * @see https://github.com/WordPress/wordpress-develop/blob/acbbbd18b32b5429264622141a6d058b64f3a5ad/src/wp-content/themes/twentytwentyone/classes/class-twenty-twenty-one-custom-colors.php#L138-L156
	 *
	 * @param string $hex Color hex value.
	 * @return int Relative luminance value.
	 */
	public function get_relative_luminance_from_hex( $hex ) {

		// Remove the "#" symbol from the beginning of the color.
		$hex = ltrim( $hex, '#' );

		// Make sure there are 6 digits for the below calculations.
		if ( 3 === strlen( $hex ) ) {
			$hex = $hex[0] . $hex[0] . $hex[1] . $hex[1] . $hex[2] . $hex[2];
		}

		// Get red, green, blue.
		$red   = hexdec( substr( $hex, 0, 2 ) );
		$green = hexdec( substr( $hex, 2, 2 ) );
		$blue  = hexdec( substr( $hex, 4, 2 ) );

		// Calculate the luminance.
		$lum = ( 0.2126 * $red ) + ( 0.7152 * $green ) + ( 0.0722 * $blue );
		return (int) round( $lum );
	}

	/**
	 * Checks whether a theme or its parent has a theme.json file.
	 * Checks if `wp_get_global_settings()` exists and bail for WP < 5.9.
	 *
	 * Copied from `wp_theme_has_theme_json()`
	 *
	 * @codeCoverageIgnore
	 *
	 * @see https://github.com/WordPress/wordpress-develop/blob/200868214a1ae0a108dac491677ba82e7541fc8d/src/wp-includes/global-styles-and-settings.php#L384
	 *
	 * @since 2.4.1
	 *
	 * @return bool False if `wp_get_global_settings()` not exists or theme.json not found, true otherwise.
	 */
	private function theme_has_theme_json() {
		if ( function_exists( 'wp_theme_has_theme_json' ) ) {
			return wp_theme_has_theme_json();
		}

		static $theme_has_support = [];

		$stylesheet = get_stylesheet();

		if (
			isset( $theme_has_support[ $stylesheet ] ) &&

			/*
			* Ignore static cache when `WP_DEBUG` is enabled. Why? To avoid interfering with
			* the theme developer's workflow. Note that core uses a newer wp_get_development_mode() check.
			*/
			! ( defined( 'WP_DEBUG' ) && WP_DEBUG )
		) {
			return $theme_has_support[ $stylesheet ];
		}

		$stylesheet_directory = get_stylesheet_directory();
		$template_directory   = get_template_directory();

		// This is the same as get_theme_file_path(), which isn't available in load-styles.php context.
		if ( $stylesheet_directory !== $template_directory && file_exists( $stylesheet_directory . '/theme.json' ) ) {
			$path = $stylesheet_directory . '/theme.json';
		} else {
			$path = $template_directory . '/theme.json';
		}

		/** This filter is documented in wp-includes/link-template.php */
		$path = apply_filters( 'theme_file_path', $path, 'theme.json' );

		$theme_has_support[ $stylesheet ] = file_exists( $path );

		return $theme_has_support[ $stylesheet ];
	}

	/**
	 * Checks a string for a unit and value and returns an array
	 * consisting of `'value'` and `'unit'`, e.g. array( '42', 'rem' ).
	 *
	 * Copied from `wp_get_typography_value_and_unit()`
	 *
	 * @codeCoverageIgnore
	 *
	 * @see https://github.com/WordPress/WordPress/blob/9caf1c4adeddff2577c24d622ebbbf278a671271/wp-includes/block-supports/typography.php#L297
	 *
	 * @since 2.4.1
	 *
	 * @param string|int|float $raw_value Raw size value from theme.json.
	 * @param array            $options   {
	 *     Optional. An associative array of options. Default is empty array.
	 *
	 *     @type string   $coerce_to        Coerce the value to rem or px. Default `'rem'`.
	 *     @type int      $root_size_value  Value of root font size for rem|em <-> px conversion. Default `16`.
	 *     @type string[] $acceptable_units An array of font size units. Default `array( 'rem', 'px', 'em' )`;
	 * }
	 * @return array|null The value and unit, or null if the value is empty.
	 */
	private function get_typography_value_and_unit( $raw_value, $options = [] ) {
		if ( function_exists( 'wp_get_typography_value_and_unit' ) ) {
			return wp_get_typography_value_and_unit( $raw_value, $options );
		}

		if ( ! is_string( $raw_value ) && ! is_int( $raw_value ) && ! is_float( $raw_value ) ) {
			_doing_it_wrong(
				__METHOD__,
				esc_html__( 'Raw size value must be a string, integer, or float.', 'default' ),
				'2.4.1'
			);
			return null;
		}

		if ( empty( $raw_value ) ) {
			return null;
		}

		// Converts numbers to pixel values by default.
		if ( is_numeric( $raw_value ) ) {
			$raw_value = $raw_value . 'px';
		}

		$defaults = [
			'coerce_to'        => '',
			'root_size_value'  => 16,
			'acceptable_units' => [ 'rem', 'px', 'em' ],
		];

		$options = wp_parse_args( $options, $defaults );

		$acceptable_units_group = implode( '|', $options['acceptable_units'] );
		$pattern                = '/^(\d*\.?\d+)(' . $acceptable_units_group . '){1,1}$/';

		preg_match( $pattern, $raw_value, $matches );

		// Bails out if not a number value and a px or rem unit.
		if ( ! isset( $matches[1] ) || ! isset( $matches[2] ) ) {
			return null;
		}

		$value = $matches[1];
		$unit  = $matches[2];

		/*
		 * Default browser font size. Later, possibly could inject some JS to
		 * compute this `getComputedStyle( document.querySelector( "html" ) ).fontSize`.
		 */
		if ( 'px' === $options['coerce_to'] && ( 'em' === $unit || 'rem' === $unit ) ) {
			$value = $value * $options['root_size_value'];
			$unit  = $options['coerce_to'];
		}

		if ( 'px' === $unit && ( 'em' === $options['coerce_to'] || 'rem' === $options['coerce_to'] ) ) {
			$value = $value / $options['root_size_value'];
			$unit  = $options['coerce_to'];
		}

		/*
		 * No calculation is required if swapping between em and rem yet,
		 * since we assume a root size value. Later we might like to differentiate between
		 * :root font size (rem) and parent element font size (em) relativity.
		 */
		if ( ( 'em' === $options['coerce_to'] || 'rem' === $options['coerce_to'] ) && ( 'em' === $unit || 'rem' === $unit ) ) {
			$unit = $options['coerce_to'];
		}

		return [
			'value' => round( $value, 3 ),
			'unit'  => $unit,
		];
	}
}
PK.3YG�W?�"�"bunyad-amp/src/Sandboxing.php<?php
/**
 * Class Sandboxing.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP;

use AMP_Comments_Sanitizer;
use AMP_Form_Sanitizer;
use AMP_Options_Manager;
use AMP_Script_Sanitizer;
use AMP_Style_Sanitizer;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;
use AmpProject\AmpWP\Option;
use AmpProject\Dom\Document;
use AmpProject\Dom\Element;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag;
use DOMAttr;

/**
 * Experimental service to facilitate flexible AMP.
 *
 * @package AmpProject\AmpWP
 * @since 2.2
 * @internal
 */
final class Sandboxing implements Service, Registerable {

	/**
	 * Option key for enabling sandboxing.
	 *
	 * @deprecated Use Options interface for option keys.
	 *
	 * @var string
	 */
	const OPTION_ENABLED = 'sandboxing_enabled';

	/**
	 * Option key for sandboxing level.
	 *
	 * @deprecated Use Options interface for option keys.
	 *
	 * @var string
	 */
	const OPTION_LEVEL = 'sandboxing_level';

	/**
	 * Sandboxing levels.
	 *
	 * @var int[]
	 */
	const LEVELS = [ 1, 2, 3 ];

	/**
	 * Default sandboxing options schema.
	 *
	 * @var array
	 */
	const DEFAULT_OPTIONS_SCHEMA = [
		Option::SANDBOXING_ENABLED => [
			'type'    => 'bool',
			'default' => false,
		],
		Option::SANDBOXING_LEVEL   => [
			'type'    => 'int',
			'enum'    => self::LEVELS,
			'default' => 1,
		],
	];

	/**
	 * Register.
	 */
	public function register() {
		add_filter( 'amp_rest_options_schema', [ $this, 'filter_rest_options_schema' ] );
		add_filter( 'amp_default_options', [ $this, 'filter_default_options' ], 10, 2 );
		add_filter( 'amp_options_updating', [ $this, 'sanitize_options' ], 10, 2 );

		add_action( 'init', [ $this, 'add_hooks' ] );
	}

	/**
	 * Filter the REST options schema to add items.
	 *
	 * @param array $schema Schema.
	 * @return array Schema.
	 */
	public function filter_rest_options_schema( $schema ) {
		return array_merge(
			$schema,
			self::DEFAULT_OPTIONS_SCHEMA
		);
	}

	/**
	 * Add default options.
	 *
	 * @param array $defaults Default options.
	 * @return array Defaults.
	 */
	public function filter_default_options( $defaults ) {
		foreach ( self::DEFAULT_OPTIONS_SCHEMA as $option_name => $option_schema ) {
			$defaults[ $option_name ] = $option_schema['default'];
		}
		return $defaults;
	}

	/**
	 * Sanitize options.
	 *
	 * @param array $options     Existing options with already-sanitized values for updating.
	 * @param array $new_options Unsanitized options being submitted for updating.
	 * @return array Sanitized options.
	 */
	public function sanitize_options( $options, $new_options ) {
		if ( isset( $new_options[ Option::SANDBOXING_ENABLED ] ) ) {
			$options[ Option::SANDBOXING_ENABLED ] = (bool) $new_options[ Option::SANDBOXING_ENABLED ];
		}
		if (
			isset( $new_options[ Option::SANDBOXING_LEVEL ] )
			&&
			in_array( $new_options[ Option::SANDBOXING_LEVEL ], self::LEVELS, true )
		) {
			$options[ Option::SANDBOXING_LEVEL ] = $new_options[ Option::SANDBOXING_LEVEL ];
		}
		return $options;
	}

	/**
	 * Add hooks.
	 */
	public function add_hooks() {
		$sandboxing_level = amp_get_sandboxing_level();

		if ( 0 === $sandboxing_level ) {
			return;
		}

		// Opt-in to the new script sanitization logic in the script sanitizer.
		add_filter(
			'amp_content_sanitizers',
			static function ( $sanitizers ) use ( $sandboxing_level ) {
				$sanitizers[ AMP_Script_Sanitizer::class ]['sanitize_js_scripts'] = true;

				if ( $sandboxing_level < 3 ) { // <3 === ❤️
					$sanitizers[ AMP_Script_Sanitizer::class ]['comment_reply_allowed']      = 'conditionally';
					$sanitizers[ AMP_Form_Sanitizer::class ]['native_post_forms_allowed']    = 'conditionally';
					$sanitizers[ AMP_Comments_Sanitizer::class ]['ampify_comment_threading'] = 'conditionally';
					$sanitizers[ AMP_Style_Sanitizer::class ]['allow_excessive_css']         = true;
				}
				return $sanitizers;
			}
		);

		if ( 1 === $sandboxing_level ) {
			// Keep all invalid AMP markup by default.
			add_filter( 'amp_validation_error_default_sanitized', '__return_false' );
		}

		// To facilitate testing, vary the errors by the sandboxing level.
		add_filter(
			'amp_validation_error',
			static function ( $error ) use ( $sandboxing_level ) {
				$error['sandboxing_level'] = $sandboxing_level;

				return $error;
			}
		);

		add_action( 'amp_finalize_dom', [ $this, 'finalize_document' ], 10, 2 );
	}

	/**
	 * Get the effective sandboxing level.
	 *
	 * Even though a site may be configured with a given sandboxing level (e.g. level 1) to allow custom scripts, if no such
	 * markup is on the page to necessitate the loose level, then the effective level will be actually higher.
	 *
	 * @param Document $dom Document.
	 * @return int Effective sandboxing level.
	 */
	public static function get_effective_level( Document $dom ) {
		if ( ValidationExemption::is_document_with_amp_unvalidated_nodes( $dom ) ) {
			return 1;
		} elseif ( ValidationExemption::is_document_with_px_verified_nodes( $dom ) ) {
			return 2;
		} else {
			return 3;
		}
	}

	/**
	 * Remove required AMP markup if not used.
	 *
	 * @param Document $dom                        Document.
	 * @param int      $effective_sandboxing_level Effective sandboxing level.
	 */
	private function remove_required_amp_markup_if_not_used( Document $dom, $effective_sandboxing_level ) {
		if ( 3 === $effective_sandboxing_level ) {
			// When valid AMP is the target, don't remove the scripts since it won't be valid AMP.
			return;
		}

		if ( $dom->ampElements->length > 0 ) {
			return;
		}

		$amp_scripts = $dom->xpath->query( '//script[ @custom-element or @custom-template ]' );
		if ( $amp_scripts->length > 0 ) {
			return;
		}

		// Remove runtime script(s).
		$runtime_scripts = $dom->xpath->query( '//script[ @async and @src and starts-with( @src, "https://cdn.ampproject.org/" ) and contains( @src, "v0" ) ]' );
		foreach ( $runtime_scripts as $runtime_script ) {
			if ( $runtime_script instanceof Element ) {
				$runtime_script->parentNode->removeChild( $runtime_script );
			}
		}

		// Remove runtime style.
		$runtime_style = $dom->xpath->query( './style[ @amp-runtime ]', $dom->head )->item( 0 );
		if ( $runtime_style instanceof Element ) {
			$dom->head->removeChild( $runtime_style );
		}

		// Remove preconnect link.
		$preconnect_link = $dom->xpath->query( './link[ @href = "https://cdn.ampproject.org" ]', $dom->head )->item( 0 );
		if ( $preconnect_link instanceof Element ) {
			$dom->head->removeChild( $preconnect_link );
		}
	}

	/**
	 * Finalize document.
	 *
	 * @param Document $dom                        Document.
	 * @param int      $effective_sandboxing_level Effective sandboxing level.
	 */
	public function finalize_document( Document $dom, $effective_sandboxing_level ) {
		$actual_sandboxing_level = AMP_Options_Manager::get_option( Option::SANDBOXING_LEVEL );

		$meta_generator = $dom->xpath->query( '/html/head/meta[ @name = "generator" and starts-with( @content, "AMP Plugin" ) ]/@content' )->item( 0 );
		if ( $meta_generator instanceof DOMAttr ) {
			$meta_generator->nodeValue .= "; sandboxing-level={$actual_sandboxing_level}:{$effective_sandboxing_level}";
		}

		$this->remove_required_amp_markup_if_not_used( $dom, $effective_sandboxing_level );

		$amp_admin_bar_menu_item = $dom->xpath->query( '//div[ @id = "wpadminbar" ]//li[ @id = "wp-admin-bar-amp" ]' )->item( 0 );
		if ( $amp_admin_bar_menu_item instanceof Element ) {

			switch ( $effective_sandboxing_level ) {
				case 1:
					$text  = '1️⃣';
					$title = __( 'Sandboxing level: Loose (1)', 'amp' );
					break;
				case 2:
					$text  = '2️⃣';
					$title = __( 'Sandboxing level: Moderate (2)', 'amp' );
					break;
				default:
					$text  = '3️⃣';
					$title = __( 'Sandboxing level: Strict (3)', 'amp' );
					break;
			}

			$amp_link = $dom->xpath->query( './a', $amp_admin_bar_menu_item )->item( 0 );
			if ( $amp_link instanceof Element ) {
				$span = $dom->createElement( Tag::SPAN );
				$span->setAttribute( Attribute::TITLE, $title );
				$span->textContent = $text;

				$amp_link->appendChild( $dom->createTextNode( ' ' ) );
				$amp_link->appendChild( $span );
			}

			$amp_submenu_ul = $dom->xpath->query( './div/ul[ @id = "wp-admin-bar-amp-default" ]', $amp_admin_bar_menu_item )->item( 0 );
			if ( $amp_submenu_ul instanceof Element ) {
				$level_li = $dom->createElement( Tag::LI );
				$level_li->setAttribute( Attribute::ID, 'wp-admin-bar-amp-sandboxing-level' );

				$link = $dom->createElement( Tag::A );
				$link->setAttribute( Attribute::CLASS_, 'ab-item' );
				$link->textContent = $title;
				if ( current_user_can( 'manage_options' ) ) {
					$link->setAttribute(
						Attribute::HREF,
						add_query_arg( 'page', AMP_Options_Manager::OPTION_NAME, admin_url( 'admin.php' ) ) . '#sandboxing'
					);
				}

				$level_li->appendChild( $link );
				$amp_submenu_ul->appendChild( $level_li );
			}
		}
	}
}
PK.3Y.?&��bunyad-amp/src/Services.php<?php
/**
 * Class Services.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP;

use AmpProject\AmpWP\Infrastructure\Injector;
use AmpProject\AmpWP\Infrastructure\Plugin;
use AmpProject\AmpWP\Infrastructure\Service;
use AmpProject\AmpWP\Infrastructure\ServiceContainer;

/**
 * Convenience class to get easy access to the service container.
 *
 * Using this should always be the last resort.
 * Always prefer to use constructor injection instead.
 *
 * @package AmpProject\AmpWP
 * @since 2.0
 * @internal
 */
final class Services {

	/**
	 * Plugin object instance.
	 *
	 * @var Plugin
	 */
	private static $plugin;

	/**
	 * Service container object instance.
	 *
	 * @var ServiceContainer
	 */
	private static $container;

	/**
	 * Dependency injector object instance.
	 *
	 * @var Injector
	 */
	private static $injector;

	/**
	 * Get a particular service out of the service container.
	 *
	 * @param string $service Service ID to retrieve.
	 * @return Service
	 */
	public static function get( $service ) {
		return self::get_container()->get( $service );
	}

	/**
	 * Check if a particular service has been registered in the service container.
	 *
	 * @param string $service Service ID to retrieve.
	 * @return bool
	 */
	public static function has( $service ) {
		return self::get_container()->has( $service );
	}

	/**
	 * Get an instance of the plugin.
	 *
	 * @return Plugin Plugin object instance.
	 */
	public static function get_plugin() {
		if ( null === self::$plugin ) {
			self::$plugin = AmpWpPluginFactory::create();
		}

		return self::$plugin;
	}

	/**
	 * Get an instance of the service container.
	 *
	 * @return ServiceContainer Service container object instance.
	 */
	public static function get_container() {
		if ( null === self::$container ) {
			self::$container = self::get_plugin()->get_container();
		}

		return self::$container;
	}

	/**
	 * Get an instance of the dependency injector.
	 *
	 * @return Injector Dependency injector object instance.
	 */
	public static function get_injector() {
		if ( null === self::$injector ) {
			self::$injector = self::get_container()->get( 'injector' );
		}

		return self::$injector;
	}
}
PK.3Y�r��&bunyad-amp/src/ValidationExemption.php<?php
/**
 * Class ValidationExemption.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP;

use AmpProject\Dom\Document;
use AmpProject\Dom\Element;
use DOMAttr;
use DOMNode;

/**
 * Helper functionality to deal with validation exemptions.
 *
 * @todo This could be made into a Service that contains a collection of nodes which were PX-verified or AMP-unvalidated. In this way, there would be no need to add attributes to DOM nodes, and non-element/attribute nodes could be marked, and it would be faster to see if there are any such exempted nodes.
 *
 * @package AmpProject\AmpWP
 * @since 2.2
 * @internal
 * @see \AmpProject\DevMode
 */
final class ValidationExemption {

	/**
	 * HTML attribute to indicate one or more attributes have been verified for PX from AMP validation.
	 *
	 * @var string
	 */
	const PX_VERIFIED_ATTRS_ATTRIBUTE = 'data-px-verified-attrs';

	/**
	 * HTML attribute to indicate an tag/element has been verified for PX.
	 *
	 * The difference here with `data-amp-unvalidated-tag` is that the PX-verified means that the tag will work
	 * properly with CSS tree shaking.
	 *
	 * @var string
	 */
	const PX_VERIFIED_TAG_ATTRIBUTE = 'data-px-verified-tag';

	/**
	 * HTML attribute to indicate one or more attributes are exempted from AMP validation.
	 *
	 * @var string
	 */
	const AMP_UNVALIDATED_ATTRS_ATTRIBUTE = 'data-amp-unvalidated-attrs';

	/**
	 * HTML attribute to indicate an tag/element is exempted from AMP validation.
	 *
	 * @var string
	 */
	const AMP_UNVALIDATED_TAG_ATTRIBUTE = 'data-amp-unvalidated-tag';

	/**
	 * Check whether PX is verified for node.
	 *
	 * This means that it is exempted from AMP validation, but it doesn't mean the PX is negatively impacted.
	 *
	 * @param DOMNode $node Node.
	 * @return bool Whether node marked as being PX-verified.
	 */
	public static function is_px_verified_for_node( DOMNode $node ) {
		if ( $node instanceof Element ) {
			return $node->hasAttribute( self::PX_VERIFIED_TAG_ATTRIBUTE );
		} elseif ( $node instanceof DOMAttr ) {
			return self::check_for_attribute_token_list_membership( $node, self::PX_VERIFIED_ATTRS_ATTRIBUTE );
		}
		return false;
	}

	/**
	 * Mark node as being PX-verified.
	 *
	 * @param DOMNode $node Node.
	 * @return bool Whether successful.
	 */
	public static function mark_node_as_px_verified( DOMNode $node ) {
		return self::mark_node_with_exemption_attribute(
			$node,
			self::PX_VERIFIED_TAG_ATTRIBUTE,
			self::PX_VERIFIED_ATTRS_ATTRIBUTE
		);
	}

	/**
	 * Mark node as not being AMP-validated.
	 *
	 * @param DOMNode $node Node.
	 * @return bool Whether successful.
	 */
	public static function mark_node_as_amp_unvalidated( DOMNode $node ) {
		return self::mark_node_with_exemption_attribute(
			$node,
			self::AMP_UNVALIDATED_TAG_ATTRIBUTE,
			self::AMP_UNVALIDATED_ATTRS_ATTRIBUTE
		);
	}

	/**
	 * Mark node with exemption attribute.
	 *
	 * @param DOMNode $node                 Node.
	 * @param string  $tag_attribute_name   Tag attribute name.
	 * @param string  $attrs_attribute_name Attributes attribute name.
	 * @return bool
	 */
	private static function mark_node_with_exemption_attribute( DOMNode $node, $tag_attribute_name, $attrs_attribute_name ) {
		if ( $node instanceof Element ) {
			if ( ! $node->hasAttribute( $tag_attribute_name ) ) {
				if ( null === $node->ownerDocument ) {
					return false; // @codeCoverageIgnore
				}
				$node->setAttributeNode( $node->ownerDocument->createAttribute( $tag_attribute_name ) );
			}
			return true;
		} elseif ( $node instanceof DOMAttr ) {
			$element = $node->parentNode;
			if ( ! $element instanceof Element ) {
				return false; // @codeCoverageIgnore
			}

			$attr_value = $element->getAttribute( $attrs_attribute_name );
			if ( $attr_value ) {
				$attr_value .= ' ' . $node->nodeName;
			} else {
				$attr_value = $node->nodeName;
			}

			$element->setAttribute( $attrs_attribute_name, $attr_value );
			return true;
		}

		return false;
	}

	/**
	 * Check whether AMP is unvalidated for node.
	 *
	 * This means that it is exempted from AMP validation and it may negatively impact PX.
	 *
	 * @param DOMNode $node Node.
	 * @return bool Whether node marked as being AMP-unvalidated.
	 */
	public static function is_amp_unvalidated_for_node( DOMNode $node ) {
		if ( $node instanceof Element ) {
			return $node->hasAttribute( self::AMP_UNVALIDATED_TAG_ATTRIBUTE );
		} elseif ( $node instanceof DOMAttr ) {
			return self::check_for_attribute_token_list_membership( $node, self::AMP_UNVALIDATED_ATTRS_ATTRIBUTE );
		}
		return false;
	}

	/**
	 * Check whether the given attribute node is mentioned among the token list of another supplied attribute.
	 *
	 * @param DOMAttr $attr                 Attribute node to check for.
	 * @param string  $token_list_attr_name Attribute name that has the token list value.
	 *
	 * @return bool Whether membership is present.
	 */
	private static function check_for_attribute_token_list_membership( DOMAttr $attr, $token_list_attr_name ) {
		$element = $attr->parentNode;
		if ( ! $element instanceof Element ) {
			return false; // @codeCoverageIgnore
		}
		if ( ! $element->hasAttribute( $token_list_attr_name ) ) {
			return false;
		}
		return in_array(
			$attr->nodeName,
			preg_split( '/\s+/', $element->getAttribute( $token_list_attr_name ) ),
			true
		);
	}

	/**
	 * Check whether the provided document has nodes which are not AMP-validated.
	 *
	 * @param Document $document Document for which to check whether dev mode is active.
	 * @return bool Whether the document is in dev mode.
	 */
	public static function is_document_with_amp_unvalidated_nodes( Document $document ) {
		return self::is_document_containing_attributes( $document, [ self::AMP_UNVALIDATED_TAG_ATTRIBUTE, self::AMP_UNVALIDATED_ATTRS_ATTRIBUTE ] );
	}

	/**
	 * Check whether the provided document has nodes which are PX-verified.
	 *
	 * @param Document $document Document for which to check whether dev mode is active.
	 * @return bool Whether the document is in dev mode.
	 */
	public static function is_document_with_px_verified_nodes( Document $document ) {
		return self::is_document_containing_attributes( $document, [ self::PX_VERIFIED_TAG_ATTRIBUTE, self::PX_VERIFIED_ATTRS_ATTRIBUTE ] );
	}

	/**
	 * Check whether a document contains the given attribute names.
	 *
	 * @param Document $document        Document.
	 * @param string[] $attribute_names Attribute names.
	 * @return bool Whether attributes exist in the document.
	 */
	private static function is_document_containing_attributes( Document $document, $attribute_names ) {
		return $document->xpath->query(
			sprintf(
				'//*[%s]',
				join(
					' or ',
					array_map(
						static function ( $attr_name ) {
							return "@{$attr_name}";
						},
						$attribute_names
					)
				)
			)
		)->length > 0;
	}
}
PK.3Y�n��hh0bunyad-amp/src/Admin/AfterActivationSiteScan.php<?php
/**
 * Class AfterActivationSiteScan.
 *
 * Does an async Site Scan whenever any plugin is activated.
 *
 * @since 2.2
 *
 * @package AMP
 */

namespace AmpProject\AmpWP\Admin;

use _WP_Dependency;
use AMP_Options_Manager;
use AMP_Validation_Manager;
use AmpProject\AmpWP\Infrastructure\Conditional;
use AmpProject\AmpWP\Infrastructure\Delayed;
use AmpProject\AmpWP\Infrastructure\HasRequirements;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;
use AmpProject\AmpWP\Services;

/**
 * Class AfterActivationSiteScan
 *
 * @since 2.2
 * @internal
 */
final class AfterActivationSiteScan implements Conditional, Delayed, HasRequirements, Service, Registerable {
	/**
	 * Handle for JS file.
	 *
	 * @var string
	 */
	const ASSET_HANDLE = 'amp-site-scan-notice';

	/**
	 * HTML ID for the app root element.
	 *
	 * @var string
	 */
	const APP_ROOT_ID = 'amp-site-scan-notice';

	/**
	 * React dependency handle.
	 *
	 * @var string
	 */
	const REACT = 'react';

	/**
	 * HTML ID for the app root sibling element.
	 *
	 * Since there is no action for adding notice on `themes.php` screen, we need to inject React root element with JS.
	 * It is an ID of a success notice saying "New theme activated. Visit site" on the `themes.php` screen.
	 *
	 * @var string
	 */
	const APP_ROOT_SIBLING_ID = 'message2';

	/**
	 * RESTPreloader instance.
	 *
	 * @var RESTPreloader
	 */
	private $rest_preloader;

	/**
	 * Get the list of service IDs required for this service to be registered.
	 *
	 * @return string[] List of required services.
	 */
	public static function get_requirements() {
		return [ 'dependency_support' ];
	}

	/**
	 * OnboardingWizardSubmenuPage constructor.
	 *
	 * @param RESTPreloader $rest_preloader An instance of the RESTPreloader class.
	 */
	public function __construct( RESTPreloader $rest_preloader ) {
		$this->rest_preloader = $rest_preloader;
	}

	/**
	 * Check whether the conditional object is currently needed.
	 *
	 * @return bool Whether the conditional object is needed.
	 */
	public static function is_needed() {
		global $pagenow;

		$react = wp_scripts()->query( self::REACT );

		return (
			is_admin()
			&&
			Services::get( 'dependency_support' )->has_support()
			&&
			! is_network_admin()
			&&
			( $react instanceof _WP_Dependency && version_compare( $react->ver, '18', '>=' ) )
			&&
			AMP_Validation_Manager::has_cap()
			&&
			(
				(
					'plugins.php' === $pagenow
					&&
					(
						! empty( $_GET['activate'] ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended
						||
						! empty( $_GET['activate-multi'] ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended
					)
				)
				||
				(
					'themes.php' === $pagenow
					&&
					! empty( $_GET['activated'] ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended
				)
			)
		);
	}

	/**
	 * Get the action to use for registering the service.
	 *
	 * @return string Registration action to use.
	 */
	public static function get_registration_action() {
		return 'admin_init';
	}

	/**
	 * Runs on instantiation.
	 */
	public function register() {
		add_action( 'pre_current_active_plugins', [ $this, 'render_notice' ] );
		add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] );
	}

	/**
	 * Render an admin notice that will do an async Site Scan.
	 */
	public function render_notice() {
		?>
			<div id="<?php echo esc_attr( self::APP_ROOT_ID ); ?>"></div>
		<?php
	}

	/**
	 * Enqueue notice assets.
	 */
	public function enqueue_assets() {
		$asset_file   = AMP__DIR__ . '/assets/js/' . self::ASSET_HANDLE . '.asset.php';
		$asset        = require $asset_file;
		$dependencies = $asset['dependencies'];
		$version      = $asset['version'];

		wp_enqueue_script(
			self::ASSET_HANDLE,
			amp_get_asset_url( 'js/' . self::ASSET_HANDLE . '.js' ),
			$dependencies,
			$version,
			true
		);

		wp_enqueue_style(
			self::ASSET_HANDLE,
			amp_get_asset_url( 'css/' . self::ASSET_HANDLE . '.css' ),
			[ 'wp-components' ],
			AMP__VERSION
		);

		$data = [
			'AMP_COMPATIBLE_PLUGINS_URL' => $this->get_amp_compatible_plugins_url(),
			'AMP_COMPATIBLE_THEMES_URL'  => $this->get_amp_compatible_themes_url(),
			'APP_ROOT_ID'                => self::APP_ROOT_ID,
			'APP_ROOT_SIBLING_ID'        => self::APP_ROOT_SIBLING_ID,
			'OPTIONS_REST_PATH'          => '/amp/v1/options',
			'SETTINGS_LINK'              => menu_page_url( AMP_Options_Manager::OPTION_NAME, false ),
			'SCANNABLE_URLS_REST_PATH'   => '/amp/v1/scannable-urls',
			'VALIDATE_NONCE'             => AMP_Validation_Manager::has_cap() ? AMP_Validation_Manager::get_amp_validate_nonce() : '',
		];

		wp_add_inline_script(
			self::ASSET_HANDLE,
			sprintf(
				'var ampSiteScanNotice = %s;',
				wp_json_encode( $data )
			),
			'before'
		);

		$this->add_preload_rest_paths();
	}

	/**
	 * Get a URL to AMP compatible plugins directory.
	 *
	 * For users capable of installing plugins, the link should lead to the Plugin install page.
	 * Other users will be directed to the plugins page on amp-wp.org.
	 *
	 * @return string URL to AMP compatible plugins directory.
	 */
	protected function get_amp_compatible_plugins_url() {
		if ( current_user_can( 'install_plugins' ) ) {
			return admin_url( '/plugin-install.php?tab=amp-compatible' );
		}

		return 'https://amp-wp.org/ecosystem/plugins/';
	}

	/**
	 * Get a URL to AMP compatible themes directory.
	 *
	 * For users capable of installing themes, the link should lead to the Theme install page.
	 * Other users will be directed to the themes page on amp-wp.org.
	 *
	 * @return string URL to AMP compatible themes directory.
	 */
	protected function get_amp_compatible_themes_url() {
		if ( current_user_can( 'install_themes' ) ) {
			return admin_url( '/theme-install.php?browse=amp-compatible' );
		}

		return 'https://amp-wp.org/ecosystem/themes/';
	}

	/**
	 * Adds REST paths to preload.
	 */
	protected function add_preload_rest_paths() {
		$paths = [
			'/amp/v1/options',
			add_query_arg(
				[
					'_fields' => [ 'url', 'amp_url', 'type', 'label' ],
				],
				'/amp/v1/scannable-urls'
			),
			add_query_arg(
				'_fields',
				[ 'author', 'name', 'plugin', 'status', 'version' ],
				'/wp/v2/plugins'
			),
			add_query_arg(
				'_fields',
				[ 'author', 'name', 'status', 'stylesheet', 'template', 'version' ],
				'/wp/v2/themes'
			),
			'/wp/v2/users/me',
		];

		foreach ( $paths as $path ) {
			$this->rest_preloader->add_preloaded_path( $path );
		}
	}
}
PK.3Y��c�%�%#bunyad-amp/src/Admin/AmpPlugins.php<?php
/**
 * Add new tab (AMP) in plugin install screen in WordPress admin.
 *
 * @package Ampproject\Ampwp
 */

namespace AmpProject\AmpWP\Admin;

use AmpProject\AmpWP\Infrastructure\Conditional;
use AmpProject\AmpWP\Infrastructure\Delayed;
use AmpProject\AmpWP\Infrastructure\HasRequirements;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;
use AmpProject\AmpWP\Services;
use WP_Screen;
use stdClass;
use function get_current_screen;

/**
 * Add new tab (AMP) in plugin install screen in WordPress admin.
 *
 * @since 2.2
 * @internal
 */
class AmpPlugins implements Conditional, Delayed, HasRequirements, Service, Registerable {

	/**
	 * Slug for amp-compatible.
	 *
	 * @var string
	 */
	const AMP_COMPATIBLE = 'amp-compatible';

	/**
	 * Assets handle.
	 *
	 * @var string
	 */
	const ASSET_HANDLE = 'amp-plugin-install';

	/**
	 * List of AMP plugins.
	 *
	 * @var array
	 */
	protected $plugins = [];

	/**
	 * Get the action to use for registering the service.
	 *
	 * @return string Registration action to use.
	 */
	public static function get_registration_action() {

		return 'current_screen';
	}

	/**
	 * Get the list of service IDs required for this service to be registered.
	 *
	 * @return string[] List of required services.
	 */
	public static function get_requirements() {
		return [ 'dependency_support' ];
	}

	/**
	 * Check whether the conditional object is currently needed.
	 *
	 * @return bool Whether the conditional object is needed.
	 */
	public static function is_needed() {

		if ( ! Services::get( 'dependency_support' )->has_support() ) {
			return false;
		}

		/** This filter is documented in src/Admin/AmpThemes.php */
		return is_admin() && apply_filters( 'amp_compatible_ecosystem_shown', true, 'plugins' );
	}

	/**
	 * Get list of AMP plugins.
	 *
	 * @return array List of AMP plugins.
	 */
	public function get_plugins() {

		if ( count( $this->plugins ) === 0 ) {
			$this->plugins = array_map(
				static function ( $plugin ) {
					return self::normalize_plugin_data( $plugin );
				},
				require __DIR__ . '/../../includes/ecosystem-data/plugins.php'
			);

			usort(
				$this->plugins,
				static function ( $a, $b ) {
					return strcasecmp( $a['name'], $b['name'] );
				}
			);
		}

		return $this->plugins;
	}

	/**
	 * Normalize plugin data.
	 *
	 * @param array $plugin Plugin data.
	 *
	 * @return array Normalized plugin data.
	 */
	public static function normalize_plugin_data( $plugin = [] ) {

		$default = [
			'name'                     => '',
			'slug'                     => '',
			'version'                  => '',
			'author'                   => '',
			'author_profile'           => '',
			'requires'                 => '',
			'tested'                   => '',
			'requires_php'             => '',
			'rating'                   => 0,
			'ratings'                  => [
				1 => 0,
				2 => 0,
				3 => 0,
				4 => 0,
				5 => 0,
			],
			'num_ratings'              => 0,
			'support_threads'          => 0,
			'support_threads_resolved' => 0,
			'active_installs'          => 0,
			'downloaded'               => 0,
			'last_updated'             => '',
			'added'                    => '',
			'homepage'                 => '',
			'short_description'        => '',
			'description'              => '',
			'download_link'            => '',
			'tags'                     => [],
			'donate_link'              => '',
			'icons'                    => [
				'1x'  => '',
				'2x'  => '',
				'svg' => '',
			],
			'wporg'                    => false,
		];

		$plugin['ratings'] = ( ! empty( $plugin['ratings'] ) && is_array( $plugin['ratings'] ) ) ? $plugin['ratings'] : [];
		$plugin['ratings'] = $plugin['ratings'] + $default['ratings'];

		$plugin['icons'] = ( ! empty( $plugin['icons'] ) && is_array( $plugin['icons'] ) ) ? $plugin['icons'] : [];
		$plugin['icons'] = wp_parse_args( $plugin['icons'], $default['icons'] );

		return wp_parse_args( $plugin, $default );
	}

	/**
	 * Adds hooks.
	 *
	 * @return void
	 */
	public function register() {

		$screen = get_current_screen();

		if (
			$screen instanceof WP_Screen
			&&
			in_array( $screen->id, [ 'plugin-install', 'plugin-install-network' ], true )
		) {
			add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_scripts' ] );
		}

		add_filter( 'install_plugins_tabs', [ $this, 'add_tab' ] );
		add_filter( 'install_plugins_table_api_args_' . self::AMP_COMPATIBLE, [ $this, 'filter_plugins_table_api_args' ] );
		add_filter( 'plugins_api', [ $this, 'filter_plugins_api' ], 10, 3 );
		add_filter( 'plugin_install_action_links', [ $this, 'filter_action_links' ], 10, 2 );
		add_filter( 'plugin_row_meta', [ $this, 'filter_plugin_row_meta' ], 10, 3 );

		add_action( 'install_plugins_' . self::AMP_COMPATIBLE, 'display_plugins_table' );
	}

	/**
	 * Enqueue style for plugin install page.
	 *
	 * @return void
	 */
	public function enqueue_scripts() {

		$asset_file   = AMP__DIR__ . '/assets/js/' . self::ASSET_HANDLE . '.asset.php';
		$asset        = require $asset_file;
		$dependencies = $asset['dependencies'];
		$version      = $asset['version'];

		wp_enqueue_script(
			self::ASSET_HANDLE,
			amp_get_asset_url( 'js/' . self::ASSET_HANDLE . '.js' ),
			$dependencies,
			$version,
			true
		);

		wp_enqueue_style(
			'amp-admin',
			amp_get_asset_url( 'css/amp-admin.css' ),
			[],
			AMP__VERSION
		);

		$js_data = [
			'AMP_COMPATIBLE' => self::AMP_COMPATIBLE,
			'AMP_PLUGINS'    => wp_list_pluck( $this->get_plugins(), 'slug' ),
		];

		wp_add_inline_script(
			self::ASSET_HANDLE,
			sprintf(
				'var ampPlugins = %s;',
				wp_json_encode( $js_data )
			),
			'before'
		);
	}

	/**
	 * Add extra tab in plugin install screen.
	 *
	 * @param array $tabs List of tab in plugin install screen.
	 *
	 * @return array List of tab in plugin install screen.
	 */
	public function add_tab( $tabs ) {

		return array_merge(
			$tabs,
			[
				self::AMP_COMPATIBLE => esc_html__( 'AMP Compatible', 'amp' ),
			]
		);
	}

	/**
	 * Modify args for the plugins_api query on the AMP-compatible tab in plugin install screen.
	 *
	 * @return array
	 */
	public function filter_plugins_table_api_args() {

		$per_page   = 36;
		$total_page = ceil( count( $this->get_plugins() ) / $per_page );
		$pagenum    = isset( $_REQUEST['paged'] ) ? (int) $_REQUEST['paged'] : 1; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
		$pagenum    = ( $pagenum > $total_page ) ? $total_page : $pagenum;
		$page       = max( 1, $pagenum );

		return [
			self::AMP_COMPATIBLE => true,
			'per_page'           => $per_page,
			'page'               => $page,
		];
	}

	/**
	 * Filter the response of API call to wordpress.org for plugin data.
	 *
	 * @param bool|array|stdClass $response List of AMP compatible plugins.
	 * @param string              $action   API Action.
	 * @param array               $args     Args for plugin list.
	 *
	 * @return stdClass|array List of AMP compatible plugins.
	 */
	public function filter_plugins_api( $response, /** @noinspection PhpUnusedParameterInspection */ $action, $args ) {

		$args = (array) $args;
		if ( ! isset( $args[ self::AMP_COMPATIBLE ] ) ) {
			return $response;
		}

		$page           = ( ! empty( $args['page'] ) && 0 < (int) $args['page'] ) ? (int) $args['page'] : 1;
		$plugins        = $this->get_plugins();
		$plugins_count  = count( $plugins );
		$plugins_chunks = array_chunk( $plugins, $args['per_page'] );
		$plugins_chunk  = ( ! empty( $plugins_chunks[ $page - 1 ] ) && is_array( $plugins_chunks[ $page - 1 ] ) ) ? $plugins_chunks[ $page - 1 ] : [];

		$response          = new stdClass();
		$response->plugins = $plugins_chunk;
		$response->info    = [
			'page'    => $page,
			'pages'   => count( $plugins_chunks ),
			'results' => $plugins_count,
		];

		return $response;
	}

	/**
	 * Update action links for plugin card in plugin install screen.
	 *
	 * @param array $actions List of action button's markup for plugin card.
	 * @param array $plugin  Plugin detail.
	 *
	 * @return array List of action button's markup for plugin card.
	 */
	public function filter_action_links( $actions, $plugin ) {

		if ( isset( $plugin['wporg'] ) && true !== $plugin['wporg'] ) {
			$actions       = [];
			$external_icon = '<span aria-hidden="true" class="dashicons dashicons-external"></span>';

			if ( ! empty( $plugin['homepage'] ) ) {
				$actions[] = sprintf(
					'<a href="%s" target="_blank" rel="noopener noreferrer" aria-label="%s">%s<span class="screen-reader-text">%s</span>%s</a>',
					esc_url( $plugin['homepage'] ),
					esc_attr(
						/* translators: %s: Plugin name */
						sprintf( __( 'Site link of %s', 'amp' ), $plugin['name'] )
					),
					esc_html__( 'Visit site', 'amp' ),
					esc_html__( '(opens in a new tab)', 'amp' ),
					$external_icon
				);
			}
		}

		return $actions;
	}

	/**
	 * Add plugin metadata for AMP compatibility in plugin listing page.
	 *
	 * @param string[] $plugin_meta An array of the plugin's metadata, including
	 *                              the version, author, author URI, and plugin URI.
	 * @param string   $plugin_file Path to the plugin file relative to the plugins directory.
	 * @param array    $plugin_data An array of plugin data.
	 *
	 * @return string[] An array of the plugin's metadata
	 */
	public function filter_plugin_row_meta( $plugin_meta, /** @noinspection PhpUnusedParameterInspection */ $plugin_file, $plugin_data ) {

		$amp_plugins = wp_list_pluck( $this->get_plugins(), 'slug' );

		if ( ! empty( $plugin_data['slug'] ) && in_array( $plugin_data['slug'], $amp_plugins, true ) ) {
			$plugin_meta[] = esc_html__( 'AMP Compatible', 'amp' );
		}

		return $plugin_meta;
	}
}
PK.3Y���4uu"bunyad-amp/src/Admin/AmpThemes.php<?php
/**
 * Add new tab (AMP) in theme install screen in WordPress admin.
 *
 * @package Ampproject\Ampwp
 */

namespace AmpProject\AmpWP\Admin;

use AmpProject\AmpWP\Infrastructure\Conditional;
use AmpProject\AmpWP\Infrastructure\Delayed;
use AmpProject\AmpWP\Infrastructure\HasRequirements;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;
use AmpProject\AmpWP\Services;
use WP_Screen;
use stdClass;

/**
 * Add new tab (AMP) in theme install screen in WordPress admin.
 *
 * @since 2.2
 * @internal
 */
class AmpThemes implements Service, HasRequirements, Registerable, Conditional, Delayed {

	/**
	 * Slug for amp-compatible.
	 *
	 * @var string
	 */
	const AMP_COMPATIBLE = 'amp-compatible';

	/**
	 * Assets handle.
	 *
	 * @var string
	 */
	const ASSET_HANDLE = 'amp-theme-install';

	/**
	 * List of AMP themes.
	 *
	 * @var array
	 */
	protected $themes = [];

	/**
	 * Get the action to use for registering the service.
	 *
	 * @return string Registration action to use.
	 */
	public static function get_registration_action() {
		return 'admin_init';
	}

	/**
	 * Get the list of service IDs required for this service to be registered.
	 *
	 * @return string[] List of required services.
	 */
	public static function get_requirements() {
		return [ 'dependency_support' ];
	}

	/**
	 * Check whether the conditional object is currently needed.
	 *
	 * @return bool Whether the conditional object is needed.
	 */
	public static function is_needed() {

		if ( ! Services::get( 'dependency_support' )->has_support() ) {
			return false;
		}

		/**
		 * Filters whether to show AMP compatible ecosystem in the admin.
		 *
		 * @since 2.2
		 *
		 * @param bool   $shown Whether to show AMP-compatible themes and plugins in the admin.
		 * @param string $type  The type of ecosystem component being shown. May be either 'themes' or 'plugins'.
		 */
		return is_admin() && apply_filters( 'amp_compatible_ecosystem_shown', true, 'themes' );
	}

	/**
	 * Get list of AMP themes.
	 *
	 * @return array List of AMP themes.
	 */
	public function get_themes() {

		if ( count( $this->themes ) === 0 ) {
			$this->themes = array_map(
				static function ( $theme ) {
					return self::normalize_theme_data( $theme );
				},
				require __DIR__ . '/../../includes/ecosystem-data/themes.php'
			);

			usort(
				$this->themes,
				static function ( $a, $b ) {
					return strcasecmp( $a['name'], $b['name'] );
				}
			);
		}

		return $this->themes;
	}

	/**
	 * Normalize theme data.
	 *
	 * @param array $theme Theme data.
	 *
	 * @return array Normalized theme data.
	 */
	public static function normalize_theme_data( $theme = [] ) {

		$default = [
			'name'           => '',
			'slug'           => '',
			'version'        => '',
			'preview_url'    => '',
			'author'         => [
				'user_nicename' => '',
				'profile'       => '',
				'avatar'        => '',
				'display_name'  => '',
				'author'        => '',
				'author_url'    => '',
			],
			'screenshot_url' => '',
			'rating'         => 0,
			'num_ratings'    => 0,
			'homepage'       => '',
			'description'    => '',
			'requires'       => '',
			'requires_php'   => '',
		];

		$theme['author'] = ( ! empty( $theme['author'] ) && is_array( $theme['author'] ) ) ? $theme['author'] : [];
		$theme['author'] = wp_parse_args( $theme['author'], $default['author'] );

		return wp_parse_args( $theme, $default );
	}

	/**
	 * Adds hooks.
	 *
	 * @return void
	 */
	public function register() {

		add_filter( 'themes_api', [ $this, 'filter_themes_api' ], 10, 3 );
		add_filter( 'theme_row_meta', [ $this, 'filter_theme_row_meta' ], 10, 2 );
		add_action( 'current_screen', [ $this, 'register_hooks' ] );
	}

	/**
	 * Register all hooks.
	 *
	 * @return void
	 */
	public function register_hooks() {

		$screen = get_current_screen();
		if (
			$screen instanceof WP_Screen
			&&
			in_array( $screen->id, [ 'themes', 'theme-install', 'theme-install-network' ], true )
		) {
			add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_scripts' ] );
		}
	}

	/**
	 * Enqueue scripts and style for install theme screen.
	 *
	 * @return void
	 */
	public function enqueue_scripts() {

		$asset_file   = AMP__DIR__ . '/assets/js/' . self::ASSET_HANDLE . '.asset.php';
		$asset        = require $asset_file;
		$dependencies = $asset['dependencies'];
		$version      = $asset['version'];

		wp_enqueue_script(
			self::ASSET_HANDLE,
			amp_get_asset_url( 'js/' . self::ASSET_HANDLE . '.js' ),
			$dependencies,
			$version,
			true
		);

		wp_enqueue_style(
			'amp-admin',
			amp_get_asset_url( 'css/amp-admin.css' ),
			[],
			AMP__VERSION
		);

		$none_wporg = [];

		$slugs = [];
		foreach ( $this->get_themes() as $theme ) {
			$slugs[] = $theme['slug'];
			if ( ! isset( $theme['wporg'] ) || true !== $theme['wporg'] ) {
				$none_wporg[] = $theme['slug'];
			}
		}

		$js_data = [
			'AMP_COMPATIBLE'    => self::AMP_COMPATIBLE,
			'AMP_THEMES'        => $slugs,
			'NONE_WPORG_THEMES' => $none_wporg,
		];

		wp_add_inline_script(
			self::ASSET_HANDLE,
			sprintf(
				'var ampThemes = %s;',
				wp_json_encode( $js_data )
			),
			'before'
		);
	}

	/**
	 * Filter the response of API call to wordpress.org for theme data.
	 *
	 * @param false|object|array $override Whether to override the WordPress.org Themes API. Default false.
	 * @param string             $action   API Action.
	 * @param array              $args     Args for themes list.
	 *
	 * @return object List of AMP compatible themes.
	 */
	public function filter_themes_api( $override, $action, $args ) {

		$args = (array) $args;
		if ( ! isset( $args['browse'] ) || self::AMP_COMPATIBLE !== $args['browse'] || 'query_themes' !== $action ) {
			return $override;
		}

		$response         = new stdClass();
		$response->themes = [];

		$per_page      = max( 36, isset( $args['per_page'] ) ? (int) $args['per_page'] : 0 );
		$page          = max( 1, isset( $args['page'] ) ? (int) $args['page'] : 0 );
		$themes        = $this->get_themes();
		$themes_count  = count( $themes );
		$themes_chunks = array_chunk( $themes, $per_page );
		$themes_chunk  = ( ! empty( $themes_chunks[ $page - 1 ] ) && is_array( $themes_chunks[ $page - 1 ] ) ) ? $themes_chunks[ $page - 1 ] : [];

		foreach ( $themes_chunk as $theme ) {
			$response->themes[] = (object) $theme;
		}

		$response->info = [
			'page'    => $page,
			'pages'   => count( $themes_chunks ),
			'results' => $themes_count,
		];

		return $response;
	}

	/**
	 * Add theme metadata for AMP compatibility in theme listing page.
	 *
	 * @param string[] $theme_meta An array of the theme's metadata.
	 * @param string   $stylesheet Directory name of the theme.
	 *
	 * @return string[] An array of the theme's metadata.
	 */
	public function filter_theme_row_meta( $theme_meta, $stylesheet ) {

		$amp_themes = wp_list_pluck( $this->get_themes(), 'slug' );

		if ( in_array( $stylesheet, $amp_themes, true ) ) {
			$theme_meta[] = esc_html__( 'AMP Compatible', 'amp' );
		}

		return $theme_meta;
	}
}
PK.3Ysv��..0bunyad-amp/src/Admin/AnalyticsOptionsSubmenu.php<?php
/**
 * Class AnalyticsOptionsSubmenu
 *
 * @package AMP
 */

namespace AmpProject\AmpWP\Admin;

use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;

/**
 * Add a submenu link to the AMP options submenu.
 *
 * @since 2.0
 * @internal
 */
final class AnalyticsOptionsSubmenu implements Service, Registerable {

	/**
	 * The parent menu slug.
	 *
	 * @var string
	 */
	private $parent_menu_slug;

	/**
	 * Class constructor.
	 *
	 * @param OptionsMenu $options_menu An instance of the class handling the parent menu.
	 */
	public function __construct( OptionsMenu $options_menu ) {
		$this->parent_menu_slug = $options_menu->get_menu_slug();
	}

	/**
	 * Get the action to use for registering the service.
	 *
	 * @return string Registration action to use.
	 */
	public static function get_registration_action() {
		return 'admin_init';
	}

	/**
	 * Adds hooks.
	 */
	public function register() {
		add_action( 'admin_menu', [ $this, 'add_submenu_link' ], 99 );
	}

	/**
	 * Adds a submenu link to the AMP options submenu.
	 */
	public function add_submenu_link() {
		add_submenu_page(
			$this->parent_menu_slug,
			__( 'Analytics', 'amp' ),
			__( 'Analytics', 'amp' ),
			'manage_options',
			$this->parent_menu_slug . '#analytics-options',
			'__return_false',
			1
		);
	}
}
PK.3Y��`$bunyad-amp/src/Admin/GoogleFonts.php<?php
/**
 * Class GoogleFonts.
 *
 * Registers Google fonts for admin screens.
 *
 * @since 2.0
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Admin;

use AmpProject\AmpWP\Infrastructure\Conditional;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;
use WP_Styles;

/**
 * Enqueue Google Fonts stylesheet.
 *
 * @since 2.0
 * @internal
 */
final class GoogleFonts implements Conditional, Service, Registerable {

	/**
	 * Check whether the conditional object is currently needed.
	 *
	 * @return bool Whether the conditional object is needed.
	 */
	public static function is_needed() {
		return is_admin() && ! wp_doing_ajax();
	}

	/**
	 * Provides the asset handle.
	 *
	 * @return string
	 */
	public function get_handle() {
		return 'amp-admin-google-fonts';
	}

	/**
	 * Runs on instantiation.
	 */
	public function register() {
		add_action( 'wp_default_styles', [ $this, 'register_style' ] );
	}

	/**
	 * Registers the google font style.
	 *
	 * @param WP_Styles $wp_styles WP_Styles instance.
	 */
	public function register_style( WP_Styles $wp_styles ) {
		// PHPCS ignore reason: WP will strip multiple `family` args from the Google fonts URL while adding the version string,
		// so we need to avoid specifying a version at all.
		$wp_styles->add( // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.MissingVersion
			$this->get_handle(),
			'https://fonts.googleapis.com/css2?family=Noto+Sans:wght@400;700&family=Poppins:wght@400;700&display=swap',
			[],
			null
		);
	}
}
PK.3Y�����0bunyad-amp/src/Admin/OnboardingWizardSubmenu.php<?php
/**
 * OnboardingWizardSubmenu class.
 *
 * @package AmpProject\AmpWP
 * @since 2.0
 */

namespace AmpProject\AmpWP\Admin;

use AmpProject\AmpWP\Infrastructure\Delayed;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;

/**
 * AMP onboarding wizard submenu class.
 *
 * @since 2.0
 * @internal
 */
final class OnboardingWizardSubmenu implements Delayed, Service, Registerable {
	/**
	 * Setup screen ID.
	 *
	 * @var string
	 */
	const SCREEN_ID = 'amp-onboarding-wizard';

	/**
	 * Get the action to use for registering the service.
	 *
	 * @return string Registration action to use.
	 */
	public static function get_registration_action() {
		return 'admin_menu';
	}

	/**
	 * Runs on instantiation.
	 */
	public function register() {
		add_submenu_page(
			'options.php',
			__( 'AMP Onboarding Wizard', 'amp' ),
			__( 'AMP Onboarding Wizard', 'amp' ),
			'manage_options',
			self::SCREEN_ID,
			'__return_empty_string',
			99
		);
	}
}
PK.3YK� E{&{&4bunyad-amp/src/Admin/OnboardingWizardSubmenuPage.php<?php
/**
 * OnboardingWizardSubmenuPage class.
 *
 * @package AmpProject\AmpWP
 * @since 2.0
 */

namespace AmpProject\AmpWP\Admin;

use AMP_Options_Manager;
use AMP_Validated_URL_Post_Type;
use AMP_Validation_Manager;
use AmpProject\AmpWP\DependencySupport;
use AmpProject\AmpWP\DevTools\UserAccess;
use AmpProject\AmpWP\Infrastructure\Delayed;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;
use AmpProject\AmpWP\LoadingError;
use AmpProject\AmpWP\QueryVar;
use AmpProject\AmpWP\Validation\ScannableURLsRestController;

/**
 * AMP setup wizard submenu page class.
 *
 * @since 2.0
 * @internal
 */
final class OnboardingWizardSubmenuPage implements Delayed, Registerable, Service {
	/**
	 * Handle for JS file.
	 *
	 * @since 2.0
	 *
	 * @var string
	 */
	const ASSET_HANDLE = 'amp-onboarding-wizard';

	/**
	 * HTML ID for the app root element.
	 *
	 * @since 2.0
	 *
	 * @var string
	 */
	const APP_ROOT_ID = 'amp-onboarding-wizard';

	/**
	 * GoogleFonts instance.
	 *
	 * @var GoogleFonts
	 */
	private $google_fonts;

	/**
	 * ReaderThemes instance.
	 *
	 * @var ReaderThemes
	 */
	private $reader_themes;

	/**
	 * RESTPreloader instance.
	 *
	 * @var RESTPreloader
	 */
	private $rest_preloader;

	/**
	 * LoadingError instance.
	 *
	 * @var LoadingError
	 */
	private $loading_error;

	/**
	 * DependencySupport instance.
	 *
	 * @var DependencySupport
	 */
	private $dependency_support;

	/**
	 * OnboardingWizardSubmenuPage constructor.
	 *
	 * @param GoogleFonts       $google_fonts       An instance of the GoogleFonts service.
	 * @param ReaderThemes      $reader_themes      An instance of the ReaderThemes class.
	 * @param RESTPreloader     $rest_preloader     An instance of the RESTPreloader class.
	 * @param LoadingError      $loading_error      An instance of the LoadingError class.
	 * @param DependencySupport $dependency_support An instance of the DependencySupport class.
	 */
	public function __construct( GoogleFonts $google_fonts, ReaderThemes $reader_themes, RESTPreloader $rest_preloader, LoadingError $loading_error, DependencySupport $dependency_support ) {
		$this->google_fonts       = $google_fonts;
		$this->reader_themes      = $reader_themes;
		$this->rest_preloader     = $rest_preloader;
		$this->loading_error      = $loading_error;
		$this->dependency_support = $dependency_support;
	}

	/**
	 * Get the action to use for registering the service.
	 *
	 * @return string Registration action to use.
	 */
	public static function get_registration_action() {
		return 'admin_init';
	}

	/**
	 * Sets up hooks.
	 *
	 * @since 2.0
	 */
	public function register() {
		add_action( 'admin_head-' . $this->screen_handle(), [ $this, 'override_template' ] );
		add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] );
		add_filter( 'admin_title', [ $this, 'override_title' ] );
	}

	/**
	 * Overrides the admin title on the wizard screen. Without this filter, the title portion would be empty.
	 *
	 * @param string $admin_title The unfiltered admin title.
	 * @return string If on the wizard screen, the admin title with the page title prepended.
	 */
	public function override_title( $admin_title ) {
		if ( $this->screen_handle() !== get_current_screen()->id ) {
			return $admin_title;
		}

		return esc_html__( 'AMP Onboarding Wizard', 'amp' ) . $admin_title;
	}

	/**
	 * Renders the setup wizard screen output and exits.
	 *
	 * @since 2.0
	 */
	public function override_template() {
		$this->render();

		exit();
	}

	/**
	 * Renders the setup wizard screen output, beginning just before the closing head tag.
	 */
	public function render() {
		// Remove standard admin footer content.
		add_filter( 'admin_footer_text', '__return_empty_string' );
		remove_all_filters( 'update_footer' );

		/** This action is documented in wp-admin/admin-header.php */
		do_action( 'admin_head' );

		// <head> tag was opened prior to this action and hasn't been closed.
		?>
		</head>
		<body class="no-js">
			<script>document.body.className = document.body.className.replace('no-js','js');</script>
			<?php // The admin footer template closes three divs. ?>
			<div>
			<div>
			<div>
			<div class="amp" id="<?php echo esc_attr( self::APP_ROOT_ID ); ?>">
				<?php $this->loading_error->render(); ?>
			</div>

			<style>
			#wpfooter { display:none; }
			</style>
		<?php

		require_once ABSPATH . 'wp-admin/admin-footer.php';
	}

	/**
	 * Provides the setup screen handle.
	 *
	 * @since 2.0
	 *
	 * @return string
	 */
	public function screen_handle() {
		return sprintf( 'admin_page_%s', OnboardingWizardSubmenu::SCREEN_ID );
	}

	/**
	 * Enqueues setup assets.
	 *
	 * @since 2.0
	 *
	 * @param string $hook_suffix The current admin page.
	 */
	public function enqueue_assets( $hook_suffix ) {
		if ( $this->screen_handle() !== $hook_suffix ) {
			return;
		}

		/** This action is documented in src/Admin/OptionsMenu.php */
		do_action( 'amp_register_polyfills' );

		$asset_file   = AMP__DIR__ . '/assets/js/' . self::ASSET_HANDLE . '.asset.php';
		$asset        = require $asset_file;
		$dependencies = $asset['dependencies'];
		$version      = $asset['version'];

		wp_enqueue_script(
			self::ASSET_HANDLE,
			amp_get_asset_url( 'js/' . self::ASSET_HANDLE . '.js' ),
			$dependencies,
			$version,
			true
		);

		wp_enqueue_style(
			self::ASSET_HANDLE,
			amp_get_asset_url( 'css/amp-onboarding-wizard.css' ),
			[
				'wp-components',
				$this->google_fonts->get_handle(),
			],
			AMP__VERSION
		);

		wp_styles()->add_data( self::ASSET_HANDLE, 'rtl', 'replace' );

		$theme           = wp_get_theme();
		$is_reader_theme = $this->reader_themes->theme_data_exists( get_stylesheet() );

		$amp_settings_link       = add_query_arg(
			[ QueryVar::AMP_SCAN_IF_STALE => 1 ],
			menu_page_url( AMP_Options_Manager::OPTION_NAME, false )
		);
		$amp_validated_urls_link = admin_url(
			add_query_arg(
				[ 'post_type' => AMP_Validated_URL_Post_Type::POST_TYPE_SLUG ],
				'edit.php'
			)
		);

		$setup_wizard_data = [
			'AMP_OPTIONS_KEY'                    => AMP_Options_Manager::OPTION_NAME,
			'AMP_QUERY_VAR'                      => amp_get_slug(),
			'LEGACY_THEME_SLUG'                  => ReaderThemes::DEFAULT_READER_THEME,
			'APP_ROOT_ID'                        => self::APP_ROOT_ID,
			'AMP_SCAN_IF_STALE'                  => QueryVar::AMP_SCAN_IF_STALE,
			'CUSTOMIZER_LINK'                    => add_query_arg(
				[
					'return' => rawurlencode( $amp_settings_link ),
				],
				admin_url( 'customize.php' )
			),
			'CLOSE_LINK'                         => $this->get_close_link(),
			// @todo As of June 2020, an upcoming WP release will allow this to be retrieved via REST.
			'CURRENT_THEME'                      => [
				'name'            => $theme->get( 'Name' ),
				'description'     => $theme->get( 'Description' ),
				'is_reader_theme' => $is_reader_theme,
				'screenshot'      => $theme->get_screenshot() ?: null,
				'url'             => $theme->get( 'ThemeURI' ),
			],
			'HAS_DEPENDENCY_SUPPORT'             => $this->dependency_support->has_support(),
			'USING_FALLBACK_READER_THEME'        => $this->reader_themes->using_fallback_theme(),
			'SCANNABLE_URLS_REST_PATH'           => '/amp/v1/scannable-urls',
			'SETTINGS_LINK'                      => $amp_settings_link,
			'OPTIONS_REST_PATH'                  => '/amp/v1/options',
			'READER_THEMES_REST_PATH'            => '/amp/v1/reader-themes',
			'UPDATES_NONCE'                      => current_user_can( 'install_themes' ) ? wp_create_nonce( 'updates' ) : '',
			'USER_FIELD_DEVELOPER_TOOLS_ENABLED' => UserAccess::USER_FIELD_DEVELOPER_TOOLS_ENABLED,
			'USERS_RESOURCE_REST_PATH'           => '/wp/v2/users',
			'VALIDATE_NONCE'                     => AMP_Validation_Manager::has_cap() ? AMP_Validation_Manager::get_amp_validate_nonce() : '',
			'VALIDATED_URLS_LINK'                => $amp_validated_urls_link,
		];

		wp_add_inline_script(
			self::ASSET_HANDLE,
			sprintf(
				'var ampSettings = %s;',
				wp_json_encode( $setup_wizard_data )
			),
			'before'
		);

		if ( function_exists( 'wp_set_script_translations' ) ) {
			wp_set_script_translations( self::ASSET_HANDLE, 'amp' );
		} elseif ( function_exists( 'wp_get_jed_locale_data' ) || function_exists( 'gutenberg_get_jed_locale_data' ) ) {
			$locale_data  = function_exists( 'wp_get_jed_locale_data' ) ? wp_get_jed_locale_data( 'amp' ) : gutenberg_get_jed_locale_data( 'amp' );
			$translations = wp_json_encode( $locale_data );

			wp_add_inline_script(
				self::ASSET_HANDLE,
				'wp.i18n.setLocaleData( ' . $translations . ', "amp" );',
				'after'
			);
		}

		$this->add_preload_rest_paths();
	}

	/**
	 * Adds REST paths to preload.
	 */
	protected function add_preload_rest_paths() {
		$paths = [
			'/amp/v1/options',
			'/amp/v1/reader-themes',
			add_query_arg(
				[
					'_fields' => [ 'url', 'amp_url', 'type', 'label' ],
					ScannableURLsRestController::FORCE_STANDARD_MODE => 1,
				],
				'/amp/v1/scannable-urls'
			),
			add_query_arg(
				'_fields',
				[ 'author', 'name', 'plugin', 'status', 'version' ],
				'/wp/v2/plugins'
			),
			'/wp/v2/settings',
			add_query_arg(
				'_fields',
				[ 'author', 'name', 'status', 'stylesheet', 'template', 'version' ],
				'/wp/v2/themes'
			),
			'/wp/v2/users/me',
		];

		foreach ( $paths as $path ) {
			$this->rest_preloader->add_preloaded_path( $path );
		}
	}

	/**
	 * Determine URL that should be used to close the Onboarding Wizard.
	 *
	 * @return string Close link.
	 */
	public function get_close_link() {
		$referer = wp_get_referer();

		if ( $referer && 'wp-login.php' !== wp_basename( wp_parse_url( $referer, PHP_URL_PATH ) ) ) {
			return $referer;
		}

		// Default to the AMP Settings page if a referrer link could not be determined.
		return menu_page_url( AMP_Options_Manager::OPTION_NAME, false );
	}
}
PK.3YL�m�,�,$bunyad-amp/src/Admin/OptionsMenu.php<?php
/**
 * Class OptionsMenu
 *
 * @package Ampproject\Ampwp
 */

namespace AmpProject\AmpWP\Admin;

use AMP_Options_Manager;
use AMP_Validated_URL_Post_Type;
use AMP_Validation_Error_Taxonomy;
use AMP_Validation_Manager;
use AmpProject\AmpWP\DependencySupport;
use AmpProject\AmpWP\DevTools\UserAccess;
use AmpProject\AmpWP\Infrastructure\Conditional;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;
use AmpProject\AmpWP\LoadingError;
use AmpProject\AmpWP\QueryVar;

/**
 * OptionsMenu class.
 *
 * @since 2.0
 * @internal
 */
class OptionsMenu implements Conditional, Service, Registerable {
	/**
	 * Handle for JS file.
	 *
	 * @since 2.0
	 *
	 * @var string
	 */
	const ASSET_HANDLE = 'amp-settings';

	/**
	 * The AMP svg menu icon.
	 *
	 * @var string
	 */
	const ICON_BASE64_SVG = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjIiIGhlaWdodD0iNjIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTQxLjYyODg2NjcgMjguMTYxNDMzM2wtMTMuMDA0NSAyMS42NDIxMzM0aC0yLjM1NmwyLjMyOTEzMzMtMTQuMTAxOS03LjIxMzcuMDA5M3MtLjA2ODIuMDAyMDY2Ni0uMTAwMjMzMy4wMDIwNjY2Yy0uNjQ5OTY2NyAwLTEuMTc1OTMzNC0uNTI1OTY2Ni0xLjE3NTkzMzQtMS4xNzU5MzMzIDAtLjI3OS4yNTkzNjY3LS43NTEyMzMzLjI1OTM2NjctLjc1MTIzMzNsMTIuOTYyMTMzMy0yMS42MTYzTDM1LjcyNDQgMTIuMTc5OWwtMi4zODgwMzMzIDE0LjEyMzYgNy4yNTA5LS4wMDkzcy4wNzc1LS4wMDEwMzMzLjExNDctLjAwMTAzMzNjLjY0OTk2NjYgMCAxLjE3NTkzMzMuNTI1OTY2NiAxLjE3NTkzMzMgMS4xNzU5MzMzIDAgLjI2MzUtLjEwMzMzMzMuNDk0OTY2Ny0uMjUwMDY2Ny42OTEzbC4wMDEwMzM0LjAwMTAzMzN6TTMxIDBDMTMuODc4NyAwIDAgMTMuODc5NzMzMyAwIDMxYzAgMTcuMTIxMyAxMy44Nzg3IDMxIDMxIDMxIDE3LjEyMDI2NjcgMCAzMS0xMy44Nzg3IDMxLTMxQzYyIDEzLjg3OTczMzMgNDguMTIwMjY2NyAwIDMxIDB6IiBmaWxsPSIjYTBhNWFhIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=';

	/**
	 * GoogleFonts instance.
	 *
	 * @var GoogleFonts
	 */
	private $google_fonts;

	/**
	 * ReaderThemes instance.
	 *
	 * @var ReaderThemes
	 */
	private $reader_themes;

	/**
	 * RESTPreloader instance.
	 *
	 * @var RESTPreloader
	 */
	private $rest_preloader;

	/** @var LoadingError */
	private $loading_error;

	/** @var SiteHealth */
	private $site_health;

	/** @var DependencySupport */
	private $dependency_support;

	/**
	 * Check whether the conditional object is currently needed.
	 *
	 * @return bool Whether the conditional object is needed.
	 */
	public static function is_needed() {
		if ( ! is_admin() ) {
			return false;
		}

		/**
		 * Filter whether to enable the AMP settings.
		 *
		 * @since 0.5
		 * @param bool $enable Whether to enable the AMP settings. Default true.
		 */
		return (bool) apply_filters( 'amp_options_menu_is_enabled', true );
	}

	/**
	 * OptionsMenu constructor.
	 *
	 * @param GoogleFonts       $google_fonts An instance of the GoogleFonts service.
	 * @param ReaderThemes      $reader_themes An instance of the ReaderThemes class.
	 * @param RESTPreloader     $rest_preloader An instance of the RESTPreloader class.
	 * @param DependencySupport $dependency_support An instance of the DependencySupport class.
	 * @param LoadingError      $loading_error An instance of the LoadingError class.
	 * @param SiteHealth        $site_health An instance of the SiteHealth class.
	 */
	public function __construct( GoogleFonts $google_fonts, ReaderThemes $reader_themes, RESTPreloader $rest_preloader, DependencySupport $dependency_support, LoadingError $loading_error, SiteHealth $site_health ) {
		$this->google_fonts       = $google_fonts;
		$this->reader_themes      = $reader_themes;
		$this->rest_preloader     = $rest_preloader;
		$this->dependency_support = $dependency_support;
		$this->loading_error      = $loading_error;
		$this->site_health        = $site_health;
	}

	/**
	 * Adds hooks.
	 */
	public function register() {
		add_action( 'admin_menu', [ $this, 'add_menu_items' ], 9 );

		$plugin_file = preg_replace( '#.+/(?=.+?/.+?)#', '', AMP__FILE__ );
		add_filter( "plugin_action_links_{$plugin_file}", [ $this, 'add_plugin_action_links' ] );
		add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] );
	}

	/**
	 * Add plugin action links.
	 *
	 * @param array $links Links.
	 * @return array Modified links.
	 */
	public function add_plugin_action_links( $links ) {
		return array_merge(
			[
				'settings' => sprintf(
					'<a href="%1$s">%2$s</a>',
					esc_url( add_query_arg( 'page', $this->get_menu_slug(), admin_url( 'admin.php' ) ) ),
					esc_html__( 'Settings', 'amp' )
				),
			],
			$links
		);
	}

	/**
	 * Returns the slug for the settings page.
	 *
	 * @return string
	 */
	public function get_menu_slug() {
		return AMP_Options_Manager::OPTION_NAME;
	}

	/**
	 * Add menu.
	 */
	public function add_menu_items() {
		require_once ABSPATH . '/wp-admin/includes/plugin.php';

		/*
		 * Note that the admin items for Validated URLs and Validation Errors will also be placed under this admin menu
		 * page when the current user can manage_options.
		 */
		add_menu_page(
			esc_html__( 'AMP Settings', 'amp' ),
			esc_html__( 'AMP', 'amp' ),
			'manage_options',
			$this->get_menu_slug(),
			[ $this, 'render_screen' ],
			self::ICON_BASE64_SVG
		);

		add_submenu_page(
			$this->get_menu_slug(),
			esc_html__( 'AMP Settings', 'amp' ),
			esc_html__( 'Settings', 'amp' ),
			'manage_options',
			$this->get_menu_slug()
		);
	}

	/**
	 * Provides the settings screen handle.
	 *
	 * @return string
	 */
	public function screen_handle() {
		return sprintf( 'toplevel_page_%s', $this->get_menu_slug() );
	}

	/**
	 * Gets analytics vendors list from data directory.
	 */
	public function get_analytics_vendors() {
		$vendors_list_file = AMP__DIR__ . '/includes/ecosystem-data/analytics-vendors.php';

		if ( ! file_exists( $vendors_list_file ) ) {
			return []; // @codeCoverageIgnore
		}

		$vendors_list = require $vendors_list_file;

		return $vendors_list;
	}

	/**
	 * Enqueues settings page assets.
	 *
	 * @since 2.0
	 *
	 * @param string $hook_suffix The current admin page.
	 */
	public function enqueue_assets( $hook_suffix ) {
		if ( $this->screen_handle() !== $hook_suffix ) {
			return;
		}

		/**
		 * Fires before registering plugin assets that may require core asset polyfills.
		 *
		 * @internal
		 */
		do_action( 'amp_register_polyfills' );

		$asset_file   = AMP__DIR__ . '/assets/js/' . self::ASSET_HANDLE . '.asset.php';
		$asset        = require $asset_file;
		$dependencies = $asset['dependencies'];
		$version      = $asset['version'];

		wp_enqueue_script(
			self::ASSET_HANDLE,
			amp_get_asset_url( 'js/' . self::ASSET_HANDLE . '.js' ),
			$dependencies,
			$version,
			true
		);

		wp_enqueue_style(
			self::ASSET_HANDLE,
			amp_get_asset_url( 'css/amp-settings.css' ),
			[
				$this->google_fonts->get_handle(),
				'wp-components',
			],
			AMP__VERSION
		);

		wp_styles()->add_data( self::ASSET_HANDLE, 'rtl', 'replace' );

		$theme             = wp_get_theme();
		$is_reader_theme   = $this->reader_themes->theme_data_exists( get_stylesheet() );
		$page_cache_detail = $this->site_health->get_page_cache_detail( true );

		$amp_validated_urls_link = admin_url(
			add_query_arg(
				[ 'post_type' => AMP_Validated_URL_Post_Type::POST_TYPE_SLUG ],
				'edit.php'
			)
		);

		$amp_error_index_link = admin_url(
			add_query_arg(
				[
					'taxonomy'  => AMP_Validation_Error_Taxonomy::TAXONOMY_SLUG,
					'post_type' => AMP_Validated_URL_Post_Type::POST_TYPE_SLUG,
				],
				'edit-tags.php'
			)
		);

		$js_data = [
			'AMP_COMPATIBLE_THEMES_URL'          => current_user_can( 'install_themes' ) ? admin_url( '/theme-install.php?browse=amp-compatible' ) : 'https://amp-wp.org/ecosystem/themes/',
			'AMP_COMPATIBLE_PLUGINS_URL'         => current_user_can( 'install_plugins' ) ? admin_url( '/plugin-install.php?tab=amp-compatible' ) : 'https://amp-wp.org/ecosystem/plugins/',
			'AMP_QUERY_VAR'                      => amp_get_slug(),
			'AMP_SCAN_IF_STALE'                  => QueryVar::AMP_SCAN_IF_STALE,
			'CURRENT_THEME'                      => [
				'name'            => $theme->get( 'Name' ),
				'description'     => $theme->get( 'Description' ),
				'is_reader_theme' => $is_reader_theme,
				'screenshot'      => $theme->get_screenshot() ?: null,
				'url'             => $theme->get( 'ThemeURI' ),
			],
			'HAS_DEPENDENCY_SUPPORT'             => $this->dependency_support->has_support(),
			'OPTIONS_REST_PATH'                  => '/amp/v1/options',
			'READER_THEMES_REST_PATH'            => '/amp/v1/reader-themes',
			'SCANNABLE_URLS_REST_PATH'           => '/amp/v1/scannable-urls',
			'LEGACY_THEME_SLUG'                  => ReaderThemes::DEFAULT_READER_THEME,
			'USING_FALLBACK_READER_THEME'        => $this->reader_themes->using_fallback_theme(),
			'UPDATES_NONCE'                      => current_user_can( 'install_themes' ) ? wp_create_nonce( 'updates' ) : '',
			'USER_FIELD_DEVELOPER_TOOLS_ENABLED' => UserAccess::USER_FIELD_DEVELOPER_TOOLS_ENABLED,
			'USER_FIELD_REVIEW_PANEL_DISMISSED_FOR_TEMPLATE_MODE' => UserRESTEndpointExtension::USER_FIELD_REVIEW_PANEL_DISMISSED_FOR_TEMPLATE_MODE,
			'USERS_RESOURCE_REST_PATH'           => '/wp/v2/users',
			'VALIDATE_NONCE'                     => AMP_Validation_Manager::has_cap() ? AMP_Validation_Manager::get_amp_validate_nonce() : '',
			'VALIDATED_URLS_LINK'                => $amp_validated_urls_link,
			'ERROR_INDEX_LINK'                   => $amp_error_index_link,
			'HAS_PAGE_CACHING'                   => ( is_array( $page_cache_detail ) && 'good' === $page_cache_detail['status'] ),
			'ANALYTICS_VENDORS_LIST'             => $this->get_analytics_vendors(),
		];

		wp_add_inline_script(
			self::ASSET_HANDLE,
			sprintf(
				'var ampSettings = %s;',
				wp_json_encode( $js_data )
			),
			'before'
		);

		if ( function_exists( 'wp_set_script_translations' ) ) {
			wp_set_script_translations( self::ASSET_HANDLE, 'amp' );
		} elseif ( function_exists( 'wp_get_jed_locale_data' ) || function_exists( 'gutenberg_get_jed_locale_data' ) ) {
			$locale_data  = function_exists( 'wp_get_jed_locale_data' ) ? wp_get_jed_locale_data( 'amp' ) : gutenberg_get_jed_locale_data( 'amp' );
			$translations = wp_json_encode( $locale_data );

			wp_add_inline_script(
				self::ASSET_HANDLE,
				'wp.i18n.setLocaleData( ' . $translations . ', "amp" );',
				'after'
			);
		}

		$this->add_preload_rest_paths();
	}

	/**
	 * Display Settings.
	 */
	public function render_screen() {
		?>
		<div class="wrap">
			<form id="amp-settings" action="options.php" method="post">
				<?php settings_fields( $this->get_menu_slug() ); ?>
				<h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
				<?php settings_errors(); ?>

				<div class="amp amp-settings">
					<div id="amp-settings-root">
						<?php $this->loading_error->render(); ?>
					</div>
				</div>
			</form>
		</div>
		<?php
	}

	/**
	 * Adds REST paths to preload.
	 */
	protected function add_preload_rest_paths() {
		$paths = [
			'/amp/v1/options',
			'/amp/v1/reader-themes',
			add_query_arg(
				'_fields',
				[ 'url', 'amp_url', 'type', 'label', 'validation_errors', 'stale' ],
				'/amp/v1/scannable-urls'
			),
			add_query_arg(
				'_fields',
				[ 'author', 'name', 'plugin', 'status', 'version' ],
				'/wp/v2/plugins'
			),
			'/wp/v2/settings',
			add_query_arg(
				'_fields',
				[ 'author', 'name', 'status', 'stylesheet', 'template', 'version' ],
				'/wp/v2/themes'
			),
			'/wp/v2/users/me',
		];

		foreach ( $paths as $path ) {
			$this->rest_preloader->add_preloaded_path( $path );
		}
	}
}
PK.3Y�V{�$�$'bunyad-amp/src/Admin/PairedBrowsing.php<?php
/**
 * Class PairedBrowsing.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Admin;

use AMP_Options_Manager;
use AMP_Theme_Support;
use AMP_Validation_Manager;
use AMP_Validated_URL_Post_Type;
use AmpProject\AmpWP\Infrastructure\Conditional;
use AmpProject\AmpWP\Infrastructure\Delayed;
use AmpProject\AmpWP\Infrastructure\HasRequirements;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;
use AmpProject\AmpWP\Option;
use AmpProject\AmpWP\PairedRouting;
use AmpProject\AmpWP\QueryVar;
use AmpProject\AmpWP\Services;
use AmpProject\DevMode;
use WP_Post;
use WP_Admin_Bar;
use AmpProject\AmpWP\DevTools\UserAccess;

/**
 * Managing the paired browsing app.
 *
 * @since 2.1
 * @internal
 */
final class PairedBrowsing implements Service, Registerable, Conditional, Delayed, HasRequirements {

	/**
	 * Query var for requests to open the app.
	 *
	 * @var string
	 */
	const APP_QUERY_VAR = 'amp-paired-browsing';

	/**
	 * DevTools User Access.
	 *
	 * @var UserAccess
	 */
	public $dev_tools_user_access;

	/**
	 * Paired Routing.
	 *
	 * @var PairedRouting
	 */
	public $paired_routing;

	/**
	 * Get the action to use for registering the service.
	 *
	 * This action needs to run late enough in the frontend and the backend for the user to be logged-in and for
	 * AMP dev mode to be opted-in to.
	 *
	 * @return string Registration action to use.
	 */
	public static function get_registration_action() {
		return 'wp_loaded';
	}

	/**
	 * Check whether the conditional object is currently needed.
	 *
	 * @return bool Whether the conditional object is needed.
	 */
	public static function is_needed() {
		return (
			Services::get( 'dependency_support' )->has_support()
			&&
			(
				AMP_Theme_Support::TRANSITIONAL_MODE_SLUG === AMP_Options_Manager::get_option( Option::THEME_SUPPORT )
				||
				(
					AMP_Theme_Support::READER_MODE_SLUG === AMP_Options_Manager::get_option( Option::THEME_SUPPORT )
					&&
					get_stylesheet() === AMP_Options_Manager::get_option( Option::READER_THEME )
				)
			)
			&&
			amp_is_dev_mode()
			&&
			is_user_logged_in()
		);
	}

	/**
	 * Get the list of service IDs required for this service to be registered.
	 *
	 * @return string[] List of required services.
	 */
	public static function get_requirements() {
		return [
			'dependency_support',
		];
	}

	/**
	 * PairedBrowsing constructor.
	 *
	 * @param UserAccess    $dev_tools_user_access DevTools User Access.
	 * @param PairedRouting $paired_routing    Paired Routing.
	 */
	public function __construct( UserAccess $dev_tools_user_access, PairedRouting $paired_routing ) {
		$this->dev_tools_user_access = $dev_tools_user_access;
		$this->paired_routing        = $paired_routing;
	}

	/**
	 * Adds the filters.
	 */
	public function register() {
		add_action( 'wp', [ $this, 'init_frontend' ], PHP_INT_MAX );
		add_filter( 'amp_dev_mode_element_xpaths', [ $this, 'filter_dev_mode_element_xpaths' ] );
		add_filter( 'amp_validated_url_status_actions', [ $this, 'filter_validated_url_status_actions' ], 10, 2 );
	}

	/**
	 * Filter Dev Mode XPaths to include the inline script used by the client.
	 *
	 * @param string[] $xpaths Element XPaths.
	 * @return string[] XPaths.
	 */
	public function filter_dev_mode_element_xpaths( $xpaths ) {
		$xpaths[] = '//script[ @id = "amp-paired-browsing-client-js-before" ]';
		return $xpaths;
	}

	/**
	 * Filter the status actions for a validated URL to add the paired browsing link.
	 *
	 * @param string[] $actions Action links.
	 * @param WP_Post  $post    AMP Validated URL post.
	 * @return string[] Actions.
	 */
	public function filter_validated_url_status_actions( $actions, WP_Post $post ) {
		$actions['paired_browsing'] = sprintf(
			'<a href="%s">%s</a>',
			esc_url( $this->get_paired_browsing_url( AMP_Validated_URL_Post_Type::get_url_from_post( $post ) ) ),
			esc_html__( 'Paired Browsing', 'amp' )
		);
		return $actions;
	}

	/**
	 * Initialize frontend.
	 */
	public function init_frontend() {
		if ( ! amp_is_available() ) {
			return;
		}

		if ( isset( $_GET[ self::APP_QUERY_VAR ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
			$this->init_app();
		} else {
			$this->init_client();
		}
	}

	/**
	 * Set up app.
	 *
	 * This is the parent request that has the iframes for both AMP and non-AMP.
	 */
	public function init_app() {
		add_action( 'template_redirect', [ $this, 'ensure_app_location' ] );
		add_filter( 'template_include', [ $this, 'filter_template_include_for_app' ], PHP_INT_MAX );
	}

	/**
	 * Set up client.
	 *
	 * Make sure pages have the paired browsing client script so that the app can interact with it.
	 */
	public function init_client() {
		add_action( 'admin_bar_menu', [ $this, 'add_admin_bar_menu_item' ], 102 );

		$handle       = 'amp-paired-browsing-client';
		$asset        = require AMP__DIR__ . '/assets/js/amp-paired-browsing-client.asset.php';
		$dependencies = $asset['dependencies'];
		$version      = $asset['version'];

		wp_enqueue_script(
			$handle,
			amp_get_asset_url( '/js/amp-paired-browsing-client.js' ),
			$dependencies,
			$version,
			true
		);

		$is_amp_request = amp_is_request();
		$current_url    = amp_get_current_url();
		$amp_url        = $is_amp_request ? $current_url : $this->paired_routing->add_endpoint( $current_url );
		$non_amp_url    = ! $is_amp_request ? $current_url : $this->paired_routing->remove_endpoint( $current_url );

		wp_add_inline_script(
			$handle,
			sprintf(
				'var ampPairedBrowsingClientData = %s;',
				wp_json_encode(
					[
						'isAmpDocument' => $is_amp_request,
						'ampUrl'        => $amp_url,
						'nonAmpUrl'     => $non_amp_url,
					]
				)
			),
			'before'
		);

		// Mark enqueued script for AMP dev mode so that it is not removed.
		// @todo Revisit with <https://github.com/google/site-kit-wp/pull/505#discussion_r348683617>.
		$dev_mode_handles = array_merge(
			[ $handle, 'regenerator-runtime', 'wp-polyfill', 'wp-polyfill-inert' ],
			$dependencies
		);
		add_filter(
			'script_loader_tag',
			static function ( $tag, $script_handle ) use ( $dev_mode_handles ) {
				if ( amp_is_request() && in_array( $script_handle, $dev_mode_handles, true ) ) {
					$tag = preg_replace( '/(?<=<script)(?=\s|>)/i', ' ' . DevMode::DEV_MODE_ATTRIBUTE, $tag );
				}
				return $tag;
			},
			10,
			2
		);
	}

	/**
	 * Add paired browsing menu item to admin bar for AMP.
	 *
	 * @param WP_Admin_Bar $wp_admin_bar Admin bar.
	 */
	public function add_admin_bar_menu_item( WP_Admin_Bar $wp_admin_bar ) {
		if ( $this->dev_tools_user_access->is_user_enabled() ) {
			$wp_admin_bar->add_node(
				[
					'parent' => 'amp',
					'id'     => 'amp-paired-browsing',
					'title'  => esc_html__( 'Paired Browsing', 'amp' ),
					'href'   => esc_url( $this->get_paired_browsing_url() ),
				]
			);
		}
	}

	/**
	 * Get paired browsing URL for a given URL.
	 *
	 * @param string $url URL.
	 * @return string Paired browsing URL.
	 */
	public function get_paired_browsing_url( $url = null ) {
		if ( ! $url ) {
			$url = amp_get_current_url();
		}
		$url = $this->paired_routing->remove_endpoint( $url );
		$url = remove_query_arg(
			[ QueryVar::NOAMP, AMP_Validated_URL_Post_Type::VALIDATE_ACTION, AMP_Validation_Manager::VALIDATION_ERROR_TERM_STATUS_QUERY_VAR ],
			$url
		);
		$url = add_query_arg( self::APP_QUERY_VAR, '1', $url );
		return $url;
	}

	/**
	 * Remove any unnecessary query vars that could hamper the paired browsing experience.
	 *
	 * When a redirect is successfully done, this method will exit and not return anything. Exiting is prevented by
	 * filtering `wp_redirect` to be `false`.
	 *
	 * @return bool Whether redirection was needed.
	 */
	public function ensure_app_location() {
		$original_url = amp_get_current_url();
		$updated_url  = $this->get_paired_browsing_url( $original_url );
		if ( $updated_url === $original_url ) {
			return false;
		}

		if ( wp_safe_redirect( $updated_url ) ) {
			exit; // @codeCoverageIgnore
		}
		return true;
	}

	/**
	 * Serve paired browsing experience if it is being requested.
	 *
	 * Includes a custom template that acts as an interface to facilitate a side-by-side comparison of a
	 * non-AMP page and its AMP version to review any discrepancies.
	 *
	 * @return string Custom template if in paired browsing mode, else the supplied template.
	 */
	public function filter_template_include_for_app() {
		$handle = 'amp-paired-browsing-app';
		wp_enqueue_style(
			$handle,
			amp_get_asset_url( '/css/amp-paired-browsing-app.css' ),
			[ 'dashicons' ],
			AMP__VERSION
		);

		wp_styles()->add_data( $handle, 'rtl', 'replace' );

		$handle       = 'amp-paired-browsing-app';
		$asset        = require AMP__DIR__ . '/assets/js/amp-paired-browsing-app.asset.php';
		$dependencies = $asset['dependencies'];
		$version      = $asset['version'];

		wp_enqueue_script(
			$handle,
			amp_get_asset_url( '/js/amp-paired-browsing-app.js' ),
			$dependencies,
			$version,
			true
		);

		$data = [
			'ampPairedBrowsingQueryVar' => self::APP_QUERY_VAR,
			'noampQueryVar'             => QueryVar::NOAMP,
			'noampMobile'               => QueryVar::NOAMP_MOBILE,
			'documentTitlePrefix'       => __( 'AMP Paired Browsing:', 'amp' ),
		];
		wp_add_inline_script(
			$handle,
			sprintf(
				'var ampPairedBrowsingAppData = %s;',
				wp_json_encode( $data )
			),
			'before'
		);

		return AMP__DIR__ . '/includes/templates/amp-paired-browsing.php';
	}
}
PK.3YI��Zvv/bunyad-amp/src/Admin/PluginActivationNotice.php<?php
/**
 * Class PluginActivationNotice.
 *
 * Adds an admin notice to the plugins screen after the plugin is activated.
 *
 * @since 2.0
 *
 * @package AMP
 */

namespace AmpProject\AmpWP\Admin;

use AMP_Options_Manager;
use AmpProject\AmpWP\Infrastructure\Delayed;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;
use AmpProject\AmpWP\Option;

/**
 * Class PluginActivationNotice
 *
 * @since 2.0
 * @internal
 */
final class PluginActivationNotice implements Delayed, Service, Registerable {

	/**
	 * The ID of the plugin activation notice.
	 *
	 * @var string
	 */
	const NOTICE_ID = 'amp-plugin-notice-1';

	/**
	 * Get the action to use for registering the service.
	 *
	 * @return string Registration action to use.
	 */
	public static function get_registration_action() {
		return 'admin_init';
	}

	/**
	 * Runs on instantiation.
	 */
	public function register() {
		add_action( 'admin_notices', [ $this, 'render_notice' ] );
	}

	/**
	 * Renders a notice on the plugins screen after the plugin is activated. Persists until it is closed or setup has been completed.
	 */
	public function render_notice() {
		if ( 'plugins' !== get_current_screen()->id ) {
			return;
		}

		if ( AMP_Options_Manager::get_option( Option::PLUGIN_CONFIGURED ) ) {
			return;
		}

		$dismissed = get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true );
		if ( in_array( self::NOTICE_ID, explode( ',', (string) $dismissed ), true ) ) {
			return;
		}

		?>
		<div class="amp-plugin-notice notice notice-info is-dismissible" id="<?php echo esc_attr( self::NOTICE_ID ); ?>">
			<div class="notice-dismiss"></div>
			<div class="amp-plugin-notice-icon-holder">
				<svg width="69" height="69" viewBox="0 0 69 69" fill="none" xmlns="http://www.w3.org/2000/svg">
					<path d="M34.4424 68.875C53.2201 68.875 68.4424 53.6527 68.4424 34.875C68.4424 16.0973 53.2201 0.875 34.4424 0.875C15.6647 0.875 0.442383 16.0973 0.442383 34.875C0.442383 53.6527 15.6647 68.875 34.4424 68.875Z" fill="#0479C2"/>
					<path d="M36.9847 29.7355H45.2206C45.2206 29.7355 46.9573 29.7355 46.0621 31.7049L31.8641 55.3384H29.2322L31.7388 39.8871L23.3775 39.8334C23.3775 39.8334 21.8915 39.2426 23.0195 37.3268L36.9847 14.2305H39.724L36.9847 29.7355Z" fill="white"/>
				</svg>
			</div>
			<div>
				<h2><?php esc_html_e( 'Welcome to AMP for WordPress', 'amp' ); ?></h2>
				<p><?php esc_html_e( 'Bring the speed and capabilities of the AMP web framework to your site; support content authoring and website development with the effective tools the AMP plugin provides.', 'amp' ); ?></p>

				<p><a href="<?php menu_page_url( OnboardingWizardSubmenu::SCREEN_ID ); ?>"><?php esc_html_e( 'Open the onboarding wizard', 'amp' ); ?></a></p>
			</div>
		</div>

		<script>
		jQuery( function( $ ) {
			// On dismissing the notice, make a POST request to store this notice with the dismissed WP pointers so it doesn't display again.
			$( <?php echo wp_json_encode( '#' . self::NOTICE_ID ); ?> ).on( 'click', '.notice-dismiss', function() {
				$.post( ajaxurl, {
					pointer: <?php echo wp_json_encode( self::NOTICE_ID ); ?>,
					action: 'dismiss-wp-pointer'
				} );
			} );
		} );
		</script>
		<style type="text/css">
			.amp-plugin-notice {
				background: #E8F5F9;
				box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1), inset 4px 0 0 #419ECD;
				display: flex;
				padding: 21px 23px;
			}
			.amp-plugin-notice + .notice {
				clear: both;
			}
			.amp-plugin-notice-icon-holder {
				padding-right: 17px;
			}
			.amp-plugin-notice h2 {
				margin-bottom: 8px;
				margin-top: 0;
			}
			.amp-plugin-notice p {
				margin-bottom: 2px;
				margin-top: 2px;
			}

		</style>
		<?php
	}
}
PK.3Y�_���&bunyad-amp/src/Admin/PluginRowMeta.php<?php
/**
 * Class PluginRowMeta.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Admin;

use AmpProject\AmpWP\Infrastructure\Delayed;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;

/**
 * Updates the plugin row meta for the plugin.
 *
 * @since 2.1
 * @internal
 */
final class PluginRowMeta implements Delayed, Service, Registerable {

	/**
	 * Get the action to use for registering the service.
	 *
	 * @return string Registration action to use.
	 */
	public static function get_registration_action() {
		return 'admin_init';
	}

	/**
	 * Runs on instantiation.
	 */
	public function register() {
		add_filter( 'plugin_row_meta', [ $this, 'get_plugin_row_meta' ], 10, 2 );
	}

	/**
	 * Updates the plugin row meta with link to review plugin.
	 *
	 * @param string[] $meta        An array of the plugin's metadata, including the version, author, author URI,
	 *                              and plugin URI.
	 * @param string   $plugin_file Path to the plugin file relative to the plugins directory.
	 * @return string[] Plugin row meta.
	 */
	public function get_plugin_row_meta( $meta, $plugin_file ) {
		if ( plugin_basename( AMP__FILE__ ) !== $plugin_file ) {
			return $meta;
		}

		$additional_meta = [
			'<a href="https://wordpress.org/support/plugin/amp/reviews/#new-post" target="_blank" rel="noreferrer noopener">' . esc_html__( 'Leave review', 'amp' ) . '</a>',
		];

		return array_merge( $meta, $additional_meta );
	}
}
PK.3Yi��P� � "bunyad-amp/src/Admin/Polyfills.php<?php
/**
 * Handles backward compatibility of assets for older versions of WP.
 *
 * @since 2.0
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Admin;

use AmpProject\AmpWP\Infrastructure\Delayed;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;
use WP_Scripts;
use WP_Styles;

/**
 * Registers assets that may not be available in the current site's version of core.
 *
 * @since 2.0
 * @internal
 */
final class Polyfills implements Delayed, Service, Registerable {

	/**
	 * Get the action to use for registering the service.
	 *
	 * @return string Registration action to use.
	 */
	public static function get_registration_action() {
		return 'amp_register_polyfills';
	}

	/**
	 * Runs on instantiation.
	 */
	public function register() {
		if ( function_exists( 'get_current_screen' ) ) {
			$screen = get_current_screen();
			if ( ! empty( $screen->is_block_editor ) ) {
				return;
			}
		}

		// Applicable to Gutenberg v5.5.0 and older.
		if ( function_exists( 'is_gutenberg_page' ) && is_gutenberg_page() ) {
			return;
		}

		$this->register_shimmed_scripts( wp_scripts() );
		$this->register_shimmed_styles( wp_styles() );
	}

	/**
	 * Registers scripts not guaranteed to be available in core.
	 *
	 * @param WP_Scripts $wp_scripts The WP_Scripts instance for the current page.
	 */
	public function register_shimmed_scripts( $wp_scripts ) {
		$was_overridden = $this->override_script(
			$wp_scripts,
			'lodash',
			amp_get_asset_url( 'js/vendor/lodash.js' ),
			[],
			'4.17.21',
			true
		);

		if ( ! $was_overridden ) {
			$wp_scripts->add_inline_script( 'lodash', 'window.lodash = _.noConflict();' );
		}

		/*
		 * Polyfill dependencies that are registered in Gutenberg and WordPress 5.0.
		 * Note that Gutenberg will override these at wp_enqueue_scripts if it is active.
		 */
		$handles = [ 'wp-i18n', 'wp-dom-ready', 'wp-hooks', 'wp-html-entities', 'wp-polyfill', 'wp-url' ];
		foreach ( $handles as $handle ) {
			$asset_file   = AMP__DIR__ . "/assets/js/{$handle}.asset.php";
			$asset        = require $asset_file;
			$dependencies = $asset['dependencies'];
			$version      = $asset['version'];

			$this->override_script(
				$wp_scripts,
				$handle,
				amp_get_asset_url( "js/{$handle}.js" ),
				$dependencies,
				$version,
				true
			);
		}

		$asset_handle = 'wp-api-fetch';
		$asset_file   = AMP__DIR__ . "/assets/js/{$asset_handle}.asset.php";
		$asset        = require $asset_file;
		$dependencies = $asset['dependencies'];
		$version      = $asset['version'];

		$was_overridden = $this->override_script(
			$wp_scripts,
			$asset_handle,
			amp_get_asset_url( "js/{$asset_handle}.js" ),
			$dependencies,
			$version,
			true
		);

		if ( ! $was_overridden ) {
			$wp_scripts->add_inline_script(
				$asset_handle,
				sprintf(
					'wp.apiFetch.use( wp.apiFetch.createRootURLMiddleware( "%s" ) );',
					esc_url_raw( get_rest_url() )
				),
				'after'
			);
			$wp_scripts->add_inline_script(
				$asset_handle,
				implode(
					"\n",
					[
						sprintf(
							'wp.apiFetch.nonceMiddleware = wp.apiFetch.createNonceMiddleware( "%s" );',
							( wp_installing() && ! is_multisite() ) ? '' : wp_create_nonce( 'wp_rest' )
						),
						'wp.apiFetch.use( wp.apiFetch.nonceMiddleware );',
						'wp.apiFetch.use( wp.apiFetch.mediaUploadMiddleware );',
						sprintf(
							'wp.apiFetch.nonceEndpoint = "%s";',
							admin_url( 'admin-ajax.php?action=rest-nonce' )
						),
					]
				),
				'after'
			);
		}
	}

	/**
	 * Registers shimmed assets not guaranteed to be available in core.
	 *
	 * @param WP_Styles $wp_styles The WP_Styles instance for the current page.
	 */
	public function register_shimmed_styles( $wp_styles ) {
		$this->override_style(
			$wp_styles,
			'wp-components',
			amp_get_asset_url( 'css/wp-components.css' ),
			[],
			AMP__VERSION
		);
	}

	/**
	 * Registers a script according to `wp_register_script()`. Honors this request by reassigning internal dependency
	 * properties of any script handle already registered by that name. It does not deregister the original script, to
	 * avoid losing inline scripts which may have been attached.
	 *
	 * Adapted from `gutenberg_override_script()` in the Gutenberg plugin.
	 *
	 * @link https://github.com/WordPress/gutenberg/blob/132fec1fb5b4ab6af1d7696cbfe0574597644f18/lib/client-assets.php#L56-L105
	 *
	 * @param WP_Scripts       $scripts   WP_Scripts instance.
	 * @param string           $handle    Name of the script. Should be unique.
	 * @param string           $src       Full URL of the script, or path of the script relative to the WordPress root directory.
	 * @param array            $deps      Optional. An array of registered script handles this script depends on. Default empty array.
	 * @param string|bool|null $ver       Optional. String specifying script version number, if it has one, which is added to the URL
	 *                                    as a query string for cache busting purposes. If version is set to false, a version
	 *                                    number is automatically added equal to current installed WordPress version.
	 *                                    If set to null, no version is added.
	 * @param bool             $in_footer Optional. Whether to enqueue the script before </body> instead of in the <head>.
	 *                                    Default `false`.
	 *
	 * @return bool Whether or not the script was overridden.
	 */
	public function override_script( $scripts, $handle, $src, $deps = [], $ver = false, $in_footer = false ) {
		$script = $scripts->query( $handle, 'registered' );

		if ( $script ) {
			/*
			 * In many ways, this is a reimplementation of `wp_register_script` but
			 * bypassing consideration of whether a script by the given handle had
			 * already been registered.
			 */

			// See: `_WP_Dependency::__construct()`.
			$script->src  = $src;
			$script->deps = $deps;
			$script->ver  = $ver;
			$script->args = $in_footer;

			/*
			 * The script's `group` designation is an indication of whether it is
			 * to be printed in the header or footer. The behavior here defers to
			 * the arguments as passed. Specifically, group data is not assigned
			 * for a script unless it is designated to be printed in the footer.
			 */

			// See: `wp_register_script()` .
			unset( $script->extra['group'] );
			if ( $in_footer ) {
				$script->add_data( 'group', 1 );
			}
		} else {
			$scripts->add( $handle, $src, $deps, $ver, $in_footer );
		}

		return (bool) $script;
	}

	/**
	 * Registers a style according to `wp_register_style`. Honors this request by deregistering any style by the same
	 * handler before registration.
	 *
	 * Adapted from `gutenberg_override_style()` in the Gutenberg plugin.
	 *
	 * @link https://github.com/WordPress/gutenberg/blob/132fec1fb5b4ab6af1d7696cbfe0574597644f18/lib/client-assets.php#L177-L182
	 *
	 * @param WP_Styles        $styles WP_Styles instance.
	 * @param string           $handle Name of the stylesheet. Should be unique.
	 * @param string           $src    Full URL of the stylesheet, or path of the stylesheet relative to the WordPress root directory.
	 * @param array            $deps   Optional. An array of registered stylesheet handles this stylesheet depends on. Default empty array.
	 * @param string|bool|null $ver    Optional. String specifying stylesheet version number, if it has one, which is added to the URL
	 *                                 as a query string for cache busting purposes. If version is set to false, a version
	 *                                 number is automatically added equal to current installed WordPress version.
	 *                                 If set to null, no version is added.
	 * @param string           $media  Optional. The media for which this stylesheet has been defined.
	 *                                 Default 'all'. Accepts media types like 'all', 'print' and 'screen', or media queries like
	 *                                 '(orientation: portrait)' and '(max-width: 640px)'.
	 */
	public function override_style( $styles, $handle, $src, $deps = [], $ver = false, $media = 'all' ) {
		$style = $styles->query( $handle, 'registered' );
		if ( $style ) {
			$styles->remove( $handle );
		}
		$styles->add( $handle, $src, $deps, $ver, $media );
	}
}
PK.3Y7�"�5�5%bunyad-amp/src/Admin/ReaderThemes.php<?php
/**
 * Fetches and formats data for AMP reader themes.
 *
 * @package AMP
 * @since 2.0
 */

namespace AmpProject\AmpWP\Admin;

use AMP_Core_Theme_Sanitizer;
use AMP_Options_Manager;
use AmpProject\AmpWP\ExtraThemeAndPluginHeaders;
use AmpProject\AmpWP\Option;
use WP_Error;
use WP_Theme;
use WP_Upgrader;

/**
 * Handles reader themes.
 *
 * @since 2.0
 * @internal
 */
final class ReaderThemes {
	/**
	 * Formatted theme data.
	 *
	 * @var array
	 */
	private $themes;

	/**
	 * Reader themes supported by default.
	 *
	 * @var array
	 */
	private $default_reader_themes;

	/**
	 * Whether themes can be installed in the current WordPress installation.
	 *
	 * @var bool
	 */
	private $can_install_themes;

	/**
	 * The error resulting from a failed themes_api request.
	 *
	 * @var null|WP_Error
	 */
	private $themes_api_error;

	/**
	 * The default reader theme.
	 *
	 * @var string
	 */
	const DEFAULT_READER_THEME = 'legacy';

	/**
	 * Status indicating a reader theme is active on the site.
	 *
	 * @var string
	 */
	const STATUS_ACTIVE = 'active';

	/**
	 * Status indicating a reader theme is installed but not active.
	 *
	 * @var string
	 */
	const STATUS_INSTALLED = 'installed';

	/**
	 * Status indicating a reader theme is not installed but is installable.
	 *
	 * @var string
	 */
	const STATUS_INSTALLABLE = 'installable';

	/**
	 * Status indicating a reader theme is not installed and can't be installed.
	 *
	 * @var string
	 */
	const STATUS_NON_INSTALLABLE = 'non-installable';

	/**
	 * Retrieves all AMP plugin options specified in the endpoint schema.
	 *
	 * @return array Formatted theme data.
	 */
	public function get_themes() {
		if ( null !== $this->themes ) {
			return $this->themes;
		}

		$themes = $this->get_default_reader_themes();

		// Also include themes that declare AMP-compatibility in their style.css.
		$default_reader_theme_slugs = wp_list_pluck( $themes, 'slug' );
		foreach ( $this->get_compatible_installed_themes() as $compatible_installed_theme ) {
			if ( ! in_array( $compatible_installed_theme->get_stylesheet(), $default_reader_theme_slugs, true ) ) {
				$themes[] = $this->normalize_theme_data( $compatible_installed_theme );
			}
		}

		/**
		 * Filters supported reader themes.
		 *
		 * @param array $themes [
		 *     Reader theme data.
		 *     {
		 *         @type string         $name           Theme name.
		 *         @type string         $slug           Theme slug.
		 *         @type string         $slug           URL of theme preview.
		 *         @type string         $screenshot_url The URL of a mobile screenshot. Note: if this is empty, the theme may not display.
		 *         @type string         $homepage       A link to a page with more information about the theme.
		 *         @type string         $description    A description of the theme.
		 *         @type string|boolean $requires       Minimum version of WordPress required by the theme. False if all versions are supported.
		 *         @type string|boolean $requires_php   Minimum version of PHP required by the theme. False if all versions are supported.
		 *         @type string         $download_link  A link to the theme's zip file. If empty, the plugin will attempt to download the theme from wordpress.org.
		 *     }
		 * ]
		 */
		$themes = (array) apply_filters( 'amp_reader_themes', $themes );

		$selected_theme_slug = AMP_Options_Manager::get_option( Option::READER_THEME );
		$theme_slugs         = wp_list_pluck( $themes, 'slug' );

		/*
		 * Check if the chosen Reader theme is among the list of filtered themes. If not, an attempt will be made to
		 * obtain the theme data from the list of installed themes. If neither case is true, the AMP Legacy theme will
		 * be used as a fallback.
		 */
		if ( self::DEFAULT_READER_THEME !== $selected_theme_slug && ! in_array( $selected_theme_slug, $theme_slugs, true ) ) {
			$active_theme = wp_get_theme( $selected_theme_slug );

			if ( $active_theme->exists() ) {
				$themes[] = $this->normalize_theme_data( $active_theme );
			}
		}

		$themes = array_filter(
			$themes,
			static function( $theme ) {
				return is_array( $theme ) && ! empty( $theme['slug'] );
			}
		);

		$themes = array_map(
			function ( $theme ) {
				$theme                 = $this->normalize_theme_data( $theme );
				$theme['availability'] = $this->get_theme_availability( $theme );
				return $theme;
			},
			$themes
		);

		// Sort themes alphabetically before AMP Legacy.
		usort(
			$themes,
			static function ( $a, $b ) {
				return strcmp( $a['name'], $b['name'] );
			}
		);

		/*
		 * Append the AMP Legacy theme details after filtering the default themes. This ensures the AMP Legacy theme
		 * will always be available as a fallback if the chosen Reader theme becomes unavailable.
		 */
		$themes[] = $this->get_legacy_theme();

		$this->themes = array_values( $themes );

		return $this->themes;
	}

	/**
	 * Provides the themes api error, or null if there is no error.
	 *
	 * @return null|WP_Error
	 */
	public function get_themes_api_error() {
		return $this->themes_api_error;
	}

	/**
	 * Gets a reader theme by slug.
	 *
	 * @param string $slug Theme slug.
	 * @return array|false Theme data or false if the theme is not found.
	 */
	public function get_reader_theme_by_slug( $slug ) {
		return current(
			array_filter(
				$this->get_themes(),
				static function ( $theme ) use ( $slug ) {
					return $theme['slug'] === $slug;
				}
			)
		);
	}

	/**
	 * Retrieves theme data.
	 *
	 * @return array Theme data from the wordpress.org API, or an empty array on failure.
	 */
	public function get_default_reader_themes() {
		if ( null !== $this->default_reader_themes ) {
			return $this->default_reader_themes;
		}

		$cache_key = 'amp_themes_wporg';
		$response  = get_transient( $cache_key );

		if ( ! $response ) {
			require_once ABSPATH . 'wp-admin/includes/theme.php';

			$response = themes_api(
				'query_themes',
				[
					'author'   => 'wordpressdotorg',
					'per_page' => 24, // There are only 13 as of 12/2020.
				]
			);

			if ( is_array( $response ) ) {
				$response = (object) $response;
			}

			/**
			 * The response must minimally be an object with a themes array.
			 *
			 * @see https://wordpress.org/support/topic/issue-during-activating-the-updated-plugins/#post-13383737
			 */
			if (
				! is_object( $response )
				|| ! property_exists( $response, 'themes' )
				|| ! is_array( $response->themes )
				|| is_wp_error( $response )
			) {
				$message = __( 'The request for reader themes from WordPress.org resulted in an invalid response. Check your Site Health to confirm that your site can communicate with WordPress.org. Otherwise, please try again later or contact your host.', 'amp' );
				if ( is_wp_error( $response ) && defined( 'WP_DEBUG_DISPLAY' ) && WP_DEBUG_DISPLAY ) {
					$message .= ' ' . __( 'Error:', 'amp' );
					if ( $response->get_error_message() ) {
						$message .= sprintf( ' %s (%s).', $response->get_error_message(), $response->get_error_code() );
					} else {
						$message .= ' ' . $response->get_error_code() . '.';
					}
				}

				$this->themes_api_error = new WP_Error(
					'amp_themes_api_invalid_response',
					$message
				);

				return [];
			}

			if ( empty( $response->themes ) ) {
				$this->themes_api_error = new WP_Error(
					'amp_themes_api_empty_themes_array',
					__( 'The default reader themes cannot be displayed because a plugin appears to be overriding the themes response from WordPress.org.', 'amp' )
				);
				return [];
			}

			// Store the transient only if the response was valid.
			set_transient( $cache_key, $response, DAY_IN_SECONDS );
		}

		$supported_themes = array_diff(
			AMP_Core_Theme_Sanitizer::get_supported_themes(),
			[ 'twentyten' ] // Because it is not responsive.
		);

		// Get the subset of themes.
		$reader_themes = array_filter(
			$response->themes,
			static function ( $theme ) use ( $supported_themes ) {
				return in_array( $theme->slug, $supported_themes, true );
			}
		);

		$reader_themes = array_map(
			function ( $theme ) {
				$theme_data                   = $this->normalize_theme_data( $theme );
				$theme_data['screenshot_url'] = amp_get_asset_url( "images/reader-themes/{$theme_data['slug']}.jpg" );

				return $theme_data;
			},
			$reader_themes
		);

		$this->default_reader_themes = $reader_themes;
		return $this->default_reader_themes;
	}

	/**
	 * Get installed themes that are marked as being AMP-compatible.
	 *
	 * @return WP_Theme[] Themes.
	 */
	private function get_compatible_installed_themes() {
		$compatible_themes = [];
		foreach ( wp_get_themes() as $theme ) {
			$value = $theme->get( ExtraThemeAndPluginHeaders::AMP_HEADER );
			if ( rest_sanitize_boolean( $value ) && ExtraThemeAndPluginHeaders::AMP_HEADER_LEGACY !== $value ) {
				$compatible_themes[] = $theme;
			}
		}
		return $compatible_themes;
	}

	/**
	 * Normalize the specified theme data.
	 *
	 * @param mixed $theme Theme.
	 *
	 * @return array Normalized theme data.
	 */
	private function normalize_theme_data( $theme ) {
		if ( $theme instanceof WP_Theme ) {
			if ( $theme->errors() ) {
				return [];
			}

			$mobile_screenshot = null;
			if ( file_exists( $theme->get_stylesheet_directory() . '/screenshot-mobile.png' ) ) {
				$mobile_screenshot = $theme->get_stylesheet_directory_uri() . '/screenshot-mobile.png';
			} elseif ( file_exists( $theme->get_stylesheet_directory() . '/screenshot-mobile.jpg' ) ) {
				$mobile_screenshot = $theme->get_stylesheet_directory_uri() . '/screenshot-mobile.jpg';
			} else {
				$mobile_screenshot = $theme->get_screenshot();
			}
			if ( $mobile_screenshot ) {
				$mobile_screenshot = add_query_arg( 'ver', $theme->get( 'Version' ), $mobile_screenshot );
			}

			return [
				'name'           => $theme->display( 'Name' ) ?: $theme->get_stylesheet(),
				'slug'           => $theme->get_stylesheet(),
				'preview_url'    => null,
				'screenshot_url' => $mobile_screenshot ?: '',
				'homepage'       => $theme->display( 'ThemeURI' ),
				'description'    => $theme->display( 'Description' ),
				'requires'       => $theme->get( 'RequiresWP' ),
				'requires_php'   => $theme->get( 'RequiresPHP' ),
			];
		}

		if ( ! is_array( $theme ) && ! is_object( $theme ) ) {
			return [];
		}

		$keys = [
			'name',
			'slug',
			'preview_url',
			'screenshot_url',
			'homepage',
			'description',
			'requires',
			'requires_php',
		];

		return array_merge(
			array_fill_keys( $keys, '' ),
			wp_array_slice_assoc( (array) $theme, $keys )
		);
	}

	/**
	 * Returns whether a theme can be installed on the system.
	 *
	 * @param array $theme Theme data.
	 * @return bool True if themes can be installed.
	 */
	public function can_install_theme( $theme ) {
		if ( ! current_user_can( 'install_themes' ) ) {
			return false;
		}

		if ( null === $this->can_install_themes ) {
			if ( ! function_exists( 'request_filesystem_credentials' ) ) {
				require_once ABSPATH . 'wp-admin/includes/file.php';
			}

			if ( ! class_exists( 'WP_Upgrader' ) ) {
				require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
			}

			ob_start(); // Prevent request_filesystem_credentials() from outputting the request-filesystem-credentials-form.
			require_once ABSPATH . 'wp-admin/includes/template.php'; // Needed for submit_button().
			$this->can_install_themes = true === ( new WP_Upgrader() )->fs_connect( [ get_theme_root() ] );
			ob_end_clean();
		}

		if ( ! $this->can_install_themes ) {
			return false;
		}

		if ( ! empty( $theme['requires'] ) && version_compare( get_bloginfo( 'version' ), $theme['requires'], '<' ) ) {
			return false;
		}

		if ( ! empty( $theme['requires_php'] ) && version_compare( phpversion(), $theme['requires_php'], '<' ) ) {
			return false;
		}

		return true;
	}

	/**
	 * Returns reader theme availability status.
	 *
	 * @param array $theme Theme data.
	 * @return string Theme availability status.
	 */
	public function get_theme_availability( $theme ) {
		switch ( true ) {
			case get_stylesheet() === $theme['slug']:
				return self::STATUS_ACTIVE;

			case self::DEFAULT_READER_THEME === $theme['slug'] || wp_get_theme( $theme['slug'] )->exists():
				return self::STATUS_INSTALLED;

			case $this->can_install_theme( $theme ):
				return self::STATUS_INSTALLABLE;

			default:
				return self::STATUS_NON_INSTALLABLE;
		}
	}

	/**
	 * Determine if the data for the specified Reader theme exists.
	 *
	 * @param string $theme_slug Theme slug.
	 * @return bool Whether the Reader theme data exists.
	 */
	public function theme_data_exists( $theme_slug ) {
		return in_array( $theme_slug, wp_list_pluck( $this->get_themes(), 'slug' ), true );
	}

	/**
	 * Determine if the AMP legacy Reader theme is being used as a fallback.
	 *
	 * @return bool True if being used as a fallback, false otherwise.
	 */
	public function using_fallback_theme() {
		return amp_is_legacy()
			&& self::DEFAULT_READER_THEME !== AMP_Options_Manager::get_option( Option::READER_THEME );
	}

	/**
	 * Provides details for the legacy theme included with the plugin.
	 *
	 * @return array
	 */
	private function get_legacy_theme() {
		return [
			'name'           => __( 'AMP Legacy', 'amp' ),
			'slug'           => self::DEFAULT_READER_THEME,
			'preview_url'    => 'https://amp-wp.org', // This is unused.
			'screenshot_url' => amp_get_asset_url( 'images/reader-themes/legacy.jpg' ),
			'homepage'       => 'https://amp-wp.org/documentation/how-the-plugin-works/classic-templates/',
			'description'    => __( 'The original templates included in the plugin with limited customization options.', 'amp' ),
			'requires'       => false,
			'requires_php'   => false,
			'availability'   => self::STATUS_INSTALLED,
		];
	}
}
PK.3Y:kF��>bunyad-amp/src/Admin/ReenableCssTransientCachingAjaxAction.php<?php
/**
 * Class ReenableCssTransientCachingAjaxAction.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Admin;

use AMP_Options_Manager;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;
use AmpProject\AmpWP\Option;

/**
 * Base class to define a new AJAX action.
 *
 * @package AmpProject\AmpWP
 * @since 2.0
 * @internal
 */
final class ReenableCssTransientCachingAjaxAction implements Service, Registerable {

	/**
	 * Action to use for enqueueing the JS logic at the backend.
	 *
	 * @var string
	 */
	const BACKEND_ENQUEUE_ACTION = 'admin_enqueue_scripts';

	/**
	 * AJAX action name to use.
	 *
	 * @var string
	 */
	const AJAX_ACTION = 'amp_reenable_css_transient_caching';

	/**
	 * Selector to attach the click handler to.
	 *
	 * @var string
	 */
	const SELECTOR = 'a.reenable-css-transient-caching';

	/**
	 * Register the AJAX action with the WordPress system.
	 */
	public function register() {
		add_action( static::BACKEND_ENQUEUE_ACTION, [ $this, 'register_ajax_script' ] );
		add_action( 'wp_ajax_' . self::AJAX_ACTION, [ $this, 'reenable_css_transient_caching' ] );
	}

	/**
	 * Register the AJAX logic.
	 *
	 * @param string $hook_suffix Hook suffix to identify from what admin page the call is coming from.
	 */
	public function register_ajax_script( $hook_suffix ) {
		if ( 'tools_page_health-check' !== $hook_suffix && 'site-health.php' !== $hook_suffix ) {
			return;
		}

		$exports = [
			'selector' => self::SELECTOR,
			'action'   => self::AJAX_ACTION,
			'postArgs' => [ 'nonce' => wp_create_nonce( self::AJAX_ACTION ) ],
		];

		ob_start();
		?>
		<script>
			(( $, { selector, action, postArgs } ) => {
				document.addEventListener( 'DOMContentLoaded', () => {
					$( '.health-check-body' ).on( 'click', selector, ( event ) => {
						event.preventDefault();
						const element = event.target;
						if ( element.classList.contains( 'disabled' ) ) {
							return;
						}
						element.classList.add( 'disabled' );
						wp.ajax.post( action, postArgs )
							.done( () => {
								element.classList.remove( 'ajax-failure' );
								element.classList.add( 'ajax-success' );
							} )
							.fail( () => {
								element.classList.remove( 'ajax-success' );
								element.classList.add( 'ajax-failure' );
								element.classList.remove( 'disabled' );
							} );
					} );
				} );
			})( jQuery, <?php echo wp_json_encode( $exports ); ?> );
		</script>
		<?php
		$script = str_replace( [ '<script>', '</script>' ], '', ob_get_clean() );

		wp_enqueue_script( 'jquery' );
		wp_enqueue_script( 'wp-util' );
		wp_add_inline_script( 'wp-util', $script );
	}

	/**
	 * Re-enable the CSS Transient caching.
	 *
	 * This is triggered via an AJAX call from the Site Health panel.
	 */
	public function reenable_css_transient_caching() {
		check_ajax_referer( self::AJAX_ACTION, 'nonce' );

		if ( ! current_user_can( 'manage_options' ) ) {
			wp_send_json_error( 'Unauthorized.', 401 );
		}

		$result = AMP_Options_Manager::update_option( Option::DISABLE_CSS_TRANSIENT_CACHING, false );

		if ( false === $result ) {
			wp_send_json_error( 'CSS transient caching could not be re-enabled.', 500 );
		}

		wp_send_json_success( 'CSS transient caching was re-enabled.', 200 );
	}
}
PK.3Y�w��BB&bunyad-amp/src/Admin/RESTPreloader.php<?php
/**
 * Class RESTPreloader.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Admin;

use AmpProject\AmpWP\Infrastructure\Service;

/**
 * Preloads REST responses for client-side applications to prevent having to call fetch on page load.
 *
 * @package AmpProject\AmpWP
 * @since 2.0
 * @internal
 */
final class RESTPreloader implements Service {

	/**
	 * Paths to preload.
	 *
	 * @var array
	 */
	private $paths = [];

	/**
	 * Adds a REST path to be preloaded.
	 *
	 * @param string $path A REST path to cache for apiFetch middleware.
	 */
	public function add_preloaded_path( $path ) {
		// Delay adding the preload_data action hook until after a path is added.
		if ( empty( $this->paths ) ) {
			add_action( 'admin_enqueue_scripts', [ $this, 'preload_data' ], 99 );
		}

		if ( ! in_array( $path, $this->paths, true ) ) {
			$this->paths[] = $path;
		}
	}

	/**
	 * Preloads data using apiFetch preloading middleware.
	 */
	public function preload_data() {
		if ( ! function_exists( 'rest_preload_api_request' ) ) { // Not available pre-5.0.
			return;
		}

		$preload_data = array_reduce( $this->paths, 'rest_preload_api_request', [] );

		wp_add_inline_script(
			'wp-api-fetch',
			sprintf( 'wp.apiFetch.use( wp.apiFetch.createPreloadingMiddleware( %s ) );', wp_json_encode( $preload_data ) ),
			'after'
		);
	}
}
PK.3YeaU'�'�#bunyad-amp/src/Admin/SiteHealth.php<?php
/**
 * Class SiteHealth.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Admin;

use AMP_Options_Manager;
use AMP_Theme_Support;
use AMP_Post_Type_Support;
use AmpProject\AmpWP\AmpSlugCustomizationWatcher;
use AmpProject\AmpWP\BackgroundTask\MonitorCssTransientCaching;
use AmpProject\AmpWP\Infrastructure\Delayed;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;
use AmpProject\AmpWP\Option;
use AmpProject\AmpWP\QueryVar;
use WP_Error;
use WP_REST_Server;

/**
 * Class SiteHealth
 *
 * Adds tests and debugging information for Site Health.
 *
 * @since 1.5.0
 * @internal
 */
final class SiteHealth implements Service, Registerable, Delayed {

	/**
	 * REST API namespace.
	 *
	 * @var string
	 */
	const REST_API_NAMESPACE = 'amp/v1';

	/**
	 * Constant to store the results of the latest check for page caching.
	 *
	 * @var string
	 */
	const HAS_PAGE_CACHING_TRANSIENT_KEY = 'amp_has_page_caching';

	/**
	 * REST API endpoint for page cache test.
	 *
	 * @var string
	 */
	const REST_API_PAGE_CACHE_ENDPOINT = '/test/page-cache';

	/**
	 * Test slug for testing page caching.
	 *
	 * @var string
	 */
	const TEST_PAGE_CACHING = 'amp_page_cache';

	/**
	 * Service that monitors and controls the CSS transient caching.
	 *
	 * @var MonitorCssTransientCaching
	 */
	private $css_transient_caching;

	/**
	 * Service that checks when the AMP slug was defined.
	 *
	 * @var AmpSlugCustomizationWatcher
	 */
	private $amp_slug_customization_watcher;

	/**
	 * Get the action to use for registering the service.
	 *
	 * @return string Registration action to use.
	 */
	public static function get_registration_action() {
		return 'wp_loaded';
	}

	/**
	 * SiteHealth constructor.
	 *
	 * @param MonitorCssTransientCaching  $css_transient_caching          CSS transient caching monitoring service.
	 * @param AmpSlugCustomizationWatcher $amp_slug_customization_watcher AMP slug customization watcher.
	 */
	public function __construct( MonitorCssTransientCaching $css_transient_caching, AmpSlugCustomizationWatcher $amp_slug_customization_watcher ) {
		$this->css_transient_caching          = $css_transient_caching;
		$this->amp_slug_customization_watcher = $amp_slug_customization_watcher;
	}

	/**
	 * Adds the filters.
	 */
	public function register() {
		add_filter( 'site_status_tests', [ $this, 'add_tests' ] );
		add_action( 'rest_api_init', [ $this, 'register_async_test_endpoints' ] );
		add_filter( 'debug_information', [ $this, 'add_debug_information' ] );
		add_filter( 'site_status_test_result', [ $this, 'modify_test_result' ] );
		add_filter( 'site_status_test_php_modules', [ $this, 'add_extensions' ] );

		if ( version_compare( get_bloginfo( 'version' ), '6.1', '>=' ) && has_filter( 'amp_page_cache_good_response_time_threshold' ) ) {
			add_filter( 'site_status_good_response_time_threshold', [ $this, 'get_good_response_time_threshold' ] );
		}

		add_action( 'admin_print_styles-tools_page_health-check', [ $this, 'add_styles' ] );
		add_action( 'admin_print_styles-site-health.php', [ $this, 'add_styles' ] );
	}

	/**
	 * Detect whether async tests can be used.
	 *
	 * Returns true if on WP 5.6+ and *not* on version of Health Check plugin which doesn't support REST async tests.
	 *
	 * @param array $tests Tests.
	 * @return bool
	 */
	private function supports_async_rest_tests( $tests ) {
		if ( version_compare( get_bloginfo( 'version' ), '5.6', '<' ) ) {
			return false;
		}

		if ( defined( 'HEALTH_CHECK_PLUGIN_VERSION' ) ) {
			$core_async_tests = [
				'dotorg_communication',
				'background_updates',
				'loopback_requests',
				'https_status',
				'authorization_header',
			];
			foreach ( $core_async_tests as $core_async_test ) {
				if (
					array_key_exists( 'async', $tests )
					&&
					isset( $tests['async'][ $core_async_test ] )
					&&
					! isset( $tests['async'][ $core_async_test ]['has_rest'] )
				) {
					return false;
				}
			}
		}

		return true;
	}

	/**
	 * Get badge label.
	 *
	 * @return string AMP.
	 */
	private function get_badge_label() {
		return esc_html__( 'AMP', 'amp' );
	}

	/**
	 * Register async test endpoints.
	 *
	 * This is only done in WP 5.6+.
	 */
	public function register_async_test_endpoints() {
		register_rest_route(
			self::REST_API_NAMESPACE,
			self::REST_API_PAGE_CACHE_ENDPOINT,
			[
				[
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => [ $this, 'page_cache' ],
					'permission_callback' => static function() {
						return current_user_can( 'view_site_health_checks' );
					},
				],
			]
		);
	}

	/**
	 * Adds Site Health tests related to this plugin.
	 *
	 * @param array $tests The Site Health tests.
	 * @return array $tests The filtered tests, with tests for AMP.
	 */
	public function add_tests( $tests ) {
		if ( ! amp_is_canonical() && QueryVar::AMP !== amp_get_slug() ) {
			$tests['direct']['amp_slug_definition_timing'] = [
				'label' => esc_html__( 'AMP slug (query var) definition timing', 'amp' ),
				'test'  => [ $this, 'slug_definition_timing' ],
			];
		}

		$tests['direct']['amp_curl_multi_functions'] = [
			'label' => esc_html__( 'cURL multi functions', 'amp' ),
			'test'  => [ $this, 'curl_multi_functions' ],
		];

		if ( $this->is_intl_extension_needed() ) {
			$tests['direct']['amp_icu_version'] = [
				'label' => esc_html__( 'ICU version', 'amp' ),
				'test'  => [ $this, 'icu_version' ],
			];
		}

		$tests['direct']['amp_css_transient_caching'] = [
			'label' => esc_html__( 'Transient caching of stylesheets', 'amp' ),
			'test'  => [ $this, 'css_transient_caching' ],
		];

		$tests['direct']['amp_xdebug_extension'] = [
			'label' => esc_html__( 'Xdebug extension', 'amp' ),
			'test'  => [ $this, 'xdebug_extension' ],
		];

		$tests['direct']['amp_publisher_logo'] = [
			'label' => esc_html__( 'Publisher Logo', 'amp' ),
			'test'  => [ $this, 'publisher_logo' ],
		];

		// Only run page and object cache tests for WP < 6.1, since it has been a part of core now.
		if ( version_compare( get_bloginfo( 'version' ), '6.1', '<' ) ) {
			$tests['direct']['amp_persistent_object_cache'] = [
				'label' => esc_html__( 'Persistent object cache', 'amp' ),
				'test'  => [ $this, 'persistent_object_cache' ],
			];

			if ( $this->supports_async_rest_tests( $tests ) ) {
				$tests['async'][ self::TEST_PAGE_CACHING ] = [
					'label'             => esc_html__( 'Page caching', 'amp' ),
					'test'              => rest_url( self::REST_API_NAMESPACE . self::REST_API_PAGE_CACHE_ENDPOINT ),
					'has_rest'          => true,
					'async_direct_test' => [ $this, 'page_cache' ],
				];
			}
		}

		return $tests;
	}

	/**
	 * Get action HTML for the link to learn more about persistent object caching.
	 *
	 * @return string HTML.
	 */
	private function get_persistent_object_cache_learn_more_action() {
		return sprintf(
			'<p><a href="%1$s" target="_blank" rel="noopener noreferrer">%2$s <span class="screen-reader-text">%3$s</span><span aria-hidden="true" class="dashicons dashicons-external"></span></a></p>',
			esc_url( 'https://amp-wp.org/documentation/getting-started/amp-site-setup/persistent-object-caching/' ),
			esc_html__( 'Learn more about persistent object caching', 'amp' ),
			/* translators: The accessibility text. */
			esc_html__( '(opens in a new tab)', 'amp' )
		);
	}

	/**
	 * Gets the test result data for whether there is a persistent object cache.
	 *
	 * @return array The test data.
	 */
	public function persistent_object_cache() {
		$is_using_object_cache = wp_using_ext_object_cache();
		$page_cache_detail     = $this->get_page_cache_detail( true );
		$has_page_caching      = ( is_array( $page_cache_detail ) && 'good' === $page_cache_detail['status'] );

		$description = '<p>' . esc_html__( 'The AMP plugin performs at its best when persistent object cache is enabled. Persistent object caching is used to more effectively store image dimensions and parsed CSS using a caching backend rather than using the options table in the database.', 'amp' ) . '</p>';

		if ( ! $is_using_object_cache ) {
			if ( $has_page_caching ) {
				$description .= '<p>' . esc_html__( 'Since page caching was detected, the need for persistent object caching is lessened. However, it still remains a best practice.', 'amp' ) . '</p>';
			}

			$services = $this->get_persistent_object_cache_availability();

			$available_services = array_filter(
				$services,
				static function ( $service ) {
					return $service['available'];
				}
			);

			$description .= '<p>';
			if ( count( $available_services ) > 0 ) {

				$description .= _n(
					'During the test, we found the following object caching service may be available on your server:',
					'During the test, we found the following object caching services may be available on your server:',
					count( $available_services ),
					'amp'
				);

				$description .= ' ' . implode(
					', ',
					array_map(
						static function ( $available_service ) {
							return sprintf(
								'<a href="%s">%s</a>',
								esc_url( $available_service['url'] ),
								esc_html( $available_service['name'] )
							);
						},
						$available_services
					)
				);

				$description .= ' ' . _n(
					'(link goes to Add Plugins screen).',
					'(links go to Add Plugins screen).',
					count( $available_services ),
					'amp'
				);

				$description .= ' ';
			}

			$description .= __( 'Please check with your host for what persistent caching services are available.', 'amp' );
			$description .= '</p>';
		}

		if ( $is_using_object_cache ) {
			$status = 'good';
			$color  = 'green';
			$label  = __( 'Persistent object caching is enabled', 'amp' );
		} elseif ( $has_page_caching ) {
			$status = 'good';
			$color  = 'blue';
			$label  = __( 'Persistent object caching is not enabled, but page caching was detected', 'amp' );
		} else {
			$status = 'recommended';
			$color  = 'orange';
			$label  = __( 'Persistent object caching is not enabled', 'amp' );
		}

		return [
			'badge'       => [
				'label' => $this->get_badge_label(),
				'color' => $color,
			],
			'description' => wp_kses_post( $description ),
			'actions'     => $this->get_persistent_object_cache_learn_more_action(),
			'test'        => 'amp_persistent_object_cache',
			'status'      => $status,
			'label'       => $label,
		];
	}

	/**
	 * Get the threshold below which a response time is considered good.
	 *
	 * @since 2.2.1
	 *
	 * @param int $threshold Threshold in milliseconds.
	 *
	 * @return int Threshold.
	 */
	public function get_good_response_time_threshold( $threshold = 600 ) {
		if ( version_compare( get_bloginfo( 'version' ), '6.1', '>=' ) ) {
			/** This filter is documented in src/Admin/SiteHealth.php */
			return (int) apply_filters_deprecated(
				'amp_page_cache_good_response_time_threshold',
				[ $threshold ],
				'AMP 2.5.0',
				'site_status_good_response_time_threshold'
			);
		} else {
			/**
			 * Filters the threshold below which a response time is considered good.
			 *
			 * @since 2.2.1
			 *
			 * @deprecated 2.5.0 Use `site_status_good_response_time_threshold` instead.
			 *
			 * @param int $threshold Threshold in milliseconds.
			 */
			return (int) apply_filters( 'amp_page_cache_good_response_time_threshold', 600 );
		}
	}

	/**
	 * Get the test result data for whether there is page caching or not.
	 *
	 * @return array
	 */
	public function page_cache() {
		$page_cache_detail = $this->get_page_cache_detail();

		$description = '<p>' . esc_html__( 'The AMP plugin performs at its best when page caching is enabled. This is because the additional optimizations performed require additional server processing time, and page caching ensures that responses are served quickly.', 'amp' ) . '</p>';

		$description .= '<p>' . esc_html__( 'Page caching is detected by looking for an active page caching plugin as well as making three requests to the homepage and looking for one or more of the following HTTP client caching response headers:', 'amp' )
			. ' <code>' . implode( '</code>, <code>', array_keys( self::get_page_cache_headers() ) ) . '.</code>';

		if ( is_wp_error( $page_cache_detail ) ) {
			$badge_color = 'red';
			$status      = 'critical';
			$label       = __( 'Unable to detect the presence of page caching', 'amp' );

			$error_info = sprintf(
				/* translators: 1 is error message, 2 is error code */
				__( 'Unable to detect page caching due to possible loopback request problem. Please verify that the loopback request test is passing. Error: %1$s (Code: %2$s)', 'amp' ),
				$page_cache_detail->get_error_message(),
				$page_cache_detail->get_error_code()
			);

			$description = "<p>$error_info</p>" . $description;
		} elseif ( 'recommended' === $page_cache_detail['status'] ) {
			$badge_color = 'orange';
			$status      = $page_cache_detail['status'];
			$label       = __( 'Page caching is not detected but the server response time is OK', 'amp' );
		} elseif ( 'good' === $page_cache_detail['status'] ) {
			$badge_color = 'green';
			$status      = $page_cache_detail['status'];
			$label       = __( 'Page caching is detected and the server response time is good', 'amp' );
		} else {
			$badge_color = 'red';
			$status      = $page_cache_detail['status'];
			if ( empty( $page_cache_detail['headers'] ) && ! $page_cache_detail['advanced_cache_present'] ) {
				$label = __( 'Page caching is not detected and the server response time is slow', 'amp' );
			} else {
				$label = __( 'Page caching is detected but the server response time is still slow', 'amp' );
			}
		}

		if ( ! is_wp_error( $page_cache_detail ) ) {
			$page_cache_test_summary = [];

			if ( empty( $page_cache_detail['response_time'] ) ) {
				$page_cache_test_summary[] = '<span class="dashicons dashicons-dismiss"></span> ' . __( 'Server response time could not be determined. Verify that loopback requests are working.', 'amp' );
			} else {

				$threshold = $this->get_good_response_time_threshold();
				if ( $page_cache_detail['response_time'] < $threshold ) {
					$page_cache_test_summary[] = '<span class="dashicons dashicons-yes-alt"></span> ' . sprintf(
						/* translators: %d is the response time in milliseconds */
						__( 'Median server response time was %1$s milliseconds. This is less than the %2$s millisecond threshold.', 'amp' ),
						number_format_i18n( $page_cache_detail['response_time'] ),
						number_format_i18n( $threshold )
					);
				} else {
					$page_cache_test_summary[] = '<span class="dashicons dashicons-warning"></span> ' . sprintf(
						/* translators: %d is the response time in milliseconds */
						__( 'Median server response time was %1$s milliseconds. It should be less than %2$s milliseconds.', 'amp' ),
						number_format_i18n( $page_cache_detail['response_time'] ),
						number_format_i18n( $threshold )
					);
				}

				if ( empty( $page_cache_detail['headers'] ) ) {
					$page_cache_test_summary[] = '<span class="dashicons dashicons-warning"></span> ' . __( 'No client caching response headers were detected.', 'amp' );
				} else {
					$page_cache_test_summary[] = '<span class="dashicons dashicons-yes-alt"></span> ' .
						sprintf(
							/* translators: Placeholder is number of caching headers */
							_n(
								'There was %d client caching response header detected:',
								'There were %d client caching response headers detected:',
								count( $page_cache_detail['headers'] ),
								'amp'
							),
							count( $page_cache_detail['headers'] )
						) .
						' <code>' . implode( '</code>, <code>', $page_cache_detail['headers'] ) . '</code>.';
				}
			}

			if ( $page_cache_detail['advanced_cache_present'] ) {
				$page_cache_test_summary[] = '<span class="dashicons dashicons-yes-alt"></span> ' . __( 'A page caching plugin was detected.', 'amp' );
			} elseif ( ! ( is_array( $page_cache_detail ) && ! empty( $page_cache_detail['headers'] ) ) ) {
				// Note: This message is not shown if client caching response headers were present since an external caching layer may be employed.
				$page_cache_test_summary[] = '<span class="dashicons dashicons-warning"></span> ' . __( 'A page caching plugin was not detected.', 'amp' );
			}

			$description .= '<ul><li>' . implode( '</li><li>', $page_cache_test_summary ) . '</li></ul>';
		}

		return [
			'badge'       => [
				'label' => $this->get_badge_label(),
				'color' => $badge_color,
			],
			'description' => wp_kses_post( $description ),
			'test'        => self::TEST_PAGE_CACHING,
			'status'      => $status,
			'label'       => esc_html( $label ),
			'actions'     => sprintf(
				'<p><a href="%1$s" target="_blank" rel="noopener noreferrer">%2$s <span class="screen-reader-text">%3$s</span><span aria-hidden="true" class="dashicons dashicons-external"></span></a></p>',
				esc_url( 'https://amp-wp.org/documentation/getting-started/amp-site-setup/page-caching-with-amp-and-wordpress/' ),
				esc_html__( 'Learn more about page caching', 'amp' ),
				/* translators: The accessibility text. */
				esc_html__( '(opens in a new tab)', 'amp' )
			),
		];
	}

	/**
	 * Get page caching result from cache.
	 *
	 * @param bool $use_previous_result Whether to use previous result or not.
	 *
	 * @return WP_Error|array {
	 *    Page cache detail or else a WP_Error if unable to determine.
	 *
	 *    @type string   $status                 Page cache status. Good, Recommended or Critical.
	 *    @type bool     $advanced_cache_present Whether page cache plugin is available or not.
	 *    @type string[] $headers                Client caching response headers detected.
	 *    @type float    $response_time          Response time of site.
	 * }
	 */
	public function get_page_cache_detail( $use_previous_result = false ) {

		if ( $use_previous_result ) {
			$page_cache_detail = get_transient( self::HAS_PAGE_CACHING_TRANSIENT_KEY );

			// Disregard cached legacy value. Instead of a string, now an array or a WP_Error are stored.
			if ( is_string( $page_cache_detail ) ) {
				$page_cache_detail = null;
			}
		}

		if ( ! $use_previous_result || empty( $page_cache_detail ) ) {
			$page_cache_detail = $this->check_for_page_caching();
			if ( is_wp_error( $page_cache_detail ) ) {
				set_transient( self::HAS_PAGE_CACHING_TRANSIENT_KEY, $page_cache_detail, DAY_IN_SECONDS );
			} else {
				set_transient( self::HAS_PAGE_CACHING_TRANSIENT_KEY, $page_cache_detail, MONTH_IN_SECONDS );
			}
		}

		if ( is_wp_error( $page_cache_detail ) ) {
			return $page_cache_detail;
		}

		// Use the median server response time.
		$response_timings = $page_cache_detail['response_timing'];
		rsort( $response_timings );
		$page_speed = $response_timings[ floor( count( $response_timings ) / 2 ) ];

		// Obtain unique set of all client caching response headers.
		$headers = [];
		foreach ( $page_cache_detail['page_caching_response_headers'] as $page_caching_response_headers ) {
			$headers = array_merge( $headers, array_keys( $page_caching_response_headers ) );
		}
		$headers = array_unique( $headers );

		// Page caching is detected if there are response headers or a page caching plugin is present.
		$has_page_caching = ( count( $headers ) > 0 || $page_cache_detail['advanced_cache_present'] );

		if ( $page_speed && $page_speed < $this->get_good_response_time_threshold() ) {
			$result = $has_page_caching ? 'good' : 'recommended';
		} else {
			$result = 'critical';
		}

		return [
			'status'                 => $result,
			'advanced_cache_present' => $page_cache_detail['advanced_cache_present'],
			'headers'                => $headers,
			'response_time'          => $page_speed,
		];
	}

	/**
	 * Callback for {@see get_page_cache_headers()}.
	 *
	 * @param string $header_value Header value.
	 * @return bool Whether header contains the value "hit"
	 */
	private static function cache_hit_callback( string $header_value ): bool {
		return false !== stripos( $header_value, 'hit' );
	}

	/**
	 * List of header and it's verification callback to verify if page cache is enabled or not.
	 *
	 * Note: key is header name and value could be callable function to verify header value.
	 * Empty value mean existence of header detect page cache is enable.
	 *
	 * @return array List of client caching headers and their (optional) verification callbacks.
	 */
	protected static function get_page_cache_headers() {
		return [
			'cache-control'          => static function ( $header_value ) {
				return (bool) preg_match( '/max-age=[1-9]/', $header_value );
			},
			'expires'                => static function ( $header_value ) {
				return strtotime( $header_value ) > time();
			},
			'age'                    => static function ( $header_value ) {
				return is_numeric( $header_value ) && $header_value > 0;
			},
			'last-modified'          => '',
			'etag'                   => '',
			'x-cache'                => [ self::class, 'cache_hit_callback' ],
			'x-proxy-cache'          => [ self::class, 'cache_hit_callback' ],
			'cf-cache-status'        => [ self::class, 'cache_hit_callback' ],
			'x-kinsta-cache'         => [ self::class, 'cache_hit_callback' ],
			'x-cache-enabled'        => static function ( $header_value ) {
				return 'true' === strtolower( $header_value );
			},
			'x-cache-disabled'       => static function ( $header_value ) {
				return ( 'on' !== strtolower( $header_value ) );
			},
			'cf-apo-via'             => static function ( $header_value ) {
				return false !== strpos( strtolower( $header_value ), 'tcache' );
			},
			'x-srcache-store-status' => [ self::class, 'cache_hit_callback' ],
			'x-srcache-fetch-status' => [ self::class, 'cache_hit_callback' ],
			'cf-edge-cache'          => static function ( $header_value ) {
				return false !== strpos( strtolower( $header_value ), 'cache' );
			},
		];
	}

	/**
	 * Check if site has page cache enable or not.
	 *
	 * @return WP_Error|array {
	 *     Page caching detection details or else error information.
	 *
	 *     @type bool    $advanced_cache_present        Whether a page caching plugin is present.
	 *     @type array[] $page_caching_response_headers Sets of client caching headers for the responses.
	 *     @type float[] $response_timing               Response timings.
	 * }
	 */
	public function check_for_page_caching() {

		/** This filter is documented in wp-includes/class-wp-http-streams.php */
		$sslverify = apply_filters( 'https_local_ssl_verify', false );

		$headers = [];

		// Include basic auth in loopback requests. Note that this will only pass along basic auth when user is
		// initiating the test. If a site requires basic auth, the test will fail when it runs in WP Cron as part of
		// wp_site_health_scheduled_check. This logic is copied from WP_Site_Health::can_perform_loopback() in core.
		if ( isset( $_SERVER['PHP_AUTH_USER'] ) && isset( $_SERVER['PHP_AUTH_PW'] ) ) { // phpcs:ignore WordPressVIPMinimum.Variables.ServerVariables.BasicAuthentication
			// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized, WordPressVIPMinimum.Variables.ServerVariables.BasicAuthentication
			$headers['Authorization'] = 'Basic ' . base64_encode( wp_unslash( $_SERVER['PHP_AUTH_USER'] ) . ':' . wp_unslash( $_SERVER['PHP_AUTH_PW'] ) );
		}

		$caching_headers               = self::get_page_cache_headers();
		$page_caching_response_headers = [];
		$response_timing               = [];

		for ( $i = 1; $i <= 3; $i++ ) {
			$start_time    = microtime( true );
			$http_response = wp_remote_get( home_url( '/' ), compact( 'sslverify', 'headers' ) );
			$end_time      = microtime( true );

			if ( is_wp_error( $http_response ) ) {
				return $http_response;
			}
			if ( wp_remote_retrieve_response_code( $http_response ) !== 200 ) {
				return new WP_Error(
					'http_' . wp_remote_retrieve_response_code( $http_response ),
					wp_remote_retrieve_response_message( $http_response )
				);
			}

			$response_headers = [];

			foreach ( $caching_headers as $header => $callback ) {
				$header_values = wp_remote_retrieve_header( $http_response, $header );
				if ( empty( $header_values ) ) {
					continue;
				}
				$header_values = (array) $header_values;
				if (
					empty( $callback )
					||
					(
						is_callable( $callback )
						&&
						count( array_filter( $header_values, $callback ) ) > 0
					)
				) {
					$response_headers[ $header ] = $header_values;
				}
			}

			$page_caching_response_headers[] = $response_headers;
			$response_timing[]               = ( $end_time - $start_time ) * 1000;
		}

		return [
			'advanced_cache_present'        => (
				file_exists( WP_CONTENT_DIR . '/advanced-cache.php' )
				&&
				( defined( 'WP_CACHE' ) && WP_CACHE )
				&&
				/** This filter is documented in wp-settings.php */
				apply_filters( 'enable_loading_advanced_cache_dropin', true )
			),
			'page_caching_response_headers' => $page_caching_response_headers,
			'response_timing'               => $response_timing,
		];
	}

	/**
	 * Return list of available object cache mechanism.
	 *
	 * @return array
	 */
	public function get_persistent_object_cache_availability() {
		return [
			'redis'     => [
				'available' => class_exists( 'Redis' ),
				'name'      => _x( 'Redis', 'persistent object cache service', 'amp' ),
				'url'       => admin_url( 'plugin-install.php?s=redis%20object%20cache&tab=search&type=term' ),
			],
			'memcached' => [
				'available' => ( class_exists( 'Memcache' ) || class_exists( 'Memcached' ) ),
				'name'      => _x( 'Memcached', 'persistent object cache service', 'amp' ),
				'url'       => admin_url( 'plugin-install.php?s=memcached%20object%20cache&tab=search&type=term' ),
			],
			'apcu'      => [
				'available' => (
					extension_loaded( 'apcu' ) ||
					function_exists( 'apc_store' ) ||
					function_exists( 'apcu_store' )
				),
				'name'      => _x( 'APCu', 'persistent object cache service', 'amp' ),
				'url'       => admin_url( 'plugin-install.php?s=apcu%20object%20cache&tab=search&type=term' ),
			],
		];
	}

	/**
	 * Gets the test result data for whether the AMP slug (query var) was defined late.
	 *
	 * @return array The test data.
	 */
	public function slug_definition_timing() {
		$is_defined_late = $this->amp_slug_customization_watcher->did_customize_late();

		$data = [];

		$data['test']  = 'amp_slug_definition_timing';
		$data['badge'] = [
			'label' => $this->get_badge_label(),
			'color' => $is_defined_late ? 'orange' : 'green',
		];

		$data['status'] = $is_defined_late ? 'recommended' : 'good';

		$data['label'] = $is_defined_late
			? esc_html__( 'The AMP slug (query var) was defined late', 'amp' )
			: esc_html__( 'The AMP slug (query var) was defined early', 'amp' );

		$data['description'] = sprintf(
			/* translators: %s is 'plugins_loaded'  */
			esc_html__( 'For best results, the AMP slug (query var) should be available early in WordPress\'s execution flow, specifically before the %s action occurs (at priority 4). This slug is used to construct the paired AMP URLs.', 'amp' ),
			'<code>plugins_loaded</code>'
		);
		$data['description'] .= ' ';

		if ( $is_defined_late ) {
			$data['description'] .= sprintf(
				/* translators: %1$s is the value of the slug, %2$s is the constant name, %3$s is the filter name */
				esc_html__( 'Your AMP slug (%1$s) is defined late, most likely in the theme via the %2$s filter or %3$s constant. Make sure this is being defined in a plugin at the top level so it happens before %4$s. While a late-defined AMP slug will still work, it requires extra work to make the slug available earlier in WordPress execution by storing it in an option.', 'amp' ),
				sprintf( '<code>%s</code>', esc_html( amp_get_slug() ) ),
				'<code>amp_query_var</code>',
				'<code>AMP_QUERY_VAR</code>',
				'<code>plugins_loaded</code>'
			);
		} else {
			$data['description'] .= sprintf(
				/* translators: %1$s is the value of the slug */
				esc_html__( 'Your AMP slug (%s) is defined early so you\'re good to go!', 'amp' ),
				sprintf( '<code>%s</code>', esc_html( amp_get_slug() ) )
			);
		}

		return $data;
	}

	/**
	 * Gets the test result data for whether the curl_multi_* functions exist.
	 *
	 * @return array The test data.
	 */
	public function curl_multi_functions() {
		$undefined_curl_functions = array_filter(
			[
				'curl_multi_add_handle',
				'curl_multi_exec',
				'curl_multi_init',
			],
			static function( $function_name ) {
				return ! function_exists( $function_name );
			}
		);

		$data = [
			'badge'       => [
				'label' => $this->get_badge_label(),
				'color' => $undefined_curl_functions ? 'orange' : 'green',
			],
			'description' => esc_html__( 'The AMP plugin is able to more efficiently determine the dimensions of images lacking width or height by making parallel requests via cURL multi.', 'amp' ),
			'actions'     => sprintf(
				'<p><a href="%1$s" target="_blank" rel="noopener noreferrer">%2$s <span class="screen-reader-text">%3$s</span><span aria-hidden="true" class="dashicons dashicons-external"></span></a></p>',
				esc_url( __( 'https://www.php.net/manual/en/book.curl.php', 'amp' ) ),
				esc_html__( 'Learn more about these functions', 'amp' ),
				/* translators: The accessibility text. */
				esc_html__( '(opens in a new tab)', 'amp' )
			),
			'test'        => 'amp_curl_multi_functions',
		];

		if ( $undefined_curl_functions ) {
			return array_merge(
				$data,
				[
					'status'      => 'recommended',
					'label'       => esc_html(
						sprintf(
							/* translators: %s is count of functions */
							_n(
								'There is %s undefined cURL multi function',
								'There are %s undefined cURL multi functions',
								count( $undefined_curl_functions ),
								'amp'
							),
							number_format_i18n( count( $undefined_curl_functions ) )
						)
					),
					'description' => wp_kses(
						sprintf(
							/* translators: %1$s: the count of functions, %2$s: the name(s) of the cURL multi PHP function(s) */
							_n(
								'The following %1$s cURL multi function is not defined: %2$s.',
								'The following %1$s cURL multi functions are not defined: %2$s.',
								count( $undefined_curl_functions ),
								'amp'
							),
							number_format_i18n( count( $undefined_curl_functions ) ),
							implode(
								', ',
								array_map(
									static function( $function_name ) {
										return sprintf( '<code>%s()</code>', $function_name );
									},
									$undefined_curl_functions
								)
							)
						) . ' ' . $data['description'],
						[ 'code' => [] ]
					),
				]
			);
		}

		return array_merge(
			$data,
			[
				'status' => 'good',
				'label'  => esc_html__( 'The cURL multi functions are defined', 'amp' ),
			]
		);
	}

	/**
	 * Gets the test result data for whether the proper ICU version is available.
	 *
	 * @return array The test data.
	 */
	public function icu_version() {
		$icu_version       = defined( 'INTL_ICU_VERSION' ) ? INTL_ICU_VERSION : null;
		$minimum_version   = '4.6';
		$is_proper_version = null === $icu_version ? false : version_compare( $icu_version, $minimum_version, '>=' );

		$data = [
			'badge'       => [
				'label' => $this->get_badge_label(),
				'color' => $is_proper_version ? 'green' : 'orange',
			],
			'description' => esc_html(
				sprintf(
					/* translators: %s: the minimum recommended ICU version */
					__( 'The version of ICU can affect how the intl extension runs. This extension is used to derive AMP Cache URLs for internationalized domain names (IDNs). The minimum recommended version of ICU is v%s.', 'amp' ),
					$minimum_version
				)
			),
			'actions'     => sprintf(
				'<p><a href="%1$s" target="_blank" rel="noopener noreferrer">%2$s <span class="screen-reader-text">%3$s</span><span aria-hidden="true" class="dashicons dashicons-external"></span></a></p>',
				'http://site.icu-project.org/',
				esc_html__( 'Learn more about ICU', 'amp' ),
				/* translators: The accessibility text. */
				esc_html__( '(opens in a new tab)', 'amp' )
			),
			'test'        => 'amp_icu_version',
		];

		if ( ! defined( 'INTL_ICU_VERSION' ) ) {
			$status = 'recommended';
			/* translators: %s: the constant for the ICU version */
			$label = sprintf( __( 'The ICU version is unknown, as the constant %s is not defined', 'amp' ), 'INTL_ICU_VERSION' );
		} elseif ( ! $is_proper_version ) {
			$status = 'recommended';
			/* translators: %s: the ICU version */
			$label = sprintf( __( 'The version of ICU (v%s) is out of date', 'amp' ), $icu_version );
		} else {
			$status = 'good';
			/* translators: %s: the ICU version */
			$label = sprintf( __( 'The version of ICU (v%s) looks good', 'amp' ), $icu_version );
		}

		return array_merge(
			$data,
			[
				'status' => $status,
				'label'  => esc_html( $label ),
			]
		);
	}

	/**
	 * Gets the test result data for whether transient caching for stylesheets was disabled.
	 *
	 * @return array The test data.
	 */
	public function css_transient_caching() {
		$disabled = AMP_Options_Manager::get_option( Option::DISABLE_CSS_TRANSIENT_CACHING, false );

		if ( wp_using_ext_object_cache() ) {
			$status = 'good';
			$color  = 'blue';
			$label  = __( 'Transient caching of parsed stylesheets is not used due to external object cache', 'amp' );
		} elseif ( $disabled ) {
			$status = 'recommended';
			$color  = 'orange';
			$label  = __( 'Transient caching of parsed stylesheets is disabled', 'amp' );
		} else {
			$status = 'good';
			$color  = 'green';
			$label  = __( 'Transient caching of parsed stylesheets is enabled', 'amp' );
		}

		$data = [
			'badge'       => [
				'label' => $this->get_badge_label(),
				'color' => $color,
			],
			'description' => wp_kses(
				sprintf(
					/* translators: %1$s is wp_options table, %2$s is the amp_css_transient_monitoring_threshold filter, and %3$s is the amp_css_transient_monitoring_sampling_range filter */
					__( 'On sites which have highly variable CSS and are not using a persistent object cache, the transient caching of parsed stylesheets may be automatically disabled in order to prevent a site from filling up its <code>%1$s</code> table with too many transients. Examples of highly variable CSS include dynamically-generated style rules with selectors referring to user IDs or elements being given randomized background colors. There are two filters which may be used to configure the CSS transient monitoring: <code>%2$s</code> and <code>%3$s</code>.', 'amp' ),
					'wp_options',
					'amp_css_transient_monitoring_threshold',
					'amp_css_transient_monitoring_sampling_range'
				),
				[
					'code' => [],
				]
			),
			'test'        => 'amp_css_transient_caching',
			'status'      => $status,
			'label'       => esc_html( $label ),
		];

		if ( $disabled ) {
			$data['description'] .= ' ' . esc_html__( 'If you have identified and eliminated the cause of the variable CSS, please re-enable transient caching to reduce the amount of CSS processing required to generate AMP pages.', 'amp' );
			$data['actions']      = sprintf(
				'<p><a class="button reenable-css-transient-caching" href="#">%s</a><span class="dashicons dashicons-yes success-icon"></span><span class="dashicons dashicons-no failure-icon"></span><span class="success-text">%s</span><span class="failure-text">%s</span></p>',
				esc_html__( 'Re-enable transient caching', 'amp' ),
				esc_html__( 'Reload the page to refresh the diagnostic check.', 'amp' ),
				esc_html__( 'The operation failed, please reload the page and try again.', 'amp' )
			);
			$data['actions']     .= $this->get_persistent_object_cache_learn_more_action();
		}

		return $data;
	}

	/**
	 * Gets the test result data for whether the Xdebug extension is loaded.
	 *
	 * @since 1.5
	 *
	 * @return array The test data.
	 */
	public function xdebug_extension() {
		$status      = 'good';
		$color       = 'green';
		$description = esc_html__( 'The Xdebug extension can cause some of the AMP plugin&#8217;s processes to time out depending on your system resources and configuration. It should not be enabled on a live site (production environment).', 'amp' );

		if ( extension_loaded( 'xdebug' ) ) {
			$label = esc_html__( 'Your server currently has the Xdebug PHP extension loaded', 'amp' );
			if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
				/* translators: %s: the WP_DEBUG constant */
				$description .= ' ' . sprintf( esc_html__( 'Nevertheless, %s is enabled which suggests that this site is currently under development or is undergoing debugging.', 'amp' ), '<code>WP_DEBUG</code>' );
			} else {
				$status = 'recommended';
				$color  = 'orange';
				/* translators: %s: the WP_DEBUG constant */
				$description .= ' ' . sprintf( esc_html__( 'Please deactivate Xdebug to improve performance. Otherwise, you may enable %s to indicate that this site is currently under development or is undergoing debugging.', 'amp' ), '<code>WP_DEBUG</code>' );
			}
		} else {
			$label = esc_html__( 'Your server currently does not have the Xdebug PHP extension loaded', 'amp' );
		}

		return array_merge(
			compact( 'status', 'label', 'description' ),
			[
				'badge' => [
					'label' => $this->get_badge_label(),
					'color' => $color,
				],
				'test'  => 'amp_xdebug_extension',
			]
		);
	}

	/**
	 * Adds debug information for AMP.
	 *
	 * @param array $debugging_information The debugging information from Core.
	 * @return array The debugging information, with added information for AMP.
	 */
	public function add_debug_information( $debugging_information ) {
		return array_merge(
			$debugging_information,
			[
				'amp_wp' => [
					'label'       => $this->get_badge_label(),
					'description' => esc_html__( 'Debugging information for the Official AMP Plugin for WordPress.', 'amp' ),
					'fields'      => [
						'amp_slug_query_var'      => [
							'label'   => 'AMP slug query var',
							'value'   => amp_get_slug(),
							'private' => false,
						],
						'amp_slug_defined_late'   => [
							'label'   => 'AMP slug defined late',
							'value'   => $this->amp_slug_customization_watcher->did_customize_late() ? 'true' : 'false',
							'private' => false,
						],
						'amp_mode_enabled'        => [
							'label'   => 'AMP mode enabled',
							'value'   => AMP_Options_Manager::get_option( Option::THEME_SUPPORT ),
							'private' => false,
						],
						'amp_reader_theme'        => [
							'label'   => 'AMP Reader theme',
							'value'   => AMP_Options_Manager::get_option( Option::READER_THEME ),
							'private' => false,
						],
						'amp_templates_enabled'   => [
							'label'   => esc_html__( 'Templates enabled', 'amp' ),
							'value'   => $this->get_supported_templates(),
							'private' => false,
						],
						'amp_serve_all_templates' => [
							'label'   => esc_html__( 'Serve all templates as AMP?', 'amp' ),
							'value'   => $this->get_serve_all_templates(),
							'private' => false,
						],
						'amp_css_transient_caching_disabled' => [
							'label'   => esc_html__( 'Transient caching for stylesheets disabled', 'amp' ),
							'value'   => $this->get_css_transient_caching_disabled(),
							'private' => false,
						],
						'amp_css_transient_caching_threshold' => [
							'label'   => esc_html__( 'Threshold for monitoring stylesheet caching', 'amp' ),
							'value'   => $this->get_css_transient_caching_threshold(),
							'private' => false,
						],
						'amp_css_transient_caching_sampling_range' => [
							'label'   => esc_html__( 'Sampling range for monitoring stylesheet caching', 'amp' ),
							'value'   => $this->get_css_transient_caching_sampling_range(),
							'private' => false,
						],
						'amp_css_transient_caching_transient_count' => [
							'label'   => esc_html__( 'Number of stylesheet transient cache entries', 'amp' ),
							'value'   => $this->css_transient_caching->query_css_transient_count(),
							'private' => false,
						],
						'amp_css_transient_caching_time_series' => [
							'label'   => esc_html__( 'Calculated time series for monitoring the stylesheet caching', 'amp' ),
							'value'   => $this->css_transient_caching->get_time_series(),
							'private' => false,
						],
						'amp_libxml_version'      => [
							'label'   => 'libxml Version',
							'value'   => LIBXML_DOTTED_VERSION,
							'private' => false,
						],
					],
				],
			]
		);
	}

	/**
	 * Modify test results.
	 *
	 * @param array $test_result Site Health test result.
	 *
	 * @return array Modified test result.
	 */
	public function modify_test_result( $test_result ) {
		// Set the `https_status` test status to critical if its current status is recommended, along with adding to the
		// description for why its required for AMP.
		if (
			isset( $test_result['test'], $test_result['status'], $test_result['description'] )
			&& 'https_status' === $test_result['test']
			&& 'recommended' === $test_result['status']
		) {
			$test_result['status']       = 'critical';
			$test_result['description'] .= '<p>' . __( 'Additionally, AMP requires HTTPS for most components to work properly, including iframes and videos.', 'amp' ) . '</p>';
		}

		return $test_result;
	}

	/**
	 * Gets the templates that support AMP.
	 *
	 * @return string The supported template(s), in a comma-separated string.
	 */
	private function get_supported_templates() {

		// Get the supported content types, like 'post'.
		$supported_templates = AMP_Post_Type_Support::get_supported_post_types();

		// Add the supported templates, like 'is_author', if not in 'Reader' mode.
		if ( ! amp_is_legacy() ) {
			$supported_templates = array_merge(
				$supported_templates,
				array_keys(
					array_filter(
						AMP_Theme_Support::get_supportable_templates(),
						static function( $option ) {
							return ! empty( $option['supported'] );
						}
					)
				)
			);
		}

		if ( empty( $supported_templates ) ) {
			return esc_html__( 'No template supported', 'amp' );
		}

		return implode( ', ', $supported_templates );
	}

	/**
	 * Gets whether the option to serve all templates is selected.
	 *
	 * @return string The value of the option to serve all templates.
	 */
	private function get_serve_all_templates() {
		if ( amp_is_legacy() ) {
			return esc_html__( 'This option does not apply to Reader mode.', 'amp' );
		}

		// Not translated, as this is debugging information, and it could be confusing getting this from different languages.
		return AMP_Options_Manager::get_option( Option::ALL_TEMPLATES_SUPPORTED ) ? 'true' : 'false';
	}

	/**
	 * Gets whether the transient caching of stylesheets was disabled.
	 *
	 * @return string Whether the transient caching of stylesheets was disabled.
	 */
	private function get_css_transient_caching_disabled() {
		if ( wp_using_ext_object_cache() ) {
			return 'n/a';
		}

		$disabled = AMP_Options_Manager::get_option( Option::DISABLE_CSS_TRANSIENT_CACHING, false );

		return $disabled ? 'true' : 'false';
	}

	/**
	 * Gets the threshold being used to when monitoring the transient caching of stylesheets.
	 *
	 * @return string Threshold for the transient caching of stylesheets.
	 */
	private function get_css_transient_caching_threshold() {
		/** This filter is documented in src/BackgroundTask/MonitorCssTransientCaching.php */
		$threshold = (float) apply_filters(
			'amp_css_transient_monitoring_threshold',
			$this->css_transient_caching->get_default_threshold()
		);

		return "{$threshold} transients per day";
	}

	/**
	 * Gets the sampling range being used to when monitoring the transient caching of stylesheets.
	 *
	 * @return string Sampling range for the transient caching of stylesheets.
	 */
	private function get_css_transient_caching_sampling_range() {
		/** This filter is documented in src/BackgroundTask/MonitorCssTransientCaching.php */
		$sampling_range = (float) apply_filters(
			'amp_css_transient_monitoring_sampling_range',
			$this->css_transient_caching->get_default_sampling_range()
		);

		return "{$sampling_range} days";
	}

	/**
	 * Adds suggested PHP extensions to those that Core depends on.
	 *
	 * @param array $core_extensions The existing extensions from Core.
	 * @return array The extensions, including those for AMP.
	 */
	public function add_extensions( $core_extensions ) {
		$extensions = [
			'json'     => [
				'extension' => 'json',
				'function'  => 'json_encode',
				'required'  => false,
			],
			'mbstring' => [
				'extension' => 'mbstring',
				'required'  => false,
			],
			'zip'      => [
				'extension' => 'zip',
				'required'  => false,
			],
		];

		if ( $this->is_intl_extension_needed() ) {
			$extensions['intl'] = [
				'extension' => 'intl',
				'function'  => 'idn_to_utf8',
				'required'  => false,
			];
		}

		return array_merge( $core_extensions, $extensions );
	}

	/**
	 * Add needed styles for the Site Health integration.
	 */
	public function add_styles() {
		echo '
			<style>
				.health-check-accordion-panel > p:first-child {
					/* Note this is essentially a core fix. */
					margin-top: 0;
				}

				.wp-core-ui .button.reenable-css-transient-caching ~ .success-icon,
				.wp-core-ui .button.reenable-css-transient-caching ~ .success-text,
				.wp-core-ui .button.reenable-css-transient-caching ~ .failure-icon,
				.wp-core-ui .button.reenable-css-transient-caching ~ .failure-text {
					display: none;
				}

				.wp-core-ui .button.reenable-css-transient-caching ~ .success-icon,
				.wp-core-ui .button.reenable-css-transient-caching ~ .failure-icon {
					font-size: xx-large;
					padding-right: 1rem;
				}

				.wp-core-ui .button.reenable-css-transient-caching.ajax-success ~ .success-icon,
				.wp-core-ui .button.reenable-css-transient-caching.ajax-success ~ .success-text,
				.wp-core-ui .button.reenable-css-transient-caching.ajax-failure ~ .failure-icon,
				.wp-core-ui .button.reenable-css-transient-caching.ajax-failure ~ .failure-text {
					display: inline-block;
				}

				.wp-core-ui .button.reenable-css-transient-caching.ajax-success ~ .success-icon {
					color: #46b450;
				}

				.wp-core-ui .button.reenable-css-transient-caching.ajax-failure ~ .failure-icon {
					color: #dc3232;
				}

				#health-check-accordion-block-amp_page_cache .dashicons-yes-alt {
					color: #46b450;
				}
				#health-check-accordion-block-amp_page_cache .dashicons-dismiss {
					color: #dc3232;
				}
				#health-check-accordion-block-amp_page_cache .dashicons-warning {
					color: #dba617;
				}
			</style>
		';
	}

	/**
	 * Determine if the `intl` extension is needed.
	 *
	 * @return bool True if the `intl` extension is needed, otherwise false.
	 */
	private function is_intl_extension_needed() {
		// Publisher's own origins.
		$domains = array_unique(
			[
				wp_parse_url( site_url(), PHP_URL_HOST ),
				wp_parse_url( home_url(), PHP_URL_HOST ),
			]
		);

		foreach ( $domains as $domain ) {
			if ( preg_match( '/(^|\.)xn--/', $domain ) ) {
				return true;
			}
		}

		return false;
	}

	/**
	 * Gets the test result data for whether publisher logo is set or not.
	 *
	 * @return array
	 */
	public function publisher_logo() {
		$description = esc_html__( 'The publisher logo used in Schema.org metadata. The site icon is used as the publisher logo when it is specified.', 'amp' );

		if ( amp_get_asset_url( 'images/amp-page-fallback-wordpress-publisher-logo.png' ) !== amp_get_publisher_logo() ) {
			$status = 'good';
			$color  = 'green';
			$label  = __( 'Publisher logo is defined', 'amp' );
		} else {
			$status       = 'recommended';
			$color        = 'orange';
			$label        = __( 'Publisher logo is not defined', 'amp' );
			$description .= ' ' . esc_html__( 'Currently, the fallback WordPress logo is used.', 'amp' );
		}

		if ( ! has_filter( 'amp_site_icon_url' ) && current_user_can( 'customize' ) ) {
			$actions = wp_kses_post(
				sprintf(
					'<p><a class="button button-secondary" href="%s">%s</a></p>',
					admin_url( 'customize.php?autofocus[control]=site_icon' ),
					esc_html__( 'Update site icon', 'amp' )
				)
			);
		} else {
			$actions = '';
		}

		return array_merge(
			compact( 'status', 'label', 'description' ),
			[
				'badge'   => [
					'label' => $this->get_badge_label(),
					'color' => $color,
				],
				'actions' => wp_kses_post( $actions ),
				'test'    => 'amp_publisher_logo',
			]
		);
	}
}
PK.3YYE8�$bunyad-amp/src/Admin/SupportLink.php<?php
/**
 * Service Link class that adds support links throughout the plugin's UI.
 *
 * @package Ampproject\Ampwp
 */

namespace AmpProject\AmpWP\Admin;

use AMP_Validated_URL_Post_Type;
use AmpProject\AmpWP\Infrastructure\Conditional;
use AmpProject\AmpWP\Infrastructure\Delayed;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;
use WP_Admin_Bar;
use WP_Post;

/**
 * Service that adds support links throughout the plugin's UI.
 *
 * @since 2.2
 * @internal
 */
class SupportLink implements Service, Delayed, Conditional, Registerable {

	/**
	 * Get the action to use for registering the service.
	 *
	 * @return string Registration action to use.
	 */
	public static function get_registration_action() {
		return 'wp_loaded';
	}

	/**
	 * Check whether the conditional object is currently needed.
	 *
	 * @return bool Whether the conditional object is needed.
	 */
	public static function is_needed() {
		return (
			SupportScreen::check_core_version()
			&&
			SupportScreen::has_cap()
		);
	}

	/**
	 * Adds hooks.
	 *
	 * @return void
	 */
	public function register() {

		// Add support link to Admin Bar.
		add_action( 'admin_bar_menu', [ $this, 'admin_bar_menu' ], 105 );

		if ( is_admin() ) {
			// Add support link to meta box.
			add_filter( 'amp_validated_url_status_actions', [ $this, 'amp_validated_url_status_actions' ], 10, 2 );

			// Add support link to Post row actions.
			add_filter( 'post_row_actions', [ $this, 'post_row_actions' ], PHP_INT_MAX, 2 );

			// Plugin row Support link.
			add_filter( 'plugin_row_meta', [ $this, 'plugin_row_meta' ], 10, 2 );
		}
	}

	/**
	 * Add Diagnostic link to Admin Bar.
	 *
	 * @param WP_Admin_Bar $wp_admin_bar WP_Admin_Bar object.
	 *
	 * @return void
	 */
	public function admin_bar_menu( WP_Admin_Bar $wp_admin_bar ) {

		if ( ! $wp_admin_bar->get_node( 'amp' ) ) {
			return;
		}

		$wp_admin_bar->add_node(
			[
				'parent' => 'amp',
				'title'  => esc_html__( 'Get support', 'amp' ),
				'id'     => 'amp-support',
				'href'   => esc_url(
					add_query_arg(
						[
							'page' => 'amp-support',
							'url'  => rawurlencode( amp_get_current_url() ),
						],
						admin_url( 'admin.php' )
					)
				),
			]
		);
	}

	/**
	 * Add support link to meta box.
	 *
	 * @param string[] $actions Array of actions.
	 * @param WP_Post  $post    Referenced WP_Post object.
	 *
	 * @return string[] $actions Array of actions.
	 */
	public function amp_validated_url_status_actions( $actions, WP_Post $post ) {

		if ( AMP_Validated_URL_Post_Type::POST_TYPE_SLUG !== $post->post_type ) {
			return $actions;
		}

		$query_args = [
			'page' => 'amp-support',
			'url'  => rawurlencode( AMP_Validated_URL_Post_Type::get_url_from_post( $post ) ),
		];

		$actions['amp-support'] = sprintf(
			'<a href="%s">%s</a>',
			esc_url( add_query_arg( $query_args, admin_url( 'admin.php' ) ) ),
			esc_html__( 'Get Support', 'amp' )
		);

		return $actions;
	}

	/**
	 * Add support link to Post row actions.
	 *
	 * @param string[] $actions Array of actions.
	 * @param WP_Post  $post    Referenced WP_Post object.
	 *
	 * @return string[] Array of actions
	 */
	public function post_row_actions( $actions, WP_Post $post ) {

		if ( AMP_Validated_URL_Post_Type::POST_TYPE_SLUG !== $post->post_type ) {
			return $actions;
		}

		$query_args = [
			'page' => 'amp-support',
			'url'  => rawurlencode( AMP_Validated_URL_Post_Type::get_url_from_post( $post ) ),
		];

		$actions['amp-support'] = sprintf(
			'<a href="%s">%s</a>',
			esc_url( add_query_arg( $query_args, admin_url( 'admin.php' ) ) ),
			esc_html__( 'Get Support', 'amp' )
		);

		return $actions;
	}

	/**
	 * Plugin row Support link.
	 *
	 * @param string[] $plugin_meta An array of the plugin's metadata, including the version, author, author URI, and
	 *                              plugin URI.
	 * @param string   $plugin_file Path to the plugin file relative to the plugins directory.
	 *
	 * @return string[] Filtered array of plugin's metadata.
	 */
	public function plugin_row_meta( $plugin_meta, $plugin_file ) {

		if ( 'amp/amp.php' === $plugin_file ) {
			$plugin_meta[] = sprintf(
				'<a href="%s">%s</a>',
				esc_url(
					add_query_arg(
						[ 'page' => 'amp-support' ],
						admin_url( 'admin.php' )
					)
				),
				esc_html__( 'Get support', 'amp' )
			);
		}

		return $plugin_meta;
	}
}
PK.3YL�iZZ&bunyad-amp/src/Admin/SupportScreen.php<?php
/**
 * To add support page under AMP menu page in WordPress admin.
 *
 * @package Ampproject\Ampwp
 */

namespace AmpProject\AmpWP\Admin;

use AmpProject\AmpWP\Infrastructure\Conditional;
use AmpProject\AmpWP\Infrastructure\Delayed;
use AmpProject\AmpWP\Infrastructure\Injector;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;
use AmpProject\AmpWP\Support\SupportData;
use AMP_Validated_URL_Post_Type;
use AMP_Validation_Manager;
use WP_Query;

/**
 * SupportScreen class to add support page under AMP menu page in WordPress admin.
 *
 * @internal
 * @since 2.2
 */
class SupportScreen implements Conditional, Delayed, Service, Registerable {

	/**
	 * Handle for JS file.
	 *
	 * @var string
	 */
	const ASSET_HANDLE = 'amp-support';

	/**
	 * The minimum version of WordPress support for the "Support page".
	 *
	 * @var string
	 */
	const WP_MIN_VERSION = '5.3';

	/**
	 * Injector.
	 *
	 * @var Injector
	 */
	private $injector;

	/**
	 * The parent menu slug.
	 *
	 * @var string
	 */
	private $parent_menu_slug;

	/**
	 * GoogleFonts instance.
	 *
	 * @var GoogleFonts
	 */
	private $google_fonts;

	/**
	 * Get registration action.
	 *
	 * Note that this runs at `init` so that it comes after the user is set. It can't use admin_init even though it the
	 * `is_needed()` method calls `is_admin()` since it adds an `admin_menu` action which runs _before_ `admin_init`.
	 *
	 * @return string
	 */
	public static function get_registration_action() {
		return 'init';
	}

	/**
	 * Class constructor.
	 *
	 * @param Injector    $injector     Injector.
	 * @param OptionsMenu $options_menu An instance of the class handling the parent menu.
	 * @param GoogleFonts $google_fonts An instance of the GoogleFonts service.
	 */
	public function __construct( Injector $injector, OptionsMenu $options_menu, GoogleFonts $google_fonts ) {

		$this->injector = $injector;

		$this->parent_menu_slug = $options_menu->get_menu_slug();

		$this->google_fonts = $google_fonts;
	}

	/**
	 * Determine whether the user has the capability to access the support screen.
	 *
	 * @return bool Whether user has the capability.
	 */
	public static function has_cap() {
		return (
			current_user_can( 'view_site_health_checks' )
			&&
			current_user_can( 'manage_options' )
			&&
			AMP_Validation_Manager::has_cap()
		);
	}

	/**
	 * Returns whether minimum WordPress version is available for support page or not.
	 *
	 * @return bool True if current WordPress's version is greater than or equal to minimum version.
	 */
	public static function check_core_version() {
		return version_compare( get_bloginfo( 'version' ), self::WP_MIN_VERSION, '>=' );
	}

	/**
	 * Check whether the conditional object is currently needed.
	 *
	 * @return bool Whether the conditional object is needed.
	 */
	public static function is_needed() {
		return (
			self::check_core_version()
			&&
			is_admin()
			&&
			self::has_cap()
		);
	}

	/**
	 * Adds hooks.
	 */
	public function register() {

		add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] );
		add_action( 'admin_menu', [ $this, 'add_menu_items' ], 9 );
	}

	/**
	 * Returns the slug for the support page.
	 *
	 * @return string
	 */
	public function get_menu_slug() {

		return 'amp-support';
	}

	/**
	 * Provides the support screen handle.
	 *
	 * @return string
	 */
	public function screen_handle() {

		return sprintf( 'amp_page_%s', $this->get_menu_slug() );
	}

	/**
	 * Add menu.
	 */
	public function add_menu_items() {

		require_once ABSPATH . '/wp-admin/includes/plugin.php';

		add_submenu_page(
			$this->parent_menu_slug,
			esc_html__( 'Support', 'amp' ),
			esc_html__( 'Support', 'amp' ),
			'manage_options',
			$this->get_menu_slug(),
			[ $this, 'render_screen' ],
			10
		);
	}

	/**
	 * Enqueues settings page assets.
	 *
	 * @param string $hook_suffix The current admin page.
	 *
	 * @return void
	 */
	public function enqueue_assets( $hook_suffix ) {

		if ( $this->screen_handle() !== $hook_suffix ) {
			return;
		}

		/** This action is documented in src/Admin/OptionsMenu.php */
		do_action( 'amp_register_polyfills' );

		$asset_file   = AMP__DIR__ . '/assets/js/' . self::ASSET_HANDLE . '.asset.php';
		$asset        = require $asset_file;
		$dependencies = $asset['dependencies'];
		$version      = $asset['version'];

		wp_enqueue_script(
			self::ASSET_HANDLE,
			amp_get_asset_url( 'js/' . self::ASSET_HANDLE . '.js' ),
			$dependencies,
			$version,
			true
		);

		wp_enqueue_style(
			self::ASSET_HANDLE,
			amp_get_asset_url( 'css/amp-support.css' ),
			[
				$this->google_fonts->get_handle(),
				'wp-components',
			],
			AMP__VERSION
		);

		$args = [];
		// phpcs:ignore WordPress.Security.NonceVerification.Recommended
		$amp_url = isset( $_GET['url'] ) ? esc_url_raw( wp_unslash( $_GET['url'] ) ) : '';

		if ( ! empty( $amp_url ) ) {
			$args = [
				'urls' => [ $amp_url ],
			];
		}

		$support_data = $this->injector->make( SupportData::class, compact( 'args' ) );
		$data         = $support_data->get_data();

		wp_add_inline_script(
			self::ASSET_HANDLE,
			sprintf(
				'var ampSupport = %s;',
				wp_json_encode(
					[
						'restEndpoint'          => get_rest_url( null, 'amp/v1/send-diagnostic' ),
						'args'                  => $args,
						'data'                  => $data,
						'ampValidatedPostCount' => $this->get_amp_validated_post_counts(),
					]
				)
			),
			'before'
		);
	}

	/**
	 * Get count of amp validated post.
	 *
	 * @return array [
	 *     @type int $all   Count of all AMP validated URL post.
	 *     @type int $valid Count of non-stale AMP validated URL posts.
	 *     @type int $stale Count of stale AMP validated URL posts.
	 * ]
	 */
	public function get_amp_validated_post_counts() {

		$amp_validated_post_count = wp_count_posts( AMP_Validated_URL_Post_Type::POST_TYPE_SLUG );

		$query_args = [
			'post_type'      => AMP_Validated_URL_Post_Type::POST_TYPE_SLUG,
			'posts_per_page' => 1,
			'post_status'    => 'publish',
			'meta_key'       => AMP_Validated_URL_Post_Type::VALIDATED_ENVIRONMENT_POST_META_KEY,
			'meta_value'     => maybe_serialize( AMP_Validated_URL_Post_Type::get_validated_environment() ), // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_value
		];
		$query      = new WP_Query( $query_args );

		$all   = intval( $amp_validated_post_count->publish );
		$fresh = intval( $query->found_posts );
		$stale = $all - $fresh;

		return compact( 'all', 'fresh', 'stale' );
	}

	/**
	 * Display Settings.
	 *
	 * @return void
	 */
	public function render_screen() {

		?>
		<div class="wrap">
			<div id="amp-support">
				<div class="amp amp-support">
					<div id="amp-support-root"></div>
				</div>
			</div>
		</div>
		<?php
	}
}
PK.3YJ��MZZ2bunyad-amp/src/Admin/UserRESTEndpointExtension.php<?php
/**
 * Class UserRESTEndpointExtension
 *
 * @package AmpProject\AmpWP
 * @since 2.2
 */

namespace AmpProject\AmpWP\Admin;

use AMP_Theme_Support;
use AmpProject\AmpWP\Infrastructure\Delayed;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;
use WP_User;

/**
 * Service which registers additional REST API fields for the user endpoint.
 *
 * @since 2.2
 * @internal
 */
class UserRESTEndpointExtension implements Service, Registerable, Delayed {

	/**
	 * User meta key that stores a template mode for which the "Review" panel was dismissed.
	 *
	 * @var string
	 */
	const USER_FIELD_REVIEW_PANEL_DISMISSED_FOR_TEMPLATE_MODE = 'amp_review_panel_dismissed_for_template_mode';

	/**
	 * Get registration action.
	 *
	 * @return string
	 */
	public static function get_registration_action() {
		return 'rest_api_init';
	}

	/**
	 * Register.
	 */
	public function register() {
		$this->register_rest_field();
	}

	/**
	 * Register REST field for storing a template mode for which the "Review" panel was dismissed.
	 */
	public function register_rest_field() {
		register_rest_field(
			'user',
			self::USER_FIELD_REVIEW_PANEL_DISMISSED_FOR_TEMPLATE_MODE,
			[
				'get_callback'    => [ $this, 'get_review_panel_dismissed_for_template_mode' ],
				'update_callback' => [ $this, 'update_review_panel_dismissed_for_template_mode' ],
				'schema'          => [
					'description' => __( 'The template mode for which the Review panel on the Settings screen was dismissed by a user.', 'amp' ),
					'type'        => 'string',
					'enum'        => [
						'',
						AMP_Theme_Support::READER_MODE_SLUG,
						AMP_Theme_Support::STANDARD_MODE_SLUG,
						AMP_Theme_Support::TRANSITIONAL_MODE_SLUG,
					],
				],
			]
		);
	}

	/**
	 * Provides a template mode for which the "Review" panel has been dismissed by a user.
	 *
	 * @param array $user Array of user data prepared for REST.
	 *
	 * @return string Template mode for which the panel is dismissed, empty string if the option has not been set.
	 */
	public function get_review_panel_dismissed_for_template_mode( $user ) {
		return get_user_meta( $user['id'], self::USER_FIELD_REVIEW_PANEL_DISMISSED_FOR_TEMPLATE_MODE, true );
	}

	/**
	 * Updates a user's setting determining for which template mode the "Review" panel was dismissed.
	 *
	 * @param string  $template_mode Template mode or empty string.
	 * @param WP_User $user          The WP user to update.
	 *
	 * @return bool The result of updating or deleting the user meta.
	 */
	public function update_review_panel_dismissed_for_template_mode( $template_mode, WP_User $user ) {
		if ( empty( $template_mode ) ) {
			return delete_user_meta( $user->ID, self::USER_FIELD_REVIEW_PANEL_DISMISSED_FOR_TEMPLATE_MODE );
		}

		return (bool) update_user_meta( $user->ID, self::USER_FIELD_REVIEW_PANEL_DISMISSED_FOR_TEMPLATE_MODE, $template_mode );
	}
}
PK.3Y�Җ�7
7
)bunyad-amp/src/Admin/ValidationCounts.php<?php
/**
 * Class ValidationCounts.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Admin;

use AMP_Options_Manager;
use AMP_Validated_URL_Post_Type;
use AmpProject\AmpWP\Infrastructure\Conditional;
use AmpProject\AmpWP\Infrastructure\Delayed;
use AmpProject\AmpWP\Infrastructure\HasRequirements;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;
use AmpProject\AmpWP\Services;

/**
 * Loads assets necessary to retrieve and show the unreviewed counts for validated URLs and validation errors in
 * the AMP admin menu.
 *
 * @since 2.1
 * @internal
 */
final class ValidationCounts implements Service, Registerable, Conditional, Delayed, HasRequirements {

	/**
	 * Assets handle.
	 *
	 * @var string
	 */
	const ASSETS_HANDLE = 'amp-validation-counts';

	/**
	 * RESTPreloader instance.
	 *
	 * @var RESTPreloader
	 */
	private $rest_preloader;

	/**
	 * ValidationCounts constructor.
	 *
	 * @param RESTPreloader $rest_preloader An instance of the RESTPreloader class.
	 */
	public function __construct( RESTPreloader $rest_preloader ) {
		$this->rest_preloader = $rest_preloader;
	}

	/**
	 * Get the action to use for registering the service.
	 *
	 * @return string Registration action to use.
	 */
	public static function get_registration_action() {
		return 'admin_enqueue_scripts';
	}

	/**
	 * Get the list of service IDs required for this service to be registered.
	 *
	 * @return string[] List of required services.
	 */
	public static function get_requirements() {
		return [
			'dependency_support',
			'dev_tools.user_access',
		];
	}

	/**
	 * Check whether the conditional object is currently needed.
	 *
	 * @return bool Whether the conditional object is needed.
	 */
	public static function is_needed() {
		return Services::get( 'dependency_support' )->has_support() && Services::get( 'dev_tools.user_access' )->is_user_enabled();
	}

	/**
	 * Runs on instantiation.
	 */
	public function register() {
		$this->enqueue_scripts();
	}

	/**
	 * Enqueue admin assets.
	 */
	public function enqueue_scripts() {
		$asset_file   = AMP__DIR__ . '/assets/js/' . self::ASSETS_HANDLE . '.asset.php';
		$asset        = require $asset_file;
		$dependencies = $asset['dependencies'];
		$version      = $asset['version'];

		wp_enqueue_script(
			self::ASSETS_HANDLE,
			amp_get_asset_url( 'js/' . self::ASSETS_HANDLE . '.js' ),
			$dependencies,
			$version,
			true
		);

		wp_enqueue_style(
			self::ASSETS_HANDLE,
			amp_get_asset_url( 'css/' . self::ASSETS_HANDLE . '.css' ),
			false,
			$version
		);

		$this->maybe_add_preload_rest_paths();
	}

	/**
	 * Adds REST paths to preload.
	 *
	 * Preload validation counts data on an admin screen that has the AMP Options page as a parent or on any admin
	 * screen related to `amp_validation_error` post type (which includes the `amp_validation_error` taxonomy).
	 */
	protected function maybe_add_preload_rest_paths() {
		if ( $this->is_dedicated_plugin_screen() ) {
			$this->rest_preloader->add_preloaded_path( '/amp/v1/unreviewed-validation-counts' );
		}
	}

	/**
	 * Whether the current screen is pages inside the AMP Options menu.
	 */
	public function is_dedicated_plugin_screen() {
		return (
			AMP_Options_Manager::OPTION_NAME === get_admin_page_parent()
			||
			AMP_Validated_URL_Post_Type::POST_TYPE_SLUG === get_current_screen()->post_type
		);
	}
}
PK.3Y�>����;bunyad-amp/src/BackgroundTask/BackgroundTaskDeactivator.php<?php
/**
 * BackgroundTaskDeactivator service for clearing background tasks on plugin deactivation.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\BackgroundTask;

use AmpProject\AmpWP\Icon;
use AmpProject\AmpWP\Infrastructure\Deactivateable;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;

/**
 * Clears background tasks when the plugin is deactivated.
 *
 * @package AmpProject\AmpWP
 * @since 2.1
 * @internal
 */
final class BackgroundTaskDeactivator implements Service, Registerable, Deactivateable {

	/**
	 * List of event names to deactivate.
	 *
	 * @var string[]
	 */
	private $events_to_deactivate = [];

	/**
	 * Name of the plugin as WordPress is expecting it.
	 *
	 * This should usually have the form "amp/amp.php".
	 *
	 * @var string
	 */
	private $plugin_file;

	/**
	 * Class constructor.
	 */
	public function __construct() {
		$this->plugin_file = plugin_basename( AMP__FILE__ );
	}

	/**
	 * Register the service with the system.
	 *
	 * @return void
	 */
	public function register() {
		add_action( "network_admin_plugin_action_links_{$this->plugin_file}", [ $this, 'add_warning_sign_to_network_deactivate_action' ], 10, 1 );
		add_action( 'plugin_row_meta', [ $this, 'add_warning_to_plugin_meta' ], 10, 2 );
	}

	/**
	 * Get warning icon markup.
	 *
	 * @return string Warning icon markup.
	 */
	private function get_warning_icon() {
		return sprintf( '<span style="vertical-align: middle">%s</span>', Icon::warning()->to_html() );
	}

	/**
	 * Adds an event to the deactivate queue.
	 *
	 * @param string $event_name The event name.
	 */
	public function add_event( $event_name ) {
		if ( ! in_array( $event_name, $this->events_to_deactivate, true ) ) {
			$this->events_to_deactivate[] = $event_name;
		}
	}

	/**
	 * Run deactivation logic.
	 *
	 * This should be hooked up to the WordPress deactivation hook.
	 *
	 * @param bool $network_wide Whether the deactivation was done network-wide.
	 * @return void
	 */
	public function deactivate( $network_wide ) {
		if ( $network_wide && is_multisite() && ! wp_is_large_network( 'sites' ) ) {
			foreach ( get_sites(
				[
					'fields' => 'ids',
					'number' => 0, // Disables pagination to retrieve all sites.
				]
			) as $blog_id ) {
				switch_to_blog( $blog_id );

				foreach ( $this->events_to_deactivate as $event_name ) {
					wp_unschedule_hook( $event_name );
				}

				restore_current_blog();
			}
		} else {
			foreach ( $this->events_to_deactivate as $event_name ) {
				wp_unschedule_hook( $event_name );
			}
		}
	}

	/**
	 * Add a warning sign to the network deactivate action on the network plugins screen.
	 *
	 * @param string[] $actions     An array of plugin action links. By default this can include 'activate',
	 *                              'deactivate', and 'delete'.
	 * @return string[]
	 */
	public function add_warning_sign_to_network_deactivate_action( $actions ) {
		if ( ! wp_is_large_network() ) {
			return $actions;
		}

		if ( ! array_key_exists( 'deactivate', $actions ) ) {
			return $actions;
		}

		wp_enqueue_style( 'amp-icons' );

		$warning_icon = $this->get_warning_icon();
		if ( false === strpos( $actions['deactivate'], $warning_icon ) ) {
			$actions['deactivate'] = preg_replace( '#(?=</a>)#i', ' ' . $warning_icon, $actions['deactivate'] );
		}

		return $actions;
	}

	/**
	 * Add a warning to the plugin meta row on the network plugins screen.
	 *
	 * @param string[] $plugin_meta An array of the plugin's metadata, including the version, author, author URI, and
	 *                              plugin URI.
	 * @param string   $plugin_file Path to the plugin file relative to the plugins directory.
	 * @return string[]
	 */
	public function add_warning_to_plugin_meta( $plugin_meta, $plugin_file ) {
		if ( ! is_multisite() || ! wp_is_large_network() ) {
			return $plugin_meta;
		}

		if ( $plugin_file !== $this->plugin_file ) {
			return $plugin_meta;
		}

		wp_enqueue_style( 'amp-icons' );

		$warning = $this->get_warning_icon() . ' ' . esc_html__( 'Large site detected. Deactivation will leave orphaned scheduled events behind.', 'amp' ) . ' ' . $this->get_warning_icon();

		if ( ! in_array( $warning, $plugin_meta, true ) ) {
			$plugin_meta[] = $warning;
		}

		return $plugin_meta;
	}
}
PK.3Ya�L%9bunyad-amp/src/BackgroundTask/CronBasedBackgroundTask.php<?php
/**
 * Abstract class CronBasedBackgroundTask.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\BackgroundTask;

use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;

/**
 * Abstract base class for using cron to execute a background task.
 *
 * @package AmpProject\AmpWP
 * @since 2.0
 * @internal
 */
abstract class CronBasedBackgroundTask implements Service, Registerable {

	const DEFAULT_INTERVAL_HOURLY      = 'hourly';
	const DEFAULT_INTERVAL_TWICE_DAILY = 'twicedaily';
	const DEFAULT_INTERVAL_DAILY       = 'daily';

	/**
	 * BackgroundTaskDeactivator instance.
	 *
	 * @var BackgroundTaskDeactivator
	 */
	protected $background_task_deactivator;

	/**
	 * Class constructor.
	 *
	 * @param BackgroundTaskDeactivator $background_task_deactivator Service that deactivates background events.
	 */
	public function __construct( BackgroundTaskDeactivator $background_task_deactivator ) {
		$this->background_task_deactivator = $background_task_deactivator;
	}

	/**
	 * Register the service with the system.
	 *
	 * @return void
	 */
	public function register() {
		$this->background_task_deactivator->add_event( $this->get_event_name() );
	}

	/**
	 * Schedule the event.
	 *
	 * @param mixed[] ...$args Arguments passed to the function from the action hook.
	 */
	abstract protected function schedule_event( ...$args );

	/**
	 * Get the event name.
	 *
	 * This is the "slug" of the event, not the display name.
	 *
	 * Note: the event name should be prefixed to prevent naming collisions.
	 *
	 * @return string Name of the event.
	 */
	abstract protected function get_event_name();

	/**
	 * Process the event.
	 *
	 * @param mixed[] ...$args Args to pass to the process callback.
	 */
	abstract public function process( ...$args );
}
PK.3Y�tu+u+<bunyad-amp/src/BackgroundTask/MonitorCssTransientCaching.php<?php
/**
 * Class MonitorCssTransientCaching.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\BackgroundTask;

use AMP_Options_Manager;
use AmpProject\AmpWP\BlockUniqidTransformer;
use AmpProject\AmpWP\Option;
use DateTimeImmutable;
use DateTimeInterface;
use Exception;

/**
 * Monitor the CSS transient caching to detect and remedy issues.
 *
 * This checks whether there's excessive cycling of CSS cached stylesheets and disables transient caching if so.
 *
 * @package AmpProject\AmpWP
 * @since 2.0
 * @internal
 */
final class MonitorCssTransientCaching extends RecurringBackgroundTask {

	/**
	 * Name of the event to schedule.
	 *
	 * @var string
	 */
	const EVENT_NAME = 'amp_monitor_css_transient_caching';

	/**
	 * Key to use to persist the time series in the WordPress options table.
	 *
	 * @var string
	 */
	const TIME_SERIES_OPTION_KEY = 'amp_css_transient_monitor_time_series';

	/**
	 * Default threshold to use for problem detection in number of transients per day.
	 *
	 * This is set high to avoid false positives and only trigger on high-traffic sites that exhibit serious problems.
	 *
	 * @var float
	 */
	const DEFAULT_THRESHOLD = 5000.0;

	/**
	 * Sampling range in days to calculate the moving average from.
	 *
	 * @var int
	 */
	const DEFAULT_SAMPLING_RANGE = 14;

	/**
	 * @string
	 */
	const WP_VERSION = 'wp_version';

	/**
	 * @string
	 */
	const GUTENBERG_VERSION = 'gutenberg_version';

	/**
	 * @var BlockUniqidTransformer
	 */
	private $block_uniqid_transformer;

	/**
	 * Constructor.
	 *
	 * @param BackgroundTaskDeactivator $background_task_deactivator Deactivator.
	 * @param BlockUniqidTransformer    $block_uniqid_transformer    Transformer.
	 */
	public function __construct( BackgroundTaskDeactivator $background_task_deactivator, BlockUniqidTransformer $block_uniqid_transformer ) {
		parent::__construct( $background_task_deactivator );
		$this->block_uniqid_transformer = $block_uniqid_transformer;
	}

	/**
	 * Register the service with the system.
	 *
	 * @return void
	 */
	public function register() {
		add_action( 'amp_plugin_update', [ $this, 'handle_plugin_update' ] );
		add_filter( 'amp_options_updating', [ $this, 'sanitize_disabled_option' ], 10, 2 );
		parent::register();
	}

	/**
	 * Get the interval to use for the event.
	 *
	 * @return string An existing interval name. Valid values are 'hourly', 'twicedaily' or 'daily'.
	 */
	protected function get_interval() {
		return self::DEFAULT_INTERVAL_DAILY;
	}

	/**
	 * Get the event name.
	 *
	 * This is the "slug" of the event, not the display name.
	 *
	 * Note: the event name should be prefixed to prevent naming collisions.
	 *
	 * @return string Name of the event.
	 */
	protected function get_event_name() {
		return self::EVENT_NAME;
	}

	/**
	 * Process a single cron tick.
	 *
	 * @todo This has arbitrary arguments to allow for testing, as we don't have dependency injection for services.
	 *       With dependency injection, we could for example inject a Clock object and mock it for testing.
	 *
	 * @param array ...$args {
	 *     Arguments passed to the cron callback.
	 *
	 *     @type DateTimeInterface $date Optional. Date to use for timestamping the processing (for testing).
	 *     @type int               $transient_count Optional. Count of transients to use for the processing (for testing).
	 * }
	 * @return void
	 * @throws Exception If a date could not be instantiated.
	 */
	public function process( ...$args ) {
		if ( wp_using_ext_object_cache() || $this->is_css_transient_caching_disabled() ) {
			return;
		}

		$date = isset( $args[0] ) && $args[0] instanceof DateTimeInterface ? $args[0] : new DateTimeImmutable();

		$transient_count = isset( $args[1] ) ? (int) $args[1] : $this->query_css_transient_count();

		$date_string = $date->format( 'Ymd' );
		$time_series = $this->get_time_series();

		$time_series[ $date_string ] = $transient_count;
		ksort( $time_series );

		$sampling_range = $this->get_sampling_range();
		$time_series    = array_slice( $time_series, - $sampling_range, null, true );

		$this->persist_time_series( $time_series );

		$moving_average = $this->calculate_average( $time_series );

		if ( $moving_average > 0.0 && $moving_average > (float) $this->get_threshold() ) {
			$this->disable_css_transient_caching();
		}
	}

	/**
	 * Check whether transient caching of stylesheets is disabled.
	 *
	 * @return bool Whether transient caching of stylesheets is disabled.
	 */
	public function is_css_transient_caching_disabled() {
		return (bool) AMP_Options_Manager::get_option( Option::DISABLE_CSS_TRANSIENT_CACHING, false );
	}

	/**
	 * Enable transient caching of stylesheets.
	 */
	public function enable_css_transient_caching() {
		AMP_Options_Manager::update_option( Option::DISABLE_CSS_TRANSIENT_CACHING, false );
	}

	/**
	 * Disable transient caching of stylesheets.
	 */
	public function disable_css_transient_caching() {
		AMP_Options_Manager::update_option(
			Option::DISABLE_CSS_TRANSIENT_CACHING,
			[
				self::WP_VERSION        => get_bloginfo( 'version' ),
				self::GUTENBERG_VERSION => defined( 'GUTENBERG_VERSION' ) ? GUTENBERG_VERSION : null,
			]
		);
	}

	/**
	 * Sanitize the option.
	 *
	 * @param array $options     Existing options.
	 * @param array $new_options New options.
	 * @return array Sanitized options.
	 */
	public function sanitize_disabled_option( $options, $new_options ) {
		$value = null;

		if ( array_key_exists( Option::DISABLE_CSS_TRANSIENT_CACHING, $new_options ) ) {
			$unsanitized_value = $new_options[ Option::DISABLE_CSS_TRANSIENT_CACHING ];

			if ( is_bool( $unsanitized_value ) ) {
				$value = (bool) $unsanitized_value;
			} elseif ( is_array( $unsanitized_value ) ) {
				$value = [];
				foreach ( wp_array_slice_assoc( $unsanitized_value, [ self::WP_VERSION, self::GUTENBERG_VERSION ] ) as $key => $version ) {
					$value[ $key ] = preg_replace( '/[^a-z0-9_\-.]/', '', $version );
				}
			}
		}

		if ( empty( $value ) ) {
			unset( $options[ Option::DISABLE_CSS_TRANSIENT_CACHING ] );
		} else {
			$options[ Option::DISABLE_CSS_TRANSIENT_CACHING ] = $value;
		}

		return $options;
	}

	/**
	 * Query the number of transients containing cache stylesheets.
	 *
	 * @return int Count of transients caching stylesheets.
	 */
	public function query_css_transient_count() {
		global $wpdb;

		// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
		return (int) $wpdb->get_var(
			"SELECT COUNT(*) FROM {$wpdb->options} WHERE option_name LIKE '_transient_amp-parsed-stylesheet%'"
		);
	}

	/**
	 * Handle update to plugin.
	 *
	 * @param string $old_version Old version.
	 */
	public function handle_plugin_update( $old_version ) {
		// Note: We cannot use the is_css_transient_caching_disabled method because we need to get the underlying stored value.
		$disabled = AMP_Options_Manager::get_option( Option::DISABLE_CSS_TRANSIENT_CACHING, false );
		if ( empty( $disabled ) ) {
			return;
		}

		// Obtain the version of WordPress and Gutenberg at which time the functionality was disabled, if available.
		$wp_version        = isset( $disabled[ self::WP_VERSION ] ) ? $disabled[ self::WP_VERSION ] : null;
		$gutenberg_version = isset( $disabled[ self::GUTENBERG_VERSION ] ) ? $disabled[ self::GUTENBERG_VERSION ] : null;

		if (
			// Reset the disabling of the CSS caching subsystem when updating from versions 1.5.0 or 1.5.1.
			(
				version_compare( $old_version, '1.5.0', '>=' )
				&&
				version_compare( $old_version, '1.5.2', '<' )
			)
			||
			// Reset when it was disabled prior to the versions of WP/Gutenberg being captured,
			// or if the captured versions were affected at the time of disabling.
			(
				version_compare( strtok( $old_version, '-' ), '2.2.2', '<' )
				&&
				(
					! is_array( $disabled )
					||
					$this->block_uniqid_transformer->is_affected_gutenberg_version( $gutenberg_version )
					||
					$this->block_uniqid_transformer->is_affected_wordpress_version( $wp_version )
				)
			)
		) {
			$this->enable_css_transient_caching();
		}
	}

	/**
	 * Get the time series stored in the WordPress options table.
	 *
	 * @return int[] Time series with the count of transients per day.
	 */
	public function get_time_series() {
		return (array) get_option( self::TIME_SERIES_OPTION_KEY, [] );
	}

	/**
	 * Get the default threshold to use.
	 *
	 * @return float Default threshold to use.
	 */
	public function get_default_threshold() {
		return self::DEFAULT_THRESHOLD;
	}

	/**
	 * Get the default sampling range to use.
	 *
	 * @return int Default sampling range to use.
	 */
	public function get_default_sampling_range() {
		return self::DEFAULT_SAMPLING_RANGE;
	}

	/**
	 * Persist the time series in the database.
	 *
	 * @param int[] $time_series Associative array of integers with the key being a date string and the value the count
	 *                           of transients.
	 */
	private function persist_time_series( $time_series ) {
		update_option( self::TIME_SERIES_OPTION_KEY, $time_series, false );
	}

	/**
	 * Calculate the average for the provided time series.
	 *
	 * Note: The single highest value is discarded to calculate the average, so as to avoid a single outlier causing the
	 * threshold to be reached.
	 *
	 * @param int[] $time_series Associative array of integers with the key being a date string and the value the count
	 *                           of transients.
	 * @return float Average value for the provided time series.
	 */
	private function calculate_average( $time_series ) {
		$sum                   = array_sum( $time_series );
		$sum_without_outlier   = $sum - max( $time_series );
		$count_without_outlier = count( $time_series ) - 1;

		if ( $count_without_outlier <= 0 ) {
			return 0.0;
		}

		return $sum_without_outlier / $count_without_outlier;
	}

	/**
	 * Get the threshold to check the moving average against.
	 *
	 * This can be filtered via the 'amp_css_transient_monitoring_threshold' filter.
	 *
	 * @return float Threshold to use.
	 */
	private function get_threshold() {

		/**
		 * Filters the threshold to use for disabling transient caching of stylesheets.
		 *
		 * @since 1.5.0
		 *
		 * @param int $threshold Maximum average number of transients per day.
		 */
		$threshold = (float) apply_filters( 'amp_css_transient_monitoring_threshold', self::DEFAULT_THRESHOLD );

		return $threshold > 0.0 ? $threshold : self::DEFAULT_THRESHOLD;
	}

	/**
	 * Get the sampling range to limit the time series to for calculating the moving average.
	 *
	 * This can be filtered via the 'amp_css_transient_monitoring_sampling_range' filter.
	 *
	 * @return int Sampling range to use.
	 */
	private function get_sampling_range() {

		/**
		 * Filters the sampling range to use for monitoring the transient caching of stylesheets.
		 *
		 * @since 1.5.0
		 *
		 * @param int $sampling_rage Sampling range in number of days.
		 */
		$sampling_range = (int) apply_filters( 'amp_css_transient_monitoring_sampling_range', self::DEFAULT_SAMPLING_RANGE );

		return $sampling_range > 0 ? $sampling_range : self::DEFAULT_SAMPLING_RANGE;
	}
}
PK.3Y�ښh339bunyad-amp/src/BackgroundTask/RecurringBackgroundTask.php<?php
/**
 * Abstract class RecurringBackgroundTask.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\BackgroundTask;

/**
 * Abstract base class for using cron to execute a background task that runs on a schedule.
 *
 * @package AmpProject\AmpWP
 * @since 2.1
 * @internal
 */
abstract class RecurringBackgroundTask extends CronBasedBackgroundTask {

	/**
	 * Register the service with the system.
	 */
	public function register() {
		parent::register();

		add_action( 'admin_init', [ $this, 'schedule_event' ], 10, 0 );
		add_action( $this->get_event_name(), [ $this, 'process' ] );
	}

	/**
	 * Schedule the event.
	 *
	 * @param mixed[] ...$args Arguments passed to the function from the action hook, which here is empty always since add_action().
	 */
	final public function schedule_event( ...$args ) {
		if ( ! is_user_logged_in() ) {
			return;
		}

		$event_name = $this->get_event_name();
		$recurrence = $this->get_interval();

		$scheduled_event = $this->get_scheduled_event( $event_name, $args );

		// Unschedule any existing event which had a differing recurrence.
		if ( $scheduled_event && $scheduled_event->schedule !== $recurrence ) {
			wp_unschedule_event( $scheduled_event->timestamp, $event_name, $args );
			$scheduled_event = null;
		}

		if ( ! $scheduled_event ) {
			wp_schedule_event( time(), $recurrence, $event_name, $args );
		}
	}

	/**
	 * Retrieve a scheduled event.
	 *
	 * This uses a copied implementation from WordPress core if `wp_get_scheduled_event()` does not exist, as it was
	 * introduced in WordPress 5.1.
	 *
	 * @link https://github.com/WordPress/wordpress-develop/blob/ba943e113d3b31b121f7/src/wp-includes/cron.php#L753-L793
	 * @see \wp_get_scheduled_event()
	 * @codeCoverageIgnore
	 *
	 * @param string $hook      Action hook of the event.
	 * @param array  $args      Optional. Array containing each separate argument to pass to the hook's callback function.
	 *                            Although not passed to a callback, these arguments are used to uniquely identify the
	 *                            event, so they should be the same as those used when originally scheduling the event.
	 *                            Default empty array.
	 * @param mixed  $timestamp Optional. Unix timestamp (UTC) of the event. If not specified, the next scheduled event
	 *                            is returned. Default null.
	 * @return object|false The event object. False if the event does not exist.
	 */
	final public function get_scheduled_event( $hook, $args = [], $timestamp = null ) {
		if ( function_exists( 'wp_get_scheduled_event' ) ) {
			return wp_get_scheduled_event( $hook, $args, $timestamp );
		}

		if ( null !== $timestamp && ! is_numeric( $timestamp ) ) {
			return false;
		}

		$crons = _get_cron_array();
		if ( empty( $crons ) ) {
			return false;
		}

		$key = md5( serialize( $args ) ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize -- This is copied from WP core.

		if ( ! $timestamp ) {
			// Get next event.
			$next = false;
			foreach ( $crons as $timestamp => $cron ) {
				if ( isset( $cron[ $hook ][ $key ] ) ) {
					$next = $timestamp;
					break;
				}
			}
			if ( ! $next ) {
				return false;
			}

			$timestamp = $next;
		} elseif ( ! isset( $crons[ $timestamp ][ $hook ][ $key ] ) ) {
			return false;
		}

		$event = (object) [
			'hook'      => $hook,
			'timestamp' => $timestamp,
			'schedule'  => $crons[ $timestamp ][ $hook ][ $key ]['schedule'],
			'args'      => $args,
		];

		if ( isset( $crons[ $timestamp ][ $hook ][ $key ]['interval'] ) ) {
			$event->interval = $crons[ $timestamp ][ $hook ][ $key ]['interval'];
		}

		return $event;
	}

	/**
	 * Get the interval to use for the event.
	 *
	 * @return string An existing interval name. Valid values are 'hourly', 'twicedaily' or 'daily'.
	 */
	abstract protected function get_interval();
}
PK.3Y�V\9��?bunyad-amp/src/BackgroundTask/SingleScheduledBackgroundTask.php<?php
/**
 * Abstract class SingleScheduledBackgroundTask.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\BackgroundTask;

/**
 * Abstract base class for using cron to execute a background task that runs only once.
 *
 * @package AmpProject\AmpWP
 * @since 2.1
 * @internal
 */
abstract class SingleScheduledBackgroundTask extends CronBasedBackgroundTask {

	/**
	 * Register the service with the system.
	 */
	public function register() {
		parent::register();

		add_action( $this->get_action_hook(), [ $this, 'schedule_event' ], 10, $this->get_action_hook_arg_count() );
		add_action( $this->get_event_name(), [ $this, 'process' ] );
	}

	/**
	 * Schedule the event.
	 *
	 * @param array ...$args Arguments passed to the function from the action hook.
	 */
	public function schedule_event( ...$args ) {
		if ( ! $this->should_schedule_event( $args ) ) {
			return;
		}

		wp_schedule_single_event( $this->get_timestamp(), $this->get_event_name(), $args );
	}

	/**
	 * Time after which to run the event.
	 *
	 * @return int A timestamp. Defaults to the current time.
	 */
	protected function get_timestamp() {
		return time();
	}

	/**
	 * Provides the number of args expected from the action hook where the event is registered. Default 1.
	 *
	 * @return int
	 */
	protected function get_action_hook_arg_count() {
		return 1;
	}

	/**
	 * Returns whether the event should be scheduled.
	 *
	 * @param array $args Arguments passed from the action hook where the event is to be scheduled.
	 * @return boolean
	 */
	abstract protected function should_schedule_event( $args );

	/**
	 * Gets the hook on which to schedule the event.
	 *
	 * @return string The action hook name.
	 */
	abstract protected function get_action_hook();
}
PK.3Y�N**Mbunyad-amp/src/BackgroundTask/ValidatedUrlStylesheetDataGarbageCollection.php<?php
/**
 * Class ValidatedUrlStylesheetDataGarbageCollection.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\BackgroundTask;

use AMP_Validated_URL_Post_Type;

/**
 * Delete stylesheet data from amp_validated_url posts which have not been validated in a week.
 *
 * This background task will update the oldest 100 amp_validated_url posts each time it runs, excluding URLs that have
 * been validated within the past week. The batch size of 100 follows the lead of `_wp_batch_update_comment_type()` in
 * WordPress 5.5. Deleting data from posts older than 1 week follows the lead of `wp_delete_auto_drafts()`.
 *
 * @since 2.0
 * @see _wp_batch_update_comment_type()
 * @see wp_delete_auto_drafts()
 *
 * @link https://github.com/ampproject/amp-wp/issues/5132
 * @package AmpProject\AmpWP
 * @internal
 */
final class ValidatedUrlStylesheetDataGarbageCollection extends RecurringBackgroundTask {

	/**
	 * Name of the event to schedule.
	 *
	 * @var string
	 */
	const EVENT_NAME = 'amp_validated_url_stylesheet_gc';

	/**
	 * Get the interval to use for the event.
	 *
	 * @return string An existing interval name.
	 */
	protected function get_interval() {
		return self::DEFAULT_INTERVAL_HOURLY;
	}

	/**
	 * Get the event name.
	 *
	 * This is the "slug" of the event, not the display name.
	 *
	 * Note: the event name should be prefixed to prevent naming collisions.
	 *
	 * @return string Name of the event.
	 */
	protected function get_event_name() {
		return self::EVENT_NAME;
	}

	/**
	 * Process a single cron tick.
	 *
	 * @param mixed[] ...$args Unused callback arguments.
	 * @return void
	 */
	public function process( ...$args ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
		AMP_Validated_URL_Post_Type::delete_stylesheets_postmeta_batch( 100, '1 week ago' );
	}
}
PK.3Y�a�~~Abunyad-amp/src/BackgroundTask/ValidationDataGarbageCollection.php<?php
/**
 * Class ValidationDataGarbageCollection.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\BackgroundTask;

use AMP_Validated_URL_Post_Type;
use AMP_Validation_Error_Taxonomy;

/**
 * Garbage collect validation data.
 *
 * This scheduled event removes validation data (amp_validated_url posts and amp_validation_error terms) which no longer
 * have any need to be retained. The batch size of 100 follows the lead of `_wp_batch_update_comment_type()` in
 * WordPress 5.5. Deleting data from posts older than 1 week follows the lead of `wp_delete_auto_drafts()`.
 *
 * @since 2.2
 * @see _wp_batch_update_comment_type()
 * @see wp_delete_auto_drafts()
 *
 * @link https://github.com/ampproject/amp-wp/issues/4779
 * @package AmpProject\AmpWP
 * @internal
 */
final class ValidationDataGarbageCollection extends RecurringBackgroundTask {

	/**
	 * Name of the event to schedule.
	 *
	 * @var string
	 */
	const EVENT_NAME = 'amp_validation_data_gc';

	/**
	 * Get the interval to use for the event.
	 *
	 * @return string An existing interval name.
	 */
	protected function get_interval() {
		return self::DEFAULT_INTERVAL_DAILY;
	}

	/**
	 * Get the event name.
	 *
	 * This is the "slug" of the event, not the display name.
	 *
	 * Note: the event name should be prefixed to prevent naming collisions.
	 *
	 * @return string Name of the event.
	 */
	protected function get_event_name() {
		return self::EVENT_NAME;
	}

	/**
	 * Process a single cron tick.
	 *
	 * @param mixed[] ...$args Unused callback arguments.
	 * @return void
	 */
	public function process( ...$args ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable

		/**
		 * Filters the count of eligible validated URLs that should be garbage collected.
		 *
		 * If this is filtered to be zero or less, then garbage collection is disabled.
		 *
		 * @since 2.2
		 *
		 * @param int $count Validated URL count. Default 100.
		 */
		$count = apply_filters( 'amp_validation_data_gc_url_count', 100 );
		if ( $count <= 0 ) {
			return;
		}

		/**
		 * Filters the date before which validated URLs will be garbage collected.
		 *
		 * @since 2.2
		 *
		 * @param string|array $before Date before which to find amp_validated_url posts to delete. Default '1 week ago'.
		 *                             Accepts strtotime()-compatible string, or array of 'year', 'month', 'day' values.
		 */
		$before = apply_filters( 'amp_validation_data_gc_before', '1 week ago' );

		AMP_Validated_URL_Post_Type::garbage_collect_validated_urls( $count, $before );

		/**
		 * Filters whether to delete empty terms during validation garbage collection.
		 *
		 * @since 2.2
		 *
		 * @param bool $enabled Whether enabled. Default true.
		 */
		if ( apply_filters( 'amp_validation_data_gc_delete_empty_terms', true ) ) {
			// Finally, delete validation errors which may now be empty.
			AMP_Validation_Error_Taxonomy::delete_empty_terms();
		}
	}
}
PK.3Y쁋a��*bunyad-amp/src/Cli/AmpCommandNamespace.php<?php
/**
 * Class AmpCommandNamespace.
 *
 * Command namespace that regroups all AMP CLI commands.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Cli;

use WP_CLI\Dispatcher\CommandNamespace;

/**
 * Interacts with the AMP plugin.
 *
 * @since 1.3.0
 * @since 2.1.0 Renamed and refactored into PSR-4 namespace.
 * @internal
 */
final class AmpCommandNamespace extends CommandNamespace {

}
PK.3Y�;���3bunyad-amp/src/Cli/CommandNamespaceRegistration.php<?php
/**
 * Class CommandNamespaceRegistration.
 *
 * Registers the AMP command namespace.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Cli;

use AmpProject\AmpWP\Infrastructure\Conditional;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;
use WP_CLI;

/**
 * Interacts with the AMP plugin.
 *
 * @since 1.3.0
 * @since 2.1.0 Renamed and refactored into PSR-4 namespace.
 * @internal
 */
final class CommandNamespaceRegistration implements Service, Registerable, Conditional {

	/**
	 * Check whether the conditional object is currently needed.
	 *
	 * @return bool Whether the conditional object is needed.
	 */
	public static function is_needed() {
		return defined( 'WP_CLI' ) && WP_CLI && class_exists( 'WP_CLI\Dispatcher\CommandNamespace' );
	}

	/**
	 * Register the service.
	 *
	 * @return void
	 */
	public function register() {
		WP_CLI::add_command( 'amp', AmpCommandNamespace::class );
	}
}
PK.3YH��Cpp'bunyad-amp/src/Cli/OptimizerCommand.php<?php
/**
 * Class OptimizerCommand.
 *
 * Commands that deal with the AMP optimizer.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Cli;

use AmpProject\AmpWP\Infrastructure\CliCommand;
use AmpProject\AmpWP\Infrastructure\Service;
use AmpProject\AmpWP\Optimizer\OptimizerService;
use AmpProject\Optimizer\Error;
use AmpProject\Optimizer\ErrorCollection;
use WP_CLI;

/**
 * Commands that deal with the AMP optimizer. (EXPERIMENTAL)
 *
 * Note: The Optimizer CLI commands are to be considered experimental, as
 * the output they produce is currently not guaranteed to be consistent
 * with the corresponding output from the web server code path.
 *
 * @since 2.1.0
 * @internal
 */
final class OptimizerCommand implements Service, CliCommand {

	/**
	 * Optimizer service instance to use.
	 *
	 * @var OptimizerService
	 */
	private $optimizer_service;

	/**
	 * Get the name under which to register the CLI command.
	 *
	 * @return string The name under which to register the CLI command.
	 */
	public static function get_command_name() {
		return 'amp optimizer';
	}

	/**
	 * OptimizerCommand constructor.
	 *
	 * @param OptimizerService $optimizer_service Optimizer service instance to use.
	 */
	public function __construct( OptimizerService $optimizer_service ) {
		$this->optimizer_service = $optimizer_service;
	}

	/**
	 * Run a file through the AMP Optimizer. (EXPERIMENTAL)
	 *
	 * Note: The Optimizer CLI commands are to be considered experimental, as
	 * the output they produce is currently not guaranteed to be consistent
	 * with the corresponding output from the web server code path.
	 *
	 * ## OPTIONS
	 *
	 * [<file>]
	 * : Input file to run through the AMP Optimizer. Omit or use '-' to read from STDIN.
	 *
	 * ## EXAMPLES
	 *
	 * # Test <amp-img> SSR transformations and store them in a new file named 'output.html'.
	 * $ echo '<amp-img src="image.jpg" width="500" height="500">' | wp amp optimizer optimize > output.html
	 *
	 * @param array $args       Array of positional arguments.
	 * @param array $assoc_args Associative array of associative arguments.
	 * @throws WP_CLI\ExitException If the requested file could not be read.
	 */
	public function optimize( $args, /** @noinspection PhpUnusedParameterInspection */ $assoc_args ) {
		$file = '-';

		if ( count( $args ) > 0 ) {
			$file = array_shift( $args );
		}

		if (
			'-' !== $file
			&&
			(
				! is_file( $file )
				||
				! is_readable( $file )
			)
		) {
			WP_CLI::error( "Could not read file: '{$file}'." );
		}

		if ( '-' === $file ) {
			$file = 'php://stdin';
		}

		$html           = file_get_contents( $file );
		$errors         = new ErrorCollection();
		$optimized_html = $this->optimizer_service->optimizeHtml( $html, $errors );

		WP_CLI::line( $optimized_html );

		/** @var Error $error */
		foreach ( $errors as $error ) {
			WP_CLI::warning( "[{$error->getCode()}] {$error->getMessage()}" );
		}
	}
}
PK.3Y��P�n*n*$bunyad-amp/src/Cli/OptionCommand.php<?php
/**
 * Class OptionCommand.
 *
 * Commands that deal with the AMP options.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Cli;

use WP_CLI;
use WP_Error;
use WP_REST_Request;
use WP_REST_Response;
use WP_CLI\Formatter;
use AmpProject\AmpWP\Option;
use AmpProject\AmpWP\Admin\ReaderThemes;
use AmpProject\AmpWP\Infrastructure\Service;
use AmpProject\AmpWP\Infrastructure\CliCommand;

/**
 * Retrieves and sets AMP plugin options.
 *
 * ## EXAMPLES
 *
 * # Get AMP plugin option.
 * $ wp amp option get theme_support
 * standard
 *
 * # Update AMP plugin option.
 * $ wp amp option update theme_support reader
 * Success: Updated theme_support option.
 *
 * # List AMP plugin options.
 * $ wp amp option list
 * +------------------+----------------+
 * | key              | value          |
 * +------------------+----------------+
 * | theme_support    | standard       |
 * | mobile_redirect  | disabled       |
 * | reader_theme     | legacy         |
 * +------------------+----------------+
 *
 * @since 2.4.0
 * @internal
 */
final class OptionCommand implements Service, CliCommand {

	/**
	 * Options endpoint.
	 *
	 * @var string
	 */
	const OPTIONS_ENDPOINT = '/amp/v1/options';

	/**
	 * Allowed options to be managed via the CLI.
	 *
	 * @var string[]
	 */
	const ALLOWED_OPTIONS = [
		Option::READER_THEME,
		Option::THEME_SUPPORT,
		Option::MOBILE_REDIRECT,
		Option::SANDBOXING_ENABLED,
		Option::SANDBOXING_LEVEL,
		Option::DELETE_DATA_AT_UNINSTALL,
	];

	/**
	 * ReaderThemes instance.
	 *
	 * @var ReaderThemes
	 */
	private $reader_themes;

	/**
	 * Get the name under which to register the CLI command.
	 *
	 * @return string The name under which to register the CLI command.
	 */
	public static function get_command_name() {
		return 'amp option';
	}

	/**
	 * OptionCommand constructor.
	 *
	 * @param ReaderThemes $reader_themes ReaderThemes instance.
	 */
	public function __construct( ReaderThemes $reader_themes ) {
		$this->reader_themes = $reader_themes;
	}

	/**
	 * Gets the value for an option.
	 *
	 * ## OPTIONS
	 *
	 * <key>
	 * : Key for the option.
	 *
	 * [--format=<format>]
	 * : Get value in a particular format.
	 * ---
	 * default: var_export
	 * options:
	 *   - var_export
	 *   - json
	 *   - yaml
	 * ---
	 *
	 * ## EXAMPLES
	 *
	 * # Get option.
	 * $ wp amp option get theme_support
	 * standard
	 *
	 * # Get option in JSON format.
	 * $ wp amp option get theme_support --format=json
	 *
	 * @param array $args       Array of positional arguments.
	 * @param array $assoc_args Associative array of associative arguments.
	 */
	public function get( $args, $assoc_args ) {
		list( $option_name ) = $args;

		$user_cap = $this->check_user_cap();

		if ( $user_cap instanceof WP_Error ) {
			WP_CLI::error( $user_cap->get_error_message( 'amp_rest_cannot_manage_options' ) . PHP_EOL . WP_CLI::colorize( '%y' . $user_cap->get_error_message( 'amp_rest_cannot_manage_options_help' ) . '%n' ) );
		}

		$options = $this->get_options();

		if ( $options instanceof WP_Error ) {
			/* translators: %s: error message */
			WP_CLI::error( sprintf( __( 'Could not retrieve options: %s', 'amp' ), $options->get_error_message() ) );
		}

		if ( ! isset( $options[ $option_name ] ) ) {
			/* translators: %s: option name */
			WP_CLI::error( sprintf( __( 'Could not get "%s" option. Does it exist?', 'amp' ), $option_name ) );
		}

		WP_CLI::print_value( $options[ $option_name ], $assoc_args );
	}

	/**
	 * Updates an option value.
	 *
	 * ## OPTIONS
	 *
	 * <key>
	 * : The name of the option to update.
	 *
	 * <value>
	 * : The new value.
	 *
	 * ## EXAMPLES
	 *
	 * # Update plugin option.
	 * $ wp amp option update theme_support reader
	 * Success: Updated theme_support option.
	 *
	 * @alias set
	 *
	 * @param array $args       Array of positional arguments.
	 * @param array $assoc_args Associative array of associative arguments.
	 */
	public function update( $args, $assoc_args ) {
		list( $option_name, $option_value ) = $args;

		$user_cap = $this->check_user_cap();

		if ( $user_cap instanceof WP_Error ) {
			WP_CLI::error( $user_cap->get_error_message( 'amp_rest_cannot_manage_options' ) . PHP_EOL . WP_CLI::colorize( '%y' . $user_cap->get_error_message( 'amp_rest_cannot_manage_options_help' ) . '%n' ) );
		}

		if ( ! in_array( $option_name, self::ALLOWED_OPTIONS, true ) ) {
			/* translators: %1$s: option name, %2$s: list of allowed options */
			WP_CLI::error( sprintf( __( 'The option "%1$s" is not among the following options that can currently be managed via CLI: %2$s', 'amp' ), $option_name, implode( ', ', self::ALLOWED_OPTIONS ) ) );
		}

		// Update type for some options.
		if ( Option::SANDBOXING_LEVEL === $option_name ) {
			$option_value = (int) $option_value;
		}

		$update = $this->update_option( $option_name, $option_value );

		if ( $update instanceof WP_Error ) {
			/* translators: %1$s: option name, %2$s: error message */
			WP_CLI::error( sprintf( __( 'Could not update "%1$s" option: %2$s', 'amp' ), $option_name, $update->get_error_message() ) );
		}

		/* translators: %s: option name */
		WP_CLI::success( sprintf( __( 'Updated "%s" option.', 'amp' ), $option_name ) );
	}

	/**
	 * List plugin options.
	 *
	 * ## OPTIONS
	 *
	 * [--format=<format>]
	 * : The serialization format for the value.
	 * ---
	 * default: table
	 * options:
	 *   - table
	 *   - json
	 *   - csv
	 *   - count
	 *   - yaml
	 * ---
	 *
	 * ## EXAMPLES
	 *
	 * # List plugin options.
	 * $ wp amp option list
	 * +--------------------------+--------------+
	 * | option_name              | option_value |
	 * +--------------------------+--------------+
	 * | reader_theme             | legacy       |
	 * | theme_support            | reader       |
	 * | delete_data_at_uninstall | 1            |
	 * +--------------------------+--------------+
	 *
	 * # List plugin options in JSON format.
	 * $ wp amp option list --format=json
	 * [{"option_name":"reader_theme","option_value":"legacy"},{"option_name":"theme_support","option_value":"reader"},{"option_name":"delete_data_at_uninstall","option_value":"1"}]
	 *
	 * @subcommand list
	 *
	 * @param array $args       Array of positional arguments.
	 * @param array $assoc_args Associative array of associative arguments.
	 */
	public function list_( $args, $assoc_args ) {
		$user_cap = $this->check_user_cap();

		if ( $user_cap instanceof WP_Error ) {
			WP_CLI::error( $user_cap->get_error_message( 'amp_rest_cannot_manage_options' ) . PHP_EOL . WP_CLI::colorize( '%y' . $user_cap->get_error_message( 'amp_rest_cannot_manage_options_help' ) . '%n' ) );
		}

		$options = $this->get_options();

		if ( $options instanceof WP_Error ) {
			/* translators: %s: error message */
			WP_CLI::error( sprintf( __( 'Could not retrieve options: %s', 'amp' ), $options->get_error_message() ) );
		}

		$formatter = new Formatter(
			$assoc_args,
			[
				'option_name',
				'option_value',
			]
		);

		$formatter->display_items(
			array_map(
				static function ( $option_name ) use ( $options ) {
					return [
						'option_name'  => $option_name,
						'option_value' => $options[ $option_name ],
					];
				},
				self::ALLOWED_OPTIONS
			)
		);

		if ( ! WP_CLI\Utils\isPiped() ) {
			WP_CLI::line( '' );

			WP_CLI::line(
				sprintf(
					/* translators: %s: wp option get amp-options command */
					__( '* Only the above listed options can currently be updated via the CLI. To list all options, use the %s command.', 'amp' ),
					WP_CLI::colorize( '%Ywp option get amp-options%n' )
				)
			);

			WP_CLI::line(
				sprintf(
					/* translators: %s: AMP plugin GitHub issues URL */
					__( '* Please raise a feature request at %s to request a new option to be managed via the CLI.', 'amp' ),
					WP_CLI::colorize( '%Bhttps://github.com/ampproject/amp-wp/issues%n' )
				)
			);
		}
	}

	/**
	 * List reader themes.
	 *
	 * ## OPTIONS
	 *
	 * [--format=<format>]
	 * : Get value in a particular format.
	 * ---
	 * default: json
	 * options:
	 *   - var_export
	 *   - json
	 *   - yaml
	 * ---
	 *
	 * ## EXAMPLES
	 *
	 * # List reader themes.
	 * $ wp amp option list-reader-themes
	 * ["twentytwenty","twentytwentyone","legacy"]
	 *
	 * @alias get-reader-themes
	 * @subcommand list-reader-themes
	 *
	 * @param array $args       Array of positional arguments.
	 * @param array $assoc_args Associative array of associative arguments.
	 */
	public function list_reader_themes( $args, $assoc_args ) {
		$user_cap = $this->check_user_cap();

		if ( $user_cap instanceof WP_Error ) {
			WP_CLI::error( $user_cap->get_error_message( 'amp_rest_cannot_manage_options' ) . PHP_EOL . WP_CLI::colorize( '%y' . $user_cap->get_error_message( 'amp_rest_cannot_manage_options_help' ) . '%n' ) );
		}

		WP_CLI::print_value( wp_list_pluck( $this->reader_themes->get_themes(), 'slug' ), $assoc_args );
	}

	/**
	 * Check if the user is set up to use the REST API.
	 *
	 * @return true|WP_Error True if the request has permission; WP_Error object otherwise.
	 */
	private function check_user_cap() {
		if ( ! current_user_can( 'manage_options' ) ) {
			$cap_error = new WP_Error(
				'amp_rest_cannot_manage_options',
				__( 'Sorry, you are not allowed to manage options for the AMP plugin for WordPress.', 'amp' )
			);

			$cap_error->add(
				'amp_rest_cannot_manage_options_help',
				__( 'Try using --user=<id|login|email> to set the user context or set it in wp-cli.yml.', 'amp' )
			);

			return $cap_error;
		}

		return true;
	}

	/**
	 * Get the options.
	 *
	 * @return WP_Error|mixed WP_Error on failure, response data on success.
	 */
	private function get_options() {
		$response = $this->do_request( 'GET', self::OPTIONS_ENDPOINT, [] );

		if ( $response->as_error() ) {
			return $response->as_error();
		}

		return $response->get_data();
	}

	/**
	 * Update an option.
	 *
	 * @param string $option_name  Option name.
	 * @param string $option_value Option value.
	 *
	 * @return WP_Error|mixed WP_Error on failure, response data on success.
	 */
	private function update_option( $option_name, $option_value ) {
		$response = $this->do_request(
			'POST',
			self::OPTIONS_ENDPOINT,
			[
				$option_name => $option_value,
			]
		);

		if ( $response->as_error() ) {
			return $response->as_error();
		}

		return $response->get_data();
	}

	/**
	 * Do a REST Request
	 *
	 * @param string $method HTTP method.
	 * @param string $route REST route.
	 * @param array  $assoc_args Associative args.
	 *
	 * @return WP_REST_Response Response object.
	 */
	private function do_request( $method, $route, $assoc_args ) {
		$request = new WP_REST_Request( $method, $route );

		if ( in_array( $method, [ 'POST', 'PUT' ] ) ) {
			$request->set_body_params( $assoc_args );
		} else {
			foreach ( $assoc_args as $key => $value ) {
				$request->set_param( $key, $value );
			}
		}

		return rest_do_request( $request );
	}
}
PK.3Yp�e\B&B&)bunyad-amp/src/Cli/TransformerCommand.php<?php
/**
 * Class TransformerCommand.
 *
 * Commands that deal with the transformers registered with the AMP optimizer.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Cli;

use AmpProject\AmpWP\Infrastructure\CliCommand;
use AmpProject\AmpWP\Infrastructure\Service;
use AmpProject\Optimizer\Configuration;
use AmpProject\Optimizer\Exception\UnknownConfigurationClass;
use WP_CLI;

/**
 * Commands that deal with the transformers registered with the AMP optimizer. (EXPERIMENTAL)
 *
 * Note: The Optimizer CLI commands are to be considered experimental, as
 * the output they produce is currently not guaranteed to be consistent
 * with the corresponding output from the web server code path.
 *
 * @since 2.1.0
 * @internal
 */
final class TransformerCommand implements Service, CliCommand {

	/**
	 * @var Configuration
	 */
	private $configuration;

	/**
	 * Get the name under which to register the CLI command.
	 *
	 * @return string The name under which to register the CLI command.
	 */
	public static function get_command_name() {
		return 'amp optimizer transformer';
	}

	/**
	 * TransformerCommand constructor.
	 *
	 * @param Configuration $configuration Configuration object instance to use.
	 */
	public function __construct( Configuration $configuration ) {
		$this->configuration = $configuration;
	}

	/**
	 * List the transformers registered with the AMP Optimizer. (EXPERIMENTAL)
	 *
	 * Note: The Optimizer CLI commands are to be considered experimental, as
	 * the output they produce is currently not guaranteed to be consistent
	 * with the corresponding output from the web server code path.
	 *
	 * ## OPTIONS
	 *
	 * [--<field>=<value>]
	 * : Only list the transformers where <field> equals the requested <value>.
	 *
	 * [--fields=<fields>]
	 * : Limit the output to specific fields. Defaults to all fields.
	 *
	 * [--field=<field>]
	 * : Prints the value of a single field for each transformer.
	 *
	 * [--format=<format>]
	 * : Render output in a particular format.
	 * ---
	 * default: table
	 * options:
	 *   - count
	 *   - csv
	 *   - json
	 *   - table
	 *   - yaml
	 * ---
	 *
	 * ## EXAMPLES
	 *
	 * # Show a list of all transformers that were added by the AMP for WordPress plugin:
	 * $ wp amp optimizer transformer list --source=plugin
	 * +----------------------+--------+
	 * | transformer          | source |
	 * +----------------------+--------+
	 * | AmpSchemaOrgMetadata | plugin |
	 * | DetermineHeroImages  | plugin |
	 * +----------------------+--------+
	 *
	 * @subcommand list
	 *
	 * @param array $args       Array of positional arguments.
	 * @param array $assoc_args Associative array of associative arguments.
	 * @throws WP_CLI\ExitException If the requested file could not be read.
	 */
	public function list_( $args, $assoc_args ) {
		$default_fields = [
			'transformer',
			'source',
		];

		$defaults = [
			'fields' => implode( ',', $default_fields ),
			'format' => 'table',
		];

		$assoc_args = array_merge( $defaults, $assoc_args );

		$transformers = array_map(
			function ( $transformer_class ) {
				return [
					'transformer' => $this->get_transformer_name( $transformer_class ),
					'source'      => $this->get_transformer_source( $transformer_class ),
				];
			},
			$this->configuration->get( Configuration::KEY_TRANSFORMERS )
		);

		$transformers = $this->filter_entries( $transformers, $default_fields, $assoc_args );

		if ( 'count' === $assoc_args['format'] ) {
			WP_CLI::log( (string) count( $transformers ) );

			return;
		}

		if ( empty( $transformers ) ) {
			WP_CLI::error( 'No matching transformers found.' );
		}

		$formatter = new WP_CLI\Formatter( $assoc_args, $default_fields );
		$formatter->display_items( $transformers );
	}

	/**
	 * List the configuration of a given transformer. (EXPERIMENTAL)
	 *
	 * Note: The Optimizer CLI commands are to be considered experimental, as
	 * the output they produce is currently not guaranteed to be consistent
	 * with the corresponding output from the web server code path.
	 *
	 * ## OPTIONS
	 *
	 * <transformer>
	 * : Name of the transformer to display the configuration for.
	 *
	 * [--<field>=<value>]
	 * : Only list the config entries where <field> equals the requested <value>.
	 *
	 * [--fields=<fields>]
	 * : Limit the output to specific fields. Defaults to all fields.
	 *
	 * [--field=<field>]
	 * : Prints the value of a single field for each config entry.
	 *
	 * [--format=<format>]
	 * : Render output in a particular format.
	 * ---
	 * default: table
	 * options:
	 *   - count
	 *   - csv
	 *   - json
	 *   - table
	 *   - yaml
	 * ---
	 *
	 * ## EXAMPLES
	 *
	 * # Check the current configuration of the RewriteAmpUrls transformer.
	 * $ wp amp optimizer transformer config RewriteAmpUrls
	 * +-------------------+----------------------------+
	 * | key               | value                      |
	 * +-------------------+----------------------------+
	 * | ampRuntimeVersion |                            |
	 * | ampUrlPrefix      | https://cdn.ampproject.org |
	 * | esmModulesEnabled | true                       |
	 * | geoApiUrl         |                            |
	 * | lts               | false                      |
	 * | rtv               | false                      |
	 * +-------------------+----------------------------+
	 *
	 * # Fetch the attribute that is added to store a backup of inlined styles.
	 * $ wp amp optimizer transformer config OptimizeHeroImages --key=inlineStyleBackupAttribute --field=value
	 * data-amp-original-style
	 *
	 * # Render the configuration of the AmpRuntimeCss transformer as a JSON array.
	 * $ wp amp optimizer transformer config AmpRuntimeCss --format=json
	 * {"canary":false,"styles":"","version":""}
	 *
	 * @param array $args       Array of positional arguments.
	 * @param array $assoc_args Associative array of associative arguments.
	 * @throws WP_CLI\ExitException If the requested file could not be read.
	 */
	public function config( $args, $assoc_args ) {
		$transformer       = array_shift( $args );
		$transformer_class = $this->deduce_transformer_class( $transformer );

		if ( false === $transformer_class ) {
			WP_CLI::error( "Unknown transformer: {$transformer}." );
		}

		$default_fields = [
			'key',
			'value',
		];

		$defaults = [
			'fields' => implode( ',', $default_fields ),
			'format' => 'table',
		];

		$assoc_args = array_merge( $defaults, $assoc_args );

		try {
			$config_array = $this->configuration->getTransformerConfiguration( $transformer_class )->toArray();
		} catch ( UnknownConfigurationClass $exception ) {
			WP_CLI::error( $exception->getMessage() );

			return;
		}

		$config_entries = [];
		foreach ( $config_array as $key => $value ) {
			if ( is_bool( $value ) && in_array( $assoc_args['format'], [ 'table', 'csv' ], true ) ) {
				$value = $value ? 'true' : 'false';
			}
			$config_entries[] = compact( 'key', 'value' );
		}

		$config_entries = $this->filter_entries( $config_entries, $default_fields, $assoc_args );

		if ( 'count' === $assoc_args['format'] ) {
			WP_CLI::log( (string) count( $config_entries ) );

			return;
		}

		if ( empty( $config_entries ) ) {
			WP_CLI::error( 'No matching config entries found.' );
		}

		if ( 'json' === $assoc_args['format'] ) {
			// Flatten the entries again for producing the JSON output that the spec tests understand.
			$json_array = [];
			foreach ( $config_entries as $config_entry ) {
				$json_array[ $config_entry['key'] ] = $config_entry['value'];
			}

			WP_CLI::log( wp_json_encode( $json_array ) );
			return;
		}

		$formatter = new WP_CLI\Formatter( $assoc_args, $default_fields );
		$formatter->display_items( $config_entries );
	}

	/**
	 * Filters the entries of an associative array based on a provided filter key.
	 *
	 * @param array $entries    Associative array to filter.
	 * @param array $fields     Array of known fields.
	 * @param array $assoc_args Filters to apply.
	 *
	 * @return array
	 */
	private function filter_entries( $entries, $fields, $assoc_args ) {
		$result = [];

		foreach ( $entries as $entry ) {
			foreach ( $fields as $field ) {
				if (
					array_key_exists( $field, $assoc_args )
					&&
					$entry[ $field ] !== $assoc_args[ $field ]
				) {
					continue 2;
				}
			}

			$result[] = $entry;
		}

		return $result;
	}

	/**
	 * Deduce the transformer class from a transformer name.
	 *
	 * @param string $transformer Transformer name to get the class for.
	 * @return string|false Class of the transformer, or false if none found.
	 */
	private function deduce_transformer_class( $transformer ) {
		$transformer_classes = $this->configuration->get( Configuration::KEY_TRANSFORMERS );

		foreach ( $transformer_classes as $transformer_class ) {
			if ( $transformer === $this->get_transformer_name( $transformer_class ) ) {
				return (string) $transformer_class;
			}
		}

		return false;
	}

	/**
	 * Get the name of a transformer from its class.
	 *
	 * @param string $transformer_class Transformer class to get the name for.
	 * @return string Name of the transformer.
	 */
	private function get_transformer_name( $transformer_class ) {
		$name_parts = explode( '\\', $transformer_class );

		return (string) array_pop( $name_parts );
	}

	/**
	 * Get the source of a transformer.
	 *
	 * @param string $transformer_class Class of the transformer to get the source for.
	 * @return string Source of the transformer. Will be one of 'toolbox', 'plugin', 'third-party'.
	 */
	private function get_transformer_source( $transformer_class ) {
		if ( 0 === strpos( $transformer_class, 'AmpProject\\Optimizer\\Transformer\\' ) ) {
			return 'toolbox';
		}

		if ( 0 === strpos( $transformer_class, 'AmpProject\\AmpWP\\Optimizer\\Transformer\\' ) ) {
			return 'plugin';
		}

		return 'third-party';
	}
}
PK.3Yc<��.�.(bunyad-amp/src/Cli/ValidationCommand.php<?php
/**
 * Class ValidationCommand.
 *
 * Commands that deal with validation of AMP markup.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Cli;

use AMP_Validated_URL_Post_Type;
use AMP_Validation_Error_Taxonomy;
use AMP_Validation_Manager;
use AmpProject\AmpWP\Infrastructure\CliCommand;
use AmpProject\AmpWP\Infrastructure\Service;
use AmpProject\AmpWP\Validation\ScannableURLProvider;
use AmpProject\AmpWP\Validation\URLValidationProvider;
use cli\progress\Bar;
use Exception;
use WP_CLI;
use WP_CLI\Utils;
use WP_Error;

/**
 * Crawls the site for validation errors or resets the stored validation errors.
 *
 * @since 1.0
 * @since 1.3.0 Renamed subcommands.
 * @since 2.1.0 Refactored into service-based architecture.
 * @internal
 */
final class ValidationCommand implements Service, CliCommand {

	/**
	 * The WP-CLI flag to force validation.
	 *
	 * By default, the WP-CLI command does not validate templates that the user has opted-out of.
	 * For example, by unchecking 'Categories' in 'AMP Settings' > 'Supported Templates'.
	 * But with this flag, validation will ignore these options.
	 *
	 * @since 2.2 This is no longer used.
	 * @var string
	 */
	const FLAG_NAME_FORCE_VALIDATION = 'force';

	/**
	 * The WP-CLI argument to validate based on certain conditionals
	 *
	 * For example, --include=is_tag,is_author
	 * Normally, this script will validate all of the templates that don't have AMP disabled.
	 * But this allows validating only specific templates.
	 *
	 * @var string
	 */
	const INCLUDE_ARGUMENT = 'include';

	/**
	 * The WP-CLI argument for the maximum URLs to validate for each type.
	 *
	 * If this is passed in the command,
	 * it overrides the value of $this->maximum_urls_to_validate_for_each_type.
	 *
	 * @var string
	 */
	const LIMIT_URLS_ARGUMENT = 'limit';

	/**
	 * The WP CLI progress bar.
	 *
	 * @see https://make.wordpress.org/cli/handbook/internal-api/wp-cli-utils-make-progress-bar/
	 * @var \cli\progress\Bar|\WP_CLI\NoOp
	 */
	public $wp_cli_progress;

	/**
	 * URLValidationProvider instance.
	 *
	 * @var URLValidationProvider
	 */
	private $url_validation_provider;

	/**
	 * ScannableURLProvider instance.
	 *
	 * @var ScannableURLProvider
	 */
	private $scannable_url_provider;

	/**
	 * Associative args passed to the command.
	 *
	 * @var array
	 */
	private $assoc_args;

	/**
	 * Get the name under which to register the CLI command.
	 *
	 * @return string The name under which to register the CLI command.
	 */
	public static function get_command_name() {
		return 'amp validation';
	}

	/**
	 * Construct.
	 *
	 * @param URLValidationProvider $url_validation_provider URL validation provider.
	 * @param ScannableURLProvider  $scannable_url_provider  Scannable URL provider.
	 */
	public function __construct( URLValidationProvider $url_validation_provider, ScannableURLProvider $scannable_url_provider ) {
		$this->url_validation_provider = $url_validation_provider;
		$this->scannable_url_provider  = $scannable_url_provider;
	}

	/**
	 * Crawl the entire site to get AMP validation results.
	 *
	 * ## OPTIONS
	 *
	 * [--limit=<count>]
	 * : The maximum number of URLs to validate for each template and content type.
	 * ---
	 * default: 100
	 * ---
	 *
	 * [--include=<templates>]
	 * : Only validates a URL if one of the conditionals is true.
	 *
	 * [--force]
	 * : (Obsolete) Force validation of URLs even if their associated templates or object types do not have AMP enabled.
	 *
	 * ## EXAMPLES
	 *
	 *     wp amp validation run --include=is_author,is_tag
	 *
	 * @param array $args       Positional args.
	 * @param array $assoc_args Associative args.
	 * @throws Exception If an error happens.
	 */
	public function run( /** @noinspection PhpUnusedParameterInspection */ $args, $assoc_args ) {
		$this->assoc_args = $assoc_args;

		if ( Utils\get_flag_value( $this->assoc_args, self::FLAG_NAME_FORCE_VALIDATION, false ) ) {
			WP_CLI::warning( sprintf( 'The --%s argument is obsolete.', self::FLAG_NAME_FORCE_VALIDATION ) );
		}

		$include_conditionals = Utils\get_flag_value( $this->assoc_args, self::INCLUDE_ARGUMENT, [] );
		if ( is_string( $include_conditionals ) ) {
			$include_conditionals = explode( ',', $include_conditionals );
		}
		$this->scannable_url_provider->set_include_conditionals( $include_conditionals );

		$limit_per_type = Utils\get_flag_value( $this->assoc_args, self::LIMIT_URLS_ARGUMENT, 100 );
		$this->scannable_url_provider->set_limit_per_type( $limit_per_type );

		$urls = $this->scannable_url_provider->get_urls();

		$number_urls_to_crawl = count( $urls );
		if ( ! $number_urls_to_crawl ) {
			if ( ! empty( Utils\get_flag_value( $this->assoc_args, self::INCLUDE_ARGUMENT, [] ) ) ) {
				WP_CLI::error(
					sprintf(
						'The templates passed via the --%s argument did not match any URLs. You might try passing different templates to it.',
						self::INCLUDE_ARGUMENT
					)
				);
			} else {
				WP_CLI::error( 'All of your templates might be unchecked in AMP Settings > Supported Templates.' );
			}
		}

		WP_CLI::log( 'Crawling the site for AMP validity.' );

		$this->wp_cli_progress = WP_CLI\Utils\make_progress_bar(
			sprintf( 'Validating %d URLs...', $number_urls_to_crawl ),
			$number_urls_to_crawl
		);

		$this->validate_urls( $urls );

		$this->wp_cli_progress->finish();

		$key_template_type = 'Template';
		$key_url_count     = 'URL Count';
		$key_validity_rate = 'Validity Rate';

		$table_validation_by_type = [];
		foreach ( $this->url_validation_provider->get_validity_by_type() as $type_name => $validity ) {
			$table_validation_by_type[] = [
				$key_template_type => $type_name,
				$key_url_count     => $validity['total'],
				$key_validity_rate => sprintf( '%d%%', 100.0 * ( $validity['valid'] / $validity['total'] ) ),
			];
		}

		if ( empty( $table_validation_by_type ) ) {
			WP_CLI::error( 'No validation results were obtained from the URLs.' );

			return;
		}

		WP_CLI::success(
			sprintf(
				'%3$d crawled URLs have invalid markup kept out of %2$d total with AMP validation issue(s); %1$d URLs were crawled.',
				$this->url_validation_provider->get_number_validated(),
				$this->url_validation_provider->get_total_errors(),
				$this->url_validation_provider->get_unaccepted_errors()
			)
		);

		// Output a table of validity by template/content type.
		WP_CLI\Utils\format_items(
			'table',
			$table_validation_by_type,
			[ $key_template_type, $key_url_count, $key_validity_rate ]
		);

		$url_more_details = add_query_arg(
			'post_type',
			AMP_Validated_URL_Post_Type::POST_TYPE_SLUG,
			admin_url( 'edit.php' )
		);
		WP_CLI::line( sprintf( 'For more details, please see: %s', $url_more_details ) );
	}

	/**
	 * Validates the URLs.
	 *
	 * @param array $urls URLs to validate, or null to get URLs from the scannable URL provider.
	 */
	private function validate_urls( $urls = [] ) {
		if ( ! $urls ) {
			$urls = $this->scannable_url_provider->get_urls();
		}

		foreach ( $urls as $url ) {
			$validity = $this->url_validation_provider->get_url_validation( $url['url'], $url['type'] );

			if ( $this->wp_cli_progress instanceof Bar ) {
				$this->wp_cli_progress->tick();
			}

			if ( is_wp_error( $validity ) ) {
				WP_CLI::warning(
					sprintf(
						'Validate URL error (%1$s): %2$s URL: %3$s',
						$validity->get_error_code(),
						$validity->get_error_message(),
						$url['url']
					)
				);
			}
		}
	}

	/**
	 * Reset all validation data on a site.
	 *
	 * This deletes all amp_validated_url posts and all amp_validation_error terms.
	 *
	 * ## OPTIONS
	 *
	 * [--yes]
	 * : Proceed to empty the site validation data without a confirmation prompt.
	 *
	 * ## EXAMPLES
	 *
	 *     wp amp validation reset --yes
	 *
	 * @param array $args       Positional args. Unused.
	 * @param array $assoc_args Associative args.
	 * @throws Exception If an error happens.
	 */
	public function reset( /** @noinspection PhpUnusedParameterInspection */ $args, $assoc_args ) {
		global $wpdb;
		WP_CLI::confirm(
			'Are you sure you want to empty all amp_validated_url posts and amp_validation_error taxonomy terms?',
			$assoc_args
		);

		// Delete all posts.
		$count = $wpdb->get_var( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
			$wpdb->prepare(
				"SELECT COUNT(*) FROM $wpdb->posts WHERE post_type = %s",
				AMP_Validated_URL_Post_Type::POST_TYPE_SLUG
			)
		);
		$query = $wpdb->prepare(
			"SELECT ID FROM $wpdb->posts WHERE post_type = %s",
			AMP_Validated_URL_Post_Type::POST_TYPE_SLUG
		);
		$posts = new WP_CLI\Iterators\Query( $query, 10000 );

		$progress = WP_CLI\Utils\make_progress_bar(
			sprintf( 'Deleting %d amp_validated_url posts...', $count ),
			$count
		);

		foreach ( $posts as $post ) {
			wp_delete_post( $post->ID, true );
			$progress->tick();
		}

		$progress->finish();

		// Delete all terms. Note that many terms should get deleted when their post counts go to zero above.
		$count = $wpdb->get_var( // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching
			$wpdb->prepare(
				"SELECT COUNT( * ) FROM $wpdb->term_taxonomy WHERE taxonomy = %s",
				AMP_Validation_Error_Taxonomy::TAXONOMY_SLUG
			)
		);
		$query = $wpdb->prepare(
			"SELECT term_id FROM $wpdb->term_taxonomy WHERE taxonomy = %s",
			AMP_Validation_Error_Taxonomy::TAXONOMY_SLUG
		);
		$terms = new WP_CLI\Iterators\Query( $query, 10000 );

		$progress = WP_CLI\Utils\make_progress_bar(
			sprintf( 'Deleting %d amp_taxonomy_error terms...', $count ),
			$count
		);

		foreach ( $terms as $term ) {
			wp_delete_term( $term->term_id, AMP_Validation_Error_Taxonomy::TAXONOMY_SLUG );
			$progress->tick();
		}

		$progress->finish();

		WP_CLI::success( 'All AMP validation data has been removed.' );
	}

	/**
	 * Generate the authorization nonce needed for a validate request.
	 *
	 * @subcommand generate-nonce
	 * @alias      nonce
	 */
	public function generate_nonce() {
		WP_CLI::line( AMP_Validation_Manager::get_amp_validate_nonce() );
	}

	/**
	 * Get the validation results for a given URL.
	 *
	 * The results are returned in JSON format.
	 *
	 * ## OPTIONS
	 *
	 * <url>
	 * : The URL to check. The host name need not be included. The URL must be local to this WordPress install.
	 *
	 * ## EXAMPLES
	 *
	 *     wp amp validation check-url /about/
	 *     wp amp validation check-url $( wp option get home )/?p=1
	 *
	 * @subcommand check-url
	 * @alias      check
	 *
	 * @param array $args Args.
	 * @throws WP_CLI\ExitException If the home URL is missing a scheme or host.
	 * @throws WP_CLI\ExitException If the supplied URL does not belong to the current site.
	 * @throws WP_CLI\ExitException If an error occurred during the validation.
	 */
	public function check_url( $args ) {
		list( $url ) = $args;

		$host            = wp_parse_url( $url, PHP_URL_HOST );
		$parsed_home_url = wp_parse_url( home_url( '/' ) );

		if ( ! isset( $parsed_home_url['host'], $parsed_home_url['scheme'] ) ) {
			WP_CLI::error(
				sprintf(
					'The home URL (%s) is missing a scheme and host.',
					home_url( '/' )
				)
			);
		}

		if ( $host && $host !== $parsed_home_url['host'] ) {
			WP_CLI::error(
				sprintf(
					'Supplied URL must be for this WordPress install. Expected host "%1$s" but provided is "%2$s".',
					$parsed_home_url['host'],
					$host
				)
			);
		}

		if ( ! $host ) {
			$origin = $parsed_home_url['scheme'] . '://' . $parsed_home_url['host'];
			if ( ! empty( $parsed_home_url['port'] ) ) {
				$origin .= ':' . $parsed_home_url['port'];
			}
			$url = $origin . '/' . ltrim( $url, '/' );
		}

		$result = AMP_Validation_Manager::validate_url( $url );
		if ( $result instanceof WP_Error ) {
			WP_CLI::error( $result->get_error_message() ? $result : $result->get_error_code() );
		}

		WP_CLI::line( wp_json_encode( $result, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES ) );
	}
}
PK.3Y���***+bunyad-amp/src/Component/CaptionedSlide.php<?php
/**
 * Class CaptionedSlide
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Component;

use DOMElement;

/**
 * Class CaptionedSlide
 *
 * @internal
 * @since 1.5.0
 */
final class CaptionedSlide implements HasCaption {

	/**
	 * The slide node, possibly an image.
	 *
	 * @var DOMElement
	 */
	private $slide_element;

	/**
	 * The caption node.
	 *
	 * @var DOMElement
	 */
	private $caption_element;

	/**
	 * Constructs the class.
	 *
	 * @param DOMElement $slide_element   The slide node, possibly an image.
	 * @param DOMElement $caption_element The caption element.
	 */
	public function __construct( DOMElement $slide_element, DOMElement $caption_element ) {
		$this->slide_element   = $slide_element;
		$this->caption_element = $caption_element;
	}

	/**
	 * Gets the caption element.
	 *
	 * @return DOMElement
	 */
	public function get_caption_element() {
		return $this->caption_element;
	}

	/**
	 * Gets the slide element.
	 *
	 * @return DOMElement
	 */
	public function get_slide_element() {
		return $this->slide_element;
	}
}
PK.3Yz�nD99%bunyad-amp/src/Component/Carousel.php<?php
/**
 * Class Carousel.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Component;

use AMP_DOM_Utils;
use AmpProject\AmpWP\Dom\ElementList;
use AmpProject\Dom\Document;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag;
use DOMElement;

/**
 * Class Carousel
 *
 * Gets the markup for an <amp-carousel>.
 *
 * @internal
 * @since 1.5.0
 */
final class Carousel {

	/**
	 * Value used for width of amp-carousel.
	 *
	 * @var int
	 */
	const FALLBACK_WIDTH = 600;

	/**
	 * Value used for height of amp-carousel.
	 *
	 * @var int
	 */
	const FALLBACK_HEIGHT = 480;

	/**
	 * An object representation of the DOM.
	 *
	 * @var Document
	 */
	private $dom;

	/**
	 * The slides to add to the carousel, possibly images.
	 *
	 * @var ElementList
	 */
	private $slides;

	/**
	 * Instantiates the class.
	 *
	 * @param Document    $dom    The dom to use to create a carousel.
	 * @param ElementList $slides The slides from which to create a carousel.
	 */
	public function __construct( Document $dom, ElementList $slides ) {
		$this->dom    = $dom;
		$this->slides = $slides;
	}

	/**
	 * Gets the carousel element.
	 *
	 * @return DOMElement An <amp-carousel> with the slides.
	 */
	public function get_dom_element() {
		list( $width, $height ) = $this->get_dimensions();
		$amp_carousel           = AMP_DOM_Utils::create_node(
			$this->dom,
			'amp-carousel',
			[
				'width'  => $width,
				'height' => $height,
				'type'   => 'slides',
				'layout' => 'responsive',
			]
		);

		foreach ( $this->slides as $slide ) {
			$slide_node      = $slide instanceof CaptionedSlide ? $slide->get_slide_element() : $slide;
			$caption_element = $slide instanceof HasCaption ? $slide->get_caption_element() : null;
			$slide_container = AMP_DOM_Utils::create_node(
				$this->dom,
				Tag::FIGURE, // This cannot be a <div> because if the gallery is inside of a <p>, then the DOM will break.
				[ 'class' => 'slide' ]
			);

			// Ensure an image fills the entire <amp-carousel>, so the possible caption looks right.
			if ( $this->is_image_element( $slide_node ) ) {
				$slide_node->setAttribute( 'layout', 'fill' );
				$slide_node->setAttribute( 'object-fit', 'cover' );
			} elseif ( $slide_node->firstChild instanceof DOMElement && $this->is_image_element( $slide_node->firstChild ) ) {
				// If the <amp-img> is wrapped in an <a>.
				$slide_node->firstChild->setAttribute( 'layout', 'fill' );
				$slide_node->firstChild->setAttribute( 'object-fit', 'cover' );
			}

			$slide_container->appendChild( $slide_node );

			// If there's a caption, append it to the slide.
			if ( null !== $caption_element ) {
				// If the caption is not a <figcaption>, wrap it in one.
				if ( Tag::FIGCAPTION !== $caption_element->nodeName ) {
					$caption_content = $caption_element;
					$caption_element = AMP_DOM_Utils::create_node( $this->dom, Tag::FIGCAPTION, [] );
					$caption_element->appendChild( $caption_content );
				}

				$has_caption_class = AMP_DOM_Utils::has_class( $caption_element, 'amp-wp-gallery-caption' );

				/** @var DOMElement $caption_element */
				if ( ! $has_caption_class ) {
					$caption_element->setAttribute( Attribute::CLASS_, 'amp-wp-gallery-caption' );
				}

				$slide_container->appendChild( $caption_element );
			}

			$amp_carousel->appendChild( $slide_container );
		}

		return $amp_carousel;
	}

	/**
	 * Gets the carousel's width and height, based on its elements.
	 *
	 * This will return the width and height of the slide (possibly image) with the widest aspect ratio,
	 * not necessarily that with the biggest absolute width.
	 *
	 * @return array {
	 *     The carousel dimensions.
	 *
	 *     @type int $width  The width of the carousel, at index 0.
	 *     @type int $height The height of the carousel, at index 1.
	 * }
	 */
	private function get_dimensions() {
		if ( 0 === count( $this->slides ) ) {
			return [ self::FALLBACK_WIDTH, self::FALLBACK_HEIGHT ];
		}

		$max_aspect_ratio = 0;
		$carousel_width   = 0;
		$carousel_height  = 0;

		foreach ( $this->slides as $slide ) {
			$slide_node = $slide instanceof CaptionedSlide ? $slide->get_slide_element() : $slide;
			// Account for an <amp-img> that's wrapped in an <a>.
			if ( ! $this->is_image_element( $slide_node ) && $slide_node->firstChild instanceof DOMElement && $this->is_image_element( $slide_node->firstChild ) ) {
				$slide_node = $slide_node->firstChild;
			}

			if ( ! is_numeric( $slide_node->getAttribute( 'width' ) ) || ! is_numeric( $slide_node->getAttribute( 'height' ) ) ) {
				continue;
			}

			$width  = (float) $slide_node->getAttribute( 'width' );
			$height = (float) $slide_node->getAttribute( 'height' );

			if ( empty( $width ) || empty( $height ) ) {
				continue;
			}

			$this_aspect_ratio = $width / $height;
			if ( $this_aspect_ratio > $max_aspect_ratio ) {
				$max_aspect_ratio = $this_aspect_ratio;
				$carousel_width   = $width;
				$carousel_height  = $height;
			}
		}

		if ( empty( $carousel_width ) && empty( $carousel_height ) ) {
			return [ self::FALLBACK_WIDTH, self::FALLBACK_HEIGHT ];
		}

		return [ $carousel_width, $carousel_height ];
	}

	/**
	 * Determine whether an element is an image (either an <amp-img> or an <img>).
	 *
	 * @param DOMElement $element Element.
	 * @return bool If it is an image.
	 */
	private function is_image_element( DOMElement $element ) {
		return 'amp-img' === $element->tagName || 'img' === $element->tagName;
	}
}
PK.3Y��I8AA'bunyad-amp/src/Component/HasCaption.php<?php
/**
 * Interface HasCaption
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Component;

use DOMElement;

/**
 * Interface HasCaption
 *
 * @internal
 * @since 1.5.0
 */
interface HasCaption {

	/**
	 * Gets the caption node.
	 *
	 * @return DOMElement
	 */
	public function get_caption_element();
}
PK.3Y{��{\\(bunyad-amp/src/DevTools/BlockSources.php<?php
/**
 * Class BlockSources
 *
 * Captures the themes and plugins responsible for dynamically registered editor blocks.
 *
 * @since 2.1
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\DevTools;

use AmpProject\AmpWP\Infrastructure\Conditional;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;
use AmpProject\AmpWP\PluginRegistry;

/**
 * BlockSources class.
 *
 * @since 2.1
 * @internal
 */
final class BlockSources implements Conditional, Service, Registerable {

	/**
	 * Key of the cached block source data.
	 *
	 * @var string
	 */
	const CACHE_KEY = 'amp_block_sources';

	/**
	 * The amount of time to store the block source data in cache.
	 *
	 * @var int
	 */
	const CACHE_TIMEOUT = DAY_IN_SECONDS;

	/**
	 * Block source data.
	 *
	 * @var array|null
	 */
	private $block_sources;

	/**
	 * Plugin registry instance.
	 *
	 * @var PluginRegistry
	 */
	private $plugin_registry;

	/**
	 * Likely culprit detector instance.
	 *
	 * @var LikelyCulpritDetector
	 */
	private $likely_culprit_detector;

	/**
	 * Check whether the conditional object is currently needed.
	 *
	 * @return bool Whether the conditional object is needed.
	 */
	public static function is_needed() {
		// The register_block_type_args filter, which this feature depends on, was introduced in WP 5.5.
		if ( version_compare( get_bloginfo( 'version' ), '5.5', '<' ) ) {
			return false;
		}

		return is_admin() || wp_doing_ajax() || wp_doing_cron() || ( defined( 'REST_REQUEST' ) && REST_REQUEST );
	}

	/**
	 * Class constructor.
	 *
	 * @param PluginRegistry        $plugin_registry Plugin registry instance.
	 * @param LikelyCulpritDetector $likely_culprit_detector Likely culprit detector instance.
	 */
	public function __construct( PluginRegistry $plugin_registry, LikelyCulpritDetector $likely_culprit_detector ) {
		$this->plugin_registry         = $plugin_registry;
		$this->likely_culprit_detector = $likely_culprit_detector;
	}

	/**
	 * Runs on instantiation.
	 */
	public function register() {
		if ( empty( $this->get_block_sources() ) ) {
			add_filter( 'register_block_type_args', [ $this, 'capture_block_type_source' ] );

			// All blocks should be registered well before admin_enqueue_scripts.
			add_action( 'admin_enqueue_scripts', [ $this, 'cache_block_sources' ], PHP_INT_MAX );
		}

		add_action( 'activated_plugin', [ $this, 'clear_block_sources_cache' ] );
		add_action( 'after_switch_theme', [ $this, 'clear_block_sources_cache' ] );
		add_action( 'upgrader_process_complete', [ $this, 'clear_block_sources_cache' ] );
	}

	/**
	 * Registers the google font style.
	 *
	 * @param array $args Array of arguments for registering a block type.
	 * @return array Filtered block type args.
	 */
	public function capture_block_type_source( $args ) {
		if ( isset( $this->get_block_sources()[ $args['name'] ] ) ) {
			return $args;
		}

		$likely_culprit = $this->likely_culprit_detector->analyze_backtrace();

		if ( in_array( $likely_culprit[ FileReflection::SOURCE_TYPE ], [ FileReflection::TYPE_PLUGIN, FileReflection::TYPE_MU_PLUGIN ], true ) ) {
			$plugin = $this->plugin_registry->get_plugin_from_slug(
				$likely_culprit[ FileReflection::SOURCE_NAME ],
				FileReflection::TYPE_MU_PLUGIN === $likely_culprit[ FileReflection::SOURCE_TYPE ]
			);

			$likely_culprit['title'] = isset( $plugin['data']['Title'] ) ? $plugin['data']['Title'] : $likely_culprit[ FileReflection::SOURCE_NAME ];
		} elseif ( FileReflection::TYPE_THEME === $likely_culprit[ FileReflection::SOURCE_TYPE ] ) {
			$theme                   = wp_get_theme( $likely_culprit['name'] );
			$likely_culprit['title'] = $theme->get( 'Name' ) ?: $likely_culprit[ FileReflection::SOURCE_NAME ];
		} else {
			$likely_culprit['title'] = __( 'WordPress core', 'amp' );
		}

		$this->block_sources[ $args['name'] ] = $likely_culprit;

		return $args;
	}

	/**
	 * Saves the block source data to cache.
	 */
	public function cache_block_sources() {
		set_transient( __CLASS__ . self::CACHE_KEY, $this->block_sources, self::CACHE_TIMEOUT );
	}

	/**
	 * Clears the cached block source data.
	 */
	public function clear_block_sources_cache() {
		delete_transient( __CLASS__ . self::CACHE_KEY );
	}

	/**
	 * Retrieves block source data from cache.
	 */
	private function set_block_sources_from_cache() {
		$from_cache = get_transient( __CLASS__ . self::CACHE_KEY );

		$this->block_sources = is_array( $from_cache ) ? $from_cache : [];
	}

	/**
	 * Retrieves block source data.
	 *
	 * @return array
	 */
	public function get_block_sources() {
		if ( is_null( $this->block_sources ) ) {
			$this->set_block_sources_from_cache();
		}

		return $this->block_sources;
	}
}
PK.3Y�X.bunyad-amp/src/DevTools/CallbackReflection.php<?php
/**
 * Class CallbackReflection.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\DevTools;

use AMP_Validation_Callback_Wrapper;
use AmpProject\AmpWP\Infrastructure\Service;
use Exception;
use ReflectionFunction;
use ReflectionMethod;
use Reflector;

/**
 * Reflect on a file to deduce its type of source (plugin, theme, core).
 *
 * @package AmpProject\AmpWP
 * @since 2.0.2
 * @internal
 */
final class CallbackReflection implements Service {

	/**
	 * File reflection instance to use.
	 *
	 * @var FileReflection
	 */
	private $file_reflection;

	/**
	 * CallbackReflection constructor.
	 *
	 * @param FileReflection $file_reflection File reflector to use.
	 */
	public function __construct( FileReflection $file_reflection ) {
		$this->file_reflection = $file_reflection;
	}

	/**
	 * Get the underlying callback in case it was wrapped by AMP_Validation_Callback_Wrapper.
	 *
	 * @since 2.2.1
	 *
	 * @param callable $callback Callback.
	 * @return callable Original callback.
	 */
	public function get_unwrapped_callback( $callback ) {
		while ( $callback ) {
			if ( $callback instanceof AMP_Validation_Callback_Wrapper ) {
				$callback = $callback->get_callback_function();
			} elseif (
				is_array( $callback )
				&&
				is_callable( $callback )
				&&
				isset( $callback[0], $callback[1] )
				&&
				$callback[0] instanceof AMP_Validation_Callback_Wrapper
				&&
				'invoke_with_first_ref_arg' === $callback[1]
			) {
				$callback = $callback[0]->get_callback_function();
			} else {
				break;
			}
		}
		return $callback;
	}

	/**
	 * Gets the plugin or theme of the callback, if one exists.
	 *
	 * @param string|array|callable $callback The callback for which to get the
	 *                                        plugin.
	 * @return array|null {
	 *     The source data.
	 *
	 *     @type string    $type       Source type (core, plugin, mu-plugin, or theme).
	 *     @type string    $name       Source name.
	 *     @type string    $file       Relative file path based on the type.
	 *     @type string    $function   Normalized function name.
	 *     @type Reflector $reflection Reflection.
	 * }
	 */
	public function get_source( $callback ) {
		$callback = $this->get_unwrapped_callback( $callback );

		$reflection = $this->get_reflection( $callback );

		if ( ! $reflection ) {
			return null;
		}

		$source = [ 'reflection' => $reflection ];

		$file   = wp_normalize_path( $reflection->getFileName() );
		$source = array_merge(
			$source,
			$this->file_reflection->get_file_source( $file )
		);

		// If a file was identified, then also supply the line number.
		if ( isset( $source['file'] ) ) {
			$source['line'] = $reflection->getStartLine();
		}

		if ( $reflection instanceof ReflectionMethod ) {
			$source['function'] = $reflection->getDeclaringClass()->getName() . '::' . $reflection->getName();
		} else {
			$source['function'] = $reflection->getName();
		}

		return $source;
	}

	/**
	 * Get the reflection object for the callback.
	 *
	 * @param string|array|callable $callback The callback for which to get the
	 *                                        plugin.
	 * @return ReflectionMethod|ReflectionFunction|null
	 */
	private function get_reflection( $callback ) {
		try {
			if ( is_string( $callback ) && is_callable( $callback ) ) {
				// The $callback is a function or static method.
				$exploded_callback = explode( '::', $callback, 2 );

				if ( 2 !== count( $exploded_callback ) ) {
					return new ReflectionFunction( $callback );
				}

				// Since identified as method, handle as ReflectionMethod below.
				$callback = $exploded_callback;
			}

			if (
				is_array( $callback )
				&&
				isset( $callback[0], $callback[1] )
				&&
				method_exists( $callback[0], $callback[1] )
			) {
				$reflection = new ReflectionMethod( $callback[0], $callback[1] );

				// Handle the special case of the class being a widget, in which
				// case the display_callback method should actually map to the
				// underling widget method. It is the display_callback in the
				// end that is wrapped.
				if (
					'display_callback' === $reflection->getName()
					&&
					'WP_Widget' === $reflection->getDeclaringClass()->getName()
				) {
					return new ReflectionMethod( $callback[0], 'widget' );
				}

				return $reflection;
			}

			if (
				is_object( $callback )
				&&
				'Closure' === get_class( $callback )
			) {
				return new ReflectionFunction( $callback );
			}
		} catch ( Exception $exception ) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedCatch
			// Don't let exceptions through here.
		}

		return null;
	}
}
PK.3Y7q귵0�0%bunyad-amp/src/DevTools/ErrorPage.php<?php
/**
 * Class ErrorPage.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\DevTools;

use AmpProject\AmpWP\Infrastructure\Service;
use Error;
use Exception;
use InvalidArgumentException;
use Throwable;

/**
 * Produces an error page similar to wp_die().
 *
 * The actual wp_die() function cannot be used within the AMP response
 * preparation code, as its 'exit' argument is only usable from WP 5.1 onwards.
 *
 * @see wp_die()
 * @package AmpProject\AmpWP
 * @since   2.0.1
 * @internal
 */
final class ErrorPage implements Service {

	/**
	 * Title of the error page.
	 *
	 * @var string
	 */
	private $title = '';

	/**
	 * Message of the error page.
	 *
	 * @var string
	 */
	private $message = '';

	/**
	 * Back link URL.
	 *
	 * @var string
	 */
	private $link_url = '';

	/**
	 * Back link text.
	 *
	 * @var string
	 */
	private $link_text = '';

	/**
	 * Throwable of the error page.
	 *
	 * @var Throwable
	 */
	private $throwable;

	/**
	 * Response code of the error page.
	 *
	 * @var int
	 */
	private $response_code = 500;

	/**
	 * Culprit detection to use.
	 *
	 * @var LikelyCulpritDetector
	 */
	private $likely_culprit_detector;

	/**
	 * ErrorPage constructor.
	 *
	 * @param LikelyCulpritDetector $likely_culprit_detector Culprit detection
	 *                                                       to use.
	 */
	public function __construct( LikelyCulpritDetector $likely_culprit_detector ) {
		$this->likely_culprit_detector = $likely_culprit_detector;
	}

	/**
	 * Set the title of the error page.
	 *
	 * @param string $title Title to use.
	 * @return self
	 */
	public function with_title( $title ) {
		$this->title = $title;
		return $this;
	}

	/**
	 * Set the message of the error page.
	 *
	 * @param string $message Message to use.
	 * @return self
	 */
	public function with_message( $message ) {
		$this->message = $message;
		return $this;
	}

	/**
	 * Set the message of the error page.
	 *
	 * @param string $link_url  Link URL.
	 * @param string $link_text Link text.
	 * @return self
	 */
	public function with_back_link( $link_url, $link_text ) {
		$this->link_url  = $link_url;
		$this->link_text = $link_text;
		return $this;
	}

	/**
	 * Set the throwable of the error page.
	 *
	 * @param Throwable|Exception $throwable Exception or Error to use. The Throwable type does not exist in PHP 5,
	 *                                       which is why type is absent from the function parameter.
	 * @throws InvalidArgumentException If $throwable is not an Exception or an Error.
	 * @return self
	 */
	public function with_throwable( $throwable ) {
		if ( ! ( $throwable instanceof Exception || $throwable instanceof Error ) ) {
			throw new InvalidArgumentException( 'Parameter must be Throwable (Exception or Error).' );
		}
		$this->throwable = $throwable;
		return $this;
	}

	/**
	 * Set the response_code of the error page.
	 *
	 * @param int $response_code Response code to use.
	 * @return self
	 */
	public function with_response_code( $response_code ) {
		$this->response_code = $response_code;
		return $this;
	}

	/**
	 * Render the error page.
	 *
	 * This first sets the required headers and then returns the HTML to send as
	 * output.
	 *
	 * @return string
	 */
	public function render() {
		$this->send_to_error_log();

		$this->set_headers();

		$text_direction = function_exists( 'is_rtl' ) && is_rtl()
			? 'rtl'
			: 'ltr';

		$styles = $this->get_styles( $text_direction );
		$html   = $this->get_html( $styles, $text_direction );

		return $html;
	}

	/**
	 * Send the throwable that was caught to the error log.
	 */
	private function send_to_error_log() {
		// Don't send to error log if fatal errors are not to be reported.
		$error_level = error_reporting(); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.prevent_path_disclosure_error_reporting,WordPress.PHP.DiscouragedPHPFunctions.runtime_configuration_error_reporting
		if ( ! (bool) ( $error_level & E_ERROR ) ) {
			return;
		}

		if ( null !== $this->throwable ) {
			error_log( // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log
				sprintf(
					"%s - %s (%s) [%s]\n%s",
					$this->message,
					$this->throwable->getMessage(),
					$this->throwable->getCode(),
					get_class( $this->throwable ),
					$this->throwable->getTraceAsString()
				)
			);
		}
	}

	/**
	 * Sets the required headers.
	 *
	 * This will only adapt the headers if they haven't yet been sent.
	 */
	private function set_headers() {
		if ( ! headers_sent() ) {
			// Define the content type for the error page.
			header( 'Content-Type: text/html; charset=utf-8' );

			// Mark the page as a server failure so it won't get indexed.
			status_header( $this->response_code );

			// Let the browser know this result shouldn't get cached.
			nocache_headers();
		}
	}

	/**
	 * Get the HTML output for the error page.
	 *
	 * @param string $styles         CSS styles to use.
	 * @param string $text_direction Text direction. Can be 'ltr' or 'rtl'.
	 * @return string HTML output.
	 */
	private function get_html( $styles, $text_direction ) {
		$no_robots = get_option( 'blog_public' )
			? "<meta name='robots' content='noindex,follow' />\n"
			: "<meta name='robots' content='noindex,nofollow' />\n";

		return <<<HTML
<!DOCTYPE html>
<html dir="{$text_direction}">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<meta name="viewport" content="width=device-width">
		{$no_robots}
		<title>{$this->render_title()}</title>
		{$styles}
	</head>
	<body id="error-page">
		<h1>{$this->render_title()}</h1>
		{$this->render_message()}
		{$this->render_source()}
		{$this->render_support_link()}
		{$this->render_throwable()}
		{$this->render_back_link()}
	</body>
</html>
HTML;
	}

	/**
	 * Render title.
	 *
	 * @return string HTML-escaped title.
	 */
	private function render_title() {
		return esc_html( $this->title );
	}

	/**
	 * Render message.
	 *
	 * @return string KSES-sanitized message.
	 */
	private function render_message() {
		return '<p>' . wp_kses_post( $this->message ) . '</p>';
	}

	/**
	 * Render support link.
	 *
	 * @return string
	 */
	private function render_support_link() {
		return '<p>' . wp_kses(
			sprintf(
				/* translators: %s is the AMP support forum URL. */
				__( 'If you get stuck, you may want to share any details in a new topic on the plugin\'s <a href="%s" target="_blank" rel="noreferrer noopener">support forum</a>.', 'amp' ),
				esc_url( __( 'https://wordpress.org/support/plugin/amp/', 'amp' ) )
			),
			[
				'a' => [
					'href'   => true,
					'target' => true,
					'rel'    => true,
				],
			]
		) . '</p>';
	}

	/**
	 * Render the source of the throwable.
	 *
	 * @return string File source data.
	 */
	private function render_source() {
		if ( null === $this->throwable ) {
			return '';
		}

		$source = $this->likely_culprit_detector->analyze_throwable( $this->throwable );

		if ( ! empty( $source['type'] ) && ! empty( $source['name'] ) ) {
			$name_markup = "<strong><code>{$source['name']}</code></strong>";

			switch ( $source['type'] ) {
				case 'plugin':
					/* translators: placeholder is the slug of the plugin */
					$message = sprintf( __( 'It appears the plugin with slug %s is responsible; please contact the author.', 'amp' ), $name_markup );
					break;
				case 'mu-plugin':
					/* translators: placeholder is the slug of the must-use plugin */
					$message = sprintf( __( 'It appears the must-use plugin with slug %s is responsible; please contact the author.', 'amp' ), $name_markup );
					break;
				case 'theme':
					/* translators: placeholder is the slug of the theme */
					$message = sprintf( __( 'It appears the theme with slug %s is responsible; please contact the author.', 'amp' ), $name_markup );
					break;
				default:
					return '';
			}

			return wp_kses(
				"<p>{$message}</p>",
				array_fill_keys( [ 'p', 'strong', 'code' ], [] )
			);
		}

		return '';
	}

	/**
	 * Render the throwable of the error page.
	 *
	 * The exception/error details are only rendered if both WP_DEBUG and WP_DEBUG_DISPLAY are true.
	 *
	 * @return string HTML describing the exception/error that was thrown.
	 */
	private function render_throwable() {
		if ( null === $this->throwable ) {
			return '';
		}

		if (
			! defined( 'WP_DEBUG' )
			|| ! WP_DEBUG
			|| ! defined( 'WP_DEBUG_DISPLAY' )
			|| ! WP_DEBUG_DISPLAY
		) {
			return wpautop(
				wp_kses_post(
					__( 'The exact details of the error are hidden for security reasons. To learn more about this error, enable the WordPress debugging display (by setting both <code>WP_DEBUG</code> and <code>WP_DEBUG_DISPLAY</code> to <code>true</code>), or look into the PHP error log. Learn more about <a href="https://wordpress.org/support/article/debugging-in-wordpress/">Debugging in WordPress</a>.', 'amp' )
				)
			);
		}

		$contents = implode(
			"\n",
			[
				sprintf(
					'<strong>%s</strong> (%s) [<em>%s</em>]',
					esc_html( $this->throwable->getMessage() ),
					esc_html( $this->throwable->getCode() ),
					esc_html( get_class( $this->throwable ) )
				),
				sprintf(
					'<em>%s:%d</em>',
					esc_html( $this->throwable->getFile() ),
					esc_html( $this->throwable->getLine() )
				),
				'',
				sprintf(
					'<small>%s</small>',
					esc_html( $this->throwable->getTraceAsString() )
				),
			]
		);

		return "<hr><pre class='throwable'>{$contents}</pre>";
	}

	/**
	 * Render back link.
	 *
	 * @return string Back link.
	 */
	private function render_back_link() {
		if ( empty( $this->link_text ) || empty( $this->link_url ) ) {
			return '';
		}
		return sprintf(
			'<p><a href="%s" class="button button-large">%s</a></p>',
			esc_url( $this->link_url ),
			esc_html( $this->link_text )
		);
	}

	/**
	 * Get the CSS styles to use for the error page.
	 *
	 * @see _default_wp_die_handler() Where styles are adapted from.
	 *
	 * @param string $text_direction Text direction. Can be 'ltr' or 'rtl'.
	 * @return string CSS styles to use.
	 */
	private function get_styles( $text_direction ) {
		$rtl_font_tweak = 'rtl' === $text_direction
			? 'body { font-family: Tahoma, Arial; }'
			: '';

		return <<<STYLES
<style type="text/css">
	html {
		background: #f1f1f1;
	}
	body {
		background: #fff;
		color: #444;
		font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
		margin: 2em auto;
		padding: 1em 2em;
		max-width: 700px;
		-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
		box-shadow: 0 1px 3px rgba(0, 0, 0, 0.13);
	}
	h1 {
		border-bottom: 1px solid #dadada;
		clear: both;
		color: #666;
		font-size: 24px;
		margin: 30px 0 0 0;
		padding: 0;
		padding-bottom: 7px;
	}
	hr {
		margin: 20px 0;
		border: none;
		border-top: 1px solid #dadada;
	}
	#error-page {
		margin-top: 50px;
	}
	#error-page p,
	#error-page .wp-die-message {
		font-size: 14px;
		line-height: 1.5;
		margin: 25px 0 20px;
	}
	#error-page .throwable,
	code {
		font-family: Consolas, Monaco, monospace;
		overflow-x: auto;
	}
	ul li {
		margin-bottom: 10px;
		font-size: 14px ;
	}
	a {
		color: #0073aa;
	}
	a:hover,
	a:active {
		color: #006799;
	}
	a:focus {
		color: #124964;
		-webkit-box-shadow:
			0 0 0 1px #5b9dd9,
			0 0 2px 1px rgba(30, 140, 190, 0.8);
		box-shadow:
			0 0 0 1px #5b9dd9,
			0 0 2px 1px rgba(30, 140, 190, 0.8);
		outline: none;
	}
	.button {
		background: #f7f7f7;
		border: 1px solid #ccc;
		color: #555;
		display: inline-block;
		text-decoration: none;
		font-size: 13px;
		line-height: 2;
		height: 28px;
		margin: 0;
		padding: 0 10px 1px;
		cursor: pointer;
		-webkit-border-radius: 3px;
		-webkit-appearance: none;
		border-radius: 3px;
		white-space: nowrap;
		-webkit-box-sizing: border-box;
		-moz-box-sizing:    border-box;
		box-sizing:         border-box;

		-webkit-box-shadow: 0 1px 0 #ccc;
		box-shadow: 0 1px 0 #ccc;
		vertical-align: top;
	}

	.button.button-large {
		height: 30px;
		line-height: 2.15384615;
		padding: 0 12px 2px;
	}

	.button:hover,
	.button:focus {
		background: #fafafa;
		border-color: #999;
		color: #23282d;
	}

	.button:focus {
		border-color: #5b9dd9;
		-webkit-box-shadow: 0 0 3px rgba(0, 115, 170, 0.8);
		box-shadow: 0 0 3px rgba(0, 115, 170, 0.8);
		outline: none;
	}

	.button:active {
		background: #eee;
		border-color: #999;
		-webkit-box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5);
		box-shadow: inset 0 2px 5px -3px rgba(0, 0, 0, 0.5);
	}

	{$rtl_font_tweak}
</style>
STYLES;
	}
}
PK.3YX�y�'�'*bunyad-amp/src/DevTools/FileReflection.php<?php
/**
 * Class FileReflection.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\DevTools;

use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;
use AmpProject\AmpWP\PluginRegistry;

/**
 * Reflect on a file to deduce its type of source (plugin, theme, core).
 *
 * @package AmpProject\AmpWP
 * @since 2.0.2
 * @internal
 */
final class FileReflection implements Service, Registerable {

	// Fields to include in the source array.
	const SOURCE_FILE = 'file';
	const SOURCE_NAME = 'name';
	const SOURCE_TYPE = 'type';

	// Source types.
	const TYPE_CORE      = 'core';
	const TYPE_MU_PLUGIN = 'mu-plugin';
	const TYPE_THEME     = 'theme';
	const TYPE_PLUGIN    = 'plugin';

	// Regular expression patterns to use.
	const SLUG_PATTERN         = '(?<slug>[^/]+)';
	const FILE_PATTERN         = '(?<file>.*$)';
	const SLASHED_FILE_PATTERN = '(/(?<file>.*$))?';
	const CORE_FILE_PATTERN    = '(?<slug>wp-admin|wp-includes)/(?<file>.*$)';

	/**
	 * Plugin registry instance to use.
	 *
	 * @var PluginRegistry
	 */
	private $plugin_registry;

	/**
	 * Plugin file pattern to use.
	 *
	 * Used as cache to not recreate the pattern with each file lookup.
	 *
	 * @var string
	 */
	private $plugin_file_pattern;

	/**
	 * Parent theme pattern to use.
	 *
	 * Used as cache to not recreate the pattern with each file lookup.
	 *
	 * @var string|null
	 */
	private $parent_theme_pattern;

	/**
	 * Child theme pattern to use.
	 *
	 * Used as cache to not recreate the pattern with each file lookup.
	 *
	 * @var string|null
	 */
	private $child_theme_pattern;

	/**
	 * Must-use plugin file pattern to use.
	 *
	 * Used as cache to not recreate the pattern with each file lookup.
	 *
	 * @var string
	 */
	private $mu_plugin_file_pattern;

	/**
	 * WordPress Core file pattern to use.
	 *
	 * Used as cache to not recreate the pattern with each file lookup.
	 *
	 * @var string
	 */
	private $core_file_pattern;

	/**
	 * Template directory.
	 *
	 * Used as cache to avoid running a filtered getter with each file lookup.
	 *
	 * @var string|null
	 */
	private $template_directory;

	/**
	 * Template slug.
	 *
	 * Used as cache to avoid running a filtered getter with each file lookup.
	 *
	 * @var string|null
	 */
	private $template_slug;

	/**
	 * Stylesheet directory.
	 *
	 * Used as cache to avoid running a filtered getter with each file lookup.
	 *
	 * @var string|null
	 */
	private $stylesheet_directory;

	/**
	 * Stylesheet slug.
	 *
	 * Used as cache to avoid running a filtered getter with each file lookup.
	 *
	 * @var string|null
	 */
	private $stylesheet_slug;

	/**
	 * FileReflection constructor.
	 *
	 * @param PluginRegistry $plugin_registry Plugin registry to use.
	 */
	public function __construct( PluginRegistry $plugin_registry ) {
		$this->plugin_registry = $plugin_registry;
	}

	/**
	 * Register the service.
	 *
	 * @return void
	 */
	public function register() {
		add_action( 'setup_theme', [ $this, 'reset_theme_variables' ], ~PHP_INT_MAX );
	}

	/**
	 * Reset the cached theme variables.
	 *
	 * This is needed in case a plugin has dynamically changed the theme.
	 */
	public function reset_theme_variables() {
		$this->template_directory   = null;
		$this->template_slug        = null;
		$this->parent_theme_pattern = null;
		$this->stylesheet_directory = null;
		$this->stylesheet_slug      = null;
		$this->child_theme_pattern  = null;
	}

	/**
	 * Identify the type, name, and relative path for a file.
	 *
	 * @param string $file File.
	 * @return array {
	 *     @type string $type Source type (core, plugin, mu-plugin, or theme). Not set if no match.
	 *     @type string $name Source name. Not set if no match.
	 *     @type string $file Relative file path based on the type. Not set if no match.
	 * }
	 */
	public function get_file_source( $file ) {
		static $recursion_protection = false;

		if ( $recursion_protection ) {
			return [];
		}

		$recursion_protection = true;

		$matches = [];

		if ( $this->is_parent_theme_file( $file, $matches ) ) {
			$recursion_protection = false;
			return $this->get_file_source_array(
				self::TYPE_THEME,
				$this->get_template_slug(),
				$matches['file']
			);
		}

		if ( $this->is_child_theme_file( $file, $matches ) ) {
			$recursion_protection = false;
			return $this->get_file_source_array(
				self::TYPE_THEME,
				$this->get_stylesheet_slug(),
				$matches['file']
			);
		}

		if ( $this->is_plugin_file( $file, $matches ) ) {
			$recursion_protection = false;
			return $this->get_file_source_array(
				self::TYPE_PLUGIN,
				$matches['slug'],
				isset( $matches['file'] ) ? $matches['file'] : $matches['slug']
			);
		}

		if ( $this->is_mu_plugin_file( $file, $matches ) ) {
			$recursion_protection = false;
			return $this->get_file_source_array(
				self::TYPE_MU_PLUGIN,
				$matches['slug'],
				isset( $matches['file'] ) ? $matches['file'] : $matches['slug']
			);
		}

		if ( $this->is_core_file( $file, $matches ) ) {
			$recursion_protection = false;
			return $this->get_file_source_array(
				self::TYPE_CORE,
				$matches['slug'],
				$matches['file']
			);
		}

		$recursion_protection = false;
		return [];
	}

	/**
	 * Get the template directory.
	 *
	 * @return string Template directory.
	 */
	private function get_template_directory() {
		if ( null === $this->template_directory ) {
			$this->template_directory = wp_normalize_path(
				get_template_directory()
			);
		}

		return $this->template_directory;
	}

	/**
	 * Get the template slug.
	 *
	 * @return string Template slug.
	 */
	private function get_template_slug() {
		if ( null === $this->template_slug ) {
			$this->template_slug = get_template();
		}

		return $this->template_slug;
	}

	/**
	 * Get the stylesheet directory.
	 *
	 * @return string Stylesheet directory.
	 */
	private function get_stylesheet_directory() {
		if ( null === $this->stylesheet_directory ) {
			$this->stylesheet_directory = wp_normalize_path(
				get_stylesheet_directory()
			);
		}

		return $this->stylesheet_directory;
	}

	/**
	 * Get the stylesheet slug.
	 *
	 * @return string Stylesheet slug.
	 */
	private function get_stylesheet_slug() {
		if ( null === $this->stylesheet_slug ) {
			$this->stylesheet_slug = get_stylesheet();
		}

		return $this->stylesheet_slug;
	}

	/**
	 * Check whether the given file belongs to a plugin.
	 *
	 * @param string $file    File to check.
	 * @param array  $matches Associative array of matches, passed by reference.
	 * @return false|int Number of found matches, or false if an error occurred.
	 */
	private function is_plugin_file( $file, &$matches ) {
		if ( null === $this->plugin_file_pattern ) {
			$this->plugin_file_pattern = sprintf(
				':%s%s%s:s',
				preg_quote(
					trailingslashit(
						wp_normalize_path(
							$this->plugin_registry->get_plugin_dir()
						)
					),
					':'
				),
				self::SLUG_PATTERN,
				self::SLASHED_FILE_PATTERN
			);
		}

		return preg_match( $this->plugin_file_pattern, $file, $matches );
	}

	/**
	 * Check whether the given file belongs to a parent theme.
	 *
	 * @param string $file    File to check.
	 * @param array  $matches Associative array of matches, passed by reference.
	 * @return false|int Number of found matches, or false if an error occurred.
	 */
	private function is_parent_theme_file( $file, &$matches ) {
		$template_directory = $this->get_template_directory();

		if ( empty( $template_directory ) ) {
			return false;
		}

		if ( null === $this->parent_theme_pattern ) {
			$this->parent_theme_pattern = sprintf(
				':%s%s:s',
				preg_quote( trailingslashit( $template_directory ), ':' ),
				self::FILE_PATTERN
			);
		}

		return preg_match( $this->parent_theme_pattern, $file, $matches );
	}

	/**
	 * Check whether the given file belongs to a child theme.
	 *
	 * @param string $file    File to check.
	 * @param array  $matches Associative array of matches, passed by reference.
	 * @return false|int Number of found matches, or false if an error occurred.
	 */
	private function is_child_theme_file( $file, &$matches ) {
		$stylesheet_directory = $this->get_stylesheet_directory();

		if ( empty( $stylesheet_directory ) ) {
			return false;
		}

		if ( null === $this->child_theme_pattern ) {
			$this->child_theme_pattern = sprintf(
				':%s%s:s',
				preg_quote( trailingslashit( $stylesheet_directory ), ':' ),
				self::FILE_PATTERN
			);
		}

		return preg_match( $this->child_theme_pattern, $file, $matches );
	}

	/**
	 * Check whether the given file belongs to a must-use plugin.
	 *
	 * @param string $file    File to check.
	 * @param array  $matches Associative array of matches, passed by reference.
	 * @return false|int Number of found matches, or false if an error occurred.
	 */
	private function is_mu_plugin_file( $file, &$matches ) {
		if ( null === $this->mu_plugin_file_pattern ) {
			$this->mu_plugin_file_pattern = sprintf(
				':%s%s%s:s',
				preg_quote(
					trailingslashit(
						wp_normalize_path( WPMU_PLUGIN_DIR )
					),
					':'
				),
				self::SLUG_PATTERN,
				self::SLASHED_FILE_PATTERN
			);
		}

		return preg_match( $this->mu_plugin_file_pattern, $file, $matches );
	}

	/**
	 * Check whether the given file belongs to WordPress Core.
	 *
	 * @param string $file    File to check.
	 * @param array  $matches Associative array of matches, passed by reference.
	 * @return false|int Number of found matches, or false if an error occurred.
	 */
	private function is_core_file( $file, &$matches ) {
		if ( null === $this->core_file_pattern ) {
			$this->core_file_pattern = sprintf(
				':%s%s:s',
				preg_quote(
					trailingslashit(
						wp_normalize_path( ABSPATH )
					),
					':'
				),
				self::CORE_FILE_PATTERN
			);
		}

		return preg_match( $this->core_file_pattern, $file, $matches );
	}

	/**
	 * Get a new file source array.
	 *
	 * @param string $type Type of the file source.
	 * @param string $name Name of the file source.
	 * @param string $file File reference for the file source.
	 *
	 * @return string[] File source array.
	 */
	private function get_file_source_array( $type, $name, $file ) {
		return [
			self::SOURCE_TYPE => $type,
			self::SOURCE_NAME => $name,
			self::SOURCE_FILE => $file,
		];
	}
}
PK.3Y˴"�
�
1bunyad-amp/src/DevTools/LikelyCulpritDetector.php<?php
/**
 * Class LikelyCulpritDetector.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\DevTools;

use AmpProject\AmpWP\Infrastructure\Service;
use Error;
use Exception;
use InvalidArgumentException;
use Throwable;

/**
 * Go through a debug backtrace and detect the extension that is likely to have
 * caused that backtrace.
 *
 * @package AmpProject\AmpWP
 * @since   2.0.2
 * @internal
 */
final class LikelyCulpritDetector implements Service {

	/**
	 * File reflector to use.
	 *
	 * @var FileReflection
	 */
	private $file_reflection;

	/**
	 * LikelyCulpritDetector constructor.
	 *
	 * @param FileReflection $file_reflection File reflector to use.
	 */
	public function __construct( FileReflection $file_reflection ) {
		$this->file_reflection = $file_reflection;
	}

	/**
	 * Detect the themes and plugins responsible for causing the current debug
	 * backtrace.
	 *
	 * @return array {
	 *     Type and name of extension that is the likely culprit.
	 *
	 *     @type string $type Type. Empty if none matched.
	 *     @type string $name Name. Empty if none matched.
	 * }
	 */
	public function analyze_backtrace() {
		return $this->analyze_trace( debug_backtrace( 0 ) ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_debug_backtrace
	}

	/**
	 * Detect the themes and plugins responsible for causing the exception.
	 *
	 * @param Throwable|Exception $throwable Exception or Error to analyze. The Throwable type does not exist in PHP 5,
	 *                                       which is why type is absent from the function parameter.
	 * @throws InvalidArgumentException If $throwable is not an Exception or an Error.
	 * @return array {
	 *     Type and name of extension that is the likely culprit.
	 *
	 *     @type string $type Type. Empty if none matched.
	 *     @type string $name Name. Empty if none matched.
	 * }
	 */
	public function analyze_throwable( $throwable ) {
		if ( ! ( $throwable instanceof Exception || $throwable instanceof Error ) ) {
			throw new InvalidArgumentException( 'Parameter must be Throwable (Exception or Error).' );
		}
		$trace = $throwable->getTrace();
		array_unshift( $trace, [ FileReflection::SOURCE_FILE => $throwable->getFile() ] );
		return $this->analyze_trace( $trace );
	}

	/**
	 * Detect the themes and plugins responsible for an issue in a trace.
	 *
	 * @param array $trace Associative array of trace data to analyze.
	 * @return array {
	 *     Type and name of extension that is the likely culprit.
	 *
	 *     @type string $type Type. Empty if none matched.
	 *     @type string $name Name. Empty if none matched.
	 * }
	 */
	public function analyze_trace( $trace ) {
		foreach ( $trace as $call_stack ) {
			if ( empty( $call_stack[ FileReflection::SOURCE_FILE ] ) ) {
				continue;
			}

			$source = $this->file_reflection->get_file_source( $call_stack[ FileReflection::SOURCE_FILE ] );

			if (
				empty( $source )
				||
				FileReflection::TYPE_CORE === $source[ FileReflection::SOURCE_TYPE ]
				||
				(
					FileReflection::TYPE_PLUGIN === $source[ FileReflection::SOURCE_TYPE ]
					&&
					// Per \AmpProject\AmpWP\PluginRegistry::get_plugins(), AMP and Gutenberg are considered core.
					in_array( $source[ FileReflection::SOURCE_NAME ], [ 'amp', 'gutenberg' ], true )
				)
			) {
				// We skip WordPress Core (likely hooks subsystem) and the AMP
				// plugin itself.
				continue;
			}

			return $source;
		}

		return [
			FileReflection::SOURCE_TYPE => '',
			FileReflection::SOURCE_NAME => '',
		];
	}
}
PK.3Yz�B���&bunyad-amp/src/DevTools/UserAccess.php<?php
/**
 * Class UserAccess.
 *
 * @since 2.0
 *
 * @package AMP
 */

namespace AmpProject\AmpWP\DevTools;

use AMP_Options_Manager;
use AMP_Theme_Support;
use AMP_Validation_Manager;
use AmpProject\AmpWP\DependencySupport;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;
use AmpProject\AmpWP\Option;
use WP_Error;
use WP_User;

/**
 * Class UserAccess
 *
 * @since 2.0
 * @internal
 */
final class UserAccess implements Service, Registerable {

	/** @var DependencySupport */
	private $dependency_support;

	/**
	 * Constructor.
	 *
	 * @param DependencySupport $dependency_support DependencySupport instance.
	 */
	public function __construct( DependencySupport $dependency_support ) {
		$this->dependency_support = $dependency_support;
	}

	/**
	 * User meta key enabling or disabling developer tools.
	 *
	 * @var string
	 */
	const USER_FIELD_DEVELOPER_TOOLS_ENABLED = 'amp_dev_tools_enabled';

	/**
	 * Runs on instantiation.
	 */
	public function register() {
		add_action( 'rest_api_init', [ $this, 'register_rest_field' ] );
		add_action( 'personal_options', [ $this, 'print_personal_options' ] );
		add_action( 'personal_options_update', [ $this, 'update_user_setting' ] );
		add_action( 'edit_user_profile_update', [ $this, 'update_user_setting' ] );
	}

	/**
	 * Determine whether developer tools are enabled for the a user and whether they can access them.
	 *
	 * @param null|WP_User|int $user User. Defaults to the current user.
	 * @return bool Whether developer tools are enabled for the user.
	 */
	public function is_user_enabled( $user = null ) {
		// Note: This is somewhat of a shortcut for blocking access to the validation UI on unsupported versions of WP.
		// It works because we're already using this method in many places to check if the user interface should be
		// shown, and its the user interface which is particularly problematic on older versions of WP due to the
		// JavaScript dependencies.
		if ( ! $this->dependency_support->has_support() ) {
			return false; // @codeCoverageIgnore
		}

		if ( null === $user ) {
			$user = wp_get_current_user();
		} elseif ( ! $user instanceof WP_User ) {
			$user = new WP_User( $user );
		}

		if ( ! AMP_Validation_Manager::has_cap( $user ) ) {
			return false;
		}

		return $this->get_user_enabled( $user );
	}

	/**
	 * Get user enabled (regardless of whether they have the required capability).
	 *
	 * @param int|WP_User $user User.
	 * @return bool Whether dev tools is enabled.
	 */
	public function get_user_enabled( $user ) {
		if ( ! $user instanceof WP_User ) {
			$user = new WP_User( $user );
		}
		$enabled = $user->get( self::USER_FIELD_DEVELOPER_TOOLS_ENABLED );
		if ( '' === $enabled ) {
			// Disable Developer Tools by default when in Reader mode.
			$enabled = AMP_Theme_Support::READER_MODE_SLUG !== AMP_Options_Manager::get_option( Option::THEME_SUPPORT );

			/**
			 * Filters whether Developer Tools is enabled by default for a user.
			 *
			 * When Reader mode is active, Developer Tools is currently disabled by default.
			 *
			 * @since 2.0.1
			 *
			 * @param bool $enabled DevTools enabled.
			 * @param int  $user_id User ID.
			 */
			$enabled = (bool) apply_filters( 'amp_dev_tools_user_default_enabled', $enabled, $user->ID );
		}
		return rest_sanitize_boolean( $enabled );
	}

	/**
	 * Set user enabled.
	 *
	 * @param int|WP_User $user    User.
	 * @param bool        $enabled Whether enabled.
	 * @return bool Whether update was successful.
	 */
	public function set_user_enabled( $user, $enabled ) {
		if ( $user instanceof WP_User ) {
			$user = $user->ID;
		}
		return (bool) update_user_meta( (int) $user, self::USER_FIELD_DEVELOPER_TOOLS_ENABLED, wp_json_encode( (bool) $enabled ) );
	}

	/**
	 * Register REST field.
	 */
	public function register_rest_field() {
		register_rest_field(
			'user',
			self::USER_FIELD_DEVELOPER_TOOLS_ENABLED,
			[
				'get_callback'    => [ $this, 'rest_get_dev_tools_enabled' ],
				'update_callback' => [ $this, 'rest_update_dev_tools_enabled' ],
				'schema'          => [
					'description' => __( 'Whether the user has enabled dev tools.', 'amp' ),
					'type'        => 'boolean',
				],
			]
		);
	}

	/**
	 * Determine whether the option can be modified.
	 *
	 * @param int $user_id User ID.
	 * @return bool Whether the option can be modified.
	 */
	private function can_modify_option( $user_id ) {
		return (
			$this->dependency_support->has_support()
			&&
			current_user_can( 'edit_user', $user_id )
			&&
			AMP_Validation_Manager::has_cap( $user_id )
		);
	}

	/**
	 * Add the developer tools checkbox to the user edit screen.
	 *
	 * @param WP_User $profile_user Current user being edited.
	 */
	public function print_personal_options( $profile_user ) {
		if ( ! $this->can_modify_option( $profile_user->ID ) ) {
			return;
		}
		?>
		<tr>
			<th scope="row"><?php esc_html_e( 'AMP Developer Tools', 'amp' ); ?></th>
			<td>
				<label for="amp_dev_tools_enabled">
					<input name="<?php echo esc_attr( self::USER_FIELD_DEVELOPER_TOOLS_ENABLED ); ?>" type="checkbox" id="amp_dev_tools_enabled" value="true" <?php checked( $this->is_user_enabled( $profile_user ) ); ?> />
					<?php esc_html_e( 'Enable AMP developer tools to surface validation errors when editing posts and viewing the site.', 'amp' ); ?>
				</label>

				<p class="description"><?php esc_html_e( 'This presumes you have some experience coding with HTML, CSS, JS, and PHP.', 'amp' ); ?></p>
			</td>
		</tr>
		<?php
	}

	/**
	 * Update the user setting from the edit user screen).
	 *
	 * @param int $user_id User being edited.
	 * @return bool Whether update was successful.
	 */
	public function update_user_setting( $user_id ) {
		if ( ! $this->can_modify_option( $user_id ) ) {
			return false;
		}

		// phpcs:disable WordPress.Security.NonceVerification.Missing, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- -- Nonce handled by user-edit.php; sanitization used is sanitized.
		$enabled = isset( $_POST[ self::USER_FIELD_DEVELOPER_TOOLS_ENABLED ] ) && rest_sanitize_boolean( wp_unslash( $_POST[ self::USER_FIELD_DEVELOPER_TOOLS_ENABLED ] ) );
		// phpcs:enable WordPress.Security.NonceVerification.Missing, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized

		return $this->set_user_enabled( $user_id, $enabled );
	}

	/**
	 * Provides the user's dev tools enabled setting.
	 *
	 * @param array $user Array of user data prepared for REST.
	 * @return bool Whether dev tools are enabled for the user.
	 */
	public function rest_get_dev_tools_enabled( $user ) {
		return $this->is_user_enabled( $user['id'] );
	}

	/**
	 * Updates a user's dev tools enabled setting.
	 *
	 * @param bool    $new_value New setting for whether dev tools are enabled for the user.
	 * @param WP_User $user      The WP user to update.
	 * @return bool|WP_Error The result of update_user_meta, or WP_Error if the current user lacks permission.
	 */
	public function rest_update_dev_tools_enabled( $new_value, WP_User $user ) {
		if ( ! AMP_Validation_Manager::has_cap( $user ) || ! current_user_can( 'edit_user', $user->ID ) ) {
			return new WP_Error(
				'amp_rest_cannot_edit_user',
				__( 'Sorry, the current user is not allowed to make this change.', 'amp' ),
				[ 'status' => rest_authorization_required_code() ]
			);
		}

		return $this->set_user_enabled( $user->ID, $new_value );
	}
}
PK.3Y
���"bunyad-amp/src/Dom/ElementList.php<?php
/**
 * Class ElementList
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Dom;

use AmpProject\AmpWP\Component\CaptionedSlide;
use IteratorAggregate;
use Countable;
use DOMElement;
use ArrayIterator;

/**
 * Class ElementList
 *
 * @internal
 * @since 1.5.0
 */
final class ElementList implements IteratorAggregate, Countable {

	/**
	 * The elements, possibly with captions.
	 *
	 * @var array
	 */
	private $elements = [];

	/**
	 * Adds an element to the list, possibly with a caption.
	 *
	 * @param DOMElement      $element The element to add, possibly an image.
	 * @param DOMElement|null $caption The caption for the element.
	 * @return ElementList A clone of this list, with the new element added.
	 */
	public function add( DOMElement $element, DOMElement $caption = null ): ElementList {
		$cloned_list             = clone $this;
		$cloned_list->elements[] = null === $caption ? $element : new CaptionedSlide( $element, $caption );
		return $cloned_list;
	}

	/**
	 * Gets an iterator with the elements.
	 *
	 * This together with the IteratorAggregate turns the object into a "Traversable",
	 * so you can just foreach over it and receive its elements in the correct type.
	 *
	 * @return ArrayIterator An iterator with the elements.
	 */
	public function getIterator(): ArrayIterator {
		return new ArrayIterator( $this->elements );
	}

	/**
	 * Gets the count of the elements.
	 *
	 * @return int The number of elements.
	 */
	public function count(): int {
		return count( $this->elements );
	}
}
PK.3Y��	KKbunyad-amp/src/Dom/Options.php<?php
/**
 * Class Options.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Dom;

use AmpProject\Dom\Document;

interface Options {

	/**
	 * Default options to use for the Dom.
	 *
	 * @var array
	 */
	const DEFAULTS = [
		Document\Option::AMP_BIND_SYNTAX => Document\Option::AMP_BIND_SYNTAX_DATA_ATTRIBUTE,
	];
}
PK.3Yj!�&&'bunyad-amp/src/Editor/EditorSupport.php<?php
/**
 * Functionality around editor support for AMP plugin features.
 *
 * @since 2.1
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Editor;

use AMP_Post_Type_Support;
use AmpProject\AmpWP\DependencySupport;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;

/**
 * EditorSupport class.
 *
 * @internal
 */
final class EditorSupport implements Registerable, Service {

	/** @var DependencySupport */
	private $dependency_support;

	/**
	 * Constructor.
	 *
	 * @param DependencySupport $dependency_support DependencySupport instance.
	 */
	public function __construct( DependencySupport $dependency_support ) {
		$this->dependency_support = $dependency_support;
	}

	/**
	 * Runs on instantiation.
	 */
	public function register() {
		add_action( 'admin_enqueue_scripts', [ $this, 'maybe_show_notice' ], 99 );
	}

	/**
	 * Shows a notice in the editor if the Gutenberg or WP version prevents plugin features from working.
	 */
	public function maybe_show_notice() {
		if ( $this->dependency_support->has_support() ) {
			return;
		}

		if ( ! $this->is_current_screen_block_editor_for_amp_enabled_post_type() ) {
			return;
		}

		if ( ! current_user_can( 'manage_options' ) ) {
			return;
		}

		wp_add_inline_script(
			'wp-edit-post',
			sprintf(
				'wp.domReady(
					function () {
						wp.data.dispatch( "core/notices" ).createWarningNotice( %s )
					}
				);',
				wp_json_encode( __( 'AMP functionality is not available since your version of the Block Editor is too old. Please either update WordPress core to the latest version or activate the Gutenberg plugin.', 'amp' ) )
			)
		);
	}

	/**
	 * Returns whether the current screen is using the block editor and the post being edited supports AMP.
	 *
	 * @return bool
	 */
	public function is_current_screen_block_editor_for_amp_enabled_post_type() {
		$screen = get_current_screen();
		return (
			$screen
			&&
			! empty( $screen->is_block_editor )
			&&
			in_array( get_post_type(), AMP_Post_Type_Support::get_supported_post_types(), true )
		);
	}
}
PK.3Y`�ɡ�
�
,bunyad-amp/src/Embed/HandlesGalleryEmbed.php<?php
/**
 * Trait HandlesGalleryEmbed.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Embed;

use AmpProject\AmpWP\Component\Carousel;
use AmpProject\AmpWP\Dom\ElementList;
use AmpProject\Dom\Element;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag;
use DOMElement;
use DOMNodeList;

/**
 * Trait HandlesGalleryEmbed.
 *
 * Contains logic related to both gallery shortcodes and blocks.
 *
 * @since 2.0
 * @internal
 */
trait HandlesGalleryEmbed {

	/**
	 * Transforms the raw gallery embed to become AMP compatible.
	 *
	 * @param bool        $is_carousel     Whether the embed should be transformed into an <amp-carousel>.
	 * @param bool        $is_lightbox     Whether the gallery images should be shown in a lightbox.
	 * @param DOMElement  $gallery_element Gallery element.
	 * @param DOMNodeList $img_elements    List of image elements in gallery.
	 */
	protected function process_gallery_embed( $is_carousel, $is_lightbox, DOMElement $gallery_element, DOMNodeList $img_elements ) {
		// Bail if the embed does not support carousel or lightbox.
		if ( ! $is_carousel && ! $is_lightbox ) {
			return;
		}

		// Bail if there are no images.
		if ( 0 === $img_elements->length ) {
			return;
		}

		// If the carousel is not required but the lightbox is, add the `lightbox` attribute to each image and return.
		if ( $is_lightbox && ! $is_carousel ) {
			$this->add_lightbox_attribute_to_img_nodes( $img_elements );
			return;
		}

		if ( $is_carousel ) {
			$amp_carousel     = $this->generate_amp_carousel( $img_elements, $is_lightbox );
			$carousel_element = $amp_carousel->get_dom_element();

			if ( $is_lightbox ) {
				$carousel_element->setAttribute( Attribute::LIGHTBOX, '' );
			}

			if ( Tag::FIGURE === $gallery_element->tagName ) {

				// Remove gallery container or item wrappers, leaving behind the gallery caption.
				foreach ( iterator_to_array( $gallery_element->childNodes ) as $child_node ) {
					if ( ! ( $child_node instanceof Element && Tag::FIGCAPTION === $child_node->tagName ) ) {
						$gallery_element->removeChild( $child_node );
					}
				}

				$gallery_element->insertBefore( $carousel_element, $gallery_element->firstChild );
			} else {
				$gallery_element->parentNode->replaceChild( $carousel_element, $gallery_element );
			}
		}
	}

	/**
	 * Create an AMP carousel component from the list of images specified.
	 *
	 * @param DOMNodeList $img_elements    List of images in the gallery.
	 * @param boolean     $is_amp_lightbox Whether the gallery should have a lightbox.
	 * @return Carousel An object containing markup for <amp-carousel>.
	 */
	protected function generate_amp_carousel( DOMNodeList $img_elements, $is_amp_lightbox ) {
		$images = new ElementList();

		$dom = $img_elements->item( 0 )->ownerDocument;

		foreach ( $img_elements as $img_element ) {
			$element             = $img_element;
			$parent_element_name = $img_element->parentNode->nodeName;

			if ( Tag::A === $parent_element_name && ! $is_amp_lightbox ) {
				$element = $img_element->parentNode;
			}

			$images = $images->add( $element, $this->get_caption_element( $img_element ) );
		}

		return new Carousel( $dom, $images );
	}

	/**
	 * Sets the `lightbox` attribute to each image in the specified list.
	 *
	 * @param DOMNodeList $img_elements List of image elements.
	 */
	protected function add_lightbox_attribute_to_img_nodes( DOMNodeList $img_elements ) {
		/** @var DOMElement $img_element */
		foreach ( $img_elements as $img_element ) {
			$img_element->setAttribute( Attribute::LIGHTBOX, '' );
		}
	}
}
PK.3YdF���+bunyad-amp/src/Exception/AmpWpException.php<?php
/**
 * Interface AmpWpException.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Exception;

/**
 * This is a "marker interface" to mark all the exceptions that come with this
 * plugin with this one interface.
 *
 * This allows you to not only catch individual exceptions, but also catch "all
 * exceptions from the AmpWp plugin".
 *
 * @since 2.0
 * @internal
 */
interface AmpWpException {

}
PK.3YϺ�1bunyad-amp/src/Exception/FailedToMakeInstance.php<?php
/**
 * Exception FailedToMakeInstance.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Exception;

use AmpProject\AmpWP\Infrastructure\Injector\InjectionChain;
use RuntimeException;

/**
 * Exception thrown when the injector couldn't instantiate a given class or
 * interface.
 *
 * @since 2.0
 * @internal
 */
final class FailedToMakeInstance
	extends RuntimeException
	implements AmpWpException {

	// These constants are public so you can use them to find out what exactly
	// happened when you catch a "FailedToMakeInstance" exception.
	const CIRCULAR_REFERENCE             = 100;
	const UNRESOLVED_INTERFACE           = 200;
	const UNREFLECTABLE_CLASS            = 300;
	const UNRESOLVED_ARGUMENT            = 400;
	const UNINSTANTIATED_SHARED_INSTANCE = 500;
	const INVALID_DELEGATE               = 600;

	/**
	 * Create a new instance of the exception for an interface or class that
	 * created a circular reference.
	 *
	 * @param string         $interface_or_class         Interface or class name that
	 *                                                   generated the circular
	 *                                                   reference.
	 * @param InjectionChain $injection_chain    Injection chain that led to the
	 *                                           circular reference.
	 * @return self
	 */
	public static function for_circular_reference(
		$interface_or_class,
		InjectionChain $injection_chain
	) {
		$message = \sprintf(
			'Circular reference detected while trying to resolve the interface or class "%s".',
			$interface_or_class
		);

		$message .= "\nInjection chain:\n";
		foreach ( $injection_chain->get_chain() as $link ) {
			$message .= "{$link}\n";
		}

		return new self( $message, self::CIRCULAR_REFERENCE );
	}

	/**
	 * Create a new instance of the exception for an interface that could not
	 * be resolved to an instantiable class.
	 *
	 * @param string $interface Interface that was left unresolved.
	 *
	 * @return self
	 */
	public static function for_unresolved_interface( $interface ) {
		$message = \sprintf(
			'Could not resolve the interface "%s" to an instantiable class, probably forgot to bind an implementation.',
			$interface
		);

		return new self( $message, self::UNRESOLVED_INTERFACE );
	}

	/**
	 * Create a new instance of the exception for an interface or class that
	 * could not be reflected upon.
	 *
	 * @param string $interface_or_class Interface or class that could not be
	 *                                   reflected upon.
	 *
	 * @return self
	 */
	public static function for_unreflectable_class( $interface_or_class ) {
		$message = \sprintf(
			'Could not reflect on the interface or class "%s", probably not a valid FQCN.',
			$interface_or_class
		);

		return new self( $message, self::UNREFLECTABLE_CLASS );
	}

	/**
	 * Create a new instance of the exception for an argument that could not be
	 * resolved.
	 *
	 * @param string $argument_name Name of the argument that could not be
	 *                              resolved.
	 * @param string $class         Class that had the argument in its
	 *                              constructor.
	 * @return self
	 */
	public static function for_unresolved_argument( $argument_name, $class ) {
		$message = \sprintf(
			'Could not resolve the argument "%s" while trying to instantiate the class "%s".',
			$argument_name,
			$class
		);

		return new self( $message, self::UNRESOLVED_ARGUMENT );
	}

	/**
	 * Create a new instance of the exception for a class that was meant to be
	 * reused but was not yet instantiated.
	 *
	 * @param string $class Class that was not yet instantiated.
	 *
	 * @return self
	 */
	public static function for_uninstantiated_shared_instance( $class ) {
		$message = \sprintf(
			'Could not retrieve the shared instance for "%s" as it was not instantiated yet.',
			$class
		);

		return new self( $message, self::UNINSTANTIATED_SHARED_INSTANCE );
	}

	/**
	 * Create a new instance of the exception for a delegate that was requested
	 * for a class that doesn't have one.
	 *
	 * @param string $class Class for which there is no delegate.
	 *
	 * @return self
	 */
	public static function for_invalid_delegate( $class ) {
		$message = \sprintf(
			'Could not retrieve a delegate for "%s", none was defined.',
			$class
		);

		return new self( $message, self::INVALID_DELEGATE );
	}
}
PK.3Y�>�((3bunyad-amp/src/Exception/InvalidEventProperties.php<?php
/**
 * Exception InvalidEventProperties.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Exception;

use InvalidArgumentException;

/**
 * Exception thrown when an invalid properties are added to an Event.
 *
 * @since 2.0
 * @internal
 */
final class InvalidEventProperties
	extends InvalidArgumentException
	implements AmpWpException {

	/**
	 * Create a new instance of the exception for a properties value that has
	 * the wrong type.
	 *
	 * @param mixed $properties Properties value that has the wrong type.
	 *
	 * @return self
	 */
	public static function from_invalid_type( $properties ) {
		$type = is_object( $properties )
			? get_class( $properties )
			: gettype( $properties );

		$message = sprintf(
			'The properties argument for adding properties to an event needs to be an array, but is of type %s',
			$type
		);

		return new self( $message );
	}

	/**
	 * Create a new instance of the exception for a properties value that has
	 * the wrong key type for one or more of its elements.
	 *
	 * @param mixed $property Property element that has the wrong type.
	 *
	 * @return self
	 */
	public static function from_invalid_element_key_type( $property ) {
		$type = is_object( $property )
			? get_class( $property )
			: gettype( $property );

		$message = sprintf(
			'Each property element key for adding properties to an event needs to of type string, but found an element key of type %s',
			$type
		);

		return new self( $message );
	}

	/**
	 * Create a new instance of the exception for a properties value that has
	 * the wrong value type for one or more of its elements.
	 *
	 * @param mixed $property Property element that has the wrong type.
	 *
	 * @return self
	 */
	public static function from_invalid_element_value_type( $property ) {
		$type = is_object( $property )
			? get_class( $property )
			: gettype( $property );

		$message = sprintf(
			'Each property element value for adding properties to an event needs to be a scalar value, but found an element value of type %s',
			$type
		);

		return new self( $message );
	}
}
PK.3YB��"+bunyad-amp/src/Exception/InvalidService.php<?php
/**
 * Exception InvalidService.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Exception;

use InvalidArgumentException;

/**
 * Exception thrown when an invalid service was requested.
 *
 * @since 2.0
 * @internal
 */
final class InvalidService
	extends InvalidArgumentException
	implements AmpWpException {

	/**
	 * Create a new instance of the exception for a service class name that is
	 * not recognized.
	 *
	 * @param string|object $service Class name of the service that was not
	 *                               recognized.
	 *
	 * @return self
	 */
	public static function from_service( $service ) {
		$message = \sprintf(
			'The service "%s" is not recognized and cannot be registered.',
			\is_object( $service )
				? \get_class( $service )
				: (string) $service
		);

		return new self( $message );
	}

	/**
	 * Create a new instance of the exception for a service identifier that is
	 * not recognized.
	 *
	 * @param string $service_id Identifier of the service that is not being
	 *                           recognized.
	 *
	 * @return self
	 */
	public static function from_service_id( $service_id ) {
		$message = \sprintf(
			'The service ID "%s" is not recognized and cannot be retrieved.',
			$service_id
		);

		return new self( $message );
	}
}
PK.3Y�TӚ2bunyad-amp/src/Exception/InvalidStopwatchEvent.php<?php
/**
 * Exception InvalidStopwatchEvent.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Exception;

use InvalidArgumentException;

/**
 * Exception thrown when an invalid stopwatch name was requested.
 *
 * @since 2.0
 * @internal
 */
final class InvalidStopwatchEvent
	extends InvalidArgumentException
	implements AmpWpException {

	/**
	 * Create a new instance of the exception for a stopwatch event name that is
	 * not recognized but requested to be stopped.
	 *
	 * @param string $name Name of the event that was requested to be stopped.
	 *
	 * @return self
	 */
	public static function from_name_to_stop( $name ) {
		$message = \sprintf(
			'The stopwatch event "%s" is not recognized and cannot be stopped.',
			$name
		);

		return new self( $message );
	}
}
PK.3Y
M�J��.bunyad-amp/src/Infrastructure/Activateable.php<?php
/**
 * Interface Activateable.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Infrastructure;

/**
 * Something that can be activated.
 *
 * By tagging a service with this interface, the system will automatically hook
 * it up to the WordPress activation hook.
 *
 * This way, we can just add the simple interface marker and not worry about how
 * to wire up the code to reach that part during the static activation hook.
 *
 * @since 2.0
 * @internal
 */
interface Activateable {

	/**
	 * Activate the service.
	 *
	 * @param bool $network_wide Whether the activation was done network-wide.
	 * @return void
	 */
	public function activate( $network_wide );
}
PK.3Y`me�,bunyad-amp/src/Infrastructure/CliCommand.php<?php
/**
 * Interface CliCommand.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Infrastructure;

/**
 * A CLI command to be registered with WP-CLI.
 *
 * A class marked as being a CLI command will automatically be registered
 * as a command with WP-CLI.
 *
 * @since 2.1.0
 * @internal
 */
interface CliCommand {

	/**
	 * Get the name under which to register the CLI command.
	 *
	 * @return string The name under which to register the CLI command.
	 */
	public static function get_command_name();
}
PK.3Y������-bunyad-amp/src/Infrastructure/Conditional.php<?php
/**
 * Interface Conditional.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Infrastructure;

/**
 * Something that can be instantiated conditionally.
 *
 * A class marked as being conditionally can be asked whether it should be
 * instantiated through a static method. An example would be a service that is
 * only available on the admin backend.
 *
 * This allows for a more systematic and automated optimization of how the
 * different parts of the plugin are enabled or disabled.
 *
 * @since 2.0
 * @internal
 */
interface Conditional {

	/**
	 * Check whether the conditional object is currently needed.
	 *
	 * @return bool Whether the conditional object is needed.
	 */
	public static function is_needed();
}
PK.3Y�2���0bunyad-amp/src/Infrastructure/Deactivateable.php<?php
/**
 * Interface Deactivateable.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Infrastructure;

/**
 * Something that can be deactivated.
 *
 * By tagging a service with this interface, the system will automatically hook
 * it up to the WordPress deactivation hook.
 *
 * This way, we can just add the simple interface marker and not worry about how
 * to wire up the code to reach that part during the static deactivation hook.
 *
 * @since 2.0
 * @internal
 */
interface Deactivateable {

	/**
	 * Deactivate the service.
	 *
	 * @param bool $network_wide Whether the deactivation was done network-wide.
	 * @return void
	 */
	public function deactivate( $network_wide );
}
PK.3Y�6��)bunyad-amp/src/Infrastructure/Delayed.php<?php
/**
 * Interface Delayed.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Infrastructure;

/**
 * Something that is delayed to a later point in the execution flow.
 *
 * A class marked as being delayed can return the action at which it requires
 * to be registered.
 *
 * This can be used to only register a given object after certain contextual
 * requirements are met, like registering a frontend rendering service only
 * after the loop has been set up.
 *
 * @since 2.0
 * @internal
 */
interface Delayed {

	/**
	 * Get the action to use for registering the service.
	 *
	 * @return string Registration action to use.
	 */
	public static function get_registration_action();
}
PK.3YhO��TT1bunyad-amp/src/Infrastructure/HasRequirements.php<?php
/**
 * Interface HasRequirements.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Infrastructure;

/**
 * Something that requires other services to be registered before it can be registered.
 *
 * A class marked as having requirements can return the list of services it requires
 * to be available before it can be registered.
 *
 * @since 2.2
 * @internal
 */
interface HasRequirements {

	/**
	 * Get the list of service IDs required for this service to be registered.
	 *
	 * @return string[] List of required services.
	 */
	public static function get_requirements();
}
PK.3Y�?_���*bunyad-amp/src/Infrastructure/Injector.php<?php
/**
 * Interface Injector.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Infrastructure;

/**
 * The dependency injector should be the only piece of code doing actual
 * instantiations, with the following exceptions:
 *  - Factories can instantiate directly.
 *  - Value objects should be instantiated directly where they are being used.
 *
 * Through technical features like "binding" interfaces to classes or
 * "auto-wiring" to resolve all dependency of a class to be instantiated
 * automatically, the dependency injector allows for the largest part of the
 * code to adhere to the "Code against Interfaces, not Implementations"
 * principle.
 *
 * Finally, the dependency injector should be the only one to decide what
 * objects to "share" (always handing out the same instance) or not to share
 * (always returning a fresh new instance on each subsequent call). This
 * effectively gets rid of the dreaded Singletons.
 *
 * @since 2.0
 * @internal
 */
interface Injector extends Service {

	/**
	 * Make an object instance out of an interface or class.
	 *
	 * @param string $interface_or_class Interface or class to make an object
	 *                                   instance out of.
	 * @param array  $arguments          Optional. Additional arguments to pass
	 *                                   to the constructor. Defaults to an
	 *                                   empty array.
	 * @return object Instantiated object.
	 */
	public function make( $interface_or_class, $arguments = [] );

	/**
	 * Bind a given interface or class to an implementation.
	 *
	 * Note: The implementation can be an interface as well, as long as it can
	 * be resolved to an instantiatable class at runtime.
	 *
	 * @param string $from Interface or class to bind an implementation to.
	 * @param string $to   Interface or class that provides the implementation.
	 * @return Injector
	 */
	public function bind( $from, $to );

	/**
	 * Bind an argument for a class to a specific value.
	 *
	 * @param string $interface_or_class Interface or class to bind an argument
	 *                                   for.
	 * @param string $argument_name      Argument name to bind a value to.
	 * @param mixed  $value              Value to bind the argument to.
	 *
	 * @return Injector
	 */
	public function bind_argument(
		$interface_or_class,
		$argument_name,
		$value
	);

	/**
	 * Always reuse and share the same instance for the provided interface or
	 * class.
	 *
	 * @param string $interface_or_class Interface or class to reuse.
	 * @return Injector
	 */
	public function share( $interface_or_class );

	/**
	 * Delegate instantiation of an interface or class to a callable.
	 *
	 * @param string   $interface_or_class Interface or class to delegate the
	 *                                     instantiation of.
	 * @param callable $callable           Callable to use for instantiation.
	 * @return Injector
	 */
	public function delegate( $interface_or_class, callable $callable );
}
PK.3Y�#���.bunyad-amp/src/Infrastructure/Instantiator.php<?php
/**
 * Interface Instantiator.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Infrastructure;

/**
 * Interface to make the act of instantiation extensible/replaceable.
 *
 * This way, a more elaborate mechanism can be plugged in, like using
 * ProxyManager to instantiate proxies instead of actual objects.
 *
 * @since 2.0
 * @internal
 */
interface Instantiator {

	/**
	 * Make an object instance out of an interface or class.
	 *
	 * @param string $class        Class to make an object instance out of.
	 * @param array  $dependencies Optional. Dependencies of the class.
	 * @return object Instantiated object.
	 */
	public function instantiate( $class, $dependencies = [] );
}
PK.3Y�X����(bunyad-amp/src/Infrastructure/Plugin.php<?php
/**
 * Interface Plugin
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Infrastructure;

/**
 * A plugin is basically nothing more than a convention on how manage the
 * lifecycle of a modular piece of code, so that you can:
 *  1. activate it,
 *  2. register it with the framework, and
 *  3. deactivate it again.
 *
 * This is what this interface represents, by assembling the separate,
 * segregated interfaces for each of these lifecycle actions.
 *
 * Additionally, we provide a means to get access to the plugin's container that
 * collects all the services it is made up of. This allows direct access to the
 * services to outside code if needed.
 *
 * @since 2.0
 * @internal
 */
interface Plugin extends Activateable, Deactivateable, Registerable {

	/**
	 * Get the service container that contains the services that make up the
	 * plugin.
	 *
	 * @return ServiceContainer Service container of the plugin.
	 */
	public function get_container();
}
PK.3Y����.bunyad-amp/src/Infrastructure/Registerable.php<?php
/**
 * Interface Registerable.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Infrastructure;

/**
 * Something that can be registered.
 *
 * For a clean code base, a class instantiation should never have side-effects,
 * only initialize the internals of the object so that it is ready to be used.
 *
 * This means, though, that the system does not have any knowledge of the
 * objects when they are merely instantiated.
 *
 * Registering such an object is the explicit act of making it known to the
 * overarching system.
 *
 * @since 2.0
 * @internal
 */
interface Registerable {

	/**
	 * Register the service.
	 *
	 * @return void
	 */
	public function register();
}
PK.3Y�Ss��)bunyad-amp/src/Infrastructure/Service.php<?php
/**
 * Interface Service.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Infrastructure;

/**
 * A conceptual service.
 *
 * Splitting the logic up into independent services makes the approach of
 * assembling a plugin more systematic and scalable and lowers the cognitive
 * load when the code base increases in size.
 *
 * @since 2.0
 * @internal
 */
interface Service {

}
PK.3YY�;BMBM4bunyad-amp/src/Infrastructure/ServiceBasedPlugin.php<?php
/**
 * Class ServiceBasedPlugin.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Infrastructure;

use AmpProject\AmpWP\Exception\InvalidService;
use AmpProject\AmpWP\Infrastructure\ServiceContainer\LazilyInstantiatedService;
use WP_CLI;

/**
 * This abstract base plugin provides all the boilerplate code for working with
 * the dependency injector and the service container.
 *
 * @since 2.0
 * @internal
 */
abstract class ServiceBasedPlugin implements Plugin {

	// Main filters to control the flow of the plugin from outside code.
	const SERVICES_FILTER         = 'services';
	const BINDINGS_FILTER         = 'bindings';
	const ARGUMENTS_FILTER        = 'arguments';
	const SHARED_INSTANCES_FILTER = 'shared_instances';
	const DELEGATIONS_FILTER      = 'delegations';

	// Service identifier for the injector.
	const INJECTOR_ID = 'injector';

	// WordPress action to trigger the service registration on.
	// Use false to register as soon as the code is loaded.
	const REGISTRATION_ACTION = false;

	// Whether to enable filtering by default or not.
	const ENABLE_FILTERS_DEFAULT = true;

	// Prefixes to use.
	const HOOK_PREFIX    = '';
	const SERVICE_PREFIX = '';

	// Pattern used for detecting capitals to turn PascalCase into snake_case.
	const DETECT_CAPITALS_REGEX_PATTERN = '/[A-Z]([A-Z](?![a-z]))*/';

	/** @var bool */
	protected $enable_filters;

	/** @var Injector */
	protected $injector;

	/** @var ServiceContainer */
	protected $service_container;

	/**
	 * Instantiate a Theme object.
	 *
	 * @param bool|null             $enable_filters    Optional. Whether to
	 *                                                 enable filtering of the
	 *                                                 injector configuration.
	 * @param Injector|null         $injector          Optional. Injector
	 *                                                 instance to use.
	 * @param ServiceContainer|null $service_container Optional. Service
	 *                                                 container instance to
	 *                                                 use.
	 */
	public function __construct(
		$enable_filters = null,
		Injector $injector = null,
		ServiceContainer $service_container = null
	) {
		/*
		 * We use what is commonly referred to as a "poka-yoke" here.
		 *
		 * We need an injector and a container. We make them injectable so that
		 * we can easily provide overrides for testing, but we also make them
		 * optional and provide default implementations for easy regular usage.
		 */

		$this->enable_filters = null !== $enable_filters
			? $enable_filters
			: static::ENABLE_FILTERS_DEFAULT;

		$this->injector = null !== $injector
			? $injector
			: new Injector\SimpleInjector();

		$this->injector = $this->configure_injector( $this->injector );

		$this->service_container = null !== $service_container
			? $service_container
			: new ServiceContainer\SimpleServiceContainer();
	}

	/**
	 * Activate the plugin.
	 *
	 * @param bool $network_wide Whether the activation was done network-wide.
	 * @return void
	 */
	public function activate( $network_wide ) {
		$this->register_services();

		foreach ( $this->service_container as $service ) {
			if ( $service instanceof Activateable ) {
				$service->activate( $network_wide );
			}
		}

		\flush_rewrite_rules();
	}

	/**
	 * Deactivate the plugin.
	 *
	 * @param bool $network_wide Whether the deactivation was done network-wide.
	 * @return void
	 */
	public function deactivate( $network_wide ) {
		$this->register_services();

		foreach ( $this->service_container as $service ) {
			if ( $service instanceof Deactivateable ) {
				$service->deactivate( $network_wide );
			}
		}

		\flush_rewrite_rules();
	}

	/**
	 * Register the plugin with the WordPress system.
	 *
	 * @return void
	 * @throws InvalidService If a service is not valid.
	 */
	public function register() {
		if ( false !== static::REGISTRATION_ACTION ) {
			\add_action(
				static::REGISTRATION_ACTION,
				[ $this, 'register_services' ]
			);
		} else {
			$this->register_services();
		}
	}

	/**
	 * Register the individual services of this plugin.
	 *
	 * @throws InvalidService If a service is not valid.
	 *
	 * @return void
	 */
	public function register_services() {
		// Bail early so we don't instantiate services twice.
		if ( count( $this->service_container ) > 0 ) {
			return;
		}

		// Add the injector as the very first service.
		$this->service_container->put(
			static::SERVICE_PREFIX . static::INJECTOR_ID,
			$this->injector
		);

		$services = $this->get_service_classes();

		if ( $this->enable_filters ) {
			/**
			 * Filter the default services that make up this plugin.
			 *
			 * This can be used to add services to the service container for
			 * this plugin.
			 *
			 * @param array<string> $services Associative array of identifier =>
			 *                                class mappings. The provided
			 *                                classes need to implement the
			 *                                Service interface.
			 */
			$filtered_services = \apply_filters(
				static::HOOK_PREFIX . static::SERVICES_FILTER,
				$services
			);

			$services = $this->validate_services( $filtered_services, $services );
		}

		while ( null !== key( $services ) ) {
			$id    = $this->maybe_resolve( key( $services ) );
			$class = $this->maybe_resolve( current( $services ) );

			// Delay registering the service until all requirements are met.
			if (
				is_a( $class, HasRequirements::class, true )
				&&
				! $this->requirements_are_met( $id, $class, $services )
			) {
				continue;
			}

			$this->schedule_potential_service_registration( $id, $class );

			next( $services );
		}
	}

	/**
	 * Determine if the requirements for a service to be registered are met.
	 *
	 * This also hooks up another check in the future to the registration action(s) of its requirements.
	 *
	 * @param string   $id       Service ID of the service with requirements.
	 * @param string   $class    Service FQCN of the service with requirements.
	 * @param string[] $services List of services to be registered.
	 *
	 * @throws InvalidService If the required service is not recognized.
	 *
	 * @return bool Whether the requirements for the service has been met.
	 */
	protected function requirements_are_met( $id, $class, &$services ) {
		$missing_requirements = $this->collect_missing_requirements( $class, $services );

		if ( empty( $missing_requirements ) ) {
			return true;
		}

		foreach ( $missing_requirements as $missing_requirement ) {
			if ( is_a( $missing_requirement, Delayed::class, true ) ) {
				$action = $missing_requirement::get_registration_action();

				if ( \did_action( $action ) ) {
					continue;
				}

				/*
				 * The current service depends on another service that is Delayed and hasn't been registered yet
				 * and for which the registration action has not yet passed.
				 *
				 * Therefore, we postpone the registration of the current service up until the requirement's
				 * action has passed.
				 *
				 * We don't register the service right away, though, we will first check whether at that point,
				 * the requirements have been met.
				 *
				 * Note that badly configured requirements can lead to services that will never register at all.
				 */

				\add_action(
					$action,
					function () use ( $id, $class, $services ) {
						if ( ! $this->requirements_are_met( $id, $class, $services ) ) {
							return;
						}

						$this->schedule_potential_service_registration( $id, $class );
					},
					PHP_INT_MAX
				);

				next( $services );
				return false;
			}
		}

		/*
		 * The registration actions from all of the requirements were already processed. This means that the missing
		 * requirement(s) are about to be registered, they just weren't encountered yet while traversing the services
		 * map. Therefore, we skip registration for now and move this particular service to the end of the service map.
		 *
		 * Note: Moving the service to the end of the service map advances the internal array pointer to the next service.
		 */
		unset( $services[ $id ] );
		$services[ $id ] = $class;

		return false;
	}

	/**
	 * Collect the list of missing requirements for a service which has requirements.
	 *
	 * @param string   $class Service FQCN of the service with requirements.
	 * @param string[] $services List of services to register.
	 *
	 * @throws InvalidService If the required service is not recognized.
	 *
	 * @return string[] List of missing requirements as a $service_id => $service_class mapping.
	 */
	protected function collect_missing_requirements( $class, $services ) {
		$requirements = $class::get_requirements();

		$missing = [];

		foreach ( $requirements as $requirement ) {
			// Bail if it requires a service that is not recognized.
			if ( ! array_key_exists( $requirement, $services ) ) {
				throw InvalidService::from_service_id( $requirement );
			}

			if ( $this->get_container()->has( $requirement ) ) {
				continue;
			}

			$missing[ $requirement ] = $services[ $requirement ];
		}

		return $missing;
	}

	/**
	 * Validates the services array to make sure it is in a usable shape.
	 *
	 * As the array of services could be filtered, we need to ensure it is
	 * always in a state where it doesn't throw PHP warnings or errors.
	 *
	 * @param mixed    $services Services to validate.
	 * @param string[] $fallback Fallback value to use if $services is not
	 *                           salvageable.
	 * @return string[] Validated array of service mappings.
	 */
	protected function validate_services( $services, $fallback ) {
		// If we don't have an array, something went wrong with filtering.
		// Just use the fallback value in this case.
		if ( ! is_array( $services ) ) {
			return $fallback;
		}

		// Make a copy so we can safely mutate while iterating.
		$services_to_check = $services;

		foreach ( $services_to_check as $identifier => $fqcn ) {
			// Ensure we have valid identifiers we can refer to.
			// If not, generate them from the FQCN.
			if ( empty( $identifier ) || ! is_string( $identifier ) ) {
				unset( $services[ $identifier ] );
				$identifier              = $this->get_identifier_from_fqcn( $fqcn );
				$services[ $identifier ] = $fqcn;
			}

			// Verify that the FQCN is valid and points to an existing class.
			// If not, skip this service.
			if ( empty( $fqcn ) || ! is_string( $fqcn ) || ! class_exists( $fqcn ) ) {
				unset( $services[ $identifier ] );
			}
		}

		return $services;
	}

	/**
	 * Generate a valid identifier for a provided FQCN.
	 *
	 * @param string $fqcn FQCN to use as base to generate an identifer.
	 * @return string Identifier to use for the provided FQCN.
	 */
	protected function get_identifier_from_fqcn( $fqcn ) {
		// Retrieve the short name from the FQCN first.
		$short_name = substr( $fqcn, strrpos( $fqcn, '\\' ) + 1 );

		// Turn camelCase or PascalCase into snake_case.
		$snake_case = strtolower(
			trim(
				preg_replace( self::DETECT_CAPITALS_REGEX_PATTERN, '_$0', $short_name ),
				'_'
			)
		);

		return $snake_case;
	}

	/**
	 * Schedule the potential registration of a single service.
	 *
	 * This takes into account whether the service registration needs to be delayed or not.
	 *
	 * @param string $id ID of the service to register.
	 * @param string $class Class of the service to register.
	 */
	protected function schedule_potential_service_registration( $id, $class ) {
		if ( is_a( $class, Delayed::class, true ) ) {
			$registration_action = $class::get_registration_action();

			if ( \did_action( $registration_action ) ) {
				$this->maybe_register_service( $id, $class );
			} else {
				\add_action(
					$registration_action,
					function () use ( $id, $class ) {
						$this->maybe_register_service( $id, $class );
					}
				);
			}
		} else {
			$this->maybe_register_service( $id, $class );
		}
	}

	/**
	 * Register a single service, provided its conditions are met.
	 *
	 * @param string $id ID of the service to register.
	 * @param string $class Class of the service to register.
	 */
	protected function maybe_register_service( $id, $class ) {
		// Ensure we don't register the same service more than once.
		if ( $this->service_container->has( $id ) ) {
			return;
		}

		// Only instantiate services that are actually needed.
		if ( is_a( $class, Conditional::class, true )
			&& ! $class::is_needed() ) {
			return;
		}

		$service = $this->instantiate_service( $class );

		$this->service_container->put( $id, $service );

		if ( $service instanceof CliCommand && defined( 'WP_CLI' ) && WP_CLI ) {
			WP_CLI::add_command( $service::get_command_name(), $service );
		}

		if ( $service instanceof Registerable ) {
			$service->register();
		}
	}

	/**
	 * Get the service container that contains the services that make up the
	 * plugin.
	 *
	 * @return ServiceContainer Service container of the plugin.
	 */
	public function get_container() {
		return $this->service_container;
	}

	/**
	 * Instantiate a single service.
	 *
	 * @param string $class Service class to instantiate.
	 *
	 * @throws InvalidService If the service could not be properly instantiated.
	 *
	 * @return Service Instantiated service.
	 */
	protected function instantiate_service( $class ) {
		/*
		 * If the service is not registerable, we default to lazily instantiated
		 * services here for some basic optimization.
		 *
		 * The services will be properly instantiated once they are retrieved
		 * from the service container.
		 */
		if (
			! is_a( $class, Registerable::class, true )
			&&
			(
				! defined( 'WP_CLI' )
				||
				! WP_CLI
				||
				! is_a( $class, CliCommand::class, true )
			)
		) {
			return new LazilyInstantiatedService(
				function () use ( $class ) {
					return $this->injector->make( $class );
				}
			);
		}

		// The service needs to be registered, so instantiate right away.
		$service = $this->injector->make( $class );

		if ( ! $service instanceof Service ) {
			throw InvalidService::from_service( $service );
		}

		return $service;
	}

	/**
	 * Configure the provided injector.
	 *
	 * This method defines the mappings that the injector knows about, and the
	 * logic it requires to make more complex instantiations work.
	 *
	 * For more complex plugins, this should be extracted into a separate
	 * object
	 * or into configuration files.
	 *
	 * @param Injector $injector Injector instance to configure.
	 * @return Injector Configured injector instance.
	 */
	protected function configure_injector( Injector $injector ) {
		$bindings         = $this->get_bindings();
		$shared_instances = $this->get_shared_instances();
		$arguments        = $this->get_arguments();
		$delegations      = $this->get_delegations();

		if ( $this->enable_filters ) {
			/**
			 * Filter the default bindings that are provided by the plugin.
			 *
			 * This can be used to swap implementations out for alternatives.
			 *
			 * @param array<string> $bindings Associative array of interface =>
			 *                                implementation bindings. Both
			 *                                should be FQCNs.
			 */
			$bindings = (array) \apply_filters(
				static::HOOK_PREFIX . static::BINDINGS_FILTER,
				$bindings
			);

			/**
			 * Filter the default argument bindings that are provided by the
			 * plugin.
			 *
			 * This can be used to override scalar values.
			 *
			 * @param array<array> $arguments Associative array of class =>
			 *                                arguments mappings. The arguments
			 *                                array maps argument names to
			 *                                values.
			 */
			$arguments = (array) \apply_filters(
				static::HOOK_PREFIX . static::ARGUMENTS_FILTER,
				$arguments
			);

			/**
			 * Filter the instances that are shared by default by the plugin.
			 *
			 * This can be used to turn objects that were added externally into
			 * shared instances.
			 *
			 * @param array<string> $shared_instances Array of FQCNs to turn
			 *                                        into shared objects.
			 */
			$shared_instances = (array) \apply_filters(
				static::HOOK_PREFIX . static::SHARED_INSTANCES_FILTER,
				$shared_instances
			);

			/**
			 * Filter the instances that are shared by default by the plugin.
			 *
			 * This can be used to turn objects that were added externally into
			 * shared instances.
			 *
			 * @param array<string> $delegations Associative array of class =>
			 *                                   callable mappings.
			 */
			$delegations = (array) \apply_filters(
				static::HOOK_PREFIX . static::DELEGATIONS_FILTER,
				$delegations
			);
		}

		foreach ( $bindings as $from => $to ) {
			$from = $this->maybe_resolve( $from );
			$to   = $this->maybe_resolve( $to );

			$injector = $injector->bind( $from, $to );
		}

		foreach ( $arguments as $class => $argument_map ) {
			$class = $this->maybe_resolve( $class );

			foreach ( $argument_map as $name => $value ) {
				// We don't try to resolve the $value here, as we might want to
				// pass a callable as-is.
				$name = $this->maybe_resolve( $name );

				$injector = $injector->bind_argument( $class, $name, $value );
			}
		}

		foreach ( $shared_instances as $shared_instance ) {
			$shared_instance = $this->maybe_resolve( $shared_instance );

			$injector = $injector->share( $shared_instance );
		}

		foreach ( $delegations as $class => $callable ) {
			// We don't try to resolve the $callable here, as we want to pass it
			// on as-is.
			$class = $this->maybe_resolve( $class );

			$injector = $injector->delegate( $class, $callable );
		}

		return $injector;
	}

	/**
	 * Get the list of services to register.
	 *
	 * @return array<string> Associative array of identifiers mapped to fully
	 *                       qualified class names.
	 */
	protected function get_service_classes() {
		return [];
	}

	/**
	 * Get the bindings for the dependency injector.
	 *
	 * The bindings let you map interfaces (or classes) to the classes that
	 * should be used to implement them.
	 *
	 * @return array<string> Associative array of fully qualified class names.
	 */
	protected function get_bindings() {
		return [];
	}

	/**
	 * Get the argument bindings for the dependency injector.
	 *
	 * The argument bindings let you map specific argument values for specific
	 * classes.
	 *
	 * @return array<array> Associative array of arrays mapping argument names
	 *                      to argument values.
	 */
	protected function get_arguments() {
		return [];
	}

	/**
	 * Get the shared instances for the dependency injector.
	 *
	 * These classes will only be instantiated once by the injector and then
	 * reused on subsequent requests.
	 *
	 * This effectively turns them into singletons, without any of the
	 * drawbacks of the actual Singleton anti-pattern.
	 *
	 * @return array<string> Array of fully qualified class names.
	 */
	protected function get_shared_instances() {
		return [];
	}

	/**
	 * Get the delegations for the dependency injector.
	 *
	 * These are basically factories to provide custom instantiation logic for
	 * classes.
	 *
	 * @return array<callable> Associative array of callables.
	 */
	protected function get_delegations() {
		return [];
	}

	/**
	 * Maybe resolve a value that is a callable instead of a scalar.
	 *
	 * Values that are passed through this method can optionally be provided as
	 * callables instead of direct values and will be evaluated when needed.
	 *
	 * @param mixed $value Value to potentially resolve.
	 * @return mixed Resolved or unchanged value.
	 */
	protected function maybe_resolve( $value ) {
		if ( is_callable( $value ) ) {
			$value = $value( $this->injector, $this->service_container );
		}

		return $value;
	}
}
PK.3Y��g��2bunyad-amp/src/Infrastructure/ServiceContainer.php<?php
/**
 * Interface ServiceContainer.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Infrastructure;

use AmpProject\AmpWP\Exception\InvalidService;
use ArrayAccess;
use Countable;
use Traversable;

/**
 * The service container collects all services to manage them.
 *
 * This is based on PSR-11 and should extend that one if Composer dependencies
 * are being used. Relying on a standardized interface like PSR-11 means you'll
 * be able to easily swap out the implementation for something else later on.
 *
 * @see https://www.php-fig.org/psr/psr-11/
 * @since 2.0
 * @internal
 */
interface ServiceContainer extends Traversable, Countable, ArrayAccess {

	/**
	 * Find a service of the container by its identifier and return it.
	 *
	 * @param string $id Identifier of the service to look for.
	 *
	 * @throws InvalidService If the service could not be found.
	 *
	 * @return Service Service that was requested.
	 */
	public function get( $id );

	/**
	 * Check whether the container can return a service for the given
	 * identifier.
	 *
	 * @param string $id Identifier of the service to look for.
	 *
	 * @return bool
	 */
	public function has( $id );

	/**
	 * Put a service into the container for later retrieval.
	 *
	 * @param string  $id      Identifier of the service to put into the
	 *                         container.
	 * @param Service $service Service to put into the container.
	 */
	public function put( $id, Service $service );
}
PK.3Y�D����?bunyad-amp/src/Infrastructure/Injector/FallbackInstantiator.php<?php
/**
 * Final class FallbackInstantiator.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Infrastructure\Injector;

use AmpProject\AmpWP\Infrastructure\Instantiator;

/**
 * Fallback instantiator to use in case none was provided.
 *
 * @since 2.0
 * @internal
 */
final class FallbackInstantiator implements Instantiator {

	/**
	 * Make an object instance out of an interface or class.
	 *
	 * @param string $class        Class to make an object instance out of.
	 * @param array  $dependencies Optional. Dependencies of the class.
	 * @return object Instantiated object.
	 */
	public function instantiate( $class, $dependencies = [] ) {
		return new $class( ...$dependencies );
	}
}
PK.3YN���F	F	9bunyad-amp/src/Infrastructure/Injector/InjectionChain.php<?php
/**
 * Final class InjectionChain.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Infrastructure\Injector;

use LogicException;

/**
 * The injection chain is similar to a trace, keeping track of what we have done
 * so far and at what depth within the auto-wiring we currently are.
 *
 * It is used to detect circular dependencies, and can also be dumped for
 * debugging information.
 *
 * @since 2.0
 * @internal
 */
final class InjectionChain {

	/** @var array<string> */
	private $chain = [];

	/** @var array<bool> */
	private $resolutions = [];

	/**
	 * Add class to injection chain.
	 *
	 * @param string $class Class to add to injection chain.
	 * @return self Modified injection chain.
	 */
	public function add_to_chain( $class ) {
		$new_chain          = clone $this;
		$new_chain->chain[] = $class;

		return $new_chain;
	}

	/**
	 * Add resolution for circular reference detection.
	 *
	 * @param string $resolution Resolution to add.
	 * @return self Modified injection chain.
	 */
	public function add_resolution( $resolution ) {
		$new_chain                             = clone $this;
		$new_chain->resolutions[ $resolution ] = true;

		return $new_chain;
	}

	/**
	 * Get the last class that was pushed to the injection chain.
	 *
	 * @return string Last class pushed to the injection chain.
	 * @throws LogicException If the injection chain is accessed too early.
	 */
	public function get_class() {
		if ( empty( $this->chain ) ) {
			throw new LogicException(
				'Access to injection chain before any resolution was made.'
			);
		}

		return \end( $this->chain ) ?: '';
	}

	/**
	 * Get the injection chain.
	 *
	 * @return array Chain of injections.
	 */
	public function get_chain() {
		return \array_reverse( $this->chain );
	}

	/**
	 * Check whether the injection chain already has a given resolution.
	 *
	 * @param string $resolution Resolution to check for.
	 * @return bool Whether the resolution was found.
	 */
	public function has_resolution( $resolution ) {
		return \array_key_exists( $resolution, $this->resolutions );
	}

	/**
	 * Check whether the injection chain already encountered a class.
	 *
	 * @param string $class Class to check.
	 * @return bool Whether the given class is already part of the chain.
	 */
	public function is_in_chain( $class ) {
		return in_array( $class, $this->chain, true );
	}
}
PK.3Y���4�49bunyad-amp/src/Infrastructure/Injector/SimpleInjector.php<?php
/**
 * Final class SimpleInjector.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Infrastructure\Injector;

use AmpProject\AmpWP\Exception\FailedToMakeInstance;
use AmpProject\AmpWP\Infrastructure\Injector;
use AmpProject\AmpWP\Infrastructure\Instantiator;
use Exception;
use ReflectionClass;
use ReflectionParameter;

/**
 * A simplified implementation of a dependency injector.
 *
 * @since 2.0
 * @internal
 */
final class SimpleInjector implements Injector {

	/**
	 * Special-case index key for handling globally defined named arguments.
	 *
	 * @var string
	 */
	const GLOBAL_ARGUMENTS = '__global__';

	/** @var array<string> */
	private $mappings = [];

	/** @var array<object|null> */
	private $shared_instances = [];

	/** @var array<callable> */
	private $delegates = [];

	/** @var array[] */
	private $argument_mappings = [
		self::GLOBAL_ARGUMENTS => [],
	];

	/** @var Instantiator */
	private $instantiator;

	/**
	 * Instantiate a SimpleInjector object.
	 *
	 * @param Instantiator|null $instantiator Optional. Instantiator to use.
	 */
	public function __construct( Instantiator $instantiator = null ) {
		$this->instantiator = null !== $instantiator
			? $instantiator
			: new FallbackInstantiator();
	}

	/**
	 * Make an object instance out of an interface or class.
	 *
	 * @param string $interface_or_class Interface or class to make an object
	 *                                   instance out of.
	 * @param array  $arguments          Optional. Additional arguments to pass
	 *                                   to the constructor. Defaults to an
	 *                                   empty array.
	 * @return object Instantiated object.
	 */
	public function make( $interface_or_class, $arguments = [] ) {
		$injection_chain = $this->resolve(
			new InjectionChain(),
			$interface_or_class
		);

		$class = $injection_chain->get_class();

		if ( $this->has_shared_instance( $class ) ) {
			return $this->get_shared_instance( $class );
		}

		if ( $this->has_delegate( $class ) ) {
			$delegate = $this->get_delegate( $class );
			$object   = $delegate( $class );
		} else {
			$reflection = $this->get_class_reflection( $class );
			$this->ensure_is_instantiable( $reflection );

			$dependencies = $this->get_dependencies_for(
				$injection_chain,
				$reflection,
				$arguments
			);

			$object = $this->instantiator->instantiate( $class, $dependencies );
		}

		if ( \array_key_exists( $class, $this->shared_instances ) ) {
			$this->shared_instances[ $class ] = $object;
		}

		return $object;
	}

	/**
	 * Bind a given interface or class to an implementation.
	 *
	 * Note: The implementation can be an interface as well, as long as it can
	 * be resolved to an instantiatable class at runtime.
	 *
	 * @param string $from Interface or class to bind an implementation to.
	 * @param string $to   Interface or class that provides the implementation.
	 * @return Injector
	 */
	public function bind( $from, $to ) {
		$this->mappings[ $from ] = $to;

		return $this;
	}

	/**
	 * Bind an argument for a class to a specific value.
	 *
	 * @param string $interface_or_class Interface or class to bind an argument
	 *                                   for.
	 * @param string $argument_name      Argument name to bind a value to.
	 * @param mixed  $value              Value to bind the argument to.
	 *
	 * @return Injector
	 */
	public function bind_argument(
		$interface_or_class,
		$argument_name,
		$value
	) {
		$this->argument_mappings[ $interface_or_class ][ $argument_name ] = $value;

		return $this;
	}

	/**
	 * Always reuse and share the same instance for the provided interface or
	 * class.
	 *
	 * @param string $interface_or_class Interface or class to reuse.
	 * @return Injector
	 */
	public function share( $interface_or_class ) {
		$this->shared_instances[ $interface_or_class ] = null;

		return $this;
	}

	/**
	 * Delegate instantiation of an interface or class to a callable.
	 *
	 * @param string   $interface_or_class Interface or class to delegate the
	 *                                     instantiation of.
	 * @param callable $callable           Callable to use for instantiation.
	 * @return Injector
	 */
	public function delegate( $interface_or_class, callable $callable ) {
		$this->delegates[ $interface_or_class ] = $callable;

		return $this;
	}

	/**
	 * Make an object instance out of an interface or class.
	 *
	 * @param InjectionChain $injection_chain    Injection chain to track
	 *                                           resolutions.
	 * @param string         $interface_or_class Interface or class to make an
	 *                                           object instance out of.
	 * @return object Instantiated object.
	 */
	private function make_dependency(
		InjectionChain $injection_chain,
		$interface_or_class
	) {
		$injection_chain = $this->resolve(
			$injection_chain,
			$interface_or_class
		);

		$class = $injection_chain->get_class();

		if ( $this->has_shared_instance( $class ) ) {
			return $this->get_shared_instance( $class );
		}

		if ( $this->has_delegate( $class ) ) {
			$delegate = $this->get_delegate( $class );
			return $delegate( $class );
		}

		$reflection = $this->get_class_reflection( $class );
		$this->ensure_is_instantiable( $reflection );

		$dependencies = $this->get_dependencies_for(
			$injection_chain,
			$reflection
		);

		$object = $this->instantiator->instantiate( $class, $dependencies );

		if ( \array_key_exists( $class, $this->shared_instances ) ) {
			$this->shared_instances[ $class ] = $object;
		}

		return $object;
	}

	/**
	 * Recursively resolve an interface to the class it should be bound to.
	 *
	 * @param InjectionChain $injection_chain    Injection chain to track
	 *                                           resolutions.
	 * @param string         $interface_or_class Interface or class to resolve.
	 * @return InjectionChain Modified Injection chain
	 * @throws FailedToMakeInstance If a circular reference was detected.
	 */
	private function resolve(
		InjectionChain $injection_chain,
		$interface_or_class
	) {
		if ( $injection_chain->is_in_chain( $interface_or_class ) ) {
			// Circular reference detected, aborting.
			throw FailedToMakeInstance::for_circular_reference(
				$interface_or_class,
				$injection_chain
			);
		}

		$injection_chain = $injection_chain->add_resolution( $interface_or_class );

		if ( \array_key_exists( $interface_or_class, $this->mappings ) ) {
			return $this->resolve(
				$injection_chain,
				$this->mappings[ $interface_or_class ]
			);
		}

		return $injection_chain->add_to_chain( $interface_or_class );
	}

	/**
	 * Get the array of constructor dependencies for a given reflected class.
	 *
	 * @param InjectionChain  $injection_chain   Injection chain to track
	 *                                           resolutions.
	 * @param ReflectionClass $reflection        Reflected class to get the
	 *                                           dependencies for.
	 * @param array           $arguments         Associative array of directly
	 *                                           provided arguments.
	 * @return array Array of dependencies that represent the arguments for the
	 *                                           class' constructor.
	 */
	private function get_dependencies_for(
		InjectionChain $injection_chain,
		ReflectionClass $reflection,
		$arguments = []
	) {
		$constructor = $reflection->getConstructor();
		$class       = $reflection->getName();

		if ( null === $constructor ) {
			return [];
		}

		return \array_map(
			function ( ReflectionParameter $parameter ) use ( $injection_chain, $class, $arguments ) {
				return $this->resolve_argument(
					$injection_chain,
					$class,
					$parameter,
					$arguments
				);
			},
			$constructor->getParameters()
		);
	}

	/**
	 * Ensure that a given reflected class is instantiable.
	 *
	 * @param ReflectionClass $reflection Reflected class to check.
	 * @return void
	 * @throws FailedToMakeInstance If the interface could not be resolved.
	 */
	private function ensure_is_instantiable( ReflectionClass $reflection ) {
		if ( ! $reflection->isInstantiable() ) {
			throw FailedToMakeInstance::for_unresolved_interface( $reflection->getName() );
		}
	}

	/**
	 * Resolve a given reflected argument.
	 *
	 * @param InjectionChain      $injection_chain  Injection chain to track
	 *                                              resolutions.
	 * @param string              $class            Name of the class to
	 *                                              resolve the arguments for.
	 * @param ReflectionParameter $parameter        Parameter to resolve.
	 * @param array               $arguments        Associative array of
	 *                                              directly provided
	 *                                              arguments.
	 * @return mixed Resolved value of the argument.
	 */
	private function resolve_argument(
		InjectionChain $injection_chain,
		$class,
		ReflectionParameter $parameter,
		$arguments
	) {
		if ( ! $parameter->hasType() ) {
			return $this->resolve_argument_by_name(
				$class,
				$parameter,
				$arguments
			);
		}

		$type = $parameter->getType();

		if ( null === $type ||
			( is_a( $type, 'ReflectionType' ) && method_exists( $type, 'isBuiltin' ) && $type->isBuiltin() )
		) {
			return $this->resolve_argument_by_name(
				$class,
				$parameter,
				$arguments
			);
		}

		$type = $type instanceof \ReflectionNamedType
			? $type->getName()
			: (string) $type;

		return $this->make_dependency( $injection_chain, $type );
	}

	/**
	 * Resolve a given reflected argument by its name.
	 *
	 * @param string              $class     Class to resolve the argument for.
	 * @param ReflectionParameter $parameter Argument to resolve by name.
	 * @param array               $arguments Associative array of directly
	 *                                       provided arguments.
	 * @return mixed Resolved value of the argument.
	 * @throws FailedToMakeInstance If the argument could not be resolved.
	 */
	private function resolve_argument_by_name(
		$class,
		ReflectionParameter $parameter,
		$arguments
	) {
		$name = $parameter->getName();

		// The argument was directly provided to the make() call.
		if ( \array_key_exists( $name, $arguments ) ) {
			return $arguments[ $name ];
		}

		// Check if we have mapped this argument for the specific class.
		if ( \array_key_exists( $class, $this->argument_mappings )
			&& \array_key_exists( $name, $this->argument_mappings[ $class ] ) ) {
			$value = $this->argument_mappings[ $class ][ $name ];

			// Closures are immediately resolved, to provide lazy resolution.
			if ( is_callable( $value ) ) {
				$value = $value( $class, $parameter, $arguments );
			}

			return $value;
		}

		// No argument found for the class, check if we have a global value.
		if ( \array_key_exists( $name, $this->argument_mappings[ self::GLOBAL_ARGUMENTS ] ) ) {
			return $this->argument_mappings[ self::GLOBAL_ARGUMENTS ][ $name ];
		}

		// No provided argument found, check if it has a default value.
		try {
			if ( $parameter->isDefaultValueAvailable() ) {
				return $parameter->getDefaultValue();
			}
		} catch ( Exception $exception ) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedCatch
			// Just fall through into the FailedToMakeInstance exception.
		}

		// Out of options, fail with an exception.
		throw FailedToMakeInstance::for_unresolved_argument( $name, $class );
	}

	/**
	 * Check whether a shared instance exists for a given class.
	 *
	 * @param string $class Class to check for a shared instance.
	 * @return bool Whether a shared instance exists.
	 */
	private function has_shared_instance( $class ) {
		return \array_key_exists( $class, $this->shared_instances )
			&& null !== $this->shared_instances[ $class ];
	}

	/**
	 * Get the shared instance for a given class.
	 *
	 * @param string $class Class to get the shared instance for.
	 * @return object Shared instance.
	 * @throws FailedToMakeInstance If an uninstantiated shared instance is
	 *                              requested.
	 */
	private function get_shared_instance( $class ) {
		if ( ! $this->has_shared_instance( $class ) ) {
			throw FailedToMakeInstance::for_uninstantiated_shared_instance( $class );
		}

		return (object) $this->shared_instances[ $class ];
	}

	/**
	 * Check whether a delegate exists for a given class.
	 *
	 * @param string $class Class to check for a delegate.
	 * @return bool Whether a delegate exists.
	 */
	private function has_delegate( $class ) {
		return \array_key_exists( $class, $this->delegates );
	}

	/**
	 * Get the delegate for a given class.
	 *
	 * @param string $class Class to get the delegate for.
	 * @return callable Delegate.
	 * @throws FailedToMakeInstance If an invalid delegate is requested.
	 */
	private function get_delegate( $class ) {
		if ( ! $this->has_delegate( $class ) ) {
			throw FailedToMakeInstance::for_invalid_delegate( $class );
		}

		return $this->delegates[ $class ];
	}

	/**
	 * Get the reflection for a class or throw an exception.
	 *
	 * @param string $class Class to get the reflection for.
	 * @return ReflectionClass Class reflection.
	 * @throws FailedToMakeInstance If the class could not be reflected.
	 */
	private function get_class_reflection( $class ) {
		try {
			return new ReflectionClass( $class );
		} catch ( Exception $exception ) {
			throw FailedToMakeInstance::for_unreflectable_class( $class );
		}
	}
}
PK.3Y�!]��Lbunyad-amp/src/Infrastructure/ServiceContainer/LazilyInstantiatedService.php<?php
/**
 * Final class LazilyInstantiatedService.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Infrastructure\ServiceContainer;

use AmpProject\AmpWP\Exception\InvalidService;
use AmpProject\AmpWP\Infrastructure\Service;

/**
 * A service that only gets properly instantiated when it is actually being
 * retrieved from the container.
 *
 * @since 2.0
 * @internal
 */
final class LazilyInstantiatedService implements Service {

	/** @var callable */
	private $instantiation;

	/**
	 * Instantiate a LazilyInstantiatedService object.
	 *
	 * @param callable $instantiation Instantiation callable to use.
	 */
	public function __construct( callable $instantiation ) {
		$this->instantiation = $instantiation;
	}

	/**
	 * Do the actual service instantiation and return the real service.
	 *
	 * @throws InvalidService If the service could not be properly instantiated.
	 *
	 * @return Service Properly instantiated service.
	 */
	public function instantiate() {
		$instantiation = $this->instantiation; // Because uniform variable syntax not supported in PHP 5.6.
		$service       = $instantiation();

		if ( ! $service instanceof Service ) {
			throw InvalidService::from_service( $service );
		}

		return $service;
	}
}
PK.3YηԾIbunyad-amp/src/Infrastructure/ServiceContainer/SimpleServiceContainer.php<?php
/**
 * Final class SimpleServiceContainer.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Infrastructure\ServiceContainer;

use AmpProject\AmpWP\Exception\InvalidService;
use AmpProject\AmpWP\Infrastructure\Service;
use AmpProject\AmpWP\Infrastructure\ServiceContainer;
use ArrayObject;

/**
 * A simplified implementation of a service container.
 *
 * We extend ArrayObject so we have default implementations for iterators and
 * array access.
 *
 * @since 2.0
 * @internal
 */
final class SimpleServiceContainer
	extends ArrayObject
	implements ServiceContainer {

	/**
	 * Find a service of the container by its identifier and return it.
	 *
	 * @param string $id Identifier of the service to look for.
	 *
	 * @throws InvalidService If the service could not be found.
	 *
	 * @return Service Service that was requested.
	 */
	public function get( $id ) {
		if ( ! $this->has( $id ) ) {
			throw InvalidService::from_service_id( $id );
		}

		$service = $this->offsetGet( $id );

		// Instantiate actual services if they were stored lazily.
		if ( $service instanceof LazilyInstantiatedService ) {
			$service = $service->instantiate();
			$this->put( $id, $service );
		}

		return $service;
	}

	/**
	 * Check whether the container can return a service for the given
	 * identifier.
	 *
	 * @param string $id Identifier of the service to look for.
	 *
	 * @return bool
	 */
	public function has( $id ) {
		return $this->offsetExists( $id );
	}

	/**
	 * Put a service into the container for later retrieval.
	 *
	 * @param string  $id      Identifier of the service to put into the
	 *                         container.
	 * @param Service $service Service to put into the container.
	 */
	public function put( $id, Service $service ) {
		$this->offsetSet( $id, $service );
	}
}
PK.3Yv�88(bunyad-amp/src/Instrumentation/Event.php<?php
/**
 * Class Event.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Instrumentation;

use AmpProject\AmpWP\Exception\InvalidEventProperties;

/**
 * A server-timing event.
 *
 * @package AmpProject\AmpWP
 * @since 2.0
 * @internal
 */
class Event {

	/**
	 * Event name.
	 *
	 * @var string
	 */
	protected $name;

	/**
	 * Event description.
	 *
	 * @var string|null
	 */
	protected $description;

	/**
	 * Additional properties of the event.
	 *
	 * @var array
	 */
	protected $properties;

	/**
	 * Event constructor.
	 *
	 * @param string        $name        Event name.
	 * @param string|null   $description Optional. Event description.
	 * @param string[]|null $properties  Optional. Additional properties for the
	 *                                   event.
	 */
	public function __construct( $name, $description = null, $properties = [] ) {
		$this->name        = $name;
		$this->description = $description;
		$this->properties  = (array) $properties;
	}

	/**
	 * Get the name of the event.
	 *
	 * @return string Event name.
	 */
	public function get_name() {
		return $this->name;
	}

	/**
	 * Get the description of the event.
	 *
	 * @return string Event description.
	 */
	public function get_description() {
		return $this->description ?: '';
	}

	/**
	 * Add additional properties to the event.
	 *
	 * @param string[] $properties Properties to add.
	 * @throws InvalidEventProperties When the type of $properties or its
	 *                                elements is off.
	 */
	public function add_properties( $properties ) {
		if ( ! is_array( $properties ) ) {
			throw InvalidEventProperties::from_invalid_type( $properties );
		}

		foreach ( $properties as $key => $value ) {
			if ( ! is_string( $key ) ) {
				throw InvalidEventProperties::from_invalid_element_key_type( $key );
			}

			if ( ! is_scalar( $value ) ) {
				throw InvalidEventProperties::from_invalid_element_value_type( $value );
			}

			$this->properties[ $key ] = $value;
		}
	}

	/**
	 * Sanitize key to use it for an HTTP header label (alphanumeric and dashes/underscores only).
	 *
	 * @param string $key Unsanitized key.
	 * @return string Sanitized key.
	 */
	private function sanitize_key( $key ) {
		return preg_replace( '/[^a-zA-Z0-9_-]+/', '_', $key );
	}

	/**
	 * Get the server timing header string.
	 *
	 * @return string Server timing header string representing this event.
	 */
	public function get_header_string() {
		$property_strings = [];

		foreach ( $this->properties as $property => $value ) {
			if ( is_float( $value ) ) {
				$property_strings[] = sprintf(
					';%s="%.1f"',
					$this->sanitize_key( $property ),
					$value
				);
			} else {
				$property_strings[] = sprintf(
					';%s="%s"',
					$this->sanitize_key( $property ),
					addslashes( $value )
				);
			}
		}

		$event_string = $this->sanitize_key( $this->get_name() );

		$description = $this->get_description();
		if ( ! empty( $description ) ) {
			$event_string = sprintf(
				'%s;desc="%s"',
				$event_string,
				addslashes( $description )
			);
		}

		return $event_string . implode( $property_strings );
	}
}
PK.3YV��yy4bunyad-amp/src/Instrumentation/EventWithDuration.php<?php
/**
 * Class EventWithDuration.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Instrumentation;

/**
 * A server-timing event with a duration.
 *
 * @package AmpProject\AmpWP
 * @since 2.0
 * @internal
 */
class EventWithDuration extends Event {

	/**
	 * Event duration.
	 *
	 * @var float
	 */
	protected $duration = 0.0;

	/**
	 * Event constructor.
	 *
	 * @param string        $name        Event name.
	 * @param string|null   $description Optional. Event description.
	 * @param string[]|null $properties  Optional. Additional properties for the event.
	 * @param float         $duration    Optional. Event duration.
	 */
	public function __construct( $name, $description = null, $properties = [], $duration = 0.0 ) {
		parent::__construct( $name, $description, $properties );
		$this->duration = $duration;
	}

	/**
	 * Set the event duration.
	 *
	 * @param float $duration Event duration.
	 */
	public function set_duration( $duration ) {
		$this->duration = $duration;
	}

	/**
	 * Get the event duration.
	 *
	 * @return float
	 */
	public function get_duration() {
		return $this->duration;
	}

	/**
	 * Get the server timing header string.
	 *
	 * @return string Server timing header string representing this event.
	 */
	public function get_header_string() {
		return sprintf(
			'%s;dur="%.1f"',
			parent::get_header_string(),
			$this->get_duration()
		);
	}
}
PK.3Y��qE55/bunyad-amp/src/Instrumentation/ServerTiming.php<?php
/**
 * Class ServerTiming.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Instrumentation;

use AMP_HTTP;
use AmpProject\AmpWP\Infrastructure\Delayed;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;

/**
 * Collect Server-Timing metrics.
 *
 * @package AmpProject\AmpWP
 * @since 2.0
 * @internal
 */
final class ServerTiming implements Service, Registerable, Delayed {

	/**
	 * Stop watch to use to recording the duration of events.
	 *
	 * @var StopWatch
	 */
	private $stopwatch;

	/**
	 * Whether to track all events, or only the non-verbose ones.
	 *
	 * @var bool
	 */
	private $verbose;

	/**
	 * Tracked events.
	 *
	 * @var Event[]
	 */
	private $events = [];

	/**
	 * Get the action to use for registering the service.
	 *
	 * @return string Registration action to use.
	 */
	public static function get_registration_action() {
		// Delayed because we need to access is_user_logged_in().
		return 'init';
	}

	/**
	 * ServerTiming constructor.
	 *
	 * @param StopWatch $stopwatch Stop watch to use to recording the duration
	 *                             of events.
	 * @param bool      $verbose   Optional. Whether to track all events, or
	 *                             only the non-verbose ones.
	 */
	public function __construct( StopWatch $stopwatch, $verbose = false ) {
		$this->stopwatch = $stopwatch;
		$this->verbose   = $verbose;
	}

	/**
	 * Register the service.
	 *
	 * @return void
	 */
	public function register() {
		add_action( 'amp_server_timing_start', [ $this, 'start' ], 10, 4 );
		add_action( 'amp_server_timing_stop', [ $this, 'stop' ], 10, 1 );
		add_action( 'amp_server_timing_log', [ $this, 'log' ], 10, 4 );
		add_action( 'amp_server_timing_send', [ $this, 'send' ], 10, 0 );
	}

	/**
	 * Start recording an event.
	 *
	 * @param string      $event_name        Name of the event to record.
	 * @param string|null $event_description Optional. Description of the event
	 *                                       to record. Defaults to null.
	 * @param string[]    $properties        Optional. Additional properties to add
	 *                                       to the logged record.
	 * @param bool        $verbose_only      Optional. Whether to only show the
	 *                                       event in verbose mode. Defaults to
	 *                                       false.
	 */
	public function start( $event_name, $event_description = null, $properties = [], $verbose_only = false ) {
		if ( $verbose_only && ! $this->verbose ) {
			return;
		}

		$this->events[ $event_name ] = new EventWithDuration(
			$event_name,
			$event_description,
			$properties
		);

		$this->stopwatch->start( $event_name );
	}

	/**
	 * Stop recording an event.
	 *
	 * @param string $event_name Name of the event to stop the recording of.
	 */
	public function stop( $event_name ) {
		if ( ! array_key_exists( $event_name, $this->events ) ) {
			return;
		}

		$stopwatch_event = $this->stopwatch->stop( $event_name );

		if ( $this->events[ $event_name ] instanceof EventWithDuration ) {
			$this->events[ $event_name ]->set_duration( $stopwatch_event->get_duration() );
		}
	}

	/**
	 * Log an event that does not have a duration.
	 *
	 * @param string   $event_name        Name of the event to log.
	 * @param string   $event_description Description of the event to log.
	 * @param string[] $properties        Optional. Additional properties to add
	 *                                    to the logged record.
	 * @param bool     $verbose_only      Optional. Whether to only show the
	 *                                    event in verbose mode.
	 */
	public function log( $event_name, $event_description = '', $properties = [], $verbose_only = false ) {
		if ( $verbose_only && ! $this->verbose ) {
			return;
		}

		$this->events[ $event_name ] = new Event(
			$event_name,
			$event_description,
			$properties
		);
	}

	/**
	 * Send the server-timing header.
	 */
	public function send() {
		AMP_HTTP::send_header( 'Server-Timing', $this->get_header_string() );
	}

	/**
	 * Get the server timing header string for all collected events.
	 *
	 * @return string Server timing header string.
	 */
	public function get_header_string() {
		return implode(
			',',
			array_map(
				static function ( Event $event ) {
					return $event->get_header_string();
				},
				$this->events
			)
		);
	}
}
PK.3Y���N,bunyad-amp/src/Instrumentation/StopWatch.php<?php
/**
 * Class StopWatch.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Instrumentation;

use AmpProject\AmpWP\Exception\InvalidStopwatchEvent;

/**
 * Record the timing of multiple events.
 *
 * @package AmpProject\AmpWP
 * @since 2.0
 * @internal
 */
final class StopWatch {

	/**
	 * Collection of named events that the stopwatch is tracking.
	 *
	 * @var StopWatchEvent[]
	 */
	private $events = [];

	/**
	 * Start a named event.
	 *
	 * @param string $name Name of the event to start.
	 */
	public function start( $name ) {
		$this->events[ $name ] = new StopWatchEvent();
	}

	/**
	 * Stop a named event.
	 *
	 * @param string $name Name of the event to stop.
	 * @return StopWatchEvent Completed stopwatch event.
	 * @throws InvalidStopwatchEvent If an unknown event name is provided.
	 */
	public function stop( $name ) {
		if ( ! array_key_exists( $name, $this->events ) ) {
			throw InvalidStopwatchEvent::from_name_to_stop( $name );
		}

		$event = $this->events[ $name ];
		$event->stop();

		return $event;
	}
}
PK.3Yo��1bunyad-amp/src/Instrumentation/StopWatchEvent.php<?php
/**
 * Class StopWatchEvent.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Instrumentation;

/**
 * Record the timing of a single event.
 *
 * @package AmpProject\AmpWP
 * @since 2.0
 * @internal
 */
final class StopWatchEvent {

	/**
	 * Start time in milliseconds.
	 *
	 * @var float
	 */
	private $start;

	/**
	 * End time in milliseconds.
	 *
	 * @var float|null
	 */
	private $end;

	/**
	 * StopWatchEvent constructor.
	 */
	public function __construct() {
		$this->start = $this->get_now();
	}

	/**
	 * Stop the event.
	 */
	public function stop() {
		$this->end = $this->get_now();
	}

	/**
	 * Get the duration of the event in milliseconds.
	 *
	 * @return float Duration in milliseconds.
	 */
	public function get_duration() {
		if ( null === $this->end ) {
			return 0.0;
		}

		return $this->end - $this->start;
	}

	/**
	 * Get the current time in milliseconds.
	 *
	 * @return float Current time in milliseconds.
	 */
	private function get_now() {
		return microtime( true ) * 1000;
	}
}
PK.3Yu�R�J
J
/bunyad-amp/src/Optimizer/AmpWPConfiguration.php<?php
/**
 * Class AmpWPConfiguration.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Optimizer;

use AmpProject\Optimizer\Configuration;
use AmpProject\Optimizer\DefaultConfiguration;
use AmpProject\Optimizer\Exception\UnknownConfigurationKey;
use AmpProject\Optimizer\Transformer;
use AmpProject\AmpWP\Optimizer\Transformer as WpTransformer;
use AmpProject\Optimizer\TransformerConfiguration;

/**
 * Optimizer Configuration implementation that is mutable and filterable.
 *
 * @package AmpProject\AmpWP
 * @since 2.1.0
 * @internal
 */
final class AmpWPConfiguration extends DefaultConfiguration {

	/**
	 * Whether the filters have already been applied.
	 *
	 * @var bool
	 */
	private $already_applied = false;

	/**
	 * Apply the filters to adapt the configuration.
	 *
	 * Note: They will only be applied once, when this method is hit for the first time.
	 */
	public function apply_filters() {
		if ( $this->already_applied ) {
			return;
		}

		$transformers = self::DEFAULT_TRANSFORMERS;

		/**
		 * Filter whether the AMP Optimizer should use server-side rendering or not.
		 *
		 * @since 1.5.0
		 *
		 * @param bool $enable_ssr Whether the AMP Optimizer should use server-side rendering or not.
		 */
		$enable_ssr = apply_filters( 'amp_enable_ssr', true );

		// In debugging mode, we don't use server-side rendering, as it further obfuscates the HTML markup.
		if ( ! $enable_ssr ) {
			$transformers = array_diff(
				$transformers,
				[
					Transformer\AmpRuntimeCss::class,
					Transformer\OptimizeAmpBind::class,
					Transformer\OptimizeHeroImages::class,
					Transformer\RewriteAmpUrls::class,
					Transformer\ServerSideRendering::class,
					Transformer\TransformedIdentifier::class,
				]
			);
		}

		array_unshift(
			$transformers,
			WpTransformer\DetermineHeroImages::class,
			WpTransformer\AmpSchemaOrgMetadata::class
		);

		$this->registerConfigurationClass(
			WpTransformer\AmpSchemaOrgMetadata::class,
			WpTransformer\AmpSchemaOrgMetadataConfiguration::class
		);

		/**
		 * Filter the configuration to be used for the AMP Optimizer.
		 *
		 * @since 1.5.0
		 *
		 * @param array $configuration Associative array of configuration data.
		 */
		$this->configuration = apply_filters(
			'amp_optimizer_config',
			[
				self::KEY_TRANSFORMERS                => $transformers,
				Transformer\OptimizeHeroImages::class => [
					Configuration\OptimizeHeroImagesConfiguration::INLINE_STYLE_BACKUP_ATTRIBUTE => 'data-amp-original-style',
					Configuration\OptimizeHeroImagesConfiguration::MAX_HERO_IMAGE_COUNT          => PHP_INT_MAX,
				],
			]
		);

		$this->already_applied = true;
	}

	/**
	 * Get the value for a given key from the configuration.
	 *
	 * @param string $key Configuration key to get the value for.
	 * @return mixed Configuration value for the requested key.
	 * @throws UnknownConfigurationKey If the key was not found.
	 */
	public function get( $key ) {
		$this->apply_filters();

		return parent::get( $key );
	}

	/**
	 * Get the transformer-specific configuration for the requested transformer.
	 *
	 * @param string $transformer FQCN of the transformer to get the configuration for.
	 * @return TransformerConfiguration Transformer-specific configuration.
	 */
	public function getTransformerConfiguration( $transformer ) {
		$this->apply_filters();

		return parent::getTransformerConfiguration( $transformer );
	}
}
PK.3Y�.AA3bunyad-amp/src/Optimizer/HeroCandidateFiltering.php<?php
/**
 * Class HeroCandidateFiltering.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Optimizer;

use AmpProject\AmpWP\Infrastructure\Conditional;
use AmpProject\AmpWP\Infrastructure\Delayed;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;
use AmpProject\Html\Attribute;
use WP_Post;

/**
 * Service which uses WordPress hooks to inject data-hero-candidate attributes on logos, headers, and the primary featured image.
 *
 * @package AmpProject\AmpWP
 * @since 2.1.0
 * @internal
 */
final class HeroCandidateFiltering implements Service, Delayed, Conditional, Registerable {

	/**
	 * Whether the Custom Logo has been filtered.
	 *
	 * This is set to true after the first filtering to prevent filtering the logo in the footer, for example.
	 *
	 * @var bool
	 */
	protected $custom_logo_filtered = false;

	/**
	 * Get the action to use for registering the service.
	 *
	 * @return string Registration action to use.
	 */
	public static function get_registration_action() {
		return 'wp';
	}

	/**
	 * Check whether the conditional object is currently needed.
	 *
	 * @return bool Whether the conditional object is needed.
	 */
	public static function is_needed() {
		return amp_is_request();
	}

	/**
	 * Register.
	 */
	public function register() {
		add_filter( 'get_custom_logo_image_attributes', [ $this, 'add_custom_logo_data_hero_candidate_attribute' ] );
		add_filter( 'get_header_image_tag', [ $this, 'filter_header_image_tag' ] );
		add_filter( 'wp_get_attachment_image_attributes', [ $this, 'filter_attachment_image_attributes' ], 10, 2 );
	}

	/**
	 * Add data-hero-candidate to attributes array.
	 *
	 * @param array $attrs Attributes.
	 * @return array Amended attributes.
	 */
	public function add_custom_logo_data_hero_candidate_attribute( $attrs ) {
		if ( ! $this->custom_logo_filtered ) {
			$attrs = $this->add_data_hero_candidate_attribute( $attrs );

			$this->custom_logo_filtered = true;
		}
		return $attrs;
	}

	/**
	 * Filter the header image tag HTML to inject the data-hero-candidate attribute.
	 *
	 * @param string $html Header tag.
	 * @return string header image tag.
	 */
	public function filter_header_image_tag( $html ) {
		return preg_replace(
			'/(?<=<img\s)/',
			Attribute::DATA_HERO_CANDIDATE . ' ',
			$html
		);
	}

	/**
	 * Filter attachment image attributes to inject data-hero-candidate for the primary featured image.
	 *
	 * Only the featured image for the singular queried object post or the first post in the loop will be identified.
	 *
	 * @param string[]     $attrs      Array of attribute values for the image markup, keyed by attribute name.
	 * @param WP_Post|null $attachment Image attachment post.
	 * @return string[] Filtered attributes.
	 */
	public function filter_attachment_image_attributes( $attrs, $attachment = null ) {
		global $wp_query;

		$post         = null;
		$queried_post = get_queried_object();
		if ( is_singular() && $queried_post instanceof WP_Post ) {
			$post = $queried_post;
		} elseif ( $wp_query->is_main_query() && isset( $wp_query->posts[0] ) ) {
			$post = $wp_query->posts[0];
		}

		if (
			$post instanceof WP_Post
			&&
			$attachment instanceof WP_Post
			&&
			(int) get_post_thumbnail_id( $post ) === $attachment->ID
		) {
			$attrs = $this->add_data_hero_candidate_attribute( $attrs );
		}
		return $attrs;
	}

	/**
	 * Add data-hero-candidate to attributes array.
	 *
	 * @param array $attrs Attributes.
	 * @return array Amended attributes.
	 */
	public function add_data_hero_candidate_attribute( $attrs ) {
		$attrs[ Attribute::DATA_HERO_CANDIDATE ] = '';
		return $attrs;
	}
}
PK.3Yօ6��-bunyad-amp/src/Optimizer/OptimizerService.php<?php
/**
 * Class OptimizerService.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Optimizer;

use AmpProject\AmpWP\Infrastructure\Service;
use AmpProject\Dom\Document;
use AmpProject\Optimizer\ErrorCollection;
use AmpProject\Optimizer\TransformationEngine;

/**
 * Optimizer service that wraps the AMP Optimizer's TransformationEngine.
 *
 * @package AmpProject\AmpWP
 * @since 2.1.0
 * @internal
 */
final class OptimizerService implements Service {

	/**
	 * @var TransformationEngine
	 */
	private $transformation_engine;

	/**
	 * OptimizerService constructor.
	 *
	 * @param TransformationEngine $transformation_engine Transformation engine instance to use.
	 */
	public function __construct( TransformationEngine $transformation_engine ) {
		$this->transformation_engine = $transformation_engine;
	}

	/**
	 * Apply transformations to the provided DOM document.
	 *
	 * @param Document        $document DOM document to apply the transformations to.
	 * @param ErrorCollection $errors   Collection of errors that are collected during transformation.
	 * @return void
	 */
	public function optimizeDom( Document $document, ErrorCollection $errors ) {
		$this->transformation_engine->optimizeDom( $document, $errors );
	}

	/**
	 * Apply transformations to the provided string of HTML markup.
	 *
	 * @param string          $html   HTML markup to apply the transformations to.
	 * @param ErrorCollection $errors Collection of errors that are collected during transformation.
	 * @return string Optimized HTML string.
	 */
	public function optimizeHtml( $html, ErrorCollection $errors ) {
		return $this->transformation_engine->optimizeHtml( $html, $errors );
	}
}
PK.3YTs��bb=bunyad-amp/src/Optimizer/Transformer/AmpSchemaOrgMetadata.php<?php
/**
 * Class AmpSchemaOrgMetadata.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Optimizer\Transformer;

use AmpProject\Dom\Document;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag;
use AmpProject\Optimizer\ErrorCollection;
use AmpProject\Optimizer\Transformer;
use AmpProject\Optimizer\TransformerConfiguration;

/**
 * Ensure there is a schema.org script in the document.
 *
 * @package AmpProject\AmpWP
 * @since 2.0
 * @internal
 */
final class AmpSchemaOrgMetadata implements Transformer {

	/**
	 * XPath query to use for fetching the schema.org meta script.
	 *
	 * @var string
	 */
	const SCHEMA_ORG_XPATH = '//script[ @type = "application/ld+json" ][ contains( ./text(), "schema.org" ) ]';

	/**
	 * Configuration object.
	 *
	 * @var TransformerConfiguration
	 */
	private $configuration;

	/**
	 * Instantiate a TransformedIdentifier object.
	 *
	 * @param TransformerConfiguration $configuration Configuration store to use.
	 */
	public function __construct( TransformerConfiguration $configuration ) {
		$this->configuration = $configuration;
	}

	/**
	 * Apply transformations to the provided DOM document.
	 *
	 * @param Document        $document DOM document to apply the transformations to.
	 * @param ErrorCollection $errors   Collection of errors that are collected during transformation.
	 * @return void
	 */
	public function transform( Document $document, ErrorCollection $errors ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
		// @todo How should we handle an existing schema.org script?
		$schema_org_meta_script = $document->xpath->query( self::SCHEMA_ORG_XPATH )->item( 0 );

		if ( $schema_org_meta_script ) {
			return;
		}

		$metadata = $this->configuration->get( AmpSchemaOrgMetadataConfiguration::METADATA );

		if ( ! $metadata ) {
			return;
		}

		$script = $document->createElement( Tag::SCRIPT );
		$script->setAttribute( Attribute::TYPE, Attribute::TYPE_LD_JSON );

		$json = wp_json_encode( $metadata, JSON_UNESCAPED_UNICODE );
		$script->appendChild( $document->createTextNode( $json ) );

		$document->head->appendChild( $script );
	}
}
PK.3Y�w��zzJbunyad-amp/src/Optimizer/Transformer/AmpSchemaOrgMetadataConfiguration.php<?php
/**
 * Class AmpSchemaOrgMetadataConfiguration.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Optimizer\Transformer;

use AmpProject\Optimizer\Configuration\BaseTransformerConfiguration;
use AmpProject\Optimizer\Exception\InvalidConfigurationValue;
use WP_Query;

/**
 * Configuration for the AmpSchemaOrgMetadata transformer.
 *
 * @property array $metadata Associative array of metadata.
 *
 * @package AmpProject\AmpWP
 * @since 2.0
 * @internal
 */
final class AmpSchemaOrgMetadataConfiguration extends BaseTransformerConfiguration {

	/**
	 * Configuration key that holds the version number to use.
	 *
	 * @var string
	 */
	const METADATA = 'metadata';

	/**
	 * Get the associative array of allowed keys and their respective default values.
	 *
	 * The array index is the key and the array value is the key's default value.
	 *
	 * @return array Associative array of allowed keys and their respective default values.
	 */
	protected function getAllowedKeys() {
		global $wp_query;

		// In WP-CLI context, the global query object can be null, which
		// throws a fatal in get_queried_object().
		if ( null === $wp_query ) {
			$wp_query = new WP_Query(); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
		}

		return [
			self::METADATA => [],
		];
	}

	/**
	 * Validate an individual configuration entry.
	 *
	 * @param string $key   Key of the configuration entry to validate.
	 * @param mixed  $value Value of the configuration entry to validate.
	 * @return mixed Validated value.
	 * @throws InvalidConfigurationValue If a provided configuration value was not valid.
	 */
	protected function validate( $key, $value ) {
		switch ( $key ) {
			case self::METADATA:
				if ( ! is_array( $value ) ) {
					throw InvalidConfigurationValue::forInvalidSubValueType( self::class, self::METADATA, 'array', gettype( $value ) );
				}
				break;
		}

		return $value;
	}
}
PK.3Y,jOMM<bunyad-amp/src/Optimizer/Transformer/DetermineHeroImages.php<?php
/**
 * Class DetermineHeroImages.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Optimizer\Transformer;

use AmpProject\Dom\Document;
use AmpProject\Dom\Element;
use AmpProject\Html\Attribute;
use AmpProject\Optimizer\ErrorCollection;
use AmpProject\Optimizer\ImageDimensions;
use AmpProject\Optimizer\Transformer;

/**
 * Determine the images to flag with data-hero-candidate so the Optimizer can prerender them.
 *
 * This transformer checks for the following images in the given order:
 * 1. Header images (including Custom Logo and Custom Header)
 * 2. Image which is descendant of first child of first entry content
 *
 * @package AmpProject\AmpWP
 * @since   2.1
 * @internal
 */
final class DetermineHeroImages implements Transformer {

	/**
	 * XPath query to find preceding images which are not lazy-loaded.
	 *
	 * @var string
	 */
	const PRECEDING_NON_LAZY_IMAGE_XPATH_QUERY = "preceding::amp-img[ not( @data-hero ) ][ not( noscript/img/@loading ) or noscript/img/@loading != 'lazy' ]";

	/**
	 * XPath query to find the first entry-content.
	 *
	 * Note that the 'entry-content' class name is the classic form for what the h-entry spec now has as 'e-content'.
	 * The 'amp-wp-article-content' class name is used in legacy Reader templates. Note that 'entry-content' isn't
	 * simply just added to templates/single.php and templates/page.php because these templates are frequently forked.
	 *
	 * @link https://microformats.org/wiki/h-entry
	 * @var string
	 */
	const FIRST_ENTRY_CONTENT_XPATH_QUERY = "
		.//*[ @class ][
			contains( concat( ' ', normalize-space( @class ), ' ' ), ' entry-content ' )
			or
			contains( concat( ' ', normalize-space( @class ), ' ' ), ' e-content ' )
			or
			contains( concat( ' ', normalize-space( @class ), ' ' ), ' amp-wp-article-content ' )
		]
	";

	/**
	 * XPath query to find an image at the beginning of entry content (including nested inside of another block).
	 *
	 * @var string
	 */
	const INITIAL_CONTENT_IMAGE_XPATH_QUERY = './*[1]//amp-img[ not( @data-hero ) ]';

	/**
	 * Apply transformations to the provided DOM document.
	 *
	 * @param Document        $document DOM document to apply the
	 *                                  transformations to.
	 * @param ErrorCollection $errors   Collection of errors that are collected
	 *                                  during transformation.
	 * @return void
	 */
	public function transform( Document $document, ErrorCollection $errors ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
		$hero_image_elements = [];

		foreach ( [ 'header_images', 'initial_content_image' ] as $hero_image_source ) {
			$candidate = null;

			switch ( $hero_image_source ) {
				case 'header_images':
					$candidate = $this->get_header_images( $document );
					break;
				case 'initial_content_image':
					$candidate = $this->get_initial_content_image( $document );
					break;
			}

			if ( $candidate instanceof Element ) {
				$hero_image_elements[ spl_object_hash( $candidate ) ] = $candidate;
			} elseif ( is_array( $candidate ) ) {
				foreach ( $candidate as $hero_image_element ) {
					$hero_image_elements[ spl_object_hash( $hero_image_element ) ] = $hero_image_element;
				}
			}
		}

		$this->add_data_hero_candidate_attribute(
			array_values( $hero_image_elements )
		);
	}

	/**
	 * Retrieve the images in the header.
	 *
	 * This returns all non-tiny images which occur before the main content, or else a tiny image that has `logo` in the
	 * class name.
	 *
	 * Note that the `HeroCandidateFiltering` service will have already identified the Header Image and Custom Logo for
	 * any theme using the standard `the_header_image_tag()` and `the_custom_logo()` template tags, respectively. This
	 * remains for here as a fallback to identify Header Images and Custom Logos being rendered via non-standard
	 * template tags.
	 *
	 * @see \AmpProject\AmpWP\Optimizer\HeroCandidateFiltering::add_custom_logo_data_hero_candidate_attribute()
	 * @see \AmpProject\AmpWP\Optimizer\HeroCandidateFiltering::filter_header_image_tag()
	 *
	 * @param Document $document Document to retrieve the header images from.
	 * @return Element[] Header images.
	 */
	private function get_header_images( Document $document ) {
		// Note that 3,508 out of 3,923 themes on WP.org  (89%) use the <main> element.
		$after_header_element = $document->getElementsByTagName( 'main' )->item( 0 );

		// If a theme happens to not use the <main> element, then fall back to using the first entry-content.
		if ( ! $after_header_element instanceof Element ) {
			$after_header_element = $this->get_first_entry_content( $document );
		}

		if ( ! $after_header_element instanceof Element ) {
			return [];
		}

		$query = $document->xpath->query(
			self::PRECEDING_NON_LAZY_IMAGE_XPATH_QUERY,
			$after_header_element
		);

		return array_filter(
			iterator_to_array( $query ),
			static function ( Element $element ) {
				// A custom logo may in fact be tiny and yet since it is in the header it should be prerendered.
				// Note that a theme may not be using `the_custom_logo()` template tag and that is why the `custom-logo`
				// class is not being checked for specifically.
				if (
					$element->hasAttribute( Attribute::CLASS_ )
					&&
					false !== strpos( $element->getAttribute( Attribute::CLASS_ ), 'logo' )
				) {
					return true;
				}

				return ! ( new ImageDimensions( $element ) )->isTiny();
			}
		);
	}

	/**
	 * Retrieve the first entry content.
	 *
	 * @param Document $document Document to retrieve the first entry content from.
	 * @return Element|null First entry content element.
	 */
	private function get_first_entry_content( Document $document ) {
		$query = $document->xpath->query(
			self::FIRST_ENTRY_CONTENT_XPATH_QUERY,
			$document->body
		);

		$entry_content = $query->item( 0 );
		return $entry_content instanceof Element ? $entry_content : null;
	}

	/**
	 * Retrieve the first image that is in the first position in content.
	 *
	 * @param Document $document Document to retrieve the image from.
	 * @return Element|null Image at the beginning of the first entry content.
	 */
	private function get_initial_content_image( Document $document ) {
		$entry_content = $this->get_first_entry_content( $document );
		if ( ! $entry_content instanceof Element ) {
			return null;
		}

		$query = $document->xpath->query(
			self::INITIAL_CONTENT_IMAGE_XPATH_QUERY,
			$entry_content
		);

		$image = $query->item( 0 );
		if ( $image instanceof Element && ! ( new ImageDimensions( $image ) )->isTiny() ) {
			return $image;
		}

		return null;
	}

	/**
	 * Add the data-hero attribute to viable hero images.
	 *
	 * @param Element[] $hero_image_elements Elements that are viable hero images.
	 */
	private function add_data_hero_candidate_attribute( $hero_image_elements ) {
		foreach ( $hero_image_elements as $hero_image_element ) {
			$hero_image_element->setAttribute( Attribute::DATA_HERO_CANDIDATE, null );
		}
	}
}
PK.3Yf�~m��>bunyad-amp/src/PairedUrlStructure/LegacyReaderUrlStructure.php<?php
/**
 * Class LegacyReaderUrlStructure.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\PairedUrlStructure;

use AmpProject\AmpWP\PairedUrlStructure;

/**
 * Descriptor for paired URL structures that end in `/amp/` path suffix for non-hierarchical posts and `?amp` for others.
 *
 * @package AmpProject\AmpWP
 * @since 2.1
 * @internal
 */
final class LegacyReaderUrlStructure extends PairedUrlStructure {

	/**
	 * Turn a given URL into a paired AMP URL.
	 *
	 * @param string $url URL (or REQUEST_URI).
	 * @return string AMP URL.
	 */
	public function add_endpoint( $url ) {
		// Make sure any existing AMP endpoint is removed.
		$url = $this->remove_endpoint( $url );

		$post_id = $this->url_to_postid( $url );
		if ( $post_id ) {
			/**
			 * Filters the AMP permalink to short-circuit normal generation.
			 *
			 * Returning a string value in this filter will bypass the `get_permalink()` from being called and the `amp_get_permalink` filter will not apply.
			 *
			 * @since 0.4
			 * @since 1.0 This filter only applies when using the legacy reader paired URL structure.
			 *
			 * @param false $url     Short-circuited URL.
			 * @param int   $post_id Post ID.
			 */
			$pre_url = apply_filters( 'amp_pre_get_permalink', false, $post_id );

			if ( is_string( $pre_url ) ) {
				return $pre_url;
			}
		}

		$parsed_url    = wp_parse_url( $url );
		$use_query_var = (
			// If there are existing query vars, then always use the amp query var as well.
			! empty( $parsed_url['query'] )
			||
			// If no post was found for the URL.
			! $post_id
			||
			// If the post type is hierarchical then the /amp/ endpoint isn't available.
			is_post_type_hierarchical( get_post_type( $post_id ) )
			||
			// Attachment pages don't accept the /amp/ endpoint.
			'attachment' === get_post_type( $post_id )
		);
		if ( $use_query_var ) {
			$amp_url = $this->paired_url->add_query_var( $url, '' );
		} else {
			$amp_url = $this->paired_url->add_path_suffix( $url );
		}

		if ( $post_id ) {
			/**
			 * Filters AMP permalink.
			 *
			 * @since 0.2
			 * @since 1.0 This filter only applies when using the legacy reader paired URL structure.
			 *
			 * @param string $amp_url AMP URL.
			 * @param int    $post_id Post ID.
			 */
			$amp_url = apply_filters( 'amp_get_permalink', $amp_url, $post_id );
		}

		return $amp_url;
	}

	/**
	 * Determine a given URL is for a paired AMP request.
	 *
	 * @param string $url URL (or REQUEST_URI).
	 * @return bool True if the AMP query parameter is set with the required value, false if not.
	 */
	public function has_endpoint( $url ) {
		return $this->paired_url->has_query_var( $url ) || $this->paired_url->has_path_suffix( $url );
	}

	/**
	 * Remove the paired AMP endpoint from a given URL.
	 *
	 * @param string $url URL (or REQUEST_URI).
	 * @return string URL with AMP stripped.
	 */
	public function remove_endpoint( $url ) {
		$url = $this->paired_url->remove_query_var( $url );
		$url = $this->paired_url->remove_path_suffix( $url );
		return $url;
	}

	/**
	 * Cached version of url_to_postid(), which can be expensive.
	 *
	 * Examine a url and try to determine the post ID it represents.
	 *
	 * This is copied from the WordPress.com VIP implementation.
	 *
	 * @link https://github.com/svn2github/wordpress-vip-plugins/blob/4d6f59f9839167d1c11f550610012493c7380dfe/vip-do-not-include-on-wpcom/wpcom-caching.php#L300-L331
	 * @see wpcom_vip_url_to_postid()
	 *
	 * @param string $url Permalink to check.
	 * @return int Post ID, or 0 on failure.
	 */
	private function url_to_postid( $url ) {
		// Can only run after init, since home_url() has not been filtered to the mapped domain prior to that,
		// which will cause url_to_postid() to fail.
		// See <https://vip.wordpress.com/documentation/vip-development-tips-tricks/home_url-vs-site_url/>.
		if ( ! did_action( 'init' ) ) {
			_doing_it_wrong( __METHOD__, 'must be called after the init action, as home_url() has not yet been filtered', '' );
			return 0;
		}

		// Sanity check; no URLs not from this site.
		$host = wp_parse_url( $url, PHP_URL_HOST );
		if ( $host && wp_parse_url( home_url(), PHP_URL_HOST ) !== $host ) {
			return 0;
		}

		$cache_key = md5( $url );
		$post_id   = wp_cache_get( $cache_key, 'url_to_postid' );

		if ( false === $post_id ) {
			$post_id = url_to_postid( $url ); // phpcs:ignore WordPressVIPMinimum.Functions.RestrictedFunctions.url_to_postid_url_to_postid -- This method implements the caching.
			wp_cache_set( $cache_key, $post_id, 'url_to_postid', 3 * HOUR_IN_SECONDS );
		}

		return $post_id;
	}
}
PK.3Y�0+��Dbunyad-amp/src/PairedUrlStructure/LegacyTransitionalUrlStructure.php<?php
/**
 * Class LegacyTransitionalUrlStructure.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\PairedUrlStructure;

use AmpProject\AmpWP\PairedUrlStructure;

/**
 * Descriptor for paired URL structures that end in `?amp`.
 *
 * @package AmpProject\AmpWP
 * @since 2.1
 * @internal
 */
final class LegacyTransitionalUrlStructure extends PairedUrlStructure {

	/**
	 * Turn a given URL into a paired AMP URL.
	 *
	 * @param string $url URL (or REQUEST_URI).
	 * @return string AMP URL.
	 */
	public function add_endpoint( $url ) {
		return $this->paired_url->add_query_var( $url, '' );
	}

	/**
	 * Determine a given URL is for a paired AMP request.
	 *
	 * @param string $url URL (or REQUEST_URI).
	 * @return bool True if the AMP query parameter is set with the required value, false if not.
	 */
	public function has_endpoint( $url ) {
		return $this->paired_url->has_query_var( $url );
	}

	/**
	 * Remove the paired AMP endpoint from a given URL.
	 *
	 * @param string $url URL (or REQUEST_URI).
	 * @return string URL with AMP stripped.
	 */
	public function remove_endpoint( $url ) {
		return $this->paired_url->remove_query_var( $url );
	}
}
PK.3YX9<bunyad-amp/src/PairedUrlStructure/PathSuffixUrlStructure.php<?php
/**
 * Class PathSuffixUrlStructure.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\PairedUrlStructure;

use AmpProject\AmpWP\PairedUrlStructure;

/**
 * Descriptor for paired URL structures that end in `/amp/` path suffix.
 *
 * @package AmpProject\AmpWP
 * @since 2.1
 * @internal
 */
final class PathSuffixUrlStructure extends PairedUrlStructure {

	/**
	 * Turn a given URL into a paired AMP URL.
	 *
	 * @param string $url URL (or REQUEST_URI).
	 * @return string AMP URL.
	 */
	public function add_endpoint( $url ) {
		return $this->paired_url->add_path_suffix( $url );
	}

	/**
	 * Determine a given URL is for a paired AMP request.
	 *
	 * @param string $url URL (or REQUEST_URI).
	 * @return bool True if the AMP query parameter is set with the required value, false if not.
	 */
	public function has_endpoint( $url ) {
		return $this->paired_url->has_path_suffix( $url ) || $this->paired_url->has_query_var( $url );
	}

	/**
	 * Remove the paired AMP endpoint from a given URL.
	 *
	 * @param string $url URL (or REQUEST_URI).
	 * @return string URL with AMP stripped.
	 */
	public function remove_endpoint( $url ) {
		$url = $this->paired_url->remove_path_suffix( $url );
		$url = $this->paired_url->remove_query_var( $url );
		return $url;
	}
}
PK.3Y�,�$ww:bunyad-amp/src/PairedUrlStructure/QueryVarUrlStructure.php<?php
/**
 * Class QueryVarUrlStructure.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\PairedUrlStructure;

use AmpProject\AmpWP\PairedUrlStructure;

/**
 * Descriptor for paired URL structures that include the `?amp=1` query parameter.
 *
 * A query parameter is also known as a query arg and a query var. Given prior usage of "query var" in the codebase,
 * the slug for the paired URL structure is `query_var` whereas in the UI it is presented as "query parameter".
 *
 * @package AmpProject\AmpWP
 * @since 2.1
 * @internal
 */
final class QueryVarUrlStructure extends PairedUrlStructure {

	/**
	 * Turn a given URL into a paired AMP URL.
	 *
	 * @param string $url URL (or REQUEST_URI).
	 * @return string AMP URL.
	 */
	public function add_endpoint( $url ) {
		return $this->paired_url->add_query_var( $url );
	}

	/**
	 * Determine a given URL is for a paired AMP request.
	 *
	 * @param string $url URL (or REQUEST_URI).
	 * @return bool True if the AMP query parameter is set with the required value, false if not.
	 */
	public function has_endpoint( $url ) {
		return $this->paired_url->has_query_var( $url );
	}

	/**
	 * Remove the paired AMP endpoint from a given URL.
	 *
	 * @param string $url URL (or REQUEST_URI).
	 * @return string URL with AMP stripped.
	 */
	public function remove_endpoint( $url ) {
		return $this->paired_url->remove_query_var( $url );
	}
}
PK.3YmqC���7bunyad-amp/src/RemoteRequest/CachedRemoteGetRequest.php<?php
/**
 * Class CachedRemoteGetRequest.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\RemoteRequest;

use AmpProject\Exception\FailedToGetCachedResponse;
use AmpProject\Exception\FailedToGetFromRemoteUrl;
use AmpProject\RemoteGetRequest;
use AmpProject\RemoteRequest\RemoteGetRequestResponse;
use AmpProject\Response;
use DateTimeImmutable;
use DateTimeInterface;

/**
 * Caching decorator for RemoteGetRequest implementations.
 *
 * Caching uses WordPress transients.
 *
 * @package AmpProject\AmpWP
 * @since 2.0
 * @internal
 */
final class CachedRemoteGetRequest implements RemoteGetRequest {

	/**
	 * Prefix to use to identify transients.
	 *
	 * @var string
	 */
	const TRANSIENT_PREFIX = 'amp_remote_request_';

	/**
	 * Cache control header directive name.
	 *
	 * @var string
	 */
	const CACHE_CONTROL = 'Cache-Control';

	/**
	 * Remote request object to decorate with caching.
	 *
	 * @var RemoteGetRequest
	 */
	private $remote_request;

	/**
	 * Cache expiration time in seconds.
	 *
	 * This will be used by default for successful requests when the 'cache-control: max-age' was not provided.
	 *
	 * @var int
	 */
	private $expiry;

	/**
	 * Minimum cache expiration time in seconds.
	 *
	 * This will be used for failed requests, or for successful requests when the 'cache-control: max-age' is inferior.
	 * Caching will never expire quicker than this minimum.
	 *
	 * @var int
	 */
	private $min_expiry;

	/**
	 * Whether to use Cache-Control headers to decide on expiry times if available.
	 *
	 * @var bool
	 */
	private $use_cache_control;

	/**
	 * Instantiate a CachedRemoteGetRequest object.
	 *
	 * This is a decorator that can wrap around an existing remote request object to add a caching layer.
	 *
	 * @param RemoteGetRequest $remote_request    Remote request object to decorate with caching.
	 * @param int|float        $expiry            Optional. Default cache expiry in seconds. Defaults to 30 days.
	 * @param int|float        $min_expiry        Optional. Default enforced minimum cache expiry in seconds. Defaults
	 *                                            to 24 hours.
	 * @param bool             $use_cache_control Optional. Use Cache-Control headers for expiry if available. Defaults
	 *                                            to true.
	 */
	public function __construct(
		RemoteGetRequest $remote_request,
		$expiry = MONTH_IN_SECONDS,
		$min_expiry = DAY_IN_SECONDS,
		$use_cache_control = true
	) {
		$this->remote_request    = $remote_request;
		$this->expiry            = (int) $expiry;
		$this->min_expiry        = (int) $min_expiry;
		$this->use_cache_control = (bool) $use_cache_control;
	}

	/**
	 * Do a GET request to retrieve the contents of a remote URL.
	 *
	 * @todo Should this also respect additional Cache-Control directives like 'no-cache'?
	 *
	 * @param string $url     URL to get.
	 * @param array  $headers Optional. Associative array of headers to send with the request. Defaults to empty array.
	 * @return Response Response for the executed request.
	 * @throws FailedToGetCachedResponse If retrieving the contents from the URL failed.
	 */
	public function get( $url, $headers = [] ) {
		$cache_key       = self::TRANSIENT_PREFIX . md5( __CLASS__ . $url );
		$cached_response = get_transient( $cache_key );
		$headers         = [];

		if ( is_string( $cached_response ) ) {
			if ( PHP_MAJOR_VERSION >= 7 ) {
				$cached_response = unserialize( $cached_response, [ CachedResponse::class, DateTimeImmutable::class ] ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_unserialize,PHPCompatibility.FunctionUse.NewFunctionParameters.unserialize_optionsFound
			} else {
				// PHP 5.6 does not provide the second $options argument yet.
				$cached_response = unserialize( $cached_response ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_unserialize
			}
		}

		if ( ! $cached_response instanceof CachedResponse || $cached_response->is_expired() ) {
			try {
				$response = $this->remote_request->get( $url, $headers );
				$status   = $response->getStatusCode();
				/** @var DateTimeImmutable $expiry */
				$expiry  = $this->get_expiry_time( $response );
				$headers = $response->getHeaders();
				$body    = $response->getBody();
			} catch ( FailedToGetFromRemoteUrl $exception ) {
				$status = $exception->getStatusCode();
				$expiry = new DateTimeImmutable( "+ {$this->min_expiry} seconds" );
				$body   = $exception->getMessage();
			}

			$cached_response = new CachedResponse( $body, $headers, $status, $expiry );

			// Transient extend beyond cache expiry to allow for serving stale content.
			// @TODO: We don't serve stale content atm, but rather synchronously refresh.
			// See https://github.com/ampproject/amp-wp/issues/5477.
			$transient_expiry = $expiry->modify( "+ {$this->expiry} seconds" );
			set_transient( $cache_key, serialize( $cached_response ), $transient_expiry->getTimestamp() ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize
		}

		if ( ! $cached_response->is_valid() ) {
			throw new FailedToGetCachedResponse( $url );
		}

		return new RemoteGetRequestResponse( $cached_response->get_body(), $cached_response->get_headers(), $cached_response->get_status_code() );
	}

	/**
	 * Get the expiry time of the data to cache.
	 *
	 * This will use the cache-control header information in the provided response or fall back to the provided default
	 * expiry.
	 *
	 * @param Response $response Response object to get the expiry from.
	 * @return DateTimeInterface Expiry of the data.
	 */
	private function get_expiry_time( Response $response ) {
		if ( $this->use_cache_control && $response->hasHeader( self::CACHE_CONTROL ) ) {
			$expiry = max( $this->min_expiry, $this->get_max_age( $response->getHeader( self::CACHE_CONTROL ) ) );
			return new DateTimeImmutable( "+ {$expiry} seconds" );
		}

		return new DateTimeImmutable( "+ {$this->expiry} seconds" );
	}

	/**
	 * Get the max age setting from one or more cache-control header strings.
	 *
	 * @param array|string $cache_control_strings One or more cache control header strings.
	 * @return int Value of the max-age cache directive. 0 if not found.
	 */
	private function get_max_age( $cache_control_strings ) {
		$max_age = 0;

		foreach ( (array) $cache_control_strings as $cache_control_string ) {
			$cache_control_parts = array_map( 'trim', explode( ',', $cache_control_string ) );

			foreach ( $cache_control_parts as $cache_control_part ) {
				$cache_control_setting_parts = array_map( 'trim', explode( '=', $cache_control_part ) );

				if ( count( $cache_control_setting_parts ) !== 2 ) {
					continue;
				}

				if ( 'max-age' === $cache_control_setting_parts[0] ) {
					$max_age = absint( $cache_control_setting_parts[1] );
				}
			}
		}

		return $max_age;
	}
}
PK.3Yf�{{		/bunyad-amp/src/RemoteRequest/CachedResponse.php<?php
/**
 * Class CachedResponse.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\RemoteRequest;

use DateTimeImmutable;
use DateTimeInterface;

/**
 * Serializable object that represents a cached response together with its expiry time.
 *
 * @package AmpProject\AmpWP
 * @since 2.0
 * @internal
 */
final class CachedResponse {

	/**
	 * Cached body.
	 *
	 * @var string
	 */
	private $body;

	/**
	 * Cached headers.
	 *
	 * @var array
	 */
	private $headers;

	/**
	 * Cached status code.
	 *
	 * @var int
	 */
	private $status_code;

	/**
	 * Expiry time of the cached value.
	 *
	 * @var DateTimeInterface
	 */
	private $expiry;

	/**
	 * Instantiate a CachedResponse object.
	 *
	 * @param string            $body         Cached body.
	 * @param string[]          $headers      Associative array of cached headers.
	 * @param int               $status_code  Cached status code.
	 * @param DateTimeInterface $expiry       Expiry of the cached value.
	 */
	public function __construct( $body, $headers, $status_code, DateTimeInterface $expiry ) {
		$this->body        = (string) $body;
		$this->headers     = (array) $headers;
		$this->status_code = (int) $status_code;
		$this->expiry      = $expiry;
	}

	/**
	 * Get the cached body.
	 *
	 * @return string Cached body.
	 */
	public function get_body() {
		return $this->body;
	}

	/**
	 * Get the cached headers.
	 *
	 * @return string[] Cached headers.
	 */
	public function get_headers() {
		return $this->headers;
	}

	/**
	 * Get the cached status code.
	 *
	 * @return int Cached status code.
	 */
	public function get_status_code() {
		return $this->status_code;
	}

	/**
	 * Determine the validity of the cached response.
	 *
	 * @return bool Whether the cached response is valid.
	 */
	public function is_valid() {
		// Values are already typed, so we just control the status code for validity.
		return $this->status_code > 100 && $this->status_code <= 599;
	}

	/**
	 * Get the expiry of the cached value.
	 *
	 * @return DateTimeInterface Expiry of the cached value.
	 */
	public function get_expiry() {
		return $this->expiry;
	}

	/**
	 * Check whether the cached value is expired.
	 *
	 * @return bool Whether the cached value is expired.
	 */
	public function is_expired() {
		return new DateTimeImmutable( 'now' ) > $this->expiry;
	}
}
PK.3Y�v�hh7bunyad-amp/src/RemoteRequest/WpHttpRemoteGetRequest.php<?php
/**
 * Class WpHttpRemoteGetRequest.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\RemoteRequest;

use AmpProject\Exception\FailedToGetFromRemoteUrl;
use AmpProject\RemoteGetRequest;
use AmpProject\RemoteRequest\RemoteGetRequestResponse;
use AmpProject\Response;
use Traversable;
use WP_Error;
use WP_Http;

/**
 * Remote request transport using the WordPress WP_Http abstraction layer.
 *
 * @package AmpProject\AmpWP
 * @since 2.0
 * @internal
 */
final class WpHttpRemoteGetRequest implements RemoteGetRequest {

	/**
	 * Default timeout value to use in seconds.
	 *
	 * @var int
	 */
	const DEFAULT_TIMEOUT = 5;

	/**
	 * Default number of retry attempts to do.
	 *
	 * @var int
	 */
	const DEFAULT_RETRIES = 2;

	/**
	 * List of HTTP status codes that are worth retrying for.
	 *
	 * @var int[]
	 */
	const RETRYABLE_STATUS_CODES = [
		WP_Http::REQUEST_TIMEOUT,
		WP_Http::LOCKED,
		WP_Http::TOO_MANY_REQUESTS,
		WP_Http::INTERNAL_SERVER_ERROR,
		WP_Http::SERVICE_UNAVAILABLE,
		WP_Http::GATEWAY_TIMEOUT,
	];

	/**
	 * Whether to verify SSL certificates or not.
	 *
	 * @var boolean
	 */
	private $ssl_verify;

	/**
	 * Timeout value to use in seconds.
	 *
	 * @var int
	 */
	private $timeout;

	/**
	 * Number of retry attempts to do for an error that is worth retrying.
	 *
	 * @var int
	 */
	private $retries;

	/**
	 * Instantiate a WpHttpRemoteGetRequest object.
	 *
	 * @param bool $ssl_verify Optional. Whether to verify SSL certificates. Defaults to true.
	 * @param int  $timeout    Optional. Timeout value to use in seconds. Defaults to 10.
	 * @param int  $retries    Optional. Number of retry attempts to do if a status code was thrown that is worth
	 *                         retrying. Defaults to 2.
	 */
	public function __construct( $ssl_verify = true, $timeout = self::DEFAULT_TIMEOUT, $retries = self::DEFAULT_RETRIES ) {
		if ( ! is_int( $timeout ) || $timeout < 0 ) {
			$timeout = self::DEFAULT_TIMEOUT;
		}

		if ( ! is_int( $retries ) || $retries < 0 ) {
			$retries = self::DEFAULT_RETRIES;
		}

		$this->ssl_verify = $ssl_verify;
		$this->timeout    = $timeout;
		$this->retries    = $retries;
	}

	/**
	 * Do a GET request to retrieve the contents of a remote URL.
	 *
	 * @param string $url     URL to get.
	 * @param array  $headers Optional. Associative array of headers to send with the request. Defaults to empty array.
	 * @return Response Response for the executed request.
	 * @throws FailedToGetFromRemoteUrl If retrieving the contents from the URL failed.
	 */
	public function get( $url, $headers = [] ) {
		$retries_left = $this->retries;
		do {
			$args = [
				'method'    => 'GET',
				'timeout'   => $this->timeout,
				'sslverify' => $this->ssl_verify,
				'headers'   => $headers,
			];

			$response = wp_remote_get( $url, $args );

			if ( $response instanceof WP_Error ) {
				return new RemoteGetRequestResponse( $response->get_error_message(), [], 500 );
			}

			if ( empty( $response['response']['code'] ) ) {
				return new RemoteGetRequestResponse(
					! empty( $response['response']['message'] ) ? $response['response']['message'] : 'Unknown error',
					[],
					500
				);
			}

			$status = $response['response']['code'];

			if ( $status < 200 || $status >= 300 ) {
				if ( ! $retries_left || in_array( $status, self::RETRYABLE_STATUS_CODES, true ) === false ) {
					throw FailedToGetFromRemoteUrl::withHttpStatus( $url, $status );
				}

				continue;
			}

			$headers = $response['headers'];

			if ( $headers instanceof Traversable ) {
				$headers = iterator_to_array( $headers );
			}

			if ( ! is_array( $headers ) ) {
				$headers = [];
			}

			return new RemoteGetRequestResponse( $response['body'], $headers, (int) $status );
		} while ( $retries_left-- );

		// This should never be triggered, but we want to ensure we always have a typed return value,
		// to make PHPStan happy.
		return new RemoteGetRequestResponse( '', [], 500 );
	}
}
PK.3Y�����,bunyad-amp/src/Support/SupportCliCommand.php<?php
/**
 * CLI command for support request.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Support;

use AmpProject\AmpWP\Infrastructure\CliCommand;
use AmpProject\AmpWP\Infrastructure\Injector;
use AmpProject\AmpWP\Infrastructure\Service;
use WP_CLI;
use function WP_CLI\Utils\get_flag_value;

/**
 * Service class for support.
 *
 * @internal
 * @since 2.2
 */
class SupportCliCommand implements Service, CliCommand {

	/**
	 * Injector.
	 *
	 * @var Injector
	 */
	private $injector;

	/**
	 * Class constructor.
	 *
	 * @param Injector $injector Injector.
	 */
	public function __construct( Injector $injector ) {

		$this->injector = $injector;
	}

	/**
	 * Get the name under which to register the CLI command.
	 *
	 * @return string The name under which to register the CLI command.
	 */
	public static function get_command_name() {

		return 'amp support';
	}

	/**
	 * Sends support data to endpoint.
	 *
	 * ## OPTIONS
	 *
	 * [--is-synthetic]
	 * : Whether or not it is synthetic data.
	 * ---
	 * default: false
	 * options:
	 *   - true
	 *   - false
	 *
	 * [--print]
	 * : To print support data.
	 * ---
	 * default: json-pretty
	 * options:
	 *   - json
	 *   - json-pretty
	 *
	 * [--endpoint=<string>]
	 * : Support endpoint. Where support data will send.
	 *
	 * [--urls=<urls>]
	 * : List of URL for which support data need to send. Use comma separator for multiple URLs.
	 *
	 * [--post_ids=<post_ids>]
	 * : List of Post for which support data need to send. Use comma separator for multiple post ids.
	 *
	 * [--term_ids=<term_ids>]
	 * : List of term for which support data need to send. Use comma separator for multiple term ids.
	 *
	 * ## EXAMPLES
	 *
	 *     wp amp support send-diagnostic
	 *
	 * @subcommand send-diagnostic
	 *
	 * @codeCoverageIgnore
	 *
	 * @param array $args       Positional args.
	 * @param array $assoc_args Associative args.
	 */
	public function send_diagnostic( /** @noinspection PhpUnusedParameterInspection */ $args, $assoc_args ) {

		$is_print     = filter_var( get_flag_value( $assoc_args, 'print', false ), FILTER_SANITIZE_STRING );
		$is_synthetic = filter_var( get_flag_value( $assoc_args, 'is-synthetic', false ), FILTER_SANITIZE_STRING );
		$endpoint     = filter_var( get_flag_value( $assoc_args, 'endpoint', '' ), FILTER_SANITIZE_STRING );
		$endpoint     = untrailingslashit( $endpoint );

		$urls     = filter_var( get_flag_value( $assoc_args, 'urls', false ), FILTER_SANITIZE_STRING );
		$post_ids = filter_var( get_flag_value( $assoc_args, 'post_ids', false ), FILTER_SANITIZE_STRING );
		$term_ids = filter_var( get_flag_value( $assoc_args, 'term_ids', false ), FILTER_SANITIZE_STRING );

		$args = [
			'urls'         => ( ! empty( $urls ) ) ? explode( ',', $urls ) : [],
			'post_ids'     => ( ! empty( $post_ids ) ) ? explode( ',', $post_ids ) : [],
			'term_ids'     => ( ! empty( $term_ids ) ) ? explode( ',', $term_ids ) : [],
			'endpoint'     => $endpoint,
			'is_synthetic' => $is_synthetic,
		];

		$support_data = $this->injector->make( SupportData::class, [ 'args' => $args ] );
		$data         = $support_data->get_data();

		if ( $is_print ) {

			// Print the data.
			$print = strtolower( trim( $is_print ) );
			if ( 'json' === $print ) {
				echo wp_json_encode( $data ) . PHP_EOL;
			} else {
				echo wp_json_encode( $data, JSON_PRETTY_PRINT ) . PHP_EOL;
			}
		} else {

			$response = $support_data->send_data();

			if ( is_wp_error( $response ) ) {
				$error_message = $response->get_error_message();
				WP_CLI::warning( "Something went wrong: $error_message" );
			} elseif ( empty( $response['status'] ) || 'ok' !== $response['status'] ) {
				WP_CLI::warning( 'Failed to send diagnostic data.' );
			} elseif ( isset( $response['data']['uuid'] ) ) {
				WP_CLI::success( 'UUID : ' . $response['data']['uuid'] );
			}
		}

		/*
		 * Summary of data.
		 */
		$url_error_relationship = [];

		foreach ( $data['urls'] as $url ) {
			foreach ( $url['errors'] as $error ) {
				foreach ( $error['sources'] as $source ) {
					$url_error_relationship[] = $url['url'] . '-' . $error['error_slug'] . '-' . $source;
				}
			}
		}

		$plugin_count = count( $data['plugins'] );

		if ( $is_synthetic ) {
			$plugin_count_text = ( $plugin_count - 3 ) . " - Excluding common plugins of synthetic sites. ( $plugin_count - 3 )";
		} else {
			$plugin_count_text = $plugin_count;
		}

		$summary = [
			'Site URL'               => SupportData::get_home_url(),
			'Plugin count'           => $plugin_count_text,
			'Themes'                 => count( $data['themes'] ),
			'Errors'                 => count( array_values( $data['errors'] ) ),
			'Error Sources'          => count( array_values( $data['error_sources'] ) ),
			'Validated URL'          => count( array_values( $data['urls'] ) ),
			'URL Error Relationship' => count( array_values( $url_error_relationship ) ),
		];

		if ( $is_synthetic ) {
			$summary['Synthetic Data'] = 'Yes';
		}

		WP_CLI::log( sprintf( PHP_EOL . "%'=100s", '' ) );
		WP_CLI::log( 'Summary of AMP data' );
		WP_CLI::log( sprintf( "%'=100s", '' ) );
		foreach ( $summary as $key => $value ) {
			WP_CLI::log( sprintf( '%-25s : %s', $key, $value ) );
		}
		WP_CLI::log( sprintf( "%'=100s" . PHP_EOL, '' ) );
	}
}
PK.3Y��6�PwPw&bunyad-amp/src/Support/SupportData.php<?php
/**
 * Class to prepare and send support data to insights server.
 *
 * @package AmpProject\AmpWP
 */

namespace AmpProject\AmpWP\Support;

use AMP_Options_Manager;
use AMP_Validated_URL_Post_Type;
use AMP_Validation_Manager;
use WP_Error;
use WP_Post;
use WP_Query;
use WP_Site_Health;
use WP_Term;
use WP_Theme;

/**
 * Class SupportData
 * To prepare and send support data to insights server.
 *
 * @internal
 * @since 2.2
 */
class SupportData {

	/**
	 * Endpoint to send diagnostic data.
	 *
	 * @since 2.2
	 *
	 * @var string
	 */
	const SUPPORT_ENDPOINT = 'https://insights.amp-wp.org';

	/**
	 * Args for AMP send data.
	 *
	 * @since 2.2
	 *
	 * @var array [
	 *     @type string[] $urls                   Optional
	 *     @type int[]    $term_ids               Optional
	 *     @type int[]    $post_ids               Optional
	 *     @type int[]    $amp_validated_post_ids Optional
	 * ]
	 */
	public $args = [];

	/**
	 * List of URL to send data.
	 *
	 * @since 2.2
	 *
	 * @var string[]
	 */
	public $urls = [];

	/**
	 * Support Data.
	 *
	 * @var array
	 */
	private $data = [];

	/**
	 * Constructor method.
	 *
	 * @since 2.2
	 *
	 * @param array $args Arguments for AMP Send data.
	 */
	public function __construct( $args = [] ) {
		$this->args = ( ! empty( $args ) && is_array( $args ) ) ? $args : [];

		$this->parse_args();

		$this->data = [];
	}

	/**
	 * To parse args for AMP data that will send.
	 *
	 * @since 2.2
	 *
	 * @return void
	 */
	public function parse_args() {

		if ( ! empty( $this->args['urls'] ) && is_array( $this->args['urls'] ) ) {
			$this->urls = array_merge( $this->urls, $this->args['urls'] );
		}

		if ( ! empty( $this->args['term_ids'] ) && is_array( $this->args['term_ids'] ) ) {
			$this->args['term_ids'] = array_map( 'intval', $this->args['term_ids'] );
			$this->args['term_ids'] = array_filter( $this->args['term_ids'] );

			foreach ( $this->args['term_ids'] as $term_id ) {
				$url = get_term_link( $term_id );

				if ( ! empty( $url ) && ! is_wp_error( $url ) ) {
					$this->urls[] = $url;
				}
			}
		}

		if ( ! empty( $this->args['post_ids'] ) && is_array( $this->args['post_ids'] ) ) {

			$this->args['post_ids'] = array_map( 'intval', $this->args['post_ids'] );
			$this->args['post_ids'] = array_filter( $this->args['post_ids'] );

			foreach ( $this->args['post_ids'] as $post_id ) {

				$url = get_permalink( $post_id );

				if ( ! empty( $url ) && ! is_wp_error( $url ) ) {
					$this->urls[] = $url;
				}
			}
		}

		if ( ! empty( $this->args['amp_validated_post_ids'] ) && is_array( $this->args['amp_validated_post_ids'] ) ) {
			$this->args['amp_validated_post_ids'] = array_map( 'intval', $this->args['amp_validated_post_ids'] );
			$this->args['amp_validated_post_ids'] = array_filter( $this->args['amp_validated_post_ids'] );

			foreach ( $this->args['amp_validated_post_ids'] as $post_id ) {
				$post = get_post( $post_id );

				if ( ! empty( $post->post_title ) ) {
					$this->urls[] = $post->post_title;
				}
			}
		}

		$this->urls = array_map(
			static function ( $url ) {

				if ( filter_var( $url, FILTER_VALIDATE_URL ) ) {
					return AMP_Validated_URL_Post_Type::normalize_url_for_storage( $url );
				}

				return false;
			},
			$this->urls
		);
		$this->urls = array_values( array_unique( array_filter( $this->urls ) ) );

	}

	/**
	 * To send support data to insight server.
	 *
	 * @return array|WP_Error WP_Error on fail, Otherwise server response.
	 */
	public function send_data() {

		$data     = ( ! empty( $this->data ) ) ? $this->data : $this->get_data();
		$endpoint = ( ! empty( $this->args['endpoint'] ) ) ? $this->args['endpoint'] : self::SUPPORT_ENDPOINT;
		$endpoint = untrailingslashit( $endpoint );

		// Send data to server.
		$response = wp_remote_post(
			sprintf( '%s/api/v1/support/', $endpoint ),
			[
				// We need long timeout here, in case the data being sent is large or the network connection is slow.
				'timeout'  => 30, // phpcs:ignore WordPressVIPMinimum.Performance.RemoteRequestTimeout.timeout_timeout
				'body'     => $data,
				'compress' => true,
			]
		);

		if ( ! is_wp_error( $response ) ) {

			$response_body   = wp_remote_retrieve_body( $response );
			$response        = json_decode( $response_body, true );
			$json_last_error = json_last_error();

			if ( JSON_ERROR_NONE !== $json_last_error ) {
				return new WP_Error(
					'malformed_json_amp_insight_endpoint',
					json_last_error_msg()
				);
			}
		}

		return $response;
	}

	/**
	 * To get amp data to send it to compatibility server.
	 *
	 * @since 2.2
	 *
	 * @return array
	 */
	public function get_data() {

		$amp_urls = $this->get_amp_urls();

		$request_data = [
			'site_url'      => static::get_home_url(),
			'site_info'     => $this->get_site_info(),
			'plugins'       => $this->get_plugin_info(),
			'themes'        => $this->get_theme_info(),
			'errors'        => array_values( $amp_urls['errors'] ),
			'error_sources' => array_values( $amp_urls['error_sources'] ),
			'urls'          => array_values( $amp_urls['urls'] ),
			'error_log'     => $this->get_error_log(),
		];

		if ( ! empty( $this->args['is_synthetic'] ) ) {
			$request_data['site_info']['is_synthetic_data'] = true;
		}

		$this->data = $request_data;

		return $request_data;
	}

	/**
	 * To get site info.
	 *
	 * @since 2.2
	 *
	 * @return array Site information.
	 */
	public function get_site_info() {

		global $wpdb;

		$wp_type = 'single';

		if ( is_multisite() && ( defined( 'SUBDOMAIN_INSTALL' ) && SUBDOMAIN_INSTALL ) ) {
			$wp_type = 'subdomain';
		} elseif ( is_multisite() ) {
			$wp_type = 'subdir';
		}

		$active_theme = wp_get_theme();
		$active_theme = static::normalize_theme_info( $active_theme );

		$amp_settings = AMP_Options_Manager::get_options();
		$amp_settings = ( ! empty( $amp_settings ) && is_array( $amp_settings ) ) ? $amp_settings : [];

		$loopback_status = '';

		if ( class_exists( 'WP_Site_Health' ) ) {
			$loopback_status = ( new WP_Site_Health() )->can_perform_loopback();
			$loopback_status = ( ! empty( $loopback_status->status ) ) ? $loopback_status->status : '';
		}

		if ( function_exists( 'wp_get_https_detection_errors' ) ) {
			$https_errors = wp_get_https_detection_errors();
			$is_ssl       = empty( $https_errors );
		} elseif ( function_exists( 'wp_is_https_supported' ) ) {
			$is_ssl = wp_is_https_supported();
		} else {
			$is_ssl = is_ssl();
		}

		$site_info = [
			'site_url'                    => static::get_home_url(),
			'site_title'                  => get_bloginfo( 'site_title' ),
			'php_version'                 => phpversion(),
			'mysql_version'               => $wpdb->db_version(),
			'wp_version'                  => get_bloginfo( 'version' ),
			'wp_language'                 => get_bloginfo( 'language' ),
			'wp_https_status'             => $is_ssl,
			'wp_multisite'                => $wp_type,
			'wp_active_theme'             => $active_theme,
			'object_cache_status'         => wp_using_ext_object_cache(),
			'libxml_version'              => ( defined( 'LIBXML_VERSION' ) ) ? LIBXML_VERSION : '',
			'is_defined_curl_multi'       => ( function_exists( 'curl_multi_init' ) ),
			'loopback_requests'           => $loopback_status,
			'amp_mode'                    => ( ! empty( $amp_settings['theme_support'] ) ) ? $amp_settings['theme_support'] : '',
			'amp_version'                 => ( ! empty( $amp_settings['version'] ) ) ? $amp_settings['version'] : '',
			'amp_plugin_configured'       => ( ! empty( $amp_settings['plugin_configured'] ) ) ? true : false,
			'amp_all_templates_supported' => ( ! empty( $amp_settings['all_templates_supported'] ) ) ? true : false,
			'amp_supported_post_types'    => ( ! empty( $amp_settings['supported_post_types'] ) && is_array( $amp_settings['supported_post_types'] ) ) ? $amp_settings['supported_post_types'] : [],
			'amp_supported_templates'     => ( ! empty( $amp_settings['supported_templates'] ) && is_array( $amp_settings['supported_templates'] ) ) ? $amp_settings['supported_templates'] : [],
			'amp_mobile_redirect'         => ( ! empty( $amp_settings['mobile_redirect'] ) ) ? true : false,
			'amp_reader_theme'            => ( ! empty( $amp_settings['reader_theme'] ) ) ? $amp_settings['reader_theme'] : '',
		];

		return $site_info;
	}

	/**
	 * To get list of active plugin's information.
	 *
	 * @since 2.2
	 *
	 * @return array List of plugin detail.
	 */
	public function get_plugin_info() {

		$active_plugins = get_option( 'active_plugins' );

		if ( is_multisite() ) {
			$network_wide_activate_plugins = get_site_option( 'active_sitewide_plugins' );
			$active_plugins                = array_merge( $active_plugins, $network_wide_activate_plugins );
		}

		$active_plugins = array_values( array_unique( $active_plugins ) );
		$plugin_info    = array_map(
			static function ( $active_plugin ) {
				return self::normalize_plugin_info( $active_plugin );
			},
			$active_plugins
		);
		$plugin_info    = array_filter( $plugin_info );

		return array_values( $plugin_info );
	}

	/**
	 * To get active theme info.
	 *
	 * @since 2.2
	 *
	 * @return array List of theme information.
	 */
	public function get_theme_info() {

		$themes = [
			wp_get_theme(),
		];
		if ( wp_get_theme()->parent() ) {
			$themes[] = wp_get_theme()->parent();
		}

		$themes = array_filter(
			$themes,
			static function ( WP_Theme $theme ) {
				return ! $theme->errors();
			}
		);

		$response = array_map(
			static function( WP_Theme $theme ) {
				return self::normalize_theme_info( $theme );
			},
			$themes
		);

		return array_values( $response );
	}

	/**
	 * To get error log.
	 *
	 * @since 2.2
	 *
	 * @return array Error log contents and log_errors ini setting.
	 */
	public function get_error_log() {

		$error_log_path = ini_get( 'error_log' );

		// $error_log_path might be a relative path/filename.
		// In this case, we would have to iterate many directories to find them.
		if ( empty( $error_log_path ) || ! file_exists( $error_log_path ) ) {
			return [
				'log_errors' => ini_get( 'log_errors' ),
				'contents'   => '',
			];
		}

		$max_lines = 200;

		// phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged, WordPress.WP.AlternativeFunctions.file_system_read_fopen
		$file         = @fopen( $error_log_path, 'r' );
		$lines        = [];
		$current_line = '';
		$position     = 0;

		if ( is_resource( $file ) ) {

			while ( -1 !== fseek( $file, $position, SEEK_END ) ) {
				$char = fgetc( $file );

				if ( PHP_EOL === $char ) {
					$lines[]      = $current_line;
					$current_line = '';

					if ( count( $lines ) > $max_lines ) {
						break;
					}
				} else {
					$current_line = $char . $current_line;
				}

				$position--;
			}

			$lines[] = $current_line;

			fclose( $file );
		}

		$lines = array_filter( $lines );
		$lines = array_reverse( $lines );

		return [
			'log_errors' => ini_get( 'log_errors' ),
			'contents'   => implode( "\n", $lines ),
		];
	}

	/**
	 * To get plugin information by plugin file.
	 *
	 * @since 2.2
	 *
	 * @param string $plugin_file Plugin file.
	 *
	 * @return array Plugin detail.
	 */
	public static function normalize_plugin_info( $plugin_file ) {

		$absolute_plugin_file = WP_PLUGIN_DIR . '/' . $plugin_file;
		if ( 0 !== validate_file( $absolute_plugin_file ) || ! file_exists( $absolute_plugin_file ) ) {
			return [];
		}

		require_once ABSPATH . '/wp-admin/includes/plugin.php';

		/** @var array */
		$plugin_data = get_plugin_data( $absolute_plugin_file );

		$slug = explode( '/', $plugin_file );
		$slug = $slug[0];

		$amp_options        = get_option( 'amp-options' );
		$suppressed_plugins = ( ! empty( $amp_options['suppressed_plugins'] ) && is_array( $amp_options['suppressed_plugins'] ) ) ? $amp_options['suppressed_plugins'] : [];

		$suppressed_plugin_list = array_keys( $suppressed_plugins );

		if ( empty( $plugin_data['Name'] ) ) {
			return [];
		}

		return [
			'name'              => $plugin_data['Name'],
			'slug'              => $slug,
			'plugin_url'        => array_key_exists( 'PluginURI', $plugin_data ) ? $plugin_data['PluginURI'] : '',
			'version'           => array_key_exists( 'Version', $plugin_data ) ? $plugin_data['Version'] : '',
			'author'            => array_key_exists( 'AuthorName', $plugin_data ) ? $plugin_data['AuthorName'] : '',
			'author_url'        => array_key_exists( 'AuthorURI', $plugin_data ) ? $plugin_data['AuthorURI'] : '',
			'requires_wp'       => array_key_exists( 'RequiresWP', $plugin_data ) ? $plugin_data['RequiresWP'] : '',
			'requires_php'      => array_key_exists( 'RequiresPHP', $plugin_data ) ? $plugin_data['RequiresPHP'] : '',
			'is_active'         => is_plugin_active( $plugin_file ),
			'is_network_active' => is_plugin_active_for_network( $plugin_file ),
			'is_suppressed'     => in_array( $slug, $suppressed_plugin_list, true ) ? $suppressed_plugins[ $slug ]['last_version'] : '',
		];

	}

	/**
	 * To normalize theme information.
	 *
	 * @since 2.2
	 *
	 * @param WP_Theme $theme_object Theme object.
	 *
	 * @return array Normalize theme information.
	 */
	public static function normalize_theme_info( WP_Theme $theme_object ) {
		$active_theme = wp_get_theme();

		$tags = $theme_object->get( 'Tags' );
		$tags = ( ! empty( $tags ) && is_array( $tags ) ) ? $tags : [];

		$theme_data = [
			'name'         => $theme_object->get( 'Name' ),
			'slug'         => $theme_object->get_stylesheet(),
			'version'      => $theme_object->get( 'Version' ),
			'status'       => $theme_object->get( 'Status' ),
			'tags'         => $tags,
			'text_domain'  => $theme_object->get( 'TextDomain' ),
			'requires_wp'  => $theme_object->get( 'RequiresWP' ),
			'requires_php' => $theme_object->get( 'RequiresPHP' ),
			'theme_url'    => $theme_object->get( 'ThemeURI' ),
			'author'       => $theme_object->get( 'Author' ),
			'author_url'   => $theme_object->get( 'AuthorURI' ),
			'is_active'    => ( $theme_object->get_stylesheet() === $active_theme->get_stylesheet() ),
			'parent_theme' => $theme_object->parent() ? $theme_object->get_template() : null,
		];

		return $theme_data;
	}

	/**
	 * Normalize error data.
	 *
	 * @since 2.2
	 *
	 * @param array $error_data Error data array.
	 *
	 * @return array
	 */
	public static function normalize_error( $error_data ) {

		if ( empty( $error_data ) || ! is_array( $error_data ) ) {
			return [];
		}

		unset( $error_data['sources'] );

		$error_data['text'] = ( ! empty( $error_data['text'] ) ) ? trim( $error_data['text'] ) : '';

		$error_data = static::remove_domain( $error_data );

		/**
		 * Generate new slug after removing site specific data.
		 */
		$error_data['error_slug'] = static::generate_hash( $error_data );

		return $error_data;
	}

	/**
	 * To normalize the error source data.
	 *
	 * @since 2.2
	 *
	 * @param array $source Error source detail.
	 *
	 * @return array Normalized error source data.
	 */
	public static function normalize_error_source( $source ) {

		if ( empty( $source ) || ! is_array( $source ) ) {
			return [];
		}

		static $plugin_versions = [];

		/**
		 * All plugin info
		 */
		if ( empty( $plugin_versions ) || ! is_array( $plugin_versions ) ) {

			$plugin_list = get_plugins();
			$plugin_list = array_keys( $plugin_list );
			$plugin_list = array_values( array_unique( $plugin_list ) );
			$plugin_list = array_map(
				static function ( $plugin ) {
					return self::normalize_plugin_info( $plugin );
				},
				$plugin_list
			);

			foreach ( $plugin_list as $plugin ) {
				$plugin_versions[ $plugin['slug'] ] = $plugin['version'];
			}
		}

		/**
		 * Normalize error source.
		 */

		$allowed_types  = [ 'plugin', 'theme' ];
		$source['type'] = ( ! empty( $source['type'] ) ) ? strtolower( trim( $source['type'] ) ) : '';

		if ( ! empty( $source['sources'] ) && is_array( $source['sources'] ) ) {
			foreach ( $source['sources'] as $index => $inner_source ) {
				$source['sources'][ $index ] = self::normalize_error_source( $inner_source );
			}

			$source['sources'] = array_values( array_filter( $source['sources'] ) );
		}


		/**
		 * Do not include wp-core sources.
		 * But allow if source have sub sources.
		 */
		if (
			( empty( $source['type'] ) || ! in_array( $source['type'], $allowed_types, true ) )
			&&
			empty( $source['sources'] )
		) {
			return [];
		}

		if ( ! empty( $source['type'] ) ) {
			if ( 'plugin' === $source['type'] ) {
				$source['version'] = isset( $plugin_versions[ $source['name'] ] ) ? $plugin_versions[ $source['name'] ] : 'n/a';
			} elseif ( 'theme' === $source['type'] ) {
				$theme             = wp_get_theme( $source['name'] );
				$source['version'] = ! $theme->errors() ? $theme->get( 'Version' ) : 'n/a';
			}
		}

		if ( ! empty( $source['text'] ) ) {
			$source['text'] = trim( $source['text'] );
			$source['text'] = static::remove_domain( $source['text'] );
		}

		// Generate error source slug.
		$error_source_slug = self::generate_hash( $source );

		// Update source information. Add error_slug and source_slug.
		$source['error_source_slug'] = $error_source_slug;

		ksort( $source );

		return $source;
	}

	/**
	 * To get amp validated URLs.
	 *
	 * @since 2.2
	 *
	 * @return array [
	 *     List amp validated URLs.
	 *     @type array    $errors        List of error for given instance of Validated post.
	 *     @type array    $error_sources List of error sources for given instance of Validated post.
	 *     @type string[] $urls          List of front-end URL.
	 * ]
	 */
	public function get_amp_urls() {

		/**
		 * List of invalid AMP URLs.
		 *
		 * @var string[]
		 */
		$amp_invalid_urls = [];

		/**
		 * Error Information
		 *
		 * @var array
		 */
		$errors = [];

		/**
		 * Error Source information.
		 *
		 * @var array
		 */
		$error_sources = [];

		if ( empty( $this->urls ) ) {

			/**
			 * If argument provided and we don't have URL data.
			 * then return empty values.
			 */
			if (
				! empty( $this->args['post_ids'] )
				||
				! empty( $this->args['term_ids'] )
				||
				! empty( $this->args['urls'] )
				||
				! empty( $this->args['amp_validated_post_ids'] )
			) {
				return [
					'errors'        => [],
					'error_sources' => [],
					'urls'          => [],
				];
			}

			// If no specific URL requested.
			$query_args = [
				'post_type'      => AMP_Validated_URL_Post_Type::POST_TYPE_SLUG,
				'posts_per_page' => 100,
				'post_status'    => 'publish',
				'meta_key'       => AMP_Validated_URL_Post_Type::VALIDATED_ENVIRONMENT_POST_META_KEY,
				'meta_value'     => maybe_serialize( AMP_Validated_URL_Post_Type::get_validated_environment() ), // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_value
				's'              => 'term_slug',
			];

			$query               = new WP_Query( $query_args );
			$amp_validated_posts = $query->get_posts();

			foreach ( $amp_validated_posts as $amp_validated_post ) {
				$validation_data = $this->process_raw_post_errors( $amp_validated_post );

				if (
					! empty( $validation_data['errors'] )
					&&
					! empty( $validation_data['error_sources'] )
					&&
					! empty( $validation_data['url'] )
				) {
					$errors             = array_merge( $errors, $validation_data['errors'] );
					$error_sources      = array_merge( $error_sources, $validation_data['error_sources'] );
					$amp_invalid_urls[] = $validation_data['url'];
				}
			}
		} else { // If we have specific URL requested.

			foreach ( $this->urls as $url ) {

				// Check request URL have validated data if not then validate URL.
				$amp_validated_post = AMP_Validated_URL_Post_Type::get_invalid_url_post( $url );

				if ( ! $amp_validated_post ) {
					$validity = AMP_Validation_Manager::validate_url_and_store( $url );

					if ( is_wp_error( $validity ) || ! is_array( $validity ) ) {
						continue;
					}

					$amp_validated_post = get_post( $validity['post_id'] );
				}

				// If validation data is exists for URL then check if it is stale or not. If it is stale, then revalidate.
				$is_stale = ! empty( AMP_Validated_URL_Post_Type::get_post_staleness( $amp_validated_post ) );
				if ( $is_stale ) {
					AMP_Validation_Manager::validate_url_and_store( $url, $amp_validated_post );
				}

				$validation_data = $this->process_raw_post_errors( $amp_validated_post );

				if (
					! empty( $validation_data['errors'] )
					&&
					! empty( $validation_data['error_sources'] )
					&&
					! empty( $validation_data['url'] )
				) {
					$errors             = array_merge( $errors, $validation_data['errors'] );
					$error_sources      = array_merge( $error_sources, $validation_data['error_sources'] );
					$amp_invalid_urls[] = $validation_data['url'];
				}
			}
		}

		return [
			'errors'        => $errors,
			'error_sources' => $error_sources,
			'urls'          => $amp_invalid_urls,
		];

	}

	/**
	 * Process AMP errors for single AMP validated post.
	 *
	 * @param WP_Post $amp_validated_post Instance of AMP Validated Post.
	 *
	 * @return array [
	 *     @type array    $errors             List of error for given instance of Validated post.
	 *     @type array    $error_sources      List of error sources for given instance of Validated post.
	 *     @type string   $url                Front-end URL.
	 * ]
	 */
	protected function process_raw_post_errors( WP_Post $amp_validated_post ) {

		if ( AMP_Validated_URL_Post_Type::POST_TYPE_SLUG !== $amp_validated_post->post_type ) {
			return [];
		}

		// Empty array for post staleness means post is NOT stale.
		if ( ! empty( AMP_Validated_URL_Post_Type::get_post_staleness( $amp_validated_post ) ) ) {
			return [];
		}

		/**
		 * Error Information
		 *
		 * @var array
		 */
		$error_list = [];

		/**
		 * Error Source information.
		 *
		 * @var array
		 */
		$error_source_list = [];

		$validation_errors_raw = json_decode( $amp_validated_post->post_content, true );
		if ( ! is_array( $validation_errors_raw ) ) {
			$validation_errors_raw = [];
		}

		/**
		 * Error loop.
		 *
		 * @var array
		 */
		$validation_errors = [];
		foreach ( $validation_errors_raw as $validation_error ) {

			$error_data    = ( ! empty( $validation_error['data'] ) && is_array( $validation_error['data'] ) ) ? $validation_error['data'] : [];
			$error_sources = ( ! empty( $error_data['sources'] ) && is_array( $error_data['sources'] ) ) ? $error_data['sources'] : [];

			if ( empty( $error_data ) || empty( $error_sources ) ) {
				continue;
			}

			unset( $error_data['sources'] );
			$error_data = static::normalize_error( $error_data );

			/**
			 * Store error data in all error list.
			 */
			if ( ! empty( $error_data ) && is_array( $error_data ) ) {
				$error_list[ $error_data['error_slug'] ] = $error_data;
			}

			/**
			 * Source loop.
			 */
			foreach ( $error_sources as $index => $source ) {
				$source['error_slug']    = $error_data['error_slug'];
				$error_sources[ $index ] = static::normalize_error_source( $source );

				/**
				 * Store error source in all error_source list.
				 */
				if ( ! empty( $error_sources[ $index ] ) && is_array( $error_sources[ $index ] ) ) {
					$error_source_list[ $error_sources[ $index ]['error_source_slug'] ] = $error_sources[ $index ];
				}
			}

			$error_sources      = array_filter( $error_sources );
			$error_source_slugs = wp_list_pluck( $error_sources, 'error_source_slug' );
			$error_source_slugs = array_values( array_unique( $error_source_slugs ) );

			if ( ! empty( $error_source_slugs ) ) {
				$validation_errors[] = [
					'error_slug' => $error_data['error_slug'],
					'sources'    => $error_source_slugs,
				];
			}
		}

		// Object information.
		$amp_queried_object = get_post_meta( $amp_validated_post->ID, '_amp_queried_object', true );
		$object_type        = ( ! empty( $amp_queried_object['type'] ) ) ? $amp_queried_object['type'] : '';
		$object_subtype     = '';

		if ( empty( $object_type ) ) {
			$amp_validated_post_url = AMP_Validated_URL_Post_Type::get_url_from_post( $amp_validated_post );
			if ( false !== strpos( $amp_validated_post_url, '?s=' ) ) {
				$object_type = 'search';
			}
		}

		switch ( $object_type ) {
			case 'post':
				$post_object    = get_post( $amp_queried_object['id'] );
				$object_subtype = ( ! empty( $post_object ) && $post_object instanceof WP_Post ) ? $post_object->post_type : '';
				break;
			case 'term':
				$term_object    = get_term( $amp_queried_object['id'] );
				$object_subtype = ( ! empty( $term_object ) && $term_object instanceof WP_Term ) ? $term_object->taxonomy : '';
				break;
			case 'user':
				break;
		}

		// Stylesheet info.
		$stylesheet_info       = static::get_stylesheet_info( $amp_validated_post->ID );
		$css_budget_percentage = ( ! empty( $stylesheet_info['css_budget_percentage'] ) ) ? $stylesheet_info['css_budget_percentage'] : 0;
		$css_budget_percentage = intval( $css_budget_percentage );

		if ( empty( $validation_errors ) && $css_budget_percentage < 100 ) {
			return [];
		}

		$amp_invalid_url = [
			'url'                   => AMP_Validated_URL_Post_Type::get_url_from_post( $amp_validated_post ),
			'object_type'           => $object_type,
			'object_subtype'        => $object_subtype,
			'css_size_before'       => ( ! empty( $stylesheet_info['css_size_before'] ) ) ? $stylesheet_info['css_size_before'] : '',
			'css_size_after'        => ( ! empty( $stylesheet_info['css_size_after'] ) ) ? $stylesheet_info['css_size_after'] : '',
			'css_size_excluded'     => ( ! empty( $stylesheet_info['css_size_excluded'] ) ) ? $stylesheet_info['css_size_excluded'] : '',
			'css_budget_percentage' => $css_budget_percentage,
			'errors'                => $validation_errors,
		];

		return [
			'errors'        => $error_list,
			'error_sources' => $error_source_list,
			'url'           => $amp_invalid_url,
		];

	}

	/**
	 * Get style sheet info of the post.
	 *
	 * @since 2.2
	 *
	 * Reference: AMP_Validated_URL_Post_Type::print_stylesheets_meta_box()
	 *
	 * @param int $post_id Post ID.
	 *
	 * @return array AMP stylesheet used info.
	 */
	public static function get_stylesheet_info( $post_id ) {

		$stylesheets = get_post_meta( $post_id, AMP_Validated_URL_Post_Type::STYLESHEETS_POST_META_KEY, true );

		if ( empty( $stylesheets ) ) {
			return [];
		}

		$stylesheets             = json_decode( $stylesheets, true );
		$style_custom_cdata_spec = null;

		foreach ( \AMP_Allowed_Tags_Generated::get_allowed_tag( 'style' ) as $spec_rule ) {
			if ( isset( $spec_rule[ \AMP_Rule_Spec::TAG_SPEC ]['spec_name'] ) && \AMP_Style_Sanitizer::STYLE_AMP_CUSTOM_SPEC_NAME === $spec_rule[ \AMP_Rule_Spec::TAG_SPEC ]['spec_name'] ) {
				$style_custom_cdata_spec = $spec_rule[ \AMP_Rule_Spec::CDATA ];
			}
		}

		$included_final_size    = 0;
		$included_original_size = 0;
		$excluded_final_size    = 0;
		$excluded_original_size = 0;
		$excluded_stylesheets   = 0;
		$max_final_size         = 0;

		$included_status  = 1;
		$excessive_status = 2;
		$excluded_status  = 3;

		// Determine which stylesheets are included based on their priorities.
		$pending_stylesheet_indices = array_keys( $stylesheets );
		usort(
			$pending_stylesheet_indices,
			static function ( $a, $b ) use ( $stylesheets ) {

				return $stylesheets[ $a ]['priority'] - $stylesheets[ $b ]['priority'];
			}
		);

		foreach ( $pending_stylesheet_indices as $i ) {

			if ( ! isset( $stylesheets[ $i ]['group'] ) || 'amp-custom' !== $stylesheets[ $i ]['group'] || ! empty( $stylesheets[ $i ]['duplicate'] ) ) {
				continue;
			}

			$max_final_size = max( $max_final_size, $stylesheets[ $i ]['final_size'] );
			if ( $stylesheets[ $i ]['included'] ) {
				$included_final_size    += $stylesheets[ $i ]['final_size'];
				$included_original_size += $stylesheets[ $i ]['original_size'];

				if ( $included_final_size >= $style_custom_cdata_spec['max_bytes'] ) {
					$stylesheets[ $i ]['status'] = $excessive_status;
				} else {
					$stylesheets[ $i ]['status'] = $included_status;
				}
			} else {
				$excluded_final_size    += $stylesheets[ $i ]['final_size'];
				$excluded_original_size += $stylesheets[ $i ]['original_size'];
				$excluded_stylesheets ++;
				$stylesheets[ $i ]['status'] = $excluded_status;
			}
		}

		$percentage_budget_used = ( ( $included_final_size + $excluded_final_size ) / $style_custom_cdata_spec['max_bytes'] ) * 100;
		$response               = [
			'css_size_before'       => intval( $included_original_size + $excluded_original_size ),
			'css_size_after'        => intval( $included_final_size + $excluded_final_size ),
			'css_size_excluded'     => intval( $excluded_stylesheets ),
			'css_budget_percentage' => round( $percentage_budget_used, 1 ),
		];

		return $response;

	}

	/**
	 * To get home url of the site.
	 * Note: It will give home url without protocol.
	 *
	 * @since 2.2
	 *
	 * @return string Home URL.
	 */
	public static function get_home_url() {

		$home_url = home_url();
		$home_url = strtolower( trim( $home_url ) );

		$http_protocol = wp_parse_url( $home_url, PHP_URL_SCHEME );

		$home_url = str_replace( "$http_protocol://", '', $home_url );
		$home_url = untrailingslashit( $home_url );

		return $home_url;
	}

	/**
	 * To remove home url from the content.
	 *
	 * @since 2.2
	 *
	 * @param mixed $content Content from home_url need to remove.
	 *
	 * @return string|array Content after removing home_url.
	 */
	public static function remove_domain( $content ) {

		if ( empty( $content ) ) {
			return '';
		} elseif ( is_numeric( $content ) ) {
			return $content;
		}

		$home_url = static::get_home_url();
		$home_url = str_replace( [ '.', '/' ], [ '\.', '\\\\{1,5}\/' ], $home_url );

		/**
		 * Reference: https://regex101.com/r/c25pNF/1
		 */
		$regex = "/http[s]?:\\\\{0,5}\/\\\\{0,5}\/$home_url/mU";

		if ( is_string( $content ) ) {
			return preg_replace( $regex, '', $content );
		}

		if ( is_object( $content ) ) {
			$content = (array) $content;
		}

		if ( is_array( $content ) ) {
			return array_map(
				static function ( $item ) {
					return self::remove_domain( $item );
				},
				$content
			);
		}

		return $content;
	}

	/**
	 * To generate hash of object.
	 *
	 * @since 2.2
	 *
	 * @param string|array|object $object Object for that hash need to generate.
	 *
	 * @return string Hash value of provided object.
	 */
	public static function generate_hash( $object ) {

		if ( empty( $object ) ) {
			return '';
		}

		if ( is_object( $object ) ) {
			$object = (array) $object;
		}

		if ( is_array( $object ) ) {
			ksort( $object );
			$object = wp_json_encode( $object );
		}

		$object = trim( $object );
		$hash   = hash( 'sha256', $object );

		return $hash;
	}
}
PK.3Y����880bunyad-amp/src/Support/SupportRESTController.php<?php
/**
 * REST API support for Support.
 *
 * @package amp-wp
 */

namespace AmpProject\AmpWP\Support;

use AmpProject\AmpWP\Infrastructure\Delayed;
use AmpProject\AmpWP\Infrastructure\Injector;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;
use WP_Error;
use WP_HTTP_Response;
use WP_REST_Controller;
use WP_REST_Request;
use WP_REST_Response;
use WP_REST_Server;

/**
 * Class SupportRESTController
 * REST API support to send AMP support data.
 *
 * @package AmpProject\AmpWP\Support
 * @internal
 * @since 2.2
 */
class SupportRESTController extends WP_REST_Controller implements Delayed, Service, Registerable {

	/**
	 * Namespace for REST API endpoint.
	 *
	 * @var string $namespace
	 */
	public $namespace = 'amp/v1';

	/**
	 * Injector.
	 *
	 * @var Injector
	 */
	private $injector;

	/**
	 * Class constructor.
	 *
	 * @param Injector $injector Injector.
	 */
	public function __construct( Injector $injector ) {

		$this->injector = $injector;
	}

	/**
	 * Get the action to use for registering the service.
	 *
	 * @return string Registration action to use.
	 */
	public static function get_registration_action() {

		return 'rest_api_init';
	}

	/**
	 * Registers all routes for the controller.
	 */
	public function register() {

		register_rest_route(
			$this->namespace,
			'/send-diagnostic',
			[
				[
					'methods'             => WP_REST_Server::CREATABLE,
					'args'                => [],
					'permission_callback' => [ $this, 'permission_callback' ],
					'callback'            => [ $this, 'callback' ],
				],
			]
		);
	}

	/**
	 * Permission check to send support data.
	 *
	 * @return bool True if user have permission. Otherwise False.
	 */
	public function permission_callback() {

		return current_user_can( 'manage_options' );
	}

	/**
	 * Send AMP support data to insight server.
	 *
	 * @param WP_REST_Request $request REST API request.
	 *
	 * @return WP_Error|WP_HTTP_Response|WP_REST_Response REST API response.
	 */
	public function callback( WP_REST_Request $request ) {

		$request_args = $request->get_param( 'args' );
		$request_args = ( ! empty( $request_args ) && is_array( $request_args ) ) ? $request_args : [];

		$support_data     = $this->injector->make( SupportData::class, [ 'args' => $request_args ] );
		$support_response = $support_data->send_data();

		$response = new WP_Error(
			'fail_to_send_data',
			__( 'Failed to send support request. Please try again later.', 'amp' ),
			[ 'status' => 500 ]
		);

		if ( ! empty( $support_response ) && is_wp_error( $support_response ) ) {
			$response = $support_response;
		}

		if ( 'ok' === $support_response['status'] && ! empty( $support_response['data']['uuid'] ) ) {
			$response = [
				'success' => true,
				'data'    => $support_response['data'],
			];
		}

		return rest_ensure_response( $response );
	}
}
PK.3Y�l�J0J02bunyad-amp/src/Validation/ScannableURLProvider.php<?php
/**
 * Provides URLs to scan.
 *
 * @package AMP
 * @since 2.1
 */

namespace AmpProject\AmpWP\Validation;

use AmpProject\AmpWP\Infrastructure\Service;
use AMP_Theme_Support;
use WP_Query;
use AMP_Options_Manager;
use AmpProject\AmpWP\Option;
use AmpProject\AmpWP\Admin\ReaderThemes;

/**
 * ScannableURLProvider class.
 *
 * @since 2.1
 * @internal
 */
final class ScannableURLProvider implements Service {

	/**
	 * Template conditionals to restrict results to.
	 *
	 * @var string[]
	 */
	private $include_conditionals = [];

	/**
	 * Limit for the number of URLs to obtain for each template type.
	 *
	 * @var int
	 */
	private $limit_per_type;

	/**
	 * Construct.
	 *
	 * @param string[] $include_conditionals Template conditionals to restrict results to.
	 * @param int      $limit_per_type       Limit of URLs to obtain per type.
	 */
	public function __construct( $include_conditionals = [], $limit_per_type = 1 ) {
		$this->include_conditionals = $include_conditionals;
		$this->limit_per_type       = $limit_per_type;
	}

	/**
	 * Get supportable templates.
	 *
	 * If the current options are for legacy Reader mode, then the templates not supported by it are disabled.
	 *
	 * @see AMP_Theme_Support::get_supportable_templates()
	 *
	 * @return array Supportable templates.
	 */
	public function get_supportable_templates() {
		$options = AMP_Options_Manager::get_options();

		$supportable_templates = AMP_Theme_Support::get_supportable_templates( $options );

		if (
			AMP_Theme_Support::READER_MODE_SLUG === $options[ Option::THEME_SUPPORT ]
			&&
			ReaderThemes::DEFAULT_READER_THEME === $options[ Option::READER_THEME ]
		) {
			$allowed_templates = [
				'is_singular',
			];
			if ( 'page' === get_option( 'show_on_front' ) ) {
				$page_for_posts = get_option( 'page_for_posts' );
				if ( $page_for_posts && amp_is_post_supported( $page_for_posts ) ) {
					$allowed_templates[] = 'is_home';
				}
				$page_on_front = get_option( 'page_on_front' );
				if ( $page_on_front && amp_is_post_supported( $page_on_front ) ) {
					$allowed_templates[] = 'is_front_page';
				}
			}
			foreach ( array_diff( array_keys( $supportable_templates ), $allowed_templates ) as $template ) {
				$supportable_templates[ $template ]['supported'] = false;
			}
		}
		return $supportable_templates;
	}

	/**
	 * Set include conditionals.
	 *
	 * @param string[] $include_conditionals Include conditionals.
	 */
	public function set_include_conditionals( $include_conditionals ) {
		$this->include_conditionals = $include_conditionals;
	}

	/**
	 * Set limit per type.
	 *
	 * @param int $limit_per_type Limit per type.
	 */
	public function set_limit_per_type( $limit_per_type ) {
		$this->limit_per_type = $limit_per_type;
	}

	/**
	 * Get the array of URLs to check.
	 *
	 * @return array Array of URLs and types.
	 */
	public function get_urls() {
		$urls = [];

		/*
		 * If 'Your homepage displays' is set to 'Your latest posts', include the homepage.
		 */
		if ( 'posts' === get_option( 'show_on_front' ) ) {
			if ( $this->is_template_supported( 'is_home' ) ) {
				$urls[] = [
					'url'   => home_url( '/' ),
					'type'  => 'is_home',
					'label' => __( 'Homepage', 'amp' ),
				];
			}
		} elseif ( 'page' === get_option( 'show_on_front' ) ) {
			if (
				$this->is_template_supported( 'is_front_page' )
				&&
				get_option( 'page_on_front' )
				&&
				amp_is_post_supported( get_option( 'page_on_front' ) )
			) {
				$urls[] = [
					'url'   => get_permalink( get_option( 'page_on_front' ) ),
					'type'  => 'is_front_page',
					'label' => __( 'Homepage', 'amp' ),
				];
			}
			if (
				$this->is_template_supported( 'is_home' )
				&&
				get_option( 'page_for_posts' )
				&&
				amp_is_post_supported( get_option( 'page_for_posts' ) )
			) {
				$urls[] = [
					'url'   => get_permalink( get_option( 'page_for_posts' ) ),
					'type'  => 'is_home',
					'label' => __( 'Blog', 'amp' ),
				];
			}
		}

		$amp_enabled_taxonomies = array_filter(
			get_taxonomies( [ 'public' => true ] ),
			function ( $taxonomy ) {
				return $this->does_taxonomy_support_amp( $taxonomy );
			}
		);
		$public_post_types      = get_post_types( [ 'public' => true ] );

		// Include one URL of each template/content type, then another URL of each type on the next iteration.
		for ( $i = 0; $i < $this->limit_per_type; $i++ ) {
			if ( $this->is_template_supported( 'is_singular' ) ) {
				foreach ( $public_post_types as $post_type ) {
					$post_ids = $this->get_posts_by_type( $post_type, $i );
					$post_id  = reset( $post_ids );
					if ( $post_id ) {
						$post_type_object = get_post_type_object( $post_type );
						$urls[]           = [
							'url'   => get_permalink( $post_id ),
							'type'  => sprintf( 'is_singular[%s]', $post_type ),
							'label' => $post_type_object->labels->singular_name ?: $post_type,
						];
					}
				}
			}

			foreach ( $amp_enabled_taxonomies as $taxonomy ) {
				$taxonomy_links = $this->get_taxonomy_links( $taxonomy, $i, 1 );
				$link           = reset( $taxonomy_links );
				if ( $link ) {
					$taxonomy_object = get_taxonomy( $taxonomy );
					$urls[]          = [
						'url'   => $link,
						'type'  => sprintf( 'is_tax[%s]', $taxonomy ),
						'label' => $taxonomy_object->labels->singular_name ?: $taxonomy,
					];
				}
			}

			$author_page_urls = $this->get_author_page_urls( $i, 1 );
			$author_page_url  = reset( $author_page_urls );
			if ( $author_page_url ) {
				$urls[] = [
					'url'   => $author_page_url,
					'type'  => 'is_author',
					'label' => __( 'Author Archive', 'amp' ),
				];
			}
		}

		// Only validate 1 date and 1 search page.
		$url = $this->get_date_page();
		if ( $url ) {
			$urls[] = [
				'url'   => $url,
				'type'  => 'is_date',
				'label' => __( 'Date Archive', 'amp' ),
			];
		}
		$url = $this->get_search_page();
		if ( $url ) {
			$urls[] = [
				'url'   => $url,
				'type'  => 'is_search',
				'label' => __( 'Search Results', 'amp' ),
			];
		}

		return $urls;
	}

	/**
	 * Gets whether the template is supported.
	 *
	 * @param string $template The template to check.
	 * @return bool Whether the template is supported.
	 */
	private function is_template_supported( $template ) {

		// If we received an allowlist of conditionals, this template conditional must be present in it.
		if (
			count( $this->include_conditionals ) > 0
			&&
			! in_array( $template, $this->include_conditionals, true )
		) {
			return false;
		}

		$supportable_templates = $this->get_supportable_templates();

		// Check whether this taxonomy's template is supported, including in the 'AMP Settings' > 'Supported Templates' UI.
		return ! empty( $supportable_templates[ $template ]['supported'] );
	}

	/**
	 * Gets the post IDs that support AMP.
	 *
	 * By default, this only gets the post IDs if they support AMP.
	 * This means that 'Posts' isn't deselected in 'AMP Settings' > 'Supported Templates'
	 * and 'Enable AMP' isn't unchecked in the post's editor.
	 *
	 * @param int[] $ids The post IDs to check for AMP support.
	 * @return array The post IDs that support AMP, or an empty array.
	 */
	private function get_posts_that_support_amp( $ids ) {
		return array_values(
			array_filter(
				$ids,
				static function ( $id ) {
					return amp_is_post_supported( $id );
				}
			)
		);
	}

	/**
	 * Gets the IDs of published posts that support AMP.
	 *
	 * @see \amp_admin_get_preview_permalink()
	 *
	 * @param string   $post_type The post type.
	 * @param int|null $offset The offset of the query (optional).
	 * @return int[]   $post_ids The post IDs in an array.
	 */
	private function get_posts_by_type( $post_type, $offset = null ) {
		// Note that we get 100 posts because it may be that some of them have AMP disabled. It is more
		// efficient to do it this way than to try to do a meta query that looks for posts that have the
		// amp_status meta equal to 'enabled' or else for posts that lack the meta key altogether. In the latter
		// case, the absence of the meta may not mean AMP is enabled since the default-enabled state can be
		// overridden with the `amp_post_status_default_enabled` filter. So in this case, we grab 100 post IDs
		// and then just use the first one.
		$args             = [
			'post_type'      => $post_type,
			'posts_per_page' => 100,
			'post_status'    => 'publish',
			'orderby'        => 'ID',
			'order'          => 'DESC',
			'fields'         => 'ids',
		];
		$posts_to_exclude = [];

		if ( 'page' === get_option( 'show_on_front' ) ) {
			$posts_to_exclude[] = (int) get_option( 'page_for_posts' );
			$posts_to_exclude[] = (int) get_option( 'page_on_front' );
		}

		if ( is_int( $offset ) ) {
			$args['offset'] = $offset;
		}

		// Attachment posts usually have the post_status of 'inherit,' so they can use the status of the post they're attached to.
		if ( 'attachment' === $post_type ) {
			$args['post_status'] = 'inherit';
		}
		$query = new WP_Query( $args );

		return $this->get_posts_that_support_amp( array_diff( $query->posts, $posts_to_exclude ) );
	}

	/**
	 * Gets the author page URLs, like https://example.com/author/admin/.
	 *
	 * Accepts an $offset parameter, for the query of authors.
	 * 0 is the first author in the query, and 1 is the second.
	 *
	 * @param int $offset The offset for the URL to query for, should be an int if passing an argument.
	 * @param int $number The total number to query for, should be an int if passing an argument.
	 * @return string[] The author page URLs, or an empty array.
	 */
	private function get_author_page_urls( $offset, $number ) {
		$author_page_urls = [];
		if ( ! $this->is_template_supported( 'is_author' ) ) {
			return $author_page_urls;
		}

		foreach ( get_users( compact( 'offset', 'number' ) ) as $author ) {
			$authored_post_query = new WP_Query(
				[
					'post_type'      => 'post',
					'post_status'    => 'publish',
					'author'         => $author->ID,
					'posts_per_page' => 1,
				]
			);
			if ( count( $authored_post_query->get_posts() ) > 0 ) {
				$author_page_urls[] = get_author_posts_url( $author->ID, $author->user_nicename );
			}
		}

		return $author_page_urls;
	}

	/**
	 * Gets a single search page URL, like https://example.com/?s=example.
	 *
	 * @return string|null An example search page, or null.
	 */
	private function get_search_page() {
		if ( ! $this->is_template_supported( 'is_search' ) ) {
			return null;
		}

		return add_query_arg( 's', 'example', home_url( '/' ) );
	}

	/**
	 * Gets a single date page URL, like https://example.com/2018/.
	 *
	 * @return string|null An example year archive URL, or null.
	 */
	private function get_date_page() {
		if ( ! $this->is_template_supported( 'is_date' ) ) {
			return null;
		}

		$query = new WP_Query(
			[
				'post_type'      => 'post',
				'post_status'    => 'publish',
				'posts_per_page' => 1,
				'orderby'        => 'date',
				'order'          => 'DESC',
			]
		);
		$posts = $query->get_posts();

		$latest_post = array_shift( $posts );
		if ( ! $latest_post ) {
			return null;
		}

		$year = (int) get_the_date( 'Y', $latest_post );
		if ( $year <= 0 ) {
			return null;
		}

		return get_year_link( $year );
	}

	/**
	 * Gets whether the taxonomy supports AMP.
	 *
	 * @param string $taxonomy The taxonomy.
	 * @return boolean Whether the taxonomy supports AMP.
	 */
	private function does_taxonomy_support_amp( $taxonomy ) {
		if ( 'post_tag' === $taxonomy ) {
			$taxonomy = 'tag';
		}
		$taxonomy_key        = 'is_' . $taxonomy;
		$custom_taxonomy_key = sprintf( 'is_tax[%s]', $taxonomy );
		return $this->is_template_supported( $taxonomy_key ) || $this->is_template_supported( $custom_taxonomy_key );
	}

	/**
	 * Gets the front-end links for taxonomy terms.
	 * For example, https://example.org/?cat=2
	 *
	 * @param string $taxonomy The name of the taxonomy, like 'category' or 'post_tag'.
	 * @param int    $offset The number at which to offset the query (optional).
	 * @param int    $number The maximum amount of links to get (optional).
	 * @return string[]  The term links, as an array of strings.
	 */
	private function get_taxonomy_links( $taxonomy, $offset, $number ) {
		return array_map(
			static function ( $term ) {
				return get_term_link( $term );
			},
			get_terms(
				array_merge(
					compact( 'taxonomy', 'offset', 'number' ),
					[
						'orderby' => 'id',
					]
				)
			)
		);
	}
}
PK.3Yӧ���9bunyad-amp/src/Validation/ScannableURLsRestController.php<?php
/**
 * ScannableURLsRestController class.
 *
 * @package AmpProject\AmpWP
 * @since 2.2
 */

namespace AmpProject\AmpWP\Validation;

use AMP_Options_Manager;
use AMP_Theme_Support;
use AMP_Validated_URL_Post_Type;
use AMP_Validation_Manager;
use AmpProject\AmpWP\Infrastructure\Delayed;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;
use AmpProject\AmpWP\Option;
use AmpProject\AmpWP\PairedRouting;
use WP_Error;
use WP_Post;
use WP_REST_Controller;
use WP_REST_Request;
use WP_REST_Response;
use WP_REST_Server;

/**
 * Rest endpoint for fetching the scannable URLs.
 *
 * @since 2.2
 * @internal
 */
final class ScannableURLsRestController extends WP_REST_Controller implements Delayed, Service, Registerable {

	/**
	 * Query param to force standard mode.
	 *
	 * @var string
	 */
	const FORCE_STANDARD_MODE = 'force_standard_mode';

	/**
	 * ScannableURLProvider instance.
	 *
	 * @var ScannableURLProvider
	 */
	private $scannable_url_provider;

	/**
	 * PairedRouting instance.
	 *
	 * @var PairedRouting
	 */
	private $paired_routing;

	/**
	 * Get the action to use for registering the service.
	 *
	 * @return string Registration action to use.
	 */
	public static function get_registration_action() {
		return 'rest_api_init';
	}

	/**
	 * Constructor.
	 *
	 * @param ScannableURLProvider $scannable_url_provider Instance of ScannableURLProvider class.
	 * @param PairedRouting        $paired_routing         Instance of PairedRouting.
	 */
	public function __construct( ScannableURLProvider $scannable_url_provider, PairedRouting $paired_routing ) {
		$this->namespace              = 'amp/v1';
		$this->rest_base              = 'scannable-urls';
		$this->scannable_url_provider = $scannable_url_provider;
		$this->paired_routing         = $paired_routing;
	}

	/**
	 * Registers all routes for the controller.
	 */
	public function register() {
		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base,
			[
				[
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => [ $this, 'get_items' ],
					'permission_callback' => [ $this, 'get_items_permissions_check' ],
					'args'                => [
						self::FORCE_STANDARD_MODE => [
							'description' => __( 'Indicates whether to force Standard template mode.', 'amp' ),
							'type'        => 'boolean',
							'required'    => false,
							'default'     => false,
						],
					],
				],
				'schema' => [ $this, 'get_public_item_schema' ],
			]
		);
	}

	/**
	 * Checks if a given request has access to get items.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has read access, WP_Error object otherwise.
	 */
	public function get_items_permissions_check( $request ) {
		if ( ! AMP_Validation_Manager::has_cap() ) {
			return new WP_Error(
				'amp_rest_cannot_validate_urls',
				__( 'Sorry, you are not allowed to access validation data.', 'amp' ),
				[ 'status' => rest_authorization_required_code() ]
			);
		}

		return true;
	}

	/**
	 * Retrieves a list of scannable URLs.
	 *
	 * Besides the page URL, each item contains a page `type` (e.g. 'home' or
	 * 'search') and a URL to a corresponding AMP page (`amp_url`).
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_items( $request ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable

		// Allow query parameter to force a response to be served with Standard mode (AMP-first). This is used as
		// part of Site Scanning in order to determine if the primary theme is suitable for serving AMP.
		$options_filter = null;
		$filtered_hooks = [
			'default_option_' . AMP_Options_Manager::OPTION_NAME,
			'option_' . AMP_Options_Manager::OPTION_NAME,
		];
		if ( ! amp_is_canonical() && $request->get_param( self::FORCE_STANDARD_MODE ) ) {
			$options_filter = static function ( $options ) {
				$options[ Option::THEME_SUPPORT ]           = AMP_Theme_Support::STANDARD_MODE_SLUG;
				$options[ Option::ALL_TEMPLATES_SUPPORTED ] = true;
				return $options;
			};

			foreach ( $filtered_hooks as $filter_hook ) {
				add_filter( $filter_hook, $options_filter );
			}
		}

		$urls = array_filter(
			$this->scannable_url_provider->get_urls(),
			static function ( $item ) {
				return is_array( $item ) && isset( $item['url'] );
			}
		);

		if ( $options_filter ) {
			foreach ( $filtered_hooks as $filter_hook ) {
				remove_filter( $filter_hook, $options_filter );
			}
		}

		return rest_ensure_response(
			array_map(
				function ( $item ) use ( $request ) {
					return $this->prepare_item_for_response( $item, $request )->get_data();
				},
				$urls
			)
		);
	}

	/**
	 * Prepares the scannable URL entry for the REST response.
	 *
	 * @param array           $item    Scannable URL entry.
	 * @param WP_REST_Request $request Request object.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function prepare_item_for_response( $item, $request ) {
		$item = wp_array_slice_assoc( $item, [ 'url', 'type', 'label' ] );

		if ( amp_is_canonical() ) {
			$item['amp_url'] = $item['url'];
		} else {
			$item['amp_url'] = $this->paired_routing->add_endpoint( $item['url'] );
		}

		$validated_url_post = AMP_Validated_URL_Post_Type::get_invalid_url_post( $item['url'] );
		if ( $validated_url_post instanceof WP_Post ) {
			$item['validation_errors'] = [];

			$data = json_decode( $validated_url_post->post_content, true );
			if ( is_array( $data ) ) {
				$item['validation_errors'] = wp_list_pluck( $data, 'data' );
			}

			$item['validated_url_post'] = [
				'id'        => $validated_url_post->ID,
				'edit_link' => get_edit_post_link( $validated_url_post->ID, 'raw' ),
			];

			$item['stale'] = ( count( AMP_Validated_URL_Post_Type::get_post_staleness( $validated_url_post ) ) > 0 );
		} else {
			$item['validation_errors']  = null;
			$item['validated_url_post'] = null;
			$item['stale']              = null;
		}

		return rest_ensure_response( $item );
	}

	/**
	 * Retrieves the block type' schema, conforming to JSON Schema.
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		return [
			'$schema'    => 'http://json-schema.org/draft-04/schema#',
			'title'      => 'amp-wp-' . $this->rest_base,
			'type'       => 'object',
			'properties' => [
				'url'                => [
					'description' => __( 'URL', 'amp' ),
					'type'        => 'string',
					'format'      => 'uri',
					'readonly'    => true,
					'context'     => [ 'view' ],
				],
				'amp_url'            => [
					'description' => __( 'AMP URL', 'amp' ),
					'type'        => 'string',
					'format'      => 'uri',
					'readonly'    => true,
					'context'     => [ 'view' ],
				],
				'type'               => [
					'description' => __( 'Type', 'amp' ),
					'type'        => 'string',
					'readonly'    => true,
					'context'     => [ 'view' ],
				],
				'label'              => [
					'description' => __( 'Label', 'amp' ),
					'type'        => 'string',
					'readonly'    => true,
					'context'     => [ 'view' ],
				],
				'validated_url_post' => [
					'description' => __( 'Validated URL post if previously scanned.', 'amp' ),
					'type'        => [ 'object', 'null' ],
					'properties'  => [
						'id'        => [
							'type' => 'integer',
						],
						'edit_link' => [
							'type'   => 'string',
							'format' => 'uri',
						],
					],
					'readonly'    => true,
					'context'     => [ 'view' ],
				],
				'validation_errors'  => [
					'description' => __( 'Validation errors for validated URL if previously scanned.', 'amp' ),
					'type'        => [ 'array', 'null' ],
					'readonly'    => true,
					'context'     => [ 'view' ],
				],
				'stale'              => [
					'description' => __( 'Whether the Validated URL post is stale.', 'amp' ),
					'type'        => [ 'boolean', 'null' ],
					'readonly'    => true,
					'context'     => [ 'view' ],
				],
			],
		];
	}
}
PK.3Yɐ�oU
U
/bunyad-amp/src/Validation/URLValidationCron.php<?php
/**
 * WP cron process to validate URLs in the background.
 *
 * @package AMP
 * @since   2.1
 */

namespace AmpProject\AmpWP\Validation;

use AmpProject\AmpWP\BackgroundTask\BackgroundTaskDeactivator;
use AmpProject\AmpWP\BackgroundTask\RecurringBackgroundTask;
use AMP_Validated_URL_Post_Type;
use AMP_Validation_Manager;

/**
 * URLValidationCron class.
 *
 * @since 2.1
 *
 * @internal
 */
final class URLValidationCron extends RecurringBackgroundTask {

	/**
	 * The cron action name.
	 *
	 * Note that only one queued URL is currently validated at a time.
	 *
	 * @var string
	 */
	const BACKGROUND_TASK_NAME = 'amp_validate_urls';

	/**
	 * Option key to store queue for URL validation.
	 *
	 * @var string
	 */
	const OPTION_KEY = 'amp_url_validation_queue';

	/**
	 * ScannableURLProvider instance.
	 *
	 * @var ScannableURLProvider
	 */
	private $scannable_url_provider;

	/**
	 * Constructor.
	 *
	 * @param BackgroundTaskDeactivator $background_task_deactivator Service that deactivates background events.
	 * @param ScannableURLProvider      $scannable_url_provider      ScannableURLProvider instance.
	 */
	public function __construct( BackgroundTaskDeactivator $background_task_deactivator, ScannableURLProvider $scannable_url_provider ) {
		parent::__construct( $background_task_deactivator );
		$this->scannable_url_provider = $scannable_url_provider;
	}

	/**
	 * Callback for the cron action.
	 *
	 * @param mixed[] ...$args Unused callback arguments.
	 */
	public function process( ...$args ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
		$url = $this->dequeue();
		if ( $url ) {
			AMP_Validation_Manager::validate_url_and_store( $url );
		}
	}

	/**
	 * Dequeue to obtain URL to validate.
	 *
	 * @return string|null URL to validate or null if there is nothing queued up.
	 */
	protected function dequeue() {
		$data = get_option( self::OPTION_KEY, [] );
		if ( ! is_array( $data ) ) {
			$data = [];
		}

		$data = array_merge(
			[
				'urls'      => [],
				'timestamp' => 0,
				'env'       => [],
			],
			$data
		);

		$current_env = AMP_Validated_URL_Post_Type::get_validated_environment();

		// When the validated environment changes, make sure the URLs and timestamp are reset so that new URLs are obtained.
		if ( $data['timestamp'] && $data['env'] !== $current_env ) {
			$data['urls']      = [];
			$data['timestamp'] = 0;
		}

		// If there are no URLs queued, then obtain a new set.
		if ( empty( $data['urls'] ) ) {

			// If it has been less than a week since the last enqueueing, then do nothing.
			if ( time() - $data['timestamp'] < WEEK_IN_SECONDS ) {
				return null;
			}

			$data['urls']      = wp_list_pluck( $this->scannable_url_provider->get_urls(), 'url' );
			$data['timestamp'] = time();
		}

		$url = array_shift( $data['urls'] );

		$data['env'] = $current_env;
		update_option( self::OPTION_KEY, $data );

		return $url ?: null;
	}

	/**
	 * Get the event name.
	 *
	 * This is the "slug" of the event, not the display name.
	 *
	 * Note: the event name should be prefixed to prevent naming collisions.
	 *
	 * @return string Name of the event.
	 */
	protected function get_event_name() {
		return self::BACKGROUND_TASK_NAME;
	}

	/**
	 * Get the interval to use for the event.
	 *
	 * @return string An existing interval name.
	 */
	protected function get_interval() {
		return self::DEFAULT_INTERVAL_HOURLY;
	}
}
PK.3Y�n��3bunyad-amp/src/Validation/URLValidationProvider.php<?php
/**
 * Provides URL validation.
 *
 * @package AMP
 * @since 2.1
 */

namespace AmpProject\AmpWP\Validation;

use AmpProject\AmpWP\Infrastructure\Service;
use AMP_Validation_Error_Taxonomy;
use AMP_Validation_Manager;
use WP_Error;

/**
 * URLValidationProvider class.
 *
 * @since 2.1
 * @internal
 */
final class URLValidationProvider implements Service {
	/**
	 * The total number of validation errors, regardless of whether they were accepted.
	 *
	 * @var int
	 */
	private $total_errors = 0;

	/**
	 * The total number of unaccepted validation errors.
	 *
	 * If an error has been accepted in the /wp-admin validation UI,
	 * it won't count toward this.
	 *
	 * @var int
	 */
	private $unaccepted_errors = 0;

	/**
	 * The number of URLs crawled, regardless of whether they have validation errors.
	 *
	 * @var int
	 */
	private $number_validated = 0;

	/**
	 * The validation counts by type, like template or post type.
	 *
	 * @var array[] {
	 *     Validity by type.
	 *
	 *     @type array $type {
	 *         @type int $valid The number of valid URLs for this type.
	 *         @type int $total The total number of URLs for this type, valid or invalid.
	 *     }
	 * }
	 */
	private $validity_by_type = [];

	/**
	 * Provides the total number of validation errors found.
	 *
	 * @return int
	 */
	public function get_total_errors() {
		return $this->total_errors;
	}

	/**
	 * Provides the total number of unaccepted errors.
	 *
	 * @return int
	 */
	public function get_unaccepted_errors() {
		return $this->unaccepted_errors;
	}

	/**
	 * Provides the number of URLs that have been checked.
	 *
	 * @return int
	 */
	public function get_number_validated() {
		return $this->number_validated;
	}

	/**
	 * Provides the validity counts by type.
	 *
	 * @return array[]
	 */
	public function get_validity_by_type() {
		return $this->validity_by_type;
	}

	/**
	 * Validates a URL, stores the results, and increments the counts.
	 *
	 * @see AMP_Validation_Manager::validate_url_and_store()
	 *
	 * @param string $url  The URL to validate.
	 * @param string $type The type of template, post, or taxonomy.
	 * @return array|WP_Error Associative array containing validity result or a WP_Error on failure.
	 */
	public function get_url_validation( $url, $type ) {
		$validity = AMP_Validation_Manager::validate_url_and_store( $url );
		if ( is_wp_error( $validity ) ) {
			return $validity;
		}

		$this->update_state_from_validity( $validity, $type );
		return $validity;
	}

	/**
	 * Increments crawl counts from a validation result.
	 *
	 * @param array  $validity Validity results.
	 * @param string $type The URL type.
	 */
	private function update_state_from_validity( $validity, $type ) {
		$validation_errors      = wp_list_pluck( $validity['results'], 'error' );
		$unaccepted_error_count = count(
			array_filter(
				$validation_errors,
				static function( $error ) {
					$validation_status = AMP_Validation_Error_Taxonomy::get_validation_error_sanitization( $error );
					return (
						AMP_Validation_Error_Taxonomy::VALIDATION_ERROR_ACK_ACCEPTED_STATUS !== $validation_status['term_status']
						&&
						AMP_Validation_Error_Taxonomy::VALIDATION_ERROR_NEW_ACCEPTED_STATUS !== $validation_status['term_status']
					);
				}
			)
		);

		if ( count( $validation_errors ) > 0 ) {
			$this->total_errors++;
		}
		if ( $unaccepted_error_count > 0 ) {
			$this->unaccepted_errors++;
		}

		$this->number_validated++;

		if ( ! isset( $this->validity_by_type[ $type ] ) ) {
			$this->validity_by_type[ $type ] = [
				'valid' => 0,
				'total' => 0,
			];
		}
		$this->validity_by_type[ $type ]['total']++;
		if ( 0 === $unaccepted_error_count ) {
			$this->validity_by_type[ $type ]['valid']++;
		}
	}
}
PK.3Y�"�%�%9bunyad-amp/src/Validation/URLValidationRESTController.php<?php
/**
 * REST endpoint providing theme scan results.
 *
 * @package AMP
 * @since 2.1
 */

namespace AmpProject\AmpWP\Validation;

use AMP_Validated_URL_Post_Type;
use AMP_Validation_Error_Taxonomy;
use AmpProject\AmpWP\DevTools\UserAccess;
use AmpProject\AmpWP\Infrastructure\Delayed;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;
use WP_Error;
use WP_REST_Controller;
use WP_Post;
use WP_REST_Request;
use WP_REST_Response;
use WP_REST_Server;

/**
 * URLValidationRESTController class.
 *
 * @todo This can now be eliminated in favor of making validate requests to the frontend with `?amp_validate[cache]=true`.
 *
 * @since 2.1
 * @internal
 */
final class URLValidationRESTController extends WP_REST_Controller implements Delayed, Service, Registerable {

	/**
	 * URLValidationProvider instance.
	 *
	 * @var URLValidationProvider
	 */
	private $url_validation_provider;

	/**
	 * UserAccess instance.
	 *
	 * @var UserAccess
	 */
	private $dev_tools_user_access;

	/**
	 * Response schema.
	 *
	 * @var array
	 */
	protected $schema;

	/**
	 * Get the action to use for registering the service.
	 *
	 * @return string Registration action to use.
	 */
	public static function get_registration_action() {
		return 'rest_api_init';
	}

	/**
	 * Constructor.
	 *
	 * @param URLValidationProvider $url_validation_provider URLValidationProvider instance.
	 * @param UserAccess            $dev_tools_user_access UserAccess instance.
	 */
	public function __construct( URLValidationProvider $url_validation_provider, UserAccess $dev_tools_user_access ) {
		$this->namespace               = 'amp/v1';
		$this->url_validation_provider = $url_validation_provider;
		$this->dev_tools_user_access   = $dev_tools_user_access;
	}

	/**
	 * Registers all routes for the controller.
	 */
	public function register() {
		register_rest_route(
			$this->namespace,
			'/validate-post-url',
			[
				'args'   => [
					'id'            => [
						'description'       => __( 'ID for AMP-enabled post.', 'amp' ),
						'required'          => true,
						'type'              => 'integer',
						'minimum'           => 1,
						'validate_callback' => [ $this, 'validate_post_id_param' ],
					],
					'preview_nonce' => [
						'description' => __( 'Preview nonce.', 'amp' ),
						'required'    => false,
						'type'        => 'string',
						'pattern'     => '^[0-9a-f]+$', // Ensure hexadecimal hash string.
					],
				],
				[
					'args'                => $this->get_endpoint_args_for_item_schema( WP_REST_Server::CREATABLE ),
					'methods'             => WP_REST_Server::CREATABLE,
					'callback'            => [ $this, 'validate_post_url' ],
					'permission_callback' => [ $this, 'create_item_permissions_check' ],
				],
				'schema' => [ $this, 'get_public_item_schema' ],
			]
		);

		// @todo Additional endpoint to validate a URL (from a URL rather than a post ID).
	}

	/**
	 * Validate post ID param.
	 *
	 * @param string|int      $id      Post ID.
	 * @param WP_REST_Request $request REST request.
	 * @param string          $param   Param name ('id').
	 * @return true|WP_Error True on valid, WP_Error otherwise.
	 */
	public function validate_post_id_param( $id, $request, $param ) {
		// First enforce the schema to ensure $id is an integer greater than 0.
		$validity = rest_validate_request_arg( $id, $request, $param );
		if ( is_wp_error( $validity ) ) {
			return $validity;
		}

		// Make sure the post exists.
		$post = get_post( (int) $id );
		if ( ! $post instanceof WP_Post ) {
			return new WP_Error(
				'rest_post_invalid_id',
				__( 'Invalid post ID.', 'default' ),
				[ 'status' => 404 ]
			);
		}

		// Make sure AMP is supported for the post.
		if ( ! amp_is_post_supported( $post ) ) {
			return new WP_Error(
				'amp_post_not_supported',
				__( 'AMP is not supported on post.', 'amp' ),
				[ 'status' => 403 ]
			);
		}
		return true;
	}

	/**
	 * Checks whether the current user can view AMP validation results.
	 *
	 * @param  WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has permission; WP_Error object otherwise.
	 */
	public function create_item_permissions_check( $request ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
		if ( ! $this->dev_tools_user_access->is_user_enabled() ) {
			return new WP_Error(
				'amp_rest_no_dev_tools',
				__( 'Sorry, you do not have access to dev tools for the AMP plugin for WordPress.', 'amp' ),
				[ 'status' => rest_authorization_required_code() ]
			);
		}

		return true;
	}

	/**
	 * Validate preview nonce.
	 *
	 * @see _show_post_preview()
	 *
	 * @param string $preview_nonce Preview nonce.
	 * @param int    $post_id       Post ID.
	 * @return bool Whether the preview nonce is valid.
	 */
	public function is_valid_preview_nonce( $preview_nonce, $post_id ) {
		return false !== wp_verify_nonce( $preview_nonce, 'post_preview_' . $post_id );
	}

	/**
	 * Returns validation information about a URL, validating the URL along the way.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function validate_post_url( $request ) {
		$post_id       = (int) $request['id'];
		$preview_nonce = $request['preview_nonce'];
		$url           = amp_get_permalink( $post_id );

		if ( ! empty( $preview_nonce ) ) {

			// Verify that the preview nonce is valid. Note this is not done in a `validate_callback` because
			// at that point there won't be a validated `id` parameter.
			if ( ! $this->is_valid_preview_nonce( $preview_nonce, $post_id ) ) {
				return new WP_Error(
					'amp_post_preview_denied',
					__( 'Sorry, you are not allowed to validate this post preview.', 'amp' ),
					[ 'status' => 403 ]
				);
			}

			$url = add_query_arg(
				[
					'preview'       => 1,
					'preview_id'    => $post_id,
					'preview_nonce' => $preview_nonce,
				],
				$url
			);
		}

		$validity = $this->url_validation_provider->get_url_validation( $url, get_post_type( $post_id ) );
		if ( is_wp_error( $validity ) ) {
			return $validity;
		}

		$query_args = [
			'page' => 'amp-support',
			'url'  => rawurlencode( get_permalink( $post_id ) ),
		];

		$data = [
			'results'      => [],
			'review_link'  => get_edit_post_link( $validity['post_id'], 'raw' ),
			'support_link' => add_query_arg( $query_args, admin_url( 'admin.php' ) ),
		];

		foreach ( AMP_Validated_URL_Post_Type::get_invalid_url_validation_errors( $validity['post_id'] ) as $result ) {

			// Handle case where a validationError's `sources` are an object (with numeric keys).
			// Note: this will no longer be an issue after https://github.com/ampproject/amp-wp/commit/bbb0e495a817a56b37554dfd721170712c92d7b8
			// but is still required for validation errors stored in the database prior to that commit.
			if ( isset( $result['data']['sources'] ) ) {
				$result['data']['sources'] = array_values( $result['data']['sources'] );
			} else {
				// Make sure sources are always defined.
				$result['data']['sources'] = [];
			}

			$data['results'][] = [
				'error'   => $result['data'],
				'status'  => $result['status'],
				'term_id' => $result['term']->term_id,
				'title'   => AMP_Validation_Error_Taxonomy::get_error_title_from_code( $result['data'] ),
			];
		}

		return rest_ensure_response( $this->filter_response_by_context( $data, $request['context'] ) );
	}

	/**
	 * Retrieves the schema for plugin options provided by the endpoint.
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		if ( $this->schema ) {
			return $this->schema;
		}

		$sources_type = [
			'items' => [
				'type' => 'object',
			],
			'type'  => 'array',
		];

		$sources_type['items']['properties']['sources'] = $sources_type;

		$this->schema = [
			'$schema'    => 'http://json-schema.org/draft-04/schema#',
			'title'      => 'amp-wp-url-validation',
			'type'       => 'object',
			'properties' => [
				'results'      => [
					'description' => __( 'Validation errors for the post.', 'amp' ),
					'readonly'    => true,
					'type'        => 'array',
					'items'       => [
						'type'       => 'object',
						'properties' => [
							'error'   => [
								'properties' => [
									'code'            => [
										'context' => [],
										'type'    => 'string',
									],
									'node_attributes' => [
										'context' => [],
										'type'    => 'object',
									],
									'node_name'       => [
										'context' => [],
										'type'    => 'string',
									],
									'node_type'       => [
										'context' => [],
										'type'    => 'integer',
									],
									'parent_name'     => [
										'context' => [],
										'type'    => 'string',
									],
									'sources'         => $sources_type,
									'type'            => [
										'type' => 'string',
									],
								],
								'type'       => 'object',
							],
							'status'  => [
								'type' => 'integer',
							],
							'term_id' => [
								'type' => 'integer',
							],
							'title'   => [
								'type' => 'string',
							],
						],
					],
				],
				'review_link'  => [
					'description' => __( 'The URL where validation errors can be reviewed.', 'amp' ),
					'readonly'    => true,
					'type'        => 'string',
				],
				'support_link' => [
					'description' => __( 'The URL for AMP support.', 'amp' ),
					'readonly'    => true,
					'type'        => 'string',
				],
			],
		];

		return $this->schema;
	}
}
PK.3Y��?�||<bunyad-amp/src/Validation/ValidationCountsRestController.php<?php
/**
 * ValidationCountsRestController class.
 *
 * @package AmpProject\AmpWP
 * @since 2.1
 */

namespace AmpProject\AmpWP\Validation;

use AMP_Validated_URL_Post_Type;
use AMP_Validation_Error_Taxonomy;
use AmpProject\AmpWP\DevTools\UserAccess;
use WP_Error;
use WP_REST_Controller;
use AmpProject\AmpWP\Infrastructure\Delayed;
use AmpProject\AmpWP\Infrastructure\Registerable;
use AmpProject\AmpWP\Infrastructure\Service;
use WP_REST_Request;
use WP_REST_Response;
use WP_REST_Server;

/**
 * Rest endpoint for fetching the total count of unreviewed validation URLs and validation errors.
 *
 * @since 2.1
 * @internal
 */
final class ValidationCountsRestController extends WP_REST_Controller implements Delayed, Service, Registerable {

	/** @var UserAccess DevTools User Access */
	private $dev_tools_user_access;

	/**
	 * Get the action to use for registering the service.
	 *
	 * @return string Registration action to use.
	 */
	public static function get_registration_action() {
		return 'rest_api_init';
	}

	/**
	 * Constructor.
	 *
	 * @param UserAccess $user_access Instance of UserAccess class.
	 */
	public function __construct( UserAccess $user_access ) {
		$this->namespace             = 'amp/v1';
		$this->rest_base             = 'unreviewed-validation-counts';
		$this->dev_tools_user_access = $user_access;
	}

	/**
	 * Registers all routes for the controller.
	 */
	public function register() {
		register_rest_route(
			$this->namespace,
			'/' . $this->rest_base,
			[
				[
					'methods'             => WP_REST_Server::READABLE,
					'callback'            => [ $this, 'get_items' ],
					'args'                => [],
					'permission_callback' => [ $this, 'get_items_permissions_check' ],
				],
				'schema' => [ $this, 'get_public_item_schema' ],
			]
		);
	}

	/**
	 * Checks whether the current user has access to Dev Tools.
	 *
	 * @param  WP_REST_Request $request Full details about the request.
	 * @return true|WP_Error True if the request has permission; WP_Error object otherwise.
	 */
	public function get_items_permissions_check( $request ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
		$dev_tools_access = $this->dev_tools_user_access->is_user_enabled();

		if ( ! $dev_tools_access ) {
			return new WP_Error(
				'amp_rest_no_dev_tools_access',
				__( 'Sorry, you are not allowed to view unreviewed counts for validation errors.', 'amp' ),
				[ 'status' => rest_authorization_required_code() ]
			);
		}

		return true;
	}

	/**
	 * Retrieves total unreviewed count for validation URLs and errors.
	 *
	 * @param WP_REST_Request $request Full details about the request.
	 * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure.
	 */
	public function get_items( $request ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
		$unreviewed_validated_url_count    = AMP_Validated_URL_Post_Type::get_validation_error_urls_count();
		$unreviewed_validation_error_count = AMP_Validation_Error_Taxonomy::get_validation_error_count(
			[
				'group' => [
					AMP_Validation_Error_Taxonomy::VALIDATION_ERROR_NEW_REJECTED_STATUS,
					AMP_Validation_Error_Taxonomy::VALIDATION_ERROR_NEW_ACCEPTED_STATUS,
				],
			]
		);

		$response = [
			'validated_urls' => $unreviewed_validated_url_count,
			'errors'         => $unreviewed_validation_error_count,
		];

		return rest_ensure_response( $response );
	}

	/**
	 * Retrieves the block type' schema, conforming to JSON Schema.
	 *
	 * @return array Item schema data.
	 */
	public function get_item_schema() {
		return [
			'$schema'    => 'http://json-schema.org/draft-04/schema#',
			'title'      => 'amp-wp-validation-status',
			'type'       => 'object',
			'properties' => [
				'validation_urls' => [
					'type'     => 'integer',
					'readonly' => true,
				],
				'errors'          => [
					'type'     => 'integer',
					'readonly' => true,
				],
			],
		];
	}
}
PK.3Y�����'bunyad-amp/templates/featured-image.php<?php
/**
 * Post featured image template part.
 *
 * 🚫🚫🚫
 * DO NOT EDIT THIS FILE WHILE INSIDE THE PLUGIN! Changes You make will be lost when a new version
 * of the AMP plugin is released. You need to copy this file out of the plugin and put it into your
 * custom theme, for example. To learn about how to customize these Reader-mode AMP templates, please
 * see: https://amp-wp.org/documentation/how-the-plugin-works/classic-templates/
 * 🚫🚫🚫
 *
 * @package AMP
 */

/**
 * Context.
 *
 * @var AMP_Post_Template $this
 */

$featured_image = $this->get( 'featured_image' );

if ( empty( $featured_image ) ) {
	return;
}

$amp_html = $featured_image['amp_html'];
$caption  = $featured_image['caption'];
?>
<figure class="amp-wp-article-featured-image wp-caption">
	<?php echo $amp_html; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
	<?php if ( $caption ) : ?>
		<p class="wp-caption-text">
			<?php echo wp_kses_data( $caption ); ?>
		</p>
	<?php endif; ?>
</figure>
PK.3Y��e��bunyad-amp/templates/footer.php<?php
/**
 * Footer template part.
 *
 * 🚫🚫🚫
 * DO NOT EDIT THIS FILE WHILE INSIDE THE PLUGIN! Changes You make will be lost when a new version
 * of the AMP plugin is released. You need to copy this file out of the plugin and put it into your
 * custom theme, for example. To learn about how to customize these Reader-mode AMP templates, please
 * see: https://amp-wp.org/documentation/how-the-plugin-works/classic-templates/
 * 🚫🚫🚫
 *
 * @package AMP
 */

/**
 * Context.
 *
 * @var AMP_Post_Template $this
 */
?>
<footer class="amp-wp-footer">
	<div>
		<h2><?php echo esc_html( wptexturize( $this->get( 'blog_name' ) ) ); ?></h2>
		<a href="#top" class="back-to-top"><?php esc_html_e( 'Back to top', 'amp' ); ?></a>
	</div>
</footer>
PK.3Y�n�88#bunyad-amp/templates/header-bar.php<?php
/**
 * Header bar template part.
 *
 * 🚫🚫🚫
 * DO NOT EDIT THIS FILE WHILE INSIDE THE PLUGIN! Changes You make will be lost when a new version
 * of the AMP plugin is released. You need to copy this file out of the plugin and put it into your
 * custom theme, for example. To learn about how to customize these Reader-mode AMP templates, please
 * see: https://amp-wp.org/documentation/how-the-plugin-works/classic-templates/
 * 🚫🚫🚫
 *
 * @package AMP
 */

/**
 * Context.
 *
 * @var AMP_Post_Template $this
 */

?>
<header id="top" class="amp-wp-header">
	<div>
		<a href="<?php echo esc_url( $this->get( 'home_url' ) ); ?>">
			<?php $site_icon_url = $this->get( 'site_icon_url' ); ?>
			<?php if ( $site_icon_url ) : ?>
				<img src="<?php echo esc_url( $site_icon_url ); ?>" width="32" height="32" class="amp-wp-site-icon" data-hero-candidate alt="<?php esc_attr_e( 'Site icon', 'amp' ); ?>">
			<?php endif; ?>
			<span class="amp-site-title">
				<?php echo esc_html( wptexturize( $this->get( 'blog_name' ) ) ); ?>
			</span>
		</a>
	</div>
</header>
PK.3Yv�wl;;bunyad-amp/templates/header.php<?php
/**
 * Header template part.
 *
 * 🚫🚫🚫
 * DO NOT EDIT THIS FILE WHILE INSIDE THE PLUGIN! Changes You make will be lost when a new version
 * of the AMP plugin is released. You need to copy this file out of the plugin and put it into your
 * custom theme, for example. To learn about how to customize these Reader-mode AMP templates, please
 * see: https://amp-wp.org/documentation/how-the-plugin-works/classic-templates/
 * 🚫🚫🚫
 *
 * @package AMP
 */

/**
 * Context.
 *
 * @var AMP_Post_Template $this
 */

$this->load_parts( [ 'header-bar' ] );
PK.3Yv'�t��!bunyad-amp/templates/html-end.php<?php
/**
 * HTML end template part.
 *
 * 🚫🚫🚫
 * DO NOT EDIT THIS FILE WHILE INSIDE THE PLUGIN! Changes You make will be lost when a new version
 * of the AMP plugin is released. You need to copy this file out of the plugin and put it into your
 * custom theme, for example. To learn about how to customize these Reader-mode AMP templates, please
 * see: https://amp-wp.org/documentation/how-the-plugin-works/classic-templates/
 * 🚫🚫🚫
 *
 * @package AMP
 */

/**
 * Context.
 *
 * @var AMP_Post_Template $this
 */
?>

<?php
/**
 * Fires just before printing the </body> closing tag.
 *
 * @since 0.2
 * @see wp_footer()
 *
 * @param AMP_Post_Template $this
 */
do_action( 'amp_post_template_footer', $this );
?>

</body>
</html>
PK.3Y�~0���#bunyad-amp/templates/html-start.php<?php
/**
 * HTML start template part.
 *
 * 🚫🚫🚫
 * DO NOT EDIT THIS FILE WHILE INSIDE THE PLUGIN! Changes You make will be lost when a new version
 * of the AMP plugin is released. You need to copy this file out of the plugin and put it into your
 * custom theme, for example. To learn about how to customize these Reader-mode AMP templates, please
 * see: https://amp-wp.org/documentation/how-the-plugin-works/classic-templates/
 * 🚫🚫🚫
 *
 * @package AMP
 */

/**
 * Context.
 *
 * @var AMP_Post_Template $this
 */
?>
<!doctype html>
<html amp <?php echo AMP_HTML_Utils::build_attributes_string( $this->get( 'html_tag_attributes' ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>>
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1">
	<?php
	// Note: The following two <style> tags are combined into <style amp-custom> via AMP_Style_Sanitizer.
	// Splitting up the styles into two stylesheets allows for plugin-supplied styles via the amp_post_template_css action
	// to be excluded from the styles in the style template part, which are more important given they style the overall page.

	/**
	 * Fires when rendering <head> in Reader mode templates.
	 *
	 * @since 0.2
	 *
	 * @param AMP_Post_Template $this
	 */
	do_action( 'amp_post_template_head', $this );
	?>
	<style class="style-template-part">
		<?php $this->load_parts( [ 'style' ] ); ?>
	</style>
	<style class="amp-post-template-css-action">
		<?php
		/**
		 * Fires when printing CSS styles in Reader mode templates.
		 *
		 * Callbacks should print bare CSS without any `<style>` or `<link>` tags.
		 * As an alternative to using this, please consider:
		 *
		 *     add_action( 'amp_post_template_head', function() { wp_print_styles( 'foo' ); } );
		 *
		 * @since 0.3
		 *
		 * @param AMP_Post_Template $this
		 */
		do_action( 'amp_post_template_css', $this );
		?>
	</style>
</head>

<body class="<?php echo esc_attr( $this->get( 'body_class' ) ); ?>">
<?php
/**
 * Fires immediately after printing the <body>.
 *
 * @since 1.2.1
 * @see wp_body_open()
 *
 * @param AMP_Post_Template $this
 */
do_action( 'amp_post_template_body_open', $this );
PK.3Y�@hnn$bunyad-amp/templates/meta-author.php<?php
/**
 * Post author template part.
 *
 * 🚫🚫🚫
 * DO NOT EDIT THIS FILE WHILE INSIDE THE PLUGIN! Changes You make will be lost when a new version
 * of the AMP plugin is released. You need to copy this file out of the plugin and put it into your
 * custom theme, for example. To learn about how to customize these Reader-mode AMP templates, please
 * see: https://amp-wp.org/documentation/how-the-plugin-works/classic-templates/
 * 🚫🚫🚫
 *
 * @package AMP
 */

/**
 * Context.
 *
 * @var AMP_Post_Template $this
 */

$post_author = $this->get( 'post_author' );
?>
<?php if ( $post_author ) : ?>
	<div class="amp-wp-meta amp-wp-byline">
		<?php if ( function_exists( 'get_avatar_url' ) ) : ?>
			<amp-img
				src="<?php echo esc_url( get_avatar_url( $post_author->user_email, [ 'size' => 72 ] ) ); ?>"
				srcset="
					<?php echo esc_url( get_avatar_url( $post_author->user_email, [ 'size' => 24 ] ) ); ?> 1x,
					<?php echo esc_url( get_avatar_url( $post_author->user_email, [ 'size' => 48 ] ) ); ?> 2x,
					<?php echo esc_url( get_avatar_url( $post_author->user_email, [ 'size' => 72 ] ) ); ?> 3x
				"
				alt="<?php echo esc_attr( $post_author->display_name ); ?>" width="24" height="24" layout="fixed"
			></amp-img>
		<?php endif; ?>
		<span class="amp-wp-author author vcard"><?php echo esc_html( $post_author->display_name ); ?></span>
	</div>
<?php endif; ?>
PK.3Y���+bunyad-amp/templates/meta-comments-link.php<?php
/**
 * Post comments link template part.
 *
 * 🚫🚫🚫
 * DO NOT EDIT THIS FILE WHILE INSIDE THE PLUGIN! Changes You make will be lost when a new version
 * of the AMP plugin is released. You need to copy this file out of the plugin and put it into your
 * custom theme, for example. To learn about how to customize these Reader-mode AMP templates, please
 * see: https://amp-wp.org/documentation/how-the-plugin-works/classic-templates/
 * 🚫🚫🚫
 *
 * @package AMP
 */

/**
 * Context.
 *
 * @var AMP_Post_Template $this
 */

$comments_link_url = $this->get( 'comments_link_url' );
?>
<?php if ( $comments_link_url ) : ?>
	<?php $comments_link_text = $this->get( 'comments_link_text' ); ?>
	<div class="amp-wp-meta amp-wp-comments-link">
		<a href="<?php echo esc_url( $comments_link_url ); ?>">
			<?php echo esc_html( $comments_link_text ); ?>
		</a>
	</div>
<?php endif; ?>
PK.3Y���zz&bunyad-amp/templates/meta-taxonomy.php<?php
/**
 * Post taxonomy term list template part.
 *
 * 🚫🚫🚫
 * DO NOT EDIT THIS FILE WHILE INSIDE THE PLUGIN! Changes You make will be lost when a new version
 * of the AMP plugin is released. You need to copy this file out of the plugin and put it into your
 * custom theme, for example. To learn about how to customize these Reader-mode AMP templates, please
 * see: https://amp-wp.org/documentation/how-the-plugin-works/classic-templates/
 * 🚫🚫🚫
 *
 * @package AMP
 */

/**
 * Context.
 *
 * @var AMP_Post_Template $this
 */

$categories = get_the_category_list( _x( ', ', 'Used between list items, there is a space after the comma.', 'amp' ), '', $this->ID );
?>
<?php if ( $categories ) : ?>
	<div class="amp-wp-meta amp-wp-tax-category">
		<?php
		/* translators: %s: list of categories. */
		printf( esc_html__( 'Categories: %s', 'amp' ), $categories ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
		?>
	</div>
<?php endif; ?>

<?php
$tags = get_the_tag_list(
	'',
	_x( ', ', 'Used between list items, there is a space after the comma.', 'amp' ),
	'',
	$this->ID
);
?>
<?php if ( $tags && ! is_wp_error( $tags ) ) : ?>
	<div class="amp-wp-meta amp-wp-tax-tag">
		<?php
		/* translators: %s: list of tags. */
		printf( esc_html__( 'Tags: %s', 'amp' ), $tags ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
		?>
	</div>
<?php endif; ?>
PK.3Y���č�"bunyad-amp/templates/meta-time.php<?php
/**
 * Post date template part.
 *
 * 🚫🚫🚫
 * DO NOT EDIT THIS FILE WHILE INSIDE THE PLUGIN! Changes You make will be lost when a new version
 * of the AMP plugin is released. You need to copy this file out of the plugin and put it into your
 * custom theme, for example. To learn about how to customize these Reader-mode AMP templates, please
 * see: https://amp-wp.org/documentation/how-the-plugin-works/classic-templates/
 * 🚫🚫🚫
 *
 * @package AMP
 */

/**
 * Context.
 *
 * @var AMP_Post_Template $this
 */

?>
<div class="amp-wp-meta amp-wp-posted-on">
	<time datetime="<?php echo esc_attr( gmdate( 'c', $this->get( 'post_publish_timestamp' ) ) ); ?>">
		<?php
		echo esc_html(
			sprintf(
				/* translators: %s: the human-readable time difference. */
				__( '%s ago', 'amp' ),
				human_time_diff( $this->get( 'post_publish_timestamp' ), time() )
			)
		);
		?>
	</time>
</div>
PK.3Y���W��bunyad-amp/templates/page.php<?php
/**
 * Page view template.
 *
 * 🚫🚫🚫
 * DO NOT EDIT THIS FILE WHILE INSIDE THE PLUGIN! Changes You make will be lost when a new version
 * of the AMP plugin is released. You need to copy this file out of the plugin and put it into your
 * custom theme, for example. To learn about how to customize these Reader-mode AMP templates, please
 * see: https://amp-wp.org/documentation/how-the-plugin-works/classic-templates/
 * 🚫🚫🚫
 *
 * @package AMP
 */

/**
 * Context.
 *
 * @var AMP_Post_Template $this
 */

$this->load_parts( [ 'html-start' ] );
?>

<?php $this->load_parts( [ 'header' ] ); ?>

<article class="amp-wp-article">
	<header class="amp-wp-article-header">
		<h1 class="amp-wp-title"><?php echo $this->get( 'post_title' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?></h1>
	</header>

	<?php $this->load_parts( [ 'featured-image' ] ); ?>

	<div class="amp-wp-article-content">
		<?php echo $this->get( 'post_amp_content' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
	</div>
</article>

<?php $this->load_parts( [ 'footer' ] ); ?>

<?php
$this->load_parts( [ 'html-end' ] );
PK.3Y��~f��bunyad-amp/templates/single.php<?php
/**
 * Single view template.
 *
 * 🚫🚫🚫
 * DO NOT EDIT THIS FILE WHILE INSIDE THE PLUGIN! Changes You make will be lost when a new version
 * of the AMP plugin is released. You need to copy this file out of the plugin and put it into your
 * custom theme, for example. To learn about how to customize these Reader-mode AMP templates, please
 * see: https://amp-wp.org/documentation/how-the-plugin-works/classic-templates/
 * 🚫🚫🚫
 *
 * @package AMP
 */

/**
 * Context.
 *
 * @var AMP_Post_Template $this
 */

$this->load_parts( [ 'html-start' ] );
?>

<?php $this->load_parts( [ 'header' ] ); ?>

<article class="amp-wp-article">
	<header class="amp-wp-article-header">
		<h1 class="amp-wp-title"><?php echo $this->get( 'post_title' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?></h1>
		<?php
		/**
		 * Filters the template parts loaded in the header area of the AMP legacy post template.
		 *
		 * @since 0.4
		 * @param string[] Templates to load.
		 */
		$this->load_parts( apply_filters( 'amp_post_article_header_meta', [ 'meta-author', 'meta-time' ] ) );
		?>
	</header>

	<?php $this->load_parts( [ 'featured-image' ] ); ?>

	<div class="amp-wp-article-content">
		<?php echo $this->get( 'post_amp_content' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
	</div>

	<footer class="amp-wp-article-footer">
		<?php
		/**
		 * Filters the template parts to load in the footer area of the AMP legacy post template.
		 *
		 * @since 0.4
		 * @param string[] Templates to load.
		 */
		$this->load_parts( apply_filters( 'amp_post_article_footer_meta', [ 'meta-taxonomy', 'meta-comments-link' ] ) );
		?>
	</footer>
</article>

<?php $this->load_parts( [ 'footer' ] ); ?>

<?php
$this->load_parts( [ 'html-end' ] );
PK.3Y�0w)�)�)bunyad-amp/templates/style.php<?php
/**
 * Style template.
 *
 * 🚫🚫🚫
 * DO NOT EDIT THIS FILE WHILE INSIDE THE PLUGIN! Changes You make will be lost when a new version
 * of the AMP plugin is released. You need to copy this file out of the plugin and put it into your
 * custom theme, for example. To learn about how to customize these Reader-mode AMP templates, please
 * see: https://amp-wp.org/documentation/how-the-plugin-works/classic-templates/
 * 🚫🚫🚫
 *
 * @package AMP
 */

// phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped

/**
 * Context.
 *
 * @var AMP_Post_Template $this
 */

$content_max_width       = absint( $this->get( 'content_max_width' ) );
$theme_color             = $this->get_customizer_setting( 'theme_color' );
$text_color              = $this->get_customizer_setting( 'text_color' );
$muted_text_color        = $this->get_customizer_setting( 'muted_text_color' );
$border_color            = $this->get_customizer_setting( 'border_color' );
$link_color              = $this->get_customizer_setting( 'link_color' );
$header_background_color = $this->get_customizer_setting( 'header_background_color' );
$header_color            = $this->get_customizer_setting( 'header_color' );

$alignwide_max = $content_max_width > 0 ? $content_max_width * 2 : 1920
?>
/* Generic WP styling */

.alignnone,
.aligncenter,
.alignleft,
.alignright,
.alignwide {
	margin-top: 1em;
	margin-right: auto;
	margin-bottom: 1em;
	margin-left: auto;
}

.alignright {
	float: right;
}

.alignleft {
	float: left;
}

.aligncenter {
	display: block;
	text-align: center;
	margin-left: auto;
	margin-right: auto;
}

.alignwide {
	width: 100%;
}

@media (min-width: 792px) {
	.alignwide {
		width: calc(100vw - 48px);
		max-width: calc(100vw - 48px);
		margin-left: calc(50% - 50vw + 24px);
		margin-right: calc(50% - 50vw + 24px);
	}
}

@media (min-width: <?php echo sprintf( '%dpx', $alignwide_max ); ?>) {
	.alignwide {
		width: calc(<?php echo sprintf( '%dpx', $alignwide_max ); ?> - 48px);
		max-width: calc(<?php echo sprintf( '%dpx', $alignwide_max ); ?> - 48px);
		margin-left: calc(calc(50% - <?php echo sprintf( '%dpx', $alignwide_max ); ?> / 2) + 24px);
		margin-right: calc(calc(50% - <?php echo sprintf( '%dpx', $alignwide_max ); ?> / 2) + 24px);
	}
}

.alignfull {
	width: 100vw;
	max-width: 100vw;
	margin-left: calc(50% - 50vw);
	margin-right: calc(50% - 50vw);
}

.amp-wp-enforced-sizes {
	/** Our sizes fallback is 100vw, and we have a padding on the container; the max-width here prevents the element from overflowing. **/
	max-width: 100%;
	margin: 0 auto;
}

.amp-wp-article-content > p.has-background {
	/*
	 * The 2.375 value comes from the $block-bg-padding--h SCSS variable:
	 * https://github.com/WordPress/gutenberg/blob/22ca90c/packages/base-styles/_variables.scss#L98-L104
	 * https://github.com/WordPress/gutenberg/blob/22ca90c/packages/block-library/src/paragraph/style.scss#L41-L43
	 */
	margin-left: -2.375em;
	margin-right: -2.375em;
	margin-block-start: 0;
	margin-block-end: 16px;
}

/* Template Styles */

.amp-wp-content,
.amp-wp-title-bar div {
	<?php if ( $content_max_width > 0 ) : ?>
	margin: 0 auto;
	max-width: <?php echo sprintf( '%dpx', $content_max_width ); ?>;
	<?php endif; ?>
}

html {
	background: <?php echo sanitize_hex_color( $header_background_color ); ?>;
}

body {
	background: <?php echo sanitize_hex_color( $theme_color ); ?>;
	color: <?php echo sanitize_hex_color( $text_color ); ?>;
	font-family: Georgia, 'Times New Roman', Times, Serif;
	font-weight: 300;
	line-height: 1.75;
}

p,
ol,
ul,
figure {
	margin: 0 0 1em;
	padding: 0;
}

a,
a:visited {
	color: <?php echo sanitize_hex_color( $link_color ); ?>;
}

a:hover,
a:active,
a:focus {
	color: <?php echo sanitize_hex_color( $text_color ); ?>;
}

/* Quotes */

blockquote {
	color: <?php echo sanitize_hex_color( $text_color ); ?>;
	background: rgba(127,127,127,.125);
	border-<?php echo is_rtl() ? 'right' : 'left'; ?>: 2px solid <?php echo sanitize_hex_color( $link_color ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>;
	margin: 8px 0 24px 0;
	padding: 16px;
}

blockquote p:last-child {
	margin-bottom: 0;
}

/* UI Fonts */

.amp-wp-meta,
.amp-wp-header div,
.amp-wp-title,
.wp-caption-text,
.amp-wp-tax-category,
.amp-wp-tax-tag,
.amp-wp-comments-link,
.amp-wp-footer p,
.back-to-top {
	font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen-Sans", "Ubuntu", "Cantarell", "Helvetica Neue", sans-serif;
}

/* Header */

.amp-wp-header {
	background-color: <?php echo sanitize_hex_color( $header_background_color ); ?>;
}

.amp-wp-header div {
	color: <?php echo sanitize_hex_color( $header_color ); ?>;
	font-size: 1em;
	font-weight: 400;
	margin: 0 auto;
	max-width: calc(840px - 32px);
	padding: .875em 16px;
	position: relative;
}

.amp-wp-header a {
	color: <?php echo sanitize_hex_color( $header_color ); ?>;
	text-decoration: none;
}

.amp-wp-header .amp-wp-site-icon {
	/** site icon is 32px **/
	background-color: <?php echo sanitize_hex_color( $header_color ); ?>;
	border: 1px solid <?php echo sanitize_hex_color( $header_color ); ?>;
	border-radius: 50%;
	position: absolute;
	<?php echo is_rtl() ? 'left' : 'right'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>: 18px;
	top: 10px;
}

/* Article */

.amp-wp-article {
	color: <?php echo sanitize_hex_color( $text_color ); ?>;
	font-weight: 400;
	margin: 1.5em auto;
	max-width: 840px;
	overflow-wrap: break-word;
	word-wrap: break-word;
}

/* Article Header */

.amp-wp-article-header {
	align-items: center;
	align-content: stretch;
	display: flex;
	flex-wrap: wrap;
	justify-content: space-between;
	margin: 1.5em 16px 0;
}

.amp-wp-title {
	color: <?php echo sanitize_hex_color( $text_color ); ?>;
	display: block;
	flex: 1 0 100%;
	font-weight: 900;
	margin: 0 0 .625em;
	width: 100%;
}

/* Article Meta */

.amp-wp-meta {
	color: <?php echo sanitize_hex_color( $muted_text_color ); ?>;
	display: inline-block;
	flex: 2 1 50%;
	font-size: .875em;
	line-height: 1.5em;
	margin: 0 0 1.5em;
	padding: 0;
}

.amp-wp-article-header .amp-wp-meta:last-of-type {
	text-align: <?php echo is_rtl() ? 'left' : 'right'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>;
}

.amp-wp-article-header .amp-wp-meta:first-of-type {
	text-align: <?php echo is_rtl() ? 'right' : 'left'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>;
}

.amp-wp-byline amp-img,
.amp-wp-byline .amp-wp-author {
	display: inline-block;
	vertical-align: middle;
}

.amp-wp-byline amp-img {
	border: 1px solid <?php echo sanitize_hex_color( $link_color ); ?>;
	border-radius: 50%;
	position: relative;
	margin-<?php echo is_rtl() ? 'left' : 'right'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>: 6px;
}

.amp-wp-posted-on {
	text-align: <?php echo is_rtl() ? 'left' : 'right'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>;
}

/* Featured image */

.amp-wp-article-featured-image {
	margin: 0 0 1em;
}
.amp-wp-article-featured-image img:not(amp-img) {
	max-width: 100%;
	height: auto;
	margin: 0 auto;
}
.amp-wp-article-featured-image amp-img {
	margin: 0 auto;
}
.amp-wp-article-featured-image.wp-caption .wp-caption-text {
	margin: 0 18px;
}

/* Article Content */

.amp-wp-article-content {
	margin: 0 16px;
}

.amp-wp-article-content ul,
.amp-wp-article-content ol {
	margin-<?php echo is_rtl() ? 'right' : 'left'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>: 1em;
}

.amp-wp-article-content .wp-caption {
	max-width: 100%;
}

.amp-wp-article-content amp-img {
	margin: 0 auto;
}

.amp-wp-article-content amp-img.alignright,
.amp-wp-article-content .wp-block-cover.alignright {
	margin: 0 0 1em 16px;
}

.amp-wp-article-content amp-img.alignleft,
.amp-wp-article-content .wp-block-cover.alignleft {
	margin: 0 16px 1em 0;
}

/* Captions */

.wp-caption {
	padding: 0;
}

.wp-caption.alignleft {
	margin-right: 16px;
}

.wp-caption.alignright {
	margin-left: 16px;
}

.wp-caption .wp-caption-text {
	border-bottom: 1px solid <?php echo sanitize_hex_color( $border_color ); ?>;
	color: <?php echo sanitize_hex_color( $muted_text_color ); ?>;
	font-size: .875em;
	line-height: 1.5em;
	margin: 0;
	padding: .66em 10px .75em;
}

/* AMP Media */

.alignwide,
.alignfull {
	clear: both;
}

amp-carousel {
	background: <?php echo sanitize_hex_color( $border_color ); ?>;
	margin: 0 -16px 1.5em;
}
amp-iframe,
amp-youtube,
amp-instagram,
amp-vine {
	background: <?php echo sanitize_hex_color( $border_color ); ?>;
	margin: 0 -16px 1.5em;
}

.amp-wp-article-content amp-carousel amp-img {
	border: none;
}

amp-carousel > amp-img > img {
	object-fit: contain;
}

.amp-wp-iframe-placeholder {
	background: <?php echo sanitize_hex_color( $border_color ); ?> url( <?php echo esc_url( $this->get( 'placeholder_image_url' ) ); ?> ) no-repeat center 40%;
	background-size: 48px 48px;
	min-height: 48px;
}

/* Article Footer Meta */

.amp-wp-article-footer .amp-wp-meta {
	display: block;
}

.amp-wp-tax-category,
.amp-wp-tax-tag {
	color: <?php echo sanitize_hex_color( $muted_text_color ); ?>;
	font-size: .875em;
	line-height: 1.5em;
	margin: 1.5em 16px;
}

.amp-wp-comments-link {
	color: <?php echo sanitize_hex_color( $muted_text_color ); ?>;
	font-size: .875em;
	line-height: 1.5em;
	text-align: center;
	margin: 2.25em 0 1.5em;
}

.amp-wp-comments-link a {
	border-style: solid;
	border-color: <?php echo sanitize_hex_color( $border_color ); ?>;
	border-width: 1px 1px 2px;
	border-radius: 4px;
	background-color: transparent;
	color: <?php echo sanitize_hex_color( $link_color ); ?>;
	cursor: pointer;
	display: block;
	font-size: 14px;
	font-weight: 600;
	line-height: 18px;
	margin: 0 auto;
	max-width: 200px;
	padding: 11px 16px;
	text-decoration: none;
	width: 50%;
	-webkit-transition: background-color 0.2s ease;
			transition: background-color 0.2s ease;
}

/* AMP Footer */

.amp-wp-footer {
	border-top: 1px solid <?php echo sanitize_hex_color( $border_color ); ?>;
	margin: calc(1.5em - 1px) 0 0;
}

.amp-wp-footer div {
	margin: 0 auto;
	max-width: calc(840px - 32px);
	padding: 1.25em 16px 1.25em;
	position: relative;
}

.amp-wp-footer h2 {
	font-size: 1em;
	line-height: 1.375em;
	margin: 0 0 .5em;
}

.amp-wp-footer p {
	color: <?php echo sanitize_hex_color( $muted_text_color ); ?>;
	font-size: .8em;
	line-height: 1.5em;
	margin: 0 85px 0 0;
}

.amp-wp-footer a {
	text-decoration: none;
}

.back-to-top {
	bottom: 1.275em;
	font-size: .8em;
	font-weight: 600;
	line-height: 2em;
	position: absolute;
	<?php echo is_rtl() ? 'left' : 'right'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>: 16px;
}
PK.3Y�Ubunyad-amp/vendor/autoload.php<?php

// autoload.php @generated by Composer

if (PHP_VERSION_ID < 50600) {
    if (!headers_sent()) {
        header('HTTP/1.1 500 Internal Server Error');
    }
    $err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
    if (!ini_get('display_errors')) {
        if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
            fwrite(STDERR, $err);
        } elseif (!headers_sent()) {
            echo $err;
        }
    }
    trigger_error(
        $err,
        E_USER_ERROR
    );
}

require_once __DIR__ . '/composer/autoload_real.php';

return ComposerAutoloaderInitfce7eaa51eae83b212188c83fb02faa9::getLoader();
PK.3Y�Hbunyad-amp/vendor/ampproject/amp-toolbox/include/compatibility-fixes.php<?php

namespace AmpProject;

/**
 * @var array<class-string<CompatibilityFix>> $compatibilityFixes
 */
$compatibilityFixes = [
    CompatibilityFix\MovedClasses::class,
];

foreach ($compatibilityFixes as $compatibilityFix) {
    $compatibilityFix::register();
}
PK.3YTq�?)()(Hbunyad-amp/vendor/ampproject/amp-toolbox/resources/local_fallback/v0.csshtml{overflow-x:hidden!important}html.i-amphtml-fie{height:100%!important;width:100%!important}html:not([amp4ads]),html:not([amp4ads]) body{height:auto!important}html:not([amp4ads]) body{margin:0!important}body{-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;-ms-text-size-adjust:100%;text-size-adjust:100%}html.i-amphtml-singledoc.i-amphtml-embedded{-ms-touch-action:pan-y pinch-zoom;touch-action:pan-y pinch-zoom}html.i-amphtml-fie>body,html.i-amphtml-singledoc>body{overflow:visible!important}html.i-amphtml-fie:not(.i-amphtml-inabox)>body,html.i-amphtml-singledoc:not(.i-amphtml-inabox)>body{position:relative!important}html.i-amphtml-ios-embed-legacy>body{overflow-x:hidden!important;overflow-y:auto!important;position:absolute!important}html.i-amphtml-ios-embed{overflow-y:auto!important;position:static}#i-amphtml-wrapper{overflow-x:hidden!important;overflow-y:auto!important;position:absolute!important;top:0!important;left:0!important;right:0!important;bottom:0!important;margin:0!important;display:block!important}html.i-amphtml-ios-embed.i-amphtml-ios-overscroll,html.i-amphtml-ios-embed.i-amphtml-ios-overscroll>#i-amphtml-wrapper{-webkit-overflow-scrolling:touch!important}#i-amphtml-wrapper>body{position:relative!important;border-top:1px solid transparent!important}#i-amphtml-wrapper+body{visibility:visible}#i-amphtml-wrapper+body .i-amphtml-lightbox-element,#i-amphtml-wrapper+body[i-amphtml-lightbox]{visibility:hidden}#i-amphtml-wrapper+body[i-amphtml-lightbox] .i-amphtml-lightbox-element{visibility:visible}#i-amphtml-wrapper.i-amphtml-scroll-disabled,.i-amphtml-scroll-disabled{overflow-x:hidden!important;overflow-y:hidden!important}amp-instagram{padding:54px 0px 0px!important;background-color:#fff}amp-iframe iframe{box-sizing:border-box!important}[amp-access][amp-access-hide]{display:none}[subscriptions-dialog],body:not(.i-amphtml-subs-ready) [subscriptions-action],body:not(.i-amphtml-subs-ready) [subscriptions-section]{display:none!important}amp-experiment,amp-live-list>[update]{display:none}amp-list[resizable-children]>.i-amphtml-loading-container.amp-hidden{display:none!important}amp-list [fetch-error],amp-list[load-more] [load-more-button],amp-list[load-more] [load-more-end],amp-list[load-more] [load-more-failed],amp-list[load-more] [load-more-loading]{display:none}amp-list[diffable] div[role=list]{display:block}amp-story-page,amp-story[standalone]{min-height:1px!important;display:block!important;height:100%!important;margin:0!important;padding:0!important;overflow:hidden!important;width:100%!important}amp-story[standalone]{background-color:#000!important;position:relative!important}amp-story-page{background-color:#757575}amp-story .amp-active>div,amp-story .i-amphtml-loader-background{display:none!important}amp-story-page:not(:first-of-type):not([distance]):not([active]){transform:translateY(1000vh)!important}amp-autocomplete{position:relative!important;display:inline-block!important}amp-autocomplete>input,amp-autocomplete>textarea{padding:0.5rem;border:1px solid rgba(0,0,0,0.33)}.i-amphtml-autocomplete-results,amp-autocomplete>input,amp-autocomplete>textarea{font-size:1rem;line-height:1.5rem}[amp-fx^=fly-in]{visibility:hidden}amp-script[nodom],amp-script[sandboxed]{position:fixed!important;top:0!important;width:1px!important;height:1px!important;overflow:hidden!important;visibility:hidden}
/*# sourceURL=/css/ampdoc.css*/[hidden]{display:none!important}.i-amphtml-element{display:inline-block}.i-amphtml-blurry-placeholder{transition:opacity 0.3s cubic-bezier(0.0,0.0,0.2,1)!important;pointer-events:none}[layout=nodisplay]:not(.i-amphtml-element){display:none!important}.i-amphtml-layout-fixed,[layout=fixed][width][height]:not(.i-amphtml-layout-fixed){display:inline-block;position:relative}.i-amphtml-layout-responsive,[layout=responsive][width][height]:not(.i-amphtml-layout-responsive),[width][height][heights]:not([layout]):not(.i-amphtml-layout-responsive),[width][height][sizes]:not(img):not([layout]):not(.i-amphtml-layout-responsive){display:block;position:relative}.i-amphtml-layout-intrinsic,[layout=intrinsic][width][height]:not(.i-amphtml-layout-intrinsic){display:inline-block;position:relative;max-width:100%}.i-amphtml-layout-intrinsic .i-amphtml-sizer{max-width:100%}.i-amphtml-intrinsic-sizer{max-width:100%;display:block!important}.i-amphtml-layout-container,.i-amphtml-layout-fixed-height,[layout=container],[layout=fixed-height][height]:not(.i-amphtml-layout-fixed-height){display:block;position:relative}.i-amphtml-layout-fill,.i-amphtml-layout-fill.i-amphtml-notbuilt,[layout=fill]:not(.i-amphtml-layout-fill),body noscript>*{display:block;overflow:hidden!important;position:absolute;top:0;left:0;bottom:0;right:0}body noscript>*{position:absolute!important;width:100%;height:100%;z-index:2}body noscript{display:inline!important}.i-amphtml-layout-flex-item,[layout=flex-item]:not(.i-amphtml-layout-flex-item){display:block;position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.i-amphtml-layout-fluid{position:relative}.i-amphtml-layout-size-defined{overflow:hidden!important}.i-amphtml-layout-awaiting-size{position:absolute!important;top:auto!important;bottom:auto!important}i-amphtml-sizer{display:block!important}@supports (aspect-ratio:1/1){i-amphtml-sizer.i-amphtml-disable-ar{display:none!important}}.i-amphtml-blurry-placeholder,.i-amphtml-fill-content{display:block;height:0;max-height:100%;max-width:100%;min-height:100%;min-width:100%;width:0;margin:auto}.i-amphtml-layout-size-defined .i-amphtml-fill-content{position:absolute;top:0;left:0;bottom:0;right:0}.i-amphtml-replaced-content,.i-amphtml-screen-reader{padding:0!important;border:none!important}.i-amphtml-screen-reader{position:fixed!important;top:0px!important;left:0px!important;width:4px!important;height:4px!important;opacity:0!important;overflow:hidden!important;margin:0!important;display:block!important;visibility:visible!important}.i-amphtml-screen-reader~.i-amphtml-screen-reader{left:8px!important}.i-amphtml-screen-reader~.i-amphtml-screen-reader~.i-amphtml-screen-reader{left:12px!important}.i-amphtml-screen-reader~.i-amphtml-screen-reader~.i-amphtml-screen-reader~.i-amphtml-screen-reader{left:16px!important}.i-amphtml-unresolved{position:relative;overflow:hidden!important}.i-amphtml-select-disabled{-webkit-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.i-amphtml-notbuilt,[layout]:not(.i-amphtml-element),[width][height][heights]:not([layout]):not(.i-amphtml-element),[width][height][sizes]:not(img):not([layout]):not(.i-amphtml-element){position:relative;overflow:hidden!important;color:transparent!important}.i-amphtml-notbuilt:not(.i-amphtml-layout-container)>*,[layout]:not([layout=container]):not(.i-amphtml-element)>*,[width][height][heights]:not([layout]):not(.i-amphtml-element)>*,[width][height][sizes]:not([layout]):not(.i-amphtml-element)>*{display:none}amp-img:not(.i-amphtml-element)[i-amphtml-ssr]>img.i-amphtml-fill-content{display:block}.i-amphtml-notbuilt:not(.i-amphtml-layout-container),[layout]:not([layout=container]):not(.i-amphtml-element),[width][height][heights]:not([layout]):not(.i-amphtml-element),[width][height][sizes]:not(img):not([layout]):not(.i-amphtml-element){color:transparent!important;line-height:0!important}.i-amphtml-ghost{visibility:hidden!important}.i-amphtml-element>[placeholder],[layout]:not(.i-amphtml-element)>[placeholder],[width][height][heights]:not([layout]):not(.i-amphtml-element)>[placeholder],[width][height][sizes]:not([layout]):not(.i-amphtml-element)>[placeholder]{display:block;line-height:normal}.i-amphtml-element>[placeholder].amp-hidden,.i-amphtml-element>[placeholder].hidden{visibility:hidden}.i-amphtml-element:not(.amp-notsupported)>[fallback],.i-amphtml-layout-container>[placeholder].amp-hidden,.i-amphtml-layout-container>[placeholder].hidden{display:none}.i-amphtml-layout-size-defined>[fallback],.i-amphtml-layout-size-defined>[placeholder]{position:absolute!important;top:0!important;left:0!important;right:0!important;bottom:0!important;z-index:1}amp-img[i-amphtml-ssr]:not(.i-amphtml-element)>[placeholder]{z-index:auto}.i-amphtml-notbuilt>[placeholder]{display:block!important}.i-amphtml-hidden-by-media-query{display:none!important}.i-amphtml-element-error{background:red!important;color:#fff!important;position:relative!important}.i-amphtml-element-error:before{content:attr(error-message)}i-amp-scroll-container,i-amphtml-scroll-container{position:absolute;top:0;left:0;right:0;bottom:0;display:block}i-amp-scroll-container.amp-active,i-amphtml-scroll-container.amp-active{overflow:auto;-webkit-overflow-scrolling:touch}.i-amphtml-loading-container{display:block!important;pointer-events:none;z-index:1}.i-amphtml-notbuilt>.i-amphtml-loading-container{display:block!important}.i-amphtml-loading-container.amp-hidden{visibility:hidden}.i-amphtml-element>[overflow]{cursor:pointer;position:relative;z-index:2;visibility:hidden;display:initial;line-height:normal}.i-amphtml-layout-size-defined>[overflow]{position:absolute}.i-amphtml-element>[overflow].amp-visible{visibility:visible}template{display:none!important}.amp-border-box,.amp-border-box *,.amp-border-box :after,.amp-border-box :before{box-sizing:border-box}amp-pixel{display:none!important}amp-analytics,amp-auto-ads,amp-story-auto-ads{position:fixed!important;top:0!important;width:1px!important;height:1px!important;overflow:hidden!important;visibility:hidden}amp-story{visibility:hidden!important}html.i-amphtml-fie>amp-analytics{position:initial!important}[visible-when-invalid]:not(.visible),form [submit-error],form [submit-success],form [submitting]{display:none}amp-accordion{display:block!important}@media (min-width:1px){:where(amp-accordion>section)>:first-child{margin:0;background-color:#efefef;padding-right:20px;border:1px solid #dfdfdf}:where(amp-accordion>section)>:last-child{margin:0}}amp-accordion>section{float:none!important}amp-accordion>section>*{float:none!important;display:block!important;overflow:hidden!important;position:relative!important}amp-accordion,amp-accordion>section{margin:0}amp-accordion:not(.i-amphtml-built)>section>:last-child{display:none!important}amp-accordion:not(.i-amphtml-built)>section[expanded]>:last-child{display:block!important}
/*# sourceURL=/css/ampshared.css*/PK.3Y�S&vkkNbunyad-amp/vendor/ampproject/amp-toolbox/resources/local_fallback/rtv/metadata{"ampRuntimeVersion":"012307052224000","ampCssUrl":"https://cdn.ampproject.org/rtv/012307052224000/v0.css","canaryPercentage":"0.005","diversions":["002307150128000","022307052224000","032307150128000","042307212240000","052307052224000","112307150128000"],"ltsRuntimeVersion":"012306202201000","ltsCssUrl":"https://cdn.ampproject.org/rtv/012306202201000/v0.css"}PK.3Y��o)o)4bunyad-amp/vendor/ampproject/amp-toolbox/src/Amp.php<?php

namespace AmpProject;

use AmpProject\Dom\Document;
use AmpProject\Dom\Element;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag;
use DOMNode;

/**
 * Central helper functionality for all Amp-related PHP code.
 *
 * @package ampproject/amp-toolbox
 */
final class Amp
{
    /**
     * Attribute prefix for AMP-bind data attributes.
     *
     * @var string
     */
    const BIND_DATA_ATTR_PREFIX = 'data-amp-bind-';

    /**
     * List of AMP attribute tags that can be appended to the <html> element.
     *
     * The *_ALT version represent a Unicode variation of the lightning emoji.
     * @see https://github.com/ampproject/amphtml/issues/25990
     *
     * @var string[]
     */
    const TAGS = [
        Attribute::AMP,
        Attribute::AMP_EMOJI,
        Attribute::AMP_EMOJI_ALT,
        Attribute::AMP4ADS,
        Attribute::AMP4ADS_EMOJI,
        Attribute::AMP4ADS_EMOJI_ALT,
        Attribute::AMP4EMAIL,
        Attribute::AMP4EMAIL_EMOJI,
        Attribute::AMP4EMAIL_EMOJI_ALT,
    ];

    /**
     * Host and scheme of the AMP cache.
     *
     * @var string
     */
    const CACHE_HOST = 'https://cdn.ampproject.org';

    /**
     * URL of the AMP cache.
     *
     * @var string
     */
    const CACHE_ROOT_URL = self::CACHE_HOST . '/';

    /**
     * List of valid AMP HTML formats.
     *
     * @var string[]
     */
    const FORMATS = [Format::AMP, Format::AMP4ADS, Format::AMP4EMAIL];

    /**
     * List of dynamic components.
     *
     * This list should be kept in sync with the list of dynamic components at:
     *
     * @see https://github.com/ampproject/amphtml/blob/292dc66b8c0bb078bbe3a1bca960e8f494f7fc8f/spec/amp-cache-guidelines.md#guidelines-adding-a-new-cache-to-the-amp-ecosystem
     *
     * @var array[]
     */
    const DYNAMIC_COMPONENTS = [
        Attribute::CUSTOM_ELEMENT  => [Extension::GEO],
        Attribute::CUSTOM_TEMPLATE => [],
    ];

    /**
     * Array of custom element names that delay rendering.
     *
     * @var string[]
     */
    const RENDER_DELAYING_EXTENSIONS = [
        Extension::DYNAMIC_CSS_CLASSES,
        Extension::EXPERIMENT,
        Extension::STORY,
    ];

    /**
     * Standard boilerplate CSS stylesheet.
     *
     * @var string
     */
    const BOILERPLATE_CSS = 'body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}'; // phpcs:ignore Generic.Files.LineLength.TooLong

    /**
     * Boilerplate CSS stylesheet for the <noscript> tag.
     *
     * @var string
     */
    const BOILERPLATE_NOSCRIPT_CSS = 'body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}'; // phpcs:ignore Generic.Files.LineLength.TooLong

    /**
     * Boilerplate CSS stylesheet for Amp4Ads & Amp4Email.
     *
     * @var string
     */
    const AMP4ADS_AND_AMP4EMAIL_BOILERPLATE_CSS = 'body{visibility:hidden}';

    /**
     * AMP runtime tag name.
     *
     * @var string
     */
    const RUNTIME = 'amp-runtime';

    // AMP classes reserved for internal use.
    const LAYOUT_ATTRIBUTE           = 'i-amphtml-layout';
    const NO_BOILERPLATE_ATTRIBUTE   = 'i-amphtml-no-boilerplate';
    const LAYOUT_CLASS_PREFIX        = 'i-amphtml-layout-';
    const LAYOUT_SIZE_DEFINED_CLASS  = 'i-amphtml-layout-size-defined';
    const SIZER_ELEMENT              = 'i-amphtml-sizer';
    const INTRINSIC_SIZER_ELEMENT    = 'i-amphtml-intrinsic-sizer';
    const LAYOUT_AWAITING_SIZE_CLASS = 'i-amphtml-layout-awaiting-size';

    /**
     * Slot used by AMP for all service elements, like "i-amphtml-sizer" elements and similar.
     *
     * @var string
     */
    const SERVICE_SLOT = 'i-amphtml-svc';

    /**
     * Check if a given node is the AMP runtime script.
     *
     * The AMP runtime script node is of the form '<script async src="https://cdn.ampproject.org...v0.js"></script>'.
     *
     * @param DOMNode $node Node to check.
     * @return bool Whether the given node is the AMP runtime script.
     */
    public static function isRuntimeScript(DOMNode $node)
    {
        if (
            ! $node instanceof Element
            || ! self::isAsyncScript($node)
            || self::isExtension($node)
        ) {
            return false;
        }

        $src = $node->getAttribute(Attribute::SRC);

        if (strpos($src, self::CACHE_ROOT_URL) !== 0) {
            return false;
        }

        if (
            // @TODO Compare performance against single regex.
            substr($src, -6) !== '/v0.js'
            && substr($src, -7) !== '/v0.mjs'
            && substr($src, -14) !== '/amp4ads-v0.js'
            && substr($src, -15) !== '/amp4ads-v0.mjs'
        ) {
            return false;
        }

        return true;
    }

    /**
     * Check if a given node is the AMP viewer script.
     *
     * The AMP viewer script node is of the form '<script async
     * src="https://cdn.ampproject.org/v0/amp-viewer-integration-...js>"</script>'.
     *
     * @param DOMNode $node Node to check.
     * @return bool Whether the given node is the AMP runtime script.
     */
    public static function isViewerScript(DOMNode $node)
    {
        if (
            ! $node instanceof Element
            || ! self::isAsyncScript($node)
            || self::isExtension($node)
        ) {
            return false;
        }

        $src = $node->getAttribute(Attribute::SRC);

        if (strpos($src, self::CACHE_HOST . '/v0/amp-viewer-integration-') !== 0) {
            return false;
        }

        if (substr($src, -3) !== '.js') {
            return false;
        }

        return true;
    }

    /**
     * Check if a given node is an AMP extension.
     *
     * @param DOMNode $node Node to check.
     * @return bool Whether the given node is the AMP runtime script.
     */
    public static function isExtension(DOMNode $node)
    {
        return ! empty(self::getExtensionName($node));
    }

    /**
     * Get the name of the extension.
     *
     * Returns an empty string if the name of the extension could not be retrieved.
     *
     * @param DOMNode $node Node to get the name of.
     * @return string Name of the custom node or template. Empty string if none found.
     */
    public static function getExtensionName(DOMNode $node)
    {
        if (! $node instanceof Element || $node->tagName !== Tag::SCRIPT) {
            return '';
        }

        if ($node->hasAttribute(Attribute::CUSTOM_ELEMENT)) {
            return $node->getAttribute(Attribute::CUSTOM_ELEMENT);
        }

        if ($node->hasAttribute(Attribute::CUSTOM_TEMPLATE)) {
            return $node->getAttribute(Attribute::CUSTOM_TEMPLATE);
        }

        if ($node->hasAttribute(Attribute::HOST_SERVICE)) {
            return $node->getAttribute(Attribute::HOST_SERVICE);
        }

        return '';
    }

    /**
     * Check whether a given node is a script for a render-delaying extension.
     *
     * @param DOMNode $node Node to check.
     * @return bool Whether the node is a script for a render-delaying extension.
     */
    public static function isRenderDelayingExtension(DOMNode $node)
    {
        $extensionName = self::getExtensionName($node);

        if (empty($extensionName)) {
            return false;
        }

        return in_array($extensionName, self::RENDER_DELAYING_EXTENSIONS, true);
    }

    /**
     * Check whether a given DOM node is an AMP custom element.
     *
     * @param DOMNode $node DOM node to check.
     * @return bool Whether the checked DOM node is an AMP custom element.
     */
    public static function isCustomElement(DOMNode $node)
    {
        return $node instanceof Element && strpos($node->tagName, Extension::PREFIX) === 0;
    }

    /**
     * Check whether the given document is an AMP story.
     *
     * @param Document $document Document of the page to check within.
     * @return bool Whether the provided document is an AMP story.
     */
    public static function isAmpStory(Document $document)
    {
        foreach ($document->head->childNodes as $node) {
            if (
                $node instanceof Element
                &&
                $node->tagName === Tag::SCRIPT
                &&
                $node->getAttribute(Attribute::CUSTOM_ELEMENT) === Extension::STORY
            ) {
                return true;
            }
        }

        return false;
    }

    /**
     * Check whether a given node is an AMP template.
     *
     * @param DOMNode $node Node to check.
     * @return bool Whether the node is an AMP template.
     */
    public static function isTemplate(DOMNode $node)
    {
        if (! $node instanceof Element) {
            return false;
        }

        if ($node->tagName === Tag::TEMPLATE) {
            return true;
        }

        if (
            $node->tagName === Tag::SCRIPT
            && $node->hasAttribute(Attribute::TEMPLATE)
            && $node->getAttribute(Attribute::TEMPLATE) === Extension::MUSTACHE
        ) {
            return true;
        }

        return false;
    }

    /**
     * Check whether a given node is an async <script> element.
     *
     * @param DOMNode $node Node to check.
     * @return bool Whether the given node is an async <script> element.
     */
    private static function isAsyncScript(DOMNode $node)
    {
        if (
            ! $node instanceof Element
            || $node->tagName !== Tag::SCRIPT
        ) {
            return false;
        }

        if (
            ! $node->hasAttribute(Attribute::SRC)
            || ! $node->hasAttribute(Attribute::ASYNC)
        ) {
            return false;
        }

        return true;
    }

    /**
     * Check whether a given node is an AMP iframe.
     *
     * @param DOMNode $node Node to check.
     * @return bool Whether the node is an AMP iframe.
     */
    public static function isAmpIframe(DOMNode $node)
    {
        if (! $node instanceof Element) {
            return false;
        }

        return $node->tagName === Extension::IFRAME
               || $node->tagName === Extension::VIDEO_IFRAME;
    }
}
PK.3Y�l2Abunyad-amp/vendor/ampproject/amp-toolbox/src/CompatibilityFix.php<?php

namespace AmpProject;

/**
 * Compatibility fix that can be registered.
 *
 * @package ampproject/amp-toolbox
 */
interface CompatibilityFix
{
    /**
     * Register the compatibility fix.
     *
     * @return void
     */
    public static function register();
}
PK.3Y
�Q:bunyad-amp/vendor/ampproject/amp-toolbox/src/CssLength.php<?php

namespace AmpProject;

/**
 * Flexible unit of measure for CSS dimensions.
 *
 * Adapted from the `amp.validator.CssLength` class found in `validator.js` from the `ampproject/amphtml` project on
 * GitHub.
 *
 * @version 1911070201440
 * @link    https://github.com/ampproject/amphtml/blob/1911070201440/validator/engine/validator.js#L3351
 *
 * @package ampproject/amp-toolbox
 */
final class CssLength
{
    // Special attribute values.
    const AUTO  = 'auto';
    const FLUID = 'fluid';

    /**
     * Whether the value or unit is invalid. Note that passing an empty value as `$attr_value` is considered valid.
     *
     * @var bool
     */
    protected $isValid = false;

    /**
     * Whether the attribute value is set.
     *
     * @var bool
     */
    protected $isDefined = false;

    /**
     * Whether the attribute value is 'auto'. This is a special value that indicates that the value gets derived from
     * the context. In practice that's only ever the case for a width.
     *
     * @var bool
     */
    protected $isAuto = false;

    /**
     * Whether the attribute value is 'fluid'.
     *
     * @var bool
     */
    protected $isFluid = false;

    /**
     * The numeric value.
     *
     * @var float
     */
    protected $numeral = 0;

    /**
     * The unit, 'px' being the default in case it's absent.
     *
     * @var string
     */
    protected $unit = 'px';

    /**
     * Value of attribute.
     *
     * @var string
     */
    protected $attrValue;

    /**
     * Instantiate a CssLength object.
     *
     * @param string|null $attrValue Attribute value to be parsed.
     */
    public function __construct($attrValue)
    {
        if (null === $attrValue) {
            $this->isValid = true;
            return;
        }

        $this->attrValue = $attrValue;
        $this->isDefined = true;
    }

    /**
     * Validate the attribute value.
     *
     * @param bool $allowAuto  Whether or not to allow the 'auto' value as a value.
     * @param bool $allowFluid Whether or not to allow the 'fluid' value as a value.
     */
    public function validate($allowAuto, $allowFluid)
    {
        if ($this->isValid()) {
            return;
        }

        if (self::AUTO === $this->attrValue) {
            $this->isAuto  = true;
            $this->isValid = $allowAuto;
            return;
        }

        if (self::FLUID === $this->attrValue) {
            $this->isFluid = true;
            $this->isValid = $allowFluid;
        }

        $pattern = '/^(?<numeral>\d+(?:\.\d+)?)(?<unit>px|em|rem|vh|vw|vmin|vmax)?$/';
        if (preg_match($pattern, $this->attrValue, $match)) {
            $this->isValid = true;
            $this->numeral = isset($match['numeral']) ? (float)$match['numeral'] : $this->numeral;
            $this->unit    = isset($match['unit']) ? $match['unit'] : $this->unit;
        }
    }

    /**
     * Whether or not the attribute value is valid.
     *
     * @return bool
     */
    public function isValid()
    {
        return $this->isValid;
    }

    /**
     * Whether the attribute value is set.
     *
     * @return bool
     */
    public function isDefined()
    {
        return $this->isDefined;
    }

    /**
     * Whether the attribute value is 'fluid'.
     *
     * @return bool
     */
    public function isFluid()
    {
        return $this->isFluid;
    }

    /**
     * Whether the attribute value is 'auto'.
     *
     * @return bool
     */
    public function isAuto()
    {
        return $this->isAuto;
    }

    /**
     * The unit of the attribute.
     *
     * @return string
     */
    public function getUnit()
    {
        return $this->unit;
    }

    /**
     * The numeral of the attribute.
     *
     * @return float
     */
    public function getNumeral()
    {
        return $this->numeral;
    }
}
PK.3Y����8bunyad-amp/vendor/ampproject/amp-toolbox/src/DevMode.php<?php

namespace AmpProject;

use AmpProject\Dom\Document;
use AmpProject\Dom\Element;
use DOMNode;

/**
 * Helper functionality to deal with AMP dev-mode.
 *
 * @link    https://github.com/ampproject/amphtml/issues/20974
 *
 * @package ampproject/amp-toolbox
 */
final class DevMode
{
    /**
     * Attribute name for AMP dev mode.
     *
     * @var string
     */
    const DEV_MODE_ATTRIBUTE = 'data-ampdevmode';

    /**
     * Check whether the provided document is in dev mode.
     *
     * @param Document $document Document for which to check whether dev mode is active.
     * @return bool Whether the document is in dev mode.
     */
    public static function isActiveForDocument(Document $document)
    {
        return $document->documentElement->hasAttribute(self::DEV_MODE_ATTRIBUTE);
    }

    /**
     * Check whether a node is exempt from validation during dev mode.
     *
     * @param DOMNode $node Node to check.
     * @return bool Whether the node should be exempt during dev mode.
     */
    public static function hasExemptionForNode(DOMNode $node)
    {
        if (! $node instanceof Element) {
            return false;
        }

        $document = self::getDocument($node);

        if ($node === $document->documentElement) {
            return $document->hasInitialAmpDevMode();
        }

        return $node->hasAttribute(self::DEV_MODE_ATTRIBUTE);
    }

    /**
     * Check whether a certain node should be exempt from validation.
     *
     * @param DOMNode $node Node to check.
     * @return bool Whether the node should be exempt from validation.
     */
    public static function isExemptFromValidation(DOMNode $node)
    {
        $document = self::getDocument($node);
        return self::isActiveForDocument($document) && self::hasExemptionForNode($node);
    }

    /**
     * Get the document from the specified node.
     *
     * @param DOMNode $node The Node from which the document should be retrieved.
     * @return Document
     */
    private static function getDocument(DOMNode $node)
    {
        $document = $node->ownerDocument;
        if (! $document instanceof Document) {
            $document = Document::fromNode($node);
        }

        return $document;
    }
}
PK.3Y�4T�II9bunyad-amp/vendor/ampproject/amp-toolbox/src/Encoding.php<?php

namespace AmpProject;

/**
 * Encoding constants that are used to control Dom\Document encoding.
 *
 * @package ampproject/amp-toolbox
 */
final class Encoding
{
    /**
     * UTF-8 encoding, which is the fallback.
     *
     * @var string
     */
    const UTF8 = 'utf-8';

    /**
     * AMP requires the HTML markup to be encoded in UTF-8.
     *
     * @var string
     */
    const AMP = self::UTF8;

    /**
     * Encoding detection order in case we have to guess.
     *
     * This list of encoding detection order is just a wild guess and might need fine-tuning over time.
     * If the charset was not provided explicitly, we can really only guess, as the detection can
     * never be 100% accurate and reliable.
     *
     * @var string
     */
    const DETECTION_ORDER = 'JIS, UTF-8, EUC-JP, eucJP-win, ISO-2022-JP, ISO-8859-15, ISO-8859-1, ASCII';

    /**
     * Encoding detection order for PHP 8.1.
     *
     * In PHP 8.1, mb_detect_encoding gives different result than the lower versions. This alternative detection order
     * list fixes this issue.
     */
    const DETECTION_ORDER_PHP81 = 'UTF-8, EUC-JP, eucJP-win, ISO-8859-15, JIS, ISO-2022-JP, ISO-8859-1, ASCII';

    /**
     * Associative array of encoding mappings.
     *
     * Translates HTML charsets into encodings PHP can understand.
     *
     * @var string[]
     */
    const MAPPINGS = [
        // Assume ISO-8859-1 for some charsets.
        'latin-1' => 'ISO-8859-1',
        // US-ASCII is one of the most popular ASCII names and used as HTML charset,
        // but mb_list_encodings contains only "ASCII".
        'us-ascii' => 'ascii',
    ];

    /**
     * Encoding identifier to use for an unknown encoding.
     *
     * "auto" is recognized by mb_convert_encoding() as a special value.
     *
     * @var string
     */
    const UNKNOWN = 'auto';

    /**
     * Current value of the encoding.
     *
     * @var string
     */
    private $encoding;

    /**
     * Encoding constructor.
     *
     * @param mixed $encoding Value of the encoding.
     */
    public function __construct($encoding)
    {
        if (! is_string($encoding)) {
            $encoding = self::UNKNOWN;
        }

        $this->encoding = $encoding;
    }

    /**
     * Check whether the encoding equals a provided encoding.
     *
     * @param Encoding|string $encoding Encoding to check against.
     * @return bool Whether the encodings are the same.
     */
    public function equals($encoding)
    {
        return strtolower($this->encoding) === strtolower((string)$encoding);
    }

    /**
     * Sanitize the encoding that was detected.
     *
     * If sanitization fails, it will return 'auto', letting the conversion
     * logic try to figure it out itself.
     */
    public function sanitize()
    {
        $this->encoding = strtolower($this->encoding);

        if ($this->encoding === self::UTF8) {
            return;
        }

        if (! function_exists('mb_list_encodings')) {
            return;
        }

        static $knownEncodings = null;

        if (null === $knownEncodings) {
            $knownEncodings = array_map('strtolower', mb_list_encodings());
        }

        if (array_key_exists($this->encoding, self::MAPPINGS)) {
            $this->encoding = self::MAPPINGS[$this->encoding];
        }

        if (! in_array($this->encoding, $knownEncodings, true)) {
            $this->encoding = self::UNKNOWN;
        }
    }

    /**
     * Return the value of the encoding as a string.
     *
     * @return string
     */
    public function __toString()
    {
        return (string) $this->encoding;
    }
}
PK.3YA��11:bunyad-amp/vendor/ampproject/amp-toolbox/src/Extension.php<?php

namespace AmpProject;

/**
 * Interface with constants for AMP extensions.
 *
 * @package ampproject/amp-toolbox
 */
interface Extension
{
    const ACCESS                                 = 'amp-access';
    const ACCESS_LATERPAY                        = 'amp-access-laterpay';
    const ACCESS_POOOL                           = 'amp-access-poool';
    const ACCESS_SCROLL                          = 'amp-access-scroll';
    const ACCORDION                              = 'amp-accordion';
    const ACTION_MACRO                           = 'amp-action-macro';
    const AD                                     = 'amp-ad';
    const ADDTHIS                                = 'amp-addthis';
    const AD_CUSTOM                              = 'amp-ad-custom';
    const AD_EXIT                                = 'amp-ad-exit';
    const ANALYTICS                              = 'amp-analytics';
    const ANIM                                   = 'amp-anim';
    const ANIMATION                              = 'amp-animation';
    const APESTER_MEDIA                          = 'amp-apester-media';
    const APP_BANNER                             = 'amp-app-banner';
    const AUDIO                                  = 'amp-audio';
    const AUTOCOMPLETE                           = 'amp-autocomplete';
    const AUTO_ADS                               = 'amp-auto-ads';
    const BASE_CAROUSEL                          = 'amp-base-carousel';
    const BEOPINION                              = 'amp-beopinion';
    const BIND                                   = 'amp-bind';
    const BIND_MACRO                             = 'amp-bind-macro';
    const BODYMOVIN_ANIMATION                    = 'amp-bodymovin-animation';
    const BRID_PLAYER                            = 'amp-brid-player';
    const BRIGHTCOVE                             = 'amp-brightcove';
    const BYSIDE_CONTENT                         = 'amp-byside-content';
    const CACHE_URL                              = 'amp-cache-url';
    const CALL_TRACKING                          = 'amp-call-tracking';
    const CAROUSEL                               = 'amp-carousel';
    const CONNATIX_PLAYER                        = 'amp-connatix-player';
    const CONSENT                                = 'amp-consent';
    const DAILYMOTION                            = 'amp-dailymotion';
    const DATE_COUNTDOWN                         = 'amp-date-countdown';
    const DATE_DISPLAY                           = 'amp-date-display';
    const DATE_PICKER                            = 'amp-date-picker';
    const DELIGHT_PLAYER                         = 'amp-delight-player';
    const DYNAMIC_CSS_CLASSES                    = 'amp-dynamic-css-classes';
    const EMBED                                  = 'amp-embed';
    const EMBEDLY_CARD                           = 'amp-embedly-card';
    const EMBEDLY_KEY                            = 'amp-embedly-key';
    const EXPERIMENT                             = 'amp-experiment';
    const FACEBOOK                               = 'amp-facebook';
    const FACEBOOK_COMMENTS                      = 'amp-facebook-comments';
    const FACEBOOK_LIKE                          = 'amp-facebook-like';
    const FACEBOOK_PAGE                          = 'amp-facebook-page';
    const FIT_TEXT                               = 'amp-fit-text';
    const FONT                                   = 'amp-font';
    const FORM                                   = 'amp-form';
    const FX_COLLECTION                          = 'amp-fx-collection';
    const FX_FLYING_CARPET                       = 'amp-flying-carpet';
    const GEO                                    = 'amp-geo';
    const GFYCAT                                 = 'amp-gfycat';
    const GIST                                   = 'amp-gist';
    const GOOGLE_ASSISTANT_ASSISTJS              = 'amp-google-assistant-assistjs';
    const GOOGLE_ASSISTANT_ASSISTJS_CONFIG       = 'amp-google-assistant-assistjs-config';
    const GOOGLE_ASSISTANT_INLINE_SUGGESTION_BAR = 'amp-google-assistant-inline-suggestion-bar';
    const GOOGLE_ASSISTANT_VOICE_BAR             = 'amp-google-assistant-voice-bar';
    const GOOGLE_ASSISTANT_VOICE_BUTTON          = 'amp-google-assistant-voice-button';
    const GOOGLE_DOCUMENT_EMBED                  = 'amp-google-document-embed';
    const GOOGLE_READ_ALOUD_PLAYER               = 'amp-google-read-aloud-player';
    const GWD_ANIMATION                          = 'amp-gwd-animation';
    const HULU                                   = 'amp-hulu';
    const IFRAME                                 = 'amp-iframe';
    const IFRAMELY                               = 'amp-iframely';
    const IMAGE_LIGHTBOX                         = 'amp-image-lightbox';
    const IMAGE_SLIDER                           = 'amp-image-slider';
    const IMA_VIDEO                              = 'amp-ima-video';
    const IMG                                    = 'amp-img';
    const IMGUR                                  = 'amp-imgur';
    const INPUTMASK                              = 'amp-inputmask';
    const INLINE_GALLERY                         = 'amp-inline-gallery';
    const INLINE_GALLERY_PAGINATION              = 'amp-inline-gallery-pagination';
    const INLINE_GALLERY_THUMBNAILS              = 'amp-inline-gallery-thumbnails';
    const INSTAGRAM                              = 'amp-instagram';
    const INSTALL_SERVICEWORKER                  = 'amp-install-serviceworker';
    const IZLESENE                               = 'amp-izlesene';
    const JWPLAYER                               = 'amp-jwplayer';
    const KALTURA_PLAYER                         = 'amp-kaltura-player';
    const LAYOUT                                 = 'amp-layout';
    const LIGHTBOX                               = 'amp-lightbox';
    const LIGHTBOX_GALLERY                       = 'amp-lightbox-gallery';
    const LINK_REWRITER                          = 'amp-link-rewriter';
    const LIST_                                  = 'amp-list';
    const LIST_LOAD_MORE                         = 'amp-list-load-more';
    const LIVE_LIST                              = 'amp-live-list';
    const MATHML                                 = 'amp-mathml';
    const MEGAPHONE                              = 'amp-megaphone';
    const MEGA_MENU                              = 'amp-mega-menu';
    const MINUTE_MEDIA_PLAYER                    = 'amp-minute-media-player';
    const MOWPLAYER                              = 'amp-mowplayer';
    const MRAID                                  = 'amp-mraid';
    const MUSTACHE                               = 'amp-mustache';
    const NESTED_MENU                            = 'amp-nested-menu';
    const NEXT_PAGE                              = 'amp-next-page';
    const NEXXTV_PLAYER                          = 'amp-nexxtv-player';
    const O2_PLAYER                              = 'amp-o2-player';
    const ONETAP_GOOGLE                          = 'amp-onetap-google';
    const OOYALA_PLAYER                          = 'amp-ooyala-player';
    const ORIENTATION_OBSERVER                   = 'amp-orientation-observer';
    const PAN_ZOOM                               = 'amp-pan-zoom';
    const PINTEREST                              = 'amp-pinterest';
    const PIXEL                                  = 'amp-pixel';
    const PLAYBUZZ                               = 'amp-playbuzz';
    const POSITION_OBSERVER                      = 'amp-position-observer';
    const POWR_PLAYER                            = 'amp-powr-player';
    const REACH_PLAYER                           = 'amp-reach-player';
    const RECAPTCHA_INPUT                        = 'amp-recaptcha-input';
    const REDBULL_PLAYER                         = 'amp-redbull-player';
    const REDDIT                                 = 'amp-reddit';
    const RENDER                                 = 'amp-render';
    const RIDDLE_QUIZ                            = 'amp-riddle-quiz';
    const SCRIPT                                 = 'amp-script';
    const SELECTOR                               = 'amp-selector';
    const SIDEBAR                                = 'amp-sidebar';
    const SKIMLINKS                              = 'amp-skimlinks';
    const SLIDES                                 = 'amp-slides';
    const SMARTLINKS                             = 'amp-smartlinks';
    const SOCIAL_SHARE                           = 'amp-social-share';
    const SOUNDCLOUD                             = 'amp-soundcloud';
    const SPRINGBOARD_PLAYER                     = 'amp-springboard-player';
    const STATE                                  = 'amp-state';
    const STICKY_AD                              = 'amp-sticky-ad';
    const STORY                                  = 'amp-story';
    const STORY_360                              = 'amp-story-360';
    const STORY_ANIMATION                        = 'amp-story-animation';
    const STORY_AUTO_ADS                         = 'amp-story-auto-ads';
    const STORY_AUTO_ANALYTICS                   = 'amp-story-auto-analytics';
    const STORY_BOOKEND                          = 'amp-story-bookend';
    const STORY_CAPTIONS                         = 'amp-story-captions';
    const STORY_CONSENT                          = 'amp-story-consent';
    const STORY_CTA_LAYER                        = 'amp-story-cta-layer';
    const STORY_GRID_LAYER                       = 'amp-story-grid-layer';
    const STORY_INTERACTIVE                      = 'amp-story-interactive';
    const STORY_INTERACTIVE_BINARY_POLL          = 'amp-story-interactive-binary-poll';
    const STORY_INTERACTIVE_IMG_POLL             = 'amp-story-interactive-img-poll';
    const STORY_INTERACTIVE_IMG_QUIZ             = 'amp-story-interactive-img-quiz';
    const STORY_INTERACTIVE_POLL                 = 'amp-story-interactive-poll';
    const STORY_INTERACTIVE_QUIZ                 = 'amp-story-interactive-quiz';
    const STORY_INTERACTIVE_RESULTS              = 'amp-story-interactive-results';
    const STORY_PAGE                             = 'amp-story-page';
    const STORY_PAGE_ATTACHMENT                  = 'amp-story-page-attachment';
    const STORY_PAGE_OUTLINK                     = 'amp-story-page-outlink';
    const STORY_PANNING_MEDIA                    = 'amp-story-panning-media';
    const STORY_PLAYER                           = 'amp-story-player';
    const STORY_SHOPPING                         = 'amp-story-shopping';
    const STORY_SHOPPING_ATTACHMENT              = 'amp-story-shopping-attachment';
    const STORY_SHOPPING_CONFIG                  = 'amp-story-shopping-config';
    const STORY_SHOPPING_TAG                     = 'amp-story-shopping-tag';
    const STORY_SOCIAL_SHARE                     = 'amp-story-social-share';
    const STORY_SUBSCRIPTIONS                    = 'amp-story-subscriptions';
    const STREAM_GALLERY                         = 'amp-stream-gallery';
    const SUBSCRIPTIONS                          = 'amp-subscriptions';
    const SUBSCRIPTIONS_GOOGLE                   = 'amp-subscriptions-google';
    const TIKTOK                                 = 'amp-tiktok';
    const TIMEAGO                                = 'amp-timeago';
    const TRUNCATE_TEXT                          = 'amp-truncate-text';
    const TWITTER                                = 'amp-twitter';
    const USER_NOTIFICATION                      = 'amp-user-notification';
    const VIDEO                                  = 'amp-video';
    const VIDEO_DOCKING                          = 'amp-video-docking';
    const VIDEO_IFRAME                           = 'amp-video-iframe';
    const VIMEO                                  = 'amp-vimeo';
    const VINE                                   = 'amp-vine';
    const VIQEO_PLAYER                           = 'amp-viqeo-player';
    const VK                                     = 'amp-vk';
    const WEB_PUSH                               = 'amp-web-push';
    const WEB_PUSH_WIDGET                        = 'amp-web-push-widget';
    const WISTIA_PLAYER                          = 'amp-wistia-player';
    const WORDPRESS_EMBED                        = 'amp-wordpress-embed';
    const YOTPO                                  = 'amp-yotpo';
    const YOUTUBE                                = 'amp-youtube';
    const _3D_GLTF                               = 'amp-3d-gltf';
    const _3Q_PLAYER                             = 'amp-3q-player';

    /**
     * Prefix of an AMP extension.
     *
     * @var string
     */
    const PREFIX = 'amp-';
}
PK.3YKn���$�$9bunyad-amp/vendor/ampproject/amp-toolbox/src/FakeEnum.php<?php

/**
 * This file was copied from the myclabs/php-enum package, and only adapted for matching this package's namespace, code
 * style and minimum PHP requirement.
 *
 * Note: The base class was renamed from Enum to FakeEnum to avoid conflicts with PHP 8.1's enum language construct.
 *
 * @link    http://github.com/myclabs/php-enum
 * @license http://www.opensource.org/licenses/mit-license.php MIT
 */

namespace AmpProject;

use BadMethodCallException;
use JsonSerializable;
use ReflectionClass;
use UnexpectedValueException;

/**
 * Base FakeEnum class.
 *
 * Create an enum by implementing this class and adding class constants.
 *
 * Original code found in myclabs/php-enum.
 *
 * @author Matthieu Napoli <[email protected]>
 * @author Daniel Costa <[email protected]>
 * @author Mirosław Filip <[email protected]>
 *
 * @psalm-template T
 * @psalm-immutable
 * @psalm-consistent-constructor
 *
 * @package ampproject/amp-toolbox
 */
abstract class FakeEnum implements JsonSerializable
{
    /**
     * Enum value.
     *
     * @var mixed
     * @psalm-var T
     */
    protected $value;

    /**
     * Enum key, the constant name.
     *
     * @var string
     */
    private $key;

    /**
     * Store existing constants in a static cache per object.
     *
     * @var array
     * @psalm-var array<class-string, array<string, mixed>>
     */
    protected static $cache = [];

    /**
     * Cache of instances of the FakeEnum class.
     *
     * @var array
     * @psalm-var array<class-string, array<string, static>>
     */
    protected static $instances = [];

    /**
     * Creates a new value of some type.
     *
     * @psalm-pure
     * @param mixed $value Value to create the new enum instance for.
     *
     * @psalm-param T $value
     * @throws UnexpectedValueException If incompatible type is given.
     */
    public function __construct($value)
    {
        if ($value instanceof static) {
            /** @psalm-var T */
            $value = $value->getValue();
        }

        /** @psalm-suppress ImplicitToStringCast assertValidValueReturningKey returns always a string but psalm has currently an issue here */
        $this->key = static::assertValidValueReturningKey($value);

        /** @psalm-var T $value */
        $this->value = $value;
    }

    /**
     * This method exists only for the compatibility reason when deserializing a previously serialized version
     * that didn't have the key property.
     */
    public function __wakeup()
    {
        /** @psalm-suppress DocblockTypeContradiction key can be null when deserializing an enum without the key */
        if ($this->key === null) {
            /**
             * @psalm-suppress InaccessibleProperty key is not readonly as marked by psalm
             * @psalm-suppress PossiblyFalsePropertyAssignmentValue deserializing a case that was removed
             */
            $this->key = static::search($this->value);
        }
    }

    /**
     * Create a new enum instance from a value.
     *
     * @param mixed $value Value to create the new enum instance for.
     * @return static
     * @psalm-return static<T>
     * @throws UnexpectedValueException If the value is not part of the enum.
     */
    public static function from($value)
    {
        $key = static::assertValidValueReturningKey($value);

        return self::__callStatic($key, []);
    }

    /**
     * @psalm-pure
     * @return mixed
     * @psalm-return T
     */
    public function getValue()
    {
        return $this->value;
    }

    /**
     * Returns the enum key (i.e. the constant name).
     *
     * @psalm-pure
     * @return string
     */
    public function getKey()
    {
        return $this->key;
    }

    /**
     * @psalm-pure
     * @psalm-suppress InvalidCast
     * @return string
     */
    public function __toString()
    {
        return (string)$this->value;
    }

    /**
     * Determines if Enum should be considered equal with the variable passed as a parameter.
     * Returns false if an argument is an object of different class or not an object.
     *
     * This method is final, for more information read https://github.com/myclabs/php-enum/issues/4
     *
     * @psalm-pure
     * @psalm-param mixed $variable
     * @param mixed $variable Variable to compare the enum to.
     * @return bool
     */
    final public function equals($variable = null)
    {
        return $variable instanceof self
               && $this->getValue() === $variable->getValue()
               && static::class === get_class($variable);
    }

    /**
     * Returns the names (keys) of all constants in the FakeEnum class.
     *
     * @psalm-pure
     * @psalm-return list<string>
     * @return array
     */
    public static function keys()
    {
        return array_keys(static::toArray());
    }

    /**
     * Returns instances of the FakeEnum class of all Enum constants.
     *
     * @psalm-pure
     * @psalm-return array<string, static>
     * @return static[] Constant name in key, FakeEnum instance in value.
     */
    public static function values()
    {
        $values = [];

        /** @psalm-var T $value */
        foreach (static::toArray() as $key => $value) {
            $values[$key] = new static($value);
        }

        return $values;
    }

    /**
     * Returns all possible values as an array.
     *
     * @psalm-pure
     * @psalm-suppress ImpureStaticProperty
     *
     * @psalm-return array<string, mixed>
     * @return array Constant name in key, constant value in value
     */
    public static function toArray()
    {
        $class = static::class;

        if (!isset(static::$cache[$class])) {
            /** @psalm-suppress ImpureMethodCall this reflection API usage has no side-effects here */
            $reflection            = new ReflectionClass($class);
            /** @psalm-suppress ImpureMethodCall this reflection API usage has no side-effects here */
            static::$cache[$class] = $reflection->getConstants();
        }

        return static::$cache[$class];
    }

    /**
     * Check if is valid enum value.
     *
     * @param mixed $value Value to check for validity.
     * @psalm-param mixed $value
     * @psalm-pure
     * @psalm-assert-if-true T $value
     * @return bool
     */
    public static function isValid($value)
    {
        return in_array($value, static::toArray(), true);
    }

    /**
     * Asserts valid enum value.
     *
     * @psalm-pure
     * @psalm-assert T $value
     * @param mixed $value Value to assert for validity.
     * @throws UnexpectedValueException If the value is not part of the enum.
     */
    public static function assertValidValue($value)
    {
        self::assertValidValueReturningKey($value);
    }

    /**
     * Asserts valid enum value.
     *
     * @psalm-pure
     * @psalm-assert T $value
     * @param mixed $value Value to assert for validity.
     * @return string
     * @throws UnexpectedValueException If the value is not part of the enum.
     */
    protected static function assertValidValueReturningKey($value)
    {
        if (false === ($key = static::search($value))) {
            throw new UnexpectedValueException("Value '$value' is not part of the enum " . static::class);
        }

        return $key;
    }

    /**
     * Check if is valid enum key.
     *
     * @param string $key Key to check for validity.
     * @psalm-param string $key
     * @psalm-pure
     * @return bool
     */
    public static function isValidKey($key)
    {
        $array = static::toArray();

        return isset($array[$key]) || array_key_exists($key, $array);
    }

    /**
     * Return key for value.
     *
     * @param mixed $value Value to search for.
     *
     * @psalm-param mixed $value
     * @psalm-pure
     * @return string|false
     */
    public static function search($value)
    {
        return array_search($value, static::toArray(), true);
    }

    /**
     * Returns a value when called statically like so: MyEnum::SOME_VALUE() given SOME_VALUE is a class constant.
     *
     * @param string $name      Name of the method that was called.
     * @param array  $arguments Arguments provided to the method.
     *
     * @return static
     * @throws BadMethodCallException If the the method was not a known constant.
     *
     * @psalm-pure
     */
    public static function __callStatic($name, $arguments)
    {
        $class = static::class;
        if (!isset(self::$instances[$class][$name])) {
            $array = static::toArray();
            if (!isset($array[$name]) && ! array_key_exists($name, $array)) {
                $message = "No static method or enum constant '$name' in class " . static::class;
                throw new BadMethodCallException($message);
            }
            return self::$instances[$class][$name] = new static($array[$name]);
        }
        return clone self::$instances[$class][$name];
    }

    /**
     * Specify data which should be serialized to JSON. This method returns data that can be serialized by json_encode()
     * natively.
     *
     * @return mixed
     * @link http://php.net/manual/en/jsonserializable.jsonserialize.php
     * @psalm-pure
     */
    #[\ReturnTypeWillChange]
    public function jsonSerialize()
    {
        return $this->getValue();
    }
}
PK.3Y,!���7bunyad-amp/vendor/ampproject/amp-toolbox/src/Format.php<?php

namespace AmpProject;

/**
 * Interface with constants for the different AMP HTML formats.
 *
 * @package ampproject/amp-toolbox
 */
interface Format
{
    /**
     * AMP for websites format.
     *
     * @var string
     */
    const AMP = 'AMP';

    /**
     * AMP for ads format.
     *
     * @var string
     */
    const AMP4ADS = 'AMP4ADS';

    /**
     * AMP for email format.
     *
     * @var string
     */
    const AMP4EMAIL = 'AMP4EMAIL';
}
PK.3Y�|
���9bunyad-amp/vendor/ampproject/amp-toolbox/src/Internal.php<?php

namespace AmpProject;

/**
 * Interface with constants for AMP internals.
 *
 * @package ampproject/amp-toolbox
 */
interface Internal
{
    const SIZER           = 'i-amphtml-sizer';
    const SIZER_INTRINSIC = 'i-amphtml-sizer-intrinsic';
}
PK.3Y�iJ`��7bunyad-amp/vendor/ampproject/amp-toolbox/src/Layout.php<?php

namespace AmpProject;

/**
 * Interface with constants for the different layouts.
 *
 * @package ampproject/amp-toolbox
 */
interface Layout
{
    const NODISPLAY    = 'nodisplay';
    const FIXED        = 'fixed';
    const RESPONSIVE   = 'responsive';
    const FIXED_HEIGHT = 'fixed-height';
    const FILL         = 'fill';
    const CONTAINER    = 'container';
    const FLEX_ITEM    = 'flex-item';
    const FLUID        = 'fluid';
    const INTRINSIC    = 'intrinsic';

    const FROM_SPEC = [
        1 => self::NODISPLAY,
        2 => self::FIXED,
        3 => self::FIXED_HEIGHT,
        4 => self::RESPONSIVE,
        5 => self::CONTAINER,
        6 => self::FILL,
        7 => self::FLEX_ITEM,
        8 => self::FLUID,
        9 => self::INTRINSIC,
    ];

    const TO_SPEC = [
        self::NODISPLAY => 1,
        self::FIXED => 2,
        self::FIXED_HEIGHT => 3,
        self::RESPONSIVE => 4,
        self::CONTAINER => 5,
        self::FILL => 6,
        self::FLEX_ITEM => 7,
        self::FLUID => 8,
        self::INTRINSIC => 9,
    ];

    const SIZE_DEFINED_LAYOUTS = [
        self::FIXED,
        self::FIXED_HEIGHT,
        self::RESPONSIVE,
        self::FILL,
        self::FLEX_ITEM,
        self::INTRINSIC,
    ];
}
PK.3Yc�;;9bunyad-amp/vendor/ampproject/amp-toolbox/src/Protocol.php<?php

namespace AmpProject;

/**
 * Interface with constants for the known protocols.
 *
 * @package ampproject/amp-toolbox
 */
interface Protocol
{
    const AMP_SCRIPT     = 'amp-script';
    const AMP_STATE      = 'amp-state';
    const BBMI           = 'bbmi';
    const BIP            = 'bip';
    const CHROME         = 'chrome';
    const DATA           = 'data';
    const FACETIME       = 'facetime';
    const FB_ME          = 'fb-me';
    const FB_MESSENGER   = 'fb-messenger';
    const FEED           = 'feed';
    const FTP            = 'ftp';
    const GEO            = 'geo';
    const HTTP           = 'http';
    const HTTPS          = 'https';
    const INTENT         = 'intent';
    const ITMS_SERVICES  = 'itms-services';
    const LINE           = 'line';
    const MICROSOFT_EDGE = 'microsoft-edge';
    const MAILTO         = 'mailto';
    const MAPS           = 'maps';
    const SKYPE          = 'skype';
    const SMS            = 'sms';
    const SNAPCHAT       = 'snapchat';
    const TEL            = 'tel';
    const TG             = 'tg';
    const THREEMA        = 'threema';
    const TWITTER        = 'twitter';
    const VIBER          = 'viber';
    const WEBCAL         = 'webcal';
    const WEB_MASTODON   = 'web+mastodon';
    const WH             = 'wh';
    const WHATSAPP       = 'whatsapp';
}
PK.3Yo��Abunyad-amp/vendor/ampproject/amp-toolbox/src/RemoteGetRequest.php<?php

namespace AmpProject;

use AmpProject\Exception\FailedRemoteRequest;

/**
 * Interface for abstracting away the transport that is being used for making remote requests.
 *
 * This allows external code to replace the transport and tests to mock it.
 *
 * @package ampproject/amp-toolbox
 */
interface RemoteGetRequest
{
    /**
     * Do a GET request to retrieve the contents of a remote URL.
     *
     * @param string $url     URL to get.
     * @param array  $headers Optional. Associative array of headers to send with the request. Defaults to empty array.
     * @return Response Response for the executed request.
     * @throws FailedRemoteRequest If retrieving the contents from the URL failed.
     */
    public function get($url, $headers = []);
}
PK.3Y�P��9bunyad-amp/vendor/ampproject/amp-toolbox/src/Response.php<?php

namespace AmpProject;

/**
 * Response that was returned from a RemoteRequest execution.
 *
 * The method signatures are mostly a subset of PSR-7:
 * @see https://www.php-fig.org/psr/psr-7/
 *
 * @todo Consider using PSR-7 directly (both interfaces and a library that implements them).
 *
 * @package ampproject/amp-toolbox
 */
interface Response
{
    /**
     * Retrieves all message header values.
     *
     * The keys represent the header name as it will be sent over the wire, and each value is an array of strings
     * associated with the header.
     *
     *     // Represent the headers as a string
     *     foreach ($message->getHeaders() as $name => $values) {
     *         echo $name . ': ' . implode(', ', $values);
     *     }
     *
     *     // Emit headers iteratively:
     *     foreach ($message->getHeaders() as $name => $values) {
     *         foreach ($values as $value) {
     *             header(sprintf('%s: %s', $name, $value), false);
     *         }
     *     }
     *
     * While header names are not case-sensitive, getHeaders() will preserve the exact case in which headers were
     * originally specified.
     *
     * @return string[][] Returns an associative array of the message's headers. Each key MUST be a header name, and
     *                    each value MUST be an array of strings for that header.
     */
    public function getHeaders();

    /**
     * Checks if a header exists by the given case-insensitive name.
     *
     * @param string $name Case-insensitive header field name.
     * @return bool Returns true if any header names match the given header name using a case-insensitive string
     *                     comparison. Returns false if no matching header name is found in the message.
     */
    public function hasHeader($name);

    /**
     * Retrieves a message header value by the given case-insensitive name.
     *
     * This method returns an array of all the header values of the given case-insensitive header name.
     *
     * If the header does not appear in the message, this method MUST return an empty array.
     *
     * @param string $name Case-insensitive header field name.
     * @return string[] An array of string values as provided for the given header. If the header does not appear in
     *                     the message, this method MUST return an empty array.
     */
    public function getHeader($name);

    /**
     * Retrieves a comma-separated string of the values for a single header.
     *
     * This method returns all of the header values of the given case-insensitive header name as a string concatenated
     * together using a comma.
     *
     * NOTE: Not all header values may be appropriately represented using comma concatenation. For such headers, use
     * getHeader() instead and supply your own delimiter when concatenating.
     *
     * If the header does not appear in the message, this method MUST return an empty string.
     *
     * @param string $name Case-insensitive header field name.
     * @return string A string of values as provided for the given header concatenated together using a comma. If the
     *                header does not appear in the message, this method MUST return an empty string.
     */
    public function getHeaderLine($name);

    /**
     * Gets the response status code.
     *
     * The status code is a 3-digit integer result code of the server's attempt to understand and satisfy the request.
     *
     * @return int Status code.
     */
    public function getStatusCode();

    /**
     * Get the body of the response.
     *
     * @return mixed Body of the response.
     */
    public function getBody();
}
PK.3YAr�

?bunyad-amp/vendor/ampproject/amp-toolbox/src/RuntimeVersion.php<?php

namespace AmpProject;

/**
 * Queries https://cdn.ampproject.org/rtv/metadata for the latest AMP runtime version. Uses a stale-while-revalidate
 * caching strategy to avoid refreshing the version.
 *
 * More details: https://cdn.ampproject.org/rtv/metadata returns the following metadata:
 *
 * <pre>
 * {
 *    "ampRuntimeVersion": "CURRENT_PROD",
 *    "ampCssUrl": "https://cdn.ampproject.org/rtv/CURRENT_PROD/v0.css",
 *    "canaryPercentage": "0.1",
 *    "diversions": [
 *      "CURRENT_OPTIN",
 *      "CURRENT_1%",
 *      "CURRENT_CONTROL"
 *    ]
 *  }
 *  </pre>
 *
 *  where:
 *
 *  <ul>
 *    <li> CURRENT_OPTIN: is when you go to https://cdn.ampproject.org/experiments.html and toggle "dev-channel". It's
 *    the earliest possible time to get new code.</li>
 *    <li> CURRENT_1%: 1% is the same code as opt-in that we're now comfortable releasing to 1% of the population.</li>
 *    <li> CURRENT_CONTROL is the same thing as production, but with a different URL. This is to compare experiments
 *    against, since prod's immutable caching would affect metrics.</li>
 *  </ul>
 *
 * @package ampproject/amp-toolbox
 */
final class RuntimeVersion
{
    /**
     * Option to retrieve the latest canary version data instead of the production version data.
     *
     * @var string
     */
    const OPTION_CANARY = 'canary';

    /**
     * Endpoint to query for retrieving the runtime version data.
     */
    const RUNTIME_METADATA_ENDPOINT = 'https://cdn.ampproject.org/rtv/metadata';

    /**
     * Transport to use for remote requests.
     *
     * @var RemoteGetRequest
     */
    private $remoteRequest;

    /**
     * Instantiate a RuntimeVersion object.
     *
     * @param RemoteGetRequest $remoteRequest Transport to use for remote requests.
     */
    public function __construct(RemoteGetRequest $remoteRequest)
    {
        $this->remoteRequest = $remoteRequest;
    }

    /**
     * Returns the version of the current AMP runtime release.
     *
     * Pass [ canary => true ] to get the latest canary version.
     *
     * @param array $options Optional. Associative array of options.
     * @return string Version string of the AMP runtime.
     */
    public function currentVersion($options = [])
    {
        $response = $this->remoteRequest->get(self::RUNTIME_METADATA_ENDPOINT);
        $statusCode = $response->getStatusCode();

        if ($statusCode < 200 || $statusCode >= 300) {
            return '0';
        }

        $metadata = json_decode($response->getBody());

        $version = (! empty($options['canary']))
            ? $metadata->diversions[0]
            : $metadata->ampRuntimeVersion;

        return $this->padVersionString($version);
    }

    /**
     * Pad the version string to the required length.
     *
     * @param string $version Version string to pad.
     * @return string Padded version string.
     */
    private function padVersionString($version)
    {
        return str_pad($version, 15, '0');
    }

    /**
     * Append the runtime version to the host URL.
     *
     * @param string $host    Host domain to use.
     * @param string $version Version to use.
     * @return string Runtime version URL.
     */
    public static function appendRuntimeVersion($host, $version)
    {
        return "{$host}/rtv/{$version}";
    }
}
PK.3Y�Q���Ebunyad-amp/vendor/ampproject/amp-toolbox/src/ScriptReleaseVersion.php<?php

namespace AmpProject;

/**
 * Enum for denoting script release versions in use by AMP.
 *
 * @method static ScriptReleaseVersion UNKNOWN()
 * @method static ScriptReleaseVersion STANDARD()
 * @method static ScriptReleaseVersion LTS()
 * @method static ScriptReleaseVersion MODULE_NOMODULE()
 * @method static ScriptReleaseVersion MODULE_NOMODULE_LTS()
 *
 * @package ampproject/amp-toolbox
 */
final class ScriptReleaseVersion extends FakeEnum
{
    const UNKNOWN             = 'unknown';
    const STANDARD            = 'standard';
    const LTS                 = 'lts';
    const MODULE_NOMODULE     = 'module/nomodule';
    const MODULE_NOMODULE_LTS = 'module/nomodule LTS';
}
PK.3Y�ؓ��!�!4bunyad-amp/vendor/ampproject/amp-toolbox/src/Str.php<?php

namespace AmpProject;

/**
 * Helper class for dealing with multibyte-relevant string operations.
 *
 * @package ampproject/amp-toolbox
 */
final class Str
{
    /**
     * Whether to try to use multibyte functions.
     *
     * This can be used to forcefully disable multibyte functions even if they are available.
     *
     * @var bool
     */
    private static $useMultibyte = true;

    /**
     * Enable support for multibyte functions if they are available.
     */
    public static function enableMultibyte()
    {
        self::$useMultibyte = true;
    }

    /**
     * Disable support for multibyte functions, even if they are available.
     */
    public static function disableMultibyte()
    {
        self::$useMultibyte = false;
    }

    /**
     * Set the encoding that the string helper methods should use.
     *
     * This is simply being ignored if multi-byte support is not available.
     *
     * @param string $encoding Encoding to set the string helper methods to.
     */
    public static function setEncoding($encoding)
    {
        if (! self::$useMultibyte) {
            return;
        }

        if (function_exists('mb_internal_encoding')) {
            mb_internal_encoding($encoding);
        }

        if (function_exists('mb_regex_encoding')) {
            mb_regex_encoding($encoding);
        }
    }

    /**
     * Get the length of the text in characters.
     *
     * @param string $text Text to get the length of.
     *
     * @return int Length of the text in characters.
     */
    public static function length($text)
    {
        return (self::$useMultibyte && function_exists('mb_strlen'))
            ? mb_strlen($text)
            : strlen($text);
    }

    /**
     * Extract a substring from a string of text.
     *
     * @param string   $text   Text to extract the substring from.
     * @param int      $offset Offset into the text.
     * @param int|null $length Optional. Length of the substring to extract.
     *
     * @return string Substring extracted from the text.
     */
    public static function substring($text, $offset, $length = null)
    {
        if (self::$useMultibyte && function_exists('mb_substr')) {
            // Up until PHP 8, passing $length=null is not the same as not passing the $length argument.
            if ($length !== null) {
                return mb_substr($text, $offset, $length);
            }

            return mb_substr($text, $offset);
        }

        // Up until PHP 8, passing $length=null is not the same as not passing the $length argument.
        if ($length !== null) {
            return substr($text, $offset, $length);
        }

        return substr($text, $offset);
    }

    /**
     * Get the first position of a substring within the text.
     *
     * @param string $text      Text to look for the substring in.
     * @param string $substring Substring to look for.
     * @param int    $offset    Optional. Offset into the text. Defaults to 0.
     * @return int|false Position into the text at which the substring was found, or false if not found.
     */
    public static function position($text, $substring, $offset = 0)
    {
        // Make sure $offset is always an integer.
        $offset = $offset ? (int) $offset : 0;

        return (self::$useMultibyte && function_exists('mb_strpos'))
            ? mb_strpos($text, $substring, $offset)
            : strpos($text, $substring, $offset);
    }

    /**
     * Get the last position of a substring within the text.
     *
     * @param string $text      Text to look for the substring in.
     * @param string $substring Substring to look for.
     * @param int    $offset    Optional. Offset into the text. Defaults to 0.
     * @return int|false Position into the text at which the substring was found, or false if not found.
     */
    public static function lastPosition($text, $substring, $offset = 0)
    {
        // Make sure $offset is always an integer.
        $offset = $offset ? (int) $offset : 0;

        return (self::$useMultibyte && function_exists('mb_strrpos'))
            ? mb_strrpos($text, $substring, $offset)
            : strrpos($text, $substring, $offset);
    }

    /**
     * Convert text to lower case.
     *
     * @param string $text Text to convert to lower case.
     *
     * @return string Lower case text.
     */
    public static function toLowerCase($text)
    {
        return (self::$useMultibyte && function_exists('mb_strtolower'))
            ? mb_strtolower($text)
            : strtolower($text);
    }

    /**
     * Convert text to upper case.
     *
     * @param string $text Text to convert to upper case.
     *
     * @return string Upper case text.
     */
    public static function toUpperCase($text)
    {
        return (self::$useMultibyte && function_exists('mb_strtoupper'))
            ? mb_strtoupper($text)
            : strtoupper($text);
    }

    /**
     * Perform a regular expression search and replace.
     *
     * Note: This does not fully support named capture groups, due to a limitation in the mbstring extension.
     *
     * @param string $pattern  Regular expression pattern to target elements to replace.
     * @param string $text     Text to look for a match in.
     * @param array  $matches Optional. If $matches is provided, then it is filled with the results of search.
     * @return int|bool Whether the text matches the regular expression pattern.
     */
    public static function regexMatch($pattern, $text, &$matches = null)
    {
        if (self::$useMultibyte && function_exists('mb_ereg')) {
            list($pattern, $modifiers) = self::extractPatternAndModifiers($pattern);

            return self::position($modifiers, 'i') === false
                ? mb_ereg($pattern, $text, $matches)
                : mb_eregi($pattern, $text, $matches);
        }

        return preg_match($pattern, $text, $matches);
    }

    /**
     * Perform a regular expression search and replace.
     *
     * Note: This does not fully support named capture groups, due to a limitation in the mbstring extension.
     *
     * @param string $pattern     Regular expression pattern to target elements to replace.
     * @param string $replacement Replacement string.
     * @param string $subject     Subject to do the replacements with.
     * @return string|null Modified string, or null on error.
     */
    public static function regexReplace($pattern, $replacement, $subject)
    {
        if (self::$useMultibyte && function_exists('mb_ereg_replace')) {
            list($pattern, $modifiers) = self::extractPatternAndModifiers($pattern);

            return mb_ereg_replace($pattern, $replacement, $subject, $modifiers);
        }

        return preg_replace($pattern, $replacement, $subject);
    }


    /**
     * Perform a regular expression search and replace.
     *
     * @param string   $pattern  Regular expression pattern to target elements to replace.
     * @param callable $callback Replacement string.
     * @param string   $subject  Subject to do the replacements with.
     * @return string|null Modified string, or null on error.
     */
    public static function regexReplaceCallback($pattern, $callback, $subject)
    {
        if (self::$useMultibyte && function_exists('mb_ereg_replace_callback')) {
            list($pattern, $modifiers) = self::extractPatternAndModifiers($pattern);

            return mb_ereg_replace_callback($pattern, $callback, $subject, $modifiers);
        }

        return preg_replace_callback($pattern, $callback, $subject);
    }

    /**
     * Extract multi-byte regex pattern and modifiers from single-byte pattern.
     *
     * The mb_ereg_* functions don't use a separator, so we need to adapt the preg_* patterns.
     *
     * @param string $pattern Regular expression preg_* pattern that we need to adapt for mb_ereg_*.
     * @return array Array with the adapted pattern and the modifiers.
     */
    private static function extractPatternAndModifiers($pattern)
    {
        $separator            = self::substring($pattern, 0, 1);
        $secondSeparatorIndex = self::lastPosition($pattern, $separator, 1);
        $modifiers            = self::substring($pattern, $secondSeparatorIndex + 1);
        $pattern              = self::substring($pattern, 1, $secondSeparatorIndex - 1);

        // UTF-8 flag 'u' from preg_* means "GNU regex" for mb_ereg_* functions, so we better strip it.
        $modifiers = str_replace('u', '', $modifiers);

        return [$pattern, $modifiers];
    }
}
PK.3Yq�\4bunyad-amp/vendor/ampproject/amp-toolbox/src/Url.php<?php

namespace AmpProject;

use AmpProject\Exception\FailedToParseUrl;

/**
 * Helper class to work with URLs.
 *
 * @property-read string|null $scheme
 * @property-read string|null $host
 * @property-read string|null $port
 * @property-read string|null $user
 * @property-read string|null $pass
 * @property-read string|null $path
 * @property-read string|null $query
 * @property-read string|null $fragment
 *
 * @package ampproject/amp-toolbox
 */
final class Url
{
    const SCHEME   = 'scheme';
    const HOST     = 'host';
    const PORT     = 'port';
    const USER     = 'user';
    const PASS     = 'pass';
    const PATH     = 'path';
    const QUERY    = 'query';
    const FRAGMENT = 'fragment';

    /**
     * Regular expression pattern used to collapse the current path ('.').
     *
     * @var string
     */
    const COLLAPSE_CURRENT_PATHS_REGEX_PATTERN = '#/\./#';

    /**
     * Regular expression pattern used to collapse a relative path ('..').
     *
     * @var string
     */
    const COLLAPSE_RELATIVE_PATHS_REGEX_PATTERN = '#(?<=/)(?!\.\./)[^/]+/\.\./#';

    /**
     * Error message to use when the __get() is triggered for an unknown property.
     *
     * @var string
     */
    const PROPERTY_GETTER_ERROR_MESSAGE = 'Undefined property: AmpProject\\Url::';

    /**
     * Scheme.
     *
     * @var string|null
     */
    private $scheme;

    /**
     * Host.
     *
     * @var string|null
     */
    private $host;

    /**
     * Port.
     *
     * @var string|null
     */
    private $port;

    /**
     * User.
     *
     * @var string|null
     */
    private $user;

    /**
     * Password.
     *
     * @var string|null
     */
    private $pass;

    /**
     * Query string.
     *
     * @var string|null
     */
    private $query;

    /**
     * Path.
     *
     * @var string|null
     */
    private $path;

    /**
     * Fragment.
     *
     * @var string|null
     */
    private $fragment;

    /**
     * Default URL parts to use when constructing an absolute URL out of a relative one.
     *
     * @var array{
     *    scheme: string,
     *    host: string,
     *    port: null,
     *    user: null,
     *    pass: null,
     *    path: null,
     *    query: null,
     *    fragment: null
     * }
     */
    const URL_DEFAULT_PARTS = [
        self::SCHEME   => 'https',
        self::HOST     => 'example.com',
        self::PORT     => null,
        self::USER     => null,
        self::PASS     => null,
        self::PATH     => null,
        self::QUERY    => null,
        self::FRAGMENT => null,
    ];

    /**
     * Url constructor.
     *
     * @param string|null $url     URL.
     * @param Url|null    $baseUrl Base URL.
     * @throws FailedToParseUrl Exception when the URL or Base URL is malformed.
     */
    public function __construct($url = null, Url $baseUrl = null)
    {
        $parsedUrl = [];

        if ($url !== null) {
            $parsedUrl = parse_url($url);
            if (false === $parsedUrl) {
                throw FailedToParseUrl::forUrl($url);
            }
        }

        if ($baseUrl) {
            if (isset($parsedUrl[self::PATH]) && 0 !== strpos($parsedUrl[self::PATH], '/')) {
                $root                  = rtrim($baseUrl->path, '/');
                $parsedUrl[self::PATH] = $this->unrelativizePath("{$root}/{$parsedUrl[self::PATH]}");
            }
            $parsedUrl = array_merge($baseUrl->toArray(), $parsedUrl);
        }

        if ($parsedUrl) {
            foreach ($parsedUrl as $key => $value) {
                if (property_exists($this, $key)) {
                    $this->$key = $value;
                }
            }
        }
    }

    /**
     * Eliminate relative segments (../ and ./) from a path.
     *
     * @param string $path Path with relative segments. This is not a URL, so no host and no query string.
     * @return string Unrelativized path.
     */
    private function unrelativizePath($path)
    {

        // Eliminate current directory relative paths, like <foo/./bar/./baz.css> => <foo/bar/baz.css>.
        do {
            $path = preg_replace(
                self::COLLAPSE_CURRENT_PATHS_REGEX_PATTERN,
                '/',
                $path,
                -1,
                $count
            );
        } while (0 !== $count);

        // Collapse relative paths, like <foo/bar/../../baz.css> => <baz.css>.
        do {
            $path = preg_replace(
                self::COLLAPSE_RELATIVE_PATHS_REGEX_PATTERN,
                '',
                $path,
                1,
                $count
            );
        } while (0 !== $count);

        return $path;
    }

    /**
     * Check whether the URL is a valid image source URL.
     *
     * @return bool Whether the src string is a valid image source URL.
     */
    public function isValidNonDataUrl()
    {
        // Bail early on 'data:' assets.
        if ($this->scheme === 'data') {
            return false;
        }

        // @TODO: This probably needs additional logic.

        $parts = array_merge(self::URL_DEFAULT_PARTS, $this->toArray(true));

        return (bool)filter_var(self::toString($parts), FILTER_VALIDATE_URL);
    }

    /**
     * Get the URL parts as an associative array.
     *
     * @param bool $sparse Whether to only include parts with non-empty values.
     *
     * @return array Associative array with URL parts.
     */
    public function toArray($sparse = false)
    {
        $array = [
            self::SCHEME   => $this->scheme,
            self::HOST     => $this->host,
            self::PORT     => $this->port,
            self::USER     => $this->user,
            self::PASS     => $this->pass,
            self::PATH     => $this->path,
            self::QUERY    => $this->query,
            self::FRAGMENT => $this->fragment,
        ];

        return $sparse ? array_filter($array) : $array;
    }

    /**
     * Serialize to string.
     *
     * @return string URL.
     */
    public function __toString()
    {
        return self::toString($this->toArray());
    }

    /**
     * Return a provided URL parsed into parts as an assembled string.
     *
     * @param array $parts Parts of the URL to assemble.
     * @return string Assembled URL string.
     */
    public static function toString($parts)
    {
        $url = ! empty($parts[self::SCHEME]) ? "{$parts[self::SCHEME]}://" : '//';

        if (! empty($parts[self::USER])) {
            $url .= "{$parts[self::USER]}";
            if (! empty($parts[self::PASS])) {
                $url .= ":{$parts[self::PASS]}";
            }
            $url .= '@';
        }

        $url .= ! empty($parts[self::HOST]) ? "{$parts[self::HOST]}" : 'localhost';

        if (! empty($parts[self::PORT])) {
            $url .= ":{$parts[self::PORT]}";
        }

        $url .= ! empty($parts[self::PATH]) ? "{$parts[self::PATH]}" : '/';

        if (! empty($parts[self::QUERY])) {
            $url .= "?{$parts[self::QUERY]}";
        }

        if (! empty($parts[self::FRAGMENT])) {
            $url .= "#{$parts[self::FRAGMENT]}";
        }

        return $url;
    }

    /**
     * Magic getter to return the individual parts.
     *
     * @param string $name Name of the part to return.
     * @return string|null Part string or null if it was not found during parsing.
     */
    public function __get($name)
    {
        if (array_key_exists($name, self::URL_DEFAULT_PARTS)) {
            return $this->$name;
        }

        // Mimic regular PHP behavior for missing notices.
        trigger_error(self::PROPERTY_GETTER_ERROR_MESSAGE . $name, E_USER_NOTICE);
        return null;
    }
}
PK.3Y@KR���Bbunyad-amp/vendor/ampproject/amp-toolbox/src/Cli/AmpExecutable.php<?php

namespace AmpProject\Cli;

use AmpProject\Exception\Cli\InvalidCommand;

/**
 * Executable that assembles all of the commands.
 *
 * @package ampproject/amp-toolbox
 */
final class AmpExecutable extends Executable
{
    /**
     * Array of command classes to register.
     *
     * @var string[]
     */
    const COMMAND_CLASSES = [
        Command\Optimize::class,
        Command\Validate::class,
    ];

    /**
     * Array of command object instances.
     *
     * @var Command[]
     */
    private $commandInstances = [];

    /**
     * Register options and arguments on the given $options object.
     *
     * @param Options $options Options instance to register the commands with.
     * @return void
     */
    protected function setup(Options $options)
    {
        foreach (self::COMMAND_CLASSES as $commandClass) {
            /** @var Command $command */
            $command = new $commandClass($this);

            $command->register($options);

            $this->commandInstances[$command->getName()] = $command;
        }
    }

    /**
     * Your main program.
     *
     * Arguments and options have been parsed when this is run.
     *
     * @param Options $options Options instance to register the commands with.
     * @return void
     */
    protected function main(Options $options)
    {
        $commandName = $options->getCommand();

        if (empty($commandName)) {
            echo $this->options->help();
            exit(1);
        }

        if (! array_key_exists($commandName, $this->commandInstances)) {
            throw InvalidCommand::forUnregisteredCommand($commandName);
        }

        $command = $this->commandInstances[$commandName];

        $command->process($options);
    }
}
PK.3Y|+J�bb;bunyad-amp/vendor/ampproject/amp-toolbox/src/Cli/Colors.php<?php

namespace AmpProject\Cli;

use AmpProject\Exception\Cli\InvalidColor;

/**
 * This file is adapted from the splitbrain\php-cli library, which is authored by Andreas Gohr <[email protected]> and
 * licensed under the MIT license.
 *
 * Source: https://github.com/splitbrain/php-cli/blob/8c2c001b1b55d194402cf18aad2757049ac6d575/src/Colors.php
 */

/**
 * Handles color output on (Unix) terminals.
 *
 * @package ampproject/amp-toolbox
 */
class Colors
{
    const C_BLACK       = 'black';
    const C_BLUE        = 'blue';
    const C_BROWN       = 'brown';
    const C_CYAN        = 'cyan';
    const C_DARKGRAY    = 'darkgray';
    const C_GREEN       = 'green';
    const C_LIGHTBLUE   = 'lightblue';
    const C_LIGHTCYAN   = 'lightcyan';
    const C_LIGHTGRAY   = 'lightgray';
    const C_LIGHTGREEN  = 'lightgreen';
    const C_LIGHTPURPLE = 'lightpurple';
    const C_LIGHTRED    = 'lightred';
    const C_PURPLE      = 'purple';
    const C_RED         = 'red';
    const C_RESET       = 'reset';
    const C_WHITE       = 'white';
    const C_YELLOW      = 'yellow';

    /**
     * Associative array of known color names.
     *
     * @var array<string>
     */
    const KNOWN_COLORS = [
        self::C_RESET       => "\33[0m",
        self::C_BLACK       => "\33[0;30m",
        self::C_DARKGRAY    => "\33[1;30m",
        self::C_BLUE        => "\33[0;34m",
        self::C_LIGHTBLUE   => "\33[1;34m",
        self::C_GREEN       => "\33[0;32m",
        self::C_LIGHTGREEN  => "\33[1;32m",
        self::C_CYAN        => "\33[0;36m",
        self::C_LIGHTCYAN   => "\33[1;36m",
        self::C_RED         => "\33[0;31m",
        self::C_LIGHTRED    => "\33[1;31m",
        self::C_PURPLE      => "\33[0;35m",
        self::C_LIGHTPURPLE => "\33[1;35m",
        self::C_BROWN       => "\33[0;33m",
        self::C_YELLOW      => "\33[1;33m",
        self::C_LIGHTGRAY   => "\33[0;37m",
        self::C_WHITE       => "\33[1;37m",
    ];

    /**
     * Whether colors should be used.
     *
     * @var bool
     */
    protected $enabled = true;

    /**
     * Constructor.
     *
     * Tries to disable colors for non-terminals.
     */
    public function __construct()
    {
        $this->enabled = getenv('TERM') || (function_exists('posix_isatty') && posix_isatty(STDOUT));
    }

    /**
     * Enable color output.
     */
    public function enable()
    {
        $this->enabled = true;
    }

    /**
     * Disable color output.
     */
    public function disable()
    {
        $this->enabled = false;
    }

    /**
     * Check whether color support is enabled.
     *
     * @return bool
     */
    public function isEnabled()
    {
        return $this->enabled;
    }

    /**
     * Convenience function to print a line in a given color.
     *
     * @param string   $line    The line to print. A new line is added automatically.
     * @param string   $color   One of the available color names.
     * @param resource $channel Optional. File descriptor to write to. Defaults to STDOUT.
     * @throws InvalidColor If the requested color code is not known.
     */
    public function line($line, $color, $channel = STDOUT)
    {
        $this->set($color);
        fwrite($channel, rtrim($line) . "\n");
        $this->reset();
    }

    /**
     * Returns the given text wrapped in the appropriate color and reset code
     *
     * @param string $text  String to wrap.
     * @param string $color One of the available color names.
     * @return string The wrapped string.
     * @throws InvalidColor If the requested color code is not known.
     */
    public function wrap($text, $color)
    {
        return $this->getColorCode($color) . $text . $this->getColorCode(self::C_RESET);
    }

    /**
     * Gets the appropriate terminal code for the given color.
     *
     * @param string $color One of the available color names.
     * @return string Color code.
     * @throws InvalidColor If the requested color code is not known.
     */
    public function getColorCode($color)
    {
        if (! array_key_exists($color, self::KNOWN_COLORS)) {
            throw InvalidColor::forUnknownColor($color);
        }

        if (! $this->enabled) {
            return '';
        }

        return self::KNOWN_COLORS[$color];
    }

    /**
     * Set the given color for consecutive output.
     *
     * @param string   $color   One of the supported color names.
     * @param resource $channel Optional. File descriptor to write to. Defaults to STDOUT.
     * @throws InvalidColor If the requested color code is not known.
     */
    public function set($color, $channel = STDOUT)
    {
        fwrite($channel, $this->getColorCode($color));
    }

    /**
     * Reset the terminal color.
     *
     * @param resource $channel Optional. File descriptor to write to. Defaults to STDOUT.
     */
    public function reset($channel = STDOUT)
    {
        $this->set(self::C_RESET, $channel);
    }
}
PK.3Y�|�<bunyad-amp/vendor/ampproject/amp-toolbox/src/Cli/Command.php<?php

namespace AmpProject\Cli;

/**
 * A command that is registered with the amp executable.
 *
 * @package AmpProject\Cli
 */
abstract class Command
{
    /**
     * Name of the command.
     *
     * This needs to be overridden in extending commands.
     *
     * @var string
     */
    const NAME = '<unknown>';

    /**
     * Instance of the CLI executable that the command belongs to.
     *
     * @var Executable
     */
    protected $cli;

    /**
     * Instantiate the command.
     *
     * @param Executable $cli Instance of the CLI executable that the command belongs to.
     */
    public function __construct(Executable $cli)
    {
        $this->cli = $cli;
    }

    /**
     * Get the name of the command.
     *
     * @return string Name of the command.
     */
    public function getName()
    {
        return static::NAME;
    }

    /**
     * Register the command.
     *
     * @param Options $options Options instance to register the command with.
     */
    abstract public function register(Options $options);

    /**
     * Process the command.
     *
     * Arguments and options have been parsed when this is run.
     *
     * @param Options $options Options instance to process the command with.
     */
    abstract public function process(Options $options);
}
PK.3YoRƲ�/�/?bunyad-amp/vendor/ampproject/amp-toolbox/src/Cli/Executable.php<?php

namespace AmpProject\Cli;

use AmpProject\Exception\AmpCliException;
use AmpProject\Exception\Cli\InvalidSapi;
use Exception;

/**
 * This file is adapted from the splitbrain\php-cli library, which is authored by Andreas Gohr <[email protected]> and
 * licensed under the MIT license.
 *
 * Source: https://github.com/splitbrain/php-cli/blob/fb4f888866d090b10e3e68292d197ca274cea626/src/CLI.php
 */

/**
 * Your commandline script should inherit from this class and implement the abstract methods.
 *
 * @package ampproject/amp-toolbox
 */
abstract class Executable
{
    /**
     * Instance of the Colors helper object.
     *
     * @var Colors
     */
    public $colors;

    /**
     * The executable script itself.
     *
     * @var string
     */
    protected $bin;

    /**
     * Instance of the options parser to use.
     *
     * @var Options
     */
    protected $options;

    /**
     * PSR-3 compatible log levels and their prefix, color, output channel.
     *
     * @var array<array>
     */
    protected $loglevels = [
        LogLevel::DEBUG     => ['', Colors::C_RESET, STDOUT],
        LogLevel::INFO      => ['ℹ ', Colors::C_CYAN, STDOUT],
        LogLevel::NOTICE    => ['☛ ', Colors::C_CYAN, STDOUT],
        LogLevel::SUCCESS   => ['✓ ', Colors::C_GREEN, STDOUT],
        LogLevel::WARNING   => ['⚠ ', Colors::C_BROWN, STDERR],
        LogLevel::ERROR     => ['✗ ', Colors::C_RED, STDERR],
        LogLevel::CRITICAL  => ['☠ ', Colors::C_LIGHTRED, STDERR],
        LogLevel::ALERT     => ['✖ ', Colors::C_LIGHTRED, STDERR],
        LogLevel::EMERGENCY => ['✘ ', Colors::C_LIGHTRED, STDERR],
    ];

    /**
     * Default log level.
     *
     * @var string
     */
    protected $loglevel = 'info';

    /**
     * Constructor.
     *
     * Initialize the arguments, set up helper classes and set up the CLI environment.
     *
     * @param bool         $autocatch Optional. Whether exceptions should be caught and handled automatically. Defaults
     *                                to true.
     * @param Options|null $options   Optional. Instance of the Options object to use. Defaults to null to instantiate a
     *                                new one.
     * @param Colors|null  $colors    Optional. Instance of the Colors object to use. Defaults to null to instantiate a
     *                                new one.
     */
    public function __construct($autocatch = true, Options $options = null, Colors $colors = null)
    {
        if ($autocatch) {
            set_exception_handler([$this, 'fatal']);
        }

        $this->colors  = $colors instanceof Colors ? $colors : new Colors();
        $this->options = $options instanceof Options ? $options : new Options($this->colors);
    }

    /**
     * Execute the CLI program.
     *
     * Executes the setup() routine, adds default options, initiate the options parsing and argument checking
     * and finally executes main() - Each part is split into their own protected function below, so behaviour
     * can easily be overwritten.
     *
     * @param bool $exitOnCompletion Optional. Whether to exit on completion. Defaults to true.
     * @throws InvalidSapi If a SAPI other than 'cli' is detected.
     */
    public function run($exitOnCompletion = true)
    {
        $sapi = php_sapi_name();

        if ('cli' !== $sapi) {
            throw InvalidSapi::forSapi($sapi);
        }

        $this->setup($this->options);
        $this->registerDefaultOptions();
        $this->parseOptions();
        $this->handleDefaultOptions();
        $this->setupLogging();
        $this->checkArguments();
        $this->execute();

        if ($exitOnCompletion) {
            exit(0);
        }
    }

    /**
     * Exits the program on a fatal error.
     *
     * @param Exception|string $error   Either an exception or an error message.
     * @param array            $context Optional. Associative array of contextual information. Defaults to an empty
     *                                  array.
     */
    public function fatal($error, array $context = [])
    {
        $code = 0;

        if ($error instanceof Exception) {
            $this->debug(get_class($error) . ' caught in ' . $error->getFile() . ':' . $error->getLine());
            $this->debug($error->getTraceAsString());
            $code  = $error->getCode();
            $error = $error->getMessage();
        }

        if (! $code) {
            $code = AmpCliException::E_ANY;
        }

        $this->critical($error, $context);

        exit($code);
    }

    /**
     * System is unusable.
     *
     * @param string $message Log message.
     * @param array  $context Optional. Contextual information. Defaults to an empty array.
     * @return void
     */
    public function emergency($message, array $context = [])
    {
        $this->log(LogLevel::EMERGENCY, $message, $context);
    }

    /**
     * Action must be taken immediately.
     *
     * Example: Entire website down, database unavailable, etc. This should trigger the SMS alerts and wake you up.
     *
     * @param string $message Log message.
     * @param array  $context Optional. Contextual information. Defaults to an empty array.
     * @return void
     */
    public function alert($message, array $context = [])
    {
        $this->log(LogLevel::ALERT, $message, $context);
    }

    /**
     * Critical conditions.
     *
     * Example: Application component unavailable, unexpected exception.
     *
     * @param string $message Log message.
     * @param array  $context Optional. Contextual information. Defaults to an empty array.
     * @return void
     */
    public function critical($message, array $context = [])
    {
        $this->log(LogLevel::CRITICAL, $message, $context);
    }

    /**
     * Runtime errors that do not require immediate action but should typically be logged and monitored.
     *
     * @param string $message Log message.
     * @param array  $context Optional. Contextual information. Defaults to an empty array.
     * @return void
     */
    public function error($message, array $context = [])
    {
        $this->log(LogLevel::ERROR, $message, $context);
    }

    /**
     * Exceptional occurrences that are not errors.
     *
     * Example: Use of deprecated APIs, poor use of an API, undesirable things that are not necessarily wrong.
     *
     * @param string $message Log message.
     * @param array  $context Optional. Contextual information. Defaults to an empty array.
     * @return void
     */
    public function warning($message, array $context = [])
    {
        $this->log(LogLevel::WARNING, $message, $context);
    }

    /**
     * Normal, positive outcome.
     *
     * @param string $string  Log message.
     * @param array  $context Optional. Contextual information. Defaults to an empty array.
     * @return void
     */
    public function success($string, array $context = [])
    {
        $this->log(LogLevel::SUCCESS, $string, $context);
    }

    /**
     * Normal but significant events.
     *
     * @param string $message Log message.
     * @param array  $context Optional. Contextual information. Defaults to an empty array.
     * @return void
     */
    public function notice($message, array $context = [])
    {
        $this->log(LogLevel::NOTICE, $message, $context);
    }

    /**
     * Interesting events.
     *
     * Example: User logs in, SQL logs.
     *
     * @param string $message Log message.
     * @param array  $context Optional. Contextual information. Defaults to an empty array.
     * @return void
     */
    public function info($message, array $context = [])
    {
        $this->log(LogLevel::INFO, $message, $context);
    }

    /**
     * Detailed debug information.
     *
     * @param string $message Log message.
     * @param array  $context Optional. Contextual information. Defaults to an empty array.
     * @return void
     */
    public function debug($message, array $context = [])
    {
        $this->log(LogLevel::DEBUG, $message, $context);
    }

    /**
     * Log a message of a given log level to the logs.
     *
     * @param string $level   Log level to use.
     * @param string $message Log message.
     * @param array  $context Optional. Contextual information. Defaults to an empty array.
     * @return void
     */
    public function log($level, $message, array $context = [])
    {
        if (! LogLevel::matches($level, $this->options->getOption('loglevel', $this->loglevel))) {
            return;
        }

        list($prefix, $color, $channel) = $this->loglevels[$level];

        if (! $this->colors->isEnabled()) {
            $prefix = '';
        }

        $message = $this->interpolate($message, $context);

        $this->colors->line($prefix . $message, $color, $channel);
    }

    /**
     * Interpolates context values into the message placeholders.
     *
     * @param string $message Message to interpolate.
     * @param array  $context Optional. Contextual information. Defaults to an empty array.
     * @return string Interpolated string.
     */
    protected function interpolate($message, array $context = [])
    {
        // Build a replacement array with braces around the context keys.
        $replace = [];
        foreach ($context as $key => $val) {
            // Check that the value can be cast to string.
            if (
                ! is_array($val)
                &&
                (
                    ! is_object($val)
                    || method_exists($val, '__toString')
                )
            ) {
                $replace['{' . $key . '}'] = $val;
            }
        }

        // Interpolate replacement values into the message and return.
        return strtr($message, $replace);
    }

    /**
     * Add the default help, color and log options.
     */
    protected function registerDefaultOptions()
    {
        $this->options->registerOption(
            'help',
            'Display this help screen and exit immediately.',
            'h'
        );
        $this->options->registerOption(
            'no-colors',
            'Do not use any colors in output. Useful when piping output to other tools or files.'
        );
        $this->options->registerOption(
            'loglevel',
            "Minimum level of messages to display. Default is {$this->colors->wrap($this->loglevel, Colors::C_CYAN)}."
            . ' Valid levels are: debug, info, notice, success, warning, error, critical, alert, emergency.',
            null,
            'level'
        );
    }

    /**
     * Handle the default options.
     */
    protected function handleDefaultOptions()
    {
        if ($this->options->getOption('no-colors')) {
            $this->colors->disable();
        }
        if ($this->options->getOption('help')) {
            echo $this->options->help();
            exit(0);
        }
    }

    /**
     * Handle the logging options.
     */
    protected function setupLogging()
    {
        $this->loglevel = $this->options->getOption('loglevel', $this->loglevel);

        if (! in_array($this->loglevel, LogLevel::ORDER)) {
            $this->fatal('Unknown log level');
        }
    }

    /**
     * Wrapper around the option parsing.
     */
    protected function parseOptions()
    {
        $this->options->parseOptions();
    }

    /**
     * Wrapper around the argument checking.
     */
    protected function checkArguments()
    {
        $this->options->checkArguments();
    }

    /**
     * Wrapper around main.
     */
    protected function execute()
    {
        $this->main($this->options);
    }

    /**
     * Register options and arguments on the given $options object.
     *
     * @param Options $options Options instance to register the commands with.
     * @return void
     */
    abstract protected function setup(Options $options);

    /**
     * Main program routine.
     *
     * Arguments and options have been parsed when this is run.
     *
     * @param Options $options Options instance to register the commands with.
     * @return void
     */
    abstract protected function main(Options $options);
}
PK.3Y�]�	�	=bunyad-amp/vendor/ampproject/amp-toolbox/src/Cli/LogLevel.php<?php

namespace AmpProject\Cli;

use AmpProject\Exception\AmpCliException;
use AmpProject\Exception\Cli\InvalidSapi;
use Exception;

/**
 * Abstract class with the individual log levels.
 *
 * @package ampproject/amp-toolbox
 */
abstract class LogLevel
{
    /**
     * Detailed debug information.
     *
     * @var string
     */
    const DEBUG = 'debug';

    /**
     * Interesting events.
     *
     * Example: User logs in, SQL logs.
     *
     * @var string
     */
    const INFO = 'info';

    /**
     * Normal but significant events.
     *
     * @var string
     */
    const NOTICE = 'notice';

    /**
     * Normal, positive outcome.
     *
     * @var string
     */
    const SUCCESS = 'success';

    /**
     * Exceptional occurrences that are not errors.
     *
     * Example: Use of deprecated APIs, poor use of an API, undesirable things that are not necessarily wrong.
     *
     * @var string
     */
    const WARNING = 'warning';

    /**
     * Runtime errors that do not require immediate action but should typically be logged and monitored.
     *
     * @var string
     */
    const ERROR = 'error';

    /**
     * Critical conditions.
     *
     * Example: Application component unavailable, unexpected exception.
     *
     * @var string
     */
    const CRITICAL = 'critical';

    /**
     * Action must be taken immediately.
     *
     * Example: Entire website down, database unavailable, etc. This should trigger the SMS alerts and wake you up.
     *
     * @var string
     */
    const ALERT = 'alert';

    /**
     * System is unusable.
     *
     * @var string
     */
    const EMERGENCY = 'emergency';

    /**
     * Ordering to use for log levels.
     *
     * @var string[]
     */
    const ORDER = [
        self::DEBUG,
        self::INFO,
        self::NOTICE,
        self::SUCCESS,
        self::WARNING,
        self::ERROR,
        self::CRITICAL,
        self::ALERT,
        self::EMERGENCY,
    ];

    /**
     * Test whether a given log level matches the currently set threshold.
     *
     * @param string $logLevel Log level to check.
     * @param string $threshold Log level threshold to check against.
     * @return bool Whether the provided log level matches the threshold.
     */
    public static function matches($logLevel, $threshold)
    {
        return array_search($logLevel, self::ORDER, true) >= array_search($threshold, self::ORDER, true);
    }
}
PK.3Yt�b�G�G<bunyad-amp/vendor/ampproject/amp-toolbox/src/Cli/Options.php<?php

namespace AmpProject\Cli;

use AmpProject\Exception\Cli\InvalidArgument;
use AmpProject\Exception\Cli\InvalidCommand;
use AmpProject\Exception\Cli\InvalidOption;
use AmpProject\Exception\Cli\MissingArgument;

/**
 * This file is adapted from the splitbrain\php-cli library, which is authored by Andreas Gohr <[email protected]> and
 * licensed under the MIT license.
 *
 * Source: https://github.com/splitbrain/php-cli/blob/8c2c001b1b55d194402cf18aad2757049ac6d575/src/Options.php
 */

/**
 * Parses command line options passed to the CLI script. Allows CLI scripts to easily register all accepted options and
 * commands and even generates a help text from this setup.
 *
 * @package ampproject/amp-toolbox
 */
class Options
{
    /**
     * List of options to parse.
     *
     * @var array
     */
    protected $setup;

    /**
     * Storage for parsed options.
     *
     * @var array
     */
    protected $options = [];

    /**
     * Currently parsed command if any.
     *
     * @var string
     */
    protected $command = '';

    /**
     * Passed non-option arguments.
     *
     * @var array
     */
    protected $arguments = [];

    /**
     * Name of the executed script.
     *
     * @var string
     */
    protected $bin;

    /**
     * Instance of the Colors helper object.
     *
     * @var Colors
     */
    protected $colors;

    /**
     * Newline used for spacing help texts.
     *
     * @var string
     */
    protected $newline = "\n";

    /**
     * Constructor.
     *
     * @param Colors $colors Optional. Configured color object.
     * @throws InvalidArgument When arguments can't be read.
     */
    public function __construct(Colors $colors = null)
    {
        $this->colors = $colors instanceof Colors ? $colors : new Colors();

        $this->setup = [
            '' => [
                'options'     => [],
                'arguments'   => [],
                'help'        => '',
                'commandHelp' => 'This tool accepts a command as first parameter as outlined below:',
            ],
        ]; // Default command.

        $this->arguments = $this->readPHPArgv();
        $this->bin       = basename(array_shift($this->arguments));

        $this->options = [];
    }

    /**
     * Gets the name of the binary that was executed.
     *
     * @return string Name of the binary that was executed.
     */
    public function getBin()
    {
        return $this->bin;
    }

    /**
     * Sets the help text for the tool itself.
     *
     * @param string $help Help text to set.
     */
    public function setHelp($help)
    {
        $this->setup['']['help'] = $help;
    }

    /**
     * Sets the help text for the tools commands itself.
     *
     * @param string $help Help text to set.
     */
    public function setCommandHelp($help)
    {
        $this->setup['']['commandHelp'] = $help;
    }

    /**
     * Use a more compact help screen with less new lines.
     *
     * @param bool $set Optional. Whether to set compact help or not. Defaults to true.
     */
    public function useCompactHelp($set = true)
    {
        $this->newline = $set ? '' : "\n";
    }

    /**
     * Register the names of arguments for help generation and number checking.
     *
     * This has to be called in the order arguments are expected.
     *
     * @param string $name     Name of the argument.
     * @param string $help     Help text.
     * @param bool   $required Optional. Whether this argument is required. Defaults to true.
     * @param string $command  Optional. Command this argument applies to. Empty string (default) for global arguments.
     * @throws InvalidCommand If the referenced command is not registered.
     */
    public function registerArgument($name, $help, $required = true, $command = '')
    {
        if (! isset($this->setup[$command])) {
            throw InvalidCommand::forUnregisteredCommand($command);
        }

        $this->setup[$command]['arguments'][] = [
            'name'     => $name,
            'help'     => $help,
            'required' => $required,
        ];
    }

    /**
     * Register a sub command.
     *
     * Sub commands have their own options and use their own function (not main()).
     *
     * @param string $name Name of the command to register.
     * @param string $help Help text of the command.
     * @throws InvalidCommand If the referenced command is already registered.
     */
    public function registerCommand($name, $help)
    {
        if (isset($this->setup[$name])) {
            throw InvalidCommand::forAlreadyRegisteredCommand($name);
        }

        $this->setup[$name] = [
            'options'   => [],
            'arguments' => [],
            'help'      => $help,
        ];
    }

    /**
     * Register an option for option parsing and help generation.
     *
     * @param string      $long          Multi character option (specified with --).
     * @param string      $help          Help text for this option.
     * @param string|null $short         Optional. One character option (specified with -). Disable with null (default).
     * @param bool|string $needsArgument Optional. Whether this option requires an argument. Use a boolean value, or
     *                                   provide a string to require a specific argument by name. Defaults to false.
     * @param string      $command       Optional. Name of the command this option applies to. Use an empty string for
     *                                   none (default).
     * @throws InvalidCommand  If the referenced command is not registered.
     * @throws InvalidArgument If the short option is too long.
     */
    public function registerOption($long, $help, $short = null, $needsArgument = false, $command = '')
    {
        if (! isset($this->setup[$command])) {
            throw InvalidCommand::forUnregisteredCommand($command);
        }

        $this->setup[$command]['options'][$long] = [
            'needsArgument' => $needsArgument,
            'help'          => $help,
            'short'         => $short,
        ];

        if ($short) {
            if (strlen($short) > 1) {
                throw InvalidArgument::forMultiCharacterShortOption();
            }

            $this->setup[$command]['short'][$short] = $long;
        }
    }

    /**
     * Checks the actual number of arguments against the required number.
     *
     * This is run from CLI automatically and usually does not need to be called directly.
     *
     * @throws MissingArgument If not enough arguments were provided.
     */
    public function checkArguments()
    {
        $argumentCount = count($this->arguments);

        $required = 0;
        foreach ($this->setup[$this->command]['arguments'] as $argument) {
            if (! $argument['required']) {
                break;
            } // Last required arguments seen.
            $required++;
        }

        if ($required > $argumentCount) {
            throw MissingArgument::forNotEnoughArguments();
        }
    }

    /**
     * Parses the given arguments for known options and command.
     *
     * The given $arguments array should NOT contain the executed file as first item anymore! The $arguments
     * array is stripped from any options and possible command. All found options can be accessed via the
     * getOptions() function.
     *
     * Note that command options will overwrite any global options with the same name.
     *
     * This is run from CLI automatically and usually does not need to be called directly.
     *
     * @throws InvalidOption   If an unknown option was provided.
     * @throws MissingArgument If an argument is missing.
     */
    public function parseOptions()
    {
        $nonOptions = [];

        $argumentCount = count($this->arguments);
        for ($index = 0; $index < $argumentCount; $index++) {
            $argument = $this->arguments[$index];

            // The special element '--' means explicit end of options. Treat the rest of the arguments as non-options
            // and end the loop.
            if ($argument == '--') {
                $nonOptions = array_merge($nonOptions, array_slice($this->arguments, $index + 1));
                break;
            }

            // '-' is stdin - a normal argument.
            if ($argument == '-') {
                $nonOptions = array_merge($nonOptions, array_slice($this->arguments, $index));
                break;
            }

            // First non-option.
            if ($argument[0] != '-') {
                $nonOptions = array_merge($nonOptions, array_slice($this->arguments, $index));
                break;
            }

            // Long option.
            if (strlen($argument) > 1 && $argument[1] === '-') {
                $argument = explode('=', substr($argument, 2), 2);
                $option   = array_shift($argument);
                $value    = array_shift($argument);

                if (! isset($this->setup[$this->command]['options'][$option])) {
                    throw InvalidOption::forUnknownOption($option);
                }

                // Argument required?
                if ($this->setup[$this->command]['options'][$option]['needsArgument']) {
                    if (
                        is_null($value) && $index + 1 < $argumentCount && ! preg_match(
                            '/^--?[\w]/',
                            $this->arguments[$index + 1]
                        )
                    ) {
                        $value = $this->arguments[++$index];
                    }
                    if (is_null($value)) {
                        throw MissingArgument::forNoArgument($option);
                    }
                    $this->options[$option] = $value;
                } else {
                    $this->options[$option] = true;
                }

                continue;
            }

            // Short option.
            $option = substr($argument, 1);
            if (! isset($this->setup[$this->command]['short'][$option])) {
                throw InvalidOption::forUnknownOption($option);
            } else {
                $option = $this->setup[$this->command]['short'][$option]; // Store it under long name.
            }

            // Argument required?
            if ($this->setup[$this->command]['options'][$option]['needsArgument']) {
                $value = null;
                if ($index + 1 < $argumentCount && ! preg_match('/^--?[\w]/', $this->arguments[$index + 1])) {
                    $value = $this->arguments[++$index];
                }
                if (is_null($value)) {
                    throw MissingArgument::forNoArgument($option);
                }
                $this->options[$option] = $value;
            } else {
                $this->options[$option] = true;
            }
        }

        // Parsing is now done, update arguments array.
        $this->arguments = $nonOptions;

        // If not done yet, check if first argument is a command and re-execute argument parsing if it is.
        if (! $this->command && $this->arguments && isset($this->setup[$this->arguments[0]])) {
            // It is a command!
            $this->command = array_shift($this->arguments);
            $this->parseOptions(); // Second pass.
        }
    }

    /**
     * Get the value of the given option.
     *
     * Please note that all options are accessed by their long option names regardless of how they were
     * specified on commandline.
     *
     * Can only be used after parseOptions() has been run.
     *
     * @param string      $option  Option to get.
     * @param bool|string $default Optional. Default value to return if the option is not set. Defaults to false.
     * @return bool|string Value of the option.
     */
    public function getOption($option, $default = false)
    {
        if (isset($this->options[$option])) {
            return $this->options[$option];
        }

        return $default;
    }

    /**
     * Get all options.
     *
     * Please note that all options are accessed by their long option names regardless of how they were
     * specified on commandline.
     *
     * Can only be used after parseOptions() has been run.
     *
     * @return string[] Associative array of all options.
     */
    public function getOptions()
    {
        return $this->options;
    }

    /**
     * Return the found command, if any.
     *
     * @return string Name of the command that was found.
     */
    public function getCommand()
    {
        return $this->command;
    }

    /**
     * Get all the arguments passed to the script.
     *
     * This will not contain any recognized options or the script name itself.
     *
     * @return array Associative array of arguments.
     */
    public function getArguments()
    {
        return $this->arguments;
    }

    /**
     * Builds a help screen from the available options.
     *
     * You may want to call it from -h or on error.
     *
     * @return string Help screen text.
     */
    public function help()
    {
        $tableFormatter = new TableFormatter($this->colors);
        $text           = '';

        $hasCommands = (count($this->setup) > 1);
        $commandHelp = $this->setup['']['commandHelp'];

        foreach ($this->setup as $command => $config) {
            $hasOptions   = (bool)$this->setup[$command]['options'];
            $hasArguments = (bool)$this->setup[$command]['arguments'];

            // Usage or command syntax line.
            if (! $command) {
                $text        .= $this->colors->wrap('USAGE:', Colors::C_BROWN);
                $text        .= "\n";
                $text        .= '   ' . $this->bin;
                $indentation = 2;
            } else {
                $text        .= $this->newline;
                $text        .= $this->colors->wrap('   ' . $command, Colors::C_PURPLE);
                $indentation = 4;
            }

            if ($hasOptions) {
                $text .= ' ' . $this->colors->wrap('<OPTIONS>', Colors::C_GREEN);
            }

            if (! $command && $hasCommands) {
                $text .= ' ' . $this->colors->wrap('<COMMAND> ...', Colors::C_PURPLE);
            }

            foreach ($this->setup[$command]['arguments'] as $argument) {
                $output = $this->colors->wrap('<' . $argument['name'] . '>', Colors::C_CYAN);

                if (! $argument['required']) {
                    $output = '[' . $output . ']';
                }
                $text .= ' ' . $output;
            }
            $text .= $this->newline;

            // Usage or command intro.
            if ($this->setup[$command]['help']) {
                $text .= "\n";
                $text .= $tableFormatter->format(
                    [$indentation, '*'],
                    ['', $this->setup[$command]['help'] . $this->newline]
                );
            }

            // Option description.
            if ($hasOptions) {
                if (! $command) {
                    $text .= "\n";
                    $text .= $this->colors->wrap('OPTIONS:', Colors::C_BROWN);
                }
                $text .= "\n";
                foreach ($this->setup[$command]['options'] as $long => $option) {
                    $name = '';
                    if ($option['short']) {
                        $name .= '-' . $option['short'];
                        if ($option['needsArgument']) {
                            $name .= ' <' . $option['needsArgument'] . '>';
                        }
                        $name .= ', ';
                    }
                    $name .= "--$long";
                    if ($option['needsArgument']) {
                        $name .= ' <' . $option['needsArgument'] . '>';
                    }

                    $text .= $tableFormatter->format(
                        [$indentation, '30%', '*'],
                        ['', $name, $option['help']],
                        ['', 'green', '']
                    );
                    $text .= $this->newline;
                }
            }

            // Argument description.
            if ($hasArguments) {
                if (! $command) {
                    $text .= "\n";
                    $text .= $this->colors->wrap('ARGUMENTS:', Colors::C_BROWN);
                }
                $text .= $this->newline;
                foreach ($this->setup[$command]['arguments'] as $argument) {
                    $name = '<' . $argument['name'] . '>';

                    $text .= $tableFormatter->format(
                        [$indentation, '30%', '*'],
                        ['', $name, $argument['help']],
                        ['', 'cyan', '']
                    );
                }
            }

            // Headline and intro for following command documentation.
            if (! $command && $hasCommands) {
                $text .= "\n";
                $text .= $this->colors->wrap('COMMANDS:', Colors::C_BROWN);
                $text .= "\n";
                $text .= $tableFormatter->format(
                    [$indentation, '*'],
                    ['', $commandHelp]
                );
                $text .= $this->newline;
            }
        }

        return $text;
    }

    /**
     * Safely read the $argv PHP array across different PHP configurations.
     * Will take care of register_globals and register_argc_argv ini directives.
     *
     * @return array The $argv PHP array.
     * @throws InvalidArgument If the $argv array could not be read.
     */
    private function readPHPArgv()
    {
        global $argv;

        if (is_array($argv)) {
            return $argv;
        }

        if (
            is_array($_SERVER)
            &&
            array_key_exists('argv', $_SERVER)
            &&
            is_array($_SERVER['argv'])
        ) {
            return $_SERVER['argv'];
        }

        if (
            array_key_exists('HTTP_SERVER_VARS', $GLOBALS)
            &&
            is_array($GLOBALS['HTTP_SERVER_VARS'])
            &&
            array_key_exists('argv', $GLOBALS['HTTP_SERVER_VARS'])
            &&
            is_array($GLOBALS['HTTP_SERVER_VARS']['argv'])
        ) {
            return $GLOBALS['HTTP_SERVER_VARS']['argv'];
        }

        throw InvalidArgument::forUnreadableArguments();
    }
}
PK.3Y�l�pEpECbunyad-amp/vendor/ampproject/amp-toolbox/src/Cli/TableFormatter.php<?php

namespace AmpProject\Cli;

use AmpProject\Exception\Cli\InvalidColumnFormat;

/**
 * This file is adapted from the splitbrain\php-cli library, which is authored by Andreas Gohr <[email protected]> and
 * licensed under the MIT license.
 *
 * Source: https://github.com/splitbrain/php-cli/blob/8c2c001b1b55d194402cf18aad2757049ac6d575/src/TableFormatter.php
 */

/**
 * Output text in multiple columns.
 *
 * @package ampproject/amp-toolbox
 */
class TableFormatter
{
    /**
     * Border between columns.
     *
     * @var string
     */
    protected $border = ' ';

    /**
     * Padding around the border.
     *
     * @var int
     */
    protected $padding = 0;

    /**
     * The terminal width in characters.
     *
     * Falls back to 74 characters if it cannot be detected.
     *
     * @var int
     */
    protected $maxWidth = 74;

    /**
     * Instance of the Colors helper object.
     *
     * @var Colors
     */
    protected $colors;

    /**
     * Width of each column size based on the content length.
     *
     * @var array
     */
    protected $tableColumnWidths = [];

    /**
     * Maximum length of the table content.
     *
     * @var int
     */
    protected $maxColumnWidth = 0;

    /**
     * Whether to wrap the table with borders.
     *
     * @var bool
     */
    protected $isBorderedTable = false;

    /**
     * TableFormatter constructor.
     *
     * @param Colors|null $colors Optional. Instance of the Colors helper object.
     */
    public function __construct(Colors $colors = null)
    {
        // Try to get terminal width.
        $width = $this->getTerminalWidth();

        if ($width) {
            $this->maxWidth = $width - 1;
        }

        $this->colors = $colors instanceof Colors ? $colors : new Colors();
    }

    /**
     * The currently set border.
     *
     * Defaults to ' '.
     *
     * @return string
     */
    public function getBorder()
    {
        return $this->border;
    }

    /**
     * Set the border.
     *
     * The border is set between each column. Its width is added to the column widths.
     *
     * @param string $border Border to set.
     */
    public function setBorder($border)
    {
        $this->border = $border;
    }

    /**
     * Set the padding.
     *
     * The padding around the border is added to the column widths.
     *
     * @param int $padding Padding to set.
     */
    public function setPadding($padding)
    {
        $this->padding = $padding;
    }

    /**
     * Width of the terminal in characters.
     *
     * Initially auto-detected, with a fallback of 74 characters.
     *
     * @return int
     */
    public function getMaxWidth()
    {
        return $this->maxWidth;
    }

    /**
     * Set the width of the terminal to assume (in characters).
     *
     * @param int $maxWidth Terminal width in characters.
     */
    public function setMaxWidth($maxWidth)
    {
        $this->maxWidth = $maxWidth;
    }

    /**
     * Displays text in multiple word wrapped columns.
     *
     * @param array<int|string> $columns List of column widths (in characters, percent or '*').
     * @param array<string>     $texts   List of texts for each column.
     * @param array<string>     $colors  Optional. A list of color names to use for each column. Use empty string within
     *                                   the array for default. Defaults to an empty array.
     * @return string Adapted text.
     */
    public function format($columns, $texts, $colors = [])
    {
        $columns    = $this->calculateColumnWidths($columns);
        $wrapped    = [];
        $maxLength  = 0;

        foreach ($columns as $column => $width) {
            $wrapped[$column] = explode("\n", $this->wordwrap($texts[$column], $width, "\n", true));
            $length           = count($wrapped[$column]);
            if ($length > $maxLength) {
                $maxLength = $length;
            }
        }

        $last   = count($columns) - 1;
        $output = '';
        for ($index = 0; $index < $maxLength; $index++) {
            foreach ($columns as $column => $width) {
                if ($this->isBorderedTable && $column === 0) {
                    $output .= $this->border . str_repeat(' ', $this->padding);
                    $width = $width - strlen($this->border) - $this->padding;
                }

                if (isset($wrapped[$column][$index])) {
                    $value = $wrapped[$column][$index];
                } else {
                    $value = '';
                }

                if ($this->isBorderedTable && $column === $last && $width > $this->tableColumnWidths[$last]) {
                    $width = $this->tableColumnWidths[$last];
                }

                $chunk = $this->pad($value, $width);

                if (isset($colors[$column]) && $colors[$column]) {
                    $chunk = $this->colors->wrap($chunk, $colors[$column]);
                }
                $output .= $chunk;

                // Add border in-between columns.
                if ($column != $last) {
                    $output .= str_repeat(' ', $this->padding) . $this->border . str_repeat(' ', $this->padding);
                }

                if ($this->isBorderedTable && $column === $last) {
                    $output .= str_repeat(' ', $this->padding) . $this->border;
                }
            }
            $output .= "\n";
        }

        return $output;
    }

    /**
     * Tries to figure out the width of the terminal.
     *
     * @return int Terminal width, 0 if unknown.
     */
    protected function getTerminalWidth()
    {
        // From environment.
        if (isset($_SERVER['COLUMNS'])) {
            return (int)$_SERVER['COLUMNS'];
        }

        // Via tput.
        $process = proc_open(
            'tput cols',
            [
                1 => ['pipe', 'w'],
                2 => ['pipe', 'w'],
            ],
            $pipes
        );

        $width = (int)stream_get_contents($pipes[1]);

        proc_close($process);

        return $width;
    }

    /**
     * Takes an array with dynamic column width and calculates the correct widths.
     *
     * Column width can be given as fixed char widths, percentages and a single * width can be given
     * for taking the remaining available space. When mixing percentages and fixed widths, percentages
     * refer to the remaining space after allocating the fixed width.
     *
     * @param array $columns Columns to calculate the widths for.
     * @return int[] Array of calculated column widths.
     * @throws InvalidColumnFormat If the column format is not valid.
     */
    protected function calculateColumnWidths($columns)
    {
        $index  = 0;
        $border = $this->strlen($this->border);
        $fixed  = (count($columns) - 1) * $border; // Borders are used already.
        $fluid  = -1;

        // First pass for format check and fixed columns.
        foreach ($columns as $index => $column) {
            // Handle fixed columns.
            if ((string)intval($column) === (string)$column) {
                $fixed += $column;
                continue;
            }
            // Check if other columns are using proper units.
            if (substr($column, -1) === '%') {
                continue;
            }
            if ($column === '*') {
                // Only one fluid.
                if ($fluid < 0) {
                    $fluid = $index;
                    continue;
                } else {
                    throw InvalidColumnFormat::forMultipleFluidColumns();
                }
            }
            throw InvalidColumnFormat::forUnknownColumnFormat($column);
        }

        $allocated  = $fixed;
        $remain     = $this->maxWidth - $allocated;

        // Second pass to handle percentages.
        foreach ($columns as $index => $column) {
            if (substr($column, -1) !== '%') {
                continue;
            }
            $percent = floatval($column);

            $real = (int)floor(($percent * $remain) / 100);

            $columns[$index] = $real;
            $allocated       += $real;
        }

        $remain = $this->maxWidth - $allocated;
        if ($remain < 0) {
            throw InvalidColumnFormat::forExceededMaxWidth();
        }

        // Assign remaining space.
        if ($fluid < 0) {
            $columns[$index] += ($remain); // Add to last column.
        } else {
            $columns[$fluid] = $remain;
        }

        return $columns;
    }

    /**
     * Pad the given string to the correct length.
     *
     * @param string $string String to pad.
     * @param int    $length Length to pad the string to.
     * @return string Padded string.
     */
    protected function pad($string, $length)
    {
        $strlen = $this->strlen($string);

        if ($strlen > $length) {
            return $string;
        }

        $pad = $length - $strlen;

        return $string . str_pad('', $pad, ' ');
    }

    /**
     * Measures character length in UTF-8 when possible.
     *
     * @param string $string String to measure the character length of.
     * @return int Count of characters.
     */
    protected function strlen($string)
    {
        // Don't count color codes.
        $string = preg_replace("/\33\\[\\d+(;\\d+)?m/", '', $string);

        if (function_exists('mb_strlen')) {
            return mb_strlen($string, 'utf-8');
        }

        return strlen($string);
    }

    /**
     * Extract a substring in UTF-8 if possible.
     * @param string   $string String to extract a substring out of.
     * @param int      $start  Optional. Starting index to extract from. Defaults to 0.
     * @param int|null $length Optional. Length to extract. Set to null to use the remainder of the string (default).
     * @return string Extracted substring.
     */
    protected function substr($string, $start = 0, $length = null)
    {
        if (function_exists('mb_substr')) {
            return mb_substr($string, $start, $length);
        }

        // mb_substr() treats $length differently than substr().
        if ($length) {
            return substr($string, $start, $length);
        }

        return substr($string, $start);
    }

    /**
     * Wrap words of a string into a requested width.
     *
     * @param string $string String to wrap.
     * @param int    $width  Optional. Width to warp the string into. Defaults to 75.
     * @param string $break  Optional. Character to use for wrapping. Defaults to a newline character. Defaults to the
     *                       newline character.
     * @param bool   $cut    Optional. Whether to cut longer words to enforce the width. Defaults to false.
     * @return string Word-wrapped string.
     * @link http://stackoverflow.com/a/4988494
     */
    protected function wordwrap($string, $width = 75, $break = "\n", $cut = false)
    {
        if (! is_int($width) || $width < 0) {
            $width = 75;
        }

        if (! is_string($break) || empty($break)) {
            $break = "\n";
        }

        $lines = explode($break, $string);
        foreach ($lines as &$line) {
            $line = rtrim($line);
            if ($this->strlen($line) <= $width) {
                continue;
            }
            $words  = explode(' ', $line);
            $line   = '';
            $actual = '';
            foreach ($words as $word) {
                if ($this->strlen($actual . $word) <= $width) {
                    $actual .= $word . ' ';
                } else {
                    if ($actual != '') {
                        $line .= rtrim($actual) . $break;
                    }
                    $actual = $word;
                    if ($cut) {
                        while ($this->strlen($actual) > $width) {
                            $line   .= $this->substr($actual, 0, $width) . $break;
                            $actual = $this->substr($actual, $width);
                        }
                    }
                    $actual .= ' ';
                }
            }
            $line .= trim($actual);
        }

        return implode($break, $lines);
    }

    /**
     * Format the rows in a bordered table.
     *
     * @param array<array<string>> $rows    List of texts for each column.
     * @param array<string>        $headers Optional. List of texts used in the table header.
     *
     * @return string A borered table containing the given rows.
     */
    public function formatTable($rows, $headers = [])
    {
        $this->setBorder('|');
        $this->setPadding(1);
        $this->setIsBorderedTable(true);

        if (! empty($headers)) {
            $this->calculateTableColumnWidths($headers);
        }

        foreach ($rows as $row) {
            $this->calculateTableColumnWidths($row);
        }

        $numberOfColumns  = count($this->tableColumnWidths);

        $columns = array_map(function ($width, $index) {
            // Add extra padding to the first and last columns.
            if ($index === 0 || $index === count($this->tableColumnWidths) - 1) {
                $width = $width + strlen($this->border) + $this->padding;
            }

            return $width;
        }, $this->tableColumnWidths, array_keys($this->tableColumnWidths));

        // For a three column table, we'll have have "| " at start and " |" at the end,
        // and in-between two " | ". So in total "| " + " | " + " | " + " |" = 10 chars.
        $borderCharWidth  = strlen($this->border);
        $totalBorderWidth = 2 * ($borderCharWidth + $this->padding)
            + ($numberOfColumns - 1)
            * ($borderCharWidth + ($this->padding * 2));
        $estimatedColumnWidth = $numberOfColumns * $this->maxColumnWidth;
        $estimatedTotalWidth  = $totalBorderWidth + $estimatedColumnWidth;

        if ($estimatedTotalWidth > $this->maxWidth) {
            $maxWidthWithoutBorders = $this->maxWidth - $totalBorderWidth;

            $avrg          = floor($maxWidthWithoutBorders / $numberOfColumns);
            $resizedWidths = [];
            $extraWidth    = 0;

            foreach ($this->tableColumnWidths as $width) {
                if ($width > $avrg) {
                    $resizedWidths[] = $width;
                } else {
                    $extraWidth = $extraWidth + ($avrg - $width);
                }
            }

            if (! empty($resizedWidths) && $extraWidth) {
                $avrgExtraWidth = floor($extraWidth / count($resizedWidths));

                foreach ($this->tableColumnWidths as $i => &$width) {
                    if (in_array($width, $resizedWidths, true)) {
                        $width = $avrg + $avrgExtraWidth;
                        array_shift($resizedWidths);
                        if (empty($resizedWidths)) {
                            $width = 0; // Zero it so not in sum.
                            $width = $maxWidthWithoutBorders - array_sum($this->tableColumnWidths);
                        }
                    }

                    if ($i === 0 || $i === $numberOfColumns - 1) {
                        $width = $width + strlen($this->border) + $this->padding;
                    }

                    $columns[$i] = intval($width);
                }
            }
        }

        $horizontalBorder = $this->getTableHorizontalBorder($rows[0], $columns);

        $table = $horizontalBorder . "\n";

        if (! empty($headers)) {
            $table .= $this->getTableRow($headers, $columns);
            $table .= $horizontalBorder . "\n";
        }

        foreach ($rows as $row) {
            $table .= $this->getTableRow($row, $columns);
        }

        $table .= $horizontalBorder;

        return $table;
    }

    /**
     * Whether the table is wrapped with borders or not.
     *
     * @param bool $isBorderedTable Whether the table is wrapped with borders or not.
     */
    public function setIsBorderedTable($isBorderedTable)
    {
        $this->isBorderedTable = $isBorderedTable;
    }

    /**
     * Calculate table column widths based on the column content length.
     *
     * @param array<string> $row List of texts for each column.
     */
    protected function calculateTableColumnWidths($row)
    {
        foreach ($row as $i => $rowContent) {
            $width = strlen($rowContent);

            if ($width > $this->maxColumnWidth) {
                $this->maxColumnWidth = $width;
            }

            if (! isset($this->tableColumnWidths[$i]) || $width > $this->tableColumnWidths[$i]) {
                $this->tableColumnWidths[$i] = $width;
            }
        }
    }

    /**
     * Get the table row.
     *
     * @param array<string> $row     List of texts for each column.
     * @param array<int>    $columns List of maximum column widths.
     *
     * @return string Table row.
     */
    protected function getTableRow($row, $columns)
    {
        return trim($this->format($columns, $row)) . "\n";
    }

    /**
     * Get the table horizontal border.
     *
     * @param array<string> $row     List of texts for each column.
     * @param array<int>    $columns List of maximum column widths.
     *
     * @return string Table border.
     */
    protected function getTableHorizontalBorder($row, $columns)
    {
        $tableRow = $this->getTableRow($row, $columns);
        $tableRow = explode("\n", $tableRow);
        $firstRow = array_shift($tableRow);
        $firstRow = trim($firstRow);
        $borderChar = preg_quote($this->border, '/');
        $border     = preg_replace("/[^{$borderChar}]/", '-', $firstRow);
        $border     = preg_replace("/[{$borderChar}]/", '+', $border);

        return $border;
    }
}
PK.3Yb��e��Ebunyad-amp/vendor/ampproject/amp-toolbox/src/Cli/Command/Optimize.php<?php

namespace AmpProject\Cli\Command;

use AmpProject\Cli\Command;
use AmpProject\Cli\Options;
use AmpProject\Exception\Cli\InvalidArgument;
use AmpProject\Optimizer\ErrorCollection;
use AmpProject\Optimizer\TransformationEngine;

/**
 * Optimize AMP HTML markup and return optimized markup.
 *
 * @package ampproject/amp-toolbox
 */
final class Optimize extends Command
{
    /**
     * Name of the command.
     *
     * @var string
     */
    const NAME = 'optimize';

    /**
     * Help text of the command.
     *
     * @var string
     */
    const HELP_TEXT = 'Optimize AMP HTML markup and return optimized markup.';

    /**
     * Register the command.
     *
     * @param Options $options Options instance to register the command with.
     */
    public function register(Options $options)
    {
        $options->registerCommand(self::NAME, self::HELP_TEXT);

        $options->registerArgument('file', "File with unoptimized AMP markup. Use '-' for STDIN.", true, self::NAME);
    }

    /**
     * Process the command.
     *
     * Arguments and options have been parsed when this is run.
     *
     * @param Options $options Options instance to process the command with.
     *
     * @throws InvalidArgument If the provided file is not readable.
     */
    public function process(Options $options)
    {
        list($file) = $options->getArguments();

        if (
            $file !== '-'
            &&
            (
                !is_file($file)
                ||
                !is_readable($file)
            )
        ) {
            throw InvalidArgument::forUnreadableFile($file);
        }

        if ($file === '-') {
            $file = 'php://stdin';
        }

        $html          = file_get_contents($file);
        $optimizer     = new TransformationEngine();
        $errors        = new ErrorCollection();
        $optimizedHtml = $optimizer->optimizeHtml($html, $errors);

        echo($optimizedHtml . PHP_EOL);
    }
}
PK.3Y��.x�
�
Ebunyad-amp/vendor/ampproject/amp-toolbox/src/Cli/Command/Validate.php<?php

namespace AmpProject\Cli\Command;

use AmpProject\Cli\Colors;
use AmpProject\Cli\Command;
use AmpProject\Cli\Options;
use AmpProject\Cli\TableFormatter;
use AmpProject\Exception\Cli\InvalidArgument;
use AmpProject\Validator\ValidationEngine;
use AmpProject\Validator\ValidationStatus;

/**
 * Validate AMP HTML markup and return validation errors.
 *
 * @package ampproject/amp-toolbox
 */
final class Validate extends Command
{
    /**
     * Name of the command.
     *
     * @var string
     */
    const NAME = 'validate';

    /**
     * Help text of the command.
     *
     * @var string
     */
    const HELP_TEXT = 'Validate AMP HTML markup and return validation errors.';

    /**
     * Register the command.
     *
     * @param Options $options Options instance to register the command with.
     */
    public function register(Options $options)
    {
        $options->registerCommand(self::NAME, self::HELP_TEXT);

        $options->registerArgument('file', "File with AMP markup to validate. Use '-' for STDIN.", true, self::NAME);
    }

    /**
     * Process the command.
     *
     * Arguments and options have been parsed when this is run.
     *
     * @param Options $options Options instance to process the command with.
     *
     * @throws InvalidArgument If the provided file is not readable.
     */
    public function process(Options $options)
    {
        list($file) = $options->getArguments();

        if (
            $file !== '-'
            &&
            (
                !is_file($file)
                ||
                !is_readable($file)
            )
        ) {
            throw InvalidArgument::forUnreadableFile($file);
        }

        if ($file === '-') {
            $file = 'php://stdin';
        }

        $html      = file_get_contents($file);
        $validator = new ValidationEngine();
        $result    = $validator->validateHtml($html);

        foreach ($result->getErrors() as $error) {
            echo sprintf(
                "%d:%d [%s] %s (%s)\n",
                $error->getLine(),
                $error->getColumn(),
                $error->getSeverity(),
                $error->getCode(),
                implode(', ', $error->getParams())
            );
        }

        switch ($result->getStatus()->asInt()) {
            case ValidationStatus::PASS:
                $this->cli->success('Validation SUCCEEDED.');
                exit(0);
            case ValidationStatus::FAIL:
                $this->cli->error('Validation FAILED!');
                exit(1);
            case ValidationStatus::UNKNOWN:
                $this->cli->critical('Validation produced an UNKNOWN state!');
                exit(128);
        }
    }
}
PK.3Y���Nbunyad-amp/vendor/ampproject/amp-toolbox/src/CompatibilityFix/MovedClasses.php<?php

namespace AmpProject\CompatibilityFix;

use AmpProject\CompatibilityFix;

/**
 * Backwards compatibility fix for classes that were moved.
 *
 * @package ampproject/amp-toolbox
 */
final class MovedClasses implements CompatibilityFix
{
    /**
     * Mapping of aliases to be registered.
     *
     * @var array<string, string> Associative array of class alias mappings.
     */
    const ALIASES = [
        // v0.9.0 - moved HTML-based utility into a separate `Html` sub-namespace.
        'AmpProject\AtRule'             => 'AmpProject\Html\AtRule',
        'AmpProject\Attribute'          => 'AmpProject\Html\Attribute',
        'AmpProject\LengthUnit'         => 'AmpProject\Html\LengthUnit',
        'AmpProject\RequestDestination' => 'AmpProject\Html\RequestDestination',
        'AmpProject\Role'               => 'AmpProject\Html\Role',
        'AmpProject\Tag'                => 'AmpProject\Html\Tag',

        // v0.9.0 - extracted `Encoding` out of `Dom\Document`, as it is turned into AMP value object.
        'AmpProject\Dom\Document\Encoding' => 'AmpProject\Encoding',

    ];

    /**
     * Register the compatibility fix.
     *
     * @return void
     */
    public static function register()
    {
        spl_autoload_register(__CLASS__ . '::autoloader');
    }

    /**
     * Autoloader to register.
     *
     * @param string $oldClassName Old class name that was requested to be autoloaded.
     * @return void
     */
    public static function autoloader($oldClassName)
    {
        if (! array_key_exists($oldClassName, self::ALIASES)) {
            return;
        }

        class_alias(self::ALIASES[$oldClassName], $oldClassName, true);
    }
}
PK.3Y<8����=bunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document.php<?php

namespace AmpProject\Dom;

use AmpProject\DevMode;
use AmpProject\Dom\Document\AfterLoadFilter;
use AmpProject\Dom\Document\AfterSaveFilter;
use AmpProject\Dom\Document\BeforeLoadFilter;
use AmpProject\Dom\Document\BeforeSaveFilter;
use AmpProject\Dom\Document\Filter;
use AmpProject\Dom\Document\Option;
use AmpProject\Encoding;
use AmpProject\Exception\FailedToRetrieveRequiredDomElement;
use AmpProject\Exception\InvalidDocumentFilter;
use AmpProject\Exception\MaxCssByteCountExceeded;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag;
use AmpProject\Optimizer\CssRule;
use AmpProject\Validator\Spec\CssRuleset\AmpNoTransformed;
use AmpProject\Validator\Spec\SpecRule;
use DOMComment;
use DOMDocument;
use DOMElement;
use DOMNode;
use DOMNodeList;
use DOMText;
use DOMXPath;
use ReflectionClass;
use ReflectionException;
use ReflectionNamedType;

/**
 * Abstract away some of the difficulties of working with PHP's DOMDocument.
 *
 * @property DOMXPath     $xpath                   XPath query object for this document.
 * @property Element      $html                    The document's <html> element.
 * @property Element      $head                    The document's <head> element.
 * @property Element      $body                    The document's <body> element.
 * @property Element|null $charset                 The document's charset meta element.
 * @property Element|null $viewport                The document's viewport meta element.
 * @property DOMNodeList  $ampElements             The document's <amp-*> elements.
 * @property Element      $ampCustomStyle          The document's <style amp-custom> element.
 * @property int          $ampCustomStyleByteCount Count of bytes of CSS in the <style amp-custom> tag.
 * @property int          $inlineStyleByteCount    Count of bytes of CSS in all of the inline style attributes.
 * @property LinkManager  $links                   Link manager to manage <link> tags in the <head>.
 *
 * @package ampproject/amp-toolbox
 */
final class Document extends DOMDocument
{
    /**
     * Default document type to use.
     *
     * @var string
     */
    const DEFAULT_DOCTYPE = '<!DOCTYPE html>';

    /**
     * Regular expression to match the HTML doctype.
     *
     * @var string
     */
    const HTML_DOCTYPE_REGEX_PATTERN = '#<!doctype\s+html[^>]+?>#si';

    /*
     * Regular expressions to fetch the individual structural tags.
     * These patterns were optimized to avoid extreme backtracking on large documents.
     */
    const HTML_STRUCTURE_DOCTYPE_PATTERN = '/^(?<doctype>[^<]*(?>\s*<!--.*?-->\s*)*<!doctype(?>\s+[^>]+)?>)/is';
    const HTML_STRUCTURE_HTML_START_TAG  = '/^(?<html_start>[^<]*(?>\s*<!--.*?-->\s*)*<html(?>\s+[^>]*)?>)/is';
    const HTML_STRUCTURE_HTML_END_TAG    = '/(?<html_end><\/html(?>\s+[^>]*)?>.*)$/is';
    const HTML_STRUCTURE_HEAD_START_TAG  = '/^[^<]*(?><!--.*?-->\s*)*(?><head(?>\s+[^>]*)?>)/is';
    const HTML_STRUCTURE_BODY_START_TAG  = '/^[^<]*(?><!--.*-->\s*)*(?><body(?>\s+[^>]*)?>)/is';
    const HTML_STRUCTURE_BODY_END_TAG    = '/(?><\/body(?>\s+[^>]*)?>.*)$/is';
    const HTML_STRUCTURE_HEAD_TAG        = '/^(?>[^<]*(?><head(?>\s+[^>]*)?>).*?<\/head(?>\s+[^>]*)?>)/is';

    // Regex pattern used for removing Internet Explorer conditional comments.
    const HTML_IE_CONDITIONAL_COMMENTS_PATTERN = '/<!--(?>\[if\s|<!\[endif)(?>[^>]+(?<!--)>)*(?>[^>]+(?<=--)>)/i';

    /**
     * Error message to use when the __get() is triggered for an unknown property.
     *
     * @var string
     */
    const PROPERTY_GETTER_ERROR_MESSAGE = 'Undefined property: AmpProject\\Dom\\Document::';

    // Attribute to use as a placeholder to move the emoji AMP symbol (⚡) over to DOM.
    const EMOJI_AMP_ATTRIBUTE_PLACEHOLDER = 'emoji-amp';

    /**
     * XPath query to retrieve all <amp-*> tags, relative to the <body> node.
     *
     * @var string
     */
    const XPATH_AMP_ELEMENTS_QUERY = ".//*[starts-with(name(), 'amp-')]";

    /**
     * XPath query to retrieve the <style amp-custom> tag, relative to the <head> node.
     *
     * @var string
     */
    const XPATH_AMP_CUSTOM_STYLE_QUERY = './/style[@amp-custom]';

    /**
     * XPath query to fetch the inline style attributes, relative to the <body> node.
     *
     * @var string
     */
    const XPATH_INLINE_STYLE_ATTRIBUTES_QUERY = './/@style';

    /**
     * Associative array for lazily-created, cached properties for the document.
     *
     * @var array
     */
    private $properties = [];

    /**
     * Associative array of options to configure the behavior of the DOM document abstraction.
     *
     * @see Option::DEFAULTS For a list of available options.
     *
     * @var Options
     */
    private $options;

    /**
     * Whether `data-ampdevmode` was initially set on the the document element.
     *
     * @var bool
     */
    private $hasInitialAmpDevMode = false;

    /**
     * The original encoding of how the Dom\Document was created.
     *
     * This is stored to do an automatic conversion to UTF-8, which is a requirement for AMP.
     *
     * @var Encoding
     */
    private $originalEncoding;

    /**
     * The maximum number of bytes of CSS that is enforced.
     *
     * A negative number will disable the byte count limit.
     *
     * @var int
     */
    private $cssMaxByteCountEnforced = -1;

    /**
     * List of document filter class names.
     *
     * @var string[]
     */
    private $filterClasses = [];

    /**
     * List of document filter class instances.
     *
     * @var Filter[]
     */
    private $filters = [];

    /**
     * Unique ID manager for the Document instance.
     *
     * @var UniqueIdManager
     */
    private $uniqueIdManager;

    /**
     * Creates a new AmpProject\Dom\Document object
     *
     * @link  https://php.net/manual/domdocument.construct.php
     *
     * @param string $version  Optional. The version number of the document as part of the XML declaration.
     * @param string $encoding Optional. The encoding of the document as part of the XML declaration.
     */
    public function __construct($version = '', $encoding = null)
    {
        $this->originalEncoding = new Encoding($encoding);
        parent::__construct($version ?: '1.0', Encoding::AMP);
        $this->registerNodeClass(DOMElement::class, Element::class);
        $this->options         = new Options(Option::DEFAULTS);
        $this->uniqueIdManager = new UniqueIdManager();

        $this->registerFilters(
            [
                Filter\DetectInvalidByteSequence::class,
                Filter\SvgSourceAttributeEncoding::class,
                Filter\AmpEmojiAttribute::class,
                Filter\AmpBindAttributes::class,
                Filter\SelfClosingTags::class,
                Filter\SelfClosingSVGElements::class,
                Filter\NoscriptElements::class,
                Filter\DeduplicateTag::class,
                Filter\ConvertHeadProfileToLink::class,
                Filter\MustacheScriptTemplates::class,
                Filter\DoctypeNode::class,
                Filter\NormalizeHtmlAttributes::class,
                Filter\DocumentEncoding::class,
                Filter\HttpEquivCharset::class,
                Filter\LibxmlCompatibility::class,
                Filter\ProtectEsiTags::class,
                Filter\NormalizeHtmlEntities::class,
            ]
        );
    }

    /**
     * Named constructor to provide convenient way of transforming HTML into DOM.
     *
     * Due to slow automatic encoding detection, it is recommended to provide an explicit
     * charset either via a <meta charset> tag or via $options.
     *
     * @param string       $html    HTML to turn into a DOM.
     * @param array|string $options Optional. Array of options to configure the document. Used as encoding if a string
     *                              is passed. Defaults to an empty array.
     * @return Document|false DOM generated from provided HTML, or false if the transformation failed.
     */
    public static function fromHtml($html, $options = [])
    {
        // Assume options are the encoding if a string is passed, for BC reasons.
        if (is_string($options)) {
            $options = [Option::ENCODING => $options];
        }

        $encoding = isset($options[Option::ENCODING]) ? $options[Option::ENCODING] : null;

        $dom = new self('', $encoding);

        if (! $dom->loadHTML($html, $options)) {
            return false;
        }

        return $dom;
    }

    /**
     * Named constructor to provide convenient way of transforming a HTML fragment into DOM.
     *
     * The difference to Document::fromHtml() is that fragments are not normalized as to their structure.
     *
     * Due to slow automatic encoding detection, it is recommended to pass in an explicit
     * charset via $options.
     *
     * @param string       $html    HTML to turn into a DOM.
     * @param array|string $options Optional. Array of options to configure the document. Used as encoding if a string
     *                              is passed. Defaults to an empty array.
     * @return Document|false DOM generated from provided HTML, or false if the transformation failed.
     */
    public static function fromHtmlFragment($html, $options = [])
    {
        // Assume options are the encoding if a string is passed, for BC reasons.
        if (is_string($options)) {
            $options = [Option::ENCODING => $options];
        }

        $encoding = isset($options[Option::ENCODING]) ? $options[Option::ENCODING] : null;

        $dom = new self('', $encoding);

        if (! $dom->loadHTMLFragment($html, $options)) {
            return false;
        }

        return $dom;
    }

    /**
     * Named constructor to provide convenient way of retrieving the DOM from a node.
     *
     * @param DOMNode $node Node to retrieve the DOM from. This is being modified by reference (!).
     * @return Document DOM generated from provided HTML, or false if the transformation failed.
     */
    public static function fromNode(DOMNode &$node)
    {
        /**
         * Document of the node.
         *
         * If the node->ownerDocument returns null, the node is the document.
         *
         * @var DOMDocument
         */
        $root = $node->ownerDocument === null ? $node : $node->ownerDocument;

        if ($root instanceof self) {
            return $root;
        }

        $dom = new self();

        // We replace the $node by reference, to make sure the next lines of code will
        // work as expected with the new document.
        // Otherwise $dom and $node would refer to two different DOMDocuments.
        $node = $dom->importNode($node, true);
        $dom->appendChild($node);

        $dom->hasInitialAmpDevMode = $dom->documentElement->hasAttribute(DevMode::DEV_MODE_ATTRIBUTE);

        return $dom;
    }

    /**
     * Reset the internal optimizations of the Document object.
     *
     * This might be needed if you are doing an operation that causes the cached
     * nodes and XPath objects to point to the wrong document.
     *
     * @return self Reset version of the Document object.
     */
    private function reset()
    {
        // Drop references to old DOM document.
        unset($this->properties['xpath'], $this->properties['head'], $this->properties['body']);

        // Reference of the document itself doesn't change here, but might need to change in the future.
        return $this;
    }

    /**
     * Load HTML from a string.
     *
     * @link  https://php.net/manual/domdocument.loadhtml.php
     *
     * @param string           $source  The HTML string.
     * @param array|int|string $options Optional. Array of options to configure the document. Used as additional Libxml
     *                                  parameters if an int or string is passed. Defaults to an empty array.
     * @return bool true on success or false on failure.
     */
    public function loadHTML($source, $options = [])
    {
        $source  = $this->normalizeDocumentStructure($source);
        $success = $this->loadHTMLFragment($source, $options);

        if ($success) {
            $this->insertMissingCharset();

            // Do some further clean-up.
            $this->moveInvalidHeadNodesToBody();
            $this->movePostBodyNodesToBody();
        }

        return $success;
    }

    /**
     * Load a HTML fragment from a string.
     *
     * @param string           $source  The HTML fragment string.
     * @param array|int|string $options Optional. Array of options to configure the document. Used as additional Libxml
     *                                  parameters if an int or string is passed. Defaults to an empty array.
     * @return bool true on success or false on failure.
     */
    public function loadHTMLFragment($source, $options = [])
    {
        // Assume options are the additional libxml flags if a string or int is passed, for BC reasons.
        if (is_string($options)) {
            $options = (int) $options;
        }
        if (is_int($options)) {
            $options = [Option::LIBXML_FLAGS => $options];
        }

        $this->options = $this->options->merge($options);

        $this->reset();

        foreach ($this->filterClasses as $filterClass) {
            $filter = null;

            try {
                $filter = $this->instantiateFilter($filterClass);
                $this->filters[] = $filter;
            } catch (ReflectionException $exception) {
                // A filter cannot properly be instantiated. Let's just skip loading it for now.
                continue;
            }

            if (! $filter instanceof Filter) {
                throw InvalidDocumentFilter::forFilter($filter);
            }

            if ($filter instanceof BeforeLoadFilter) {
                $source = $filter->beforeLoad($source);
            }
        }

        $success = parent::loadHTML($source, $this->options[Option::LIBXML_FLAGS]);

        if ($success) {
            foreach ($this->filters as $filter) {
                if ($filter instanceof AfterLoadFilter) {
                    $filter->afterLoad($this);
                }
            }

            $this->hasInitialAmpDevMode = $this->documentElement->hasAttribute(DevMode::DEV_MODE_ATTRIBUTE);
        }

        return $success;
    }

    /**
     * Dumps the internal document into a string using HTML formatting.
     *
     * @link  https://php.net/manual/domdocument.savehtml.php
     *
     * @param DOMNode|null $node Optional. Parameter to output a subset of the document.
     * @return string The HTML, or false if an error occurred.
     */
    #[\ReturnTypeWillChange]
    public function saveHTML(DOMNode $node = null)
    {
        return $this->saveHTMLFragment($node);
    }

    /**
     * Dumps the internal document fragment into a string using HTML formatting.
     *
     * @param DOMNode|null $node Optional. Parameter to output a subset of the document.
     * @return string The HTML fragment, or false if an error occurred.
     */
    public function saveHTMLFragment(DOMNode $node = null)
    {
        $filtersInReverse = array_reverse($this->filters);

        foreach ($filtersInReverse as $filter) {
            if ($filter instanceof BeforeSaveFilter) {
                $filter->beforeSave($this);
            }
        }

        if (null === $node || PHP_VERSION_ID >= 70300) {
            $html = parent::saveHTML($node);
        } else {
            $html = $this->extractNodeViaFragmentBoundaries($node);
        }

        foreach ($filtersInReverse as $filter) {
            if ($filter instanceof AfterSaveFilter) {
                $html = $filter->afterSave($html);
            }
        }

        return $html;
    }

    /**
     * Get the current options of the Document instance.
     *
     * @return Options
     */
    public function getOptions()
    {
        return $this->options;
    }

    /**
     * Add the required utf-8 meta charset tag if it is still missing.
     */
    private function insertMissingCharset()
    {
        // Bail if a charset tag is already present.
        if ($this->xpath->query('.//meta[ @charset ]')->item(0)) {
            return;
        }

        $charset = $this->createElement(Tag::META);
        $charset->setAttribute(Attribute::CHARSET, Encoding::AMP);
        $this->head->insertBefore($charset, $this->head->firstChild);
    }

    /**
     * Extract a node's HTML via fragment boundaries.
     *
     * Temporarily adds fragment boundary comments in order to locate the desired node to extract from
     * the given HTML document. This is required because libxml seems to only preserve whitespace when
     * serializing when calling DOMDocument::saveHTML() on the entire document. If you pass the element
     * to DOMDocument::saveHTML() then formatting whitespace gets added unexpectedly. This is seen to
     * be fixed in PHP 7.3, but for older versions of PHP the following workaround is needed.
     *
     * @param DOMNode $node Node to extract the HTML for.
     * @return string Extracted HTML string.
     */
    private function extractNodeViaFragmentBoundaries(DOMNode $node)
    {
        $boundary      = $this->uniqueIdManager->getUniqueId('fragment_boundary');
        $startBoundary = $boundary . ':start';
        $endBoundary   = $boundary . ':end';
        $commentStart  = $this->createComment($startBoundary);
        $commentEnd    = $this->createComment($endBoundary);

        $node->parentNode->insertBefore($commentStart, $node);
        $node->parentNode->insertBefore($commentEnd, $node->nextSibling);

        $pattern = '/^.*?'
                   . preg_quote("<!--{$startBoundary}-->", '/')
                   . '(.*)'
                   . preg_quote("<!--{$endBoundary}-->", '/')
                   . '.*?\s*$/s';

        $html = preg_replace($pattern, '$1', parent::saveHTML());

        $node->parentNode->removeChild($commentStart);
        $node->parentNode->removeChild($commentEnd);

        return $html;
    }

    /**
     * Normalize the document structure.
     *
     * This makes sure the document adheres to the general structure that AMP requires:
     *   ```
     *   <!DOCTYPE html>
     *   <html>
     *     <head>
     *       <meta charset="utf-8">
     *     </head>
     *     <body>
     *     </body>
     *   </html>
     *   ```
     *
     * @param string $content Content to normalize the structure of.
     * @return string Normalized content.
     */
    private function normalizeDocumentStructure($content)
    {
        $matches   = [];
        $doctype   = self::DEFAULT_DOCTYPE;
        $htmlStart = '<html>';
        $htmlEnd   = '</html>';

        // Strip IE conditional comments, which are supported by IE 5-9 only (which AMP doesn't support).
        $content = preg_replace(self::HTML_IE_CONDITIONAL_COMMENTS_PATTERN, '', $content);

        // Detect and strip <!doctype> tags.
        if (preg_match(self::HTML_STRUCTURE_DOCTYPE_PATTERN, $content, $matches)) {
            $doctype = $matches['doctype'];
            $content = preg_replace(self::HTML_STRUCTURE_DOCTYPE_PATTERN, '', $content, 1);
        }

        // Detect and strip <html> tags.
        if (preg_match(self::HTML_STRUCTURE_HTML_START_TAG, $content, $matches)) {
            $htmlStart = $matches['html_start'];
            $content   = preg_replace(self::HTML_STRUCTURE_HTML_START_TAG, '', $content, 1);

            preg_match(self::HTML_STRUCTURE_HTML_END_TAG, $content, $matches);
            $htmlEnd = isset($matches['html_end']) ? $matches['html_end'] : $htmlEnd;
            $content = preg_replace(self::HTML_STRUCTURE_HTML_END_TAG, '', $content, 1);
        }

        // Detect <head> and <body> tags and add as needed.
        if (! preg_match(self::HTML_STRUCTURE_HEAD_START_TAG, $content, $matches)) {
            if (! preg_match(self::HTML_STRUCTURE_BODY_START_TAG, $content, $matches)) {
                // Both <head> and <body> missing.
                $content = "<head></head><body>{$content}</body>";
            } else {
                // Only <head> missing.
                $content = "<head></head>{$content}";
            }
        } elseif (! preg_match(self::HTML_STRUCTURE_BODY_END_TAG, $content, $matches)) {
            // Only <body> missing.
            // @todo This is an expensive regex operation, look into further optimization.
            $content = preg_replace(self::HTML_STRUCTURE_HEAD_TAG, '$0<body>', $content, 1, $count);

            // Closing </head> tag is missing.
            if (! $count) {
                $content = $content . '</head><body>';
            }

            $content .= '</body>';
        }

        $content = "{$htmlStart}{$content}{$htmlEnd}";

        // Reinsert a standard doctype (while preserving any potentially leading comments).
        $doctype = preg_replace(self::HTML_DOCTYPE_REGEX_PATTERN, self::DEFAULT_DOCTYPE, $doctype);
        $content = "{$doctype}{$content}";

        return $content;
    }

    /**
     * Normalize the structure of the document if it was already provided as a DOM.
     *
     * Warning: This method may not use any magic getters for html, head, or body.
     */
    public function normalizeDomStructure()
    {
        if (! $this->documentElement) {
            $this->appendChild($this->createElement(Tag::HTML));
        }

        if (Tag::HTML !== $this->documentElement->nodeName) {
            $nextSibling = $this->documentElement->nextSibling;
            /**
             * The old document element that we need to remove and replace as we cannot just move it around.
             *
             * @var Element
             */
            $oldDocumentElement = $this->removeChild($this->documentElement);
            $html = $this->createElement(Tag::HTML);
            $this->insertBefore($html, $nextSibling);

            if ($oldDocumentElement->nodeName === Tag::HEAD) {
                $head = $oldDocumentElement;
            } else {
                $head = $this->getElementsByTagName(Tag::HEAD)->item(0);
                if (!$head) {
                    $head = $this->createElement(Tag::HEAD);
                }
            }

            if (!$head instanceof Element) {
                throw FailedToRetrieveRequiredDomElement::forHeadElement($head);
            }

            $this->properties['head'] = $head;
            $html->appendChild($head);

            if ($oldDocumentElement->nodeName === Tag::BODY) {
                $body = $oldDocumentElement;
            } else {
                $body = $this->getElementsByTagName(Tag::BODY)->item(0);
                if (!$body) {
                    $body = $this->createElement(Tag::BODY);
                }
            }

            if (!$body instanceof Element) {
                throw FailedToRetrieveRequiredDomElement::forBodyElement($body);
            }

            $this->properties['body'] = $body;
            $html->appendChild($body);

            if ($oldDocumentElement !== $body && $oldDocumentElement !== $this->head) {
                $body->appendChild($oldDocumentElement);
            }
        } else {
            $head = $this->getElementsByTagName(Tag::HEAD)->item(0);
            if (!$head) {
                $this->properties['head'] = $this->createElement(Tag::HEAD);
                $this->documentElement->insertBefore($this->properties['head'], $this->documentElement->firstChild);
            }

            $body = $this->getElementsByTagName(Tag::BODY)->item(0);
            if (!$body) {
                $this->properties['body'] = $this->createElement(Tag::BODY);
                $this->documentElement->appendChild($this->properties['body']);
            }
        }

        $this->moveInvalidHeadNodesToBody();
        $this->movePostBodyNodesToBody();
    }

    /**
     * Move invalid head nodes back to the body.
     *
     * Warning: This method may not use any magic getters for html, head, or body.
     */
    private function moveInvalidHeadNodesToBody()
    {
        // Walking backwards makes it easier to move elements in the expected order.
        $node = $this->properties['head']->lastChild;
        while ($node) {
            $nextSibling = $node->previousSibling;
            if (!$this->isValidHeadNode($node)) {
                $this->properties['body']->insertBefore(
                    $this->properties['head']->removeChild($node),
                    $this->properties['body']->firstChild
                );
            }
            $node = $nextSibling;
        }
    }

    /**
     * Move any nodes appearing after </body> or </html> to be appended to the <body>.
     *
     * This accounts for markup that is output at shutdown, such markup from Query Monitor. Not only is elements after
     * the </body> not valid in AMP, but trailing elements after </html> will get wrapped in additional <html> elements.
     * While comment nodes would be allowed in AMP, everything is moved regardless so that source stack comments will
     * retain their relative position with the element nodes they annotate.
     *
     * Warning: This method may not use any magic getters for html, head, or body.
     */
    private function movePostBodyNodesToBody()
    {
        // Move nodes (likely comments) from after the </body>.
        while ($this->properties['body']->nextSibling) {
            $this->properties['body']->appendChild($this->properties['body']->nextSibling);
        }

        // Move nodes from after the </html>.
        while ($this->documentElement->nextSibling) {
            $nextSibling = $this->documentElement->nextSibling;
            if ($nextSibling instanceof Element && Tag::HTML === $nextSibling->nodeName) {
                // Handle trailing elements getting wrapped in implicit duplicate <html>.
                while ($nextSibling->firstChild) {
                    $this->properties['body']->appendChild($nextSibling->firstChild);
                }
                $nextSibling->parentNode->removeChild($nextSibling); // Discard now-empty implicit <html>.
            } else {
                $this->properties['body']->appendChild($this->documentElement->nextSibling);
            }
        }
    }

    /**
     * Determine whether a node can be in the head.
     *
     * Warning: This method may not use any magic getters for html, head, or body.
     *
     * @link https://github.com/ampproject/amphtml/blob/445d6e3be8a5063e2738c6f90fdcd57f2b6208be/validator/engine/htmlparser.js#L83-L100
     * @link https://www.w3.org/TR/html5/document-metadata.html
     *
     * @param DOMNode $node Node.
     * @return bool Whether valid head node.
     */
    public function isValidHeadNode(DOMNode $node)
    {
        return (
            ($node instanceof Element && in_array($node->nodeName, Tag::ELEMENTS_ALLOWED_IN_HEAD, true))
            ||
            ($node instanceof DOMText && preg_match('/^\s*$/', $node->nodeValue)) // Whitespace text nodes are OK.
            ||
            $node instanceof DOMComment
        );
    }

    /**
     * Get the ID for an element.
     *
     * If the element does not have an ID, create one first.
     *
     * @param Element $element Element to get the ID for.
     * @param string  $prefix  Optional. The prefix to use (should not have a trailing dash). Defaults to 'i-amp-id'.
     * @return string ID to use.
     */
    public function getElementId(Element $element, $prefix = 'i-amp')
    {
        if ($element->hasAttribute(Attribute::ID)) {
            return $element->getAttribute(Attribute::ID);
        }

        $id = $this->uniqueIdManager->getUniqueId($prefix);
        while ($this->getElementById($id) instanceof Element) {
            $id = $this->uniqueIdManager->getUniqueId($prefix);
        }

        $element->setAttribute(Attribute::ID, $id);

        return $id;
    }

    /**
     * Determine whether `data-ampdevmode` was initially set on the document element.
     *
     * @return bool
     */
    public function hasInitialAmpDevMode()
    {
        return $this->hasInitialAmpDevMode;
    }

    /**
     * Add style(s) to the <style amp-custom> tag.
     *
     * @param string $style Style to add.
     * @throws MaxCssByteCountExceeded If the allowed max byte count is exceeded.
     */
    public function addAmpCustomStyle($style)
    {
        $style         = trim($style, CssRule::CSS_TRIM_CHARACTERS);
        $existingStyle = (string)$this->ampCustomStyle->textContent;

        // Inject new styles before any potential source map annotation comment like: /*# sourceURL=amp-custom.css */.
        // If not present, then just put it at the end of the stylesheet. This isn't strictly required, but putting the
        // source map comments at the end is the convention.
        $newStyle = preg_replace(
            ':(?=\s+/\*#[^*]+?\*/\s*$|$):s',
            $style,
            $existingStyle,
            1
        );

        $newByteCount = strlen($newStyle);

        if ($this->getRemainingCustomCssSpace() < ($newByteCount - $this->ampCustomStyleByteCount)) {
            throw MaxCssByteCountExceeded::forAmpCustom($newStyle);
        }

        $this->ampCustomStyle->textContent = $newStyle;
        $this->properties['ampCustomStyleByteCount'] = $newByteCount;
    }

    /**
     * Add the given number of bytes ot the total inline style byte count.
     *
     * @param int $byteCount Bytes to add.
     */
    public function addInlineStyleByteCount($byteCount)
    {
        $this->inlineStyleByteCount += $byteCount;
    }

    /**
     * Get the remaining number bytes allowed for custom CSS.
     *
     * @return int
     */
    public function getRemainingCustomCssSpace()
    {
        if ($this->cssMaxByteCountEnforced < 0) {
            // No CSS byte count limit is being enforced, so return the next best thing to +∞.
            return PHP_INT_MAX;
        }

        return max(
            0,
            $this->cssMaxByteCountEnforced - (int)$this->ampCustomStyleByteCount - (int)$this->inlineStyleByteCount
        );
    }

    /**
     * Get the array of allowed keys of lazily-created, cached properties.
     * The array index is the key and the array value is the key's default value.
     *
     * @return array Array of allowed keys.
     */
    protected function getAllowedKeys()
    {
        return [
            'xpath',
            Tag::HTML,
            Tag::HEAD,
            Tag::BODY,
            Attribute::CHARSET,
            Attribute::VIEWPORT,
            'ampElements',
            'ampCustomStyle',
            'ampCustomStyleByteCount',
            'inlineStyleByteCount',
            'links',
        ];
    }

    /**
     * Magic getter to implement lazily-created, cached properties for the document.
     *
     * @param string $name Name of the property to get.
     * @return mixed Value of the property, or null if unknown property was requested.
     */
    public function __get($name)
    {
        switch ($name) {
            case 'xpath':
                $this->properties['xpath'] = new DOMXPath($this);
                return $this->properties['xpath'];
            case Tag::HTML:
                $html = $this->getElementsByTagName(Tag::HTML)->item(0);

                if ($html === null) {
                    // Document was assembled manually and bypassed normalisation.
                    $this->normalizeDomStructure();
                    $html = $this->getElementsByTagName(Tag::HTML)->item(0);
                }

                if (!$html instanceof Element) {
                    throw FailedToRetrieveRequiredDomElement::forHtmlElement($html);
                }

                $this->properties['html'] = $html;
                return $this->properties['html'];
            case Tag::HEAD:
                $head = $this->getElementsByTagName(Tag::HEAD)->item(0);

                if ($head === null) {
                    // Document was assembled manually and bypassed normalisation.
                    $this->normalizeDomStructure();
                    $head = $this->getElementsByTagName(Tag::HEAD)->item(0);
                }

                if (!$head instanceof Element) {
                    throw FailedToRetrieveRequiredDomElement::forHeadElement($head);
                }

                $this->properties['head'] = $head;
                return $this->properties['head'];
            case Tag::BODY:
                $body = $this->getElementsByTagName(Tag::BODY)->item(0);

                if ($body === null) {
                    // Document was assembled manually and bypassed normalisation.
                    $this->normalizeDomStructure();
                    $body = $this->getElementsByTagName(Tag::BODY)->item(0);
                }

                if (!$body instanceof Element) {
                    throw FailedToRetrieveRequiredDomElement::forBodyElement($body);
                }

                $this->properties['body'] = $body;
                return $this->properties['body'];
            case Attribute::CHARSET:
                // This is not cached as it could potentially be requested too early, before the viewport was added, and
                // the cache would then store null without rechecking later on after the viewport has been added.
                for ($node = $this->head->firstChild; $node !== null; $node = $node->nextSibling) {
                    if (
                        $node instanceof Element
                        && $node->tagName === Tag::META
                        && $node->getAttribute(Attribute::NAME) === Attribute::CHARSET
                    ) {
                        return $node;
                    }
                }
                return null;
            case Attribute::VIEWPORT:
                // This is not cached as it could potentially be requested too early, before the viewport was added, and
                // the cache would then store null without rechecking later on after the viewport has been added.
                for ($node = $this->head->firstChild; $node !== null; $node = $node->nextSibling) {
                    if (
                        $node instanceof Element
                        && $node->tagName === Tag::META
                        && $node->getAttribute(Attribute::NAME) === Attribute::VIEWPORT
                    ) {
                        return $node;
                    }
                }
                return null;
            case 'ampElements':
                // This is not cached as we clone some elements during SSR transformations to avoid ending up with
                // partially transformed, broken elements.
                return $this->xpath->query(self::XPATH_AMP_ELEMENTS_QUERY, $this->body)
                    ?: new DOMNodeList();

            case 'ampCustomStyle':
                $ampCustomStyle = $this->xpath->query(self::XPATH_AMP_CUSTOM_STYLE_QUERY, $this->head)->item(0);
                if (!$ampCustomStyle instanceof Element) {
                    $ampCustomStyle = $this->createElement(Tag::STYLE);
                    $ampCustomStyle->appendChild($this->createAttribute(Attribute::AMP_CUSTOM));
                    $this->head->appendChild($ampCustomStyle);
                }

                $this->properties['ampCustomStyle'] = $ampCustomStyle;

                return $this->properties['ampCustomStyle'];

            case 'ampCustomStyleByteCount':
                if (!isset($this->properties['ampCustomStyle'])) {
                    $ampCustomStyle = $this->xpath->query(self::XPATH_AMP_CUSTOM_STYLE_QUERY, $this->head)->item(0);
                    if (!$ampCustomStyle instanceof Element) {
                        return 0;
                    }

                    $this->properties['ampCustomStyle'] = $ampCustomStyle;
                }

                if (!isset($this->properties['ampCustomStyleByteCount'])) {
                    $this->properties['ampCustomStyleByteCount'] =
                        strlen($this->properties['ampCustomStyle']->textContent);
                }

                return $this->properties['ampCustomStyleByteCount'];

            case 'inlineStyleByteCount':
                if (!isset($this->properties['inlineStyleByteCount'])) {
                    $this->properties['inlineStyleByteCount'] = 0;
                    $attributes = $this->xpath->query(
                        self::XPATH_INLINE_STYLE_ATTRIBUTES_QUERY,
                        $this->documentElement
                    );
                    foreach ($attributes as $attribute) {
                        $this->properties['inlineStyleByteCount'] += strlen($attribute->textContent);
                    }
                }

                return $this->properties['inlineStyleByteCount'];

            case 'links':
                if (! isset($this->properties['links'])) {
                    $this->properties['links'] = new LinkManager($this);
                }

                return $this->properties['links'];
        }

        // Mimic regular PHP behavior for missing notices.
        trigger_error(self::PROPERTY_GETTER_ERROR_MESSAGE . $name, E_USER_NOTICE);
        return null;
    }

    /**
     * Magic setter to implement lazily-created, cached properties for the document.
     *
     * @param string $name Name of the property to set.
     * @param mixed  $value Value of the property.
     */
    public function __set($name, $value)
    {
        if (!in_array($name, $this->getAllowedKeys(), true)) {
            // Mimic regular PHP behavior for missing notices.
            trigger_error(self::PROPERTY_GETTER_ERROR_MESSAGE . $name, E_USER_NOTICE);
            return;
        }

        $this->properties[$name] = $value;
    }

    /**
     * Magic callback for lazily-created, cached properties for the document.
     *
     * @param string $name Name of the property to set.
     */
    public function __isset($name)
    {
        if (!in_array($name, $this->getAllowedKeys(), true)) {
            // Mimic regular PHP behavior for missing notices.
            trigger_error(self::PROPERTY_GETTER_ERROR_MESSAGE . $name, E_USER_NOTICE);
            return false;
        }

        return isset($this->properties[$name]);
    }

    /**
     * Make sure we properly reinitialize on clone.
     *
     * @return void
     */
    public function __clone()
    {
        $this->reset();
    }

    /**
     * Create new element node.
     *
     * @link https://php.net/manual/domdocument.createelement.php
     *
     * This override only serves to provide the correct object type-hint for our extended Dom/Element class.
     *
     * @param string $name  The tag name of the element.
     * @param string $value Optional. The value of the element. By default, an empty element will be created.
     *                      You can also set the value later with Element->nodeValue.
     * @return Element|false A new instance of class Element or false if an error occurred.
     */
    public function createElement($name, $value = '')
    {
        $element = parent::createElement($name, $value);

        if (!$element instanceof Element) {
            return false;
        }

        return $element;
    }

    /**
     * Create new element node.
     *
     * @link https://php.net/manual/domdocument.createelement.php
     *
     * This override only serves to provide the correct object type-hint for our extended Dom/Element class.
     *
     * @param string $name       The tag name of the element.
     * @param array  $attributes Attributes to add to the newly created element.
     * @param string $value      Optional. The value of the element. By default, an empty element will be created.
     *                           You can also set the value later with Element->nodeValue.
     * @return Element|false A new instance of class Element or false if an error occurred.
     */
    public function createElementWithAttributes($name, $attributes, $value = '')
    {
        $element = parent::createElement($name, $value);

        if (!$element instanceof Element) {
            return false;
        }

        $element->setAttributes($attributes);

        return $element;
    }

    /**
     * Check whether the CSS maximum byte count is enforced.
     *
     * @return bool Whether the CSS maximum byte count is enforced.
     */
    public function isCssMaxByteCountEnforced()
    {
        return $this->cssMaxByteCountEnforced >= 0;
    }

    /**
     * Enforce a maximum number of bytes for the CSS.
     *
     * @param int|null $maxByteCount Maximum number of bytes to limit the CSS to. A negative number disables the limit.
     *                               If null then the max bytes from AmpNoTransformed is used.
     */
    public function enforceCssMaxByteCount($maxByteCount = null)
    {
        if ($maxByteCount === null) {
            // No need to instantiate the spec here, we can just directly reference the needed constant.
            $maxByteCount = AmpNoTransformed::SPEC[SpecRule::MAX_BYTES];
        }

        $this->cssMaxByteCountEnforced = $maxByteCount;
    }

    /**
     * Register filters to pre- or post-process the document content.
     *
     * @param string[] $filterClasses Array of FQCNs of document filter classes.
     */
    public function registerFilters($filterClasses)
    {
        foreach ($filterClasses as $filterClass) {
            $this->filterClasses[] = $filterClass;
        }
    }

    /**
     * Instantiate a filter from its class while providing the needed dependencies.
     *
     * @param string $filterClass Class of the filter to instantiate.
     * @return Filter Filter object instance.
     * @throws ReflectionException If the constructor could not be reflected upon.
     */
    private function instantiateFilter($filterClass)
    {
        $constructor  = (new ReflectionClass($filterClass))->getConstructor();
        $parameters   = $constructor === null ? [] : $constructor->getParameters();
        $dependencies = [];

        foreach ($parameters as $parameter) {
            $dependencyType = null;

            // The use of `ReflectionParameter::getClass()` is deprecated in PHP 8, and is superseded
            // by `ReflectionParameter::getType()`. See https://github.com/php/php-src/pull/5209.
            if (PHP_VERSION_ID >= 70100) {
                if ($parameter->getType()) {
                    /** @var ReflectionNamedType $returnType */
                    $returnType = $parameter->getType();
                    $dependencyType = new ReflectionClass($returnType->getName());
                }
            } else {
                $dependencyType = $parameter->getClass();
            }

            if ($dependencyType === null) {
                // No type provided, so we pass `null` in the hopes that the argument is optional.
                $dependencies[] = null;
                continue;
            }

            if (is_a($dependencyType->name, Encoding::class, true)) {
                $dependencies[] = $this->originalEncoding;
                continue;
            }

            if (is_a($dependencyType->name, Options::class, true)) {
                $dependencies[] = $this->options;
                continue;
            }

            if (is_a($dependencyType->name, UniqueIdManager::class, true)) {
                $dependencies[] = $this->uniqueIdManager;
                continue;
            }

            // Unknown dependency type, so we pass `null` in the hopes that the argument is optional.
            $dependencies[] = null;
        }

        return new $filterClass(...$dependencies);
    }
}
PK.3YFx.2�+�+<bunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Element.php<?php

namespace AmpProject\Dom;

use AmpProject\Html\Attribute;
use AmpProject\Exception\MaxCssByteCountExceeded;
use AmpProject\Optimizer\CssRule;
use DOMAttr;
use DOMElement;

/**
 * Abstract away some convenience logic for handling DOMElement objects.
 *
 * @property Document $ownerDocument        The ownerDocument for these elements should always be a Dom\Document.
 * @property int      $inlineStyleByteCount Number of bytes that are consumed by the inline style attribute.
 *
 * @package ampproject/amp-toolbox
 */
final class Element extends DOMElement
{
    /**
     * Regular expression pattern to match events and actions within an 'on' attribute.
     *
     * @var string
     */
    const AMP_EVENT_ACTIONS_REGEX_PATTERN = '/((?<event>[^:;]+):(?<actions>(?:[^;,\(]+(?:\([^\)]+\))?,?)+))+?/';

    /**
     * Regular expression pattern to match individual actions within an event.
     *
     * @var string
     */
    const AMP_ACTION_REGEX_PATTERN = '/(?<action>[^(),\s]+(?:\([^\)]+\))?)+/';

    /**
     * Error message to use when the __get() is triggered for an unknown property.
     *
     * @var string
     */
    const PROPERTY_GETTER_ERROR_MESSAGE = 'Undefined property: AmpProject\\Dom\\Element::';

    /**
     * Associative array for lazily-created, cached properties for the document.
     *
     * @var array
     */
    private $properties = [];

    /**
     * Add CSS styles to the element as an inline style attribute.
     *
     * @param string $style   CSS style(s) to add to the inline style attribute.
     * @param bool   $prepend Optional. Whether to prepend the new style to existing styles or not. Defaults to false.
     * @return DOMAttr|false The new or modified DOMAttr or false if an error occurred.
     * @throws MaxCssByteCountExceeded If the allowed max byte count is exceeded.
     */
    public function addInlineStyle($style, $prepend = false)
    {
        $style = trim($style, CssRule::CSS_TRIM_CHARACTERS);

        $existingStyle = (string)trim($this->getAttribute(Attribute::STYLE));
        if (!empty($existingStyle)) {
            $existingStyle = rtrim($existingStyle, ';') . ';';
        }

        $newStyle = $prepend ? ($style . ';' . $existingStyle) : ($existingStyle . $style);

        return $this->setAttribute(Attribute::STYLE, $newStyle);
    }

    /**
     * Sets or modifies an attribute.
     *
     * @link https://php.net/manual/en/domelement.setattribute.php
     * @param string $name  The name of the attribute.
     * @param string $value The value of the attribute.
     * @return DOMAttr|false The new or modified DOMAttr or false if an error occurred.
     * @throws MaxCssByteCountExceeded If the allowed max byte count is exceeded.
     */
    public function setAttribute($name, $value)
    {
        // Make sure $value is always a string and not null.
        $value = strval($value);

        if (
            $name === Attribute::STYLE
            && $this->ownerDocument->isCssMaxByteCountEnforced()
        ) {
            $newByteCount = strlen($value);

            if ($this->ownerDocument->getRemainingCustomCssSpace() < ($newByteCount - $this->inlineStyleByteCount)) {
                throw MaxCssByteCountExceeded::forInlineStyle($this, $value);
            }

            $this->ownerDocument->addInlineStyleByteCount($newByteCount - $this->inlineStyleByteCount);

            $this->inlineStyleByteCount = $newByteCount;
            return parent::setAttribute(Attribute::STYLE, $value);
        }

        return parent::setAttribute($name, $value);
    }

    /**
     * Adds a boolean attribute without value.
     *
     * @param string $name  The name of the attribute.
     * @return DOMAttr|false The new or modified DOMAttr or false if an error occurred.
     * @throws MaxCssByteCountExceeded If the allowed max byte count is exceeded.
     */
    public function addBooleanAttribute($name)
    {
        $attribute = new DOMAttr($name);
        $result    = $this->setAttributeNode($attribute);

        if (!$result instanceof DOMAttr) {
            return false;
        }

        return $result;
    }

    /**
     * Copy one or more attributes from this element to another element.
     *
     * @param array|string $attributes       Attribute name or array of attribute names to copy.
     * @param Element      $target           Target Dom\Element to copy the attributes to.
     * @param string       $defaultSeparator Default separator to use for multiple values if the attribute is not known.
     */
    public function copyAttributes($attributes, Element $target, $defaultSeparator = ',')
    {
        foreach ((array) $attributes as $attribute) {
            if ($this->hasAttribute($attribute)) {
                $values = $this->getAttribute($attribute);
                if ($target->hasAttribute($attribute)) {
                    switch ($attribute) {
                        case Attribute::ON:
                            $values = self::mergeAmpActions($target->getAttribute($attribute), $values);
                            break;
                        case Attribute::CLASS_:
                            $values = $target->getAttribute($attribute) . ' ' . $values;
                            break;
                        default:
                            $values = $target->getAttribute($attribute) . $defaultSeparator . $values;
                    }
                }
                $target->setAttribute($attribute, $values);
            }
        }
    }

    /**
     * Register an AMP action to an event.
     *
     * If the element already contains one or more events or actions, the method
     * will assemble them in a smart way.
     *
     * @param string $event  Event to trigger the action on.
     * @param string $action Action to add.
     */
    public function addAmpAction($event, $action)
    {
        $eventActionString = "{$event}:{$action}";

        if (! $this->hasAttribute(Attribute::ON)) {
            // There's no "on" attribute yet, so just add it and be done.
            $this->setAttribute(Attribute::ON, $eventActionString);
            return;
        }

        $this->setAttribute(
            Attribute::ON,
            self::mergeAmpActions(
                $this->getAttribute(Attribute::ON),
                $eventActionString
            )
        );
    }

    /**
     * Merge two sets of AMP events & actions.
     *
     * @param string $first  First event/action string.
     * @param string $second First event/action string.
     * @return string Merged event/action string.
     */
    public static function mergeAmpActions($first, $second)
    {
        $events = [];
        foreach ([$first, $second] as $eventActionString) {
            $matches = [];
            $results = preg_match_all(self::AMP_EVENT_ACTIONS_REGEX_PATTERN, $eventActionString, $matches);

            if (! $results || ! isset($matches['event'])) {
                continue;
            }

            foreach ($matches['event'] as $index => $event) {
                $events[$event][] = $matches['actions'][ $index ];
            }
        }

        $valueStrings = [];
        foreach ($events as $event => $actionStringsArray) {
            $actionsArray = [];
            array_walk(
                $actionStringsArray,
                static function ($actions) use (&$actionsArray) {
                    $matches = [];
                    $results = preg_match_all(self::AMP_ACTION_REGEX_PATTERN, $actions, $matches);

                    if (! $results || ! isset($matches['action'])) {
                        $actionsArray[] = $actions;
                        return;
                    }

                    $actionsArray = array_merge($actionsArray, $matches['action']);
                }
            );

            $actions         = implode(',', array_unique(array_filter($actionsArray)));
            $valueStrings[] = "{$event}:{$actions}";
        }

        return implode(';', $valueStrings);
    }

    /**
     * Extract this element's HTML attributes and return as an associative array.
     *
     * @return string[] The attributes for the passed node, or an empty array if it has no attributes.
     */
    public function getAttributesAsAssocArray()
    {
        $attributes = [];
        if (! $this->hasAttributes()) {
            return $attributes;
        }

        foreach ($this->attributes as $attribute) {
            $attributes[ $attribute->nodeName ] = $attribute->nodeValue;
        }

        return $attributes;
    }

    /**
     * Add one or more HTML element attributes to this element.
     *
     * @param string[] $attributes One or more attributes for the node's HTML element.
     */
    public function setAttributes($attributes)
    {
        foreach ($attributes as $name => $value) {
            try {
                $this->setAttribute($name, $value);
            } catch (MaxCssByteCountExceeded $e) {
                /*
                 * Catch a "Invalid Character Error" when libxml is able to parse attributes with invalid characters,
                 * but it throws error when attempting to set them via DOM methods. For example, '...this' can be parsed
                 * as an attribute but it will throw an exception when attempting to setAttribute().
                 */
                continue;
            }
        }
    }

    /**
     * Magic getter to implement lazily-created, cached properties for the element.
     *
     * @param string $name Name of the property to get.
     * @return mixed Value of the property, or null if unknown property was requested.
     */
    public function __get($name)
    {
        switch ($name) {
            case 'inlineStyleByteCount':
                if (!isset($this->properties['inlineStyleByteCount'])) {
                    $this->properties['inlineStyleByteCount'] = strlen((string)$this->getAttribute(Attribute::STYLE));
                }

                return $this->properties['inlineStyleByteCount'];
        }

        // Mimic regular PHP behavior for missing notices.
        trigger_error(self::PROPERTY_GETTER_ERROR_MESSAGE . $name, E_USER_NOTICE);

        return null;
    }

    /**
     * Magic setter to implement lazily-created, cached properties for the element.
     *
     * @param string $name Name of the property to set.
     * @param mixed  $value Value of the property.
     */
    public function __set($name, $value)
    {
        if ($name !== 'inlineStyleByteCount') {
            // Mimic regular PHP behavior for missing notices.
            trigger_error(self::PROPERTY_GETTER_ERROR_MESSAGE . $name, E_USER_NOTICE);
            return;
        }

        $this->properties[$name] = $value;
    }

    /**
     * Magic callback for lazily-created, cached properties for the element.
     *
     * @param string $name Name of the property to set.
     */
    public function __isset($name)
    {
        if ($name !== 'inlineStyleByteCount') {
            // Mimic regular PHP behavior for missing notices.
            trigger_error(self::PROPERTY_GETTER_ERROR_MESSAGE . $name, E_USER_NOTICE);
            return false;
        }

        return isset($this->properties[$name]);
    }
}
PK.3Y��~���@bunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/ElementDump.php<?php

namespace AmpProject\Dom;

use AmpProject\Str;
use DOMAttr;

/**
 * Dump an element with its attributes.
 *
 * This is meant for quick identification of an element and does not dump the child element or other inner content
 * from that element.
 *
 * @package ampproject/amp-toolbox
 */
final class ElementDump
{
    /**
     * Element to dump.
     *
     * @var Element
     */
    private $element;

    /**
     * Maximum length to truncate attributes and textContent to.
     *
     * Defaults to 120.
     *
     * @var int
     */
    private $truncate;

    /**
     * Instantiate an ElementDump object.
     *
     * The object is meant to be cast to a string to do its magic.
     *
     * @param Element $element  Element to dump.
     * @param int     $truncate Optional. Maximum length to truncate attributes and textContent to. Defaults to 120.
     */
    public function __construct(Element $element, $truncate = 120)
    {
        $this->element  = $element;
        $this->truncate = $truncate;
    }

    /**
     * Dump the provided element into a string.
     *
     * @return string Dump of the element.
     */
    public function __toString()
    {
        $attributes = $this->maybeTruncate(
            array_reduce(
                iterator_to_array($this->element->attributes, true),
                static function ($text, DOMAttr $attribute) {
                    return $text . " {$attribute->nodeName}=\"{$attribute->value}\"";
                },
                ''
            )
        );

        $textContent = $this->maybeTruncate($this->element->textContent);

        return sprintf(
            '<%1$s%2$s>%3$s</%1$s>',
            $this->element->tagName,
            $attributes,
            $textContent
        );
    }

    /**
     * Truncate the provided text if needed.
     *
     * @param string $text Text to truncate.
     * @return string Potentially truncated text.
     */
    private function maybeTruncate($text)
    {
        if ($this->truncate <= 0) {
            return $text;
        }

        if (Str::length($text) > $this->truncate) {
            return Str::substring($text, 0, $this->truncate - 1) . '…';
        }

        return $text;
    }
}
PK.3Y��l�&�&@bunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/LinkManager.php<?php

namespace AmpProject\Dom;

use AmpProject\Html\Attribute;
use AmpProject\Exception\FailedToCreateLink;
use AmpProject\Html\RequestDestination;
use AmpProject\Html\Tag;
use DOMNode;

/**
 * Link manager class that is used to manage the <link> tags within a document's <head>.
 *
 * These can be used for example to give the browser hints about how to prioritize resources.
 *
 * @package ampproject/amp-toolbox
 */
final class LinkManager
{
    /**
     * List of relations currently managed by the link manager.
     *
     * @var array<string>
     */
    const MANAGED_RELATIONS = [
        Attribute::REL_DNS_PREFETCH,
        Attribute::REL_MODULEPRELOAD,
        Attribute::REL_PRECONNECT,
        Attribute::REL_PREFETCH,
        Attribute::REL_PRELOAD,
        Attribute::REL_PRERENDER,
    ];

    /**
     * Document to manage the links for.
     *
     * @var Document
     */
    private $document;

    /**
     * Reference node to attach the resource hint to.
     *
     * @var DOMNode|null
     */
    private $referenceNode;

    /**
     * Collection of links already attached to the document.
     *
     * The key of the array is a concatenation of the HREF and the REL attributes.
     *
     * @var Element[]
     */
    private $links = [];

    /**
     * LinkManager constructor.
     *
     * @param Document $document Document to manage the links for.
     */
    public function __construct(Document $document)
    {
        $this->document = $document;
        $this->detectExistingLinks();
    }

    private function detectExistingLinks()
    {
        $node = $this->document->head->firstChild;
        while ($node) {
            $nextSibling = $node->nextSibling;
            if (
                ! $node instanceof Element
                ||
                $node->tagName !== Tag::LINK
            ) {
                $node = $nextSibling;
                continue;
            }

            $key = $this->getKey($node);

            if ($key !== '') {
                $this->links[$this->getKey($node)] = $node;
            }

            $node = $nextSibling;
        }
    }

    /**
     * Get the key to use for storing the element in the links cache.
     *
     * @param Element $element Element to get the key for.
     * @return string Key to use. Returns an empty string for invalid elements.
     */
    private function getKey(Element $element)
    {
        $href = $element->getAttribute(Attribute::HREF);
        $rel  = $element->getAttribute(Attribute::REL);

        if (empty($href) || ! in_array($rel, self::MANAGED_RELATIONS, true)) {
            return '';
        }

        return "{$href}{$rel}";
    }

    /**
     * Add a dns-prefetch resource hint.
     *
     * @see https://www.w3.org/TR/resource-hints/#dns-prefetch
     *
     * @param string $href Origin to prefetch the DNS for.
     */
    public function addDnsPrefetch($href)
    {
        $this->add(Attribute::REL_DNS_PREFETCH, $href);
    }

    /**
     * Add a modulepreload declarative fetch primitive.
     *
     * @see https://html.spec.whatwg.org/multipage/links.html#link-type-modulepreload
     *
     * @param string      $href        Modular resource to preload.
     * @param string|null $type        Optional. Type of the resource. Defaults to not specified, which equals 'script'.
     * @param bool|string $crossorigin Optional. Whether and how to configure CORS. Accepts a boolean for adding a
     *                                 boolean crossorigin flag, or a string to set a specific crossorigin strategy.
     *                                 Allowed values are 'anonymous' and 'use-credentials'. Defaults to true.
     */
    public function addModulePreload($href, $type = null, $crossorigin = true)
    {
        $attributes = [];

        if ($type !== null) {
            $attributes = [Attribute::AS_ => $type];
        }

        if ($crossorigin !== false) {
            $attributes[Attribute::CROSSORIGIN] = is_string($crossorigin) ? $crossorigin : null;
        }

        $this->add(Attribute::REL_MODULEPRELOAD, $href, $attributes);
    }

    /**
     * Add a preconnect resource hint.
     *
     * @see https://www.w3.org/TR/resource-hints/#dfn-preconnect
     *
     * @param string      $href        Origin to preconnect to.
     * @param bool|string $crossorigin Optional. Whether and how to configure CORS. Accepts a boolean for adding a
     *                                 boolean crossorigin flag, or a string to set a specific crossorigin strategy.
     *                                 Allowed values are 'anonymous' and 'use-credentials'. Defaults to true.
     */
    public function addPreconnect($href, $crossorigin = true)
    {
        $this->add(
            Attribute::REL_PRECONNECT,
            $href,
            $crossorigin !== false ? [Attribute::CROSSORIGIN => (is_string($crossorigin) ? $crossorigin : null)] : []
        );

        // Use dns-prefetch as fallback for browser that don't support preconnect.
        // See https://web.dev/preconnect-and-dns-prefetch/#resolve-domain-name-early-with-reldns-prefetch.
        $this->addDnsPrefetch($href);
    }

    /**
     * Add a prefetch resource hint.
     *
     * @see https://www.w3.org/TR/resource-hints/#prefetch
     *
     * @param string      $href        URL to the resource to prefetch.
     * @param string      $type        Optional. Type of the resource. Defaults to type 'image'.
     * @param bool|string $crossorigin Optional. Whether and how to configure CORS. Accepts a boolean for adding a
     *                                 boolean crossorigin flag, or a string to set a specific crossorigin strategy.
     *                                 Allowed values are 'anonymous' and 'use-credentials'. Defaults to true.
     */
    public function addPrefetch($href, $type = RequestDestination::IMAGE, $crossorigin = true)
    {
        // TODO: Should we enforce a valid $type here?

        $attributes = [Attribute::AS_ => $type];

        if ($crossorigin !== false) {
            $attributes[Attribute::CROSSORIGIN] = is_string($crossorigin) ? $crossorigin : null;
        }

        $this->add(Attribute::REL_PREFETCH, $href, $attributes);
    }

    /**
     * Add a preload declarative fetch primitive.
     *
     * @see https://www.w3.org/TR/preload/
     *
     * @param string      $href        Resource to preload.
     * @param string      $type        Optional. Type of the resource. Defaults to type 'image'.
     * @param string|null $media       Optional. Media query to add to the preload. Defaults to none.
     * @param bool|string $crossorigin Optional. Whether and how to configure CORS. Accepts a boolean for adding a
     *                                 boolean crossorigin flag, or a string to set a specific crossorigin strategy.
     *                                 Allowed values are 'anonymous' and 'use-credentials'. Defaults to true.
     */
    public function addPreload($href, $type = RequestDestination::IMAGE, $media = null, $crossorigin = true)
    {
        // TODO: Should we enforce a valid $type here?

        $attributes = [Attribute::AS_ => $type];

        if (!empty($media)) {
            $attributes[Attribute::MEDIA] = $media;
        }

        if ($crossorigin !== false) {
            $attributes[Attribute::CROSSORIGIN] = is_string($crossorigin) ? $crossorigin : null;
        }

        $this->add(Attribute::REL_PRELOAD, $href, $attributes);
    }

    /**
     * Add a prerender resource hint.
     *
     * @see https://www.w3.org/TR/resource-hints/#prerender
     *
     * @param string $href URL of the page to prerender.
     */
    public function addPrerender($href)
    {
        $this->add(Attribute::REL_PRERENDER, $href);
    }

    /**
     * Add a link to the document.
     *
     * @param string   $rel        A 'rel' string.
     * @param string   $href       URL to link to.
     * @param string[] $attributes Associative array of attributes and their values.
     */
    public function add($rel, $href, $attributes = [])
    {
        $link = $this->document->createElement(Tag::LINK);
        $link->setAttribute(Attribute::REL, $rel);
        $link->setAttribute(Attribute::HREF, $href);
        foreach ($attributes as $attribute => $value) {
            $link->setAttribute($attribute, $value);
        }

        $this->remove($rel, $href);

        if (!isset($this->referenceNode)) {
            $this->referenceNode = $this->document->viewport;
        }

        if ($this->referenceNode) {
            $link = $this->document->head->insertBefore($link, $this->referenceNode->nextSibling);
        } else {
            $link = $this->document->head->appendChild($link);
        }

        if (! $link instanceof Element) {
            throw FailedToCreateLink::forLink($link);
        }

        $this->links[$this->getKey($link)] = $link;

        $this->referenceNode = $link;
    }

    /**
     * Get a specific link from the link manager.
     *
     * @param string $rel  Relation to fetch.
     * @param string $href Reference to fetch.
     * @return Element|null Requested link as a Dom\Element, or null if not found.
     */
    public function get($rel, $href)
    {
        $key = "{$href}{$rel}";

        if (! array_key_exists($key, $this->links)) {
            return null;
        }

        return $this->links[$key];
    }

    /**
     * Remove a specific link from the document.
     *
     * @param string $rel  Relation of the link to remove.
     * @param string $href Reference of the link to remove.
     */
    public function remove($rel, $href)
    {
        $key = "{$href}{$rel}";

        if (! array_key_exists($key, $this->links)) {
            return;
        }

        $link = $this->links[$key];
        $link->parentNode->removeChild($link);

        unset($this->links[$key]);
    }
}
PK.3YE%m��?bunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/NodeWalker.php<?php

namespace AmpProject\Dom;

use DOMNode;

/**
 * Walk a hierarchical tree of nodes in a sequential manner.
 *
 * @package ampproject/amp-toolbox
 */
final class NodeWalker
{
    /**
     * Depth-first walk through the DOM tree.
     *
     * @param DOMNode $node Node to start walking from.
     * @return DOMNode|null Next node, or null if none found.
     */
    public static function nextNode(DOMNode $node)
    {
        // Walk downwards if there are children.
        if ($node->firstChild) {
            return $node->firstChild;
        }

        // Return direct sibling or walk upwards until we find a node with a sibling.
        while ($node) {
            if ($node->nextSibling) {
                return $node->nextSibling;
            }

            $node = $node->parentNode;
        }

        // Out of nodes, so we're done.
        return null;
    }

    /**
     * Skip the subtree that is descending from the provided node.
     *
     * @param DOMNode $node Node to skip the subtree of.
     * @return DOMNode|null The appropriate "next" node that will skip the current subtree, null if none found.
     */
    public static function skipNodeAndChildren(DOMNode $node)
    {
        if ($node->nextSibling) {
            return $node->nextSibling;
        }

        if ($node->parentNode === null) {
            return null;
        }

        return self::skipNodeAndChildren($node->parentNode);
    }
}
PK.3YVg1				<bunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Options.php<?php

namespace AmpProject\Dom;

use ArrayAccess;

/**
 * Configuration options for DOM document.
 *
 * @package ampproject/amp-toolbox
 */
final class Options implements ArrayAccess
{
    /**
     * Associative array of options to configure the behavior of the DOM document abstraction.
     *
     * @var array
     */
    private $options;

    /**
     * Creates a new AmpProject\Dom\Options object
     *
     * @param array $options Associative array of configuration options.
     */
    public function __construct($options)
    {
        $this->options = $options;
    }

    /**
     * Sets a value at a specified offset.
     *
     * @param string $option The option name.
     * @param mixed  $value  Option value.
     */
    #[\ReturnTypeWillChange]
    public function offsetSet($option, $value)
    {
        $this->options[$option] = $value;
    }

    /**
     * Determines whether an option exists.
     *
     * @param string $option Option name.
     * @return bool True if the option exists, false otherwise.
     */
    #[\ReturnTypeWillChange]
    public function offsetExists($option)
    {
        return isset($this->options[$option]);
    }

    /**
     * Unsets a specified option.
     *
     * @param string $option Option name.
     */
    #[\ReturnTypeWillChange]
    public function offsetUnset($option)
    {
        unset($this->options[$option]);
    }

    /**
     * Retrieves a value at a specified option.
     *
     * @param string $option Option name.
     * @return mixed If set, the value of the option, null otherwise.
     */
    #[\ReturnTypeWillChange]
    public function offsetGet($option)
    {
        return isset($this->options[$option]) ? $this->options[$option] : null;
    }

    /**
     * Merge new options with the existing ones.
     *
     * @param array $options Associative array of new options.
     * @return Options Cloned version of the Options object.
     */
    public function merge($options)
    {
        $clonedOptions = clone $this;
        $clonedOptions->options = array_merge($this->options, $options);

        return $clonedOptions;
    }

    /**
     * Get the options in associative array.
     * @return array Associative array of options.
     */
    public function toArray()
    {
        return $this->options;
    }
}
PK.3Y�h�uffDbunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/UniqueIdManager.php<?php

namespace AmpProject\Dom;

/**
 * Unique ID manager.
 *
 * @package ampproject/amp-toolbox
 */
final class UniqueIdManager
{
    /**
     * Store the current index by prefix.
     *
     * This is used to generate unique-per-prefix IDs.
     *
     * @var int[]
     */
    private $indexCounter = [];

    /**
     * Get auto-incremented ID unique to this class's instantiation.
     *
     * @param string $prefix Prefix.
     * @return string ID.
     */
    public function getUniqueId($prefix = '')
    {
        if (array_key_exists($prefix, $this->indexCounter)) {
            ++$this->indexCounter[$prefix];
        } else {
            $this->indexCounter[$prefix] = 0;
        }
        $uniqueId = (string)$this->indexCounter[$prefix];
        if ($prefix) {
            $uniqueId = "{$prefix}-{$uniqueId}";
        }
        return $uniqueId;
    }
}
PK.3Yo/�y��Mbunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/AfterLoadFilter.php<?php

namespace AmpProject\Dom\Document;

use AmpProject\Dom\Document;

/**
 * Filter the Dom\Document after it was loaded.
 *
 * @package ampproject/amp-toolbox
 */
interface AfterLoadFilter extends Filter
{
    /**
     * Process the Document after the html loaded into the Dom\Document.
     *
     * @param Document $document Document to be processed.
     */
    public function afterLoad(Document $document);
}
PK.3Y�aV���Mbunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/AfterSaveFilter.php<?php

namespace AmpProject\Dom\Document;

/**
 * Filter the HTML after it is saved from the Dom\Document.
 *
 * @package ampproject/amp-toolbox
 */
interface AfterSaveFilter extends Filter
{
    /**
     * Process the Dom\Document after being saved from Dom\Document.
     *
     * @param string $html String of HTML markup to be preprocessed.
     * @return string Preprocessed string of HTML markup.
     */
    public function afterSave($html);
}
PK.3Y{����Nbunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/BeforeLoadFilter.php<?php

namespace AmpProject\Dom\Document;

/**
 * Filter the HTML before it is loaded into the Dom\Document.
 *
 * @package ampproject/amp-toolbox
 */
interface BeforeLoadFilter extends Filter
{
    /**
     * Preprocess the HTML to be loaded into the Dom\Document.
     *
     * @param string $html String of HTML markup to be preprocessed.
     * @return string Preprocessed string of HTML markup.
     */
    public function beforeLoad($html);
}
PK.3Y���~��Nbunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/BeforeSaveFilter.php<?php

namespace AmpProject\Dom\Document;

use AmpProject\Dom\Document;

/**
 * Filter the Dom\Document before it is saved.
 *
 * @package ampproject/amp-toolbox
 */
interface BeforeSaveFilter extends Filter
{
    /**
     * Preprocess the DOM to be saved into HTML.
     *
     * @param Document $document Document to be preprocessed before saving it into HTML.
     */
    public function beforeSave(Document $document);
}
PK.3Y<�e�Dbunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter.php<?php

namespace AmpProject\Dom\Document;

/**
 * Filter to process the document.
 *
 * This is only a marker interface and needs to be extended by the specific filter types that defines methods.
 *
 * @package ampproject/amp-toolbox
 */
interface Filter
{
}
PK.3Yu�E
�
�
Dbunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Option.php<?php

namespace AmpProject\Dom\Document;

/**
 * Option constants that can be used to configure a Dom\Document instance.
 *
 * @package ampproject/amp-toolbox
 */
interface Option
{
    /**
     * Option to configure the preferred amp-bind syntax.
     *
     * @var string
     */
    const AMP_BIND_SYNTAX = 'amp_bind_syntax';

    /**
     * Option to provide the encoding of the document.
     *
     * @var string
     */
    const ENCODING = 'encoding';

    /**
     * Option to provide additional libxml flags to configure parsing of the document.
     *
     * @var string
     */
    const LIBXML_FLAGS = 'libxml_flags';

    /**
     * Option to check encoding in order to detect invalid byte sequences.
     *
     * @var string
     */
    const CHECK_ENCODING = 'check_encoding';

    /**
     * Option to use the NormalizeHtmlEntities filter.
     *
     * Accepted values are 'auto', 'always' and 'never'.
     *
     * @var string
     */
    const NORMALIZE_HTML_ENTITIES = 'normalize_html_entities';

    /**
     * Flags option for html entities.
     *
     * @var string
     */
    const NORMALIZE_HTML_ENTITIES_FLAGS = 'normalize_html_entities_flags';

    /**
     * Associative array of known options and their respective default value.
     *
     * @var array
     */
    const DEFAULTS = [
        self::AMP_BIND_SYNTAX                => self::AMP_BIND_SYNTAX_AUTO,
        self::ENCODING                       => null,
        self::LIBXML_FLAGS                   => 0,
        self::CHECK_ENCODING                 => false,
        self::NORMALIZE_HTML_ENTITIES        => self::NORMALIZE_HTML_ENTITIES_AUTO,
        self::NORMALIZE_HTML_ENTITIES_FLAGS  => ENT_HTML5,
    ];

    /**
     * Possible value 'auto' for the 'amp_bind_syntax' option.
     *
     * @var string
     */
    const AMP_BIND_SYNTAX_AUTO = 'auto';

    /**
     * Possible value 'data_attribute' for the 'amp_bind_syntax' option.
     *
     * @var string
     */
    const AMP_BIND_SYNTAX_DATA_ATTRIBUTE = 'data_attribute';

    /**
     * Possible value 'square_brackets' for the 'amp_bind_syntax' option.
     *
     * @var string
     */
    const AMP_BIND_SYNTAX_SQUARE_BRACKETS = 'square_brackets';

    /**
     * Possible value 'auto' for the 'normalize_html_entities' option.
     *
     * @var string
     */
    const NORMALIZE_HTML_ENTITIES_AUTO = 'auto';

    /**
     * Possible value 'always' for the 'normalize_html_entities' option.
     *
     * @var string
     */
    const NORMALIZE_HTML_ENTITIES_ALWAYS = 'always';

    /**
     * Possible value 'never' for the 'normalize_html_entities' option.
     *
     * @var string
     */
    const NORMALIZE_HTML_ENTITIES_NEVER = 'never';
}
PK.3Y�&7V'V'Vbunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter/AmpBindAttributes.php<?php

namespace AmpProject\Dom\Document\Filter;

use AmpProject\Amp;
use AmpProject\Dom\Document\AfterSaveFilter;
use AmpProject\Dom\Document\BeforeLoadFilter;
use AmpProject\Dom\Document\Option;
use AmpProject\Dom\Options;

/**
 * Amp bind attributes filter.
 *
 * @package ampproject/amp-toolbox
 */
final class AmpBindAttributes implements BeforeLoadFilter, AfterSaveFilter
{
    /**
     * Pattern for HTML attribute accounting for binding attr name in data attribute syntax, boolean attribute,
     * single/double-quoted attribute value, and unquoted attribute values.
     *
     * @var string
     */
    const AMP_BIND_DATA_ATTRIBUTE_ATTR_PATTERN = '#^\s+(?P<name>(?:'
                                                 . Amp::BIND_DATA_ATTR_PREFIX
                                                 . ')?[a-zA-Z0-9_\-]+)'
                                                 . '(?P<value>=(?>"[^"]*+"|\'[^\']*+\'|[^\'"\s]+))?#';
    /**
     * Match all start tags that contain a binding attribute in data attribute syntax.
     *
     * @var string
     */
    const AMP_BIND_DATA_START_PATTERN = '#<'
                                        . '(?P<name>[a-zA-Z0-9_\-]+)'               // Tag name.
                                        . '(?P<attrs>\s+'                           // Attributes.
                                        . '(?>'                                 // Match at least one attribute.
                                        . '(?>'                             // prefixed with "data-amp-bind-".
                                        . '(?![a-zA-Z0-9_\-\s]*'
                                        . Amp::BIND_DATA_ATTR_PREFIX
                                        . '[a-zA-Z0-9_\-]+="[^"]*+"|\'[^\']*+\')'
                                        . '[^>"\']+|"[^"]*+"|\'[^\']*+\''
                                        . ')*+'
                                        . '(?>[a-zA-Z0-9_\-\s]*'
                                        . Amp::BIND_DATA_ATTR_PREFIX
                                        . '[a-zA-Z0-9_\-]+'
                                        . ')'
                                        . ')+'
                                        . '(?>[^>"\']+|"[^"]*+"|\'[^\']*+\')*+' // Any attribute tokens, including
                                        // binding ones.
                                        . ')>#is';

    /**
     * Pattern for HTML attribute accounting for binding attr name in square brackets syntax, boolean attribute,
     * single/double-quoted attribute value, and unquoted attribute values.
     *
     * @var string
     */
    const AMP_BIND_SQUARE_BRACKETS_ATTR_PATTERN = '#^\s+(?P<name>\[?[a-zA-Z0-9_\-]+\]?)'
                                                  . '(?P<value>=(?>"[^"]*+"|\'[^\']*+\'|[^\'"\s]+))?#';
    /**
     * Match all start tags that contain a binding attribute in square brackets syntax.
     *
     * @var string
     */
    const AMP_BIND_SQUARE_START_PATTERN = '#<'
                                          . '(?P<name>[a-zA-Z0-9_\-]+)'               // Tag name.
                                          . '(?P<attrs>\s+'                           // Attributes.
                                          . '(?>[^>"\'\[\]]+|"[^"]*+"|\'[^\']*+\')*+' // Non-binding attributes tokens.
                                          . '\[[a-zA-Z0-9_\-]+\]'                     // One binding attribute key.
                                          . '(?>[^>"\']+|"[^"]*+"|\'[^\']*+\')*+'     // Any attribute tokens, including
                                          // binding ones.
                                          . ')>#s';

    /**
     * Options instance to use.
     *
     * @var Options
     */
    private $options;

    /**
     * Store the names of the amp-bind attributes that were converted so that we can restore them later on.
     *
     * @var array<string>
     */
    private $convertedAmpBindAttributes = [];

    /**
     * AmpBindAttributes constructor.
     *
     * @param Options $options Options instance to use.
     */
    public function __construct(Options $options)
    {
        $this->options = $options;
    }

    /**
     * Replace AMP binding attributes with something that libxml can parse (as HTML5 data-* attributes).
     *
     * This is necessary because attributes in square brackets are not understood in PHP and
     * get dropped with an error raised:
     * > Warning: DOMDocument::loadHTML(): error parsing attribute name
     *
     * @link https://www.ampproject.org/docs/reference/components/amp-bind
     *
     * @param string $html HTML containing amp-bind attributes.
     * @return string HTML with AMP binding attributes replaced with HTML5 data-* attributes.
     */
    public function beforeLoad($html)
    {
        /**
         * Replace callback.
         *
         * @param array $tagMatches Tag matches.
         * @return string Replacement.
         */
        $replaceCallback = function ($tagMatches) {
            $oldAttrs = $this->maybeStripSelfClosingSlash($tagMatches['attrs']);
            $newAttrs = '';
            $offset   = 0;
            while (
                preg_match(
                    self::AMP_BIND_SQUARE_BRACKETS_ATTR_PATTERN,
                    substr($oldAttrs, $offset),
                    $attrMatches
                )
            ) {
                $offset += strlen($attrMatches[0]);

                if ('[' === $attrMatches['name'][0]) {
                    $attrName = trim($attrMatches['name'], '[]');
                    $newAttrs .= ' ' . Amp::BIND_DATA_ATTR_PREFIX . $attrName;
                    if (isset($attrMatches['value'])) {
                        $newAttrs .= $attrMatches['value'];
                    }
                    $this->convertedAmpBindAttributes[] = $attrName;
                } else {
                    $newAttrs .= $attrMatches[0];
                }
            }

            // Bail on parse error which occurs when the regex isn't able to consume the entire $newAttrs string.
            if (strlen($oldAttrs) !== $offset) {
                return $tagMatches[0];
            }

            return '<' . $tagMatches['name'] . $newAttrs . '>';
        };

        $result = preg_replace_callback(
            self::AMP_BIND_SQUARE_START_PATTERN,
            $replaceCallback,
            $html
        );

        if (! is_string($result)) {
            return $html;
        }

        return $result;
    }

    /**
     * Convert AMP bind-attributes back to their original syntax.
     *
     * This is not guaranteed to produce the exact same result as the initial markup, as it is more of a best guess.
     * It can end up replacing the wrong attributes if the initial markup had inconsistent styling, mixing both syntaxes
     * for the same attribute. In either case, it will always produce working markup, so this is not that big of a deal.
     *
     * @see convertAmpBindAttributes() Reciprocal function.
     * @link https://www.ampproject.org/docs/reference/components/amp-bind
     *
     * @param string $html HTML with amp-bind attributes converted.
     * @return string HTML with amp-bind attributes restored.
     */
    public function afterSave($html)
    {
        if ($this->options[Option::AMP_BIND_SYNTAX] === Option::AMP_BIND_SYNTAX_DATA_ATTRIBUTE) {
            // All amp-bind attributes should remain in their converted data attribute form.
            return $html;
        }

        if (
            $this->options[Option::AMP_BIND_SYNTAX] === Option::AMP_BIND_SYNTAX_AUTO
            &&
            empty($this->convertedAmpBindAttributes)
        ) {
            // Only previously converted amp-bind attributes should be restored, but none were converted.
            return $html;
        }

        /**
         * Replace callback.
         *
         * @param array $tagMatches Tag matches.
         * @return string Replacement.
         */
        $replaceCallback = function ($tagMatches) {
            $oldAttrs = $this->maybeStripSelfClosingSlash($tagMatches['attrs']);
            $newAttrs = '';
            $offset   = 0;
            while (
                preg_match(
                    self::AMP_BIND_DATA_ATTRIBUTE_ATTR_PATTERN,
                    substr($oldAttrs, $offset),
                    $attrMatches
                )
            ) {
                $offset += strlen($attrMatches[0]);

                $attrName = substr($attrMatches['name'], strlen(Amp::BIND_DATA_ATTR_PREFIX));
                if (
                    $this->options[Option::AMP_BIND_SYNTAX] === Option::AMP_BIND_SYNTAX_SQUARE_BRACKETS
                    ||
                    in_array($attrName, $this->convertedAmpBindAttributes, true)
                ) {
                    $attrValue = isset($attrMatches['value']) ? $attrMatches['value'] : '=""';
                    $newAttrs .= " [{$attrName}]{$attrValue}";
                } else {
                    $newAttrs .= $attrMatches[0];
                }
            }

            // Bail on parse error which occurs when the regex isn't able to consume the entire $newAttrs string.
            if (strlen($oldAttrs) !== $offset) {
                return $tagMatches[0];
            }

            return '<' . $tagMatches['name'] . $newAttrs . '>';
        };

        $result = preg_replace_callback(
            self::AMP_BIND_DATA_START_PATTERN,
            $replaceCallback,
            $html
        );

        if (! is_string($result)) {
            return $html;
        }

        return $result;
    }

    /**
     * Strip the self-closing slash as long as it is not an attribute value, like for the href attribute.
     *
     * @param string $attributes Attributes to strip the self-closing slash of.
     * @return string Adapted attributes.
     */
    private function maybeStripSelfClosingSlash($attributes)
    {
        $result = preg_replace('#(?<!=)/$#', '', $attributes);

        if (! is_string($result)) {
            return rtrim($attributes);
        }

        return rtrim($result);
    }
}
PK.3Y�}���Vbunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter/AmpEmojiAttribute.php<?php

namespace AmpProject\Dom\Document\Filter;

use AmpProject\Html\Attribute;
use AmpProject\Dom\Document;
use AmpProject\Dom\Document\AfterSaveFilter;
use AmpProject\Dom\Document\BeforeLoadFilter;

/**
 * Filter for the emoji AMP symbol (⚡).
 *
 * @package ampproject/amp-toolbox
 */
final class AmpEmojiAttribute implements BeforeLoadFilter, AfterSaveFilter
{
    /**
     * Pattern to match an AMP emoji together with its variant (amp4ads, amp4email, ...).
     *
     * @var string
     */
    const AMP_EMOJI_ATTRIBUTE_PATTERN = '/<html\s([^>]*?(?:'
                                        . Attribute::AMP_EMOJI_ALT
                                        . '|'
                                        . Attribute::AMP_EMOJI
                                        . ')(4(?:ads|email))?[^>]*?)>/i';

    /**
     * Store the emoji that was used to represent the AMP attribute.
     *
     * There are a few variations, so we want to keep track of this.
     *
     * @see https://github.com/ampproject/amphtml/issues/25990
     *
     * @var string
     */
    private $usedAmpEmoji;

    /**
     * Covert the emoji AMP symbol (⚡) into pure text.
     *
     * The emoji symbol gets stripped by DOMDocument::loadHTML().
     *
     * @param string $html Source HTML string to convert the emoji AMP symbol in.
     * @return string Adapted source HTML string.
     */
    public function beforeLoad($html)
    {
        $this->usedAmpEmoji = '';

        $result = preg_replace_callback(
            self::AMP_EMOJI_ATTRIBUTE_PATTERN,
            function ($matches) {
                // Split into individual attributes.
                $attributes = array_map(
                    'trim',
                    array_filter(
                        preg_split(
                            '#(\s+[^"\'\s=]+(?:=(?:"[^"]+"|\'[^\']+\'|[^"\'\s]+))?)#',
                            $matches[1],
                            -1,
                            PREG_SPLIT_DELIM_CAPTURE
                        )
                    )
                );

                foreach ($attributes as $index => $attribute) {
                    $attributeMatches = [];
                    if (
                        preg_match(
                            '/^(' . Attribute::AMP_EMOJI_ALT . '|' . Attribute::AMP_EMOJI . ')(4(?:ads|email))?$/i',
                            $attribute,
                            $attributeMatches
                        )
                    ) {
                        $this->usedAmpEmoji = $attributeMatches[1];
                        $variant            = ! empty($attributeMatches[2]) ? $attributeMatches[2] : '';
                        $attributes[$index] = Document::EMOJI_AMP_ATTRIBUTE_PLACEHOLDER . "=\"{$variant}\"";
                        break;
                    }
                }

                return '<html ' . implode(' ', $attributes) . '>';
            },
            $html,
            1
        );

        if (! is_string($result)) {
            return $html;
        }

        return $result;
    }

    /**
     * Restore the emoji AMP symbol (⚡) from its pure text placeholder.
     *
     * @param string $html HTML string to restore the AMP emoji symbol in.
     * @return string Adapted HTML string.
     */
    public function afterSave($html)
    {
        if (empty($this->usedAmpEmoji)) {
            return $html;
        }

        $result = preg_replace(
            '/(<html\s[^>]*?)' . preg_quote(Document::EMOJI_AMP_ATTRIBUTE_PLACEHOLDER, '/') . '="([^"]*)"/i',
            '\1' . $this->usedAmpEmoji . '\2',
            $html,
            1
        );

        if (! is_string($result)) {
            return $html;
        }

        return $result;
    }
}
PK.3YZ��h��]bunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter/ConvertHeadProfileToLink.php<?php

namespace AmpProject\Dom\Document\Filter;

use AmpProject\Html\Attribute;
use AmpProject\Dom\Document;
use AmpProject\Dom\Document\AfterLoadFilter;
use AmpProject\Html\Tag;

/**
 * Filter to convert a possible head[profile] attribute to link[rel=profile].
 *
 * @package ampproject/amp-toolbox
 */
final class ConvertHeadProfileToLink implements AfterLoadFilter
{
    /**
     * Converts a possible head[profile] attribute to link[rel=profile].
     *
     * The head[profile] attribute is only valid in HTML4, not HTML5.
     * So if it exists and isn't empty, add it to the <head> as a link[rel=profile] and strip the attribute.
     *
     * @param Document $document Document to be processed.
     */
    public function afterLoad(Document $document)
    {
        if (! $document->head->hasAttribute(Attribute::PROFILE)) {
            return;
        }

        $profile = $document->head->getAttribute(Attribute::PROFILE);
        if ($profile) {
            $link = $document->createElement(Tag::LINK);
            $link->setAttribute(Attribute::REL, Attribute::PROFILE);
            $link->setAttribute(Attribute::HREF, $profile);
            $document->head->appendChild($link);
        }

        $document->head->removeAttribute(Attribute::PROFILE);
    }
}
PK.3Y:й+�	�	Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter/DeduplicateTag.php<?php

namespace AmpProject\Dom\Document\Filter;

use AmpProject\Dom\Document;
use AmpProject\Dom\Document\AfterLoadFilter;
use AmpProject\Dom\Element;
use AmpProject\Html\Tag;
use DOMAttr;

/**
 * Filter for deduplicating head and body tags.
 *
 * @package ampproject/amp-toolbox
 */
final class DeduplicateTag implements AfterLoadFilter
{
    /**
     * Deduplicate head and body tags.
     *
     * This keeps the first tag as the main tag and moves over all child nodes and attribute nodes from any subsequent
     * same tags over to remove them.
     *
     * @param Document $document Document to be processed.
     */
    public function afterLoad(Document $document)
    {
        $tagNames = [Tag::HEAD, Tag::BODY];

        foreach ($tagNames as $tagName) {
            $tags = $document->getElementsByTagName($tagName);

            /**
             * Main tag to keep.
             *
             * @var Element|null $mainTag
             */
            $mainTag = $tags->item(0);

            if (null === $mainTag) {
                continue;
            }

            while ($tags->length > 1) {
                /**
                 * Tag to remove.
                 *
                 * @var Element $tagToRemove
                 */
                $tagToRemove = $tags->item(1);

                foreach ($tagToRemove->childNodes as $childNode) {
                    $mainTag->appendChild($childNode->parentNode->removeChild($childNode));
                }

                while ($tagToRemove->hasAttributes()) {
                    /**
                     * Attribute node to move over to the main tag.
                     *
                     * @var DOMAttr $attribute
                     */
                    $attribute = $tagToRemove->attributes->item(0);
                    $tagToRemove->removeAttributeNode($attribute);

                    // @TODO This doesn't deal properly with attributes present on both tags. Maybe overkill to add?
                    // We could move over the copy_attributes from AMP_DOM_Utils to do this.
                    $mainTag->setAttributeNode($attribute);
                }

                $tagToRemove->parentNode->removeChild($tagToRemove);
            }

            // Avoid doing the above query again if possible.
            if (in_array($tagName, [Tag::HEAD, Tag::BODY], true)) {
                $document->$tagName = $mainTag;
            }
        }
    }
}
PK.3Y]n�g11^bunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter/DetectInvalidByteSequence.php<?php

namespace AmpProject\Dom\Document\Filter;

use AmpProject\Dom\Document\BeforeLoadFilter;
use AmpProject\Dom\Document\Option;
use AmpProject\Dom\Options;
use AmpProject\Exception\InvalidByteSequence;

/**
 * Filter for checking if the markup contains invalid byte sequences.
 *
 * If invalid byte sequences are passed to `DOMDocument`, it fails silently and produces Mojibake.
 *
 * @package ampproject/amp-toolbox
 */
final class DetectInvalidByteSequence implements BeforeLoadFilter
{
    /**
     * Options instance to use.
     *
     * @var Options
     */
    private $options;

    /**
     * DetectInvalidByteSequence constructor.
     *
     * @param Options $options Options instance to use.
     */
    public function __construct(Options $options)
    {
        $this->options = $options;
    }

    /**
     * Check if the markup contains invalid byte sequences.
     *
     * @param string $html String of HTML markup to be preprocessed.
     * @return string Preprocessed string of HTML markup.
     */
    public function beforeLoad($html)
    {
        if (
            $this->options[Option::CHECK_ENCODING]
            && function_exists('mb_check_encoding')
            && ! mb_check_encoding($html)
        ) {
            throw InvalidByteSequence::forHtml();
        }

        return $html;
    }
}
PK.3Ynӈ��
�
Pbunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter/DoctypeNode.php<?php

namespace AmpProject\Dom\Document\Filter;

use AmpProject\Dom\Document\AfterSaveFilter;
use AmpProject\Dom\Document\BeforeLoadFilter;

/**
 * Filter to secure and restore the doctype node.
 *
 * @package ampproject/amp-toolbox
 */
final class DoctypeNode implements BeforeLoadFilter, AfterSaveFilter
{
    /**
     * Regex pattern used for securing the doctype node if it is not the first one.
     *
     * @var string
     */
    const HTML_SECURE_DOCTYPE_IF_NOT_FIRST_PATTERN = '/(^[^<]*(?>\s*<!--[^>]*>\s*)+<)(!)(doctype)(\s+[^>]+?)(>)/i';

    /**
     * Regex replacement template for securing the doctype node.
     *
     * @var string
     */
    const HTML_SECURE_DOCTYPE_REPLACEMENT_TEMPLATE = '\1!--amp-\3\4-->';

    /**
     * Regex pattern used for restoring the doctype node.
     *
     * @var string
     */
    const HTML_RESTORE_DOCTYPE_PATTERN = '/(^[^<]*(?>\s*<!--[^>]*>\s*)*<)(!--amp-)(doctype)(\s+[^>]+?)(-->)/i';

    /**
     * Regex replacement template for restoring the doctype node.
     *
     * @var string
     */
    const HTML_RESTORE_DOCTYPE_REPLACEMENT_TEMPLATE = '\1!\3\4>';

    /**
     * Whether we had secured a doctype that needs restoring or not.
     *
     * This is an int as it receives the $count from the preg_replace().
     *
     * @var int
     */
    private $securedDoctype = 0;

    /**
     * Secure the original doctype node.
     *
     * We need to keep elements around that were prepended to the doctype, like comment node used for source-tracking.
     * As DOM_Document prepends a new doctype node and removes the old one if the first element is not the doctype, we
     * need to ensure the original one is not stripped (by changing its node type) and restore it later on.
     *
     * @param string $html HTML string to adapt.
     * @return string Adapted HTML string.
     */
    public function beforeLoad($html)
    {
        $result = preg_replace(
            self::HTML_SECURE_DOCTYPE_IF_NOT_FIRST_PATTERN,
            self::HTML_SECURE_DOCTYPE_REPLACEMENT_TEMPLATE,
            $html,
            1,
            $this->securedDoctype
        );

        if (! is_string($result)) {
            return $html;
        }

        return $result;
    }

    /**
     * Restore the original doctype node.
     *
     * @param string $html HTML string to adapt.
     * @return string Adapted HTML string.
     */
    public function afterSave($html)
    {
        if (! $this->securedDoctype) {
            return $html;
        }

        $result = preg_replace(
            self::HTML_RESTORE_DOCTYPE_PATTERN,
            self::HTML_RESTORE_DOCTYPE_REPLACEMENT_TEMPLATE,
            $html,
            1
        );

        if (! is_string($result)) {
            return $html;
        }

        return $result;
    }
}
PK.3Y��	Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter/DocumentEncoding.php<?php

namespace AmpProject\Dom\Document\Filter;

use AmpProject\Html\Attribute;
use AmpProject\Dom\Document\BeforeLoadFilter;
use AmpProject\Encoding;
use AmpProject\Html\Tag;

/**
 * Filter for document encoding.
 *
 * @package ampproject/amp-toolbox
 */
final class DocumentEncoding implements BeforeLoadFilter
{
    /**
     * Regex pattern to find a tag without an attribute.
     *
     * @var string
     */
    const HTML_FIND_TAG_WITHOUT_ATTRIBUTE_PATTERN = '/<%1$s[^>]*?>[^<]*(?><\/%1$s>)?/i';

    /**
     * Regex pattern to find a tag with an attribute.
     *
     * @var string
     */
    const HTML_FIND_TAG_WITH_ATTRIBUTE_PATTERN = '/<%1$s [^>]*?\s*%2$s\s*=[^>]*?>[^<]*(?><\/%1$s>)?/i';

    /**
     * Regex pattern to extract an attribute value out of an attribute string.
     *
     * @var string
     */
    const HTML_EXTRACT_ATTRIBUTE_VALUE_PATTERN = '/%s=(?>([\'"])(?<full>.*)?\1|(?<partial>[^ \'";]+))/';

    /**
     * Delimiter used in regular expressions.
     *
     * @var string
     */
    const HTML_FIND_TAG_DELIMITER = '/';

    /**
     * Original encoding that was used for the document.
     *
     * @var Encoding
     */
    private $originalEncoding;

    /**
     * DocumentEncoding constructor.
     *
     * @param Encoding $originalEncoding Original encoding that was used for the document.
     */
    public function __construct(Encoding $originalEncoding)
    {
        $this->originalEncoding = $originalEncoding;
    }

    /**
     * Detect the encoding of the document.
     *
     * @param string $html Content of which to detect the encoding.
     * @return string Preprocessed string of HTML markup.
     */
    public function beforeLoad($html)
    {
        $encoding = (string) $this->originalEncoding;

        // Check for HTML 4 http-equiv meta tags.
        foreach ($this->findTags($html, Tag::META, Attribute::HTTP_EQUIV) as $potentialHttpEquivTag) {
            $encoding = $this->extractValue($potentialHttpEquivTag, Attribute::CHARSET);
            if (false !== $encoding) {
                $httpEquivTag = $potentialHttpEquivTag;
            }
        }

        // Strip all charset tags.
        if (isset($httpEquivTag)) {
            $html = str_replace($httpEquivTag, '', $html);
        }

        // Check for HTML 5 charset meta tag. This overrides the HTML 4 charset.
        $charsetTag = $this->findTag($html, Tag::META, Attribute::CHARSET);
        if ($charsetTag) {
            $encoding = $this->extractValue($charsetTag, Attribute::CHARSET);

            // Strip the encoding if it is not the required one.
            if (strtolower($encoding) !== Encoding::AMP) {
                $html = str_replace($charsetTag, '', $html);
            }
        }

        $this->originalEncoding = new Encoding($encoding);

        if (! $this->originalEncoding->equals(Encoding::AMP)) {
            $html = $this->adaptEncoding($html);
        }

        return $html;
    }

    /**
     * Adapt the encoding of the content.
     *
     * @param string $source Source content to adapt the encoding of.
     * @return string Adapted content.
     */
    private function adaptEncoding($source)
    {
        // No encoding was provided, so we need to guess.
        if (function_exists('mb_detect_encoding') && $this->originalEncoding->equals(Encoding::UNKNOWN)) {
            $this->originalEncoding = new Encoding($this->detectEncoding($source));
        }

        // Guessing the encoding seems to have failed, so we assume UTF-8 instead.
        // In my testing, this was not possible as long as one ISO-8859-x is in the detection order.
        if ($this->originalEncoding === null) {
            $this->originalEncoding = new Encoding(Encoding::AMP); // @codeCoverageIgnore
        }

        $this->originalEncoding->sanitize();

        // Sanitization failed, so we do a last effort to auto-detect.
        if (function_exists('mb_detect_encoding') && $this->originalEncoding->equals(Encoding::UNKNOWN)) {
            $detectedEncoding = $this->detectEncoding($source);
            if ($detectedEncoding !== false) {
                $this->originalEncoding = new Encoding($detectedEncoding);
            }
        }

        $target = false;
        if (! $this->originalEncoding->equals(Encoding::AMP)) {
            $target = function_exists('mb_convert_encoding')
                ? mb_convert_encoding($source, Encoding::AMP, (string) $this->originalEncoding)
                : false;
        }

        return false !== $target ? $target : $source;
    }

    /**
     * Find a given tag with a given attribute.
     *
     * If multiple tags match, this method will only return the first one.
     *
     * @param string $content   Content in which to find the tag.
     * @param string $element   Element of the tag.
     * @param string $attribute Attribute that the tag contains.
     * @return string[] The requested tags. Returns an empty array if none found.
     */
    private function findTags($content, $element, $attribute = null)
    {
        $matches = [];
        $pattern = empty($attribute)
            ? sprintf(
                self::HTML_FIND_TAG_WITHOUT_ATTRIBUTE_PATTERN,
                preg_quote($element, self::HTML_FIND_TAG_DELIMITER)
            )
            : sprintf(
                self::HTML_FIND_TAG_WITH_ATTRIBUTE_PATTERN,
                preg_quote($element, self::HTML_FIND_TAG_DELIMITER),
                preg_quote($attribute, self::HTML_FIND_TAG_DELIMITER)
            );

        if (preg_match($pattern, $content, $matches)) {
            return $matches;
        }

        return [];
    }

    /**
     * Find a given tag with a given attribute.
     *
     * If multiple tags match, this method will only return the first one.
     *
     * @param string $content   Content in which to find the tag.
     * @param string $element   Element of the tag.
     * @param string $attribute Attribute that the tag contains.
     * @return string|false The requested tag, or false if not found.
     */
    private function findTag($content, $element, $attribute = null)
    {
        $matches = $this->findTags($content, $element, $attribute);

        if (empty($matches)) {
            return false;
        }

        return $matches[0];
    }

    /**
     * Extract an attribute value from an HTML tag.
     *
     * @param string $tag       Tag from which to extract the attribute.
     * @param string $attribute Attribute of which to extract the value.
     * @return string|false Extracted attribute value, false if not found.
     */
    private function extractValue($tag, $attribute)
    {
        $matches = [];
        $pattern = sprintf(
            self::HTML_EXTRACT_ATTRIBUTE_VALUE_PATTERN,
            preg_quote($attribute, self::HTML_FIND_TAG_DELIMITER)
        );

        if (preg_match($pattern, $tag, $matches)) {
            return empty($matches['full']) ? $matches['partial'] : $matches['full'];
        }

        return false;
    }

    /**
     * Detect character encoding.
     *
     * @param string $source Source content to detect the encoding of.
     * @return string The character encoding of the source.
     */
    private function detectEncoding($source)
    {
        $detectionOrder = PHP_VERSION_ID >= 80100 ? Encoding::DETECTION_ORDER_PHP81 : Encoding::DETECTION_ORDER;
        return mb_detect_encoding($source, $detectionOrder, true);
    }
}
PK.3Y��b��Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter/HttpEquivCharset.php<?php

namespace AmpProject\Dom\Document\Filter;

use AmpProject\Html\Attribute;
use AmpProject\Dom\Document;
use AmpProject\Dom\Document\AfterLoadFilter;
use AmpProject\Dom\Document\AfterSaveFilter;
use AmpProject\Dom\Document\BeforeLoadFilter;
use AmpProject\Dom\Document\BeforeSaveFilter;
use AmpProject\Dom\Element;
use AmpProject\Html\Tag;
use DOMComment;

/**
 * Filter for http-equiv charset.
 *
 * @package ampproject/amp-toolbox
 */
final class HttpEquivCharset implements BeforeLoadFilter, AfterLoadFilter, BeforeSaveFilter, AfterSaveFilter
{
    /**
     * Value of the content field of the meta tag for the http-equiv compatibility charset.
     *
     * @var string
     */
    const HTML_HTTP_EQUIV_CONTENT_VALUE = 'text/html; charset=utf-8';

    /**
     * Type of the meta tag for the http-equiv compatibility charset.
     *
     * @var string
     */
    const HTML_HTTP_EQUIV_VALUE = 'content-type';

    /**
     * Charset compatibility tag for making DOMDocument behave.
     *
     * See: http://php.net/manual/en/domdocument.loadhtml.php#78243.
     *
     * @var string
     */
    const HTTP_EQUIV_META_TAG = '<meta http-equiv="content-type" content="text/html; charset=utf-8">';

    /**
     * Regex pattern for adding an http-equiv charset for compatibility by anchoring it to the <head> tag.
     *
     * The opening tag pattern contains a comment to make sure we don't match a <head> tag within a comment.
     *
     * @var string
     */
    const HTML_GET_HEAD_OPENING_TAG_PATTERN     = '/(?><!--.*?-->\s*)*<head(?>\s+[^>]*)?>/is';

    /**
     * Regex replacement template for adding an http-equiv charset for compatibility by anchoring it to the <head> tag.
     *
     * @var string
     */
    const HTML_GET_HEAD_OPENING_TAG_REPLACEMENT = '$0' . self::HTTP_EQUIV_META_TAG;

    /**
     * Regex pattern for adding an http-equiv charset for compatibility by anchoring it to the <html> tag.
     *
     * The opening tag pattern contains a comment to make sure we don't match a <html> tag within a comment.
     *
     * @var string
     */
    const HTML_GET_HTML_OPENING_TAG_PATTERN     = '/(?><!--.*?-->\s*)*<html(?>\s+[^>]*)?>/is';

    /**
     * Regex replacement template for adding an http-equiv charset for compatibility by anchoring it to the <html> tag.
     *
     * @var string
     */
    const HTML_GET_HTML_OPENING_TAG_REPLACEMENT = '$0<head>' . self::HTTP_EQUIV_META_TAG . '</head>';

    /**
     * Regex pattern for matching an existing or added http-equiv charset.
     */
    const HTML_GET_HTTP_EQUIV_TAG_PATTERN       = '#<meta http-equiv=([\'"])content-type\1 '
                                                  . 'content=([\'"])text/html; '
                                                  . 'charset=utf-8\2>#i';

    /**
     * Temporary http-equiv charset node added to a document before saving.
     *
     * @var Element|null
     */
    private $temporaryCharset;

    /**
     * Add a http-equiv charset meta tag to the document's <head> node.
     *
     * This is needed to make the DOMDocument behave as it should in terms of encoding.
     * See: http://php.net/manual/en/domdocument.loadhtml.php#78243.
     *
     * @param string $html HTML string to add the http-equiv charset to.
     * @return string Adapted string of HTML.
     */
    public function beforeLoad($html)
    {
        $count = 0;

        // We try first to detect an existing <head> node.
        $result = preg_replace(
            self::HTML_GET_HEAD_OPENING_TAG_PATTERN,
            self::HTML_GET_HEAD_OPENING_TAG_REPLACEMENT,
            $html,
            1,
            $count
        );

        if (is_string($result)) {
            $html = $result;
        }

        // If no <head> was found, we look for the <html> tag instead.
        if ($count < 1) {
            $result = preg_replace(
                self::HTML_GET_HTML_OPENING_TAG_PATTERN,
                self::HTML_GET_HTML_OPENING_TAG_REPLACEMENT,
                $html,
                1,
                $count
            );

            if (is_string($result)) {
                $html = $result;
            }
        }

        // Finally, we just prepend the head with the required http-equiv charset.
        if ($count < 1) {
            $html = '<head>' . self::HTTP_EQUIV_META_TAG . '</head>' . $html;
        }

        return $html;
    }

    /**
     * Remove http-equiv charset again.
     *
     * @param Document $document Document to be processed.
     */
    public function afterLoad(Document $document)
    {
        $meta = $document->head->firstChild;

        // We might have leading comments we need to preserve here.
        while ($meta instanceof DOMComment) {
            $meta = $meta->nextSibling;
        }

        if (
            $meta instanceof Element
            && Tag::META === $meta->tagName
            && self::HTML_HTTP_EQUIV_VALUE === $meta->getAttribute(Attribute::HTTP_EQUIV)
            && self::HTML_HTTP_EQUIV_CONTENT_VALUE === $meta->getAttribute(Attribute::CONTENT)
        ) {
            $document->head->removeChild($meta);
        }
    }

    /**
     * Add a temporary http-equiv charset to the document before saving.
     *
     * @param Document $document Document to be preprocessed before saving it into HTML.
     */
    public function beforeSave(Document $document)
    {
        // Force-add http-equiv charset to make DOMDocument behave as it should.
        // See: http://php.net/manual/en/domdocument.loadhtml.php#78243.
        $this->temporaryCharset = $document->createElement(Tag::META);
        $this->temporaryCharset->setAttribute(Attribute::HTTP_EQUIV, self::HTML_HTTP_EQUIV_VALUE);
        $this->temporaryCharset->setAttribute(Attribute::CONTENT, self::HTML_HTTP_EQUIV_CONTENT_VALUE);
        $document->head->insertBefore($this->temporaryCharset, $document->head->firstChild);
    }

    /**
     * Remove the temporary http-equiv charset again.
     *
     * It is also removed from the DOM again in case saveHTML() is used multiple times.
     *
     * @param string $html String of HTML markup to be preprocessed.
     * @return string Preprocessed string of HTML markup.
     */
    public function afterSave($html)
    {
        if ($this->temporaryCharset instanceof Element) {
            $this->temporaryCharset->parentNode->removeChild($this->temporaryCharset);
        }

        $result = preg_replace(self::HTML_GET_HTTP_EQUIV_TAG_PATTERN, '', $html, 1);

        if (! is_string($result)) {
            return $html;
        }

        return $result;
    }
}
PK.3Y��_��Xbunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter/LibxmlCompatibility.php<?php

namespace AmpProject\Dom\Document\Filter;

use AmpProject\Dom\Document;
use AmpProject\Dom\Document\AfterLoadFilter;
use AmpProject\Dom\Document\BeforeLoadFilter;
use AmpProject\Dom\Document\Option;
use AmpProject\Dom\Options;

/**
 * Filter for adapting the Libxml error behavior and options.
 *
 * @package ampproject/amp-toolbox
 */
final class LibxmlCompatibility implements BeforeLoadFilter, AfterLoadFilter
{
    /**
     * Options instance to use.
     *
     * @var Options
     */
    private $options;

    /**
     * Store the previous state fo the libxml "use internal errors" setting.
     *
     * @var bool
     */
    private $libxmlPreviousState;

    /**
     * LibxmlCompatibility constructor.
     *
     * @param Options $options Options instance to use.
     */
    public function __construct(Options $options)
    {
        $this->options = $options;
    }

    /**
     * Preprocess the HTML to be loaded into the Dom\Document.
     *
     * @param string $html String of HTML markup to be preprocessed.
     * @return string Preprocessed string of HTML markup.
     */
    public function beforeLoad($html)
    {
        $this->libxmlPreviousState = libxml_use_internal_errors(true);

        $this->options[Option::LIBXML_FLAGS] |= LIBXML_COMPACT;

        /*
         * LIBXML_HTML_NODEFDTD is only available for libxml 2.7.8+.
         * This should be the case for PHP 5.4+, but some systems seem to compile against a custom libxml version that
         * is lower than expected.
         */
        if (defined('LIBXML_HTML_NODEFDTD')) {
            $this->options[Option::LIBXML_FLAGS] |= constant('LIBXML_HTML_NODEFDTD');
        }

        /**
         * This flag prevents removing the closing tags used in inline JavaScript variables.
         */
        if (defined('LIBXML_SCHEMA_CREATE')) {
            $this->options[Option::LIBXML_FLAGS] |= constant('LIBXML_SCHEMA_CREATE');
        }

        return $html;
    }

    /**
     * Process the Document after the html loaded into the Dom\Document.
     *
     * @param Document $document Document to be processed.
     */
    public function afterLoad(Document $document)
    {
        libxml_clear_errors();
        libxml_use_internal_errors($this->libxmlPreviousState);
    }
}
PK.3Y��]]��\bunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter/MustacheScriptTemplates.php<?php

namespace AmpProject\Dom\Document\Filter;

use AmpProject\Dom\Document;
use AmpProject\Dom\Document\AfterLoadFilter;
use AmpProject\Dom\Document\AfterSaveFilter;
use AmpProject\Dom\Document\BeforeLoadFilter;
use AmpProject\Dom\Document\BeforeSaveFilter;
use AmpProject\Html\Tag;

/**
 * Filter to handle the script[template="amp-mustache"].
 *
 * @package ampproject/amp-toolbox
 */
final class MustacheScriptTemplates implements BeforeLoadFilter, AfterLoadFilter, BeforeSaveFilter, AfterSaveFilter
{
    /**
     * Xpath query to fetch the elements containing Mustache templates (both <template type=amp-mustache> and
     * <script type=text/plain template=amp-mustache>).
     *
     * @var string
     */
    const XPATH_MUSTACHE_TEMPLATE_ELEMENTS_QUERY = './/self::template[ @type = "amp-mustache" ]'
                                                   . '|//self::script[ @type = "text/plain" '
                                                   . 'and @template = "amp-mustache" ]';
    /**
     * Xpath query to fetch the attributes that are being URL-encoded by saveHTML().
     *
     * @var string
     */
    const XPATH_URL_ENCODED_ATTRIBUTES_QUERY = './/*/@src|.//*/@href|.//*/@action';

    /**
     * Store whether mustache template tags were replaced and need to be restored.
     *
     * @see replaceMustacheTemplateTokens()
     *
     * @var bool
     */
    private $mustacheTagsReplaced = false;

    /**
     * Secures instances of script[template="amp-mustache"] by renaming element to tmp-script, as a workaround to a
     * libxml parsing issue.
     *
     * This script can have closing tags of its children table and td stripped.
     * So this changes its name from script to tmp-script to avoid this.
     *
     * @link https://github.com/ampproject/amp-wp/issues/4254
     *
     * @param string $html To replace the tag name that contains the mustache templates.
     * @return string The HTML, with the tag name of the mustache templates replaced.
     */
    public function beforeLoad($html)
    {
        $result = preg_replace(
            '#<script(\s[^>]*?template=(["\']?)amp-mustache\2[^>]*)>(.*?)</script\s*?>#is',
            '<tmp-script$1>$3</tmp-script>',
            $html
        );

        if (! is_string($result)) {
            return $html;
        }

        return $result;
    }

    /**
     * Restores the tag names of script[template="amp-mustache"] elements that were replaced earlier.
     *
     * @param Document $document Document to be processed.
     */
    public function afterLoad(Document $document)
    {
        $tmp_script_elements = iterator_to_array($document->getElementsByTagName('tmp-script'));
        foreach ($tmp_script_elements as $tmp_script_element) {
            $script = $document->createElement(Tag::SCRIPT);
            foreach ($tmp_script_element->attributes as $attr) {
                $script->setAttribute($attr->nodeName, $attr->nodeValue);
            }
            while ($tmp_script_element->firstChild) {
                $script->appendChild($tmp_script_element->firstChild);
            }
            $tmp_script_element->parentNode->replaceChild($script, $tmp_script_element);
        }
    }

    /**
     * Replace Mustache template tokens to safeguard them from turning into HTML entities.
     *
     * Prevents amp-mustache syntax from getting URL-encoded in attributes when saveHTML is done.
     * While this is applying to the entire document, it only really matters inside of <template>
     * elements, since URL-encoding of curly braces in href attributes would not normally matter.
     * But when this is done inside of a <template> then it breaks Mustache. Since Mustache
     * is logic-less and curly braces are not unsafe for HTML, we can do a global replacement.
     * The replacement is done on the entire HTML document instead of just inside of the <template>
     * elements since it is faster and wouldn't change the outcome.
     *
     * @param Document $document Document to be processed.
     */
    public function beforeSave(Document $document)
    {
        $templates = $document->xpath->query(self::XPATH_MUSTACHE_TEMPLATE_ELEMENTS_QUERY, $document->body);
        if (0 === $templates->length) {
            return;
        }

        $mustacheTagPlaceholders = $this->getMustacheTagPlaceholders();

        foreach ($templates as $template) {
            foreach ($document->xpath->query(self::XPATH_URL_ENCODED_ATTRIBUTES_QUERY, $template) as $attribute) {
                $value = preg_replace_callback(
                    $this->getMustacheTagPattern(),
                    static function ($matches) use ($mustacheTagPlaceholders) {
                        return $mustacheTagPlaceholders[trim($matches[0])];
                    },
                    $attribute->nodeValue,
                    -1,
                    $count
                );

                if ($count) {
                    // Note we cannot do `$attribute->nodeValue = $value` because the PHP DOM will try to parse any
                    // entities. In the case of a URL value like '/foo/?bar=1&baz=2' the result is a warning for an
                    // unterminated entity reference "baz". When the attribute value is updated via setAttribute() this
                    // same problem does not occur, so that is why the following is used.
                    $attribute->parentNode->setAttribute($attribute->nodeName, $value);

                    $this->mustacheTagsReplaced = true;
                }
            }
        }
    }

    /**
     * Restore Mustache template tokens that were previously replaced.
     *
     * @param string $html HTML string to adapt.
     * @return string Adapted HTML string.
     */
    public function afterSave($html)
    {
        if (! $this->mustacheTagsReplaced) {
            return $html;
        }

        $mustacheTagPlaceholders = $this->getMustacheTagPlaceholders();

        return str_replace(
            $mustacheTagPlaceholders,
            array_keys($mustacheTagPlaceholders),
            $html
        );
    }

    /**
     * Get amp-mustache tag/placeholder mappings.
     *
     * @return string[] Mapping of mustache tag token to its placeholder.
     * @see \wpdb::placeholder_escape()
     */
    private function getMustacheTagPlaceholders()
    {
        static $placeholders = null;

        if (null === $placeholders) {
            $placeholders = [];

            // Note: The order of these tokens is important, as it determines the order of the replacements.
            $tokens = [
                '{{{',
                '}}}',
                '{{#',
                '{{^',
                '{{/',
                '{{',
                '}}',
            ];

            foreach ($tokens as $token) {
                $placeholders[$token] = '_amp_mustache_' . md5(uniqid($token));
            }
        }

        return $placeholders;
    }

    /**
     * Get a regular expression that matches all amp-mustache tags while consuming whitespace.
     *
     * Removing whitespace is needed to avoid DOMDocument turning whitespace into entities, like %20 for spaces.
     *
     * @return string Regex pattern to match amp-mustache tags with whitespace.
     */
    private function getMustacheTagPattern()
    {
        static $tagPattern = null;

        if (null === $tagPattern) {
            $delimiter  = ':';
            $tags       = [];

            foreach (array_keys($this->getMustacheTagPlaceholders()) as $token) {
                if ('{' === $token[0]) {
                    $tags[] = preg_quote($token, $delimiter) . '\s*';
                } else {
                    $tags[] = '\s*' . preg_quote($token, $delimiter);
                }
            }

            $tagPattern = $delimiter . implode('|', $tags) . $delimiter;
        }

        return $tagPattern;
    }
}
PK.3Y;�3��\bunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter/NormalizeHtmlAttributes.php<?php

namespace AmpProject\Dom\Document\Filter;

use AmpProject\Dom\Document;
use AmpProject\Dom\Document\AfterLoadFilter;
use DOMAttr;

/**
 * Normalizes HTML attributes to be HTML5 compatible.
 *
 * @package ampproject/amp-toolbox
 */
final class NormalizeHtmlAttributes implements AfterLoadFilter
{
    /**
     * Normalizes HTML attributes to be HTML5 compatible.
     *
     * Conditionally removes html[xmlns], and converts html[xml:lang] to html[lang].
     *
     * @param Document $document Document to be processed.
     */
    public function afterLoad(Document $document)
    {
        if (! $document->html->hasAttributes()) {
            return;
        }

        $xmlns = $document->html->attributes->getNamedItem('xmlns');
        if ($xmlns instanceof DOMAttr && 'http://www.w3.org/1999/xhtml' === $xmlns->nodeValue) {
            $document->html->removeAttributeNode($xmlns);
        }

        $xml_lang = $document->html->attributes->getNamedItem('xml:lang');
        if ($xml_lang instanceof DOMAttr) {
            $lang_node = $document->html->attributes->getNamedItem('lang');
            if ((! $lang_node || ! $lang_node->nodeValue) && $xml_lang->nodeValue) {
                // Move the html[xml:lang] value to html[lang].
                $document->html->setAttribute('lang', $xml_lang->nodeValue);
            }
            $document->html->removeAttributeNode($xml_lang);
        }
    }
}
PK.3Y"$�::Zbunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter/NormalizeHtmlEntities.php<?php

namespace AmpProject\Dom\Document\Filter;

use AmpProject\Dom\Document\BeforeLoadFilter;
use AmpProject\Dom\Document\Option;
use AmpProject\Dom\Options;
use AmpProject\Exception\InvalidOptionValue;

/**
 * Handles the html entities present in the html and prevents them from double encoding.
 *
 * @package ampproject/amp-toolbox
 */
final class NormalizeHtmlEntities implements BeforeLoadFilter
{
    const VALID_NORMALIZE_OPTION_VALUES = [
        Option::NORMALIZE_HTML_ENTITIES_AUTO,
        Option::NORMALIZE_HTML_ENTITIES_ALWAYS,
        Option::NORMALIZE_HTML_ENTITIES_NEVER,
    ];

    /**
     * Options instance to use.
     *
     * @var Options
     */
    private $options;

    /**
     * Whether to use the NormalizeHtmlEntities filter or not.
     *
     * Accepted values are 'auto', 'always' and 'never'.
     *
     * @var string
     */
    private $normalizeHtmlEntities;

    /**
     * NormalizeHtmlEntities constructor.
     *
     * @param Options $options Options instance to use.
     *
     * @throws InvalidOptionValue If invalid value is set to normalize_html_entities option.
     */
    public function __construct(Options $options)
    {
        $this->options = $options;

        $this->normalizeHtmlEntities = $options[Option::NORMALIZE_HTML_ENTITIES];
        if (! in_array($this->normalizeHtmlEntities, self::VALID_NORMALIZE_OPTION_VALUES, true)) {
            throw InvalidOptionValue::forValue(
                Option::NORMALIZE_HTML_ENTITIES,
                self::VALID_NORMALIZE_OPTION_VALUES,
                $this->normalizeHtmlEntities
            );
        }
    }

    /**
     * Preprocess the HTML to be loaded into the Dom\Document.
     *
     * @param string $html String of HTML markup to be preprocessed.
     * @return string Preprocessed string of HTML markup.
     */
    public function beforeLoad($html)
    {
        if (
            ($this->normalizeHtmlEntities === Option::NORMALIZE_HTML_ENTITIES_NEVER)
            || (
                ($this->normalizeHtmlEntities === Option::NORMALIZE_HTML_ENTITIES_AUTO)
                && ! $this->hasHtmlEntities($html)
            )
        ) {
            return $html;
        }

        return html_entity_decode(
            $html,
            $this->options[Option::NORMALIZE_HTML_ENTITIES_FLAGS],
            $this->options[Option::ENCODING]
        );
    }

    /**
     * Detect the presence of html entities in the html.
     *
     * @param string $html The html in which this method will to detect the entities.
     * @return bool Whether the html contains entities or not.
     */
    protected function hasHtmlEntities($html)
    {
        // TODO: Discuss other popular entities to look for, especially for languages
        // with different punctuation symbols.
        return preg_match('/&comma;|&period;|&excl;|&quest;/', $html);
    }
}
PK.3YN}�$$Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter/NoscriptElements.php<?php

namespace AmpProject\Dom\Document\Filter;

use AmpProject\Dom\Document;
use AmpProject\Dom\Document\AfterLoadFilter;
use AmpProject\Dom\Document\BeforeLoadFilter;
use AmpProject\Dom\UniqueIdManager;
use AmpProject\Html\Tag;

/**
 * Handle the noscript elements with placeholders.
 *
 * @package ampproject/amp-toolbox
 */
final class NoscriptElements implements BeforeLoadFilter, AfterLoadFilter
{
    /**
     * UniqueIdManager instance to use.
     *
     * @var UniqueIdManager
     */
    private $uniqueIdManager;

    /**
     * NoscriptElements constructor.
     *
     * @param UniqueIdManager $uniqueIdManager UniqueIdManager instance to use.
     */
    public function __construct(UniqueIdManager $uniqueIdManager)
    {
        $this->uniqueIdManager = $uniqueIdManager;
    }

    /**
     * Store the <noscript> markup that was extracted to preserve it during parsing.
     *
     * The array keys are the element IDs for placeholder <meta> tags.
     *
     * @var string[]
     */
    private $noscriptPlaceholderComments = [];

    /**
     * Maybe replace noscript elements with placeholders.
     *
     * This is done because libxml<2.8 might parse them incorrectly.
     * When appearing in the head element, a noscript can cause the head to close prematurely
     * and the noscript gets moved to the body and anything after it which was in the head.
     * See <https://stackoverflow.com/questions/39013102/why-does-noscript-move-into-body-tag-instead-of-head-tag>.
     * This is limited to only running in the head element because this is where the problem lies,
     * and it is important for the AMP_Script_Sanitizer to be able to access the noscript elements
     * in the body otherwise.
     *
     * @param string $html HTML string to adapt.
     * @return string Adapted HTML string.
     */
    public function beforeLoad($html)
    {
        if (version_compare(LIBXML_DOTTED_VERSION, '2.8', '<')) {
            $result = preg_replace_callback(
                '#^.+?(?=<body)#is',
                function ($headMatches) {
                    return preg_replace_callback(
                        '#<noscript[^>]*>.*?</noscript>#si',
                        function ($noscriptMatches) {
                            $id = $this->uniqueIdManager->getUniqueId('noscript');
                            $this->noscriptPlaceholderComments[$id] = $noscriptMatches[0];
                            return sprintf('<meta class="noscript-placeholder" id="%s">', $id);
                        },
                        $headMatches[0]
                    );
                },
                $html
            );

            if (is_string($result)) {
                $html = $result;
            }
        }

        return $html;
    }

    /**
     * Maybe restore noscript elements with placeholders.
     *
     * This is done because libxml<2.8 might parse them incorrectly.
     * When appearing in the head element, a noscript can cause the head to close prematurely
     * and the noscript gets moved to the body and anything after it which was in the head.
     * See <https://stackoverflow.com/questions/39013102/why-does-noscript-move-into-body-tag-instead-of-head-tag>.
     * This is limited to only running in the head element because this is where the problem lies,
     * and it is important for the AMP_Script_Sanitizer to be able to access the noscript elements
     * in the body otherwise.
     *
     * @param Document $document Document to be processed.
     */
    public function afterLoad(Document $document)
    {
        foreach ($this->noscriptPlaceholderComments as $id => $noscriptHtmlFragment) {
            $placeholderElement = $document->getElementById($id);
            if (!$placeholderElement || !$placeholderElement->parentNode) {
                continue;
            }
            $noscriptFragmentDocument = $document::fromHtmlFragment($noscriptHtmlFragment);
            if (!$noscriptFragmentDocument) {
                continue;
            }
            $exportBody = $noscriptFragmentDocument->getElementsByTagName(Tag::BODY)->item(0);
            if (!$exportBody) {
                continue;
            }

            $importFragment = $document->createDocumentFragment();
            while ($exportBody->firstChild) {
                $importNode = $exportBody->removeChild($exportBody->firstChild);
                $importNode = $document->importNode($importNode, true);
                $importFragment->appendChild($importNode);
            }

            $placeholderElement->parentNode->replaceChild($importFragment, $placeholderElement);
        }
    }
}
PK.3Y�O]��Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter/ProtectEsiTags.php<?php

namespace AmpProject\Dom\Document\Filter;

use AmpProject\Dom\Document\AfterSaveFilter;
use AmpProject\Dom\Document\BeforeLoadFilter;

/**
 * Protect the esi tags from being broken.
 *
 * @package ampproject/amp-toolbox
 */
final class ProtectEsiTags implements BeforeLoadFilter, AfterSaveFilter
{
    /**
     * List of self-closing ESI tags.
     *
     * @link https://www.w3.org/TR/esi-lang/
     *
     * @var string[]
     */
    const SELF_CLOSING_TAGS = [
        'esi:include',
        'esi:comment',
    ];

    /**
     * Preprocess the HTML to be loaded into the Dom\Document.
     *
     * @param string $html String of HTML markup to be preprocessed.
     * @return string Preprocessed string of HTML markup.
     */
    public function beforeLoad($html)
    {
        $patterns = [
            '#<(' . implode('|', self::SELF_CLOSING_TAGS) . ')([^>]*?)(?>\s*(?<!\\\\)/)?>(?!</\1>)#',
            '/(<esi:include.+?)(src)=/',
            '/(<\/?)esi:/',
        ];

        $replacements = [
            '<$1$2></$1>',
            '$1esi-src=',
            '$1esi-',
        ];

        $result = preg_replace($patterns, $replacements, $html);

        if (! is_string($result)) {
            return $html;
        }

        return $result;
    }

    /**
     * Process the Dom\Document after being saved from Dom\Document.
     *
     * @param string $html String of HTML markup to be preprocessed.
     * @return string Preprocessed string of HTML markup.
     */
    public function afterSave($html)
    {
        $patterns = [
            '/(<\/?)esi-/',
            '/(<esi:include.+?)(esi-src)=/',
            '#></(' . implode('|', self::SELF_CLOSING_TAGS) . ')>#i',
        ];

        $replacements = [
            '$1esi:',
            '$1src=',
            '/>',
        ];

        $result = preg_replace($patterns, $replacements, $html);

        if (! is_string($result)) {
            return $html;
        }

        return $result;
    }
}
PK.3Y�����[bunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter/SelfClosingSVGElements.php<?php

namespace AmpProject\Dom\Document\Filter;

use AmpProject\Dom\Document\AfterSaveFilter;
use AmpProject\Dom\Document\BeforeLoadFilter;
use AmpProject\Html\Tag;

/**
 * Filter to secure and restore self-closing SVG related elements.
 *
 * @package ampproject/amp-toolbox
 */
final class SelfClosingSVGElements implements BeforeLoadFilter, AfterSaveFilter
{
    /**
     * SVG elements that are self-closing.
     *
     * @var string[]
     */
    const SELF_CLOSING_TAGS = [
        Tag::CIRCLE,
        Tag::G,
        Tag::PATH,
    ];

    /**
     * Force all self-closing tags to have closing tags.
     *
     * @param string $html HTML string to adapt.
     * @return string Adapted HTML string.
     */
    public function beforeLoad($html)
    {
        static $regexPattern = null;

        if (null === $regexPattern) {
            $regexPattern = '#<(' . implode('|', self::SELF_CLOSING_TAGS) . ')((?>\s*[^/>]*))/?>(?!.*</\1>)#is';
        }

        $result = preg_replace($regexPattern, '<$1$2></$1>', $html);

        if (! is_string($result)) {
            return $html;
        }

        return $result;
    }

    /**
     * Restore all self-closing tags again.
     *
     * @param string $html HTML string to adapt.
     * @return string Adapted HTML string.
     */
    public function afterSave($html)
    {
        static $regexPattern = null;

        if (null === $regexPattern) {
            $regexPattern = '#<(' . implode('|', self::SELF_CLOSING_TAGS) . ')((?>\s*[^>]*))>(?><\/\1>)#i';
        }

        $result = preg_replace($regexPattern, '<$1$2 />', $html);

        if (! is_string($result)) {
            return $html;
        }

        return $result;
    }
}
PK.3Y�IA��Tbunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter/SelfClosingTags.php<?php

namespace AmpProject\Dom\Document\Filter;

use AmpProject\Dom\Document\AfterSaveFilter;
use AmpProject\Dom\Document\BeforeLoadFilter;
use AmpProject\Html\Tag;

/**
 * Filter to secure and restore self-closing tags.
 *
 * @package ampproject/amp-toolbox
 */
final class SelfClosingTags implements BeforeLoadFilter, AfterSaveFilter
{
    /**
     * Whether the self-closing tags were transformed and need to be restored.
     *
     * This avoids duplicating this effort (maybe corrupting the DOM) on multiple calls to saveHTML().
     *
     * @var bool
     */
    private $selfClosingTagsTransformed = false;

    /**
     * Force all self-closing tags to have closing tags.
     *
     * This is needed because DOMDocument isn't fully aware of these.
     *
     * @param string $html HTML string to adapt.
     * @return string Adapted HTML string.
     */
    public function beforeLoad($html)
    {
        static $regexPattern = null;

        if (null === $regexPattern) {
            $regexPattern = '#<(' . implode('|', Tag::SELF_CLOSING_TAGS) . ')([^>]*?)(?>\s*(?<!\\\\)/)?>(?!</\1>)#';
        }

        $this->selfClosingTagsTransformed = true;

        $result = preg_replace($regexPattern, '<$1$2></$1>', $html);

        if (! is_string($result)) {
            return $html;
        }

        return $result;
    }

    /**
     * Restore all self-closing tags again.
     *
     * @param string $html HTML string to adapt.
     * @return string Adapted HTML string.
     */
    public function afterSave($html)
    {
        static $regexPattern = null;

        if (! $this->selfClosingTagsTransformed) {
            return $html;
        }

        if (null === $regexPattern) {
            $regexPattern = '#</(' . implode('|', Tag::SELF_CLOSING_TAGS) . ')>#i';
        }

        $this->selfClosingTagsTransformed = false;

        $result = preg_replace($regexPattern, '', $html);

        if (! is_string($result)) {
            return $html;
        }

        return $result;
    }
}
PK.3Y�3��T	T	_bunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter/SvgSourceAttributeEncoding.php<?php

namespace AmpProject\Dom\Document\Filter;

use AmpProject\Dom\Document\AfterSaveFilter;

/**
 * Filter for fixing the mangled encoding of src attributes with SVG data.
 *
 * @package ampproject/amp-toolbox
 */
final class SvgSourceAttributeEncoding implements AfterSaveFilter
{
    /**
     * Regex pattern to match an SVG sizer element.
     *
     * @var string
     */
    const I_AMPHTML_SIZER_REGEX_PATTERN = '/(?<before_src><i-amphtml-sizer\s+[^>]*>\s*<img\s+[^>]*?\s+src=([\'"]))'
                                          . '(?<src>.*?)'
                                          . '(?<after_src>\2><\/i-amphtml-sizer>)/i';

    /**
     * Regex pattern for extracting fields to adapt out of a src attribute.
     *
     * @var string
     */
    const SRC_SVG_REGEX_PATTERN = '/^\s*(?<type>[^<]+)(?<value><svg[^>]+>)\s*$/i';

    /**
     * Process SVG sizers to ensure they match the required format to validate against AMP.
     *
     * @param string $html HTML output string to tweak.
     * @return string Tweaked HTML output string.
     */
    public function afterSave($html)
    {
        $result = preg_replace_callback(self::I_AMPHTML_SIZER_REGEX_PATTERN, [$this, 'adaptSizer'], $html);

        if (! is_string($result)) {
            return $html;
        }

        return $result;
    }

    /**
     * Adapt the sizer element so that it validates against the AMP spec.
     *
     * @param array $matches Matches that the regular expression collected.
     * @return string Adapted string to use as replacement.
     */
    private function adaptSizer($matches)
    {
        $src = $matches['src'];
        $src = htmlspecialchars_decode($src, ENT_NOQUOTES);
        $src = preg_replace_callback(self::SRC_SVG_REGEX_PATTERN, [$this, 'adaptSvg'], $src);

        if (! is_string($src)) {
            // The regex replace failed, so revert to the initial src.
            $src = $matches['src'];
        }

        return $matches['before_src'] . $src . $matches['after_src'];
    }

    /**
     * Adapt the SVG syntax within the sizer element so that it validates against the AMP spec.
     *
     * @param array $matches Matches that the regular expression collected.
     * @return string Adapted string to use as replacement.
     */
    private function adaptSvg($matches)
    {
        return $matches['type'] . urldecode($matches['value']);
    }
}
PK.3Y�Q�;��Jbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/AmpCliException.php<?php

namespace AmpProject\Exception;

/**
 * Marker interface to distinguish exceptions for the CLI.
 *
 * @package ampproject/amp-toolbox
 */
interface AmpCliException extends AmpException
{
    /**
     * No error code specified.
     *
     * @var int
     */
    const E_ANY = -1;

    /**
     * Command is not valid.
     *
     * @var int
     */
    const E_INVALID_CMD = 6;

    /**
     * Could not read or parse arguments.
     *
     * @var int
     */
    const E_ARG_READ = 5;

    /**
     * Option requires an argument.
     *
     * @var int
     */
    const E_OPT_ABIGUOUS = 4;

    /**
     * Argument not allowed for option.
     *
     * @var int
     */
    const E_OPT_ARG_DENIED = 3;

    /**
     * Option ambiguous.
     *
     * @var int
     */
    const E_OPT_ARG_REQUIRED = 2;

    /**
     * Option unknown.
     *
     * @var int
     */
    const E_UNKNOWN_OPT = 1;
}
PK.3Y���}��Gbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/AmpException.php<?php

namespace AmpProject\Exception;

/**
 * Marker interface to enable consumers to catch all exceptions for this particular library.
 *
 * @package ampproject/amp-toolbox
 */
interface AmpException
{
}
PK.3Yu�[��Nbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/FailedRemoteRequest.php<?php

namespace AmpProject\Exception;

/**
 * Marker interface to enable consumers to catch all exceptions for failed remote requests.
 *
 * @package ampproject/amp-toolbox
 */
interface FailedRemoteRequest extends AmpException
{
}
PK.3YP0rn��Mbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/FailedToCreateLink.php<?php

namespace AmpProject\Exception;

use RuntimeException;

/**
 * Exception thrown when a link could not be created.
 *
 * @package ampproject/amp-toolbox
 */
final class FailedToCreateLink extends RuntimeException implements AmpException
{
    /**
     * Instantiate a FailedToCreateLink exception for a link that could not be created.
     *
     * @param mixed $link Link that was not as expected.
     * @return self
     */
    public static function forLink($link)
    {
        $type = is_object($link) ? get_class($link) : gettype($link);
        $message = "Failed to create a link via the link manager. "
                 . "Expected to produce an 'AmpProject\\Dom\\Element', got '$type' instead.";

        return new self($message);
    }
}
PK.3Y�ڠ!��Tbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/FailedToGetCachedResponse.php<?php

namespace AmpProject\Exception;

use RuntimeException;

/**
 * Exception thrown when a cached remote response could not be retrieved.
 *
 * @package ampproject/amp-toolbox
 */
final class FailedToGetCachedResponse extends RuntimeException implements FailedRemoteRequest
{
    /**
     * Instantiate a FailedToGetCachedResponse exception for a URL if the cached response data could not be
     * retrieved.
     *
     * @param string $url URL that failed to be fetched.
     * @return self
     */
    public static function withUrl($url)
    {
        $message = "Failed to retrieve the cached response for the URL '{$url}'.";

        return new self($message);
    }
}
PK.3Yf�.�)	)	Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/FailedToGetFromRemoteUrl.php<?php

namespace AmpProject\Exception;

use Exception;
use RuntimeException;

/**
 * Exception thrown when a remote request failed.
 *
 * @package ampproject/amp-toolbox
 */
final class FailedToGetFromRemoteUrl extends RuntimeException implements FailedRemoteRequest
{
    /**
     * Status code of the failed request.
     *
     * This is not always set.
     *
     * @var int|null
     */
    private $statusCode;

    /**
     * Instantiate a FailedToGetFromRemoteUrl exception for a URL if an HTTP status code is available.
     *
     * @param string $url    URL that failed to be fetched.
     * @param int    $status HTTP Status that was returned.
     * @return self
     */
    public static function withHttpStatus($url, $status)
    {
        $message = "Failed to fetch the contents from the URL '{$url}' as it returned HTTP status {$status}.";

        $exception             = new self($message);
        $exception->statusCode = $status;

        return $exception;
    }

    /**
     * Instantiate a FailedToGetFromRemoteUrl exception for a URL if an HTTP status code is not available.
     *
     * @param string $url URL that failed to be fetched.
     * @return self
     */
    public static function withoutHttpStatus($url)
    {
        $message = "Failed to fetch the contents from the URL '{$url}'.";

        return new self($message);
    }

    /**
     * Instantiate a FailedToGetFromRemoteUrl exception for a URL if an exception was thrown.
     *
     * @param string    $url       URL that failed to be fetched.
     * @param Exception $exception Exception that was thrown.
     * @return self
     */
    public static function withException($url, Exception $exception)
    {
        $message = "Failed to fetch the contents from the URL '{$url}': {$exception->getMessage()}.";

        return new self($message, 0, $exception);
    }

    /**
     * Check whether the status code is set for this exception.
     *
     * @return bool
     */
    public function hasStatusCode()
    {
        return isset($this->statusCode);
    }

    /**
     * Get the HTTP status code associated with this exception.
     *
     * Returns -1 if no status code was provided.
     *
     * @return int
     */
    public function getStatusCode()
    {
        return $this->hasStatusCode() ? $this->statusCode : -1;
    }
}
PK.3YE�E��Lbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/FailedToParseHtml.php<?php

namespace AmpProject\Exception;

use AmpProject\Str;
use InvalidArgumentException;

/**
 * Exception thrown when an HTML document could not be parsed.
 *
 * @package ampproject/amp-toolbox
 */
final class FailedToParseHtml extends InvalidArgumentException implements AmpException
{
    /**
     * Instantiate a FailedToParseHtml exception for a HTML that could not be parsed.
     *
     * @param string $html HTML that failed to be parsed.
     * @return self
     */
    public static function forHtml($html)
    {
        if (Str::length($html) > 80) {
            $html = Str::substring($html, 0, 77) . '...';
        }

        $message = "Failed to parse the provided HTML document ({$html}).";

        return new self($message);
    }
}
PK.3Y�e�JJKbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/FailedToParseUrl.php<?php

namespace AmpProject\Exception;

use InvalidArgumentException;

/**
 * Exception thrown when a URL could not be parsed.
 *
 * @package ampproject/amp-toolbox
 */
final class FailedToParseUrl extends InvalidArgumentException implements AmpException
{
    /**
     * Instantiate a FailedToParseUrl exception for a URL that could not be parsed.
     *
     * @param string $url URL that failed to be parsed.
     * @return self
     */
    public static function forUrl($url)
    {
        $message = "Failed to parse the URL '{$url}'.";

        return new self($message);
    }
}
PK.3Y0&�`��]bunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/FailedToRetrieveRequiredDomElement.php<?php

namespace AmpProject\Exception;

use LogicException;

/**
 * Exception thrown when a required DOM element could not be retrieved from the document.
 *
 * @package ampproject/amp-toolbox
 */
final class FailedToRetrieveRequiredDomElement extends LogicException implements AmpException
{
    /**
     * Instantiate a FailedToRetrieveRequiredDomElement exception for the <html> DOM element.
     *
     * @param mixed $retrievedElement What was returned when trying to retrieve the element.
     * @return FailedToRetrieveRequiredDomElement
     */
    public static function forHtmlElement($retrievedElement)
    {
        $type    = is_object($retrievedElement) ? get_class($retrievedElement) : gettype($retrievedElement);
        $message = "Failed to retrieve required <html> DOM element, got '{$type}' instead.";

        return new self($message);
    }

    /**
     * Instantiate a FailedToRetrieveRequiredDomElement exception for the <head> DOM element.
     *
     * @param mixed $retrievedElement What was returned when trying to retrieve the element.
     * @return FailedToRetrieveRequiredDomElement
     */
    public static function forHeadElement($retrievedElement)
    {
        $type    = is_object($retrievedElement) ? get_class($retrievedElement) : gettype($retrievedElement);
        $message = "Failed to retrieve required <head> DOM element, got '{$type}' instead.";

        return new self($message);
    }

    /**
     * Instantiate a FailedToRetrieveRequiredDomElement exception for the <body> DOM element.
     *
     * @param mixed $retrievedElement What was returned when trying to retrieve the element.
     * @return FailedToRetrieveRequiredDomElement
     */
    public static function forBodyElement($retrievedElement)
    {
        $type    = is_object($retrievedElement) ? get_class($retrievedElement) : gettype($retrievedElement);
        $message = "Failed to retrieve required <body> DOM element, got '{$type}' instead.";

        return new self($message);
    }
}
PK.3Y�iK���Obunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/InvalidAttributeName.php<?php

namespace AmpProject\Exception;

use OutOfRangeException;

/**
 * Exception thrown when an invalid attribute name is requested from the validator spec.
 *
 * @package ampproject/amp-toolbox
 */
final class InvalidAttributeName extends OutOfRangeException implements AmpException
{
    /**
     * Instantiate an InvalidAttributeName exception for an attribute that is not found within name index.
     *
     * @param string $attribute Name of the attribute that was requested.
     * @return self
     */
    public static function forAttribute($attribute)
    {
        $message = "Invalid attribute '{$attribute}' was requested from the validator spec.";

        return new self($message);
    }
}
PK.3Y=����Nbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/InvalidByteSequence.php<?php

namespace AmpProject\Exception;

use InvalidArgumentException;

/**
 * Exception thrown when a HTML contains invalid byte sequences.
 *
 * @package ampproject/amp-toolbox
 */
final class InvalidByteSequence extends InvalidArgumentException implements AmpException
{
    /**
     * Instantiate a InvalidByteSequence exception for a HTML with invalid byte sequences.
     *
     * @return self
     */
    public static function forHtml()
    {
        $message = 'Provided HTML contains invalid byte sequences. '
            . 'This is usually fixed by replacing string manipulation functions '
            . 'with their `mb_*` multibyte counterparts.';

        return new self($message);
    }
}
PK.3Y��t\��Pbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/InvalidCssRulesetName.php<?php

namespace AmpProject\Exception;

use OutOfRangeException;

/**
 * Exception thrown when an invalid CSS ruleset name is requested from the validator spec.
 *
 * @package ampproject/amp-toolbox
 */
final class InvalidCssRulesetName extends OutOfRangeException implements AmpException
{
    /**
     * Instantiate an InvalidCssRulesetName exception for a CSS ruleset that is not found within the CSS rulesets index.
     *
     * @param string $cssRulesetName CSS ruleset name that was requested.
     * @return self
     */
    public static function forCssRulesetName($cssRulesetName)
    {
        $message = "Invalid CSS ruleset name '{$cssRulesetName}' was requested from the validator spec.";

        return new self($message);
    }
}
PK.3Y�Ųm��Qbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/InvalidDeclarationName.php<?php

namespace AmpProject\Exception;

use OutOfRangeException;

/**
 * Exception thrown when an invalid declaration name is requested from the validator spec.
 *
 * @package ampproject/amp-toolbox
 */
final class InvalidDeclarationName extends OutOfRangeException implements AmpException
{
    /**
     * Instantiate an InvalidDeclarationName exception for an declaration that is not found within name index.
     *
     * @param string $declaration Name of the declaration that was requested.
     * @return self
     */
    public static function forDeclaration($declaration)
    {
        $message = "Invalid declaration '{$declaration}' was requested from the validator spec.";

        return new self($message);
    }
}
PK.3Y�o�Pbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/InvalidDocRulesetName.php<?php

namespace AmpProject\Exception;

use OutOfRangeException;

/**
 * Exception thrown when an invalid document ruleset name is requested from the validator spec.
 *
 * @package ampproject/amp-toolbox
 */
final class InvalidDocRulesetName extends OutOfRangeException implements AmpException
{
    /**
     * Instantiate an InvalidDocRulesetName exception for a document ruleset that is not found within the document
     * rulesets index.
     *
     * @param string $docRulesetName document ruleset name that was requested.
     * @return self
     */
    public static function forDocRulesetName($docRulesetName)
    {
        $message = "Invalid document ruleset name '{$docRulesetName}' was requested from the validator spec.";

        return new self($message);
    }
}
PK.3Y������Pbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/InvalidDocumentFilter.php<?php

namespace AmpProject\Exception;

use InvalidArgumentException;

/**
 * Exception thrown when an invalid tag ID is requested from the validator spec.
 *
 * @package ampproject/amp-toolbox
 */
final class InvalidDocumentFilter extends InvalidArgumentException implements AmpException
{
    /**
     * Instantiate an InvalidDocumentFilter exception for a class that was not a valid filter.
     *
     * @param mixed $filter Filter that was registered.
     * @return self
     */
    public static function forFilter($filter)
    {
        $type = is_object($filter) ? get_class($filter) : gettype($filter);

        $message = is_string($filter)
            ? "Invalid document filter '{$filter}' was registered with the AmpProject\Dom\Document class."
            : ("Invalid document filter of type '{$type}' was registered with the AmpProject\Dom\Document class, '
                . 'expected AmpProject\Dom\Document\Filter.");

        return new self($message);
    }
}
PK.3Y��	���Kbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/InvalidErrorCode.php<?php

namespace AmpProject\Exception;

use OutOfRangeException;

/**
 * Exception thrown when an invalid error code is requested from the validator spec.
 *
 * @package ampproject/amp-toolbox
 */
final class InvalidErrorCode extends OutOfRangeException implements AmpException
{
    /**
     * Instantiate an InvalidErrorCode exception for an unknown error code.
     *
     * @param string $errorCode Error code that was requested.
     * @return self
     */
    public static function forErrorCode($errorCode)
    {
        $message = "Invalid error code '{$errorCode}' was requested from the validator spec.";

        return new self($message);
    }
}
PK.3YoUrf��Kbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/InvalidExtension.php<?php

namespace AmpProject\Exception;

use OutOfRangeException;

/**
 * Exception thrown when an invalid extension is requested from the validator spec.
 *
 * @package ampproject/amp-toolbox
 */
final class InvalidExtension extends OutOfRangeException implements AmpException
{
    /**
     * Instantiate an InvalidExtension exception for an extension that is not found within the extension spec index.
     *
     * @param string $extension Spec name that was requested.
     * @return self
     */
    public static function forExtension($extension)
    {
        $message = "Invalid extension '{$extension}' was requested from the validator spec.";

        return new self($message);
    }
}
PK.3Yb;Ή�Hbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/InvalidFormat.php<?php

namespace AmpProject\Exception;

use OutOfRangeException;

/**
 * Exception thrown when an invalid format is requested from the validator spec.
 *
 * @package ampproject/amp-toolbox
 */
final class InvalidFormat extends OutOfRangeException implements AmpException
{
    /**
     * Instantiate an InvalidFormat exception when an invalid AMP format is being requested.
     *
     * @param string $format Format that was requested.
     * @return self
     */
    public static function forFormat($format)
    {
        $message = "Invalid format '{$format}' was requested from the validator spec.";

        return new self($message);
    }
}
PK.3Y�#dP��Jbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/InvalidListName.php<?php

namespace AmpProject\Exception;

use OutOfRangeException;

/**
 * Exception thrown when an invalid list name is requested from the validator spec.
 *
 * @package ampproject/amp-toolbox
 */
final class InvalidListName extends OutOfRangeException implements AmpException
{
    /**
     * Instantiate an InvalidListName exception for a attribute that is not found within the attribute
     * list name index.
     *
     * @param string $attributeList Name of the attribute list that was requested.
     * @return self
     */
    public static function forAttributeList($attributeList)
    {
        $message = "Invalid attribute list '{$attributeList}' was requested from the validator spec.";

        return new self($message);
    }

    /**
     * Instantiate an InvalidListName exception for a declaration that is not found within the declaration
     * list name index.
     *
     * @param string $declarationList Name of the declaration list that was requested.
     * @return self
     */
    public static function forDeclarationList($declarationList)
    {
        $message = "Invalid declaration list '{$declarationList}' was requested from the validator spec.";

        return new self($message);
    }

    /**
     * Instantiate an InvalidListName exception for a descendant tag that is not found within the descendant tag
     * list name index.
     *
     * @param string $descendantTagList Name of the descendant tag list that was requested.
     * @return self
     */
    public static function forDescendantTagList($descendantTagList)
    {
        $message = "Invalid descendant tag list '{$descendantTagList}' was requested from the validator spec.";

        return new self($message);
    }
}
PK.3Y�u���Mbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/InvalidOptionValue.php<?php

namespace AmpProject\Exception;

use DomainException;

/**
 * Exception thrown when an invalid option value was provided.
 *
 * @package ampproject/amp-toolbox
 */
final class InvalidOptionValue extends DomainException implements AmpException
{
    /**
     * Instantiate an InvalidOptionValue exception for an invalid option value.
     *
     * @param string        $option   Name of the option.
     * @param array<string> $accepted Array of acceptable values.
     * @param string        $actual   Value that was actually provided.
     * @return self
     */
    public static function forValue($option, $accepted, $actual)
    {
        $acceptedString = implode(', ', $accepted);
        $message = "The value for the option '{$option}' expected the value to be one of "
                   . "[{$acceptedString}], got '{$actual}' instead.";

        return new self($message);
    }
}
PK.3Y��ڨ�Jbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/InvalidSpecName.php<?php

namespace AmpProject\Exception;

use OutOfRangeException;

/**
 * Exception thrown when an invalid spec name is requested from the validator spec.
 *
 * @package ampproject/amp-toolbox
 */
final class InvalidSpecName extends OutOfRangeException implements AmpException
{
    /**
     * Instantiate an InvalidSpecName exception for a spec that is not found within the spec name index.
     *
     * @param string $specName Spec name that was requested.
     * @return self
     */
    public static function forSpecName($specName)
    {
        $message = "Invalid spec name '{$specName}' was requested from the validator spec.";

        return new self($message);
    }
}
PK.3Y�H���Nbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/InvalidSpecRuleName.php<?php

namespace AmpProject\Exception;

use OutOfRangeException;

/**
 * Exception thrown when an invalid spec rule name is requested from the validator spec.
 *
 * @package ampproject/amp-toolbox
 */
final class InvalidSpecRuleName extends OutOfRangeException implements AmpException
{
    /**
     * Instantiate an InvalidSpecRuleName exception for a spec rule that is not found within the spec index.
     *
     * @param string $specRuleName Spec rule name that was requested.
     * @return self
     */
    public static function forSpecRuleName($specRuleName)
    {
        $message = "Invalid spec rule name '{$specRuleName}' was requested from the validator spec.";

        return new self($message);
    }
}
PK.3Y�[���Gbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/InvalidTagId.php<?php

namespace AmpProject\Exception;

use OutOfRangeException;

/**
 * Exception thrown when an invalid tag ID is requested from the validator spec.
 *
 * @package ampproject/amp-toolbox
 */
final class InvalidTagId extends OutOfRangeException implements AmpException
{
    /**
     * Instantiate an InvalidTagId exception for a tag that is not found within the tag name index.
     *
     * @param string $tagId Spec name that was requested.
     * @return self
     */
    public static function forTagId($tagId)
    {
        $message = "Invalid tag ID '{$tagId}' was requested from the validator tag.";

        return new self($message);
    }
}
PK.3Y^ƒ���Ibunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/InvalidTagName.php<?php

namespace AmpProject\Exception;

use OutOfRangeException;

/**
 * Exception thrown when an invalid tag name is requested from the validator spec.
 *
 * @package ampproject/amp-toolbox
 */
final class InvalidTagName extends OutOfRangeException implements AmpException
{
    /**
     * Instantiate an InvalidTagName exception for a tag that is not found within the tag name index.
     *
     * @param string $tagName Tag name that was requested.
     * @return self
     */
    public static function forTagName($tagName)
    {
        $message = "Invalid tag name '{$tagName}' was requested from the validator spec.";

        return new self($message);
    }
}
PK.3Y�#>Rbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/MaxCssByteCountExceeded.php<?php

namespace AmpProject\Exception;

use AmpProject\Dom\Element;
use AmpProject\Dom\ElementDump;
use OverflowException;

/**
 * Exception thrown when the maximum CSS byte count has been exceeded.
 *
 * @package ampproject/amp-toolbox
 */
final class MaxCssByteCountExceeded extends OverflowException implements AmpException
{
    /**
     * Instantiate a MaxCssByteCountExceeded exception for an inline style that exceeds the maximum byte count.
     *
     * @param Element $element Element that was supposed to receive the inline style.
     * @param string  $style   Inline style that was supposed to be added.
     * @return self
     */
    public static function forInlineStyle(Element $element, $style)
    {
        $message = "Maximum allowed CSS byte count exceeded for inline style '{$style}': " . new ElementDump($element);

        return new self($message);
    }

    /**
     * Instantiate a MaxCssByteCountExceeded exception for an amp-custom style that exceeds the maximum byte count.
     *
     * @param string $style Amp-custom style that was supposed to be added.
     * @return self
     */
    public static function forAmpCustom($style)
    {
        $message = "Maximum allowed CSS byte count exceeded for amp-custom style '{$style}'";

        return new self($message);
    }
}
PK.3Y�"J]]Nbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/Cli/InvalidArgument.php<?php

namespace AmpProject\Exception\Cli;

use AmpProject\Exception\AmpCliException;
use InvalidArgumentException;

/**
 * Exception thrown when an invalid argument was provided to the CLI.
 *
 * @package ampproject/amp-toolbox
 */
final class InvalidArgument extends InvalidArgumentException implements AmpCliException
{
    /**
     * Instantiate an InvalidArgument exception when arguments could not be read.
     *
     * @return self
     */
    public static function forUnreadableArguments()
    {
        $message = 'Could not read command arguments. Is register_argc_argv off?';

        return new self($message, AmpCliException::E_ARG_READ);
    }

    /**
     * Instantiate an InvalidArgument exception when a short option is too long.
     *
     * @return self
     */
    public static function forMultiCharacterShortOption()
    {
        $message = 'Short options should be exactly one ASCII character.';

        return new self($message, AmpCliException::E_OPT_ARG_DENIED);
    }

    /**
     * Instantiate an InvalidArgument exception for file that could not be read.
     *
     * @param string $file File that could not be read.
     * @return self
     */
    public static function forUnreadableFile($file)
    {
        $message = "Could not read file: '{$file}'.";

        return new self($message, AmpCliException::E_OPT_ARG_DENIED);
    }
}
PK.3Y������Kbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/Cli/InvalidColor.php<?php

namespace AmpProject\Exception\Cli;

use AmpProject\Exception\AmpCliException;
use OutOfBoundsException;

/**
 * Exception thrown when an invalid color was provided to the CLI.
 *
 * @package ampproject/amp-toolbox
 */
final class InvalidColor extends OutOfBoundsException implements AmpCliException
{
    /**
     * Instantiate an InvalidColor exception for an unknown color that was passed to the CLI.
     *
     * @param string $color Unknown color that was passed to the CLI.
     * @return self
     */
    public static function forUnknownColor($color)
    {
        $message = "Unknown color: '{$color}'.";

        return new self($message, AmpCliException::E_ANY);
    }
}
PK.3Yl��Rbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/Cli/InvalidColumnFormat.php<?php

namespace AmpProject\Exception\Cli;

use AmpProject\Exception\AmpCliException;
use OutOfBoundsException;

/**
 * Exception thrown when an invalid option was provided to the CLI.
 *
 * @package ampproject/amp-toolbox
 */
final class InvalidColumnFormat extends OutOfBoundsException implements AmpCliException
{
    /**
     * Instantiate an InvalidColumn exception for multiple fluid columns.
     *
     * @return self
     */
    public static function forMultipleFluidColumns()
    {
        $message = 'Only one fluid column allowed.';

        return new self($message, AmpCliException::E_ANY);
    }

    /**
     * Instantiate an InvalidColumn exception for an unknown column format.
     *
     * @param string $column Unknown column format.
     * @return self
     */
    public static function forUnknownColumnFormat($column)
    {
        $message = "Unknown column format: '{$column}'.";

        return new self($message, AmpCliException::E_ANY);
    }

    /**
     * Instantiate an InvalidColumn exception for an unknown column format.
     *
     * @return self
     */
    public static function forExceededMaxWidth()
    {
        $message = 'Total of requested column widths exceeds available space.';

        return new self($message, AmpCliException::E_ANY);
    }
}
PK.3Yl���Mbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/Cli/InvalidCommand.php<?php

namespace AmpProject\Exception\Cli;

use AmpProject\Exception\AmpCliException;
use InvalidArgumentException;

/**
 * Exception thrown when an invalid command was provided to the CLI.
 *
 * @package ampproject/amp-toolbox
 */
final class InvalidCommand extends InvalidArgumentException implements AmpCliException
{
    /**
     * Instantiate an InvalidCommand exception for an unregistered command that is being referenced.
     *
     * @param string $command Unregistered command that is being referenced.
     * @return self
     */
    public static function forUnregisteredCommand($command)
    {
        $message = "Command not registered: '{$command}'.";

        return new self($message, AmpCliException::E_INVALID_CMD);
    }


    /**
     * Instantiate an InvalidCommand exception for an already registered command that is to be re-registered.
     *
     * @param string $command Already registered command that is supposed to be registered.
     * @return self
     */
    public static function forAlreadyRegisteredCommand($command)
    {
        $message = "Command already registered: '{$command}'.";

        return new self($message, AmpCliException::E_INVALID_CMD);
    }
}
PK.3Y����Lbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/Cli/InvalidOption.php<?php

namespace AmpProject\Exception\Cli;

use AmpProject\Exception\AmpCliException;
use OutOfBoundsException;

/**
 * Exception thrown when an invalid option was provided to the CLI.
 *
 * @package ampproject/amp-toolbox
 */
final class InvalidOption extends OutOfBoundsException implements AmpCliException
{
    /**
     * Instantiate an InvalidOption exception for an unknown option that was passed to the CLI.
     *
     * @param string $option Unknown option that was passed to the CLI.
     * @return self
     */
    public static function forUnknownOption($option)
    {
        $message = "Unknown option: '{$option}'.";

        return new self($message, AmpCliException::E_UNKNOWN_OPT);
    }
}
PK.3YnJ�B��Jbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/Cli/InvalidSapi.php<?php

namespace AmpProject\Exception\Cli;

use AmpProject\Exception\AmpCliException;
use OutOfBoundsException;

/**
 * Exception thrown when an invalid option was provided to the CLI.
 *
 * @package ampproject/amp-toolbox
 */
final class InvalidSapi extends OutOfBoundsException implements AmpCliException
{
    /**
     * Instantiate an InvalidSapi exception for a SAPI other than 'cli'.
     *
     * @param string $sapi Invalid SAPI that was detected.
     * @return self
     */
    public static function forSapi($sapi)
    {
        $message = "This has to be run from the command line (detected SAPI '{$sapi}').";

        return new self($message, AmpCliException::E_ANY);
    }
}
PK.3Yo]
Nbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/Cli/MissingArgument.php<?php

namespace AmpProject\Exception\Cli;

use AmpProject\Exception\AmpCliException;
use DomainException;

/**
 * Exception thrown when an invalid argument was provided to the CLI.
 *
 * @package ampproject/amp-toolbox
 */
final class MissingArgument extends DomainException implements AmpCliException
{
    /**
     * Instantiate a MissingArgument exception for an argument that is required but missing.
     *
     * @param string $option Option for which the argument is missing.
     *
     * @return self
     */
    public static function forNoArgument($option)
    {
        $message = "Option '{$option}' requires an argument.";

        return new self($message, AmpCliException::E_OPT_ARG_REQUIRED);
    }

    /**
     * Instantiate a MissingArgument exception for when too few arguments were passed.
     *
     * @return self
     */
    public static function forNotEnoughArguments()
    {
        $message = 'Not enough arguments provided.';

        return new self($message, AmpCliException::E_OPT_ARG_REQUIRED);
    }
}
PK.3Yr��<bunyad-amp/vendor/ampproject/amp-toolbox/src/Html/AtRule.php<?php

namespace AmpProject\Html;

/**
 * Interface with constants for the different "at" rules.
 *
 * @package ampproject/amp-toolbox
 */
interface AtRule
{
    const _MOZ_DOCUMENT       = '-moz-document';
    const CHARSET             = 'charset';
    const COUNTER_STYLE       = 'counter-style';
    const DOCUMENT            = 'document';
    const FONT_FACE           = 'font-face';
    const FONT_FEATURE_VALUES = 'font-feature-values';
    const IMPORT              = 'import';
    const KEYFRAMES           = 'keyframes';
    const MEDIA               = 'media';
    const NAMESPACE_          = 'namespace';
    const PAGE                = 'page';
    const PROPERTY            = 'property';
    const SUPPORTS            = 'supports';
    const VIEWPORT            = 'viewport';
}
PK.3Y�[���
�
?bunyad-amp/vendor/ampproject/amp-toolbox/src/Html/Attribute.php<?php

namespace AmpProject\Html;

/**
 * Interface with constants for the different types of attributes.
 *
 * phpcs:disable Generic.Files.LineLength.TooLong
 *
 * @package ampproject/amp-toolbox
 */
interface Attribute
{
    const ABBR                            = 'abbr';
    const ABOUT                           = 'about';
    const ACCEPT                          = 'accept';
    const ACCEPT_CHARSET                  = 'accept-charset';
    const ACCESSKEY                       = 'accesskey';
    const ACCESS_HIDE                     = 'access-hide';
    const ACTION                          = 'action';
    const ACTION_XHR                      = 'action-xhr';
    const ADVANCE_COUNT                   = 'advance-count';
    const ALBUM                           = 'album';
    const ALIGN                           = 'align';
    const ALIGNMENT_BASELINE              = 'alignment-baseline';
    const ALIGN_CONTENT                   = 'align-content';
    const ALIGN_ITEMS                     = 'align-items';
    const ALIGN_SELF                      = 'align-self';
    const ALL                             = 'all';
    const ALLOW                           = 'allow';
    const ALLOWFULLSCREEN                 = 'allowfullscreen';
    const ALLOWPAYMENTREQUEST             = 'allowpaymentrequest';
    const ALLOWTRANSPARENCY               = 'allowtransparency';
    const ALLOW_BLOCKED_END_DATE          = 'allow-blocked-end-date';
    const ALLOW_BLOCKED_RANGES            = 'allow-blocked-ranges';
    const ALLOW_SSR_IMG                   = 'allow-ssr-img';
    const ALPHA                           = 'alpha';
    const ALPHA_RANGE                     = 'alpha-range';
    const ALT                             = 'alt';
    const ALWAYS_SERVE_NPA                = 'alwaysServeNpa';
    const AMP                             = 'amp';
    const AMP4ADS                         = 'amp4ads';
    const AMP4ADS_BOILERPLATE             = 'amp4ads-boilerplate';
    const AMP4ADS_EMOJI                   = self::AMP_EMOJI . '4ads';
    const AMP4ADS_EMOJI_ALT               = self::AMP_EMOJI_ALT . '4ads';
    const AMP4EMAIL                       = 'amp4email';
    const AMP4EMAIL_BOILERPLATE           = 'amp4email-boilerplate';
    const AMP4EMAIL_EMOJI                 = self::AMP_EMOJI . '4email';
    const AMP4EMAIL_EMOJI_ALT             = self::AMP_EMOJI_ALT . '4email';
    const AMPLITUDE                       = 'amplitude';
    const AMP_ACCESS                      = 'amp-access';
    const AMP_ACCESS_BEHAVIOR             = 'amp-access-behavior';
    const AMP_ACCESS_HIDE                 = 'amp-access-hide';
    const AMP_ACCESS_ID                   = 'amp-access-id';
    const AMP_ACCESS_LOADER               = 'amp-access-loader';
    const AMP_ACCESS_LOADING              = 'amp-access-loading';
    const AMP_ACCESS_OFF                  = 'amp-access-off';
    const AMP_ACCESS_ON                   = 'amp-access-on';
    const AMP_ACCESS_SHOW                 = 'amp-access-show';
    const AMP_ACCESS_STYLE                = 'amp-access-style';
    const AMP_ACCESS_TEMPLATE             = 'amp-access-template';
    const AMP_BOILERPLATE                 = 'amp-boilerplate';
    const AMP_CUSTOM                      = 'amp-custom';
    const AMP_CUSTOM_LENGTH_CHECK         = 'amp-custom-length-check';
    const AMP_EMOJI                       = "\xE2\x9A\xA1";
    const AMP_EMOJI_ALT                   = "\xE2\x9A\xA1\xEF\xB8\x8F"; // See https://github.com/ampproject/amphtml/issues/25990.
    const AMP_EXTENSION                   = 'amp-extension';
    const AMP_FX                          = 'amp-fx';
    const AMP_KEYFRAMES                   = 'amp-keyframes';
    const AMP_NESTED_SUBMENU              = 'amp-nested-submenu';
    const AMP_NESTED_SUBMENU_CLOSE        = 'amp-nested-submenu-close';
    const AMP_NESTED_SUBMENU_OPEN         = 'amp-nested-submenu-open';
    const AMP_NOSCRIPT                    = 'amp-noscript';
    const AMP_ONERROR                     = 'amp-onerror';
    const AMP_RUNTIME                     = 'amp-runtime';
    const AMP_SCRIPT_SRC                  = 'amp-script-src';
    const AMP_STORY_DVH_POLYFILL          = 'amp-story-dvh-polyfill';
    const ANCHOR                          = 'anchor';
    const ANIMATE                         = 'animate';
    const ANIMATE_IN                      = 'animate-in';
    const ANIMATE_IN_AFTER                = 'animate-in-after';
    const ANIMATE_IN_DELAY                = 'animate-in-delay';
    const ANIMATE_IN_DURATION             = 'animate-in-duration';
    const ANIMATE_IN_TIMING_FUNCTION      = 'animate-in-timing-function';
    const ANIMATION                       = 'animation';
    const ANIMATION_DELAY                 = 'animation-delay';
    const ANIMATION_DIRECTION             = 'animation-direction';
    const ANIMATION_DURATION              = 'animation-duration';
    const ANIMATION_FILL_MODE             = 'animation-fill-mode';
    const ANIMATION_ITERATION_COUNT       = 'animation-iteration-count';
    const ANIMATION_NAME                  = 'animation-name';
    const ANIMATION_PLAY_STATE            = 'animation-play-state';
    const ANIMATION_TIMING_FUNCTION       = 'animation-timing-function';
    const ANTIALIASING                    = 'antialiasing';
    const APPEARANCE                      = 'appearance';
    const ARABIC_FORM                     = 'arabic-form';
    const ARGUMENTS                       = 'arguments';
    const ARIA_ACTIVEDESCENDANT           = 'aria-activedescendant';
    const ARIA_ATOMIC                     = 'aria-atomic';
    const ARIA_AUTOCOMPLETE               = 'aria-autocomplete';
    const ARIA_BUSY                       = 'aria-busy';
    const ARIA_CHECKED                    = 'aria-checked';
    const ARIA_CONTROLS                   = 'aria-controls';
    const ARIA_CURRENT                    = 'aria-current';
    const ARIA_DESCRIBEDBY                = 'aria-describedby';
    const ARIA_DISABLED                   = 'aria-disabled';
    const ARIA_DROPEFFECT                 = 'aria-dropeffect';
    const ARIA_EXPANDED                   = 'aria-expanded';
    const ARIA_FLOWTO                     = 'aria-flowto';
    const ARIA_GRABBED                    = 'aria-grabbed';
    const ARIA_HASPOPUP                   = 'aria-haspopup';
    const ARIA_HIDDEN                     = 'aria-hidden';
    const ARIA_INVALID                    = 'aria-invalid';
    const ARIA_LABEL                      = 'aria-label';
    const ARIA_LABELLEDBY                 = 'aria-labelledby';
    const ARIA_LEVEL                      = 'aria-level';
    const ARIA_LIVE                       = 'aria-live';
    const ARIA_MODAL                      = 'aria-modal';
    const ARIA_MULTILINE                  = 'aria-multiline';
    const ARIA_MULTISELECTABLE            = 'aria-multiselectable';
    const ARIA_ORIENTATION                = 'aria-orientation';
    const ARIA_OWNS                       = 'aria-owns';
    const ARIA_POSINSET                   = 'aria-posinset';
    const ARIA_PRESSED                    = 'aria-pressed';
    const ARIA_READONLY                   = 'aria-readonly';
    const ARIA_RELEVANT                   = 'aria-relevant';
    const ARIA_REQUIRED                   = 'aria-required';
    const ARIA_SELECTED                   = 'aria-selected';
    const ARIA_SETSIZE                    = 'aria-setsize';
    const ARIA_SORT                       = 'aria-sort';
    const ARIA_VALUEMAX                   = 'aria-valuemax';
    const ARIA_VALUEMIN                   = 'aria-valuemin';
    const ARIA_VALUENOW                   = 'aria-valuenow';
    const ARIA_VALUETEXT                  = 'aria-valuetext';
    const ARROWS                          = 'arrows';
    const ARTIST                          = 'artist';
    const ARTWORK                         = 'artwork';
    const ASPECT_RATIO                    = 'aspect-ratio';
    const ASPECT_RATIO_HEIGHT             = 'aspect-ratio-height';
    const ASPECT_RATIO_WIDTH              = 'aspect-ratio-width';
    const ASYNC                           = 'async';
    const AS_                             = 'as'; // Underscore needed because 'as' is a PHP keyword.
    const ATTRIBUTION                     = 'attribution';
    const ATTRIBUTIONDESTINATION          = 'attributiondestination';
    const ATTRIBUTIONEXPIRY               = 'attributionexpiry';
    const ATTRIBUTIONREPORTTO             = 'attributionreportto';
    const ATTRIBUTIONSOURCEEVENTID        = 'attributionsourceeventid';
    const ATTRIBUTIONSOURCEID             = 'attributionsourceid';
    const AUTOCOMPLETE                    = 'autocomplete';
    const AUTOEXPAND                      = 'autoexpand';
    const AUTOFOCUS                       = 'autofocus';
    const AUTOPLAY                        = 'autoplay';
    const AUTOROTATE                      = 'autorotate';
    const AUTOSCROLL                      = 'autoscroll';
    const AUTO_ADVANCE                    = 'auto-advance';
    const AUTO_ADVANCE_AFTER              = 'auto-advance-after';
    const AUTO_ADVANCE_COUNT              = 'auto-advance-count';
    const AUTO_ADVANCE_INTERVAL           = 'auto-advance-interval';
    const AUTO_ADVANCE_LOOPS              = 'auto-advance-loops';
    const AUTO_RESIZE                     = 'auto-resize';
    const AZIMUTH                         = 'azimuth';
    const BACKFACE_VISIBILITY             = 'backface-visibility';
    const BACKGROUND                      = 'background';
    const BACKGROUND_ATTACHMENT           = 'background-attachment';
    const BACKGROUND_AUDIO                = 'background-audio';
    const BACKGROUND_BLEND_MODE           = 'background-blend-mode';
    const BACKGROUND_CLIP                 = 'background-clip';
    const BACKGROUND_COLOR                = 'background-color';
    const BACKGROUND_IMAGE                = 'background-image';
    const BACKGROUND_ORIGIN               = 'background-origin';
    const BACKGROUND_POSITION             = 'background-position';
    const BACKGROUND_REPEAT               = 'background-repeat';
    const BACKGROUND_SIZE                 = 'background-size';
    const BASEFREQUENCY                   = 'basefrequency';
    const BASELINE_SHIFT                  = 'baseline-shift';
    const BETA_RANGE                      = 'beta-range';
    const BGCOLOR                         = 'bgcolor';
    const BIAS                            = 'bias';
    const BIGGEST_UNIT                    = 'biggest-unit';
    const BINDING                         = 'binding';
    const BLOCK_RTC                       = 'blockRtc';
    const BLOCKED                         = 'blocked';
    const BORDER                          = 'border';
    const BORDER_BOTTOM                   = 'border-bottom';
    const BORDER_BOTTOM_COLOR             = 'border-bottom-color';
    const BORDER_BOTTOM_LEFT_RADIUS       = 'border-bottom-left-radius';
    const BORDER_BOTTOM_RIGHT_RADIUS      = 'border-bottom-right-radius';
    const BORDER_BOTTOM_STYLE             = 'border-bottom-style';
    const BORDER_BOTTOM_WIDTH             = 'border-bottom-width';
    const BORDER_COLLAPSE                 = 'border-collapse';
    const BORDER_COLOR                    = 'border-color';
    const BORDER_IMAGE                    = 'border-image';
    const BORDER_IMAGE_OUTSET             = 'border-image-outset';
    const BORDER_IMAGE_REPEAT             = 'border-image-repeat';
    const BORDER_IMAGE_SLICE              = 'border-image-slice';
    const BORDER_IMAGE_SOURCE             = 'border-image-source';
    const BORDER_IMAGE_WIDTH              = 'border-image-width';
    const BORDER_LEFT                     = 'border-left';
    const BORDER_LEFT_COLOR               = 'border-left-color';
    const BORDER_LEFT_STYLE               = 'border-left-style';
    const BORDER_LEFT_WIDTH               = 'border-left-width';
    const BORDER_RADIUS                   = 'border-radius';
    const BORDER_RIGHT                    = 'border-right';
    const BORDER_RIGHT_COLOR              = 'border-right-color';
    const BORDER_RIGHT_STYLE              = 'border-right-style';
    const BORDER_RIGHT_WIDTH              = 'border-right-width';
    const BORDER_SPACING                  = 'border-spacing';
    const BORDER_STYLE                    = 'border-style';
    const BORDER_TOP                      = 'border-top';
    const BORDER_TOP_COLOR                = 'border-top-color';
    const BORDER_TOP_LEFT_RADIUS          = 'border-top-left-radius';
    const BORDER_TOP_RIGHT_RADIUS         = 'border-top-right-radius';
    const BORDER_TOP_STYLE                = 'border-top-style';
    const BORDER_TOP_WIDTH                = 'border-top-width';
    const BORDER_WIDTH                    = 'border-width';
    const BOTTOM                          = 'bottom';
    const BOX_DECORATION_BREAK            = 'box-decoration-break';
    const BOX_SHADOW                      = 'box-shadow';
    const BOX_SIZING                      = 'box-sizing';
    const BREAK_AFTER                     = 'break-after';
    const BREAK_BEFORE                    = 'break-before';
    const BREAK_INSIDE                    = 'break-inside';
    const CACHE                           = 'cache';
    const CAPTION_SIDE                    = 'caption-side';
    const CAPTIONS_ID                     = 'captions-id';
    const CAPTURE                         = 'capture';
    const CARET_COLOR                     = 'caret-color';
    const CELLPADDING                     = 'cellpadding';
    const CELLSPACING                     = 'cellspacing';
    const CHARSET                         = 'charset';
    const CHECKED                         = 'checked';
    const CHIP_STYLE                      = 'chip-style';
    const CIPHERTEXT                      = 'ciphertext';
    const CITE                            = 'cite';
    const CLASS_                          = 'class'; // Underscore needed because 'class' is a PHP keyword.
    const CLEAR                           = 'clear';
    const CLEARCOLOR                      = 'clearcolor';
    const CLIP                            = 'clip';
    const CLIPPATHUNITS                   = 'clippathunits';
    const CLIP_PATH                       = 'clip-path';
    const CLIP_RULE                       = 'clip-rule';
    const CLOSE_BUTTON                    = 'close-button';
    const COLOR                           = 'color';
    const COLOR_ADJUST                    = 'color-adjust';
    const COLOR_INTERPOLATION             = 'color-interpolation';
    const COLOR_INTERPOLATION_FILTERS     = 'color-interpolation-filters';
    const COLOR_PROFILE                   = 'color-profile';
    const COLOR_RENDERING                 = 'color-rendering';
    const COLS                            = 'cols';
    const COLSPAN                         = 'colspan';
    const COLUMNS                         = 'columns';
    const COLUMN_COUNT                    = 'column-count';
    const COLUMN_FILL                     = 'column-fill';
    const COLUMN_GAP                      = 'column-gap';
    const COLUMN_RULE                     = 'column-rule';
    const COLUMN_RULE_COLOR               = 'column-rule-color';
    const COLUMN_RULE_STYLE               = 'column-rule-style';
    const COLUMN_RULE_WIDTH               = 'column-rule-width';
    const COLUMN_SPAN                     = 'column-span';
    const COLUMN_WIDTH                    = 'column-width';
    const CONFIG                          = 'config';
    const CONTENT                         = 'content';
    const CONTENTSCRIPTTYPE               = 'contentscripttype';
    const CONTENTSTYLETYPE                = 'contentstyletype';
    const CONTROLS                        = 'controls';
    const CONTROLSLIST                    = 'controlslist';
    const CONVERSIONDESTINATION           = 'conversiondestination';
    const COUNT_UP                        = 'count-up';
    const COUNTER_INCREMENT               = 'counter-increment';
    const COUNTER_RESET                   = 'counter-reset';
    const CREDENTIALS                     = 'credentials';
    const CROSSORIGIN                     = 'crossorigin';
    const CRYPTOKEYS                      = 'cryptokeys';
    const CTA_ACCENT_COLOR                = 'cta-accent-color';
    const CTA_ACCENT_ELEMENT              = 'cta-accent-element';
    const CTA_IMAGE                       = 'cta-image';
    const CTA_IMAGE_2                     = 'cta-image-2';
    const CTA_TEXT                        = 'cta-text';
    const CURSOR                          = 'cursor';
    const CUSTOM_ELEMENT                  = 'custom-element';
    const CUSTOM_REDIRECT_DOMAIN          = 'custom-redirect-domain';
    const CUSTOM_TEMPLATE                 = 'custom-template';
    const CUSTOM_TRACKING_ID              = 'custom-tracking-id';
    const CUSTOM_VALIDATION_REPORTING     = 'custom-validation-reporting';
    const CUTOFF                          = 'cutoff';
    const CX                              = 'cx';
    const CY                              = 'cy';
    const D                               = 'd';
    const DATA                            = 'data';
    const DATATYPE                        = 'datatype';
    const DATE                            = 'date';
    const DATES                           = 'dates';
    const DATETIME                        = 'datetime';
    const DATE_TEMPLATE                   = 'date-template';
    const DAY_SIZE                        = 'day-size';
    const DECODING                        = 'decoding';
    const DEEP_PARSING                    = 'deep-parsing';
    const DEFAULT_                        = 'default'; // Underscore needed because 'default' is a PHP keyword.
    const DEFER                           = 'defer';
    const DELAY                           = 'delay';
    const DIFFABLE                        = 'diffable';
    const DIFFUSECONSTANT                 = 'diffuseconstant';
    const DIR                             = 'dir';
    const DIRECTION                       = 'direction';
    const DISABLED                        = 'disabled';
    const DISABLEREMOTEPLAYBACK           = 'disableremoteplayback';
    const DISABLE_DOUBLE_TAP              = 'disable-double-tap';
    const DISABLE_HINT_REAPPEAR           = 'disable-hint-reappear';
    const DISABLE_INLINE_WIDTH            = 'disable-inline-width';
    const DISABLE_SESSION_STATES          = 'disable-session-states';
    const DISPLAY                         = 'display';
    const DISPLAY_IN                      = 'display-in';
    const DIVISOR                         = 'divisor';
    const DOCK                            = 'dock';
    const DOMINANT_BASELINE               = 'dominant-baseline';
    const DOTS                            = 'dots';
    const DOWNLOAD                        = 'download';
    const DRAGGABLE                       = 'draggable';
    const DURATION                        = 'duration';
    const DX                              = 'dx';
    const DY                              = 'dy';
    const EDGEMODE                        = 'edgemode';
    const ELEVATION                       = 'elevation';
    const EMPTY_CELLS                     = 'empty-cells';
    const ENABLEZOOM                      = 'enablezoom';
    const ENABLE_BACKGROUND               = 'enable-background';
    const ENCRYPTED                       = 'encrypted';
    const ENCTYPE                         = 'enctype';
    const ENDPOINT                        = 'endpoint';
    const END_DATE                        = 'end-date';
    const END_INPUT_SELECTOR              = 'end-input-selector';
    const ENTERKEYHINT                    = 'enterkeyhint';
    const ENTITY                          = 'entity';
    const ENTITY_LOGO_SRC                 = 'entity-logo-src';
    const ENTITY_URL                      = 'entity-url';
    const EXCLUDED_DOMAINS                = 'excluded-domains';
    const EXCLUSIVE_LINKS                 = 'exclusive-links';
    const EXECUTE                         = 'execute';
    const EXPANDED                        = 'expanded';
    const EXPAND_SINGLE_SECTION           = 'expand-single-section';
    const EXPONENT                        = 'exponent';
    const EXPRESSION                      = 'expression';
    const EXTERNALRESOURCESREQUIRED       = 'externalresourcesrequired';
    const EXTRA_SPACE                     = 'extra-space';
    const FALLBACK                        = 'fallback';
    const FETCH_ERROR                     = 'fetch-error';
    const FETCHPRIORITY                   = 'fetchpriority';
    const FILL                            = 'fill';
    const FILL_OPACITY                    = 'fill-opacity';
    const FILL_RULE                       = 'fill-rule';
    const FILTER                          = 'filter';
    const FILTERRES                       = 'filterres';
    const FILTERUNITS                     = 'filterunits';
    const FILTER_EXPR                     = 'filter-expr';
    const FILTER_VALUE                    = 'filter-value';
    const FIRST                           = 'first';
    const FIRST_DAY_OF_WEEK               = 'first-day-of-week';
    const FLEX                            = 'flex';
    const FLEX_BASIS                      = 'flex-basis';
    const FLEX_DIRECTION                  = 'flex-direction';
    const FLEX_FLOW                       = 'flex-flow';
    const FLEX_GROW                       = 'flex-grow';
    const FLEX_SHRINK                     = 'flex-shrink';
    const FLEX_WRAP                       = 'flex-wrap';
    const FLOAT                           = 'float';
    const FLOOD_COLOR                     = 'flood-color';
    const FLOOD_OPACITY                   = 'flood-opacity';
    const FOCUSABLE                       = 'focusable';
    const FONT                            = 'font';
    const FONT_FAMILY                     = 'font-family';
    const FONT_FEATURE_SETTINGS           = 'font-feature-settings';
    const FONT_KERNING                    = 'font-kerning';
    const FONT_LANGUAGE_OVERRIDE          = 'font-language-override';
    const FONT_SIZE                       = 'font-size';
    const FONT_SIZE_ADJUST                = 'font-size-adjust';
    const FONT_STRETCH                    = 'font-stretch';
    const FONT_STYLE                      = 'font-style';
    const FONT_SYNTHESIS                  = 'font-synthesis';
    const FONT_VARIANT                    = 'font-variant';
    const FONT_VARIANT_ALTERNATES         = 'font-variant-alternates';
    const FONT_VARIANT_CAPS               = 'font-variant-caps';
    const FONT_VARIANT_EAST_ASIAN         = 'font-variant-east-asian';
    const FONT_VARIANT_LIGATURES          = 'font-variant-ligatures';
    const FONT_VARIANT_NUMERIC            = 'font-variant-numeric';
    const FONT_VARIANT_POSITION           = 'font-variant-position';
    const FONT_VARIATION_SETTINGS         = 'font-variation-settings';
    const FONT_WEIGHT                     = 'font-weight';
    const FOOTER                          = 'footer';
    const FORM                            = 'form';
    const FORMAT                          = 'format';
    const FOR_                            = 'for'; // Underscore needed because 'for' is a PHP keyword.
    const FR                              = 'fr';
    const FRAMEBORDER                     = 'frameborder';
    const FROM                            = 'from';
    const FULLSCREEN                      = 'fullscreen';
    const FX                              = 'fx';
    const FY                              = 'fy';
    const G1                              = 'g1';
    const G2                              = 'g2';
    const GAMMA_RANGE                     = 'gamma-range';
    const GAP                             = 'gap';
    const GLYPHREF                        = 'glyphref';
    const GLYPH_NAME                      = 'glyph-name';
    const GLYPH_ORIENTATION_HORIZONTAL    = 'glyph-orientation-horizontal';
    const GLYPH_ORIENTATION_VERTICAL      = 'glyph-orientation-vertical';
    const GRADIENTTRANSFORM               = 'gradienttransform';
    const GRADIENTUNITS                   = 'gradientunits';
    const GRID                            = 'grid';
    const GRID_AREA                       = 'grid-area';
    const GRID_AUTO_COLUMNS               = 'grid-auto-columns';
    const GRID_AUTO_FLOW                  = 'grid-auto-flow';
    const GRID_AUTO_ROWS                  = 'grid-auto-rows';
    const GRID_COLUMN                     = 'grid-column';
    const GRID_COLUMN_END                 = 'grid-column-end';
    const GRID_COLUMN_GAP                 = 'grid-column-gap';
    const GRID_COLUMN_START               = 'grid-column-start';
    const GRID_GAP                        = 'grid-gap';
    const GRID_ROW                        = 'grid-row';
    const GRID_ROW_END                    = 'grid-row-end';
    const GRID_ROW_GAP                    = 'grid-row-gap';
    const GRID_ROW_START                  = 'grid-row-start';
    const GRID_TEMPLATE                   = 'grid-template';
    const GRID_TEMPLATE_AREAS             = 'grid-template-areas';
    const GRID_TEMPLATE_COLUMNS           = 'grid-template-columns';
    const GRID_TEMPLATE_ROWS              = 'grid-template-rows';
    const GTAG_ID                         = 'gtag-id';
    const HANGING_PUNCTUATION             = 'hanging-punctuation';
    const HEADERS                         = 'headers';
    const HEADING_END                     = 'heading-end';
    const HEADING_START                   = 'heading-start';
    const HEIGHT                          = 'height';
    const HEIGHTS                         = 'heights';
    const HELPER_IFRAME_URL               = 'helper-iframe-url';
    const HIDDEN                          = 'hidden';
    const HIDE_KEYBOARD_SHORTCUTS_PANEL   = 'hide-keyboard-shortcuts-panel';
    const HIGH                            = 'high';
    const HIGHLIGHTED                     = 'highlighted';
    const HIGHLIGHT_USER_ENTRY            = 'highlight-user-entry';
    const HORIZONTAL                      = 'horizontal';
    const HORIZ_ADV_X                     = 'horiz-adv-x';
    const HOST_SERVICE                    = 'host-service';
    const HREF                            = 'href';
    const HREFLANG                        = 'hreflang';
    const HSPACE                          = 'hspace';
    const HTML                            = 'html';
    const HTTP_EQUIV                      = 'http-equiv';
    const HYPHENS                         = 'hyphens';
    const ID                              = 'id';
    const IMAGESIZES                      = 'imagesizes';
    const IMAGESRCSET                     = 'imagesrcset';
    const IMAGE_ORIENTATION               = 'image-orientation';
    const IMAGE_RENDERING                 = 'image-rendering';
    const IMAGE_RESOLUTION                = 'image-resolution';
    const IMPLEMENTS_MEDIA_SESSION        = 'implements-media-session';
    const IMPLEMENTS_ROTATE_TO_FULLSCREEN = 'implements-rotate-to-fullscreen';
    const IMPORTANCE                      = 'importance';
    const IMPRESSIONDATA                  = 'impressiondata';
    const IMPRESSIONEXPIRY                = 'impressionexpiry';
    const IN                              = 'in';
    const IN2                             = 'in2';
    const INFO_TEMPLATE                   = 'info-template';
    const INITIAL_SCALE                   = 'initial-scale';
    const INITIAL_SLIDER_POSITION         = 'initial-slider-position';
    const INITIAL_X                       = 'initial-x';
    const INITIAL_Y                       = 'initial-y';
    const INLINE                          = 'inline';
    const INLINE_SIZE                     = 'inline-size';
    const INLIST                          = 'inlist';
    const INPUTMODE                       = 'inputmode';
    const INPUT_SELECTOR                  = 'input-selector';
    const INSET                           = 'inset';
    const INTEGRITY                       = 'integrity';
    const INTERACTIVE                     = 'interactive';
    const INTERCEPT                       = 'intercept';
    const INTERSECTION_RATIOS             = 'intersection-ratios';
    const INTRINSICSIZE                   = 'intrinsicsize';
    const ISMAP                           = 'ismap';
    const ISOLATION                       = 'isolation';
    const ITEMID                          = 'itemid';
    const ITEMPROP                        = 'itemprop';
    const ITEMREF                         = 'itemref';
    const ITEMS                           = 'items';
    const ITEMSCOPE                       = 'itemscope';
    const ITEMTYPE                        = 'itemtype';
    const I_AMPHTML_BINDING               = 'i-amphtml-binding';
    const I_AMPHTML_DISABLE_AR            = 'i-amphtml-disable-ar';
    const I_AMPHTML_LAYOUT                = 'i-amphtml-layout';
    const I_AMPHTML_NO_BOILERPLATE        = 'i-amphtml-no-boilerplate';
    const I_AMPHTML_SSR                   = 'i-amphtml-ssr';
    const I_AMPHTML_VERSION               = 'i-amphtml-version';
    const I_AMP_ACCESS_ID                 = 'i-amp-access-id';
    const JSON                            = 'json';
    const JUSTIFY_CONTENT                 = 'justify-content';
    const JUSTIFY_ITEMS                   = 'justify-items';
    const JUSTIFY_SELF                    = 'justify-self';
    const K                               = 'k';
    const K1                              = 'k1';
    const K2                              = 'k2';
    const K3                              = 'k3';
    const K4                              = 'k4';
    const KERNELMATRIX                    = 'kernelmatrix';
    const KERNELUNITLENGTH                = 'kernelunitlength';
    const KERNING                         = 'kerning';
    const KEY                             = 'key';
    const KEYBOARD_SELECT_MODE            = 'keyboard-select-mode';
    const KIND                            = 'kind';
    const LABEL                           = 'label';
    const LANG                            = 'lang';
    const LAYOUT                          = 'layout';
    const LEFT                            = 'left';
    const LENGTHADJUST                    = 'lengthadjust';
    const LETTER_SPACING                  = 'letter-spacing';
    const LIGHTBOX                        = 'lightbox';
    const LIGHTBOX_EXCLUDE                = 'lightbox-exclude';
    const LIGHTBOX_THUMBNAIL_ID           = 'lightbox-thumbnail-id';
    const LIGHTING_COLOR                  = 'lighting-color';
    const LIMITINGCONEANGLE               = 'limitingconeangle';
    const LINE_BREAK                      = 'line-break';
    const LINE_HEIGHT                     = 'line-height';
    const LINKMATE                        = 'linkmate';
    const LINK_ATTRIBUTE                  = 'link-attribute';
    const LINK_SELECTOR                   = 'link-selector';
    const LIST_                           = 'list'; // Underscore needed because 'list' is a PHP keyword.
    const LIST_STYLE                      = 'list-style';
    const LIST_STYLE_IMAGE                = 'list-style-image';
    const LIST_STYLE_POSITION             = 'list-style-position';
    const LIST_STYLE_TYPE                 = 'list-style-type';
    const LIVE_STORY                      = 'live-story';
    const LIVE_STORY_DISABLED             = 'live-story-disabled';
    const LOADING                         = 'loading';
    const LOAD_MORE                       = 'load-more';
    const LOAD_MORE_BOOKMARK              = 'load-more-bookmark';
    const LOAD_MORE_BUTTON                = 'load-more-button';
    const LOAD_MORE_CLICKABLE             = 'load-more-clickable';
    const LOAD_MORE_END                   = 'load-more-end';
    const LOAD_MORE_FAILED                = 'load-more-failed';
    const LOAD_MORE_LOADING               = 'load-more-loading';
    const LOCALE                          = 'locale';
    const LOCK_BOUNDS                     = 'lock-bounds';
    const LONGDESC                        = 'longdesc';
    const LOOP                            = 'loop';
    const LOW                             = 'low';
    const MARGIN                          = 'margin';
    const MARGIN_BOTTOM                   = 'margin-bottom';
    const MARGIN_LEFT                     = 'margin-left';
    const MARGIN_RIGHT                    = 'margin-right';
    const MARGIN_TOP                      = 'margin-top';
    const MARKER                          = 'marker';
    const MARKERHEIGHT                    = 'markerheight';
    const MARKERUNITS                     = 'markerunits';
    const MARKERWIDTH                     = 'markerwidth';
    const MARKER_END                      = 'marker-end';
    const MARKER_MID                      = 'marker-mid';
    const MARKER_START                    = 'marker-start';
    const MASK                            = 'mask';
    const MASKCONTENTUNITS                = 'maskcontentunits';
    const MASKUNITS                       = 'maskunits';
    const MASK_OUTPUT                     = 'mask-output';
    const MASK_TRIM_ZEROS                 = 'mask-trim-zeros';
    const MAX                             = 'max';
    const MAXIMUM_NIGHTS                  = 'maximum-nights';
    const MAXLENGTH                       = 'maxlength';
    const MAXPIXELRATIO                   = 'maxpixelratio';
    const MAX_AGE                         = 'max-age';
    const MAX_ENTRIES                     = 'max-entries';
    const MAX_FONT_SIZE                   = 'max-font-size';
    const MAX_HEIGHT                      = 'max-height';
    const MAX_ITEM_WIDTH                  = 'max-item-width';
    const MAX_ITEMS                       = 'max-items';
    const MAX_PAGES                       = 'max-pages';
    const MAX_SCALE                       = 'max-scale';
    const MAX_VISIBLE_COUNT               = 'max-visible-count';
    const MAX_WIDTH                       = 'max-width';
    const MEDIA                           = 'media';
    const METHOD                          = 'method';
    const MIN                             = 'min';
    const MINIMUM_NIGHTS                  = 'minimum-nights';
    const MINLENGTH                       = 'minlength';
    const MIN_CHARACTERS                  = 'min-characters';
    const MIN_FONT_SIZE                   = 'min-font-size';
    const MIN_HEIGHT                      = 'min-height';
    const MIN_ITEM_WIDTH                  = 'min-item-width';
    const MIN_VISIBLE_COUNT               = 'min-visible-count';
    const MIN_WIDTH                       = 'min-width';
    const MIXED_LENGTH                    = 'mixed-length';
    const MIX_BLEND_MODE                  = 'mix-blend-mode';
    const MODE                            = 'mode';
    const MONTH_FORMAT                    = 'month-format';
    const MULTIPLE                        = 'multiple';
    const MUTED                           = 'muted';
    const NAME                            = 'name';
    const NEXT_PAGE_HIDE                  = 'next-page-hide';
    const NEXT_PAGE_NO_AD                 = 'next-page-no-ad';
    const NEXT_PAGE_REPLACE               = 'next-page-replace';
    const NOAUDIO                         = 'noaudio';
    const NOAUTOPLAY                      = 'noautoplay';
    const NODOM                           = 'nodom';
    const NOLOADING                       = 'noloading';
    const NOMODULE                        = 'nomodule';
    const NONCE                           = 'nonce';
    const NOVALIDATE                      = 'novalidate';
    const NO_FALLBACK                     = 'no-fallback';
    const NO_VERIFY                       = 'no-verify';
    const NRTV_ACCOUNT_NAME               = 'nrtv-account-name';
    const NUMBER_OF_MONTHS                = 'number-of-months';
    const NUMOCTAVES                      = 'numoctaves';
    const OBJECT_FIT                      = 'object-fit';
    const OBJECT_POSITION                 = 'object-position';
    const OFFSET                          = 'offset';
    const OFFSET_DISTANCE                 = 'offset-distance';
    const OFFSET_SECONDS                  = 'offset-seconds';
    const ON                              = 'on';
    const ONCE                            = 'once';
    const ON_ERROR_ADD_CLASS              = 'on-error-add-class';
    const ON_ERROR_REMOVE_CLASS           = 'on-error-remove-class';
    const ON_LOAD_ADD_CLASS               = 'on-load-add-class';
    const ON_LOAD_REMOVE_CLASS            = 'on-load-remove-class';
    const OPACITY                         = 'opacity';
    const OPEN                            = 'open';
    const OPEN_AFTER_CLEAR                = 'open-after-clear';
    const OPEN_AFTER_SELECT               = 'open-after-select';
    const OPEN_BUTTON                     = 'open-button';
    const OPERATOR                        = 'operator';
    const OPTIMUM                         = 'optimum';
    const OPTION                          = 'option';
    const OPTION_1_CONFETTI               = 'option-1-confetti';
    const OPTION_1_CORRECT                = 'option-1-correct';
    const OPTION_1_IMAGE                  = 'option-1-image';
    const OPTION_1_IMAGE_ALT              = 'option-1-image-alt';
    const OPTION_1_RESULTS_CATEGORY       = 'option-1-results-category';
    const OPTION_1_RESULTS_THRESHOLD      = 'option-1-results-threshold';
    const OPTION_1_TEXT                   = 'option-1-text';
    const OPTION_2_CONFETTI               = 'option-2-confetti';
    const OPTION_2_CORRECT                = 'option-2-correct';
    const OPTION_2_IMAGE                  = 'option-2-image';
    const OPTION_2_IMAGE_ALT              = 'option-2-image-alt';
    const OPTION_2_RESULTS_CATEGORY       = 'option-2-results-category';
    const OPTION_2_RESULTS_THRESHOLD      = 'option-2-results-threshold';
    const OPTION_2_TEXT                   = 'option-2-text';
    const OPTION_3_CONFETTI               = 'option-3-confetti';
    const OPTION_3_CORRECT                = 'option-3-correct';
    const OPTION_3_IMAGE                  = 'option-3-image';
    const OPTION_3_IMAGE_ALT              = 'option-3-image-alt';
    const OPTION_3_RESULTS_CATEGORY       = 'option-3-results-category';
    const OPTION_3_RESULTS_THRESHOLD      = 'option-3-results-threshold';
    const OPTION_3_TEXT                   = 'option-3-text';
    const OPTION_4_CONFETTI               = 'option-4-confetti';
    const OPTION_4_CORRECT                = 'option-4-correct';
    const OPTION_4_IMAGE                  = 'option-4-image';
    const OPTION_4_IMAGE_ALT              = 'option-4-image-alt';
    const OPTION_4_RESULTS_CATEGORY       = 'option-4-results-category';
    const OPTION_4_RESULTS_THRESHOLD      = 'option-4-results-threshold';
    const OPTION_4_TEXT                   = 'option-4-text';
    const ORDER                           = 'order';
    const ORIENT                          = 'orient';
    const ORIENTATION                     = 'orientation';
    const ORPHANS                         = 'orphans';
    const OUTLINE                         = 'outline';
    const OUTLINE_COLOR                   = 'outline-color';
    const OUTLINE_OFFSET                  = 'outline-offset';
    const OUTLINE_STYLE                   = 'outline-style';
    const OUTLINE_WIDTH                   = 'outline-width';
    const OUTSET_ARROWS                   = 'outset-arrows';
    const OVERFLOW                        = 'overflow';
    const OVERFLOW_STYLE                  = 'overflow-style';
    const OVERFLOW_WRAP                   = 'overflow-wrap';
    const OVERFLOW_X                      = 'overflow-x';
    const OVERFLOW_Y                      = 'overflow-y';
    const OVERRIDABLE                     = 'overridable';
    const PADDING                         = 'padding';
    const PADDING_BOTTOM                  = 'padding-bottom';
    const PADDING_LEFT                    = 'padding-left';
    const PADDING_RIGHT                   = 'padding-right';
    const PADDING_TOP                     = 'padding-top';
    const PAGE_BREAK_AFTER                = 'page-break-after';
    const PAGE_BREAK_BEFORE               = 'page-break-before';
    const PAGE_BREAK_INSIDE               = 'page-break-inside';
    const PAGINATION                      = 'pagination';
    const PATHLENGTH                      = 'pathlength';
    const PATTERN                         = 'pattern';
    const PATTERNCONTENTUNITS             = 'patterncontentunits';
    const PATTERNTRANSFORM                = 'patterntransform';
    const PATTERNUNITS                    = 'patternunits';
    const PAUSE                           = 'pause';
    const PAUSE_AFTER                     = 'pause-after';
    const PAUSE_BEFORE                    = 'pause-before';
    const PEEK                            = 'peek';
    const PERMISSION_DIALOG_URL           = 'permission-dialog-url';
    const PERSPECTIVE                     = 'perspective';
    const PERSPECTIVE_ORIGIN              = 'perspective-origin';
    const PITCH                           = 'pitch';
    const PITCH_END                       = 'pitch-end';
    const PITCH_RANGE                     = 'pitch-range';
    const PITCH_START                     = 'pitch-start';
    const PLACEHOLDER                     = 'placeholder';
    const PLACE_ITEMS                     = 'place-items';
    const PLAYSINLINE                     = 'playsinline';
    const POINTER_EVENTS                  = 'pointer-events';
    const POINTS                          = 'points';
    const POINTSATX                       = 'pointsatx';
    const POINTSATY                       = 'pointsaty';
    const POINTSATZ                       = 'pointsatz';
    const POOOL_ACCESS_CONTENT            = 'poool-access-content';
    const POOOL_ACCESS_PREVIEW            = 'poool-access-preview';
    const POSITION                        = 'position';
    const POSTER                          = 'poster';
    const POSTER_LANDSCAPE_SRC            = 'poster-landscape-src';
    const POSTER_PORTRAIT_SRC             = 'poster-portrait-src';
    const POSTER_SQUARE_SRC               = 'poster-square-src';
    const PREFETCH                        = 'prefetch';
    const PREFIX                          = 'prefix';
    const PRELOAD                         = 'preload';
    const PRESERVEALPHA                   = 'preservealpha';
    const PRESERVEASPECTRATIO             = 'preserveaspectratio';
    const PRESET                          = 'preset';
    const PRIMITIVEUNITS                  = 'primitiveunits';
    const PROFILE                         = 'profile';
    const PROMPT_SIZE                     = 'prompt-size';
    const PROMPT_TEXT                     = 'prompt-text';
    const PROPERTY                        = 'property';
    const PUBDATE                         = 'pubdate';
    const PUBLISHER                       = 'publisher';
    const PUBLISHER_CODE                  = 'publisher-code';
    const PUBLISHER_LOGO_SRC              = 'publisher-logo-src';
    const QUERY                           = 'query';
    const QUOTES                          = 'quotes';
    const R                               = 'r';
    const RADIUS                          = 'radius';
    const READONLY                        = 'readonly';
    const RECOMMENDATION_BOX              = 'recommendation-box';
    const REFERRERPOLICY                  = 'referrerpolicy';
    const REFX                            = 'refx';
    const REFY                            = 'refy';
    const REL                             = 'rel';
    const RENDERER                        = 'renderer';
    const REPORTINGORIGIN                 = 'reportingorigin';
    const REQUIRED                        = 'required';
    const REQUIREDEXTENSIONS              = 'requiredextensions';
    const REQUIREDFEATURES                = 'requiredfeatures';
    const RESET_ON_REFRESH                = 'reset-on-refresh';
    const RESET_ON_RESIZE                 = 'reset-on-resize';
    const RESIZABLE                       = 'resizable';
    const RESIZE                          = 'resize';
    const RESOURCE                        = 'resource';
    const RESULT                          = 'result';
    const REV                             = 'rev';
    const REVERSED                        = 'reversed';
    const RICHNESS                        = 'richness';
    const RIGHT                           = 'right';
    const ROLE                            = 'role';
    const ROTATE                          = 'rotate';
    const ROTATE_TO_FULLSCREEN            = 'rotate-to-fullscreen';
    const ROWS                            = 'rows';
    const ROWSPAN                         = 'rowspan';
    const ROW_GAP                         = 'row-gap';
    const RTC_CONFIG                      = 'rtc-config';
    const RX                              = 'rx';
    const RY                              = 'ry';
    const SANDBOX                         = 'sandbox';
    const SANDBOXED                       = 'sandboxed';
    const SCALE                           = 'scale';
    const SCALE_END                       = 'scale-end';
    const SCALE_START                     = 'scale-start';
    const SCENE_HEADING                   = 'scene-heading';
    const SCENE_PITCH                     = 'scene-pitch';
    const SCENE_ROLL                      = 'scene-roll';
    const SCHEME                          = 'scheme';
    const SCOPE                           = 'scope';
    const SCRIPT                          = 'script';
    const SCROLLABLE                      = 'scrollable';
    const SCROLLING                       = 'scrolling';
    const SECOND                          = 'second';
    const SEED                            = 'seed';
    const SELECTED                        = 'selected';
    const SELECTIONDIRECTION              = 'selectiondirection';
    const SELECTIONEND                    = 'selectionend';
    const SELECTIONSTART                  = 'selectionstart';
    const SEPARATOR                       = 'separator';
    const SERVICE_WORKER_SCOPE            = 'service-worker-scope';
    const SERVICE_WORKER_URL              = 'service-worker-url';
    const SHAPE_RENDERING                 = 'shape-rendering';
    const SHA_256_HASH                    = 'sha-256-hash';
    const SHOW_TOOLTIP                    = 'show-tooltip';
    const SIDE                            = 'side';
    const SINGLE_ITEM                     = 'single-item';
    const SIZE                            = 'size';
    const SIZES                           = 'sizes';
    const SKETCH_TYPE                     = 'sketch-type';
    const SLIDE                           = 'slide';
    const SLIDE_ALIGN                     = 'slide-align';
    const SLOPE                           = 'slope';
    const SLOT                            = 'slot';
    const SMOOTHING                       = 'smoothing';
    const SNAP                            = 'snap';
    const SNAP_ALIGN                      = 'snap-align';
    const SNAP_BY                         = 'snap-by';
    const SOLID_COLOR                     = 'solid-color';
    const SOLID_OPACITY                   = 'solid-opacity';
    const SORT                            = 'sort';
    const SORTABLE                        = 'sortable';
    const SORTED                          = 'sorted';
    const SPACING                         = 'spacing';
    const SPAN                            = 'span';
    const SPEAK                           = 'speak';
    const SPEAK_HEADER                    = 'speak-header';
    const SPEAK_NUMERAL                   = 'speak-numeral';
    const SPEAK_PUNCTUATION               = 'speak-punctuation';
    const SPECULARCONSTANT                = 'specularconstant';
    const SPECULAREXPONENT                = 'specularexponent';
    const SPEECH_RATE                     = 'speech-rate';
    const SPELLCHECK                      = 'spellcheck';
    const SPREADMETHOD                    = 'spreadmethod';
    const SRC                             = 'src';
    const SRCDOC                          = 'srcdoc';
    const SRCLANG                         = 'srclang';
    const SRCSET                          = 'srcset';
    const STANDALONE                      = 'standalone';
    const START                           = 'start';
    const STARTOFFSET                     = 'startoffset';
    const START_DATE                      = 'start-date';
    const START_INPUT_SELECTOR            = 'start-input-selector';
    const STDDEVIATION                    = 'stddeviation';
    const STEP                            = 'step';
    const STEP_SIZE                       = 'step-size';
    const STICKY                          = 'sticky';
    const STITCHTILES                     = 'stitchtiles';
    const STOP_COLOR                      = 'stop-color';
    const STOP_OPACITY                    = 'stop-opacity';
    const STRESS                          = 'stress';
    const STROKE                          = 'stroke';
    const STROKE_DASHARRAY                = 'stroke-dasharray';
    const STROKE_DASHOFFSET               = 'stroke-dashoffset';
    const STROKE_LINECAP                  = 'stroke-linecap';
    const STROKE_LINEJOIN                 = 'stroke-linejoin';
    const STROKE_MITERLIMIT               = 'stroke-miterlimit';
    const STROKE_OPACITY                  = 'stroke-opacity';
    const STROKE_WIDTH                    = 'stroke-width';
    const STYLE                           = 'style';
    const SUBMITTING                      = 'submitting';
    const SUBMIT_ERROR                    = 'submit-error';
    const SUBMIT_ON_ENTER                 = 'submit-on-enter';
    const SUBMIT_SUCCESS                  = 'submit-success';
    const SUBSCRIPTIONS_ACTION            = 'subscriptions-action';
    const SUBSCRIPTIONS_ACTIONS           = 'subscriptions-actions';
    const SUBSCRIPTIONS_DECORATE          = 'subscriptions-decorate';
    const SUBSCRIPTIONS_DIALOG            = 'subscriptions-dialog';
    const SUBSCRIPTIONS_DISPLAY           = 'subscriptions-display';
    const SUBSCRIPTIONS_GOOGLE_RTC        = 'subscriptions-google-rtc';
    const SUBSCRIPTIONS_LANG              = 'subscriptions-lang';
    const SUBSCRIPTIONS_SECTION           = 'subscriptions-section';
    const SUBSCRIPTIONS_SERVICE           = 'subscriptions-service';
    const SUGGEST_FIRST                   = 'suggest-first';
    const SUPPORTS_LANDSCAPE              = 'supports-landscape';
    const SURFACESCALE                    = 'surfacescale';
    const SWG_AMP_CACHE_NONCE             = 'swg-amp-cache-nonce';
    const SYSTEMLANGUAGE                  = 'systemlanguage';
    const TABINDEX                        = 'tabindex';
    const TABLE                           = 'table';
    const TABLEVALUES                     = 'tablevalues';
    const TABLE_LAYOUT                    = 'table-layout';
    const TAB_SIZE                        = 'tab-size';
    const TARGET                          = 'target';
    const TARGETX                         = 'targetx';
    const TARGETY                         = 'targety';
    const TEMPLATE                        = 'template';
    const TEXTLENGTH                      = 'textlength';
    const TEXT_ALIGN                      = 'text-align';
    const TEXT_ALIGN_LAST                 = 'text-align-last';
    const TEXT_ANCHOR                     = 'text-anchor';
    const TEXT_COMBINE_UPRIGHT            = 'text-combine-upright';
    const TEXT_DECORATION                 = 'text-decoration';
    const TEXT_DECORATION_COLOR           = 'text-decoration-color';
    const TEXT_DECORATION_LINE            = 'text-decoration-line';
    const TEXT_DECORATION_SKIP            = 'text-decoration-skip';
    const TEXT_DECORATION_SKIP_INK        = 'text-decoration-skip-ink';
    const TEXT_DECORATION_STYLE           = 'text-decoration-style';
    const TEXT_EMPHASIS                   = 'text-emphasis';
    const TEXT_EMPHASIS_COLOR             = 'text-emphasis-color';
    const TEXT_EMPHASIS_POSITION          = 'text-emphasis-position';
    const TEXT_EMPHASIS_STYLE             = 'text-emphasis-style';
    const TEXT_FILL_COLOR                 = 'text-fill-color';
    const TEXT_INDENT                     = 'text-indent';
    const TEXT_JUSTIFY                    = 'text-justify';
    const TEXT_ORIENTATION                = 'text-orientation';
    const TEXT_OVERFLOW                   = 'text-overflow';
    const TEXT_RENDERING                  = 'text-rendering';
    const TEXT_SHADOW                     = 'text-shadow';
    const TEXT_STROKE                     = 'text-stroke';
    const TEXT_STROKE_COLOR               = 'text-stroke-color';
    const TEXT_STROKE_WIDTH               = 'text-stroke-width';
    const TEXT_TRANSFORM                  = 'text-transform';
    const TEXT_UNDERLINE_POSITION         = 'text-underline-position';
    const THEME                           = 'theme';
    const TIMELEFT_MS                     = 'timeleft-ms';
    const TIMELINE_EVENT_PREFIX           = 'timeline-event-prefix';
    const TIMEOUT                         = 'timeout';
    const TIMESTAMP_MS                    = 'timestamp-ms';
    const TIMESTAMP_SECONDS               = 'timestamp-seconds';
    const TITLE                           = 'title';
    const TOOLBAR                         = 'toolbar';
    const TOOLBAR_TARGET                  = 'toolbar-target';
    const TOP                             = 'top';
    const TOUCH_KEYBOARD_EDITABLE         = 'touch-keyboard-editable';
    const TRACKING                        = 'tracking';
    const TRANSFORM                       = 'transform';
    const TRANSFORMED                     = 'transformed';
    const TRANSFORM_BOX                   = 'transform-box';
    const TRANSFORM_ORIGIN                = 'transform-origin';
    const TRANSFORM_STYLE                 = 'transform-style';
    const TRANSITION                      = 'transition';
    const TRANSITION_DELAY                = 'transition-delay';
    const TRANSITION_DURATION             = 'transition-duration';
    const TRANSITION_PROPERTY             = 'transition-property';
    const TRANSITION_TIMING_FUNCTION      = 'transition-timing-function';
    const TRANSLATE                       = 'translate';
    const TRANSLATE_X                     = 'translate-x';
    const TRANSLATE_Y                     = 'translate-y';
    const TRIGGER                         = 'trigger';
    const TYPE                            = 'type';
    const TYPEOF                          = 'typeof';
    const U1                              = 'u1';
    const U2                              = 'u2';
    const UNICODE                         = 'unicode';
    const UNICODE_BIDI                    = 'unicode-bidi';
    const UPDATE                          = 'update';
    const USEMAP                          = 'usemap';
    const USER_SELECT                     = 'user-select';
    const VALIDATION_FOR                  = 'validation-for';
    const VALIGN                          = 'valign';
    const VALUE                           = 'value';
    const VALUES                          = 'values';
    const VECTOR_EFFECT                   = 'vector-effect';
    const VERIFY_ERROR                    = 'verify-error';
    const VERIFY_XHR                      = 'verify-xhr';
    const VERSION                         = 'version';
    const VERTICAL_ALIGN                  = 'vertical-align';
    const VERT_ADV_Y                      = 'vert-adv-y';
    const VERT_ORIGIN_X                   = 'vert-origin-x';
    const VERT_ORIGIN_Y                   = 'vert-origin-y';
    const VIEWBOX                         = 'viewbox';
    const VIEWPORT                        = 'viewport';
    const VIEWPORT_MARGINS                = 'viewport-margins';
    const VIEWTARGET                      = 'viewtarget';
    const VISIBILITY                      = 'visibility';
    const VISIBLE_COUNT                   = 'visible-count';
    const VISIBLE_WHEN_INVALID            = 'visible-when-invalid';
    const VOCAB                           = 'vocab';
    const VOICE_FAMILY                    = 'voice-family';
    const VOLUME                          = 'volume';
    const VSPACE                          = 'vspace';
    const WEEK_DAY_FORMAT                 = 'week-day-format';
    const WHEN_ENDED                      = 'when-ended';
    const WHITE_SPACE                     = 'white-space';
    const WIDOWS                          = 'widows';
    const WIDTH                           = 'width';
    const WORD_BREAK                      = 'word-break';
    const WORD_SPACING                    = 'word-spacing';
    const WORD_WRAP                       = 'word-wrap';
    const WRAP                            = 'wrap';
    const WRITING_MODE                    = 'writing-mode';
    const X                               = 'x';
    const X1                              = 'x1';
    const X2                              = 'x2';
    const XCHANNELSELECTOR                = 'xchannelselector';
    const XLINK_ACTUATE                   = 'xlink-actuate';
    const XLINK_ARCROLE                   = 'xlink-arcrole';
    const XLINK_HREF                      = 'xlink-href';
    const XLINK_ROLE                      = 'xlink-role';
    const XLINK_SHOW                      = 'xlink-show';
    const XLINK_TITLE                     = 'xlink-title';
    const XLINK_TYPE                      = 'xlink-type';
    const XMLNS                           = 'xmlns';
    const XMLNS_XLINK                     = 'xmlns-xlink';
    const XML_LANG                        = 'xml-lang';
    const XML_SPACE                       = 'xml-space';
    const XSSI_PREFIX                     = 'xssi-prefix';
    const Y                               = 'y';
    const Y1                              = 'y1';
    const Y2                              = 'y2';
    const YCHANNELSELECTOR                = 'ychannelselector';
    const ZOOMANDPAN                      = 'zoomandpan';
    const ZOOM_END                        = 'zoom-end';
    const ZOOM_START                      = 'zoom-start';
    const Z_INDEX                         = 'z-index';
    const _MOZ_APPEARANCE                 = '-moz-appearance';
    const _WEBKIT_APPEARANCE              = '-webkit-appearance';
    const _WEBKIT_TAP_HIGHLIGHT_COLOR     = '-webkit-tap-highlight-color';
    const Z                               = 'z';

    const ALL_AMP       = [self::AMP, self::AMP_EMOJI, self::AMP_EMOJI_ALT];
    const ALL_AMP4ADS   = [self::AMP4ADS, self::AMP4ADS_EMOJI, self::AMP4ADS_EMOJI_ALT];
    const ALL_AMP4EMAIL = [self::AMP4EMAIL, self::AMP4EMAIL_EMOJI, self::AMP4EMAIL_EMOJI_ALT];

    const ALL_BOILERPLATES = [self::AMP_BOILERPLATE, self::AMP4ADS_BOILERPLATE, self::AMP4EMAIL_BOILERPLATE];

    const TYPE_HTML       = 'text/html';
    const TYPE_JSON       = 'application/json';
    const TYPE_LD_JSON    = 'application/ld+json';
    const TYPE_PDF        = 'application/pdf';
    const TYPE_MODULE     = 'module';
    const TYPE_TEXT_PLAIN = 'text/plain';

    const REL_AMPHTML       = 'amphtml';
    const REL_CANONICAL     = 'canonical';
    const REL_DNS_PREFETCH  = 'dns-prefetch';
    const REL_ICON          = 'icon';
    const REL_MODULEPRELOAD = 'modulepreload';
    const REL_NOAMPHTML     = 'noamphtml';
    const REL_NOFOLLOW      = 'nofollow';
    const REL_PRECONNECT    = 'preconnect';
    const REL_PREFETCH      = 'prefetch';
    const REL_PRELOAD       = 'preload';
    const REL_PRERENDER     = 'prerender';
    const REL_STYLESHEET    = 'stylesheet';

    const DATA_ACCOUNT                     = 'data-account';
    const DATA_ACTION                      = 'data-action';
    const DATA_AD_TAG_URL                  = 'data-ad-tag-url';
    const DATA_AMPDEVMODE                  = 'data-ampdevmode';
    const DATA_AMP_AUTOCOMPLETE_OPT_IN     = 'data-amp-autocomplete-opt-in';
    const DATA_AMP_BIND_SRC                = 'data-amp-bind-src';
    const DATA_AMP_STORY_PLAYER_POSTER_IMG = 'data-amp-story-player-poster-img';
    const DATA_APESTER_CHANNEL_TOKEN       = 'data-apester-channel-token';
    const DATA_APESTER_MEDIA_ID            = 'data-apester-media-id';
    const DATA_API_KEY                     = 'data-api-key';
    const DATA_APP_KEY                     = 'data-app-key';
    const DATA_BCID                        = 'data-bcid';
    const DATA_BORDER                      = 'data-border';
    const DATA_CALL_TO_ACTION_LABEL        = 'data-call-to-action-label';
    const DATA_CARDS                       = 'data-cards';
    const DATA_CAROUSEL                    = 'data-carousel';
    const DATA_CLIENT                      = 'data-client';
    const DATA_COLOR                       = 'data-color';
    const DATA_COMMENTS                    = 'data-comments';
    const DATA_CONTENT                     = 'data-content';
    const DATA_CONTENT_ID                  = 'data-content-id';
    const DATA_CONTENT_TYPE                = 'data-content-type';
    const DATA_CONVERSATION                = 'data-conversation';
    const DATA_COUNT_UP                    = 'data-count-up';
    const DATA_CSS_STRICT                  = 'data-css-strict';
    const DATA_DISMISS_HREF                = 'data-dismiss-href';
    const DATA_DO                          = 'data-do';
    const DATA_DOMAIN                      = 'data-domain';
    const DATA_DYNAMIC                     = 'data-dynamic';
    const DATA_EID                         = 'data-eid';
    const DATA_EMBEDCODE                   = 'data-embedcode';
    const DATA_EMBEDLIVE                   = 'data-embedlive';
    const DATA_EMBEDPARENT                 = 'data-embedparent';
    const DATA_EMBEDTYPE                   = 'data-embedtype';
    const DATA_EMBED_ID                    = 'data-embed-id';
    const DATA_ENABLE_REFRESH              = 'data-enable-refresh';
    const DATA_ENDSCREEN_ENABLE            = 'data-endscreen-enable';
    const DATA_EPISODE                     = 'data-episode';
    const DATA_EPISODES                    = 'data-episodes';
    const DATA_EXIT_MODE                   = 'data-exit-mode';
    const DATA_FORMULA                     = 'data-formula';
    const DATA_GFYID                       = 'data-gfyid';
    const DATA_GISTID                      = 'data-gistid';
    const DATA_HERO                        = 'data-hero';
    const DATA_HERO_CANDIDATE              = 'data-hero-candidate';
    const DATA_HREF                        = 'data-href';
    const DATA_ID                          = 'data-id';
    const DATA_IFRAME_SRC                  = 'data-iframe-src';
    const DATA_IMG                         = 'data-img';
    const DATA_IMGUR_ID                    = 'data-imgur-id';
    const DATA_INFO                        = 'data-info';
    const DATA_INTRO                       = 'data-intro';
    const DATA_ITEM                        = 'data-item';
    const DATA_ITEMS                       = 'data-items';
    const DATA_ITEM_INFO                   = 'data-item-info';
    const DATA_KEY                         = 'data-key';
    const DATA_LABEL                       = 'data-label';
    const DATA_LIGHT                       = 'data-light';
    const DATA_LIMIT                       = 'data-limit';
    const DATA_LIVE_CHANNELID              = 'data-live-channelid';
    const DATA_LOCALE                      = 'data-locale';
    const DATA_MAX_ITEMS_PER_PAGE          = 'data-max-items-per-page';
    const DATA_MEDIAID                     = 'data-mediaid';
    const DATA_MEDIA_HASHED_ID             = 'data-media-hashed-id';
    const DATA_MEDIA_ID                    = 'data-media-id';
    const DATA_MINIMUM_DATE_FACTOR         = 'data-minimum-date-factor';
    const DATA_MODE                        = 'data-mode';
    const DATA_MOMENTID                    = 'data-momentid';
    const DATA_MULTI_SIZE                  = 'data-multi-size';
    const DATA_MUTE                        = 'data-mute';
    const DATA_MY_CONTENT                  = 'data-my-content';
    const DATA_NAME                        = 'data-name';
    const DATA_ORIGIN                      = 'data-origin';
    const DATA_OUTRO                       = 'data-outro';
    const DATA_OUTSTREAM                   = 'data-outstream';
    const DATA_PARAM_VIDEOID               = 'data-param-videoid';
    const DATA_PARTNER                     = 'data-partner';
    const DATA_PCODE                       = 'data-pcode';
    const DATA_PID                         = 'data-pid';
    const DATA_PLAYER                      = 'data-player';
    const DATA_PLAYERID                    = 'data-playerid';
    const DATA_PLAYER_ID                   = 'data-player-id';
    const DATA_PLAYLIST                    = 'data-playlist';
    const DATA_PLAYLISTID                  = 'data-playlistid';
    const DATA_PLAYLIST_ID                 = 'data-playlist-id';
    const DATA_POLL_INTERVAL               = 'data-poll-interval';
    const DATA_PRODUCT_CODE                = 'data-product-code';
    const DATA_PROFILEID                   = 'data-profileid';
    const DATA_PUB_ID                      = 'data-pub-id';
    const DATA_RIDDLE_ID                   = 'data-riddle-id';
    const DATA_SCANNED_ELEMENT             = 'data-scanned-element';
    const DATA_SCANNED_ELEMENT_TYPE        = 'data-scanned-element-type';
    const DATA_SCOPED_KEYWORDS             = 'data-scoped-keywords';
    const DATA_SECRET_TOKEN                = 'data-secret-token';
    const DATA_SHARE_BUTTONS               = 'data-share-buttons';
    const DATA_SHARE_ENDPOINT              = 'data-share-endpoint';
    const DATA_SHARE_MEDIA                 = 'data-share-media';
    const DATA_SHARE_URL                   = 'data-share-url';
    const DATA_SHARING                     = 'data-sharing';
    const DATA_SHARING_ENABLE              = 'data-sharing-enable';
    const DATA_SHORTCODE                   = 'data-shortcode';
    const DATA_SHOW_IF_HREF                = 'data-show-if-href';
    const DATA_SITEKEY                     = 'data-sitekey';
    const DATA_SITE_ID                     = 'data-site-id';
    const DATA_SLOT                        = 'data-slot';
    const DATA_SORT_TIME                   = 'data-sort-time';
    const DATA_SPEAKABLE                   = 'data-speakable';
    const DATA_SRC                         = 'data-src';
    const DATA_START                       = 'data-start';
    const DATA_STORY_SUPPORTS_LANDSCAPE    = 'data-story-supports-landscape';
    const DATA_STREAMTYPE                  = 'data-streamtype';
    const DATA_TAG                         = 'data-tag';
    const DATA_TAGS                        = 'data-tags';
    const DATA_TERMS                       = 'data-terms';
    const DATA_TILE                        = 'data-tile';
    const DATA_TIMELINE_ID                 = 'data-timeline-id';
    const DATA_TIMELINE_OWNER_SCREEN_NAME  = 'data-timeline-owner-screen-name';
    const DATA_TIMELINE_SCREEN_NAME        = 'data-timeline-screen-name';
    const DATA_TIMELINE_SLUG               = 'data-timeline-slug';
    const DATA_TIMELINE_SOURCE_TYPE        = 'data-timeline-source-type';
    const DATA_TIMELINE_URL                = 'data-timeline-url';
    const DATA_TIMELINE_USER_ID            = 'data-timeline-user-id';
    const DATA_TOMBSTONE                   = 'data-tombstone';
    const DATA_TOOLTIP_ICON                = 'data-tooltip-icon';
    const DATA_TRACKID                     = 'data-trackid';
    const DATA_TRACKING_IDS                = 'data-tracking-ids';
    const DATA_TWEETID                     = 'data-tweetid';
    const DATA_UI_HIGHLIGHT                = 'data-ui-highlight';
    const DATA_UI_LOGO                     = 'data-ui-logo';
    const DATA_UPDATE_TIME                 = 'data-update-time';
    const DATA_URL                         = 'data-url';
    const DATA_VIDEO                       = 'data-video';
    const DATA_VIDEOID                     = 'data-videoid';
    const DATA_VINEID                      = 'data-vineid';
    const DATA_VISUAL                      = 'data-visual';
    const DATA_VOICE                       = 'data-voice';
    const DATA_WEBCARE_ID                  = 'data-webcare-id';
    const DATA_WIDGET_ID                   = 'data-widget-id';
    const DATA_WIDGET_TYPE                 = 'data-widget-type';
    const DATA_X                           = 'data-x';
    const DATA_Y                           = 'data-y';
    const DATA_ZOOM                        = 'data-zoom';

    const CROSSORIGIN_ANONYMOUS       = 'anonymous';
    const CROSSORIGIN_USE_CREDENTIALS = 'use-credentials';
}
PK.3Y�����@bunyad-amp/vendor/ampproject/amp-toolbox/src/Html/LengthUnit.php<?php

namespace AmpProject\Html;

/**
 * Unit of a length.
 *
 * This interface defines the available units that can be recognized in HTML and/or CSS dimensions.
 *
 * @see https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Values_and_units
 *
 * @package ampproject/amp-toolbox
 */
final class LengthUnit
{
    /**
     * Centimeters.
     *
     * 1cm = 96px/2.54.
     *
     * @var string
     */
    const CM = 'cm';

    /**
     * Millimeters.
     *
     * 1mm = 1/10th of 1cm.
     *
     * @var string
     */
    const MM = 'mm';

    /**
     * Quarter-millimeters.
     *
     * 1Q = 1/40th of 1cm.
     *
     * @var string
     */
    const Q = 'q';

    /**
     * Inches.
     *
     * 1in = 2.54cm = 96px.
     *
     * @var string
     */
    const IN = 'in';

    /**
     * Picas.
     *
     * 1pc = 1/6th of 1in.
     *
     * @var string
     */
    const PC = 'pc';

    /**
     * Points.
     *
     * 1pt = 1/72th of 1in.
     *
     * @var string
     */
    const PT = 'pt';

    /**
     * Pixels.
     *
     * 1px = 1/96th of 1in.
     *
     * @var string
     */
    const PX = 'px';

    /**
     * Font size of the parent, in the case of typographical properties like font-size, and font size of the element
     * itself, in the case of other properties like width.
     *
     * @var string
     */
    const EM = 'em';

    /**
     * The x-height of the element's font.
     *
     * @var string
     */
    const EX = 'ex';

    /**
     * The advance measure (width) of the glyph "0" of the element's font.
     *
     * @var string
     */
    const CH = 'ch';

    /**
     * Font size of the root element.
     *
     * @var string
     */
    const REM = 'rem';

    /**
     * Line height of the element.
     *
     * @var string
     */
    const LH = 'lh';

    /**
     * 1% of the viewport's width.
     *
     * @var string
     */
    const VW = 'vw';

    /**
     * 1% of the viewport's height.
     *
     * @var string
     */
    const VH = 'vh';

    /**
     * 1% of the viewport's smaller dimension.
     *
     * @var string
     */
    const VMIN = 'vmin';

    /**
     * 1% of the viewport's larger dimension.
     *
     * @var string
     */
    const VMAX = 'vmax';

    /**
     * Set of known absolute units.
     *
     * @var string[]
     */
    const ABSOLUTE_UNITS = [
        self::CM,
        self::MM,
        self::Q,
        self::IN,
        self::PC,
        self::PT,
        self::PX,
    ];

    /**
     * Set of known relative units.
     *
     * @var string[]
     */
    const RELATIVE_UNITS = [
        self::EM,
        self::EX,
        self::CH,
        self::REM,
        self::LH,
        self::VW,
        self::VH,
        self::VMIN,
        self::VMAX,
    ];

    /**
     * Pixels per inch resolution to use for conversions.
     *
     * @var int
     */
    const PPI = 96;

    /**
     * Centimeters per inch.
     *
     * @var float
     */
    const CM_PER_IN = 2.54;

    /**
     * Convert a unit-based length into a number of pixels.
     *
     * @param int|float $value Value to convert.
     * @param string    $unit  Unit of the value.
     * @return int|float|false Converted value, or false if it could not be converted.
     */
    public static function convertIntoPixels($value, $unit)
    {
        if (0 === $value) {
            return 0;
        }
        switch ($unit) {
            case self::CM:
                return $value * self::PPI / self::CM_PER_IN;
            case self::MM:
                return $value * self::PPI / self::CM_PER_IN / 10;
            case self::Q:
                return $value * self::PPI / self::CM_PER_IN / 40;
            case self::IN:
                return $value * self::PPI;
            case self::PC:
                return $value * self::PPI / 6;
            case self::PT:
                return $value * self::PPI / 72;
            case self::PX:
                // No conversion needed for pixel values.
                return $value;
            default:
                return false;
        }
    }
}
PK.3Y�����Bbunyad-amp/vendor/ampproject/amp-toolbox/src/Html/LowerCaseTag.php<?php

namespace AmpProject\Html;

/**
 * Interface with constants for the different types of tags.
 *
 * @package ampproject/amp-toolbox
 */
interface LowerCaseTag extends Tag
{
}
PK.3Y{=EEHbunyad-amp/vendor/ampproject/amp-toolbox/src/Html/RequestDestination.php<?php

namespace AmpProject\Html;

/**
 * Interface with constants for the different request destinations that are supported.
 *
 * For the purposes of the AMP implementation, we are only interested in the
 * request destinations that are valid values for the 'as' attribute in preloads.
 *
 * Full list of request destinations:
 * @see https://fetch.spec.whatwg.org/#concept-request-destination
 *
 * @package ampproject/amp-toolbox
 */
interface RequestDestination
{
    /**
     * Audio file, as typically used in <audio>.
     *
     * @var string
     */
    const AUDIO = 'audio';

    /**
     * An HTML document intended to be embedded by a <frame> or <iframe>.
     *
     * @var string
     */
    const DOCUMENT = 'document';

    /**
     * A resource to be embedded inside an <embed> element.
     *
     * @var string
     */
    const EMBED = 'embed';

    /**
     * Resource to be accessed by a fetch or XHR request, such as an ArrayBuffer or JSON file.
     *
     * @var string
     */
    const FETCH = 'fetch';

    /**
     * Font file.
     *
     * @var string
     */
    const FONT = 'font';

    /**
     * Image file.
     *
     * @var string
     */
    const IMAGE = 'image';

    /**
     * A resource to be embedded inside an <object> element.
     *
     * @var string
     */
    const OBJECT = 'object';

    /**
     * JavaScript file.
     *
     * @var string
     */
    const SCRIPT = 'script';

    /**
     * CSS stylesheet.
     *
     * @var string
     */
    const STYLE = 'style';

    /**
     * WebVTT file.
     *
     * @var string
     */
    const TRACK = 'track';

    /**
     * A JavaScript web worker or shared worker.
     *
     * @var string
     */
    const WORKER = 'worker';

    /**
     * Video file, as typically used in <video>.
     *
     * @var string
     */
    const VIDEO = 'video';
}
PK.3Yօ�r0r0:bunyad-amp/vendor/ampproject/amp-toolbox/src/Html/Role.php<?php

namespace AmpProject\Html;

/**
 * Interface with constants for the different types of accessibility roles.
 *
 * @see https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques
 *
 * @package ampproject/amp-toolbox
 */
interface Role
{
    /**
     * A message with an alert or error information.
     *
     * @var string
     */
    const ALERT = 'alert';

    /**
     * A separate window with an alert or error information.
     *
     * @var string
     */
    const ALERTDIALOG = 'alertdialog';

    /**
     * A software unit executing a set of tasks for its users.
     *
     * @var string
     */
    const APPLICATION = 'application';

    /**
     * A section of a page that could easily stand on its own on a page, in a document, or on a website.
     *
     * @var string
     */
    const ARTICLE = 'article';

    /**
     * A region that contains mostly site-oriented content, rather than page-specific content.
     *
     * @var string
     */
    const BANNER = 'banner';

    /**
     * Allows for user-triggered actions.
     *
     * @var string
     */
    const BUTTON = 'button';

    /**
     * An element as being a cell in a tabular container that does not contain column or row header information.
     *
     * @var string
     */
    const CELL = 'cell';

    /**
     * A control that has three possible values, (true, false, mixed).
     *
     * @var string
     */
    const CHECKBOX = 'checkbox';

    /**
     * A table cell containing header information for a column.
     *
     * @var string
     */
    const COLUMNHEADER = 'columnheader';

    /**
     * Combobox is a presentation of a select, where users can type to locate a selected item.
     *
     * @var string
     */
    const COMBOBOX = 'combobox';

    /**
     * A supporting section of the document, designed to be complementary to the main content at a similar level in the
     * DOM hierarchy, but remains meaningful when separated from the main content.
     *
     * @var string
     */
    const COMPLEMENTARY = 'complementary';

    /**
     * A large perceivable region that contains information about the parent document.
     *
     * @var string
     */
    const CONTENTINFO = 'contentinfo';

    /**
     * A definition of a term or concept.
     *
     * @var string
     */
    const DEFINITION = 'definition';

    /**
     * Descriptive content for a page element which references this element via describedby.
     *
     * @var string
     */
    const DESCRIPTION = 'description';

    /**
     * A dialog is a small application window that sits above the application and is designed to interrupt the current
     * processing of an application in order to prompt the user to enter information or require a response.
     *
     * @var string
     */
    const DIALOG = 'dialog';

    /**
     * A list of references to members of a single group.
     *
     * @var string
     */
    const DIRECTORY = 'directory';

    /**
     * Content that contains related information, such as a book.
     *
     * @var string
     */
    const DOCUMENT = 'document';

    /**
     * A scrollable list of articles where scrolling may cause articles to be added to or removed from either end of the
     * list.
     *
     * @var string
     */
    const FEED = 'feed';

    /**
     * A figure inside page content where appropriate semantics do not already exist.
     *
     * @var string
     */
    const FIGURE = 'figure';

    /**
     * A landmark region that contains a collection of items and objects that, as a whole, combine to create a form.
     *
     * @var string
     */
    const FORM = 'form';

    /**
     * A grid contains cells of tabular data arranged in rows and columns (e.g., a table).
     *
     * @var string
     */
    const GRID = 'grid';

    /**
     * A gridcell is a table cell in a grid. Gridcells may be active, editable, and selectable. Cells may have
     * relationships such as controls to address the application of functional relationships.
     *
     * @var string
     */
    const GRIDCELL = 'gridcell';

    /**
     * A group is a section of user interface objects which would not be included in a page summary or table of contents
     * by an assistive technology. See region for sections of user interface objects that should be included in a page
     * summary or table of contents.
     *
     * @var string
     */
    const GROUP = 'group';

    /**
     * A heading for a section of the page.
     *
     * @var string
     */
    const HEADING = 'heading';

    /**
     * An img is a container for a collection elements that form an image.
     *
     * @var string
     */
    const IMG = 'img';

    /**
     * Interactive reference to a resource (note, that in XHTML 2.0 any element can have an href attribute and thus be a
     * link)
     *
     * @var string
     */
    const LINK = 'link';

    /**
     * Group of non-interactive list items. Lists contain children whose role is listitem.
     *
     * Uses an underscore as "list" is a conflicting PHP keyword.
     *
     * @var string
     */
    const LIST_ = 'list';

    /**
     * A list box is a widget that allows the user to select one or more items from a list. Items within the list are
     * static and may contain images. List boxes contain children whose role is option.
     *
     * @var string
     */
    const LISTBOX = 'listbox';

    /**
     * A single item in a list.
     *
     * @var string
     */
    const LISTITEM = 'listitem';

    /**
     * A region where new information is added and old information may disappear such as chat logs, messaging, game log
     * or an error log. In contrast to other regions, in this role there is a relationship between the arrival of new
     * items in the log and the reading order. The log contains a meaningful sequence and new information is added only
     * to the end of the log, not at arbitrary points.
     *
     * @var string
     */
    const LOG = 'log';

    /**
     * The main content of a document.
     *
     * @var string
     */
    const MAIN = 'main';

    /**
     * A marquee is used to scroll text across the page.
     *
     * @var string
     */
    const MARQUEE = 'marquee';

    /**
     * Content that represents a mathematical expression.
     *
     * @var string
     */
    const MATH = 'math';

    /**
     * Offers a list of choices to the user.
     *
     * @var string
     */
    const MENU = 'menu';

    /**
     * A menubar is a container of menu items. Each menu item may activate a new sub-menu. Navigation behavior should be
     * similar to the typical menu bar graphical user interface.
     *
     * @var string
     */
    const MENUBAR = 'menubar';

    /**
     * A link in a menu. This is an option in a group of choices contained in a menu.
     *
     * @var string
     */
    const MENUITEM = 'menuitem';

    /**
     * Defines a menuitem which is checkable (tri-state).
     *
     * @var string
     */
    const MENUITEMCHECKBOX = 'menuitemcheckbox';

    /**
     * Indicates a menu item which is part of a group of menuitemradio roles.
     *
     * @var string
     */
    const MENUITEMRADIO = 'menuitemradio';

    /**
     * A collection of navigational elements (usually links) for navigating the document or related documents.
     *
     * @var string
     */
    const NAVIGATION = 'navigation';

    /**
     * An element whose implicit native role semantics will not be mapped to the accessibility API.
     *
     * @var string
     */
    const NONE = 'none';

    /**
     * A section whose content is parenthetic or ancillary to the main content of the resource.
     *
     * @var string
     */
    const NOTE = 'note';

    /**
     * A selectable item in a list represented by a select.
     *
     * @var string
     */
    const OPTION = 'option';

    /**
     * An element whose role is presentational does not need to be mapped to the accessibility API.
     *
     * @var string
     */
    const PRESENTATION = 'presentation';

    /**
     * Used by applications for tasks that take a long time to execute, to show the execution progress.
     *
     * @var string
     */
    const PROGRESSBAR = 'progressbar';

    /**
     * A radio is an option in single-select list. Only one radio control in a radiogroup can be selected at the same
     * time.
     *
     * @var string
     */
    const RADIO = 'radio';

    /**
     * A group of radio controls.
     *
     * @var string
     */
    const RADIOGROUP = 'radiogroup';

    /**
     * Region is a large perceivable section on the web page.
     *
     * @var string
     */
    const REGION = 'region';

    /**
     * A row of table cells.
     *
     * @var string
     */
    const ROW = 'row';

    /**
     * A structure containing one or more row elements in a tabular container.
     *
     * @var string
     */
    const ROWGROUP = 'rowgroup';

    /**
     * A table cell containing header information for a row.
     *
     * @var string
     */
    const ROWHEADER = 'rowheader';

    /**
     * Scroll bar to navigate the horizontal or vertical dimensions of the page.
     *
     * @var string
     */
    const SCROLLBAR = 'scrollbar';

    /**
     * A section of the page used to search the page, site, or collection of sites.
     *
     * @var string
     */
    const SEARCH = 'search';

    /**
     * An entry field to provide a query to search for.
     *
     * @var string
     */
    const SEARCHBOX = 'searchbox';

    /**
     * A line or bar that separates and distinguishes sections of content.
     *
     * @var string
     */
    const SEPARATOR = 'separator';

    /**
     * A user input where the user selects an input in a given range. This form of range expects an analog keyboard
     * interface.
     *
     * @var string
     */
    const SLIDER = 'slider';

    /**
     * A form of Range that expects a user selecting from discrete choices.
     *
     * @var string
     */
    const SPINBUTTON = 'spinbutton';

    /**
     * This is a container for process advisory information to give feedback to the user.
     *
     * @var string
     */
    const STATUS = 'status';

    /**
     * Functionally identical to a checkbox but represents the states "on"/"off" instead of "checked"/"unchecked".
     *
     * Uses an underscore as "list" is a conflicting PHP keyword.
     *
     * @var string
     */
    const SWITCH_ = 'switch';

    /**
     * A header for a tabpanel.
     *
     * @var string
     */
    const TAB = 'tab';

    /**
     * A non-interactive table structure containing data arranged in rows and columns.
     *
     * @var string
     */
    const TABLE = 'table';

    /**
     * A list of tabs, which are references to tabpanels.
     *
     * @var string
     */
    const TABLIST = 'tablist';

    /**
     * Tabpanel is a container for the resources associated with a tab.
     *
     * @var string
     */
    const TABPANEL = 'tabpanel';

    /**
     * A word or phrase with a corresponding definition.
     *
     * @var string
     */
    const TERM = 'term';

    /**
     * Inputs that allow free-form text as their value.
     *
     * @var string
     */
    const TEXTBOX = 'textbox';

    /**
     * A numerical counter which indicates an amount of elapsed time from a start point, or the time remaining until an
     * end point.
     *
     * @var string
     */
    const TIMER = 'timer';

    /**
     * A toolbar is a collection of commonly used functions represented in compact visual form.
     *
     * @var string
     */
    const TOOLBAR = 'toolbar';

    /**
     * A popup that displays a description for an element when a user passes over or rests on that element. Supplement
     * to the normal tooltip processing of the user agent.
     *
     * @var string
     */
    const TOOLTIP = 'tooltip';

    /**
     * A form of a list having groups inside groups, where sub trees can be collapsed and expanded.
     *
     * @var string
     */
    const TREE = 'tree';

    /**
     * A grid whose rows can be expanded and collapsed in the same manner as for a tree.
     *
     * @var string
     */
    const TREEGRID = 'treegrid';

    /**
     * An option item of a tree. This is an element within a tree that may be expanded or collapsed.
     *
     * @var string
     */
    const TREEITEM = 'treeitem';
}
PK.3Y��[([(9bunyad-amp/vendor/ampproject/amp-toolbox/src/Html/Tag.php<?php

namespace AmpProject\Html;

/**
 * Interface with constants for the different types of tags.
 *
 * @package ampproject/amp-toolbox
 */
interface Tag
{
    const A                   = 'a';
    const ABBR                = 'abbr';
    const ACRONYM             = 'acronym';
    const ADDRESS             = 'address';
    const APPLET              = 'applet';
    const AREA                = 'area';
    const ARTICLE             = 'article';
    const ASIDE               = 'aside';
    const AUDIO               = 'audio';
    const B                   = 'b';
    const BASE                = 'base';
    const BASEFONT            = 'basefont';
    const BDI                 = 'bdi';
    const BDO                 = 'bdo';
    const BGSOUND             = 'bgsound';
    const BIG                 = 'big';
    const BLOCKQUOTE          = 'blockquote';
    const BODY                = 'body';
    const BR                  = 'br';
    const BUTTON              = 'button';
    const CANVAS              = 'canvas';
    const CAPTION             = 'caption';
    const CENTER              = 'center';
    const CIRCLE              = 'circle';
    const CITE                = 'cite';
    const CLIPPATH            = 'clippath';
    const CODE                = 'code';
    const COL                 = 'col';
    const COLGROUP            = 'colgroup';
    const DATA                = 'data';
    const DATALIST            = 'datalist';
    const DD                  = 'dd';
    const DEFS                = 'defs';
    const DEL                 = 'del';
    const DESC                = 'desc';
    const DETAILS             = 'details';
    const DFN                 = 'dfn';
    const DIR                 = 'dir';
    const DIV                 = 'div';
    const DL                  = 'dl';
    const DT                  = 'dt';
    const ELLIPSE             = 'ellipse';
    const EM                  = 'em';
    const EMBED               = 'embed';
    const FEBLEND             = 'feblend';
    const FECOLORMATRIX       = 'fecolormatrix';
    const FECOMPONENTTRANSFER = 'fecomponenttransfer';
    const FECOMPOSITE         = 'fecomposite';
    const FECONVOLVEMATRIX    = 'feconvolvematrix';
    const FEDIFFUSELIGHTING   = 'fediffuselighting';
    const FEDISPLACEMENTMAP   = 'fedisplacementmap';
    const FEDISTANTLIGHT      = 'fedistantlight';
    const FEDROPSHADOW        = 'fedropshadow';
    const FEFLOOD             = 'feflood';
    const FEFUNCA             = 'fefunca';
    const FEFUNCB             = 'fefuncb';
    const FEFUNCG             = 'fefuncg';
    const FEFUNCR             = 'fefuncr';
    const FEGAUSSIANBLUR      = 'fegaussianblur';
    const FEMERGE             = 'femerge';
    const FEMERGENODE         = 'femergenode';
    const FEMORPHOLOGY        = 'femorphology';
    const FEOFFSET            = 'feoffset';
    const FEPOINTLIGHT        = 'fepointlight';
    const FESPECULARLIGHTING  = 'fespecularlighting';
    const FESPOTLIGHT         = 'fespotlight';
    const FETILE              = 'fetile';
    const FETURBULENCE        = 'feturbulence';
    const FIELDSET            = 'fieldset';
    const FIGCAPTION          = 'figcaption';
    const FIGURE              = 'figure';
    const FILTER              = 'filter';
    const FONT                = 'font';
    const FOOTER              = 'footer';
    const FORM                = 'form';
    const FRAME               = 'frame';
    const FRAMESET            = 'frameset';
    const G                   = 'g';
    const GLYPH               = 'glyph';
    const GLYPHREF            = 'glyphref';
    const H1                  = 'h1';
    const H2                  = 'h2';
    const H3                  = 'h3';
    const H4                  = 'h4';
    const H5                  = 'h5';
    const H6                  = 'h6';
    const HEAD                = 'head';
    const HEADER              = 'header';
    const HGROUP              = 'hgroup';
    const HKERN               = 'hkern';
    const HR                  = 'hr';
    const HTML                = 'html';
    const I                   = 'i';
    const IFRAME              = 'iframe';
    const IMAGE               = 'image';
    const IMG                 = 'img';
    const INPUT               = 'input';
    const INS                 = 'ins';
    const ISINDEX             = 'isindex';
    const KBD                 = 'kbd';
    const KEYGEN              = 'keygen';
    const LABEL               = 'label';
    const LEGEND              = 'legend';
    const LI                  = 'li';
    const LINE                = 'line';
    const LINEARGRADIENT      = 'lineargradient';
    const LINK                = 'link';
    const LISTING             = 'listing';
    const MAIN                = 'main';
    const MAP                 = 'map';
    const MARK                = 'mark';
    const MARKER              = 'marker';
    const MASK                = 'mask';
    const MENU                = 'menu';
    const META                = 'meta';
    const METADATA            = 'metadata';
    const METER               = 'meter';
    const MULTICOL            = 'multicol';
    const NAV                 = 'nav';
    const NEXTID              = 'nextid';
    const NOBR                = 'nobr';
    const NOFRAMES            = 'noframes';
    const NOSCRIPT            = 'noscript';
    const O_P                 = 'o:p'; // @todo Will this be usable at present given PHP DOM?
    const OBJECT              = 'object';
    const OL                  = 'ol';
    const OPTGROUP            = 'optgroup';
    const OPTION              = 'option';
    const OUTPUT              = 'output';
    const P                   = 'p';
    const PARAM               = 'param';
    const PATH                = 'path';
    const PATTERN             = 'pattern';
    const PICTURE             = 'picture';
    const POLYGON             = 'polygon';
    const POLYLINE            = 'polyline';
    const PRE                 = 'pre';
    const PROGRESS            = 'progress';
    const Q                   = 'Q';
    const RADIALGRADIENT      = 'radialgradient';
    const RB                  = 'rb';
    const RECT                = 'rect';
    const RP                  = 'rp';
    const RT                  = 'rt';
    const RTC                 = 'rtc';
    const RUBY                = 'ruby';
    const S                   = 's';
    const SAMP                = 'samp';
    const SCRIPT              = 'script';
    const SECTION             = 'section';
    const SELECT              = 'select';
    const SLOT                = 'slot';
    const SMALL               = 'small';
    const SOLIDCOLOR          = 'solidcolor';
    const SOURCE              = 'source';
    const SPACER              = 'spacer';
    const SPAN                = 'span';
    const STOP                = 'stop';
    const STRIKE              = 'strike';
    const STRONG              = 'strong';
    const STYLE               = 'style';
    const SUB                 = 'sub';
    const SUMMARY             = 'summary';
    const SUP                 = 'sup';
    const SVG                 = 'svg';
    const SWITCH_             = 'switch';
    const SYMBOL              = 'symbol';
    const TABLE               = 'table';
    const TBODY               = 'tbody';
    const TD                  = 'td';
    const TEMPLATE            = 'template';
    const TEXT                = 'text';
    const TEXTAREA            = 'textarea';
    const TEXTPATH            = 'textpath';
    const TFOOT               = 'tfoot';
    const TH                  = 'th';
    const THEAD               = 'thead';
    const TIME                = 'time';
    const TITLE               = 'title';
    const TR                  = 'tr';
    const TRACK               = 'track';
    const TREF                = 'tref';
    const TSPAN               = 'tspan';
    const TT                  = 'tt';
    const U                   = 'u';
    const UL                  = 'ul';
    const USE_                = 'use';
    const VAR_                = 'var';
    const VIDEO               = 'video';
    const VIEW                = 'view';
    const VKERN               = 'vkern';
    const WBR                 = 'wbr';
    const _DOCTYPE            = '!doctype';

    /**
     * HTML elements that are self-closing.
     *
     * @link https://www.w3.org/TR/html5/syntax.html#serializing-html-fragments
     *
     * @var string[]
     */
    const SELF_CLOSING_TAGS = [
        self::AREA,
        self::BASE,
        self::BASEFONT,
        self::BGSOUND,
        self::BR,
        self::COL,
        self::EMBED,
        self::FRAME,
        self::HR,
        self::IMG,
        self::INPUT,
        self::KEYGEN,
        self::LINK,
        self::META,
        self::PARAM,
        self::SOURCE,
        self::TRACK,
        self::WBR,
    ];

    /**
     * List of elements allowed in head.
     *
     * @link https://github.com/ampproject/amphtml/blob/445d6e3be8a5063e2738c6f90fdcd57f2b6208be/validator/engine/htmlparser.js#L83-L100
     * @link https://www.w3.org/TR/html5/document-metadata.html
     *
     * @var string[]
     */
    const ELEMENTS_ALLOWED_IN_HEAD = [
        self::TITLE,
        self::BASE,
        self::LINK,
        self::META,
        self::STYLE,
        self::NOSCRIPT,
        self::SCRIPT,
    ];

    /**
     * Set of HTML tags which should never trigger an implied open of a <head> or <body> element.
     */
    const STRUCTURE_TAGS = [
        self::_DOCTYPE,
        self::HTML,
        self::HEAD,
        self::BODY,
    ];

    /**
     * The set of HTML tags whose presence will implicitly close a <p> element.
     * For example '<p>foo<h1>bar</h1>' should parse the same as '<p>foo</p><h1>bar</h1>'.
     * @link https://www.w3.org/TR/html-markup/p.html
     */
    const P_CLOSING_TAGS = [
        self::ADDRESS,
        self::ARTICLE,
        self::ASIDE,
        self::BLOCKQUOTE,
        self::DIR,
        self::DL,
        self::FIELDSET,
        self::FOOTER,
        self::FORM,
        self::H1,
        self::H2,
        self::H3,
        self::H4,
        self::H5,
        self::H6,
        self::HEADER,
        self::HR,
        self::MENU,
        self::NAV,
        self::OL,
        self::P,
        self::PRE,
        self::SECTION,
        self::TABLE,
        self::UL,
    ];
}
PK.3YQ��d(d(Bbunyad-amp/vendor/ampproject/amp-toolbox/src/Html/UpperCaseTag.php<?php

namespace AmpProject\Html;

/**
 * Interface with constants for the different types of tags.
 *
 * @package ampproject/amp-toolbox
 */
interface UpperCaseTag
{
    const A                   = 'A';
    const ABBR                = 'ABBR';
    const ACRONYM             = 'ACRONYM';
    const ADDRESS             = 'ADDRESS';
    const APPLET              = 'APPLET';
    const AREA                = 'AREA';
    const ARTICLE             = 'ARTICLE';
    const ASIDE               = 'ASIDE';
    const AUDIO               = 'AUDIO';
    const B                   = 'B';
    const BASE                = 'BASE';
    const BASEFONT            = 'BASEFONT';
    const BDI                 = 'BDI';
    const BDO                 = 'BDO';
    const BGSOUND             = 'BGSOUND';
    const BIG                 = 'BIG';
    const BLOCKQUOTE          = 'BLOCKQUOTE';
    const BODY                = 'BODY';
    const BR                  = 'BR';
    const BUTTON              = 'BUTTON';
    const CANVAS              = 'CANVAS';
    const CAPTION             = 'CAPTION';
    const CENTER              = 'CENTER';
    const CIRCLE              = 'CIRCLE';
    const CITE                = 'CITE';
    const CLIPPATH            = 'CLIPPATH';
    const CODE                = 'CODE';
    const COL                 = 'COL';
    const COLGROUP            = 'COLGROUP';
    const DATA                = 'DATA';
    const DATALIST            = 'DATALIST';
    const DD                  = 'DD';
    const DEFS                = 'DEFS';
    const DEL                 = 'DEL';
    const DESC                = 'DESC';
    const DETAILS             = 'DETAILS';
    const DFN                 = 'DFN';
    const DIR                 = 'DIR';
    const DIV                 = 'DIV';
    const DL                  = 'DL';
    const DT                  = 'DT';
    const ELLIPSE             = 'ELLIPSE';
    const EM                  = 'EM';
    const EMBED               = 'EMBED';
    const FEBLEND             = 'FEBLEND';
    const FECOLORMATRIX       = 'FECOLORMATRIX';
    const FECOMPONENTTRANSFER = 'FECOMPONENTTRANSFER';
    const FECOMPOSITE         = 'FECOMPOSITE';
    const FECONVOLVEMATRIX    = 'FECONVOLVEMATRIX';
    const FEDIFFUSELIGHTING   = 'FEDIFFUSELIGHTING';
    const FEDISPLACEMENTMAP   = 'FEDISPLACEMENTMAP';
    const FEDISTANTLIGHT      = 'FEDISTANTLIGHT';
    const FEDROPSHADOW        = 'FEDROPSHADOW';
    const FEFLOOD             = 'FEFLOOD';
    const FEFUNCA             = 'FEFUNCA';
    const FEFUNCB             = 'FEFUNCB';
    const FEFUNCG             = 'FEFUNCG';
    const FEFUNCR             = 'FEFUNCR';
    const FEGAUSSIANBLUR      = 'FEGAUSSIANBLUR';
    const FEMERGE             = 'FEMERGE';
    const FEMERGENODE         = 'FEMERGENODE';
    const FEMORPHOLOGY        = 'FEMORPHOLOGY';
    const FEOFFSET            = 'FEOFFSET';
    const FEPOINTLIGHT        = 'FEPOINTLIGHT';
    const FESPECULARLIGHTING  = 'FESPECULARLIGHTING';
    const FESPOTLIGHT         = 'FESPOTLIGHT';
    const FETILE              = 'FETILE';
    const FETURBULENCE        = 'FETURBULENCE';
    const FIELDSET            = 'FIELDSET';
    const FIGCAPTION          = 'FIGCAPTION';
    const FIGURE              = 'FIGURE';
    const FILTER              = 'FILTER';
    const FONT                = 'FONT';
    const FOOTER              = 'FOOTER';
    const FORM                = 'FORM';
    const FRAME               = 'FRAME';
    const FRAMESET            = 'FRAMESET';
    const G                   = 'G';
    const GLYPH               = 'GLYPH';
    const GLYPHREF            = 'GLYPHREF';
    const H1                  = 'H1';
    const H2                  = 'H2';
    const H3                  = 'H3';
    const H4                  = 'H4';
    const H5                  = 'H5';
    const H6                  = 'H6';
    const HEAD                = 'HEAD';
    const HEADER              = 'HEADER';
    const HGROUP              = 'HGROUP';
    const HKERN               = 'HKERN';
    const HR                  = 'HR';
    const HTML                = 'HTML';
    const I                   = 'I';
    const IFRAME              = 'IFRAME';
    const IMAGE               = 'IMAGE';
    const IMG                 = 'IMG';
    const INPUT               = 'INPUT';
    const INS                 = 'INS';
    const ISINDEX             = 'ISINDEX';
    const KBD                 = 'KBD';
    const KEYGEN              = 'KEYGEN';
    const LABEL               = 'LABEL';
    const LEGEND              = 'LEGEND';
    const LI                  = 'LI';
    const LINE                = 'LINE';
    const LINEARGRADIENT      = 'LINEARGRADIENT';
    const LINK                = 'LINK';
    const LISTING             = 'LISTING';
    const MAIN                = 'MAIN';
    const MAP                 = 'MAP';
    const MARK                = 'MARK';
    const MARKER              = 'MARKER';
    const MASK                = 'MASK';
    const MENU                = 'MENU';
    const META                = 'META';
    const METADATA            = 'METADATA';
    const METER               = 'METER';
    const MULTICOL            = 'MULTICOL';
    const NAV                 = 'NAV';
    const NEXTID              = 'NEXTID';
    const NOBR                = 'NOBR';
    const NOFRAMES            = 'NOFRAMES';
    const NOSCRIPT            = 'NOSCRIPT';
    const O_P                 = 'O:P'; // @TODO WILL THIS BE USABLE AT PRESENT GIVEN PHP DOM?
    const OBJECT              = 'OBJECT';
    const OL                  = 'OL';
    const OPTGROUP            = 'OPTGROUP';
    const OPTION              = 'OPTION';
    const OUTPUT              = 'OUTPUT';
    const P                   = 'P';
    const PARAM               = 'PARAM';
    const PATH                = 'PATH';
    const PATTERN             = 'PATTERN';
    const PICTURE             = 'PICTURE';
    const POLYGON             = 'POLYGON';
    const POLYLINE            = 'POLYLINE';
    const PRE                 = 'PRE';
    const PROGRESS            = 'PROGRESS';
    const Q                   = 'Q';
    const RADIALGRADIENT      = 'RADIALGRADIENT';
    const RB                  = 'RB';
    const RECT                = 'RECT';
    const RP                  = 'RP';
    const RT                  = 'RT';
    const RTC                 = 'RTC';
    const RUBY                = 'RUBY';
    const S                   = 'S';
    const SAMP                = 'SAMP';
    const SCRIPT              = 'SCRIPT';
    const SECTION             = 'SECTION';
    const SELECT              = 'SELECT';
    const SLOT                = 'SLOT';
    const SMALL               = 'SMALL';
    const SOLIDCOLOR          = 'SOLIDCOLOR';
    const SOURCE              = 'SOURCE';
    const SPACER              = 'SPACER';
    const SPAN                = 'SPAN';
    const STOP                = 'STOP';
    const STRIKE              = 'STRIKE';
    const STRONG              = 'STRONG';
    const STYLE               = 'STYLE';
    const SUB                 = 'SUB';
    const SUMMARY             = 'SUMMARY';
    const SUP                 = 'SUP';
    const SVG                 = 'SVG';
    const SWITCH_             = 'SWITCH';
    const SYMBOL              = 'SYMBOL';
    const TABLE               = 'TABLE';
    const TBODY               = 'TBODY';
    const TD                  = 'TD';
    const TEMPLATE            = 'TEMPLATE';
    const TEXT                = 'TEXT';
    const TEXTAREA            = 'TEXTAREA';
    const TEXTPATH            = 'TEXTPATH';
    const TFOOT               = 'TFOOT';
    const TH                  = 'TH';
    const THEAD               = 'THEAD';
    const TIME                = 'TIME';
    const TITLE               = 'TITLE';
    const TR                  = 'TR';
    const TRACK               = 'TRACK';
    const TREF                = 'TREF';
    const TSPAN               = 'TSPAN';
    const TT                  = 'TT';
    const U                   = 'U';
    const UL                  = 'UL';
    const USE_                = 'USE';
    const VAR_                = 'VAR';
    const VIDEO               = 'VIDEO';
    const VIEW                = 'VIEW';
    const VKERN               = 'VKERN';
    const WBR                 = 'WBR';
    const _DOCTYPE            = '!DOCTYPE';

    /**
     * HTML elements that are self-closing.
     *
     * @link https://www.w3.org/TR/html5/syntax.html#serializing-html-fragments
     *
     * @var string[]
     */
    const SELF_CLOSING_TAGS = [
        self::AREA,
        self::BASE,
        self::BASEFONT,
        self::BGSOUND,
        self::BR,
        self::COL,
        self::EMBED,
        self::FRAME,
        self::HR,
        self::IMG,
        self::INPUT,
        self::KEYGEN,
        self::LINK,
        self::META,
        self::PARAM,
        self::SOURCE,
        self::TRACK,
        self::WBR,
    ];

    /**
     * List of elements allowed in head.
     *
     * @link https://github.com/ampproject/amphtml/blob/445d6e3be8a5063e2738c6f90fdcd57f2b6208be/validator/engine/htmlparser.js#L83-L100
     * @link https://www.w3.org/TR/html5/document-metadata.html
     *
     * @var string[]
     */
    const ELEMENTS_ALLOWED_IN_HEAD = [
        self::TITLE,
        self::BASE,
        self::LINK,
        self::META,
        self::STYLE,
        self::NOSCRIPT,
        self::SCRIPT,
    ];

    /**
     * Set of HTML tags which should never trigger an implied open of a <head> or <body> element.
     */
    const STRUCTURE_TAGS = [
        self::_DOCTYPE,
        self::HTML,
        self::HEAD,
        self::BODY,
    ];

    /**
     * The set of HTML tags whose presence will implicitly close a <p> element.
     * For example '<p>foo<h1>bar</h1>' should parse the same as '<p>foo</p><h1>bar</h1>'.
     * @link https://www.w3.org/TR/html-markup/p.html
     */
    const P_CLOSING_TAGS = [
        self::ADDRESS,
        self::ARTICLE,
        self::ASIDE,
        self::BLOCKQUOTE,
        self::DIR,
        self::DL,
        self::FIELDSET,
        self::FOOTER,
        self::FORM,
        self::H1,
        self::H2,
        self::H3,
        self::H4,
        self::H5,
        self::H6,
        self::HEADER,
        self::HR,
        self::MENU,
        self::NAV,
        self::OL,
        self::P,
        self::PRE,
        self::SECTION,
        self::TABLE,
        self::UL,
    ];
}
PK.3YE�?LLGbunyad-amp/vendor/ampproject/amp-toolbox/src/Html/Parser/DocLocator.php<?php

namespace AmpProject\Html\Parser;

use AmpProject\Str;

/**
 * Helper for determining the line/column information for SAX events that are being received by a HtmlSaxHandler.
 *
 * @package ampproject/amp-toolbox
 */
final class DocLocator
{
    /**
     * Line mapped to a given position.
     *
     * @var array
     */
    private $lineByPosition = [];

    /**
     * Column mapped to a given position.
     *
     * @var array
     */
    private $columnByPosition = [];

    /**
     * Size of the document in bytes.
     *
     * @var int
     */
    private $documentByteSize;

    /**
     * The current position in the htmlText.
     *
     * @var int
     */
    private $position = 0;

    /**
     * The previous position in the htmlText.
     *
     * We need this to know where a tag or attribute etc. started.
     *
     * @var int
     */
    private $previousPosition = 0;

    /**
     * Line within the document.
     *
     * @var int
     */
    private $line = 1;

    /**
     * Column within the document.
     *
     * @var int
     */
    private $column = 0;

    /**
     * DocLocator constructor.
     *
     * @param string $htmlText String of HTML.
     */
    public function __construct($htmlText)
    {
        /*
         * Precomputes a mapping from positions within htmlText to line / column numbers.
         *
         * TODO: This uses a fair amount of space and we can probably do better, but it's also quite simple so here we
         * are for now.
         */

        $currentLine   = 1;
        $currentColumn = 0;
        $length        = Str::length($htmlText);
        for ($index = 0; $index < $length; ++$index) {
            $this->lineByPosition[$index]   = $currentLine;
            $this->columnByPosition[$index] = $currentColumn;
            $character                      = Str::substring($htmlText, $index, 1);
            if ($character === "\n") {
                ++$currentLine;
                $currentColumn = 0;
            } else {
                ++$currentColumn;
            }
        }

        $this->documentByteSize = Str::length($htmlText);
    }

    /**
     * Advances the internal position by the characters in $tokenText.
     *
     * This method is to be called only from within the parser.
     *
     * @param string $tokenText The token text which we examine to advance the line / column location within the doc.
     */
    public function advancePosition($tokenText)
    {
        $this->previousPosition = $this->position;
        $this->position += Str::length($tokenText);
    }

    /**
     * Snapshots the previous internal position so that getLine / getCol will return it.
     *
     * These snapshots happen as the parser enter / exits a tag.
     *
     * This method is to be called only from within the parser.
     */
    public function snapshotPosition()
    {
        if ($this->previousPosition < count($this->lineByPosition)) {
            $this->line   = $this->lineByPosition[$this->previousPosition];
            $this->column = $this->columnByPosition[$this->previousPosition];
        }
    }

    /**
     * Get the current line in the HTML source from which the most recent SAX event was generated. This value is only
     * sensible once an event has been generated, that is, in practice from within the context of the HtmlSaxHandler
     * methods - e.g., startTag(), pcdata(), etc.
     *
     * @return int The current line.
     */
    public function getLine()
    {
        return $this->line;
    }

    /**
     * Get the current column in the HTML source from which the most recent SAX event was generated. This value is only
     * sensible once an event has been generated, that is, in practice from within the context of the HtmlSaxHandler
     * methods - e.g., startTag(), pcdata(), etc.
     *
     * @return int The current column.
     */
    public function getColumn()
    {
        return $this->column;
    }

    /**
     * Get the size of the document in bytes.
     *
     * @return int The size of the document in bytes.
     */
    public function getDocumentByteSize()
    {
        return $this->documentByteSize;
    }
}
PK.3Y��+n��Cbunyad-amp/vendor/ampproject/amp-toolbox/src/Html/Parser/EFlags.php<?php

namespace AmpProject\Html\Parser;

/**
 * The html eflags, used internally by the parser.
 *
 * @package ampproject/amp-toolbox
 */
interface EFlags
{
    const OPTIONAL_ENDTAG   = 1;
    const EMPTY_            = 2;
    const CDATA             = 4;
    const RCDATA            = 8;
    const UNSAFE            = 16;
    const FOLDABLE          = 32;
    const UNKNOWN_OR_CUSTOM = 64;
}
PK.3Yt?�B�G�GGbunyad-amp/vendor/ampproject/amp-toolbox/src/Html/Parser/HtmlParser.php<?php

namespace AmpProject\Html\Parser;

use AmpProject\Encoding;
use AmpProject\Exception\FailedToParseHtml;
use AmpProject\Html\UpperCaseTag as Tag;
use AmpProject\Str;

/**
 * An Html parser.
 *
 * The parse() method takes a string and calls methods on HtmlSaxHandler while it is visiting its tokens.
 *
 * @package ampproject/amp-toolbox
 */
final class HtmlParser
{
    /**
     * Regular expression that matches the next token to be processed.
     *
     * @var string
     */
    const INSIDE_TAG_TOKEN =
        // Don't capture space. In this case, we don't use \s because it includes a non-breaking space which gets
        // included as an attribute in our validation.
        '%^[ \t\n\f\r\v]*(?:' .
            // Capture an attribute name in group 1, and value in group 3. We capture the fact that there was an
            // attribute in group 2, since interpreters are inconsistent in whether a group that matches nothing is
            // null, undefined, or the empty string.
            '(?:' .
                // Allow attribute names to start with /, avoiding assigning the / in close-tag syntax */>.
                '([^\t\r\n /=>][^\t\r\n =>]*|' .  // e.g. "href".
                '[^\t\r\n =>]+[^ >]|' .              // e.g. "/asdfs/asd".
                '\/+(?!>))' .                           // e.g. "/".
                // Optionally followed by...
                '(' .
                    '\s*=\s*' .
                    '(' .
                        // A double quoted string.
                        '\"[^\"]*\"' .
                        // A single quoted string.
                        '|\'[^\']*\'' .
                        // The positive lookahead is used to make sure that in <foo bar= baz=boo>, the value for bar is
                        // blank, not "baz=boo". Note that <foo bar=baz=boo zik=zak>, the value for bar is "baz=boo" and
                        // the value for zip is "zak".
                        '|(?=[a-z][a-z-]*\s+=)' .
                        // An unquoted value that is not an attribute name. We know it is not an attribute name because
                        // the previous zero-width match would've eliminated that possibility.
                        '|[^>\s]*' .
                        ')' .
                    ')' .
                '?' .
                ')' .
            // End of tag captured in group 3.
            '|(/?>)' .
            // Don't capture cruft.
            '|[^a-z\s>]+)' .
        '%i';


    /**
     * Regular expression that matches the next token to be processed when we are outside a tag.
     *
     * @var string
     */
    const OUTSIDE_TAG_TOKEN =
        '%^(?:' .
            // Entity captured in group 1.
            '&(\#[0-9]+|\#[x][0-9a-f]+|\w+);' .
            // Comments not captured.
            '|<[!]--[\s\S]*?(?:--[!]?>|$)' .
            // '/' captured in group 2 for close tags, and name captured in group 3. The first character of a tag (after
            // possibly '/') can be A-Z, a-z, '!' or '?'. The remaining characters are more easily expressed as a
            // negative set of: '\0', ' ', '\n', '\r', '\t', '\f', '\v', '>', or '/'.
            '|<(/)?([a-z!\?][^\0 \n\r\t\f\v>/]*)' .
            // Text captured in group 4.
            '|([^<&>]+)' .
            // Cruft captured in group 5.
            '|([<&>]))' .
        '%i';

    /**
     * Regular expression that matches null characters.
     *
     * @var string
     */
    const NULL_REGEX = "/\0/g";

    /**
     * Regular expression that matches entities.
     *
     * @var string
     */
    const ENTITY_REGEX = '/&(#\d+|#x[0-9A-Fa-f]+|\w+);/g';

    /**
     * Regular expression that matches loose &s.
     *
     * @var string
     */
    const LOOSE_AMP_REGEX = '/&([^a-z#]|#(?:[^0-9x]|x(?:[^0-9a-f]|$)|$)|$)/gi';

    /**
     * Regular expression that matches <.
     *
     * @var string
     */
    const LT_REGEX = '/</g';

    /**
     * Regular expression that matches >.
     *
     * @var string
     */
    const GT_REGEX = '/>/g';

    /**
     * Regular expression that matches decimal numbers.
     *
     * @var string
     */
    const DECIMAL_ESCAPE_REGEX = '/^#(\d+)$/';

    /**
     * Regular expression that matches hexadecimal numbers.
     *
     * @var string
     */
    const HEX_ESCAPE_REGEX = '/^#x([0-9A-Fa-f]+)$/';

    /**
     * HTML entities that are encoded/decoded.
     *
     * @type array<string>
     */
    const ENTITIES = [
        'colon' => ':',
        'lt'    => '<',
        'gt'    => '>',
        'amp'   => '&',
        'nbsp'  => '\u00a0',
        'quot'  => '"',
        'apos'  => '\'',
    ];

    /**
     * A map of element to a bitmap of flags it has, used internally on the parser.
     *
     * @var array<int>
     */
    const ELEMENTS = [
        Tag::A          => 0,
        Tag::ABBR       => 0,
        Tag::ACRONYM    => 0,
        Tag::ADDRESS    => 0,
        Tag::APPLET     => EFlags::UNSAFE,
        Tag::AREA       => EFlags::EMPTY_,
        Tag::B          => 0,
        Tag::BASE       => EFlags::EMPTY_ | EFlags::UNSAFE,
        Tag::BASEFONT   => EFlags::EMPTY_ | EFlags::UNSAFE,
        Tag::BDO        => 0,
        Tag::BIG        => 0,
        Tag::BLOCKQUOTE => 0,
        Tag::BODY       => EFlags::OPTIONAL_ENDTAG | EFlags::UNSAFE | EFlags::FOLDABLE,
        Tag::BR         => EFlags::EMPTY_,
        Tag::BUTTON     => 0,
        Tag::CANVAS     => 0,
        Tag::CAPTION    => 0,
        Tag::CENTER     => 0,
        Tag::CITE       => 0,
        Tag::CODE       => 0,
        Tag::COL        => EFlags::EMPTY_,
        Tag::COLGROUP   => EFlags::OPTIONAL_ENDTAG,
        Tag::DD         => EFlags::OPTIONAL_ENDTAG,
        Tag::DEL        => 0,
        Tag::DFN        => 0,
        Tag::DIR        => 0,
        Tag::DIV        => 0,
        Tag::DL         => 0,
        Tag::DT         => EFlags::OPTIONAL_ENDTAG,
        Tag::EM         => 0,
        Tag::FIELDSET   => 0,
        Tag::FONT       => 0,
        Tag::FORM       => 0,
        Tag::FRAME      => EFlags::EMPTY_ | EFlags::UNSAFE,
        Tag::FRAMESET   => EFlags::UNSAFE,
        Tag::H1         => 0,
        Tag::H2         => 0,
        Tag::H3         => 0,
        Tag::H4         => 0,
        Tag::H5         => 0,
        Tag::H6         => 0,
        Tag::HEAD       => EFlags::OPTIONAL_ENDTAG | EFlags::UNSAFE | EFlags::FOLDABLE,
        Tag::HR         => EFlags::EMPTY_,
        Tag::HTML       => EFlags::OPTIONAL_ENDTAG | EFlags::UNSAFE | EFlags::FOLDABLE,
        Tag::I          => 0,
        Tag::IFRAME     => EFlags::UNSAFE | EFlags::CDATA,
        Tag::IMG        => EFlags::EMPTY_,
        Tag::INPUT      => EFlags::EMPTY_,
        Tag::INS        => 0,
        Tag::ISINDEX    => EFlags::EMPTY_ | EFlags::UNSAFE,
        Tag::KBD        => 0,
        Tag::LABEL      => 0,
        Tag::LEGEND     => 0,
        Tag::LI         => EFlags::OPTIONAL_ENDTAG,
        Tag::LINK       => EFlags::EMPTY_ | EFlags::UNSAFE,
        Tag::MAP        => 0,
        Tag::MENU       => 0,
        Tag::META       => EFlags::EMPTY_ | EFlags::UNSAFE,
        Tag::NOFRAMES   => EFlags::UNSAFE | EFlags::CDATA,
        // TODO: This used to read:
        // Tag::NOSCRIPT => EFlags::UNSAFE | EFlags::CDATA,
        // It appears that the effect of that is that anything inside is then considered cdata, so
        // <noscript><style>foo</noscript></noscript> never sees a style start tag / end tag event. But we must
        // recognize such style tags and they're also allowed by HTML, e.g. see:
        // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/noscript
        // On a broader note this also means we may be missing other start/end tag events inside elements marked as
        // CDATA which our parser should better reject. Yikes.
        Tag::NOSCRIPT   => EFlags::UNSAFE,
        Tag::OBJECT     => EFlags::UNSAFE,
        Tag::OL         => 0,
        Tag::OPTGROUP   => 0,
        Tag::OPTION     => EFlags::OPTIONAL_ENDTAG,
        Tag::P          => EFlags::OPTIONAL_ENDTAG,
        Tag::PARAM      => EFlags::EMPTY_ | EFlags::UNSAFE,
        Tag::PRE        => 0,
        Tag::Q          => 0,
        Tag::S          => 0,
        Tag::SAMP       => 0,
        Tag::SCRIPT     => EFlags::UNSAFE | EFlags::CDATA,
        Tag::SELECT     => 0,
        Tag::SMALL      => 0,
        Tag::SPAN       => 0,
        Tag::STRIKE     => 0,
        Tag::STRONG     => 0,
        Tag::STYLE      => EFlags::UNSAFE | EFlags::CDATA,
        Tag::SUB        => 0,
        Tag::SUP        => 0,
        Tag::TABLE      => 0,
        Tag::TBODY      => EFlags::OPTIONAL_ENDTAG,
        Tag::TD         => EFlags::OPTIONAL_ENDTAG,
        Tag::TEXTAREA   => EFlags::RCDATA,
        Tag::TFOOT      => EFlags::OPTIONAL_ENDTAG,
        Tag::TH         => EFlags::OPTIONAL_ENDTAG,
        Tag::THEAD      => EFlags::OPTIONAL_ENDTAG,
        Tag::TITLE      => EFlags::RCDATA | EFlags::UNSAFE,
        Tag::TR         => EFlags::OPTIONAL_ENDTAG,
        Tag::TT         => 0,
        Tag::U          => 0,
        Tag::UL         => 0,
        Tag::VAR_       => 0,
    ];

    /**
     * Given a SAX-like HtmlSaxHandler, this parses a $htmlText and lets the $handler know the structure while visiting
     * the nodes. If the provided handler is an implementation of HtmlSaxHandlerWithLocation, then its setDocLocator()
     * method will get called prior to startDoc(), and the getLine() / getColumn() methods will reflect the current
     * line / column while a SAX callback (e.g., startTag()) is active.
     *
     * @param HtmlSaxHandler $handler  The HtmlSaxHandler that will receive the events.
     * @param string         $htmlText The html text.
     */
    public function parse(HtmlSaxHandler $handler, $htmlText)
    {
        $htmlUpper  = null;
        $inTag      = false; // True iff we're currently processing a tag.
        $attributes = [];    // Accumulates attribute names and values.
        $tagName    = null;  // The name of the tag currently being processed.
        $eflags     = null;  // The element flags for the current tag.
        $openTag    = false; // True if the current tag is an open tag.
        $tagStack   = new TagNameStack($handler);

        Str::setEncoding(Encoding::AMP);

        // Only provide location information if the handler implements the setDocLocator method.
        $locator = null;
        if ($handler instanceof HtmlSaxHandlerWithLocation) {
            $locator = new DocLocator($htmlText);
            $handler->setDocLocator($locator);
        }

        // Lets the handler know that we are starting to parse the document.
        $handler->startDoc();

        // Consumes tokens from the htmlText and stops once all tokens are processed.
        while ($htmlText) {
            $regex = $inTag ? self::INSIDE_TAG_TOKEN : self::OUTSIDE_TAG_TOKEN;
            // Gets the next token.
            $matches = null;
            Str::regexMatch($regex, $htmlText, $matches);

            // Avoid infinite loop in case nothing could be matched.
            // This can be caused by documents provided in the wrong encoding, which the regex engine fails to handle.
            if (empty($matches[0])) {
                throw FailedToParseHtml::forHtml($htmlText);
            }

            if ($locator) {
                $locator->advancePosition($matches[0]);
            }
            // And removes it from the string.
            $htmlText = Str::substring($htmlText, Str::length($matches[0]));

            if ($inTag) {
                if (!empty($matches[1])) {  // Attribute.
                    // SetAttribute with uppercase names doesn't work on IE6.
                    $attributeName = Str::toLowerCase($matches[1]);
                    // Use empty string as value for valueless attribs, so <input type=checkbox checked> gets attributes
                    // ['type', 'checkbox', 'checked', ''].
                    $decodedValue = '';
                    if (!empty($matches[2])) {
                        $encodedValue = $matches[3];
                        switch (Str::substring($encodedValue, 0, 1)) {  // Strip quotes.
                            case '"':
                            case "'":
                                $encodedValue = Str::substring($encodedValue, 1, Str::length($encodedValue) - 2);
                                break;
                        }
                        $decodedValue = $this->unescapeEntities($this->stripNULs($encodedValue));
                    }
                    $attributes[] = $attributeName;
                    $attributes[] = $decodedValue;
                } elseif (!empty($matches[4])) {
                    if ($eflags !== null) {  // False if not in allowlist.
                        if ($openTag) {
                            $tagStack->startTag(new ParsedTag($tagName, $attributes));
                        } else {
                            $tagStack->endTag(new ParsedTag($tagName));
                        }
                    }

                    if ($openTag && ($eflags & (EFlags::CDATA | EFlags::RCDATA))) {
                        if ($htmlUpper === null) {
                            $htmlUpper = Str::toUpperCase($htmlText);
                        } else {
                            $htmlUpper = Str::substring($htmlUpper, Str::length($htmlUpper) - Str::length($htmlText));
                        }
                        $dataEnd = Str::position($htmlUpper, "</{$tagName}");
                        if ($dataEnd < 0) {
                                  $dataEnd = Str::length($htmlText);
                        }
                        if ($eflags & EFlags::CDATA) {
                            $handler->cdata(Str::substring($htmlText, 0, $dataEnd));
                        } else {
                            $handler->rcdata($this->normalizeRCData(Str::substring($htmlText, 0, $dataEnd)));
                        }
                        if ($locator) {
                            $locator->advancePosition(Str::substring($htmlText, 0, $dataEnd));
                        }
                        $htmlText = Str::substring($htmlText, $dataEnd);
                    }

                    $tagName    = null;
                    $eflags     = null;
                    $openTag    = false;
                    $attributes = [];
                    if ($locator) {
                        $locator->snapshotPosition();
                    }
                    $inTag = false;
                }
            } else {
                if (!empty($matches[1])) { // Entity.
                    $tagStack->pcdata($matches[0]);
                } elseif (!empty($matches[3])) { // Tag.
                    $openTag = ! $matches[2];
                    if ($locator) {
                        $locator->snapshotPosition();
                    }
                    $inTag = true;
                    $tagName = Str::toUpperCase($matches[3]);
                    $eflags = array_key_exists($tagName, self::ELEMENTS)
                        ? self::ELEMENTS[$tagName]
                        : EFlags::UNKNOWN_OR_CUSTOM;
                } elseif (!empty($matches[4])) { // Text.
                    if ($locator) {
                        $locator->snapshotPosition();
                    }
                    $tagStack->pcdata($matches[4]);
                } elseif (!empty($matches[5])) { // Cruft.
                    switch ($matches[5]) {
                        case '<':
                            $tagStack->pcdata('&lt;');
                            break;
                        case '>':
                            $tagStack->pcdata('&gt;');
                            break;
                        default:
                            $tagStack->pcdata('&amp;');
                            break;
                    }
                }
            }
        }

        if (!$inTag && $locator) {
            $locator->snapshotPosition();
        }
        // Lets the handler know that we are done parsing the document.
        $tagStack->exitRemainingTags();
        $handler->effectiveBodyTag($tagStack->effectiveBodyAttributes());
        $handler->endDoc();
    }


    /**
     * Decode an HTML entity.
     *
     * This method is public as it needs to be passed into Str::regexReplaceCallback().
     *
     * @param string $entity The full entity (including the & and the ;).
     * @return string A single unicode code-point as a string.
     */
    public function lookupEntity($entity)
    {
        $name = Str::toLowerCase(Str::substring($entity, Str::length($entity) - 1));
        if (array_key_exists($name, self::ENTITIES)) {
            return self::ENTITIES[$name];
        }
        $matches = [];
        if (Str::regexMatch(self::DECIMAL_ESCAPE_REGEX, $name, $matches)) {
            return chr((int)$matches[1]);
        }
        if (Str::regexMatch(self::HEX_ESCAPE_REGEX, $name, $matches)) {
            return chr(hexdec($matches[1]));
        }
        // If unable to decode, return the name.
        return $name;
    }

    /**
     * Remove null characters on the string.
     *
     * @param string $text The string to have the null characters removed.
     * @return string A string without null characters.
     * @private
     */
    private function stripNULs($text)
    {
        return Str::regexReplace(self::NULL_REGEX, '', $text);
    }

    /**
     * The plain text of a chunk of HTML CDATA which possibly containing.
     *
     * @param string $text A chunk of HTML CDATA. It must not start or end inside an HTML entity.
     * @return string The unescaped entities.
     */
    private function unescapeEntities($text)
    {
        return Str::regexReplaceCallback(self::ENTITY_REGEX, [$this, 'lookupEntity'], $text);
    }

    /**
     * Escape entities in RCDATA that can be escaped without changing the meaning.
     *
     * @param string $rcdata The RCDATA string we want to normalize.
     * @return string A normalized version of RCDATA.
     */
    private function normalizeRCData($rcdata)
    {
        $rcdata = Str::regexReplace(self::LOOSE_AMP_REGEX, '&amp;$1', $rcdata);
        $rcdata = Str::regexReplace(self::LT_REGEX, '&lt;', $rcdata);
        $rcdata = Str::regexReplace(self::GT_REGEX, '&gt;', $rcdata);

        return $rcdata;
    }
}
PK.3YN�G��Kbunyad-amp/vendor/ampproject/amp-toolbox/src/Html/Parser/HtmlSaxHandler.php<?php

namespace AmpProject\Html\Parser;

/**
 * An interface to the HtmlParser visitor that gets called while the HTML is being parsed.
 *
 * @package ampproject/amp-toolbox
 */
interface HtmlSaxHandler
{
    /**
     * Handler called when the parser found a new tag.
     *
     * @param ParsedTag $tag New tag that was found.
     * @return void
     */
    public function startTag(ParsedTag $tag);

    /**
     * Handler called when the parser found a closing tag.
     *
     * @param ParsedTag $tag Closing tag that was found.
     * @return void
     */
    public function endTag(ParsedTag $tag);

    /**
     * Handler called when PCDATA is found.
     *
     * @param string $text The PCDATA that was found.
     * @return void
     */
    public function pcdata($text);

    /**
     * Handler called when RCDATA is found.
     *
     * @param string $text The RCDATA that was found.
     * @return void
     */
    public function rcdata($text);

    /**
     * Handler called when CDATA is found.
     *
     * @param string $text The CDATA that was found.
     * @return void
     */
    public function cdata($text);

    /**
     * Handler called when the parser is starting to parse the document.
     *
     * @return void
     */
    public function startDoc();

    /**
     * Handler called when the parsing is done.
     *
     * @return void
     */
    public function endDoc();

    /**
     * Callback for informing that the parser is manufacturing a <body> tag not actually found on the page. This will be
     * followed by a startTag() with the actual body tag in question.
     *
     * @return void
     */
    public function markManufacturedBody();

    /**
     * HTML5 defines how parsers treat documents with multiple body tags: they merge the attributes from the later ones
     * into the first one. Therefore, just before the parser sends the endDoc event, it will also send this event which
     * will provide the attributes from the effective body tag to the client (the handler).
     *
     * @param array<ParsedAttribute> $attributes Array of parsed attributes.
     * @return void
     */
    public function effectiveBodyTag($attributes);
}
PK.3YE�F]]Wbunyad-amp/vendor/ampproject/amp-toolbox/src/Html/Parser/HtmlSaxHandlerWithLocation.php<?php

namespace AmpProject\Html\Parser;

/**
 * An interface to the HtmlParser visitor that gets called while the HTML is being parsed.
 *
 * @package ampproject/amp-toolbox
 */
interface HtmlSaxHandlerWithLocation extends HtmlSaxHandler
{
    /**
     * Called prior to parsing a document, that is, before startTag().
     *
     * @param DocLocator $locator A locator instance which provides access to the line/column information while SAX
     *                            events are being received by the handler.
     * @return void
     */
    public function setDocLocator(DocLocator $locator);
}
PK.3Y�Qoc��Lbunyad-amp/vendor/ampproject/amp-toolbox/src/Html/Parser/ParsedAttribute.php<?php

namespace AmpProject\Html\Parser;

/**
 * Name/Value pair representing an HTML Tag attribute.
 *
 * @package ampproject/amp-toolbox
 */
final class ParsedAttribute
{
    /**
     * Name of the attribute.
     *
     * @var string
     */
    private $name;

    /**
     * Value of the attribute.
     *
     * @var string
     */
    private $value;

    /**
     * ParsedAttribute constructor.
     *
     * @param string $name  Name of the attribute.
     * @param string $value Value of the attribute.
     */
    public function __construct($name, $value)
    {
        $this->name  = $name;
        $this->value = $value;
    }

    /**
     * Get the name of the attribute.
     *
     * @return string Name of the attribute.
     */
    public function name()
    {
        return $this->name;
    }

    /**
     * Get the value of the attribute.
     *
     * @return string Value of the attribute.
     */
    public function value()
    {
        return $this->value;
    }
}
PK.3Y�w�ooFbunyad-amp/vendor/ampproject/amp-toolbox/src/Html/Parser/ParsedTag.php<?php

namespace AmpProject\Html\Parser;

use AmpProject\ScriptReleaseVersion;
use AmpProject\Str;

/**
 * The Html parser makes method calls with ParsedTags as arguments.
 *
 * @package ampproject/amp-toolbox
 */
final class ParsedTag
{
    /**
     * Name of the parsed tag.
     *
     * @var string
     */
    private $tagName;

    /**
     * Associative array of attributes.
     *
     * @var array<ParsedAttribute>
     */
    private $attributes = [];

    /**
     * Lazily allocated map from attribute name to value.
     *
     * @var array<string>|null
     */
    private $attributesByKey;

    /**
     * State of a script tag.
     *
     * @var ScriptTag
     */
    private $scriptTag;

    /**
     * ParsedTag constructor.
     *
     * @param string $tagName               Name of the parsed tag.
     * @param array  $alternatingAttributes Optional. Array of alternating (name, value) pairs.
     */
    public function __construct($tagName, $alternatingAttributes = [])
    {
        /*
         * Tag and Attribute names are case-insensitive. For error messages, we would like to use lower-case names as
         * they read a little nicer. However, in validator environments where the parsing is done by the actual browser,
         * the DOM API returns tag names in upper case. We stick with this convention for tag names, for performance,
         * but convert to lower when producing error messages. Error messages aren't produced in latency sensitive
         * contexts.
         */

        if (! is_array($alternatingAttributes)) {
            $alternatingAttributes = [];
        }

        $this->tagName = Str::toUpperCase($tagName);

        // Convert attribute names to lower case, not values, which are case-sensitive.
        $count = count($alternatingAttributes);
        for ($index = 0; $index < $count; $index += 2) {
            $name = Str::toLowerCase($alternatingAttributes[$index]);
            $value = $alternatingAttributes[$index + 1];
            // Our html parser repeats the key as the value if there is no value. We
            // replace the value with an empty string instead in this case.
            if ($name === $value) {
                $value = '';
            }
            $this->attributes[] = new ParsedAttribute($name, $value);
        }

        // Sort the attribute array by (lower case) name.
        usort($this->attributes, function (ParsedAttribute $a, ParsedAttribute $b) {
            if (PHP_MAJOR_VERSION < 7 && $a->name() === $b->name()) {
                // Hack required for PHP 5.6, as it does not maintain stable order for equal items.
                // See https://bugs.php.net/bug.php?id=69158.
                // To get around this, we compare the index within $this->attributes instead to maintain existing order.
                return strcmp(array_search($a, $this->attributes, true), array_search($b, $this->attributes, true));
            }

            return strcmp($a->name(), $b->name());
        });

        $this->scriptTag = new ScriptTag($this->tagName, $this->attributes);
    }

    /**
     * Get the lower-case tag name.
     *
     * @return string Lower-case tag name.
     */
    public function lowerName()
    {
        return Str::toLowerCase($this->tagName);
    }

    /**
     * Get the upper-case tag name.
     *
     * @return string Upper-case tag name.
     */
    public function upperName()
    {
        return $this->tagName;
    }

    /**
     * Returns an array of attributes.
     *
     * Each attribute has two fields: name and value. Name is always lower-case, value is the case from the original
     * document. Values are unescaped.
     *
     * @return array<ParsedAttribute>
     */
    public function attributes()
    {
        return $this->attributes;
    }

    /**
     * Returns an object mapping attribute name to attribute value.
     *
     * This is populated lazily, as it's not used for most tags.
     *
     * @return array<string>
     * */
    public function attributesByKey()
    {
        if ($this->attributesByKey === null) {
            $this->attributesByKey = [];
            foreach ($this->attributes as $attribute) {
                $this->attributesByKey[$attribute->name()] = $attribute->value();
            }
        }

        return $this->attributesByKey;
    }

    /**
     * Returns a duplicate attribute name if the tag contains two attributes named the same, but with different
     * attribute values.
     *
     * Same attribute name AND value is OK. Returns null if there are no such duplicate attributes.
     *
     * @return string|null
     */
    public function hasDuplicateAttributes()
    {
        $lastAttributeName  = '';
        $lastAttributeValue = '';

        foreach ($this->attributes as $attribute) {
            if (
                $lastAttributeName === $attribute->name()
                &&
                $lastAttributeValue !== $attribute->value()
            ) {
                return $attribute->name();
            }

            $lastAttributeName  = $attribute->name();
            $lastAttributeValue = $attribute->value();
        }

        return null;
    }

    /**
     * Removes duplicate attributes from the attribute list.
     *
     * This is consistent with HTML5 parsing error handling rules, only the first attribute with each attribute name is
     * considered, the remainder are ignored.
     */
    public function dedupeAttributes()
    {
        $newAttributes     = [];
        $lastAttributeName = '';

        foreach ($this->attributes as $attribute) {
            if ($lastAttributeName !== $attribute->name()) {
                $newAttributes[] = $attribute;
            }
            $lastAttributeName = $attribute->name();
        }

        $this->attributes = $newAttributes;
    }

    /**
     * Returns the value of a given attribute name. If it does not exist then returns null.
     *
     * @param string $name Name of the attribute.
     * @return string|null Value of the attribute, or null if it does not exist.
     */
    public function getAttributeValueOrNull($name)
    {
        $attributesByKey = $this->attributesByKey();

        return array_key_exists($name, $attributesByKey) ? $attributesByKey[$name] : null;
    }

    /**
     * Returns the script release version, otherwise ScriptReleaseVersion::UNKNOWN.
     *
     * @return ScriptReleaseVersion
     */
    public function getScriptReleaseVersion()
    {
        return $this->scriptTag->releaseVersion();
    }

    /**
     * Tests if this tag is a script with a src of an AMP domain.
     *
     * @return bool Whether this tag is a script with a src of an AMP domain.
     */
    public function isAmpDomain()
    {
        return $this->scriptTag->isAmpDomain();
    }

    /**
     * Tests if this is the AMP runtime script tag.
     *
     * @return bool Whether this is the AMP runtime script tag.
     */
    public function isAmpRuntimeScript()
    {
        return $this->scriptTag->isRuntime();
    }

    /**
     * Tests if this is an extension script tag.
     *
     * @return bool Whether this is an extension script tag.
     */
    public function isExtensionScript()
    {
        return $this->scriptTag->isExtension();
    }
}
PK.3Y�s��WWFbunyad-amp/vendor/ampproject/amp-toolbox/src/Html/Parser/ScriptTag.php<?php

namespace AmpProject\Html\Parser;

use AmpProject\Amp;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag;
use AmpProject\ScriptReleaseVersion;
use AmpProject\Str;

/**
 * Represents the state of a script tag.
 *
 * @package ampproject/amp-toolbox
 */
final class ScriptTag
{
    /**
     * Name of the tag.
     *
     * @var string
     */
    private $tagName;

    /**
     * Array of parsed attributes.
     *
     * @var array<ParsedAttribute>
     */
    private $attributes;

    /**
     * Lazily evaluated collection of properties about the script tag.
     *
     * @var array|null
     */
    private $parsedProperties;

    /**
     * Standard and Nomodule JavaScript.
     *
     * Examples:
     * - v0.js
     * - v0/amp-ad-0.1.js
     *
     * @var string
     */
    const STANDARD_SCRIPT_PATH_REGEX = '/(v0|v0/amp-[a-z0-9-]*-[a-z0-9.]*)\\.js$/i';

    /**
     * LTS and Nomodule LTS JavaScript.
     *
     * Examples:
     * - lts/v0.js
     * - lts/v0/amp-ad-0.1.js
     *
     * @var string
     */
    const LTS_SCRIPT_PATH_REGEX = '/lts/(v0|v0/amp-[a-z0-9-]*-[a-z0-9.]*)\\.js$/i';

    /**
     * Module JavaScript.
     *
     * Examples:
     * - v0.mjs
     * - amp-ad-0.1.mjs
     *
     * @var string
     */
    const MODULE_SCRIPT_PATH_REGEX = '/(v0|v0/amp-[a-z0-9-]*-[a-z0-9.]*)\\.mjs$/i';

    /**
     * Module LTS JavaScript.
     *
     * Examples:
     * - lts/v0.mjs
     * - lts/v0/amp-ad-0.1.mjs
     *
     * @var string
     */
    const MODULE_LTS_SCRIPT_PATH_REGEX = '/lts/(v0|v0/amp-[a-z0-9-]*-[a-z0-9.]*)\\.mjs$/i';

    /**
     * Runtime JavaScript.
     *
     * Examples:
     * - v0.js
     * - v0.mjs
     * - v0.mjs?f=sxg
     * - lts/v0.js
     * - lts/v0.js?f=sxg
     * -lts/v0.mjs
     *
     * @var string
     */
    const RUNTIME_SCRIPT_PATH_REGEX = '/(lts/)?v0\\.m?js(\\?f=sxg)?/i';

    /**
     * ScriptTag constructor.
     *
     * @param string                 $tagName    Name of the tag.
     * @param array<ParsedAttribute> $attributes Array of parsed attributes.
     */
    public function __construct($tagName, $attributes)
    {
        $this->tagName    = $tagName;
        $this->attributes = $attributes;
    }

    /**
     * Returns the script release version, otherwise ScriptReleaseVersion::UNKNOWN.
     *
     * @return ScriptReleaseVersion
     */
    public function releaseVersion()
    {
        if ($this->tagName !== Tag::SCRIPT) {
            return ScriptReleaseVersion::UNKNOWN();
        }

        $properties = $this->parseAttributes();

        return $properties['releaseVersion'];
    }

    /**
     * Tests if this tag is a script with a src of an AMP domain.
     *
     * @return bool Whether this tag is a script with a src of an AMP domain.
     */
    public function isAmpDomain()
    {
        if ($this->tagName !== Tag::SCRIPT) {
            return false;
        }

        $properties = $this->parseAttributes();

        return $properties['isAmpDomain'];
    }

    /**
     * Tests if this is the AMP runtime script tag.
     *
     * @return bool Whether this is the AMP runtime script tag.
     */
    public function isRuntime()
    {
        if ($this->tagName !== Tag::SCRIPT) {
            return false;
        }

        $properties = $this->parseAttributes();

        return $properties['isRuntime'];
    }

    /**
     * Tests if this is an extension script tag.
     *
     * @return bool Whether this is an extension script tag.
     */
    public function isExtension()
    {
        if ($this->tagName !== Tag::SCRIPT) {
            return false;
        }

        $properties = $this->parseAttributes();

        return $properties['isExtension'];
    }

    /**
     * Parse attributes to determine script properties.
     *
     * @return array Associative array of parsed properties.
     */
    private function parseAttributes()
    {
        if ($this->parsedProperties !== null) {
            return $this->parsedProperties;
        }

        $properties = [
            'isAsync'     => false,
            'isModule'    => false,
            'isNomodule'  => false,
            'isExtension' => false,
            'path'        => '',
            'src'         => '',
        ];

        foreach ($this->attributes as $attribute) {
            if ($attribute->name() === Attribute::ASYNC) {
                $properties['isAsync'] = true;
            } elseif (
                $attribute->name() === Attribute::CUSTOM_ELEMENT
                ||
                $attribute->name() === Attribute::CUSTOM_TEMPLATE
                ||
                $attribute->name() === Attribute::HOST_SERVICE
            ) {
                $properties['isExtension'] = true;
            } elseif ($attribute->name() === Attribute::NOMODULE) {
                $properties['isNomodule'] = true;
            } elseif ($attribute->name() === Attribute::SRC) {
                $properties['src'] = $attribute->value();
            } elseif (
                $attribute->name() === Attribute::TYPE
                &&
                $attribute->value() === Attribute::TYPE_MODULE
            ) {
                $properties['isModule'] = true;
            }
        }

        // Determine if this has a valid AMP domain and separate the path from the attribute 'src'.
        if (Str::position($properties['src'], Amp::CACHE_ROOT_URL) === 0) {
            $properties['isAmpDomain'] = true;
            $properties['path']        = Str::substring($properties['src'], Str::length(Amp::CACHE_ROOT_URL));

            // Only look at script tags that have attribute 'async'.
            if ($properties['isAsync']) {
                // Determine if this is the AMP Runtime.
                if (
                    ! $properties['isExtension']
                    &&
                    Str::regexMatch(self::RUNTIME_SCRIPT_PATH_REGEX, $properties['path'])
                ) {
                    $properties['isRuntime'] = true;
                }

                // Determine the release version (LTS, module, standard, etc).
                if (
                    (
                        $properties['isModule']
                        &&
                        Str::regexMatch(self::MODULE_LTS_SCRIPT_PATH_REGEX, $properties['path'])
                    ) || (
                        $properties['isNomodule']
                        &&
                        Str::regexMatch(self::LTS_SCRIPT_PATH_REGEX, $properties['path'])
                    )
                ) {
                    $properties['releaseVersion'] = ScriptReleaseVersion::MODULE_NOMODULE_LTS();
                } elseif (
                    (
                        $properties['isModule']
                        &&
                        Str::regexMatch(self::MODULE_SCRIPT_PATH_REGEX, $properties['path'])
                    ) || (
                        $properties['isNomodule']
                        &&
                        Str::regexMatch(self::STANDARD_SCRIPT_PATH_REGEX, $properties['path'])
                    )
                ) {
                    $properties['releaseVersion'] = ScriptReleaseVersion::MODULE_NOMODULE();
                } elseif (Str::regexMatch(self::LTS_SCRIPT_PATH_REGEX, $properties['path'])) {
                    $properties['releaseVersion'] = ScriptReleaseVersion::LTS();
                } elseif (Str::regexMatch(self::STANDARD_SCRIPT_PATH_REGEX, $properties['path'])) {
                    $properties['releaseVersion'] = ScriptReleaseVersion::STANDARD();
                } else {
                    $properties['releaseVersion'] = ScriptReleaseVersion::UNKNOWN();
                }
            }
        }

        $this->parsedProperties = $properties;

        return $this->parsedProperties;
    }
}
PK.3Y���J<J<Ibunyad-amp/vendor/ampproject/amp-toolbox/src/Html/Parser/TagNameStack.php<?php

namespace AmpProject\Html\Parser;

use AmpProject\Html\UpperCaseTag as Tag;
use AmpProject\Str;

/**
 * Abstraction to keep track of which tags have been opened / closed as we traverse the tags in the document.
 *
 * Closing tags is tricky:
 * - Some tags have no end tag per spec. For example, there is no </img> tag per spec. Since we are making
 *   startTag()/endTag() calls, we manufacture endTag() calls for these immediately after the startTag().
 * - We assume all end tags are optional and we pop tags off our stack as we encounter parent closing tags. This part
 *   differs slightly from the behavior per spec: instead of closing an <option> tag when a following <option> tag
 *   is seen, we close it when the parent closing tag (in practice <select>) is encountered.
 *
 * @package ampproject/amp-toolbox
 */
final class TagNameStack
{
    /**
     * Regular expression that matches strings composed of all space characters, as defined in
     * https://infra.spec.whatwg.org/#ascii-whitespace, and in the various HTML parsing rules at
     * https://html.spec.whatwg.org/multipage/parsing.html#parsing-main-inhtml.
     *
     * Note: Do not USE \s to match whitespace as this includes many other characters that HTML parsing does not
     * consider whitespace.
     *
     * @var string
     */
    const SPACE_REGEX = '/^[ \f\n\r\t]*$/';

    /**
     * Regular expression that matches the characters considered whitespace by the C++ HTML parser.
     *
     * @var string
     */
    const CPP_SPACE_REGEX = '/^[ \f\n\r\t\v'
                            . '\x{00a0}\x{1680}\x{2000}-\x{200a}\x{2028}\x{2029}\x{202f}\x{205f}\x{3000}]*$/u';

    /**
     * The handler to manage the stack for.
     *
     * @var HtmlSaxHandler
     */
    private $handler;

    /**
     * The current tag name and its parents.
     *
     * @var array<string>
     */
    private $stack = [];

    /**
     * The current region within the document.
     *
     * @var TagRegion
     */
    private $region;

    /**
     * Keeps track of the attributes from all body tags encountered within the document.
     *
     * @var array<ParsedAttribute>
     */
    private $effectiveBodyAttributes = [];

    /**
     * TagNameStack constructor.
     *
     * @param HtmlSaxHandler $handler Handler to handle the HTML SAX parser events.
     */
    public function __construct(HtmlSaxHandler $handler)
    {
        $this->handler = $handler;
        $this->region  = TagRegion::PRE_DOCTYPE();
    }

    /**
     * Returns the attributes from all body tags within the document.
     *
     * @return array<ParsedAttribute>
     */
    public function effectiveBodyAttributes()
    {
        return $this->effectiveBodyAttributes;
    }

    /**
     * Enter a tag, opening a scope for child tags. Entering a tag can close the previous tag or enter other tags (such
     * as opening a <body> tag when encountering a tag not allowed outside the body.
     *
     * @param ParsedTag $tag Tag that is being started.
     */
    public function startTag(ParsedTag $tag)
    {
        // We only report the first body for each document - either a manufactured one, or the first one encountered.
        // However, we collect all attributes in $this->effectiveBodyAttributes.
        if ($tag->upperName() === Tag::BODY) {
            $this->effectiveBodyAttributes = array_merge($this->effectiveBodyAttributes, $tag->attributes());
        }

        // This section deals with manufacturing <head>, </head>, and <body> tags if the document has left them out or
        // placed them in the wrong location.
        switch ($this->region->getValue()) {
            case TagRegion::PRE_DOCTYPE:
                if ($tag->upperName() === Tag::_DOCTYPE) {
                    $this->region = TagRegion::PRE_HTML();
                } elseif ($tag->upperName() === Tag::HTML) {
                    $this->region = TagRegion::PRE_HEAD();
                } elseif ($tag->upperName() === Tag::HEAD) {
                    $this->region = TagRegion::IN_HEAD();
                } elseif ($tag->upperName() === Tag::BODY) {
                    $this->region = TagRegion::IN_BODY();
                } elseif (! in_array($tag->upperName(), Tag::STRUCTURE_TAGS, true)) {
                    if (in_array($tag->upperName(), Tag::ELEMENTS_ALLOWED_IN_HEAD, true)) {
                        $this->startTag(new ParsedTag(Tag::HEAD));
                    } else {
                        $this->handler->markManufacturedBody();
                        $this->startTag(new ParsedTag(Tag::BODY));
                    }
                }
                break;
            case TagRegion::PRE_HTML:
                // Stray DOCTYPE/HTML tags are ignored, not emitted twice.
                if ($tag->upperName() === Tag::_DOCTYPE) {
                    return;
                }
                if ($tag->upperName() === Tag::HTML) {
                    $this->region = TagRegion::PRE_HEAD();
                } elseif ($tag->upperName() === Tag::HEAD) {
                    $this->region = TagRegion::IN_HEAD();
                } elseif ($tag->upperName() === Tag::BODY) {
                    $this->region = TagRegion::IN_BODY();
                } elseif (! in_array($tag->upperName(), Tag::STRUCTURE_TAGS, true)) {
                    if (in_array($tag->upperName(), Tag::ELEMENTS_ALLOWED_IN_HEAD, true)) {
                        $this->startTag(new ParsedTag(Tag::HEAD));
                    } else {
                        $this->handler->markManufacturedBody();
                        $this->startTag(new ParsedTag(Tag::BODY));
                    }
                }
                break;
            case TagRegion::PRE_HEAD:
                // Stray DOCTYPE/HTML tags are ignored, not emitted twice.
                if ($tag->upperName() === Tag::_DOCTYPE || $tag->upperName() === Tag::HTML) {
                    return;
                }
                if ($tag->upperName() === Tag::HEAD) {
                    $this->region = TagRegion::IN_HEAD();
                } elseif ($tag->upperName() === Tag::BODY) {
                    $this->region = TagRegion::IN_BODY();
                } elseif (! in_array($tag->upperName(), Tag::STRUCTURE_TAGS, true)) {
                    if (in_array($tag->upperName(), Tag::ELEMENTS_ALLOWED_IN_HEAD, true)) {
                        $this->startTag(new ParsedTag(Tag::HEAD));
                    } else {
                        $this->handler->markManufacturedBody();
                        $this->startTag(new ParsedTag(Tag::BODY));
                    }
                }
                break;
            case TagRegion::IN_HEAD:
                // Stray DOCTYPE/HTML/HEAD tags are ignored, not emitted twice.
                if (
                    $tag->upperName() === Tag::_DOCTYPE || $tag->upperName() === Tag::HTML ||
                    $tag->upperName() === Tag::HEAD
                ) {
                    return;
                }
                if (! in_array($tag->upperName(), Tag::ELEMENTS_ALLOWED_IN_HEAD, true)) {
                    $this->endTag(new ParsedTag(Tag::HEAD));
                    if ($tag->upperName() !== Tag::BODY) {
                        $this->handler->markManufacturedBody();
                        $this->startTag(new ParsedTag(Tag::BODY));
                    } else {
                        $this->region = TagRegion::IN_BODY();
                    }
                }
                break;
            case TagRegion::PRE_BODY:
                // Stray DOCTYPE/HTML/HEAD tags are ignored, not emitted twice.
                if (
                    $tag->upperName() === Tag::_DOCTYPE
                    ||
                    $tag->upperName() === Tag::HTML
                    ||
                    $tag->upperName() === Tag::HEAD
                ) {
                    return;
                }
                if ($tag->upperName() !== Tag::BODY) {
                    $this->handler->markManufacturedBody();
                    $this->startTag(new ParsedTag(Tag::BODY));
                } else {
                    $this->region = TagRegion::IN_BODY();
                }
                break;
            case TagRegion::IN_BODY:
                // Stray DOCTYPE/HTML/HEAD tags are ignored, not emitted twice.
                if (
                    $tag->upperName() === Tag::_DOCTYPE
                    ||
                    $tag->upperName() === Tag::HTML
                    ||
                    $tag->upperName() === Tag::HEAD
                ) {
                    return;
                }
                if ($tag->upperName() === Tag::BODY) {
                    // We only report the first body for each document - either a manufactured one, or the first one
                    // encountered.
                    return;
                }
                if ($tag->upperName() === Tag::SVG) {
                    $this->region = TagRegion::IN_SVG();
                    break;
                }
                // Check implicit tag closing due to opening tags.
                if (count($this->stack) > 0) {
                    $parentTagName = $this->stack[count($this->stack) - 1];
                    // <p> tags can be implicitly closed by certain other start tags.
                    // See https://www.w3.org/TR/html-markup/p.html.
                    if (
                        $parentTagName === Tag::P
                        &&
                        in_array($tag->upperName(), Tag::P_CLOSING_TAGS, true)
                    ) {
                        $this->endTag(new ParsedTag(Tag::P));
                        // <dd> and <dt> tags can be implicitly closed by other <dd> and <dt> tags.
                        // See https://www.w3.org/TR/html-markup/dd.html.
                    } elseif (
                        ($parentTagName === Tag::DD || $parentTagName === Tag::DT)
                        &&
                        ($tag->upperName() === Tag::DD || $tag->upperName() === Tag::DT)
                    ) {
                        $this->endTag(new ParsedTag($parentTagName));
                        // <li> tags can be implicitly closed by other <li> tags.
                        // See https://www.w3.org/TR/html-markup/li.html.
                    } elseif (
                        $parentTagName === Tag::LI
                        &&
                        $tag->upperName() === Tag::LI
                    ) {
                        $this->endTag(new ParsedTag(Tag::LI));
                    }
                }
                break;
            case TagRegion::IN_SVG:
                $this->handler->startTag($tag);
                $this->stack[] = $tag->upperName();

                return;
            default:
                break;
        }

        $this->handler->startTag($tag);

        if (in_array($tag->upperName(), Tag::SELF_CLOSING_TAGS, true)) {
            // Ignore attributes in end tags.
            $this->handler->endTag(new ParsedTag($tag->upperName()));
        } else {
            $this->stack[] = $tag->upperName();
        }
    }

    /**
     * Callback for pcdata.
     *
     * Some text nodes can trigger the start of the body region.
     *
     * @param string $text Text of the text node.
     */
    public function pcdata($text)
    {
        if (Str::regexMatch(self::SPACE_REGEX, $text)) {
            // Only ASCII whitespace; this can be ignored for validator's purposes.
        } elseif (Str::regexMatch(self::CPP_SPACE_REGEX, $text)) {
            // Non-ASCII whitespace; if this occurs outside <body>, output a manufactured-body error. Do not create
            // implicit tags, in order to match the behavior of the buggy C++ parser. It just so happens this is also
            // good UX, since the subsequent validation errors caused by the implicit tags are unhelpful.
            switch ($this->region->getValue()) {
                // Fallthroughs intentional.
                case TagRegion::PRE_DOCTYPE:
                case TagRegion::PRE_HTML:
                case TagRegion::PRE_HEAD:
                case TagRegion::IN_HEAD:
                case TagRegion::PRE_BODY:
                    $this->handler->markManufacturedBody();
            }
        } else {
            // Non-whitespace text; if this occurs outside <body>, output a manufactured-body error and create the
            // necessary implicit tags.
            switch ($this->region->getValue()) {
                case TagRegion::PRE_DOCTYPE: // Doctype is not manufactured, fallthrough intentional.
                case TagRegion::PRE_HTML:
                    $this->startTag(new ParsedTag(Tag::HTML));
                    // Fallthrough intentional.
                case TagRegion::PRE_HEAD:
                    $this->startTag(new ParsedTag(Tag::HEAD));
                    // Fallthrough intentional.
                case TagRegion::IN_HEAD:
                    $this->endTag(new ParsedTag(Tag::HEAD));
                    // Fallthrough intentional.
                case TagRegion::PRE_BODY:
                    $this->handler->markManufacturedBody();
                    $this->startTag(new ParsedTag(Tag::BODY));
            }
        }

        $this->handler->pcdata($text);
    }

    /**
     * Upon exiting a tag, validation for the current matcher is triggered, e.g. for checking that the tag had some
     * specified number of children.
     *
     * @param ParsedTag $tag Tag that is being exited.
     */
    public function endTag($tag)
    {
        if ($this->region->equals(TagRegion::IN_HEAD()) && $tag->upperName() === Tag::HEAD) {
            $this->region = TagRegion::PRE_BODY();
        }

        /*
         * We ignore close body tags (</body) and instead insert them when their outer scope is closed (/html). This is
         * closer to how a browser parser works. The idea here is if other tags are found after the <body>, (ex: <div>)
         * which are only allowed in the <body>, we will effectively move them into the body section.
         */
        if ($tag->upperName() === Tag::BODY) {
            return;
        }

        /*
         * We look for tag.upperName() from the end. If we can find it, we pop everything from thereon off the stack. If
         * we can't find it, we don't bother with closing the tag, since it doesn't have a matching open tag, though in
         * practice the HtmlParser class will have already manufactured a start tag.
         */
        for ($index = count($this->stack) - 1; $index >= 0; $index--) {
            if ($this->stack[$index] === $tag->upperName()) {
                while (count($this->stack) > $index) {
                    if ($this->stack[count($this->stack) - 1] === Tag::SVG) {
                        $this->region = TagRegion::IN_BODY();
                    }
                    $this->handler->endTag(new ParsedTag(array_pop($this->stack)));
                }

                return;
            }
        }
    }

    /**
     * This method is called when we're done with the document.
     *
     * Normally, the parser should actually close the tags, but just in case it doesn't this easy-enough method will
     * take care of it.
     */
    public function exitRemainingTags()
    {
        while (count($this->stack) > 0) {
            $this->handler->endTag(
                new ParsedTag(array_pop($this->stack))
            );
        }
    }
}
PK.3Y��&&Fbunyad-amp/vendor/ampproject/amp-toolbox/src/Html/Parser/TagRegion.php<?php

namespace AmpProject\Html\Parser;

use AmpProject\FakeEnum;

/**
 * Enum for denoting to which structural region a tag belongs.
 *
 *
 * @method static TagRegion PRE_DOCTYPE()
 * @method static TagRegion PRE_HTML()
 * @method static TagRegion PRE_HEAD()
 * @method static TagRegion IN_HEAD()
 * @method static TagRegion PRE_BODY()
 * @method static TagRegion IN_BODY()
 * @method static TagRegion IN_SVG()
 *
 * @package ampproject/amp-toolbox
 */
final class TagRegion extends FakeEnum
{
    const PRE_DOCTYPE = 0;
    const PRE_HTML    = 1;
    const PRE_HEAD    = 2;
    const IN_HEAD     = 3;
    const PRE_BODY    = 4; // After closing <head> tag, but before open <body> tag.
    const IN_BODY     = 5;
    const IN_SVG      = 6;

    // We don't track the region after the closing body tag.
}
PK.3Y#��X
X
Hbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Configuration.php<?php

namespace AmpProject\Optimizer;

use AmpProject\Optimizer\Exception\UnknownConfigurationKey;

/**
 * Interface for a configuration object that validates and stores configuration settings.
 *
 * @package ampproject/amp-toolbox
 */
interface Configuration
{
    /**
     * Key to use for managing the array of active transformers.
     *
     * @var string
     */
    const KEY_TRANSFORMERS = 'transformers';

    /**
     * Array of known configuration keys and their default values.
     *
     * @var array{transformers: string[]}
     */
    const DEFAULTS = [
        self::KEY_TRANSFORMERS => self::DEFAULT_TRANSFORMERS,
    ];

    /**
     * Array of FQCNs of transformers to use for the default setup.
     *
     * @var string[]
     */
    const DEFAULT_TRANSFORMERS = [
        Transformer\TransformedIdentifier::class,
        Transformer\AmpBoilerplate::class,
        Transformer\OptimizeHeroImages::class,
        Transformer\ServerSideRendering::class,
        Transformer\AmpRuntimeCss::class,
        Transformer\AmpRuntimePreloads::class,
        Transformer\AmpBoilerplateErrorHandler::class,
        Transformer\GoogleFontsPreconnect::class,
        Transformer\RewriteAmpUrls::class,
        Transformer\OptimizeViewport::class,
        Transformer\ReorderHead::class,
        Transformer\OptimizeAmpBind::class,
        Transformer\MinifyHtml::class,
    ];

    /**
     * Register a new configuration class to use for a given transformer.
     *
     * @param string $transformerClass   FQCN of the transformer to register a configuration class for.
     * @param string $configurationClass FQCN of the configuration to use.
     */
    public function registerConfigurationClass($transformerClass, $configurationClass);

    /**
     * Check whether the configuration has a given setting.
     *
     * @param string $key Configuration key to look for.
     * @return bool Whether the requested configuration key was found or not.
     */
    public function has($key);

    /**
     * Get the value for a given key from the configuration.
     *
     * @param string $key Configuration key to get the value for.
     * @return mixed Configuration value for the requested key.
     * @throws UnknownConfigurationKey If the key was not found.
     */
    public function get($key);

    /**
     * Get the transformer-specific configuration for the requested transformer.
     *
     * @param string $transformer FQCN of the transformer to get the configuration for.
     * @return TransformerConfiguration Transformer-specific configuration.
     */
    public function getTransformerConfiguration($transformer);
}
PK.3Y��2��&�&Bbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/CssRule.php<?php

namespace AmpProject\Optimizer;

/**
 * CSS rule that provides semantic handling of media queries, selectors and properties.
 *
 * This is used in conjunction with CssRules for deduplication of CSS when adding styles during transformations.
 *
 * Note: This is a simplistic representation of CSS rules built for a specific purpose.
 * Make sure it supports a given use case before including in new code!
 *
 * @package ampproject/amp-toolbox
 */
final class CssRule
{
    /**
     * Characters to use for trimming CSS values.
     *
     * @var string
     */
    const CSS_TRIM_CHARACTERS = " \t\n\r\0\x0B;";

    /**
     * Placeholder to use in the rule to denote an ID that has yet to be defined.
     *
     * Use applyId() to finalize the CSS rule.
     *
     * @var string
     */
    const ID_PLACEHOLDER = '__ID__';

    /**
     * Selector(s) to use for the CSS rule.
     *
     * @var string[]
     */
    private $selectors;

    /**
     * Properties to apply to the selector(s).
     *
     * @var string[]
     */
    private $properties;

    /**
     * Media query that wraps the CSS rule.
     *
     * @var string
     */
    private $mediaQuery = '';

    /**
     * Rendered CSS cache.
     *
     * @var string|null
     */
    private $renderedCss;

    /**
     * Byte count cache.
     *
     * @var int|null
     */
    private $byteCount;

    /**
     * Instantiate a CssRule object.
     *
     * @param string|string[] $selectors  One or more selectors to use.
     * @param string|string[] $properties One or more properties to apply to the selector(s).
     */
    public function __construct($selectors, $properties)
    {
        $this->selectors = array_values(
            array_unique(
                array_filter(
                    array_map(
                        [$this, 'normalizeSelector'],
                        $this->separateSelectors($selectors)
                    )
                )
            )
        );

        $this->properties = array_values(
            array_unique(
                array_filter(
                    array_map(
                        [$this, 'normalizeProperty'],
                        $this->separateProperties($properties)
                    )
                )
            )
        );

        sort($this->properties);
    }

    /**
     * Create a new CSS rule that is wrapped in a media query.
     *
     * @param string          $mediaQuery Media query to wrap the CSS rule in.
     * @param string|string[] $selectors  One or more selectors to use.
     * @param string|string[] $properties One or more properties to apply to the selector(s).
     * @return self CSS rule wrapped in a media query.
     */
    public static function withMediaQuery($mediaQuery, $selectors, $properties)
    {
        $cssRule = new self($selectors, $properties);
        $cssRule->mediaQuery = $mediaQuery;
        return $cssRule;
    }

    /**
     * Get the selector(s) for this CSS rule.
     *
     * @return string[] Selector(s) of the CSS rule.
     */
    public function getSelectors()
    {
        return $this->selectors;
    }

    /**
     * Get the properties for this CSS rule.
     *
     * @return string[] Properties of the CSS rule.
     */
    public function getProperties()
    {
        return $this->properties;
    }

    /**
     * Get the media query for this CSS rule.
     *
     * @return string Media query for the CSS rule or an empty string if none is set.
     */
    public function getMediaQuery()
    {
        return $this->mediaQuery;
    }

    /**
     * Get the CSS for this CSS rule.
     *
     * @return string CSS for this CSS rule.
     */
    public function getCss()
    {
        if ($this->renderedCss === null) {
            $selectors = implode(',', $this->selectors);

            $properties = implode(
                ';',
                array_map(
                    static function ($property) {
                        return trim($property, self::CSS_TRIM_CHARACTERS);
                    },
                    $this->properties
                )
            );

            if (empty($selectors) || empty($properties)) {
                $this->renderedCss = '';
            } else {
                $this->renderedCss = "{$selectors}{{$properties}}";

                if (! empty($this->mediaQuery)) {
                    $this->renderedCss = "{$this->mediaQuery}{{$this->renderedCss}}";
                }
            }
        }

        return $this->renderedCss;
    }

    /**
     * Apply the provided ID across all ID placeholders.
     *
     * @param string $id ID to apply.
     * @return self
     */
    public function applyID($id)
    {
        $replacement_callback = static function ($css) use ($id) {
            return str_replace(self::ID_PLACEHOLDER, $id, $css);
        };

        $this->selectors  = array_map($replacement_callback, $this->selectors);
        $this->properties = array_map($replacement_callback, $this->properties);

        // Reset caches so they will need to be rebuilt.
        $this->renderedCss = null;
        $this->byteCount   = null;

        return $this;
    }

    /**
     * Check if the CSS rule can be merged with another provided CSS rule.
     *
     * @param CssRule $that CSS rule to check against.
     * @return bool Whether the two CSS rules can be merged.
     */
    public function canBeMerged(CssRule $that)
    {
        // As merging rules changes the CSS ordering, it is not a safe operation to do.
        // Therefore, we hard-code a single scenario here that we want to support (which is the most common case).
        // This is the only merge that is being done in the Node.js amp-toolbox, so we keep this for consistency
        // across implementations.

        if ($this->mediaQuery !== $that->mediaQuery) {
            return false;
        }

        if (count($this->properties) !== 1 || count($that->properties) !== 1) {
            return false;
        }

        if ($this->properties[0] !== 'display:none' || $that->properties[0] !== 'display:none') {
            return false;
        }

        return true;
    }

    /**
     * Merge this CSS rule with another CSS rule.
     *
     * This should only be done to same-properties rules within the same media query,
     * as the result will be wild otherwise.
     *
     * @param CssRule $that CSS rule to merge the current one with.
     * @return CssRule Merged Css rule.
     */
    public function mergeWith(CssRule $that)
    {
        $cssRule = new self(
            array_merge($this->selectors, $that->selectors),
            array_merge($this->properties, $that->properties)
        );

        $cssRule->mediaQuery = $this->mediaQuery;

        return $cssRule;
    }

    /**
     * Get the byte count for the CSS rule.
     *
     * @return int Byte count of the CSS rule.
     */
    public function getByteCount()
    {
        if ($this->byteCount === null) {
            $this->byteCount = strlen($this->getCss());
        }

        return $this->byteCount;
    }

    /**
     * Normalize a single selector.
     *
     * @param string $selector Selector to normalize.
     * @return string Normalized selector.
     */
    private function normalizeSelector($selector)
    {
        // Turn all series of whitespace into single spaces.
        $selector = preg_replace('/\s+/', ' ', $selector);

        // Remove spaces around selector qualifiers to keep properties compact.
        $selector = preg_replace('/ ?([>+~]) ?/', '$1', $selector);

        // Remove leading and trailing whitespace and commas.
        $selector = trim($selector, self::CSS_TRIM_CHARACTERS);

        return $selector;
    }

    /**
     * Normalize single property.
     *
     * @param string $property Property to normalize.
     * @return string Normalized property.
     */
    private function normalizeProperty($property)
    {
        // Turn all series of whitespace into single spaces.
        $property = preg_replace('/\s+/', ' ', $property);

        // Remove spaces around colons and semicolons to keep properties compact.
        $property = preg_replace('/ ?([:;]) ?/', '$1', $property);

        // Deduplicate semicolons.
        $property = preg_replace('/([;]+)/', ';', $property);

        // Remove leading and trailing whitespace and semicolons.
        $property = trim($property, self::CSS_TRIM_CHARACTERS);

        return $property;
    }

    /**
     * Separate selectors into individual values.
     *
     * @param string|string[]|array[] $selectors Selectors to separate.
     * @return string[] Separated selectors.
     */
    private function separateSelectors($selectors)
    {
        $separatedSelectors = [];

        foreach ((array)$selectors as $selectorString) {
            if (is_array($selectorString)) {
                $separatedSelectors = array_merge($separatedSelectors, $this->separateSelectors($selectorString));
            } else {
                $separatedSelectors = array_merge($separatedSelectors, explode(',', $selectorString));
            }
        }

        return $separatedSelectors;
    }

    /**
     * Separate properties into individual values.
     *
     * @param string|string[]|array[] $properties Properties to separate.
     * @return string[] Separated properties.
     */
    private function separateProperties($properties)
    {
        $separatedProperties = [];

        foreach ((array)$properties as $propertyString) {
            if (is_array($propertyString)) {
                $separatedProperties = array_merge($separatedProperties, $this->separateProperties($propertyString));
            } else {
                $separatedProperties = array_merge($separatedProperties, explode(';', $propertyString));
            }
        }

        return $separatedProperties;
    }
}
PK.3Y�EtY[[Cbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/CssRules.php<?php

namespace AmpProject\Optimizer;

/**
 * Collection of CSS rules.
 *
 * This is used in conjunction with CssRule for deduplication of CSS when adding styles during transformations.
 *
 * Note: This is a simplistic representation of CSS rules built for a specific purpose.
 * Make sure it supports a given use case before including in new code!
 *
 * @package ampproject/amp-toolbox
 */
final class CssRules
{
    /**
     * Internal array of CssRule objects.
     *
     * @var CssRule[]
     */
    private $cssRules = [];

    /**
     * Rendered CSS cache.
     *
     * @var string|null
     */
    private $renderedCss;

    /**
     * Byte count cache.
     *
     * @var int|null
     */
    private $byteCount;

    /**
     * Create a new CssRules collection from an array of CssRule objects.
     *
     * @param CssRule[] $cssRuleArray Array of CssRule objects.
     * @return CssRules CSS rules collection.
     */
    public static function fromCssRuleArray($cssRuleArray)
    {
        $cssRules = new self();

        array_walk(
            $cssRuleArray,
            static function (CssRule $cssRule) use (&$cssRules) {
                $cssRules = $cssRules->add($cssRule);
            }
        );

        return $cssRules;
    }

    /**
     * Add a CSS rule to the collection.
     *
     * @param CssRule $cssRule A single CSS rule.
     * @return CssRules Adapted collection with the added CSS rule.
     */
    public function add(CssRule $cssRule)
    {
        $clone = clone $this;

        if (empty($clone->cssRules)) {
            $clone->cssRules = [$cssRule];

            return $clone;
        }

        foreach ($clone->cssRules as $index => $existingCssRule) {
            if ($existingCssRule->canBeMerged($cssRule)) {
                $clone->cssRules[$index] = $existingCssRule->mergeWith($cssRule);
                // Rendered CSS and byte count need to be rebuilt, as some previously rendered CSS rule has changed.
                $clone->renderedCss = null;
                $clone->byteCount   = null;

                return $clone;
            }
        }

        $clone->cssRules[] = $cssRule;

        if ($clone->renderedCss !== null) {
            // As we didn't merge, we can save rerendering and just concat the single rule.
            $clone->renderedCss .= $cssRule->getCss();
        }

        if ($clone->byteCount !== null) {
            // As we didn't merge, we can save recounting and just add the bytes of the single rule.
            $clone->byteCount += $cssRule->getByteCount();
        }

        return $clone;
    }

    /**
     * Get the CSS for the entire collection of CSS rules.
     *
     * @return string String representation of the collection of CSS rules.
     */
    public function getCss()
    {
        if ($this->renderedCss === null) {
            $this->renderedCss = array_reduce(
                $this->cssRules,
                static function ($css, CssRule $cssRule) {
                    return $css . $cssRule->getCss();
                },
                ''
            );
        }

        return $this->renderedCss;
    }

    /**
     * Get the byte count for the entire collection of CSS rules.
     *
     * @return int Byte count of the collection of CSS rules.
     */
    public function getByteCount()
    {
        if ($this->byteCount === null) {
            $this->byteCount = array_reduce(
                $this->cssRules,
                static function ($byteCount, CssRule $cssRule) {
                    return $byteCount + $cssRule->getByteCount();
                },
                0
            );
        }

        return $this->byteCount;
    }
}
PK.3Y~�\&Obunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/DefaultConfiguration.php<?php

namespace AmpProject\Optimizer;

use AmpProject\Optimizer\Exception\InvalidConfigurationValue;
use AmpProject\Optimizer\Exception\UnknownConfigurationClass;
use AmpProject\Optimizer\Exception\UnknownConfigurationKey;

/**
 * Configuration object that validates and stores configuration settings.
 *
 * @package ampproject/amp-toolbox
 */
class DefaultConfiguration implements Configuration
{
    /**
     * Associative array of already validated configuration settings.
     *
     * @var array
     */
    protected $configuration;

    /**
     * Associative array mapping the transformer classes to their configuration classes.
     *
     * This can be extended by third-parties via:
     *
     * @see registerConfigurationClass()
     *
     * @var array
     */
    protected $transformerConfigurationClasses = [
        Transformer\AmpRuntimeCss::class         => Configuration\AmpRuntimeCssConfiguration::class,
        Transformer\AutoExtensions::class        => Configuration\AutoExtensionsConfiguration::class,
        Transformer\OptimizeAmpBind::class       => Configuration\OptimizeAmpBindConfiguration::class,
        Transformer\OptimizeHeroImages::class    => Configuration\OptimizeHeroImagesConfiguration::class,
        Transformer\PreloadHeroImage::class      => Configuration\PreloadHeroImageConfiguration::class,
        Transformer\RewriteAmpUrls::class        => Configuration\RewriteAmpUrlsConfiguration::class,
        Transformer\TransformedIdentifier::class => Configuration\TransformedIdentifierConfiguration::class,
        Transformer\OptimizeViewport::class      => Configuration\OptimizeViewportConfiguration::class,
        Transformer\MinifyHtml::class            => Configuration\MinifyHtmlConfiguration::class,
        Transformer\AmpStoryCssOptimizer::class  => Configuration\AmpStoryCssOptimizerConfiguration::class,
    ];

    /**
     * Instantiate a Configuration object.
     *
     * @param array $configurationData Optional. Associative array of configuration data to use. This will be merged
     *                                 with the default configuration and take precedence.
     */
    public function __construct($configurationData = [])
    {
        $this->configuration = array_merge(
            static::DEFAULTS,
            $this->validateConfigurationKeys($configurationData)
        );
    }

    /**
     * Register a new configuration class to use for a given transformer.
     *
     * @param string $transformerClass   FQCN of the transformer to register a configuration class for.
     * @param string $configurationClass FQCN of the configuration to use.
     */
    public function registerConfigurationClass($transformerClass, $configurationClass)
    {
        $this->transformerConfigurationClasses[$transformerClass] = $configurationClass;
    }

    /**
     * Validate an array of configuration settings.
     *
     * @param array $configurationData Associative array of configuration data to validate.
     * @return array Associative array of validated configuration data.
     */
    protected function validateConfigurationKeys($configurationData)
    {
        foreach ($configurationData as $key => $value) {
            $configurationData[$key] = $this->validate($key, $value);
        }

        return $configurationData;
    }

    /**
     * Validate an individual configuration setting.
     *
     * @param string $key   Key of the configuration setting.
     * @param mixed  $value Value of the configuration setting.
     * @return mixed Validated value for the provided configuration setting.
     * @throws InvalidConfigurationValue If the configuration value could not be validated.
     */
    protected function validate($key, $value)
    {
        switch ($key) {
            case Configuration::KEY_TRANSFORMERS:
                if (! is_array($value)) {
                    throw InvalidConfigurationValue::forInvalidValueType(
                        Configuration::KEY_TRANSFORMERS,
                        'array',
                        gettype($value)
                    );
                }

                foreach ($value as $index => $entry) {
                    if (! is_string($entry)) {
                        throw InvalidConfigurationValue::forInvalidSubValueType(
                            Configuration::KEY_TRANSFORMERS,
                            $index,
                            'string',
                            gettype($entry)
                        );
                    }
                }
        }

        return $value;
    }

    /**
     * Check whether the configuration has a given setting.
     *
     * @param string $key Configuration key to look for.
     * @return bool Whether the requested configuration key was found or not.
     */
    public function has($key)
    {
        return array_key_exists($key, $this->configuration);
    }

    /**
     * Get the value for a given key from the configuration.
     *
     * @param string $key Configuration key to get the value for.
     * @return mixed Configuration value for the requested key.
     * @throws UnknownConfigurationKey If the key was not found.
     */
    public function get($key)
    {
        if (! array_key_exists($key, $this->configuration)) {
            throw UnknownConfigurationKey::fromKey($key);
        }

        return $this->configuration[$key];
    }

    /**
     * Get the transformer-specific configuration for the requested transformer.
     *
     * @param string $transformer FQCN of the transformer to get the configuration for.
     * @return TransformerConfiguration Transformer-specific configuration.
     */
    public function getTransformerConfiguration($transformer)
    {
        if (! array_key_exists($transformer, $this->transformerConfigurationClasses)) {
            throw UnknownConfigurationClass::fromTransformerClass($transformer);
        }

        $configuration      = $this->has($transformer) ? $this->get($transformer) : [];
        $configurationClass = $this->transformerConfigurationClasses[$transformer];

        return new $configurationClass($configuration);
    }
}
PK.3YPf�,��@bunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Error.php<?php

namespace AmpProject\Optimizer;

/**
 * Error object to transport optimization errors.
 *
 * @package ampproject/amp-toolbox
 */
interface Error
{
    /**
     * Get the code of the error.
     *
     * @return string Code of the error.
     */
    public function getCode();

    /**
     * Get the message of the error.
     *
     * @return string Message of the error.
     */
    public function getMessage();
}
PK.3Y��G{{Jbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/ErrorCollection.php<?php

namespace AmpProject\Optimizer;

use ArrayIterator;
use Countable;
use IteratorAggregate;

/**
 * Collection of error objects to pass around the transformation engine.
 *
 * @package ampproject/amp-toolbox
 */
final class ErrorCollection implements Countable, IteratorAggregate
{
    /**
     * Internal storage for the errors that were added.
     *
     * @var Error[]
     */
    private $errors = [];

    /**
     * Add an error to the error collection.
     *
     * @param Error $error Error to add.
     * @return void
     */
    public function add(Error $error) // phpcs:ignore PHPCompatibility.Classes.NewClasses.errorFound
    {
        $this->errors[] = $error;
    }

    /**
     * Check whether the error collection contains an error for the given code.
     *
     * @param string $code Code of the error.
     * @return bool Whether the error collection contains an error with the given code.
     */
    public function has($code)
    {
        foreach ($this->errors as $error) {
            if ($error->getCode() === $code) {
                return true;
            }
        }

        return false;
    }

    /**
     * Get the iterator for iterating over the collection.
     *
     * @return ArrayIterator Iterator for the contained errors.
     */
    #[\ReturnTypeWillChange]
    public function getIterator()
    {
        return new ArrayIterator($this->errors);
    }

    /**
     * Count how many errors are contained within the error collection.
     *
     * @return int Number of contained errors.
     */
    #[\ReturnTypeWillChange]
    public function count()
    {
        return count($this->errors);
    }
}
PK.3Y�H�Dbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/HeroImage.php<?php

namespace AmpProject\Optimizer;

use AmpProject\Dom\Element;

/**
 * Representation of a hero image.
 *
 * This is used by the PreloadHeroImages transformer to store (potential) hero images to optimize.
 *
 * @package ampproject/amp-toolbox
 */
final class HeroImage
{
    /**
     * <amp-img> element wrapping the actual hero image.
     *
     * @var Element|null
     */
    private $ampImg;

    /**
     * Image src tag pointing to the image file.
     *
     * @var string
     */
    private $src;

    /**
     * Image media attribute.
     *
     * @var string
     */
    private $media;

    /**
     * Image srcset attribute.
     *
     * @var string
     */
    private $srcset;

    /**
     * HeroImage constructor.
     *
     * @param string       $src    Image src tag pointing to the image file.
     * @param string       $media  Image media attribute.
     * @param string       $srcset Image srcset attribute.
     * @param Element|null $ampImg <amp-img> element wrapping the actual hero image, or null if none.
     */
    public function __construct($src, $media, $srcset, $ampImg = null)
    {
        $this->src    = $src;
        $this->media  = $media;
        $this->srcset = $srcset;
        $this->ampImg = $ampImg;
    }

    /**
     * Get the <amp-img> element wrapping the actual hero image.
     *
     * @return Element|null AMP image element or null if none.
     */
    public function getAmpImg()
    {
        return $this->ampImg;
    }

    /**
     * Get the image src tag pointing to the image file.
     *
     * @return string Image src tag pointing to the image file.
     */
    public function getSrc()
    {
        return $this->src;
    }

    /**
     * Get the image media attribute.
     *
     * @return string Image media attribute.
     */
    public function getMedia()
    {
        return $this->media;
    }

    /**
     * Get the image srcset attribute.
     *
     * @return string Image srcset attribute.
     */
    public function getSrcset()
    {
        return $this->srcset;
    }
}
PK.3Y����//Jbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/ImageDimensions.php<?php

namespace AmpProject\Optimizer;

use AmpProject\Html\Attribute;
use AmpProject\Dom\Element;
use AmpProject\Layout;
use AmpProject\Html\LengthUnit;

final class ImageDimensions
{
    /**
     * Regular expression pattern to match the trailing unit of a dimension.
     *
     * @var string
     */
    const UNIT_REGEX_PATTERN = '/[0-9]+(?<unit>(?:[a-z]+|%))$/i';

    /**
     * Images smaller than 150px are considered tiny.
     *
     * @var int
     */
    const TINY_THRESHOLD = 150;

    /**
     * Image for which this represents the dimensions.
     *
     * @var Element
     */
    private $image;

    /**
     * Width of the image.
     *
     * @var int|float|string|null
     */
    private $width;

    /**
     * Height of the image.
     *
     * @var int|float|string|null
     */
    private $height;

    /**
     * Unit of the width of the image.
     *
     * @var int|float|string|null
     */
    private $widthUnit;

    /**
     * Unit of the height of the image.
     *
     * @var int|float|string|null
     */
    private $heightUnit;

    /**
     * Layout of the image.
     *
     * @var string|null
     */
    private $layout;

    /**
     * ImageDimensions constructor.
     *
     * @param Element $image Image to represent the dimensions of.
     */
    public function __construct(Element $image)
    {
        $this->image = $image;
    }

    /**
     * Get the dimensions to use from an element's parent(s).
     *
     * @return int[] Array containing the width and the height.
     */
    public function getDimensionsFromParent()
    {
        $level   = 0;
        $element = $this->image;
        while ($element->parentNode && ++$level < 3) {
            $element = $element->parentNode;

            if (! $element instanceof Element) {
                continue;
            }

            $width = $element->hasAttribute(Attribute::WIDTH)
                ? $element->getAttribute(Attribute::WIDTH)
                : -1;

            $height = $element->hasAttribute(Attribute::HEIGHT)
                ? $element->getAttribute(Attribute::HEIGHT)
                : -1;

            if (empty($width)) {
                $width = -1;
            }

            if (empty($height)) {
                $height = -1;
            }

            // Skip elements that don't provide any dimensions.
            if ($width === -1 && $height === -1) {
                continue;
            }

            // If layout is responsive, consider dimensions to be unbounded.
            if (Layout::RESPONSIVE === $element->getAttribute(Attribute::LAYOUT)) {
                return [PHP_INT_MAX, PHP_INT_MAX];
            }

            return [(int)$width, (int)$height];
        }

        return [-1, -1];
    }

    /**
     * Check whether the image is to be considered tiny and should be ignored.
     *
     * A tiny image is any image with width or height less than 150 pixels and a non-responsive layout.
     *
     * @param int|null $threshold Optional. Threshold to use. Defaults to 150 pixels.
     * @return bool Whether the image is tiny.
     */
    public function isTiny($threshold = self::TINY_THRESHOLD)
    {
        // Make sure we have a valid threshold to compare against.
        if ($threshold === null) {
            $threshold = self::TINY_THRESHOLD;
        }

        // For the 'fill' layout, we need to look at the parent container's dimensions.
        if (! $this->hasWidth() && ! $this->hasHeight()) {
            if ($this->getLayout() === Layout::FILL) {
                list($this->width, $this->height) = $this->getDimensionsFromParent();
            } else {
                return true;
            }
        }

        $width  = $this->getWidth();
        $height = $this->getHeight();

        // If one or both of the dimensions are missing, we cannot deduce an aspect ratio.
        if ($width === null || $height === null) {
            return true;
        }

        // If one or both of the dimensions are zero, the entire image will be invisible.
        if (
            (is_numeric($width) && $width <= 0)
            || (is_numeric($height) && $height <= 0)
        ) {
            return true;
        }

        $widthUnit  = $this->getWidthUnit();
        $heightUnit = $this->getHeightUnit();

        // Try to convert absolute units into their equivalent pixel value.
        if (!empty($widthUnit)) {
            $numericWidth = $this->getNumericWidth();
            if (false !== $numericWidth) {
                $width     = $numericWidth;
                $widthUnit = '';
            }
        }
        if (!empty($heightUnit)) {
            $numericHeight = $this->getNumericHeight();
            if (false !== $numericHeight) {
                $height     = $numericHeight;
                $heightUnit = '';
            }
        }

        // If only relative units are in use, we cannot assume much about the final dimensions.
        if (
            in_array($widthUnit, LengthUnit::RELATIVE_UNITS, true)
            && in_array($heightUnit, LengthUnit::RELATIVE_UNITS, true)
        ) {
            return false;
        }

        // If only one of the units is relative, compare the other against the threshold.
        if (in_array($widthUnit, LengthUnit::RELATIVE_UNITS, true)) {
            return is_numeric($height) && $height < $threshold;
        } elseif (in_array($heightUnit, LengthUnit::RELATIVE_UNITS, true)) {
            return is_numeric($width) && $width < $threshold;
        }

        switch ($this->getLayout()) {
            // For 'responsive' layout, the image adapts to the container and can grow beyond its dimensions.
            case Layout::RESPONSIVE:
                return false;

            // For 'fixed-height' layout, the width can grow and shrink, so we only compare the height.
            case Layout::FIXED_HEIGHT:
                return is_numeric($height) && $height < $threshold;

            // By default, we compare the dimensions against the provided threshold.
            default:
                return (is_numeric($width) && $width < $threshold)
                    || (is_numeric($height) && $height < $threshold);
        }
    }

    /**
     * Check whether the image has a width.
     *
     * @return bool Whether the image has a width.
     */
    public function hasWidth()
    {
        return $this->getWidth() !== null;
    }

    /**
     * Check whether the image has a height.
     *
     * @return bool Whether the image has a height.
     */
    public function hasHeight()
    {
        return $this->getHeight() !== null;
    }

    /**
     * Check whether the image has a layout.
     *
     * @return bool Whether the image has a layout.
     */
    public function hasLayout()
    {
        return $this->getLayout() !== '';
    }

    /**
     * Get the width of the image.
     *
     * @return int|float|string|null Width of the image, or null if the image has no width.
     */
    public function getWidth()
    {
        if ($this->width === null) {
            $this->width = -1;
            $width       = $this->image->getAttribute(Attribute::WIDTH);
            if (trim($width) !== '') {
                if (is_numeric($width)) {
                    $intWidth    = (int)$width;
                    $floatWidth  = (float)$width;
                    $this->width = $intWidth == $floatWidth ? $intWidth : $floatWidth;
                } else {
                    $this->width = $width;
                }
            }
        }

        return $this->width !== -1 ? $this->width : null;
    }

    /**
     * Get the height of the image.
     *
     * @return int|float|string|null Height of the image, or null if the image has no width.
     */
    public function getHeight()
    {
        if ($this->height === null) {
            $this->height = -1;
            $height       = $this->image->getAttribute(Attribute::HEIGHT);
            if (trim($height) !== '') {
                if (is_numeric($height)) {
                    $intHeight    = (int)$height;
                    $floatHeight  = (float)$height;
                    $this->height = $intHeight == $floatHeight ? $intHeight : $floatHeight;
                } else {
                    $this->height = $height;
                }
            }
        }

        return $this->height !== -1 ? $this->height : null;
    }

    /**
     * Get the numeric width of the image.
     *
     * This automatically converts some of the units into numeric pixel values.
     *
     * @return int|float|false Numeric width of the image, or false if the width is not numeric.
     */
    public function getNumericWidth()
    {
        $width     = $this->getWidth();
        $widthUnit = $this->getWidthUnit();

        if (is_numeric($width)) {
            return $width;
        }

        if (!is_string($width) || empty($widthUnit)) {
            return false;
        }

        $width = trim(str_replace($widthUnit, '', $width));

        if (!is_numeric($width)) {
            return false;
        }

        $intWidth   = (int)$width;
        $floatWidth = (float)$width;
        $width      = $intWidth == $floatWidth ? $intWidth : $floatWidth;

        return LengthUnit::convertIntoPixels($width, $widthUnit);
    }

    /**
     * Get the numeric height of the image.
     *
     * This automatically converts some of the units into numeric pixel values.
     *
     * @return int|float|false Numeric height of the image, or false if the height is not numeric.
     */
    public function getNumericHeight()
    {
        $height     = $this->getHeight();
        $heightUnit = $this->getHeightUnit();

        if (is_numeric($height)) {
            return $height;
        }

        if (!is_string($height) || empty($heightUnit)) {
            return false;
        }

        $height = trim(str_replace($heightUnit, '', $height));

        if (!is_numeric($height)) {
            return false;
        }

        $intHeight   = (int)$height;
        $floatHeight = (float)$height;
        $height      = $intHeight == $floatHeight ? $intHeight : $floatHeight;

        return LengthUnit::convertIntoPixels($height, $heightUnit);
    }

    /**
     * Get the unit of the width.
     *
     * @return string Unit of the width, or an empty string if none found.
     */
    public function getWidthUnit()
    {
        if ($this->widthUnit !== null) {
            return $this->widthUnit;
        }
        $width = $this->getWidth();

        if (!is_string($width)) {
            $this->widthUnit = '';
            return $this->widthUnit;
        }

        $matches = [];

        if (!preg_match(self::UNIT_REGEX_PATTERN, $width, $matches)) {
            $this->widthUnit = '';
            return $this->widthUnit;
        }

        $this->widthUnit = strtolower(trim($matches['unit']));
        return $this->widthUnit;
    }


    /**
     * Get the unit of the height.
     *
     * @return string Unit of the height, or an empty string if none found.
     */
    public function getHeightUnit()
    {
        if ($this->heightUnit !== null) {
            return $this->heightUnit;
        }
        $height = $this->getHeight();

        if (!is_string($height)) {
            $this->heightUnit = '';
            return $this->heightUnit;
        }

        $matches = [];

        if (!preg_match(self::UNIT_REGEX_PATTERN, $height, $matches)) {
            $this->heightUnit = '';
            return $this->heightUnit;
        }

        $this->heightUnit = strtolower(trim($matches['unit']));
        return $this->heightUnit;
    }

    /**
     * Get the layout of the image.
     *
     * @return string Layout of the image, or an empty string if the image has no layout.
     */
    public function getLayout()
    {
        if ($this->layout === null) {
            $this->layout = $this->image->hasAttribute(Attribute::LAYOUT)
                ? (string)$this->image->getAttribute(Attribute::LAYOUT)
                : '';
        }

        return $this->layout;
    }
}
PK.3Y:nnHbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/LocalFallback.php<?php

namespace AmpProject\Optimizer;

use AmpProject\Amp;

final class LocalFallback
{
    /**
     * Domain for which the mapped files will have a local fallback.
     */
    const MAPPED_DOMAIN = Amp::CACHE_HOST;

    /**
     * Root folder where the local fallback files are stored.
     *
     * @var string
     */
    const ROOT_FOLDER = __DIR__ . '/../../resources/local_fallback';

    /**
     * Array of mapped files for which a local fallback is provided.
     *
     * @var string[]
     */
    const MAPPED_FILES = [
        'rtv/metadata',
        'v0.css',
    ];

    /**
     * Get the mappings that are provided as local fallbacks.
     *
     * @return array Associative array of mappings mapping a URL to a filepath.
     */
    public static function getMappings()
    {
        static $mappings = null;

        if ($mappings === null) {
            $rootFolder = realpath(self::ROOT_FOLDER);
            foreach (self::MAPPED_FILES as $mappedFile) {
                $mappings[self::MAPPED_DOMAIN . '/' . $mappedFile] = "{$rootFolder}/{$mappedFile}";
            }
        }

        return $mappings;
    }
}
PK.3Y�VcObunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/TransformationEngine.php<?php

namespace AmpProject\Optimizer;

use AmpProject\Dom\Document;
use AmpProject\RemoteGetRequest;
use AmpProject\RemoteRequest\CurlRemoteGetRequest;
use AmpProject\RemoteRequest\TemporaryFileCachedRemoteGetRequest;
use AmpProject\Validator\Spec;
use ReflectionClass;
use ReflectionException;

/**
 * Transformation engine that accepts HTML and returns optimized HTML.
 *
 * @package ampproject/amp-toolbox
 */
final class TransformationEngine
{
    /**
     * Internal storage for the configuration settings.
     *
     * @var Configuration
     */
    private $configuration;

    /**
     * Transport to use for remote requests.
     *
     * @var RemoteGetRequest
     */
    private $remoteRequest;

    /**
     * Collection of transformers that were initialized.
     *
     * @var Transformer[]
     */
    private $transformers;

    /**
     * Validator Spec instance to use.
     *
     * @var Spec
     */
    private $spec;

    /**
     * Instantiate a TransformationEngine object.
     *
     * @param Configuration|null    $configuration Optional. Configuration data to use for setting up the transformers.
     * @param RemoteGetRequest|null $remoteRequest Optional. Transport to use for remote requests. Defaults to the
     *                                             CurlRemoteGetRequest implementation shipped with the library.
     * @param Spec                  $spec          Optional. Validator spec instance to use.
     */
    public function __construct(
        Configuration $configuration = null,
        RemoteGetRequest $remoteRequest = null,
        Spec $spec = null
    ) {
        $this->configuration = isset($configuration) ? $configuration : new DefaultConfiguration();
        $this->remoteRequest = $remoteRequest;
        $this->spec          = $spec;

        $this->initializeTransformers();
    }

    /**
     * Apply transformations to the provided DOM document.
     *
     * @param Document        $document DOM document to apply the transformations to.
     * @param ErrorCollection $errors   Collection of errors that are collected during transformation.
     * @return void
     */
    public function optimizeDom(Document $document, ErrorCollection $errors)
    {
        foreach ($this->transformers as $transformer) {
            $transformer->transform($document, $errors);
        }
    }

    /**
     * Apply transformations to the provided string of HTML markup.
     *
     * @param string          $html   HTML markup to apply the transformations to.
     * @param ErrorCollection $errors Collection of errors that are collected during transformation.
     * @return string Optimized HTML string.
     */
    public function optimizeHtml($html, ErrorCollection $errors)
    {
        $dom = Document::fromHtml($html);
        $this->optimizeDom($dom, $errors);

        return $dom->saveHTML();
    }

    /**
     * Initialize the array of transformers to use.
     */
    private function initializeTransformers()
    {
        $this->transformers = [];

        foreach ($this->configuration->get(Configuration::KEY_TRANSFORMERS) as $transformerClass) {
            $this->transformers[$transformerClass] = new $transformerClass(
                ...$this->getTransformerDependencies($transformerClass)
            );
        }
    }

    /**
     * Get the dependencies of a transformer and put them in the correct order.
     *
     * @param string $transformerClass Class of the transformer to get the dependencies for.
     * @return array Array of dependencies in the order as they appear in the transformer's constructor.
     * @throws ReflectionException If the transformer could not be reflected upon.
     */
    private function getTransformerDependencies($transformerClass)
    {
        $constructor = (new ReflectionClass($transformerClass))->getConstructor();

        if ($constructor === null) {
            return [];
        }

        $dependencies = [];
        foreach ($constructor->getParameters() as $parameter) {
            $dependencyType = null;

            // The use of `ReflectionParameter::getClass()` is deprecated in PHP 8, and is superseded
            // by `ReflectionParameter::getType()`. See https://github.com/php/php-src/pull/5209.
            if (PHP_VERSION_ID >= 70100) {
                if ($parameter->getType()) {
                    /** @var \ReflectionNamedType $returnType */
                    $returnType = $parameter->getType();
                    $dependencyType = new ReflectionClass($returnType->getName());
                }
            } else {
                $dependencyType = $parameter->getClass();
            }

            if ($dependencyType === null) {
                // No type provided, so we pass `null` in the hopes that the argument is optional.
                $dependencies[] = null;
                continue;
            }

            if (is_a($dependencyType->name, TransformerConfiguration::class, true)) {
                $dependencies[] = $this->configuration->getTransformerConfiguration($transformerClass);
                continue;
            }

            if (is_a($dependencyType->name, RemoteGetRequest::class, true)) {
                if ($this->remoteRequest === null) {
                    $this->remoteRequest = new TemporaryFileCachedRemoteGetRequest(new CurlRemoteGetRequest());
                }
                $dependencies[] = $this->remoteRequest;
                continue;
            }

            if (is_a($dependencyType->name, Spec::class, true)) {
                if ($this->spec === null) {
                    $this->spec = new Spec();
                }
                $dependencies[] = $this->spec;
                continue;
            }

            // Unknown dependency type, so we pass `null` in the hopes that the argument is optional.
            $dependencies[] = null;
        }

        return $dependencies;
    }
}
PK.3Y�O�+BBFbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Transformer.php<?php

namespace AmpProject\Optimizer;

use AmpProject\Dom\Document;

/**
 * A singular transformer that is part of the transformation engine.
 *
 * @package ampproject/amp-toolbox
 */
interface Transformer
{
    /**
     * Apply transformations to the provided DOM document.
     *
     * @param Document        $document DOM document to apply the transformations to.
     * @param ErrorCollection $errors   Collection of errors that are collected during transformation.
     * @return void
     */
    public function transform(Document $document, ErrorCollection $errors);
}
PK.3Y!�T��Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/TransformerConfiguration.php<?php

namespace AmpProject\Optimizer;

use AmpProject\Optimizer\Exception\UnknownConfigurationKey;

/**
 * Interface for a configuration that validates and stores configuration settings for an individual transformer.
 *
 * @package ampproject/amp-toolbox
 */
interface TransformerConfiguration
{
    /**
     * Get the value for a given key.
     *
     * The key is assumed to exist and will throw an exception if it can't be retrieved.
     * This means that all configuration entries should come with a default value.
     *
     * @param string $key Key of the configuration entry to retrieve.
     * @return mixed Value stored under the given configuration key.
     * @throws UnknownConfigurationKey If an unknown key was provided.
     */
    public function get($key);

    /**
     * Get an array of configuration entries for this transformer configuration.
     *
     * @return array Associative array of configuration entries.
     */
    public function toArray();
}
PK.3YZ�3
3
cbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Configuration/AmpRuntimeCssConfiguration.php<?php

namespace AmpProject\Optimizer\Configuration;

use AmpProject\Optimizer\Exception\InvalidConfigurationValue;
use AmpProject\RuntimeVersion;

/**
 * Configuration for the AmpRuntimeCss transformer.
 *
 * @property bool    $canary  Whether to use the canary version or not. Defaults to false.
 * @property string  $styles  Runtime styles to use.
 * @property string  $version Version string to use. Defaults to an empty string.
 *
 * @package ampproject/amp-toolbox
 */
final class AmpRuntimeCssConfiguration extends BaseTransformerConfiguration
{
    /**
     * Configuration key that holds the flag for the canary version of the runtime style.
     *
     * @var string
     */
    const CANARY = RuntimeVersion::OPTION_CANARY;

    /**
     * Configuration key that holds the actual runtime CSS styles to use.
     *
     * If the styles are not provided, the latest runtime styles are fetched from cdn.ampproject.org.
     *
     * @var string
     */
    const STYLES = 'styles';

    /**
     * Configuration key that holds the version number to use.
     *
     * If the version is not provided, the latest runtime version is fetched from cdn.ampproject.org.
     *
     * @var string
     */
    const VERSION = 'version';

    /**
     * Get the associative array of allowed keys and their respective default values.
     *
     * The array index is the key and the array value is the key's default value.
     *
     * @return array Associative array of allowed keys and their respective default values.
     */
    protected function getAllowedKeys()
    {
        return [
            self::CANARY  => false,
            self::STYLES  => '',
            self::VERSION => '',
        ];
    }

    /**
     * Validate an individual configuration entry.
     *
     * @param string $key   Key of the configuration entry to validate.
     * @param mixed  $value Value of the configuration entry to validate.
     * @return mixed Validated value.
     */
    protected function validate($key, $value)
    {
        switch ($key) {
            case self::CANARY:
                if (! is_bool($value)) {
                    throw InvalidConfigurationValue::forInvalidSubValueType(
                        self::class,
                        self::CANARY,
                        'boolean',
                        is_object($value) ? get_class($value) : gettype($value)
                    );
                }
                break;

            case self::STYLES:
                if (! is_string($value)) {
                    throw InvalidConfigurationValue::forInvalidSubValueType(
                        self::class,
                        self::STYLES,
                        'string',
                        is_object($value) ? get_class($value) : gettype($value)
                    );
                }
                $value = trim($value);
                break;

            case self::VERSION:
                if (! is_string($value)) {
                    throw InvalidConfigurationValue::forInvalidSubValueType(
                        self::class,
                        self::VERSION,
                        'string',
                        is_object($value) ? get_class($value) : gettype($value)
                    );
                }
                $value = trim($value);
                break;
        }

        return $value;
    }
}
PK.3Y�� �		jbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Configuration/AmpStoryCssOptimizerConfiguration.php<?php

namespace AmpProject\Optimizer\Configuration;

use AmpProject\Optimizer\Configuration\BaseTransformerConfiguration;
use AmpProject\Optimizer\Exception\InvalidConfigurationValue;

/**
 * Configuration for the AmpStoryCssOptimizer transformer.
 *
 * @property bool $optimizeAmpStory Whether to enable AMP Story optimizations or not. Defaults to `false`.
 *
 * @package ampproject/amp-toolbox
 */
final class AmpStoryCssOptimizerConfiguration extends BaseTransformerConfiguration
{
    /**
     * Whether optimization is enabled.
     *
     * @var string
     */
    const OPTIMIZE_AMP_STORY = 'optimizeAmpStory';

    /**
     * Get the associative array of allowed keys and their respective default values.
     *
     * The array index is the key and the array value is the key's default value.
     *
     * @return array Associative array of allowed keys and their respective default values.
     */
    protected function getAllowedKeys()
    {
        return [
            self::OPTIMIZE_AMP_STORY => false,
        ];
    }

    /**
     * Validate an individual configuration entry.
     *
     * @param string $key   Key of the configuration entry to validate.
     * @param mixed  $value Value of the configuration entry to validate.
     * @return mixed Validated value.
     */
    protected function validate($key, $value)
    {
        switch ($key) {
            case self::OPTIMIZE_AMP_STORY:
                if (! is_bool($value)) {
                    throw InvalidConfigurationValue::forInvalidSubValueType(
                        self::class,
                        self::OPTIMIZE_AMP_STORY,
                        'boolean',
                        gettype($value)
                    );
                }
                break;
        }

        return $value;
    }
}
PK.3YSB%??dbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Configuration/AutoExtensionsConfiguration.php<?php

namespace AmpProject\Optimizer\Configuration;

use AmpProject\Amp;
use AmpProject\Exception\InvalidExtension;
use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Optimizer\Exception\InvalidConfigurationValue;
use ReflectionClass;

/**
 * Configuration for the AutoExtensions transformer.
 *
 * @property string $format                  Specifies the AMP format. Defaults to `AMP`.
 * @property bool   $autoExtensionImport     Set to `false` to disable the auto extension import. Defaults to `true`.
 * @property bool   $experimentBindAttribute Enables experimental conversion of bind attributes. Defaults to `false`.
 *
 * @package ampproject/amp-toolbox
 */
final class AutoExtensionsConfiguration extends BaseTransformerConfiguration
{
    /**
     * Configuration key that specifies the AMP format.
     *
     * @var string
     */
    const FORMAT = 'format';

    /**
     * Configuration key that can disable the automatic importing of extension.
     *
     * @var string
     */
    const AUTO_EXTENSION_IMPORT = 'autoExtensionImport';

    /**
     * Configuration key that enables experimental conversion of bind attributes.
     *
     * @var string
     */
    const EXPERIMENT_BIND_ATTRIBUTE = 'experimentBindAttribute';

    /**
     * Configuration key that allows individual configuration of extension versions.
     *
     * @var string
     */
    const EXTENSION_VERSIONS = 'extensionVersions';

    /**
     * An array of extension names that will not auto import.
     *
     * @var string
     */
    const IGNORED_EXTENSIONS = 'ignoredExtensions';

    /**
     * An array of extension names that will not auto import.
     *
     * @var string
     */
    const REMOVE_UNNEEDED_EXTENSIONS = 'removeUnneededExtensions';

    /**
     * Get the associative array of allowed keys and their respective default values.
     *
     * The array index is the key and the array value is the key's default value.
     *
     * @return array Associative array of allowed keys and their respective default values.
     */
    protected function getAllowedKeys()
    {
        return [
            self::FORMAT                     => Format::AMP,
            self::AUTO_EXTENSION_IMPORT      => true,
            self::EXPERIMENT_BIND_ATTRIBUTE  => false,
            self::EXTENSION_VERSIONS         => [],
            self::IGNORED_EXTENSIONS         => [],
            self::REMOVE_UNNEEDED_EXTENSIONS => false,
        ];
    }

    /**
     * Validate an individual configuration entry.
     *
     * @param string $key   Key of the configuration entry to validate.
     * @param mixed  $value Value of the configuration entry to validate.
     * @return mixed Validated value.
     */
    protected function validate($key, $value)
    {
        switch ($key) {
            case self::FORMAT:
                if (! is_string($value)) {
                    throw InvalidConfigurationValue::forInvalidSubValueType(
                        self::class,
                        self::FORMAT,
                        'string',
                        gettype($value)
                    );
                }

                if (! in_array($value, Amp::FORMATS, true)) {
                    throw InvalidConfigurationValue::forUnknownSubValue(
                        self::class,
                        self::FORMAT,
                        Amp::FORMATS,
                        $value
                    );
                }
                break;

            case self::AUTO_EXTENSION_IMPORT:
                if (! is_bool($value)) {
                    throw InvalidConfigurationValue::forInvalidSubValueType(
                        self::class,
                        self::AUTO_EXTENSION_IMPORT,
                        'boolean',
                        gettype($value)
                    );
                }
                break;

            case self::EXPERIMENT_BIND_ATTRIBUTE:
                if (! is_bool($value)) {
                    throw InvalidConfigurationValue::forInvalidSubValueType(
                        self::class,
                        self::EXPERIMENT_BIND_ATTRIBUTE,
                        'boolean',
                        gettype($value)
                    );
                }
                break;

            case self::EXTENSION_VERSIONS:
                if (! is_array($value)) {
                    throw InvalidConfigurationValue::forInvalidSubValueType(
                        self::class,
                        self::EXTENSION_VERSIONS,
                        'array',
                        gettype($value)
                    );
                }
                break;

            case self::IGNORED_EXTENSIONS:
                if (! is_array($value)) {
                    throw InvalidConfigurationValue::forInvalidSubValueType(
                        self::class,
                        self::IGNORED_EXTENSIONS,
                        'array',
                        gettype($value)
                    );
                }

                // Assert that the extension names in the ignore list are valid extensions.
                $reflection = new ReflectionClass(Extension::class);
                $constants = $reflection->getConstants();

                foreach ($value as $extension) {
                    if (! in_array($extension, $constants, true)) {
                        throw InvalidExtension::forExtension($extension);
                    }
                }
                break;

            case self::REMOVE_UNNEEDED_EXTENSIONS:
                if (! is_bool($value)) {
                    throw InvalidConfigurationValue::forInvalidSubValueType(
                        self::class,
                        self::REMOVE_UNNEEDED_EXTENSIONS,
                        'boolean',
                        gettype($value)
                    );
                }
                break;
        }

        return $value;
    }
}
PK.3Y�����ebunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Configuration/BaseTransformerConfiguration.php<?php

namespace AmpProject\Optimizer\Configuration;

use AmpProject\Optimizer\Exception\InvalidConfigurationKey;
use AmpProject\Optimizer\Exception\UnknownConfigurationKey;
use AmpProject\Optimizer\TransformerConfiguration;

/**
 * Configuration for the AmpRuntimeCss transformer.
 *
 * @property string  $version Version string to use. Defaults to an empty string.
 * @property boolean $canary  Whether to use the canary version or not. Defaults to false.
 *
 * @package ampproject/amp-toolbox
 */
abstract class BaseTransformerConfiguration implements TransformerConfiguration
{
    /**
     * Associative array of allowed keys and their respective default values.
     *
     * @var array
     */
    private $allowedKeys;

    /**
     * Associative array of configuration data.
     *
     * @var array
     */
    private $configuration = [];

    /**
     * Instantiate an AmpRuntimeCssConfiguration object.
     *
     * @param array $configuration Optional. Associative array of configuration data. Defaults to an empty array.
     */
    public function __construct($configuration = [])
    {
        $this->allowedKeys = $this->getAllowedKeys();
        $configuration     = array_merge($this->allowedKeys, $configuration);

        foreach ($configuration as $key => $value) {
            if (! array_key_exists($key, $this->allowedKeys)) {
                throw InvalidConfigurationKey::fromTransformerKey(static::class, $key);
            }
            $this->configuration[$key] = $this->validate($key, $value);
        }
    }

    /**
     * Get the value for a given key.
     *
     * The key is assumed to exist and will throw an exception if it can't be retrieved.
     * This means that all configuration entries should come with a default value.
     *
     * @param string $key Key of the configuration entry to retrieve.
     * @return mixed Value stored under the given configuration key.
     * @throws UnknownConfigurationKey If an unknown key was provided.
     */
    public function get($key)
    {
        if (! array_key_exists($key, $this->allowedKeys)) {
            throw UnknownConfigurationKey::fromTransformerKey(static::class, $key);
        }

        // At this point, the configuration should either have received this value or filled it with a default.
        return $this->configuration[$key];
    }

    /**
     * Magic getter to get value for a given key.
     *
     * Mostly for backward compatibility.
     *
     * @param string $name Name of the property to set.
     */
    public function __get($name)
    {
        if (! array_key_exists($name, $this->allowedKeys)) {
            // Mimic regular PHP behavior for missing notices.
            trigger_error('Undefined property: ' . get_class($this) . '::$' . $name, E_USER_NOTICE);
            return null;
        }

        return $this->configuration[$name];
    }

    /**
     * Magic setter for configurations.
     *
     * Mostly for backward compatibility.
     *
     * @param string $name Name of the property to set.
     * @param mixed  $value Value of the property.
     */
    public function __set($name, $value)
    {
        if (! array_key_exists($name, $this->allowedKeys)) {
            // Mimic regular PHP behavior for missing notices.
            trigger_error('Undefined property: ' . get_class($this) . '::$' . $name, E_USER_NOTICE);
            return;
        }

        $this->configuration[$name] = $value;
    }

    /**
     * Magic method to check whether a configuration exists.
     *
     * Mostly for backward compatibility.
     *
     * @param string $name Name of the property to set.
     */
    public function __isset($name)
    {
        if (! array_key_exists($name, $this->allowedKeys)) {
            // Mimic regular PHP behavior for missing notices.
            trigger_error('Undefined property: ' . get_class($this) . '::$' . $name, E_USER_NOTICE);
            return false;
        }

        return isset($this->configuration[$name]);
    }

    /**
     * Get an array of configuration entries for this transformer configuration.
     *
     * @return array Associative array of configuration entries.
     */
    public function toArray()
    {
        $configArray = [];

        foreach (array_keys($this->allowedKeys) as $key) {
            $configArray[$key] = $this->configuration[$key];
        }

        return $configArray;
    }

    /**
     * Get the associative array of allowed keys and their respective default values.
     *
     * The array index is the key and the array value is the key's default value.
     *
     * @return array Associative array of allowed keys and their respective default values.
     */
    abstract protected function getAllowedKeys();

    /**
     * Validate an individual configuration entry.
     *
     * @param string $key   Key of the configuration entry to validate.
     * @param mixed  $value Value of the configuration entry to validate.
     * @return mixed Validated value.
     */
    abstract protected function validate($key, $value);
}
PK.3Y|�H�`bunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Configuration/MinifyHtmlConfiguration.php<?php

namespace AmpProject\Optimizer\Configuration;

use AmpProject\Optimizer\Exception\InvalidConfigurationValue;

/**
 * Configuration for the MinifyHtml transformer.
 *
 * @property bool   $minify                Whether minification is enabled.
 * @property bool   $minifyAmpScript       Whether amp-script minification is enabled.
 * @property bool   $minifyJSON            Whether JSON data minification is enabled.
 * @property bool   $collapseWhitespace    Whether collapsing whitespace is enabled.
 * @property bool   $removeComments        Whether comments should be removed.
 * @property bool   $canCollapseWhitespace Whether whitespace can be collapsed.
 * @property bool   $inBody                Whether the node is in the body.
 * @property string $commentIgnorePattern  Regex pattern of comments to keep.
 *
 * @package ampproject/amp-toolbox
 */
final class MinifyHtmlConfiguration extends BaseTransformerConfiguration
{
    /**
     * Whether minification is enabled.
     *
     * @var string
     */
    const MINIFY = 'minify';

    /**
     * Whether amp-script minification is enabled.
     *
     * @var string
     */
    const MINIFY_AMP_SCRIPT = 'minifyAmpScript';

    /**
     * Whether JSON data minification is enabled.
     *
     * @var string
     */
    const MINIFY_JSON = 'minifyJSON';

    /**
     * Whether collapsing whitespace is enabled.
     *
     * @var string
     */
    const COLLAPSE_WHITESPACE = 'collapseWhitespace';

    /**
     * Whether comments should be removed.
     *
     * @var string
     */
    const REMOVE_COMMENTS = 'removeComments';

    /**
     * Regular expression pattern of comments to keep.
     *
     * @var string
     */
    const COMMENT_IGNORE_PATTERN = 'commentIgnorePattern';

    /**
     * Get the associative array of allowed keys and their respective default values.
     *
     * The array index is the key and the array value is the key's default value.
     *
     * @return array Associative array of allowed keys and their respective default values.
     */
    protected function getAllowedKeys()
    {
        return [
            self::MINIFY                  => true,
            self::MINIFY_AMP_SCRIPT       => false,
            self::MINIFY_JSON             => true,
            self::COLLAPSE_WHITESPACE     => false,
            self::REMOVE_COMMENTS         => true,
            self::COMMENT_IGNORE_PATTERN  => '',
        ];
    }

    /**
     * Validate an individual configuration entry.
     *
     * @param string $key   Key of the configuration entry to validate.
     * @param mixed  $value Value of the configuration entry to validate.
     * @return mixed Validated value.
     */
    protected function validate($key, $value)
    {
        switch ($key) {
            case self::MINIFY:
            case self::MINIFY_JSON:
            case self::MINIFY_AMP_SCRIPT:
            case self::COLLAPSE_WHITESPACE:
            case self::REMOVE_COMMENTS:
                if (! is_bool($value)) {
                    throw InvalidConfigurationValue::forInvalidSubValueType(
                        self::class,
                        $key,
                        'boolean',
                        is_object($value) ? get_class($value) : gettype($value)
                    );
                }
                break;
            case self::COMMENT_IGNORE_PATTERN:
                if (! is_string($value)) {
                    throw InvalidConfigurationValue::forInvalidSubValueType(
                        self::class,
                        self::COMMENT_IGNORE_PATTERN,
                        'string',
                        is_object($value) ? get_class($value) : gettype($value)
                    );
                }
                $value = trim($value);
                break;
        }

        return $value;
    }
}
PK.3Y޿r���ebunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Configuration/OptimizeAmpBindConfiguration.php<?php

namespace AmpProject\Optimizer\Configuration;

use AmpProject\Optimizer\Exception\InvalidConfigurationValue;

/**
 * Configuration for the OptimizeAmpBind transformer.
 *
 * @property bool $enabled Whether the amp-bind optimizer is enabled.
 *
 * @package ampproject/amp-toolbox
 */
final class OptimizeAmpBindConfiguration extends BaseTransformerConfiguration
{
    /**
     * Whether the amp-bind optimizer is enabled.
     *
     * @var string
     */
    const ENABLED = 'enabled';

    /**
     * Get the associative array of allowed keys and their respective default values.
     *
     * The array index is the key and the array value is the key's default value.
     *
     * @return array Associative array of allowed keys and their respective default values.
     */
    protected function getAllowedKeys()
    {
        return [
            self::ENABLED => true,
        ];
    }


    /**
     * Validate an individual configuration entry.
     *
     * @param string $key   Key of the configuration entry to validate.
     * @param mixed  $value Value of the configuration entry to validate.
     * @return mixed Validated value.
     */
    protected function validate($key, $value)
    {
        switch ($key) {
            case self::ENABLED:
                if (! is_bool($value)) {
                    throw InvalidConfigurationValue::forInvalidSubValueType(
                        self::class,
                        self::ENABLED,
                        'boolean',
                        is_object($value) ? get_class($value) : gettype($value)
                    );
                }
                break;
        }

        return $value;
    }
}
PK.3Y����cchbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Configuration/OptimizeHeroImagesConfiguration.php<?php

namespace AmpProject\Optimizer\Configuration;

use AmpProject\Optimizer\Exception\InvalidConfigurationValue;

/**
 * Configuration for the OptimizeHeroImages transformer.
 *
 * @property string $inlineStyleBackupAttribute Name of the attribute that is used to store inline styles that were
 *                                              moved to <style amp-custom>
 * @property int    $maxHeroImageCount          Maximum number of hero images that are accepted. Defaults to 2.
 * @property bool   $optimizeHeroImages         Whether to optimize hero images. Defaults to true.
 * @property bool   $preloadSrcset              Whether to enable preloading of images with a srcset attribute. Defaults
 *                                              to false.
 *
 * @package ampproject/amp-toolbox
 */
final class OptimizeHeroImagesConfiguration extends BaseTransformerConfiguration
{
    /**
     * Configuration key that holds the attribute that is used to store inline styles that
     * were moved to <style amp-custom>.
     *
     * An empty string signifies that no backup is available.
     *
     * @var string
     */
    const INLINE_STYLE_BACKUP_ATTRIBUTE = 'inlineStyleBackupAttribute';

    /**
     * Configuration key that defines how many hero images are accepted.
     *
     * @var string
     */
    const MAX_HERO_IMAGE_COUNT = 'maxHeroImageCount';

    /**
     * Configuration key that holds the switch to disable preloading of hero images.
     *
     * @var string
     */
    const OPTIMIZE_HERO_IMAGES = 'optimizeHeroImages';

    /**
     * Configuration key that holds the switch to enable preloading of images with a srcset attribute.
     *
     * @var string
     */
    const PRELOAD_SRCSET = 'preloadSrcset';

    /**
     * Get the associative array of allowed keys and their respective default values.
     *
     * The array index is the key and the array value is the key's default value.
     *
     * @return array Associative array of allowed keys and their respective default values.
     */
    protected function getAllowedKeys()
    {
        return [
            self::INLINE_STYLE_BACKUP_ATTRIBUTE => '',
            self::MAX_HERO_IMAGE_COUNT          => 2,
            self::OPTIMIZE_HERO_IMAGES          => true,
            self::PRELOAD_SRCSET                => false,
        ];
    }

    /**
     * Validate an individual configuration entry.
     *
     * @param string $key   Key of the configuration entry to validate.
     * @param mixed  $value Value of the configuration entry to validate.
     * @return mixed Validated value.
     */
    protected function validate($key, $value)
    {
        switch ($key) {
            case self::INLINE_STYLE_BACKUP_ATTRIBUTE:
                if (! is_string($value)) {
                    throw InvalidConfigurationValue::forInvalidSubValueType(
                        self::class,
                        self::INLINE_STYLE_BACKUP_ATTRIBUTE,
                        'string',
                        is_object($value) ? get_class($value) : gettype($value)
                    );
                }
                break;

            case self::MAX_HERO_IMAGE_COUNT:
                if (! is_int($value)) {
                    throw InvalidConfigurationValue::forInvalidSubValueType(
                        self::class,
                        self::MAX_HERO_IMAGE_COUNT,
                        'integer',
                        is_object($value) ? get_class($value) : gettype($value)
                    );
                }
                break;

            case self::OPTIMIZE_HERO_IMAGES:
                if (! is_bool($value)) {
                    throw InvalidConfigurationValue::forInvalidSubValueType(
                        self::class,
                        self::OPTIMIZE_HERO_IMAGES,
                        'boolean',
                        is_object($value) ? get_class($value) : gettype($value)
                    );
                }
                break;

            case self::PRELOAD_SRCSET:
                if (! is_bool($value)) {
                    throw InvalidConfigurationValue::forInvalidSubValueType(
                        self::class,
                        self::PRELOAD_SRCSET,
                        'boolean',
                        is_object($value) ? get_class($value) : gettype($value)
                    );
                }
                break;
        }

        return $value;
    }
}
PK.3Y�����fbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Configuration/OptimizeViewportConfiguration.php<?php

namespace AmpProject\Optimizer\Configuration;

use AmpProject\Optimizer\Exception\InvalidConfigurationValue;

/**
 * Configuration for the OptimizeViewport transformer.
 *
 * @property bool $removeInitialScaleViewportProperty Whether we should remove the initial-scale=1 in order to avoid a
 *                                                    tap delay that hurts FID.
 *
 * @package ampproject/amp-toolbox
 */
final class OptimizeViewportConfiguration extends BaseTransformerConfiguration
{
    /**
     * Whether we should remove the initial-scale=1 in order to avoid a tap delay that hurts FID.
     *
     * @var string
     */
    const REMOVE_INITIAL_SCALE_VIEWPORT_PROPERTY = 'removeInitialScaleViewportProperty';

    /**
     * Get the associative array of allowed keys and their respective default values.
     *
     * The array index is the key and the array value is the key's default value.
     *
     * @return array Associative array of allowed keys and their respective default values.
     */
    protected function getAllowedKeys()
    {
        return [
            self::REMOVE_INITIAL_SCALE_VIEWPORT_PROPERTY => true,
        ];
    }

    /**
     * Validate an individual configuration entry.
     *
     * @param string $key   Key of the configuration entry to validate.
     * @param mixed  $value Value of the configuration entry to validate.
     * @return mixed Validated value.
     */
    protected function validate($key, $value)
    {
        switch ($key) {
            case self::REMOVE_INITIAL_SCALE_VIEWPORT_PROPERTY:
                if (! is_bool($value)) {
                    throw InvalidConfigurationValue::forInvalidSubValueType(
                        self::class,
                        $key,
                        'boolean',
                        is_object($value) ? get_class($value) : gettype($value)
                    );
                }
                break;
        }

        return $value;
    }
}
PK.3Y5����fbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Configuration/PreloadHeroImageConfiguration.php<?php

namespace AmpProject\Optimizer\Configuration;

use AmpProject\Optimizer\Exception\InvalidConfigurationValue;

/**
 * Configuration for the PreloadHeroImage transformer.
 *
 * @property string $inlineStyleBackupAttribute Name of the attribute that is used to store inline styles that were
 *                                              moved to <style amp-custom>
 * @property bool   $preloadHeroImage           Whether to preload hero images. Defaults to true.
 * @property bool   $preloadSrcset              Whether to enable preloading of images with a srcset attribute. Defaults
 *                                              to false.
 * @deprecated since version 0.6.0
 * @see \AmpProject\Optimizer\Configuration\OptimizeHeroImagesConfiguration
 *
 * @package ampproject/amp-toolbox
 */
final class PreloadHeroImageConfiguration extends BaseTransformerConfiguration
{
    /**
     * Configuration key that holds the attribute that is used to store inline styles that
     * were moved to <style amp-custom>.
     *
     * An empty string signifies that no backup is available.
     *
     * @var string
     */
    const INLINE_STYLE_BACKUP_ATTRIBUTE = 'inlineStyleBackupAttribute';

    /**
     * Configuration key that holds the switch to disable preloading of hero images.
     *
     * @var string
     */
    const PRELOAD_HERO_IMAGE = 'preloadHeroImage';

    /**
     * Configuration key that holds the switch to enable preloading of images with a srcset attribute.
     *
     * @var string
     */
    const PRELOAD_SRCSET = 'preloadSrcset';

    /**
     * Get the associative array of allowed keys and their respective default values.
     *
     * The array index is the key and the array value is the key's default value.
     *
     * @return array Associative array of allowed keys and their respective default values.
     */
    protected function getAllowedKeys()
    {
        return [
            self::INLINE_STYLE_BACKUP_ATTRIBUTE => '',
            self::PRELOAD_HERO_IMAGE            => true,
            self::PRELOAD_SRCSET                => false,
        ];
    }

    /**
     * Validate an individual configuration entry.
     *
     * @param string $key   Key of the configuration entry to validate.
     * @param mixed  $value Value of the configuration entry to validate.
     * @return mixed Validated value.
     */
    protected function validate($key, $value)
    {
        switch ($key) {
            case self::INLINE_STYLE_BACKUP_ATTRIBUTE:
                if (! is_string($value)) {
                    throw InvalidConfigurationValue::forInvalidSubValueType(
                        self::class,
                        self::INLINE_STYLE_BACKUP_ATTRIBUTE,
                        'string',
                        is_object($value) ? get_class($value) : gettype($value)
                    );
                }
                break;

            case self::PRELOAD_HERO_IMAGE:
                if (! is_bool($value)) {
                    throw InvalidConfigurationValue::forInvalidSubValueType(
                        self::class,
                        self::PRELOAD_HERO_IMAGE,
                        'boolean',
                        is_object($value) ? get_class($value) : gettype($value)
                    );
                }
                break;

            case self::PRELOAD_SRCSET:
                if (! is_bool($value)) {
                    throw InvalidConfigurationValue::forInvalidSubValueType(
                        self::class,
                        self::PRELOAD_SRCSET,
                        'boolean',
                        is_object($value) ? get_class($value) : gettype($value)
                    );
                }
                break;
        }

        return $value;
    }
}
PK.3Y-�h'��dbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Configuration/RewriteAmpUrlsConfiguration.php<?php

namespace AmpProject\Optimizer\Configuration;

use AmpProject\Amp;
use AmpProject\Optimizer\Exception\InvalidConfigurationValue;

/**
 * Configuration for the RewriteAmpUrls transformer.
 *
 * @property string $ampRuntimeVersion Specifies a specific version of the AMP runtime.
 * @property string $ampUrlPrefix      Specifies an URL prefix for AMP runtime URLs.
 * @property bool   $esmModulesEnabled Whether to use ES modules for loading the AMP runtime and components.
 * @property string $geoApiUrl         Specifies amp-geo API URL to use as a fallback.
 * @property bool   $lts               Use long-term stable URLs.
 * @property bool   $rtv               Append the runtime version to the rewritten URLs.
 *
 * @package ampproject/amp-toolbox
 */
final class RewriteAmpUrlsConfiguration extends BaseTransformerConfiguration
{
    /**
     * Specifies a specific version of the AMP runtime.
     *
     * For example: `ampRuntimeVersion: "001515617716922"` will result in AMP runtime URLs being re-written from
     * `https://cdn.ampproject.org/v0.js` to `https://cdn.ampproject.org/rtv/001515617716922/v0.js`.
     *
     * @var string
     */
    const AMP_RUNTIME_VERSION = 'ampRuntimeVersion';

    /**
     * Specifies an URL prefix for AMP runtime URLs.
     *
     * For example: `ampUrlPrefix: "/amp"` will result in AMP runtime URLs being re-written from
     * `https://cdn.ampproject.org/v0.js` to `/amp/v0.js`. This option is experimental and not recommended.
     *
     * @var string
     */
    const AMP_URL_PREFIX = 'ampUrlPrefix';

    /**
     * Whether to use ES modules for loading the AMP runtime and components.
     *
     * @var string
     */
    const ESM_MODULES_ENABLED = 'esmModulesEnabled';

    /**
     * Specifies amp-geo API URL to use as a fallback when `amp-geo-0.1.js` is served unpatched.
     *
     * This is used when `{{AMP_ISO_COUNTRY_HOTPATCH}}` is not replaced dynamically.
     *
     * @var string
     */
    const GEO_API_URL = 'geoApiUrl';

    /**
     * Use long-term stable URLs.
     *
     * This option is not compatible with `rtv`, `ampRuntimeVersion` or `ampUrlPrefix`; an error will be thrown if these
     * options are included together.
     *
     * Similarly, the `geoApiUrl` option is ineffective with the `lts` flag, but will simply be ignored rather than
     * throwing an error.
     *
     * @var string
     */
    const LTS = 'lts';

    /**
     * Append the runtime version to the rewritten URLs.
     *
     * This option is not compatible with `lts`.
     *
     * @var string
     */
    const RTV = 'rtv';

    /**
     * Get the associative array of allowed keys and their respective default
     * values.
     *
     * The array index is the key and the array value is the key's default
     * value.
     *
     * @return array Associative array of allowed keys and their respective
     *               default values.
     */
    protected function getAllowedKeys()
    {
        return [
            self::AMP_RUNTIME_VERSION => '',
            self::AMP_URL_PREFIX      => Amp::CACHE_HOST,
            self::ESM_MODULES_ENABLED => true,
            self::GEO_API_URL         => '',
            self::LTS                 => false,
            self::RTV                 => false,
        ];
    }

    /**
     * Validate an individual configuration entry.
     *
     * @param string $key   Key of the configuration entry to validate.
     * @param mixed  $value Value of the configuration entry to validate.
     * @return mixed Validated value.
     */
    protected function validate($key, $value)
    {
        switch ($key) {
            case self::AMP_RUNTIME_VERSION:
                if (! is_string($value)) {
                    throw InvalidConfigurationValue::forInvalidSubValueType(
                        self::class,
                        self::AMP_RUNTIME_VERSION,
                        'string',
                        is_object($value) ? get_class($value) : gettype($value)
                    );
                }
                $value = trim($value);
                break;

            case self::AMP_URL_PREFIX:
                if (! is_string($value)) {
                    throw InvalidConfigurationValue::forInvalidSubValueType(
                        self::class,
                        self::AMP_URL_PREFIX,
                        'string',
                        is_object($value) ? get_class($value) : gettype($value)
                    );
                }
                $value = trim($value);
                break;

            case self::ESM_MODULES_ENABLED:
                if (! is_bool($value)) {
                    throw InvalidConfigurationValue::forInvalidSubValueType(
                        self::class,
                        self::ESM_MODULES_ENABLED,
                        'boolean',
                        is_object($value) ? get_class($value) : gettype($value)
                    );
                }
                break;

            case self::GEO_API_URL:
                if (! is_string($value)) {
                    throw InvalidConfigurationValue::forInvalidSubValueType(
                        self::class,
                        self::GEO_API_URL,
                        'string',
                        is_object($value) ? get_class($value) : gettype($value)
                    );
                }
                $value = trim($value);
                break;

            case self::LTS:
                if (! is_bool($value)) {
                    throw InvalidConfigurationValue::forInvalidSubValueType(
                        self::class,
                        self::LTS,
                        'boolean',
                        is_object($value) ? get_class($value) : gettype($value)
                    );
                }
                break;

            case self::RTV:
                if (! is_bool($value)) {
                    throw InvalidConfigurationValue::forInvalidSubValueType(
                        self::class,
                        self::RTV,
                        'boolean',
                        is_object($value) ? get_class($value) : gettype($value)
                    );
                }
                break;
        }

        return $value;
    }
}
PK.3Ytz�RRkbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Configuration/TransformedIdentifierConfiguration.php<?php

namespace AmpProject\Optimizer\Configuration;

use AmpProject\Optimizer\Exception\InvalidConfigurationValue;
use AmpProject\Validator\Spec\CssRuleset\AmpTransformed;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Configuration for the TransformedIdentifier transformer.
 *
 * @property int $version Version number to use. Defaults to 1.
 * @property int|false $enforcedCssMaxByteCount The max bytes count to enforce on the document, or false to not enforce.
 *                                              Defaults to max bytes for transformed spec.
 *
 * @package ampproject/amp-toolbox
 */
final class TransformedIdentifierConfiguration extends BaseTransformerConfiguration
{
    /**
     * Configuration key that holds the version number to use.
     *
     * @var string
     */
    const VERSION = 'version';

    /**
     * Configuration key that holds the max CSS byte count to enforce.
     *
     * @see \AmpProject\Dom\Document::isCssMaxByteCountEnforced()
     * @see \AmpProject\Dom\Document::enforceCssMaxByteCount()
     * @var string
     */
    const ENFORCED_CSS_MAX_BYTE_COUNT = 'enforcedCssMaxByteCount';

    /**
     * Get the associative array of allowed keys and their respective default values.
     *
     * The array index is the key and the array value is the key's default value.
     *
     * @return array Associative array of allowed keys and their respective default values.
     */
    protected function getAllowedKeys()
    {
        return [
            self::VERSION                     => 1,
            self::ENFORCED_CSS_MAX_BYTE_COUNT => AmpTransformed::SPEC[SpecRule::MAX_BYTES],
        ];
    }

    /**
     * Validate an individual configuration entry.
     *
     * @param string $key   Key of the configuration entry to validate.
     * @param mixed  $value Value of the configuration entry to validate.
     * @return mixed Validated value.
     */
    protected function validate($key, $value)
    {
        switch ($key) {
            case self::VERSION:
                if (! is_int($value)) {
                    throw InvalidConfigurationValue::forInvalidSubValueType(
                        self::class,
                        self::VERSION,
                        'integer',
                        is_object($value) ? get_class($value) : gettype($value)
                    );
                }
                break;
            case self::ENFORCED_CSS_MAX_BYTE_COUNT:
                if (! is_int($value) && $value !== false) {
                    throw InvalidConfigurationValue::forInvalidSubValueType(
                        self::class,
                        self::ENFORCED_CSS_MAX_BYTE_COUNT,
                        'integer|false',
                        is_object($value) ? get_class($value) : gettype($value)
                    );
                }
                break;
        }

        return $value;
    }
}
PK.3Y��D�++bbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Error/CannotAdaptDocumentForSelfHosting.php<?php

namespace AmpProject\Optimizer\Error;

use AmpProject\Optimizer\Error;
use Exception;

/**
 * Optimizer error object for when a document cannot be adapted for self-hosting the AMP runtime.
 *
 * @package ampproject/amp-toolbox
 */
final class CannotAdaptDocumentForSelfHosting implements Error
{
    use ErrorProperties;

    const FAILED_TO_ADAPT_WITH_EXCEPTION       = 'Cannot adapt document for a self-hosted runtime: ';
    const FAILED_TO_ADAPT_FOR_NON_ABSOLUTE_URL = 'Cannot add runtime host, ampUrlPrefix must be an absolute URL, got: ';

    /**
     * Instantiate a CannotAdaptDocumentForSelfHosting object for an exception that blocked adapting the document.
     *
     * @param Exception $exception Exception that was caught and that blocked adapting the document.
     * @return self
     */
    public static function fromException(Exception $exception)
    {
        return new self(self::FAILED_TO_ADAPT_WITH_EXCEPTION . $exception->getMessage());
    }

    /**
     * Instantiate a CannotAdaptDocumentForSelfHosting object for a non-absolute URL provided via ampUrlPrefix.
     *
     * @param string $url URL that was provided.
     * @return self
     */
    public static function forNonAbsoluteUrl($url)
    {
        return new self(self::FAILED_TO_ADAPT_FOR_NON_ABSOLUTE_URL . $url);
    }
}
PK.3Y��>6Wbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Error/CannotInlineRuntimeCss.php<?php

namespace AmpProject\Optimizer\Error;

use AmpProject\Dom\Element;
use AmpProject\Dom\ElementDump;
use AmpProject\Optimizer\Error;
use Exception;

/**
 * Optimizer error object for when the AMP runtime CSS cannot be inlined.
 *
 * @package ampproject/amp-toolbox
 */
final class CannotInlineRuntimeCss implements Error
{
    use ErrorProperties;

    const EXCEPTION_STRING                 = 'Cannot inline the amp-runtime CSS in %3$s into %2$s: %1$s.';
    const MISSING_AMP_RUNTIME_STYLE_STRING = 'Cannot inline the amp-runtime CSS in %s: '
                                             . 'the <style amp-runtime> element is missing.';

    /**
     * Instantiate a CannotInlineRuntimeCss object for an exception that was thrown.
     *
     * @param Exception $exception       Exception that was thrown.
     * @param Element   $ampRuntimeStyle DOM element of the <style amp-runtime> tag that was targeted.
     * @param string    $version         Version string that was meant to be used.
     * @return self
     */
    public static function fromException(Exception $exception, Element $ampRuntimeStyle, $version)
    {
        $version = empty($version) ? 'unspecified version' : "version {$version}";

        return new self(sprintf(self::EXCEPTION_STRING, $exception, new ElementDump($ampRuntimeStyle), $version));
    }

    /**
     * Instantiate a CannotInlineRuntimeCss object for a missing <style amp-runtime> element.
     *
     * @param string $version Version string that was meant to be used.
     * @return self
     */
    public static function fromMissingAmpRuntimeStyle($version)
    {
        $version = empty($version) ? 'unspecified version' : "version {$version}";

        return new self(sprintf(self::MISSING_AMP_RUNTIME_STYLE_STRING, $version));
    }
}
PK.3Y������Vbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Error/CannotMinifyAmpScript.php<?php

namespace AmpProject\Optimizer\Error;

use AmpProject\Optimizer\Error;

/**
 * Optimizer error object when unable to minify an amp-script element.
 *
 * @package ampproject/amp-toolbox
 */
final class CannotMinifyAmpScript implements Error
{
    use ErrorProperties;

    /**
     * Instantiate a CannotMinifyAmpScript object with an error message.
     *
     * @param string $data     The script to be minified.
     * @param string $errorMsg The error message.
     * @return self
     */
    public static function withMessage($data, $errorMsg)
    {
        return new self(
            sprintf(
                "Could not minify inline amp-script.\n%s\n%s",
                $errorMsg,
                $data
            )
        );
    }
}
PK.3Y<����Tbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Error/CannotParseJsonData.php<?php

namespace AmpProject\Optimizer\Error;

use AmpProject\Dom\Element;
use AmpProject\Dom\ElementDump;
use AmpProject\Optimizer\Error;
use Exception;

/**
 * Optimizer error object for invalid JSON data.
 *
 * @package ampproject/amp-toolbox
 */
final class CannotParseJsonData implements Error
{
    use ErrorProperties;

    const SCRIPT_EXCEPTION_MESSAGE = 'Cannot parse JSON data for script element %2$s: %1$s.';

    /**
     * Instantiate a CannotParseJsonData object for an exception that was thrown.
     *
     * @param Exception $exception Exception that was thrown.
     * @param Element   $script    DOM element of the <style amp-runtime> tag that was targeted.
     * @return self
     */
    public static function fromExceptionForScriptElement(Exception $exception, Element $script)
    {
        return new self(sprintf(self::SCRIPT_EXCEPTION_MESSAGE, $exception, new ElementDump($script)));
    }
}
PK.3Y�MU�:
:
abunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Error/CannotPerformServerSideRendering.php<?php

namespace AmpProject\Optimizer\Error;

use AmpProject\Dom\Element;
use AmpProject\Dom\ElementDump;
use AmpProject\Exception\MaxCssByteCountExceeded;
use AmpProject\Optimizer\Error;

/**
 * Optimizer error object for when server-side rendering cannot be performed.
 *
 * @package ampproject/amp-toolbox
 */
final class CannotPerformServerSideRendering implements Error
{
    use ErrorProperties;

    const INVALID_INPUT_WIDTH         = 'Cannot perform serverside rendering, invalid input width: ';
    const INVALID_INPUT_HEIGHT        = 'Cannot perform serverside rendering, invalid input height: ';
    const UNSUPPORTED_LAYOUT          = 'Cannot perform serverside rendering, unsupported layout: ';
    const EXCEEDED_MAX_CSS_BYTE_COUNT = 'Cannot perform serverside rendering, exceeded maximum CSS byte count: ';

    /**
     * Instantiate a CannotPerformServerSideRendering object for an element with an invalid input width.
     *
     * @param Element $element Element that has an invalid input width.
     * @return self
     */
    public static function fromInvalidInputWidth(Element $element)
    {
        return new self(self::INVALID_INPUT_WIDTH . new ElementDump($element));
    }

    /**
     * Instantiate a CannotPerformServerSideRendering object for an element with an invalid input height.
     *
     * @param Element $element Element that has an invalid input height.
     * @return self
     */
    public static function fromInvalidInputHeight(Element $element)
    {
        return new self(self::INVALID_INPUT_HEIGHT . new ElementDump($element));
    }

    /**
     * Instantiate a CannotPerformServerSideRendering object for an element with an invalid input height.
     *
     * @param Element $element Element that has an invalid input height.
     * @param string  $layout  Resulting layout.
     * @return self
     */
    public static function fromUnsupportedLayout(Element $element, $layout)
    {
        return new self(self::UNSUPPORTED_LAYOUT . new ElementDump($element) . " => {$layout}");
    }

    /**
     * Instantiate a CannotPerformServerSideRendering object for a MaxCssByteCountExceeded exception.
     *
     * @param MaxCssByteCountExceeded $exception Caught exception.
     * @param Element                 $element   Element that caused the exception.
     * @return self
     */
    public static function fromMaxCssByteCountExceededException(MaxCssByteCountExceeded $exception, Element $element)
    {
        return new self(
            self::EXCEEDED_MAX_CSS_BYTE_COUNT . new ElementDump($element) . " => {$exception->getMessage()}"
        );
    }
}
PK.3Y���okkSbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Error/CannotPreloadImage.php<?php

namespace AmpProject\Optimizer\Error;

use AmpProject\Dom\Element;
use AmpProject\Dom\ElementDump;
use AmpProject\Optimizer\Error;

/**
 * Optimizer error object for when a hero image cannot be preloaded.
 *
 * @package ampproject/amp-toolbox
 */
final class CannotPreloadImage implements Error
{
    use ErrorProperties;

    const SRCSET_STRING = 'Not preloading the hero image because of the presence of a "srcset" attribute, which '
                          . 'can currently only be preloaded by Chromium-based browsers '
                          . '(see https://web.dev/preload-responsive-images/).';

    /**
     * Instantiate a CannotPreloadImage object for an image with a srcset attribute.
     *
     * @param Element|null $element Optional. Image element that has the srcset attribute, or null if no element.
     * @return self
     */
    public static function fromImageWithSrcsetAttribute(Element $element = null)
    {
        $message = self::SRCSET_STRING;

        if ($element !== null) {
            $message .= "\n" . new ElementDump($element);
        }

        return new self($message);
    }
}
PK.3Y�
�Z��Xbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Error/CannotRemoveBoilerplate.php<?php

namespace AmpProject\Optimizer\Error;

use AmpProject\Dom\Element;
use AmpProject\Dom\ElementDump;
use AmpProject\Optimizer\Error;
use Exception;

/**
 * Optimizer error object for when the AMP boilerplate style cannot be removed.
 *
 * @package ampproject/amp-toolbox
 */
final class CannotRemoveBoilerplate implements Error
{
    use ErrorProperties;

    const ATTRIBUTES_STRING             = 'Cannot remove boilerplate as either heights, media or sizes attribute is '
                                          . 'set and cannot be adapted: ';
    const ATTRIBUTES_EXCEPTION_STRING   = 'Cannot remove boilerplate as the removal of either heights, media or sizes '
                                          . 'attribute produced an error: ';
    const RENDER_DELAYING_SCRIPT_STRING = 'Cannot remove boilerplate because the document contains a render-delaying '
                                          . 'extension: ';
    const UNSUPPORTED_LAYOUT_STRING     = 'Cannot remove boilerplate because of an unsupported layout: ';

    /**
     * Instantiate a CannotRemoveBoilerplate object for attributes that require the boilerplate to be around.
     *
     * @param Element $element Element that contains the attributes that need the boilerplate.
     * @return self
     */
    public static function fromAttributesRequiringBoilerplate(Element $element)
    {
        return new self(self::ATTRIBUTES_STRING . new ElementDump($element));
    }

    /**
     * Instantiate a CannotRemoveBoilerplate object for attributes that require the boilerplate to be around.
     *
     * @param Exception $exception Exception being thrown.
     * @return self
     */
    public static function fromAttributeThrowingException($exception)
    {
        return new self(self::ATTRIBUTES_EXCEPTION_STRING . $exception->getMessage());
    }

    /**
     * Instantiate a CannotRemoveBoilerplate object for an amp-experiment element.
     *
     * @param Element $element amp-experiment element.
     * @return self
     */
    public static function fromAmpExperiment(Element $element)
    {
        return new self(self::RENDER_DELAYING_SCRIPT_STRING . $element->tagName);
    }

    /**
     * Instantiate a CannotRemoveBoilerplate object for an element with an unsupported layout.
     *
     * @param Element $element Element with an unsupported layout.
     * @return self
     */
    public static function fromUnsupportedLayout(Element $element)
    {
        return new self(self::UNSUPPORTED_LAYOUT_STRING . new ElementDump($element));
    }

    /**
     * Instantiate a CannotRemoveBoilerplate object for render-delaying script element.
     *
     * @param Element $element Element with an unsupported layout.
     * @return self
     */
    public static function fromRenderDelayingScript(Element $element)
    {
        $elementName = $element->hasAttribute('custom-element')
            ? $element->getAttribute('custom-element')
            : '<unknown>';

        return new self(self::UNSUPPORTED_LAYOUT_STRING . $elementName);
    }
}
PK.3Y�g��Vbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Error/DeprecatedTransformer.php<?php

namespace AmpProject\Optimizer\Error;

use AmpProject\Optimizer\Error;
use AmpProject\Optimizer\Transformer\PreloadHeroImage;

/**
 * Optimizer error object for when a deprecated transformer is being used.
 *
 * @package ampproject/amp-toolbox
 */
final class DeprecatedTransformer implements Error
{
    use ErrorProperties;

    const WITHOUT_REPLACEMENT = 'Use of a deprecated transformer %s.';

    const WITH_REPLACEMENT = 'Use of a deprecated transformer %s, use %s instead.';

    /**
     * Instantiate a DeprecatedTransformer object without a suggested replacement.
     *
     * @param string $deprecated Class of the deprecated transformer.
     * @return self
     */
    public static function withoutReplacement($deprecated)
    {
        return new self(sprintf(self::WITHOUT_REPLACEMENT, $deprecated));
    }

    /**
     * Instantiate a DeprecatedTransformer object with a suggested replacement.
     *
     * @param string $deprecated  Class of the deprecated transformer.
     * @param string $replacement Class of the suggested replacement transformer.
     * @return self
     */
    public static function withReplacement($deprecated, $replacement)
    {
        return new self(sprintf(self::WITH_REPLACEMENT, $deprecated, $replacement));
    }
}
PK.3Y��%/nnPbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Error/ErrorProperties.php<?php

namespace AmpProject\Optimizer\Error;

use ReflectionClass;

/**
 * Default set of properties and methods to use for errors.
 *
 * @package AmpProject\Optimizer
 */
trait ErrorProperties
{
    /**
     * Instantiate an Error object.
     *
     * @param string $message Message for the error.
     */
    public function __construct($message)
    {
        $this->message = $message;
    }

    /**
     * Message of the error.
     *
     * @var string
     */
    protected $message;

    /**
     * Get the code of the error.
     *
     * @return string Code of the error.
     */
    public function getCode()
    {
        return (new ReflectionClass($this))->getShortName();
    }

    /**
     * Get the message of the error.
     *
     * @return string Message of the error.
     */
    public function getMessage()
    {
        return $this->message;
    }
}
PK.3Y���B22Lbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Error/InvalidJson.php<?php

namespace AmpProject\Optimizer\Error;

use AmpProject\Optimizer\Error;

/**
 * Optimizer error object for invalid JSON data.
 *
 * @package ampproject/amp-toolbox
 */
final class InvalidJson implements Error
{
    use ErrorProperties;

    /**
     * Instantiate an InvalidJson object after decoding JSON data.
     *
     * @return self
     */
    public static function fromLastErrorMsgAfterDecoding()
    {
        $errorMsg = 'Error decoding JSON: ' . json_last_error_msg();
        return new self($errorMsg);
    }

    /**
     * Instantiate an InvalidJson object after encoding JSON data.
     *
     * @return self
     */
    public static function fromLastErrorMsgAfterEncoding()
    {
        $errorMsg = 'Error encoding JSON: ' . json_last_error_msg();
        return new self($errorMsg);
    }
}
PK.3Y�8W(Obunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Error/MissingPackage.php<?php

namespace AmpProject\Optimizer\Error;

use AmpProject\Optimizer\Error;

/**
 * Optimizer error object for missing optional PHP package.
 *
 * @package ampproject/amp-toolbox
 */
final class MissingPackage implements Error
{
    use ErrorProperties;

    /**
     * Instantiate a MissingPackage object for a missing PHP package.
     *
     * @param string $errorMsg The error message.
     * @return self
     */
    public static function withMessage($errorMsg)
    {
        return new self($errorMsg);
    }
}
PK.3Y�T�WRbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Error/TooManyHeroImages.php<?php

namespace AmpProject\Optimizer\Error;

use AmpProject\Optimizer\Error;
use AmpProject\Optimizer\Transformer\PreloadHeroImage;

/**
 * Optimizer error object for when too many images are marked for being optimized as hero images.
 *
 * @package ampproject/amp-toolbox
 */
final class TooManyHeroImages implements Error
{
    use ErrorProperties;

    const PAST_MAX_STRING = 'Too many images with the "data-hero" attribute were detected, the maximum allowed is %d.';

    /**
     * Instantiate a TooManyHeroImages object for when a hero image was detected past the maximum allowed.
     *
     * @return self
     */
    public static function whenPastMaximum()
    {
        return new self(sprintf(self::PAST_MAX_STRING, PreloadHeroImage::DATA_HERO_MAX));
    }
}
PK.3Yq��;Mbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Error/UnknownError.php<?php

namespace AmpProject\Optimizer\Error;

use AmpProject\Optimizer\Error;

/**
 * Optimizer error object for when an unknown error has occurred.
 *
 * @package ampproject/amp-toolbox
 */
final class UnknownError implements Error
{
    use ErrorProperties;
}
PK.3Y�-�4Zbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Exception/AmpOptimizerException.php<?php

namespace AmpProject\Optimizer\Exception;

use AmpProject\Exception\AmpException;

/**
 * Marker interface to enable consumers to catch all exceptions for this particular library.
 *
 * @package ampproject/amp-toolbox
 */
interface AmpOptimizerException extends AmpException
{
}
PK.3Y��M�Tbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Exception/InvalidArgument.php<?php

namespace AmpProject\Optimizer\Exception;

use InvalidArgumentException;

/**
 * Exception thrown when an invalid HTML attribute was detected.
 *
 * @package ampproject/amp-toolbox
 */
final class InvalidArgument extends InvalidArgumentException implements AmpOptimizerException
{
    /**
     * Instantiate an InvalidArgument exception for an invalid argument type for numeric comparison.
     *
     * @param mixed $argument Argument that was of an invalid type.
     * @return self
     */
    public static function forNumericComparison($argument)
    {
        $type    = is_object($argument) ? get_class($argument) : gettype($argument);
        $message = "Invalid argument type '{$type}' provided for a numeric comparison.";

        return new self($message);
    }
}
PK.3YTF|@@Ybunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Exception/InvalidConfiguration.php<?php

namespace AmpProject\Optimizer\Exception;

use DomainException;

/**
 * Exception thrown when an invalid configuration is provided, like in the case of mutually exclusive flags.
 *
 * @package ampproject/amp-toolbox
 */
final class InvalidConfiguration extends DomainException implements AmpOptimizerException
{
    /**
     * Instantiate an InvalidConfiguration exception for two mutually exclusive flags.
     *
     * @param string $flagA First flag that was used.
     * @param string $flagB Second flag that was used.
     * @return self
     */
    public static function forMutuallyExclusiveFlags($flagA, $flagB)
    {
        $message = "The configuration flags '{$flagA}' and '{$flagB}' are mutually exclusive "
                   . 'and cannot be set at the same time.';

        return new self($message);
    }
}
PK.3Y=b����\bunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Exception/InvalidConfigurationKey.php<?php

namespace AmpProject\Optimizer\Exception;

use OutOfBoundsException;

/**
 * Exception thrown when an invalid configuration key was provided.
 *
 * @package ampproject/amp-toolbox
 */
final class InvalidConfigurationKey extends OutOfBoundsException implements AmpOptimizerException
{
    /**
     * Instantiate an InvalidConfigurationKey exception for an invalid key.
     *
     * @param string $key Key that was invalid.
     * @return self
     */
    public static function fromKey($key)
    {
        $message = "The provided configuration key '{$key}' is not valid.";

        return new self($message);
    }

    /**
     * Instantiate an InvalidConfigurationKey exception for an invalid transformer configuration key.
     *
     * @param string $transformer Transformer class or identifier.
     * @param string $key         Key that was invalid.
     * @return self
     */
    public static function fromTransformerKey($transformer, $key)
    {
        $parts       = explode('\\', $transformer);
        $transformer = array_pop($parts);
        $message     = "The provided configuration key '{$key}' is not valid for the transformer '{$transformer}'.";

        return new self($message);
    }
}
PK.3Y��
	
	^bunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Exception/InvalidConfigurationValue.php<?php

namespace AmpProject\Optimizer\Exception;

use InvalidArgumentException;

/**
 * Exception thrown when an invalid configuration value was provided.
 *
 * @package ampproject/amp-toolbox
 */
final class InvalidConfigurationValue extends InvalidArgumentException implements AmpOptimizerException
{
    /**
     * Instantiate an InvalidConfigurationValue exception for an invalid value type.
     *
     * @param string $key      Key that was invalid.
     * @param string $expected Value type that was expected.
     * @param string $actual   Value type that was actually provided.
     * @return self
     */
    public static function forInvalidValueType($key, $expected, $actual)
    {
        $message = "The configuration key '{$key}' expected a value of type '{$expected}', got '{$actual}' instead.";

        return new self($message);
    }

    /**
     * Instantiate an InvalidConfigurationValue exception for an invalid value type.
     *
     * @param string     $key      Key that was invalid.
     * @param string|int $index    Index of the sub-value that was invalid.
     * @param string     $expected Value type that was expected.
     * @param string     $actual   Value type that was actually provided.
     * @return self
     */
    public static function forInvalidSubValueType($key, $index, $expected, $actual)
    {
        $message = "The configuration value '{$index}' for the key '{$key}' expected a value of type '{$expected}', "
                   . "got '{$actual}' instead.";

        return new self($message);
    }

    /**
     * Instantiate an InvalidConfigurationValue exception for an unknown value.
     *
     * @param string        $key      Key that was invalid.
     * @param string|int    $index    Index of the sub-value that was invalid.
     * @param array<string> $accepted Array of acceptable values.
     * @param string        $actual   Value that was actually provided.
     * @return self
     */
    public static function forUnknownSubValue($key, $index, $accepted, $actual)
    {
        $acceptedString = implode(', ', $accepted);
        $message = "The configuration value '{$index}' for the key '{$key}' expected the value to be one of "
                   . "[{$acceptedString}], got '{$actual}' instead.";

        return new self($message);
    }
}
PK.3Y���FFYbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Exception/InvalidHtmlAttribute.php<?php

namespace AmpProject\Optimizer\Exception;

use AmpProject\Dom\Element;
use AmpProject\Dom\ElementDump;
use DomainException;

/**
 * Exception thrown when an invalid HTML attribute was detected.
 *
 * @package ampproject/amp-toolbox
 */
final class InvalidHtmlAttribute extends DomainException implements AmpOptimizerException
{
    /**
     * Instantiate an InvalidHtmlAttribute exception for an invalid attribute value.
     *
     * @param string  $attributeName Name of the attribute.
     * @param Element $element       Element that contains the invalid attribute.
     * @return self
     */
    public static function fromAttribute($attributeName, Element $element)
    {
        $message = "Invalid value detected for attribute '{$attributeName}': " . new ElementDump($element);

        return new self($message);
    }
}
PK.3Y{�5a��^bunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Exception/UnknownConfigurationClass.php<?php

namespace AmpProject\Optimizer\Exception;

use InvalidArgumentException;

/**
 * Exception thrown when an unknown configuration key was requested.
 *
 * @package ampproject/amp-toolbox
 */
final class UnknownConfigurationClass extends InvalidArgumentException implements AmpOptimizerException
{
    /**
     * Instantiate an UnknownConfigurationClass exception for an unknown configuration class.
     *
     * @param string $transformerClass Key that was unknown.
     * @return self
     */
    public static function fromTransformerClass($transformerClass)
    {
        $message = "No configuration class was registered for the transformer '{$transformerClass}'.";

        return new self($message);
    }
}
PK.3Yn�#��\bunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Exception/UnknownConfigurationKey.php<?php

namespace AmpProject\Optimizer\Exception;

use InvalidArgumentException;

/**
 * Exception thrown when an unknown configuration key was requested.
 *
 * @package ampproject/amp-toolbox
 */
final class UnknownConfigurationKey extends InvalidArgumentException implements AmpOptimizerException
{
    /**
     * Instantiate an UnknownConfigurationKey exception for an unknown key.
     *
     * @param string $key Key that was unknown.
     * @return self
     */
    public static function fromKey($key)
    {
        $message = "The configuration does not contain the requested key '{$key}'.";

        return new self($message);
    }

    /**
     * Instantiate an UnknownConfigurationKey exception for an unknown transformer configuration key.
     *
     * @param string $transformer Transformer class or identifier.
     * @param string $key         Key that was unknown.
     * @return self
     */
    public static function fromTransformerKey($transformer, $key)
    {
        $parts       = explode('\\', $transformer);
        $transformer = array_pop($parts);
        $message     = "The configuration of the transformer '{$transformer}' does not contain "
                       . "the requested key '{$key}'.";

        return new self($message);
    }
}
PK.3Y�K��Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Transformer/AmpBoilerplate.php<?php

namespace AmpProject\Optimizer\Transformer;

use AmpProject\Amp;
use AmpProject\Html\Attribute;
use AmpProject\Dom\Document;
use AmpProject\Dom\Element;
use AmpProject\Optimizer\ErrorCollection;
use AmpProject\Optimizer\Transformer;
use AmpProject\Html\Tag;

/**
 * Transformer that removes AMP boilerplate <style> and <noscript> tags in <head>, keeping only the amp-custom <style>
 * tag. It then (re-)inserts the amp-boilerplate unless the document is marked with the i-amphtml-no-boilerplate
 * attribute.
 *
 * This is ported from the Go optimizer.
 *
 * Go:
 * @version c9993b8ac4d17d1f05d3a1289956dadf3f9c370a
 * @link    https://github.com/ampproject/amppackager/blob/c9993b8ac4d17d1f05d3a1289956dadf3f9c370a/transformer/transformers/ampboilerplate.go
 *
 * @package ampproject/amp-toolbox
 */
final class AmpBoilerplate implements Transformer
{
    /**
     * Apply transformations to the provided DOM document.
     *
     * @param Document        $document DOM document to apply the transformations to.
     * @param ErrorCollection $errors   Collection of errors that are collected during transformation.
     * @return void
     */
    public function transform(Document $document, ErrorCollection $errors)
    {
        $this->removeStyleAndNoscriptTags($document);

        if ($this->hasNoBoilerplateAttribute($document)) {
            return;
        }

        list($boilerplate, $css) = $this->determineBoilerplateAndCss($document->html);

        $styleNode = $document->createElement(Tag::STYLE);
        $styleNode->setAttribute($boilerplate, '');
        $document->head->appendChild($styleNode);

        $cssNode = $document->createTextNode($css);
        $styleNode->appendChild($cssNode);

        if ($boilerplate !== Attribute::AMP_BOILERPLATE) {
            return;
        }

        // Regular AMP boilerplate also includes a <noscript> element.
        $noscriptNode = $document->createElement(Tag::NOSCRIPT);
        $document->head->appendChild($noscriptNode);

        $noscriptStyleNode = $document->createElement(Tag::STYLE);
        $noscriptStyleNode->setAttribute($boilerplate, '');
        $noscriptNode->appendChild($noscriptStyleNode);

        $noscriptCssNode = $document->createTextNode(Amp::BOILERPLATE_NOSCRIPT_CSS);
        $noscriptStyleNode->appendChild($noscriptCssNode);
    }

    /**
     * Remove all <style> and <noscript> tags which are for the boilerplate.
     *
     * @param Document $document Document to remove the tags from.
     */
    private function removeStyleAndNoscriptTags(Document $document)
    {
        /**
         * Style element.
         *
         * @var Element $style
         */
        foreach (iterator_to_array($document->head->getElementsByTagName(Tag::STYLE)) as $style) {
            if (! $this->isBoilerplateStyle($style)) {
                continue;
            }
            if (Tag::NOSCRIPT === $style->parentNode->nodeName) {
                $style->parentNode->parentNode->removeChild($style->parentNode);
            } else {
                $style->parentNode->removeChild($style);
            }
        }
    }

    /**
     * Check whether an element is a boilerplate style.
     *
     * @param Element $element Element to check.
     * @return bool Whether the element is a boilerplate style.
     */
    private function isBoilerplateStyle(Element $element)
    {
        foreach (Attribute::ALL_BOILERPLATES as $boilerplate) {
            if ($element->hasAttribute($boilerplate)) {
                return true;
            }
        }

        return false;
    }

    /**
     * Check whether it was already determined the boilerplate should be removed.
     *
     * We want to ensure we don't apply re-add the boilerplate again if it was already removed via SSR.
     *
     * @param Document $document DOM document to check for the attribute.
     * @return bool Whether it was determined that the boilerplate should be removed.
     */
    private function hasNoBoilerplateAttribute(Document $document)
    {
        if ($document->html->hasAttribute(Amp::NO_BOILERPLATE_ATTRIBUTE)) {
            return true;
        }

        return false;
    }

    /**
     * Determine and return the boilerplate attribute and inline CSS to use.
     *
     * @param Element $htmlElement HTML DOM element to check against.
     * @return array Tuple containing the $boilerplate and $css to use.
     */
    private function determineBoilerplateAndCss(Element $htmlElement)
    {
        $boilerplate = Attribute::AMP_BOILERPLATE;
        $css         = Amp::BOILERPLATE_CSS;

        foreach (Attribute::ALL_AMP4ADS as $attribute) {
            if (
                $htmlElement->hasAttribute($attribute)
                || (
                    $htmlElement->getAttribute(Document::EMOJI_AMP_ATTRIBUTE_PLACEHOLDER) === str_replace(
                        Attribute::AMP_EMOJI,
                        '',
                        $attribute
                    )
                )
            ) {
                $boilerplate = Attribute::AMP4ADS_BOILERPLATE;
                $css         = Amp::AMP4ADS_AND_AMP4EMAIL_BOILERPLATE_CSS;
            }
        }

        foreach (Attribute::ALL_AMP4EMAIL as $attribute) {
            if (
                $htmlElement->hasAttribute($attribute)
                || (
                    $htmlElement->getAttribute(Document::EMOJI_AMP_ATTRIBUTE_PLACEHOLDER) === str_replace(
                        Attribute::AMP_EMOJI,
                        '',
                        $attribute
                    )
                )
            ) {
                $boilerplate = Attribute::AMP4EMAIL_BOILERPLATE;
                $css         = Amp::AMP4ADS_AND_AMP4EMAIL_BOILERPLATE_CSS;
            }
        }

        return [$boilerplate, $css];
    }
}
PK.3Y�0a'��abunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Transformer/AmpBoilerplateErrorHandler.php<?php

namespace AmpProject\Optimizer\Transformer;

use AmpProject\Html\Attribute;
use AmpProject\Dom\Document;
use AmpProject\Optimizer\ErrorCollection;
use AmpProject\Optimizer\Transformer;
use AmpProject\Html\Tag;

/**
 * AmpBoilerplateErrorHandler - adds amp-onerror handler to disable boilerplate early on runtime error.
 *
 * This ensures that the boilerplate does not hide the content for several seconds if an error occurred
 * while loading the AMP runtime that could already be detected much earlier.
 *
 * @package ampproject/amp-toolbox
 */
final class AmpBoilerplateErrorHandler implements Transformer
{
    /**
     * XPath query to find an AMP runtime script using ES6 modules.
     *
     * Note that substring() is used as ends-with() requires XPath 2.0, but PHP comes with XPath 1.0 support only.
     *
     * @var string
     */
    const AMP_MODULAR_RUNTIME_XPATH_QUERY = './script[substring(@src, string-length(@src) - 6) = \'/v0.mjs\']';

    /**
     * Error handler script to be added to the document's <head> for AMP pages not using ES modules.
     *
     * @var string
     */
    const ERROR_HANDLER_NOMODULE = 'document.querySelector("script[src*=\'/v0.js\']").onerror=function(){'
                                   . 'document.querySelector(\'style[amp-boilerplate]\').textContent=\'\'}';

    /**
     * Error handler script to be added to the document's <head> for AMP pages using ES modules.
     *
     * @var string
     */
    const ERROR_HANDLER_MODULE = '[].slice.call(document.querySelectorAll('
                                 . '"script[src*=\'/v0.js\'],script[src*=\'/v0.mjs\']")).forEach('
                                 . 'function(s){s.onerror='
                                 . 'function(){'
                                 . 'document.querySelector(\'style[amp-boilerplate]\').textContent=\'\''
                                 . '}})';

    /**
     * Apply transformations to the provided DOM document.
     *
     * @param Document        $document DOM document to apply the transformations to.
     * @param ErrorCollection $errors   Collection of errors that are collected during transformation.
     * @return void
     */
    public function transform(Document $document, ErrorCollection $errors)
    {
        if ($document->html->hasAttribute(Attribute::I_AMPHTML_NO_BOILERPLATE)) {
            // Boilerplate was removed, so no need for the amp-onerror handler.
            return;
        }

        $document->head->appendChild(
            $document->createElementWithAttributes(
                Tag::SCRIPT,
                [
                    Attribute::AMP_ONERROR => null,
                ],
                $this->usesModules($document) ? self::ERROR_HANDLER_MODULE : self::ERROR_HANDLER_NOMODULE
            )
        );
    }

    /**
     * Check whether a provided document uses ES6 modules.
     *
     * @param Document $document Document to check.
     * @return bool Whether the provided document uses ES6 modules.
     */
    private function usesModules(Document $document)
    {
        $scripts = $document->xpath->query(self::AMP_MODULAR_RUNTIME_XPATH_QUERY, $document->head);

        return $scripts->length > 0;
    }
}
PK.3Yf�9��Tbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Transformer/AmpRuntimeCss.php<?php

namespace AmpProject\Optimizer\Transformer;

use AmpProject\Amp;
use AmpProject\Html\Attribute;
use AmpProject\Dom\Document;
use AmpProject\Dom\Element;
use AmpProject\Optimizer\Configuration\AmpRuntimeCssConfiguration;
use AmpProject\Optimizer\Error;
use AmpProject\Optimizer\ErrorCollection;
use AmpProject\Optimizer\TransformerConfiguration;
use AmpProject\RemoteGetRequest;
use AmpProject\Optimizer\Transformer;
use AmpProject\RuntimeVersion;
use AmpProject\Html\Tag;
use Exception;

/**
 * Transformer adding https://cdn.ampproject.org/v0.css if server-side-rendering is applied (known by the presence of
 * <style amp-runtime> tag). AMP runtime css (v0.css) will always be inlined as it'll get automatically updated to the
 * latest version once the AMP runtime has loaded.
 *
 * This is ported from the NodeJS optimizer while verifying against the Go version.
 *
 * NodeJS:
 * @version 6f465eb24b05acf74d39541151c17b8d8d97450d
 * @link    https://github.com/ampproject/amp-toolbox/blob/6f465eb24b05acf74d39541151c17b8d8d97450d/packages/optimizer/lib/transformers/AmpBoilerplateTransformer.js
 *
 * Go:
 * @version c9993b8ac4d17d1f05d3a1289956dadf3f9c370a
 * @link    https://github.com/ampproject/amppackager/blob/c9993b8ac4d17d1f05d3a1289956dadf3f9c370a/transformer/transformers/ampruntimecss.go
 *
 * @package ampproject/amp-toolbox
 */
final class AmpRuntimeCss implements Transformer
{
    /**
     * XPath query to fetch the <style amp-runtime> element.
     *
     * @var string
     */
    const AMP_RUNTIME_STYLE_XPATH = './/style[ @amp-runtime ]';

    /**
     * Name of the boilerplate style file.
     *
     * @var string
     */
    const V0_CSS = 'v0.css';

    /**
     * URL of the boilerplate style file.
     *
     * @var string
     */
    const V0_CSS_URL = Amp::CACHE_HOST . '/' . self::V0_CSS;

    /**
     * Configuration store to use.
     *
     * @var TransformerConfiguration
     */
    private $configuration;

    /**
     * Transport to use for remote requests.
     *
     * @var RemoteGetRequest
     */
    private $remoteRequest;

    /**
     * Instantiate an AmpRuntimeCss object.
     *
     * @param TransformerConfiguration $configuration Configuration store to use.
     * @param RemoteGetRequest         $remoteRequest Transport to use for remote requests.
     */
    public function __construct(TransformerConfiguration $configuration, RemoteGetRequest $remoteRequest)
    {
        $this->configuration = $configuration;
        $this->remoteRequest = $remoteRequest;
    }

    /**
     * Apply transformations to the provided DOM document.
     *
     * @param Document        $document DOM document to apply the transformations to.
     * @param ErrorCollection $errors   Collection of errors that are collected during transformation.
     * @return void
     */
    public function transform(Document $document, ErrorCollection $errors)
    {
        $ampRuntimeStyle = $this->findAmpRuntimeStyle($document, $errors);

        if (! $ampRuntimeStyle) {
            return;
        }

        $this->addStaticCss($document, $ampRuntimeStyle, $errors);
    }

    /**
     * Find the <style amp-runtime> element.
     *
     * @param Document        $document Document to find the element in.
     * @param ErrorCollection $errors   Collection of errors that are collected during transformation.
     * @return Element|false DOM element for the <style amp-runtime> tag, or false if not found.
     */
    private function findAmpRuntimeStyle(Document $document, ErrorCollection $errors)
    {
        $ampRuntimeStyle = $document->xpath
            ->query(self::AMP_RUNTIME_STYLE_XPATH, $document->head)
            ->item(0);

        if (! $ampRuntimeStyle instanceof Element) {
            $version = $this->configuration->get(AmpRuntimeCssConfiguration::VERSION);
            $errors->add(Error\CannotInlineRuntimeCss::fromMissingAmpRuntimeStyle($version));
            return false;
        }

        return $ampRuntimeStyle;
    }

    /**
     * Add the static boilerplate CSS to the <style amp-runtime> element.
     *
     * @param Document        $document        Document to add the static CSS to.
     * @param Element         $ampRuntimeStyle DOM element for the <style amp-runtime> tag to add the static CSS to.
     * @param ErrorCollection $errors          Error collection to add errors to.
     */
    private function addStaticCss(Document $document, Element $ampRuntimeStyle, ErrorCollection $errors)
    {
        $version = $this->configuration->get(AmpRuntimeCssConfiguration::VERSION);

        // We can always inline v0.css as the AMP runtime will take care of keeping v0.css in sync.
        try {
            $this->inlineCss($ampRuntimeStyle, $version);
        } catch (Exception $exception) {
            $errors->add(Error\CannotInlineRuntimeCss::fromException($exception, $ampRuntimeStyle, $version));
            $this->linkCss($document, $ampRuntimeStyle);
            $ampRuntimeStyle->parentNode->removeChild($ampRuntimeStyle);
        }
    }

    /**
     * Insert the boilerplate style as inline CSS.
     *
     * @param Element $ampRuntimeStyle DOM element for the <style amp-runtime> tag to inline the CSS into.
     * @param string  $version         Version of the boilerplate style to use.
     */
    private function inlineCss(Element $ampRuntimeStyle, $version)
    {
        // Use version passed in via params if available, otherwise fetch the current prod version.
        if (! empty($version)) {
            $v0CssUrl = RuntimeVersion::appendRuntimeVersion(Amp::CACHE_HOST, $version) . '/' . self::V0_CSS;
        } else {
            $v0CssUrl = self::V0_CSS_URL;
            $options  = [
                RuntimeVersion::OPTION_CANARY => $this->configuration->get(AmpRuntimeCssConfiguration::CANARY)
            ];
            $version  = (new RuntimeVersion($this->remoteRequest))->currentVersion($options);
        }

        $ampRuntimeStyle->setAttribute(Attribute::I_AMPHTML_VERSION, $version);

        $styles = $this->configuration->get(AmpRuntimeCssConfiguration::STYLES);

        if (empty($styles)) {
            $response   = $this->remoteRequest->get($v0CssUrl);
            $statusCode = $response->getStatusCode();

            if ($statusCode < 200 || $statusCode >= 300) {
                return;
            }

            $styles = $response->getBody();
        }

        $ampRuntimeStyle->textContent = $styles;
    }

    /**
     * Insert the boilerplate style as inline CSS.
     *
     * @param Document $document        Document to link the CSS in.
     * @param Element  $ampRuntimeStyle DOM element for the <style amp-runtime> tag to inline the CSS into.
     */
    private function linkCss(Document $document, Element $ampRuntimeStyle)
    {
        $cssStyleNode = $document->createElement(Tag::LINK);
        $cssStyleNode->setAttribute(Attribute::REL, Attribute::REL_STYLESHEET);
        $cssStyleNode->setAttribute(Attribute::HREF, self::V0_CSS_URL);

        $ampRuntimeStyle->parentNode->insertBefore($cssStyleNode, $ampRuntimeStyle);
    }
}
PK.3Y�s�wj
j
Ybunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Transformer/AmpRuntimePreloads.php<?php

namespace AmpProject\Optimizer\Transformer;

use AmpProject\Amp;
use AmpProject\Dom\Document;
use AmpProject\Optimizer\ErrorCollection;
use AmpProject\Optimizer\Transformer;
use AmpProject\Html\RequestDestination;

/**
 * Transformer adding resource hints to preload the AMP runtime script and CSS.
 *
 * @package ampproject/amp-toolbox
 */
final class AmpRuntimePreloads implements Transformer
{
    /**
     * Apply transformations to the provided DOM document.
     *
     * @param Document        $document DOM document to apply the transformations to.
     * @param ErrorCollection $errors   Collection of errors that are collected during transformation.
     * @return void
     */
    public function transform(Document $document, ErrorCollection $errors)
    {
        if ($this->isAmpRuntimeScriptNeeded($document)) {
            $document->links->addPreload($this->getAmpRuntimeScriptHost(), RequestDestination::SCRIPT);
        }

        if ($this->isAmpRuntimeCssNeeded($document)) {
            $document->links->addPreload($this->getAmpRuntimeCssHost(), RequestDestination::STYLE);
        }
    }

    /**
     * Check whether the AMP runtime script is needed.
     *
     * @param Document $document Document to check in.
     * @return bool Whether the AMP runtime script is needed.
     */
    private function isAmpRuntimeScriptNeeded(Document $document)
    {
        // TODO: What condition should be used here... same as isAmpRuntimeCssNeeded()?
        return false;
    }

    /**
     * Get the host domain of the AMP runtime script to preload.
     *
     * @return string AMP runtime script host.
     */
    private function getAmpRuntimeScriptHost()
    {
        return Amp::CACHE_HOST . '/v0.js';
    }

    /**
     * Check whether the AMP runtime CSS is needed.
     *
     * If the document was serverside-rendered, it means the AMP Runtime CSS was inlined. In that case, we don't need to
     * preload the CSS, as it is of low priority, with a very low probability to have a meaningful impact at all.
     *
     * @param Document $document Document to check in.
     * @return bool Whether the AMP runtime CSS is needed.
     */
    private function isAmpRuntimeCssNeeded(Document $document)
    {
        $ampRuntimeStyle = $document->xpath
            ->query(AmpRuntimeCss::AMP_RUNTIME_STYLE_XPATH, $document->head)
            ->item(0);

        return empty($ampRuntimeStyle);
    }

    /**
     * Get the host domain of the AMP runtime CSS to preload.
     *
     * @return string AMP runtime CSS host.
     */
    private function getAmpRuntimeCssHost()
    {
        return Amp::CACHE_HOST . '/v0.css';
    }
}
PK.3YSj�o��[bunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Transformer/AmpStoryCssOptimizer.php<?php

namespace AmpProject\Optimizer\Transformer;

use AmpProject\Amp;
use AmpProject\Dom\Document;
use AmpProject\Dom\Element;
use AmpProject\Dom\NodeWalker;
use AmpProject\Extension;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag;
use AmpProject\Optimizer\Configuration\AmpStoryCssOptimizerConfiguration;
use AmpProject\Optimizer\ErrorCollection;
use AmpProject\Optimizer\Transformer;
use AmpProject\Optimizer\TransformerConfiguration;

/**
 * AmpStoryCssOptimizer - CSS Optimizer for AMP Story
 *
 * This transformer will:
 * - append `link[rel=stylesheet]` to `amp-story-1.0.css`.
 * - modify the `amp-custom` CSS to use `--amp-story-${vh/vw/vmin/vmax}`.
 * - append inline `<script>` for the `dvh` polyfill.
 * - SSR `data-story-supports-landscape`.
 * - SSR `aspect-ratio` into style.
 *
 * @package ampproject/amp-toolbox
 */
final class AmpStoryCssOptimizer implements Transformer
{
    /**
     * AMP Story dvh pollyfill script.
     *
     * @var string
     */
    const AMP_STORY_DVH_POLYFILL_CONTENT = '"use strict";if(!self.CSS||!CSS.supports||!CSS.supports("height:1dvh"))'
        . '{function e(){document.documentElement.style.setProperty("--story-dvh",innerHeight/100+"px","important")}'
        . 'addEventListener("resize",e,{passive:!0}),e()}';

    /**
     * Configuration store to use.
     *
     * @var TransformerConfiguration
     */
    private $configuration;

    /**
     * Instantiate an AmpStoryCssOptimizer object.
     *
     * @param TransformerConfiguration $configuration Configuration store to use.
     */
    public function __construct(TransformerConfiguration $configuration)
    {
        $this->configuration = $configuration;
    }

    /**
     * Apply transformations to the provided DOM document.
     *
     * @param Document        $document DOM document to apply the transformations to.
     * @param ErrorCollection $errors   Collection of errors that are collected during transformation.
     * @return void
     */
    public function transform(Document $document, ErrorCollection $errors)
    {
        if (!$this->configuration->get(AmpStoryCssOptimizerConfiguration::OPTIMIZE_AMP_STORY)) {
            return;
        }

        $hasAmpStoryScript            = false;
        $hasAmpStoryDvhPolyfillScript = false;
        $styleAmpCustom               = null;

        foreach ($document->head->childNodes as $childNode) {
            if (! $childNode instanceof Element) {
                continue;
            }

            if ($this->isAmpStoryScript($childNode)) {
                $hasAmpStoryScript = true;
                continue;
            }

            if ($this->isAmpStoryDvhPolyfillScript($childNode)) {
                $hasAmpStoryDvhPolyfillScript = true;
                continue;
            }

            if ($this->isStyleAmpCustom($childNode)) {
                $styleAmpCustom = $childNode;
                continue;
            }
        }

        // We can return early if no amp-story script is found.
        if (! $hasAmpStoryScript) {
            return;
        }

        $this->appendAmpStoryCssLink($document);

        if ($styleAmpCustom) {
            $this->modifyAmpCustomCSS($styleAmpCustom);
            // Make sure to not install the dvh polyfill twice.
            if (! $hasAmpStoryDvhPolyfillScript) {
                $this->appendAmpStoryDvhPolyfillScript($document);
            }
        }

        $this->supportsLandscapeSSR($document);
        $this->aspectRatioSSR($document);
    }

    /**
     * Check whether the element is an AMP Story element.
     *
     * @param Element $element Element to check.
     * @return bool Whether the given element is an AMP story.
     */
    private function isAmpStoryScript(Element $element)
    {
        return $element->tagName === Tag::SCRIPT
            && $element->getAttribute(Attribute::CUSTOM_ELEMENT) === Extension::STORY;
    }

    /**
     * Check whether the element is a script[amp-story-dvh-polyfill] element.
     *
     * @param Element $element Element to check.
     * @return bool Whether the element is a script[amp-story-dvh-polyfill] element.
     */
    private function isAmpStoryDvhPolyfillScript(Element $element)
    {
        return $element->tagName === Tag::SCRIPT
            && $element->hasAttribute(Attribute::AMP_STORY_DVH_POLYFILL);
    }

    /**
     * Check whether the element is a style[amp-custom] element.
     *
     * @param Element $element Element to check.
     * @return bool Whether the element is a style[amp-custom] element.
     */
    private function isStyleAmpCustom(Element $element)
    {
        return $element->tagName === Tag::STYLE
            && $element->hasAttribute(Attribute::AMP_CUSTOM);
    }

    /**
     * Insert a link element with amp-story css source.
     *
     * @param Document $document Document to append the link.
     */
    private function appendAmpStoryCssLink(Document $document)
    {
        // @TODO Need to take the following into account when deciding on a version:
        // - latest stable version available,
        // - the channel that the runtime is locked to, i.e. whether LTS is active.
        $href = Amp::CACHE_HOST . '/v0/amp-story-1.0.css';

        $ampStoryCssLink = $document->createElementWithAttributes(Tag::LINK, [
            Attribute::REL           => Attribute::REL_STYLESHEET,
            Attribute::AMP_EXTENSION => Extension::STORY,
            Attribute::HREF          => $href,
        ]);

        $document->head->appendChild($ampStoryCssLink);
    }

    /**
     * Replace viewport units in custom css with related css variables.
     *
     * @param Element $style The style element to modify.
     */
    private function modifyAmpCustomCSS(Element $style)
    {
        $style->nodeValue = preg_replace(
            '/(-?[\d.]+)v(w|h|min|max)/',
            'calc($1 * var(--story-page-v$2))',
            $style->nodeValue
        );
    }

    /**
     * Append an inline script tag for the dvh polyfill
     *
     * @param Document $document The document in which we need to append the script tag.
     * @return void
     */
    private function appendAmpStoryDvhPolyfillScript(Document $document)
    {
        $ampStoryDvhPolyfillScript = $document->createElementWithAttributes(
            Tag::SCRIPT,
            [
                Attribute::AMP_STORY_DVH_POLYFILL => '',
            ],
            self::AMP_STORY_DVH_POLYFILL_CONTENT
        );

        $document->head->appendChild($ampStoryDvhPolyfillScript);
    }

    /**
     * Add data-story-supports-landscape attribute to support landscape.
     *
     * @param Document $document The document in which we need to add the attribute.
     */
    private function supportsLandscapeSSR(Document $document)
    {
        $story = $document->body->getElementsByTagName(Extension::STORY)->item(0);

        if (! $story instanceof Element) {
            return;
        }

        if ($story->hasAttribute(Attribute::SUPPORTS_LANDSCAPE)) {
            $document->html->setAttribute(Attribute::DATA_STORY_SUPPORTS_LANDSCAPE, '');
        }
    }

    /**
     * Add aspect-ratio inline style for amp-story-grid-layer.
     *
     * @param Document $document The document in which we need to add the style.
     */
    private function aspectRatioSSR(Document $document)
    {
        for ($node = $document->body; $node !== null; $node = NodeWalker::nextNode($node)) {
            if (! $node instanceof Element) {
                continue;
            }

            if (Amp::isTemplate($node)) {
                $node = NodeWalker::skipNodeAndChildren($node);
                continue;
            }

            if ($node->tagName !== Extension::STORY_GRID_LAYER) {
                continue;
            }

            if (! $node->hasAttribute(Attribute::ASPECT_RATIO)) {
                continue;
            }

            $aspectRatio = str_replace(':', '/', $node->getAttribute(Attribute::ASPECT_RATIO));

            $node->addInlineStyle("--aspect-ratio:{$aspectRatio}", true);
        }
    }
}
PK.3Y�����a�aUbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Transformer/AutoExtensions.php<?php

namespace AmpProject\Optimizer\Transformer;

use AmpProject\Amp;
use AmpProject\Html\Attribute;
use AmpProject\Dom\Document;
use AmpProject\Dom\Element;
use AmpProject\Dom\NodeWalker;
use AmpProject\Extension;
use AmpProject\Optimizer\Configuration\AutoExtensionsConfiguration;
use AmpProject\Optimizer\Error\CannotParseJsonData;
use AmpProject\Optimizer\ErrorCollection;
use AmpProject\Optimizer\Transformer;
use AmpProject\Optimizer\TransformerConfiguration;
use AmpProject\Html\Tag;
use AmpProject\Validator\Spec;
use AmpProject\Validator\Spec\AttributeList\GlobalAttrs;
use AmpProject\Validator\Spec\SpecRule;
use Exception;
use InvalidArgumentException;

/**
 * Auto import all the missing AMP extensions.
 *
 * @package ampproject/amp-toolbox
 */
final class AutoExtensions implements Transformer
{
    /**
     * Some AMP components don't bring their own tag, but enable new attributes on other elements. Most are included in
     * the AMP validation rules, but some are not. These need to be defined manually here.
     *
     * @var array
     */
    const MANUAL_ATTRIBUTE_TO_EXTENSION_MAPPING = [
        Attribute::LIGHTBOX => Extension::LIGHTBOX_GALLERY,
    ];

    /**
     * Attribute prefix for attributes like bindtext, bindaria-labelledby.
     *
     * @var string
     */
    const BIND_SHORT_FORM_PREFIX = 'bind';

    /**
     * Configuration store to use.
     *
     * @var TransformerConfiguration
     */
    private $configuration;

    /**
     * Validator spec instance.
     *
     * @var Spec
     */
    private $spec;

    /**
     * List of extensions added by the maybeAddExtension method.
     *
     * @var array
     */
    private $addedExtensions = [];

    /**
     * List of extensions that should not be removed even when there is no usage in the HTML.
     *
     * The array key is the extension to protect, the array value is an array of extensions that
     * make up the requirements for protecting the extension. An empty array means the extension
     * is protected unconditionally.
     *
     * @var array
     */
    private $protectedExtensions = [
        'amp-carousel' => ['amp-lightbox-gallery'],
    ];

    /**
     * Instantiate an AutoExtensions object.
     *
     * @param TransformerConfiguration $configuration Configuration store to use.
     * @param Spec                     $spec          Validator spec instance.
     */
    public function __construct(TransformerConfiguration $configuration, Spec $spec)
    {
        $this->configuration = $configuration;
        $this->spec          = $spec;
    }

    /**
     * Apply transformations to the provided DOM document.
     *
     * @param Document        $document DOM document to apply the transformations to.
     * @param ErrorCollection $errors   Collection of errors that are collected during transformation.
     * @return void
     */
    public function transform(Document $document, ErrorCollection $errors)
    {
        $extensionScripts = $this->extractExtensionScripts($document, $errors);

        if ($this->configuration->get(AutoExtensionsConfiguration::AUTO_EXTENSION_IMPORT)) {
            $extensionScripts = $this->addMissingExtensions($document, $extensionScripts);
        }

        $extensionScripts = $this->removeUnneededExtensions($extensionScripts);

        $this->renderExtensionScripts($document, $extensionScripts);
    }

    /**
     * Extract the extension scripts already present in the document.
     *
     * @param Document        $document Document to extract the extension scripts from.
     * @param ErrorCollection $errors   Collection of errors that are collected during transformation.
     * @return Element[] Array of extension scripts.
     */
    private function extractExtensionScripts(Document $document, ErrorCollection $errors)
    {
        $extensionScripts = [];

        // We memorize nodes to be removed first and only remove them after the loop to not mess up the loop index.
        $nodesToRemove = [];

        foreach ($document->head->getElementsByTagName(Tag::SCRIPT) as $script) {
            /** @var Element $script */
            if ($script->getAttribute(Attribute::ID) === Extension::ACCESS) {
                // Explicitly detect amp-access via the script tag in the header to be able to handle amp-access
                // extensions.
                $extensionScripts = $this->maybeAddExtension($document, $extensionScripts, Extension::ACCESS);
                $extensionScripts = $this->maybeAddExtension($document, $extensionScripts, Extension::ANALYTICS);

                $jsonData  = $this->getJsonData($script, $errors);
                $providers = [];

                // Access providers could be single or multiple.
                if (isset($jsonData['vendor'])) {
                    $providers = [$jsonData];
                } elseif (isset($jsonData[0]) && is_array($jsonData[0])) {
                    $providers = $jsonData;
                }

                foreach ($providers as $provider) {
                    $requiredExtension = null;

                    if ($provider['vendor'] === 'laterpay') {
                        $requiredExtension = Extension::ACCESS_LATERPAY;
                    } elseif (
                        $provider['vendor'] === 'scroll'
                        && isset($provider['namespace'])
                        && $provider['namespace'] === 'scroll'
                    ) {
                        $requiredExtension = Extension::ACCESS_SCROLL;
                    }

                    if ($requiredExtension) {
                        $extensionScripts = $this->maybeAddExtension(
                            $document,
                            $extensionScripts,
                            $requiredExtension
                        );
                    }
                }
            } elseif ($script->getAttribute(Attribute::ID) === Extension::SUBSCRIPTIONS) {
                // Explicitly detect amp-subscriptions via the script tag in the header to be able to handle
                // amp-subscriptions extensions.
                $extensionScripts = $this->maybeAddExtension($document, $extensionScripts, Extension::SUBSCRIPTIONS);
                $extensionScripts = $this->maybeAddExtension($document, $extensionScripts, Extension::ANALYTICS);

                $jsonData = $this->getJsonData($script, $errors);
                if (!array_key_exists('services', $jsonData)) {
                    continue;
                }

                foreach ($jsonData['services'] as $service) {
                    if (
                        array_key_exists('serviceId', $service)
                        && $service['serviceId'] === 'subscribe.google.com'
                    ) {
                        $extensionScripts = $this->maybeAddExtension(
                            $document,
                            $extensionScripts,
                            Extension::SUBSCRIPTIONS_GOOGLE
                        );
                        break;
                    }
                }
            }

            $src = $script->getAttribute(Attribute::SRC);

            if (
                ! $script->hasAttribute(Attribute::SRC)
                ||
                Amp::CACHE_ROOT_URL !== substr($src, 0, strlen(Amp::CACHE_ROOT_URL))
            ) {
                continue;
            }

            if (Amp::isRuntimeScript($script)) {
                $extensionScripts[Amp::RUNTIME] = $script;
            } elseif ($script->hasAttribute(Attribute::CUSTOM_ELEMENT)) {
                $extensionScripts[$script->getAttribute(Attribute::CUSTOM_ELEMENT)] = $script;
            } elseif ($script->hasAttribute(Attribute::CUSTOM_TEMPLATE)) {
                $extensionScripts[$script->getAttribute(Attribute::CUSTOM_TEMPLATE)] = $script;
            } else {
                continue;
            }

            $nodesToRemove[] = $script;
        }

        foreach ($nodesToRemove as $nodeToRemove) {
            // Remove the identified extension scripts from the DOM Document so that we can move them.
            $nodeToRemove->parentNode->removeChild($nodeToRemove);
        }

        return $extensionScripts;
    }

    /**
     * Add missing extensions to the array of extension scripts.
     *
     * @param Document  $document         Document to scan for missing extensions.
     * @param Element[] $extensionScripts Array of preexisting extension scripts.
     * @return Element[] Adapted array of extension scripts that includes the previously missing ones.
     */
    private function addMissingExtensions(Document $document, $extensionScripts)
    {
        $node = $document->body;

        while ($node !== null) {
            if ($node instanceof Element) {
                $extensionScripts = $this->addRequiredExtensionByTag($document, $node, $extensionScripts);
                $extensionScripts = $this->addRequiredExtensionByAttributes($document, $node, $extensionScripts);
            }

            $node = NodeWalker::nextNode($node);
        }

        return $extensionScripts;
    }

    /**
     * Add required extensions by tag names.
     *
     * @param Document  $document         Document to scan for missing extensions.
     * @param Element   $node             The node we are inspecting to see if it needs an extension.
     * @param Element[] $extensionScripts Array of preexisting extension scripts.
     * @return Element[] Adapted array of extension scripts that includes the previously missing ones.
     */
    private function addRequiredExtensionByTag(Document $document, Element $node, $extensionScripts)
    {
        if (! Amp::isCustomElement($node)) {
            return $this->addExtensionForCustomTemplates($document, $node, $extensionScripts);
        }

        $tagSpecs = $this->spec->tags()->byTagName($node->tagName);

        foreach ($tagSpecs as $tagSpec) {
            foreach ($tagSpec->requiresExtension as $requiredExtension) {
                if (in_array($requiredExtension, self::MANUAL_ATTRIBUTE_TO_EXTENSION_MAPPING, true)) {
                    continue;
                }

                $extensionScripts = $this->maybeAddExtension($document, $extensionScripts, $requiredExtension);
            }
        }

        return $extensionScripts;
    }

    /**
     * Add extensions custom templates (e.g. amp-mustache).
     *
     * @param Document  $document         Document to scan for missing extensions.
     * @param Element   $node             The node we are inspecting to see if it needs an extension.
     * @param Element[] $extensionScripts Array of preexisting extension scripts.
     * @return Element[] Adapted array of extension scripts that includes the previously missing ones.
     */
    private function addExtensionForCustomTemplates(Document $document, Element $node, $extensionScripts)
    {
        $requiredExtension = '';

        if ($node->tagName === Tag::TEMPLATE && $node->hasAttribute(Attribute::TYPE)) {
            $requiredExtension = $node->getAttribute(Attribute::TYPE);
        } elseif ($node->tagName === Tag::SCRIPT && $node->hasAttribute(Attribute::TEMPLATE)) {
            $requiredExtension = $node->getAttribute(Attribute::TEMPLATE);
        } elseif ($node->tagName === Tag::INPUT && $node->hasAttribute(Attribute::MASK)) {
            $requiredExtension = Extension::INPUTMASK;
        }

        return ! $requiredExtension ? $extensionScripts : $this->maybeAddExtension(
            $document,
            $extensionScripts,
            $requiredExtension
        );
    }

    /**
     * Add required extension by attributes.
     *
     * @param Document  $document         Document to scan for missing extensions.
     * @param Element   $node             The node we are inspecting to see if it needs an extension.
     * @param Element[] $extensionScripts Array of preexisting extension scripts.
     * @return Element[] Adapted array of extension scripts that includes the previously missing ones.
     */
    private function addRequiredExtensionByAttributes(Document $document, Element $node, $extensionScripts)
    {
        if (! $node->hasAttributes()) {
            return $extensionScripts;
        }

        // The amp-form extension extends the regular <form> tag, so we manually look for that tag.
        // See https://amp.dev/documentation/components/amp-form/.
        if ($node->tagName === Tag::FORM) {
            $extensionScripts = $this->maybeAddExtension($document, $extensionScripts, Extension::FORM);
        }

        // Will be set to true if we need to import amp-bind.
        $usesAmpBind = false;

        // Associative array of new attribute names with data-amp-bind- prefix and attribute value pair.
        $newAttributes = [];

        // Populate all attributes for the current node tag name.
        $nodeAttributeList = $this->getTagAttributeList($node->tagName);

        $globalAttributes = $this->spec->attributeLists()->get(GlobalAttrs::ID);

        foreach ($node->attributes as $attribute) {
            // Add attribute dependencies (e.g. amp-img => lightbox => amp-lightbox-gallery).
            if (array_key_exists($attribute->name, self::MANUAL_ATTRIBUTE_TO_EXTENSION_MAPPING)) {
                $extensionScripts = $this->maybeAddExtension(
                    $document,
                    $extensionScripts,
                    self::MANUAL_ATTRIBUTE_TO_EXTENSION_MAPPING[$attribute->name]
                );
            }

            // Element attributes that require amp extensions (e.g. amp-video[dock]).
            if (! empty($nodeAttributeList[$attribute->name][SpecRule::REQUIRES_EXTENSION])) {
                $requiresExtensions = $nodeAttributeList[$attribute->name][SpecRule::REQUIRES_EXTENSION];
                foreach ($requiresExtensions as $requiresExtension) {
                    $extensionScripts = $this->maybeAddExtension($document, $extensionScripts, $requiresExtension);
                }
            }

            // Attributes that require AMP components (e.g. amp-fx).
            if ($globalAttributes->has($attribute->name)) {
                $attr = $globalAttributes->get($attribute->name);

                if (isset($attr[SpecRule::REQUIRES_EXTENSION])) {
                    foreach ($attr[SpecRule::REQUIRES_EXTENSION] as $requiresExtension) {
                        $extensionScripts = $this->maybeAddExtension($document, $extensionScripts, $requiresExtension);
                    }
                }
            }

            // Check for amp-bind attribute bindings.
            if (strpos($attribute->name, '[') === 0 || strpos($attribute->name, Amp::BIND_DATA_ATTR_PREFIX) === 0) {
                $usesAmpBind = true;
            }

            /*
             * EXPERIMENTAL FEATURE: Rewrite short-form `bindtext` to `data-amp-bind-text`.
             *
             * To avoid false-positives, we only check the supported bindable attributes for each tag (e.g. for a div
             * only bindtext, but not bindvalue).
             */
            if (
                $this->configuration->get(AutoExtensionsConfiguration::EXPERIMENT_BIND_ATTRIBUTE)
                && strpos($attribute->name, self::BIND_SHORT_FORM_PREFIX) === 0
            ) {
                // Change name from bindaria-labelledby to aria-labelledby.
                $attributeNameWithoutBindPrefix = substr($attribute->name, strlen(self::BIND_SHORT_FORM_PREFIX));

                // Change the name from aria-labelledby to [ARIA_LABELLEDBY].
                $bindableAttributeName = '['
                    . str_replace('-', '_', strtoupper($attributeNameWithoutBindPrefix))
                    . ']';

                // Rename attribute from bindx to data-amp-bind-x.
                if ($globalAttributes->has($bindableAttributeName)) {
                    $newAttributeName = Amp::BIND_DATA_ATTR_PREFIX . $attributeNameWithoutBindPrefix;
                    $newAttributes[$newAttributeName] = $attribute->value;

                    $node->removeAttribute($attribute->name);

                    $usesAmpBind = true;
                }
            }
        }

        // Add the renamed bindable attributes in the node.
        if ($newAttributes) {
            $node->setAttributes($newAttributes);
        }

        if ($usesAmpBind) {
            $extensionScripts = $this->maybeAddExtension($document, $extensionScripts, Extension::BIND);
        }

        return $extensionScripts;
    }

    /**
     * Get all attributes for a tag.
     *
     * @TODO: Provide this functionality as part of the validator spec implementation.
     *
     * @param string $tagName Name of the node tag.
     * @return array Attribute list for the tag name.
     */
    private function getTagAttributeList($tagName)
    {
        static $nodeAttributeList = [];

        if (! isset($nodeAttributeList[$tagName])) {
            $nodeAttributeList[$tagName] = [];

            $tagSpecs = $this->spec->tags()->byTagName($tagName);

            foreach ($tagSpecs as $tagSpec) {
                $attrLists = $tagSpec->get(SpecRule::ATTR_LISTS);
                if (is_array($attrLists)) {
                    foreach ($attrLists as $attrList) {
                        $list = $this->spec->attributeLists()->get($attrList);
                        $nodeAttributeList[$tagName] = array_merge($nodeAttributeList[$tagName], $list::ATTRIBUTES);
                    }
                }
            }
        }

        return $nodeAttributeList[$tagName];
    }

    /**
     * Remove unneeded extension scripts.
     *
     * @param Element[] $extensionScripts Array of extension scripts to check.
     * @return Element[] Adapted array of extension scripts.
     */
    private function removeUnneededExtensions($extensionScripts)
    {
        if (! $this->configuration->get(AutoExtensionsConfiguration::REMOVE_UNNEEDED_EXTENSIONS)) {
            return $extensionScripts;
        }

        return array_filter($extensionScripts, function ($extension) {
            return array_key_exists($extension, $this->addedExtensions)
                || $this->isProtectedExtension($extension);
        }, ARRAY_FILTER_USE_KEY);
    }

    /**
     * Determines whether an extension should not be removed even when there is no usage in the HTML.
     *
     * @param string $extension Name of the extension to be checked.
     * @return bool Whether the extension should be protected.
     */
    private function isProtectedExtension($extension)
    {
        if (array_key_exists($extension, $this->protectedExtensions)) {
            if (empty($this->protectedExtensions[$extension])) {
                return true;
            }

            foreach ($this->protectedExtensions[$extension] as $dependentExtension) {
                if (array_key_exists($dependentExtension, $this->addedExtensions)) {
                    return true;
                }
            }
        }

        return false;
    }

    /**
     * Render the extension scripts into the DOM document.
     *
     * @param Document $document         Document to render the extension scripts into.
     * @param array    $extensionScripts Array of extension scripts to render.
     */
    private function renderExtensionScripts(Document $document, array $extensionScripts)
    {
        $referenceNode = $this->getExtensionScriptsReferenceNode($document);

        foreach ($extensionScripts as $extensionScript) {
            if ($referenceNode && $referenceNode->nextSibling) {
                $referenceNode->parentNode->insertBefore(
                    $extensionScript,
                    $referenceNode->nextSibling
                );
            } else {
                $document->head->appendChild($extensionScript);
            }

            $referenceNode = $extensionScript;
        }
    }

    /**
     * Get the reference node to attach extension scripts to.
     *
     * @param Document $document Document to look for the reference node in.
     * @return Element|null Reference node to use, or null if not found.
     */
    private function getExtensionScriptsReferenceNode(Document $document)
    {
        $referenceNode = $document->viewport ?: $document->charset;

        if (! $referenceNode instanceof Element) {
            $referenceNode = $document->head->firstChild;
        }

        if (! $referenceNode instanceof Element) {
            return null;
        }

        // Try to detect the boilerplate style so we can append the scripts after that.
        $remainingNode = $referenceNode->nextSibling;
        while ($remainingNode) {
            if (! $remainingNode instanceof Element) {
                $remainingNode = $remainingNode->nextSibling;
                continue;
            }

            if (
                $remainingNode->tagName === Tag::STYLE
                && $remainingNode->hasAttribute(Attribute::AMP_BOILERPLATE)
            ) {
                $referenceNode = $remainingNode;
            } elseif (
                $remainingNode->tagName === Tag::NOSCRIPT
                && $remainingNode->firstChild instanceof Element
                && $remainingNode->firstChild->tagName === Tag::STYLE
                && $remainingNode->firstChild->hasAttribute(Attribute::AMP_BOILERPLATE)
            ) {
                $referenceNode = $remainingNode;
            }

            $remainingNode = $remainingNode->nextSibling;
        }

        return $referenceNode;
    }

    /**
     * Maybe add a required extension to the list of extension scripts.
     *
     * @param Document $document          Document to render the extension scripts into.
     * @param array    $extensionScripts  Existing list of extension scripts.
     * @param string   $requiredExtension Required extension to check for.
     * @return array Adapted list of extension scripts.
     */
    private function maybeAddExtension(Document $document, $extensionScripts, $requiredExtension)
    {
        if (
            in_array(
                $requiredExtension,
                $this->configuration->get(AutoExtensionsConfiguration::IGNORED_EXTENSIONS),
                true
            )
        ) {
            return $extensionScripts;
        }

        if (! array_key_exists($requiredExtension, $extensionScripts)) {
            $tagSpecs = $this->spec->tags()->byExtensionSpec($requiredExtension);

            foreach ($tagSpecs as $tagSpec) {
                $requiredScript = $document->createElement(Tag::SCRIPT);
                $requiredScript->appendChild($document->createAttribute(Attribute::ASYNC));
                $requiredScript->setAttribute($tagSpec->getExtensionType(), $requiredExtension);
                $requiredScript->setAttribute(Attribute::SRC, $this->getScriptSrcForExtension($tagSpec));
                $extensionScripts[$requiredExtension] = $requiredScript;
            }
        }

        $this->addedExtensions[$requiredExtension] = true;

        return $extensionScripts;
    }

    /**
     * Get the URL to use for the extension script's src attribute.
     *
     * @param Spec\TagWithExtensionSpec $tagSpec Spec of the extension tag.
     * @return string URL to use for extension script.
     */
    private function getScriptSrcForExtension($tagSpec)
    {
        $version = $this->calculateExtensionVersion($tagSpec);
        return Amp::CACHE_ROOT_URL . "v0/{$tagSpec->getExtensionName()}-{$version}.js";
    }

    /**
     * Calculate the extension version.
     *
     * @param Spec\TagWithExtensionSpec $tagSpec Spec of the extension tag.
     * @return string Extension version.
     */
    private function calculateExtensionVersion($tagSpec)
    {
        $configuredVersions = $this->configuration->get(AutoExtensionsConfiguration::EXTENSION_VERSIONS);

        if (! empty($configuredVersions[$tagSpec->getExtensionName()])) {
            return $configuredVersions[$tagSpec->getExtensionName()];
        }

        return $tagSpec->getLatestVersion();
    }

    /**
     * Get the JSON data from the script element.
     *
     * @param Element         $script Script element to get the JSON data from.
     * @param ErrorCollection $errors Collection of errors that are collected during transformation.
     * @return array Associative array of parsed JSON data.
     */
    private function getJsonData(Element $script, ErrorCollection $errors)
    {
        try {
            $jsonString = trim($script->nodeValue);

            if (empty($jsonString)) {
                return [];
            }

            $jsonData = json_decode(trim($script->nodeValue), true);

            if (JSON_ERROR_NONE !== json_last_error()) {
                throw new InvalidArgumentException('json_decode error: ' . json_last_error_msg());
            }

            if (is_array($jsonData)) {
                return $jsonData;
            }
        } catch (Exception $exception) {
            $errors->add(CannotParseJsonData::fromExceptionForScriptElement($exception, $script));
        }

        return [];
    }
}
PK.3Y�Rmm\bunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Transformer/GoogleFontsPreconnect.php<?php

namespace AmpProject\Optimizer\Transformer;

use AmpProject\Dom\Document;
use AmpProject\Optimizer\ErrorCollection;
use AmpProject\Optimizer\Transformer;

/**
 * Transformer adding resource hints to preconnect to the Google Fonts domain.
 *
 * @package ampproject/amp-toolbox
 */
final class GoogleFontsPreconnect implements Transformer
{
    /**
     * Domain that the Google Fonts static files are loaded from.
     *
     * @var string
     */
    const GOOGLE_FONTS_STATIC_ORIGIN = 'https://fonts.gstatic.com';

    /**
     * Domain that the Google Fonts API is accepting requests from.
     *
     * @var string
     */
    const GOOGLE_FONTS_API_BASE_URL = 'https://fonts.googleapis.com/';

    /**
     * XPath query to fetch links pointing to the Google Fonts API.
     *
     * @var string
     */
    const XPATH_GOOGLE_FONTS_API_QUERY = './/link[starts-with(@href, "' . self::GOOGLE_FONTS_API_BASE_URL . '")]';

    /**
     * Apply transformations to the provided DOM document.
     *
     * @param Document        $document DOM document to apply the transformations to.
     * @param ErrorCollection $errors   Collection of errors that are collected during transformation.
     * @return void
     */
    public function transform(Document $document, ErrorCollection $errors)
    {
        if ($this->usesGoogleFonts($document)) {
            $document->links->addPreconnect(self::GOOGLE_FONTS_STATIC_ORIGIN);
        }
    }

    /**
     * Check whether the document uses Google Fonts.
     *
     * @param Document $document Document to check for Google Fonts.
     * @return boolean Whether the provided document uses Google Fonts.
     */
    private function usesGoogleFonts(Document $document)
    {
        $links = $document->xpath->query(
            self::XPATH_GOOGLE_FONTS_API_QUERY,
            $document->head
        );

        return $links->length > 0;
    }
}
PK.3Y�'�WV0V0Qbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Transformer/MinifyHtml.php<?php

namespace AmpProject\Optimizer\Transformer;

use AmpProject\Html\Attribute;
use AmpProject\Html\Tag;
use AmpProject\Dom\Document;
use AmpProject\Dom\Element;
use AmpProject\Extension;
use AmpProject\Optimizer\Configuration\MinifyHtmlConfiguration;
use AmpProject\Optimizer\Error;
use AmpProject\Optimizer\ErrorCollection;
use AmpProject\Optimizer\Transformer;
use AmpProject\Optimizer\TransformerConfiguration;
use AmpProject\Protocol;
use AmpProject\Str;
use DOMComment;
use DOMNode;
use DOMText;
use Exception;
use Peast\Formatter\Compact;
use Peast\Peast;
use Peast\Renderer;

/**
 * Transformer that that minifies HTML.
 *
 * @package ampproject/amp-toolbox
 */
final class MinifyHtml implements Transformer
{
    /**
     * Configuration store to use.
     *
     * @var TransformerConfiguration
     */
    private $configuration;

    /**
     * Holds the current mustache template depth value.
     *
     * @var int
     */
    private $mustacheTemplateDepth = 0;

    /**
     * Instantiate a MinifyHtml object.
     *
     * @param TransformerConfiguration $configuration Configuration store to use.
     */
    public function __construct(TransformerConfiguration $configuration)
    {
        $this->configuration = $configuration;
    }

    /**
     * Apply transformations to the provided DOM document.
     *
     * @param Document        $document DOM document to apply the transformations to.
     * @param ErrorCollection $errors   Collection of errors that are collected during transformation.
     * @return void
     */
    public function transform(Document $document, ErrorCollection $errors)
    {
        if (! $this->configuration->get(MinifyHtmlConfiguration::MINIFY)) {
            return;
        }

        // Recursively walk through all nodes and minify if possible.
        $nodesToRemove = $this->minifyNode($document, $errors);

        foreach ($nodesToRemove as $nodeToRemove) {
            if ($nodeToRemove instanceof DOMNode) {
                $nodeToRemove->parentNode->removeChild($nodeToRemove);
            }
        }
    }

    /**
     * Apply minification to a DOM node.
     *
     * @param DOMNode         $node                  Node to apply the transformations to.
     * @param ErrorCollection $errors                Collection of errors that are collected during transformation.
     * @param bool            $canCollapseWhitespace Optional. Whether whitespace can be collapsed. Defaults to true.
     * @param bool            $inBody                Optional. Whether the node is in the body. Defaults to false.
     * @return DOMNode[] Array of nodes to be removed.
     */
    private function minifyNode(DOMNode $node, ErrorCollection $errors, $canCollapseWhitespace = true, $inBody = false)
    {
        $nodesToRemove = [];

        if ($node instanceof DOMText) {
            $nodesToRemove = $this->minifyTextNode($node, $canCollapseWhitespace, $inBody);
        } elseif ($node instanceof DOMComment) {
            $nodesToRemove = $this->minifyCommentNode($node);
        } elseif ($node instanceof Element && $node->tagName === Tag::SCRIPT) {
            $this->minifyScriptNode($node, $errors);
        }

        // Update options based on the current node.
        if ($node instanceof Element) {
            if ($canCollapseWhitespace && !$this->canCollapseWhitespace($node->tagName)) {
                $canCollapseWhitespace = false;
            }

            if ($node->tagName === Tag::HEAD || $node->tagName === Tag::HTML) {
                $inBody = false;
            } elseif ($node->tagName === Tag::BODY) {
                $inBody = true;
            }
        }

        if ($node->hasChildNodes()) {
            $isNodeMustacheTemplate = $this->isMustacheTemplate($node);

            if ($isNodeMustacheTemplate) {
                $this->mustacheTemplateDepth++;
            }

            foreach ($node->childNodes as $childNode) {
                $nodesToRemove = array_merge(
                    $nodesToRemove,
                    $this->minifyNode($childNode, $errors, $canCollapseWhitespace, $inBody)
                );
            }

            if ($isNodeMustacheTemplate) {
                $this->mustacheTemplateDepth--;
            }
        }

        return $nodesToRemove;
    }

    /**
     * Minify a text type DOM node.
     *
     * @param DOMText $node                  Text to apply the transformations to.
     * @param bool    $canCollapseWhitespace Optional. Whether whitespace can be collapsed. Defaults to true.
     * @param bool    $inBody                Optional. Whether the node is in the body. Defaults to false.
     * @return DOMNode[] Array of nodes to be removed.
     */
    private function minifyTextNode(DOMText $node, $canCollapseWhitespace = true, $inBody = false)
    {
        if (! $node->data || ! $this->configuration->get(MinifyHtmlConfiguration::COLLAPSE_WHITESPACE)) {
            return [];
        }

        if ($canCollapseWhitespace) {
            $node->data = $this->normalizeWhitespace($node->data);
        }

        if (! $inBody) {
            $node->data = trim($node->data);
        }

        // Remove empty nodes.
        if (strlen($node->data) === 0) {
            return [$node];
        }

        return [];
    }

    /**
     * Minify/remove a comment node.
     *
     * @param DOMComment $node Comment to apply the transformations to.
     * @return DOMNode[] Array of nodes to be removed.
     */
    private function minifyCommentNode(DOMComment $node)
    {
        if (! $node->data || ! $this->configuration->get(MinifyHtmlConfiguration::REMOVE_COMMENTS)) {
            return [];
        }

        $commentIgnorePattern = $this->configuration->get(MinifyHtmlConfiguration::COMMENT_IGNORE_PATTERN);
        if (! empty($commentIgnorePattern) && preg_match($commentIgnorePattern, $node->data)) {
            return [];
        }

        // In case the main $document has `securedDoctype`.
        if (preg_match('/^amp-doctype html/i', $node->data)) {
            return [];
        }

        if ($this->mustacheTemplateDepth > 0 && preg_match($this->getMustacheTagPattern(), $node->data)) {
            return [];
        }

        return [$node];
    }

    /**
     * Minify a script node.
     *
     * @param Element         $node   Element to apply the transformations to.
     * @param ErrorCollection $errors Collection of errors that are collected during transformation.
     */
    private function minifyScriptNode(Element $node, ErrorCollection $errors)
    {
        $isJson = $this->isJSON($node);
        $isAmpScript = ! $isJson && $this->isInlineAmpScript($node);

        foreach ($node->childNodes as $childNode) {
            if (! $childNode instanceof DOMText || empty($childNode->data)) {
                continue;
            }

            if ($isJson && $this->configuration->get(MinifyHtmlConfiguration::MINIFY_JSON)) {
                $this->minifyJson($childNode, $errors);
            } elseif ($isAmpScript && $this->configuration->get(MinifyHtmlConfiguration::MINIFY_AMP_SCRIPT)) {
                $this->minifyAmpScript($childNode, $errors);
            }
        }
    }

    /**
     * Check whether a tag is allowed to collapse whitespace.
     *
     * @param string $tagName The allowed tag name.
     * @return bool Whether whitespace can be collapsed.
     */
    private function canCollapseWhitespace($tagName)
    {
        return (
            Tag::SCRIPT !== $tagName && Tag::STYLE !== $tagName && Tag::PRE !== $tagName && Tag::TEXTAREA !== $tagName
        );
    }

    /**
     * Normalize whitespace for a string data.
     *
     * @param string $data The data to be normalized.
     * @return string Normalized string data.
     */
    private function normalizeWhitespace($data)
    {
        return Str::regexReplace('/[\f\n\r\t\v ]{2,}/', ' ', $data);
    }

    /**
     * Checks if a node is JSON type.
     *
     * @param Element $node The element node need to be checked.
     * @return bool Whether the checked element is a JSON snippet.
     */
    private function isJSON(Element $node)
    {
        $type = $node->getAttribute(Attribute::TYPE);
        return $type === Attribute::TYPE_JSON || $type === Attribute::TYPE_LD_JSON;
    }

    /**
     * Minify JSON node.
     *
     * @param DOMText         $node   The node to be minified.
     * @param ErrorCollection $errors Collection of errors that are collected during transformation.
     */
    private function minifyJson(DOMText $node, ErrorCollection $errors)
    {
        $decodedData = json_decode($node->data);

        if (JSON_ERROR_NONE !== json_last_error()) {
            $errors->add(Error\InvalidJson::fromLastErrorMsgAfterDecoding());
        }

        if (! empty($decodedData)) {
            $data = json_encode(
                $decodedData,
                JSON_HEX_AMP | JSON_HEX_TAG | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE
            );

            if (JSON_ERROR_NONE !== json_last_error()) {
                $errors->add(Error\InvalidJson::fromLastErrorMsgAfterEncoding());
            }

            // PHP uses uppercase letters for angle bracket codes, so convert them into lowercase.
            $node->data = str_replace(['\u003E', '\u003C'], ['\u003e', '\u003c'], $data);
        }
    }

    /**
     * Checks if a node is meant to be an inline amp-script.
     *
     * @param Element $node The element node to be checked.
     * @return bool
     */
    private function isInlineAmpScript(Element $node)
    {
        $type = $node->getAttribute(Attribute::TYPE);
        $target = $node->getAttribute(Attribute::TARGET);

        return $type === Attribute::TYPE_TEXT_PLAIN || $target === Protocol::AMP_SCRIPT;
    }

    /**
     * Minify inline AMP script.
     *
     * @param DOMText         $node   The node to be minified.
     * @param ErrorCollection $errors Collection of errors that are collected during transformation.
     */
    private function minifyAmpScript(DOMText $node, ErrorCollection $errors)
    {
        if (! class_exists(Peast::class) || ! class_exists(Renderer::class) || ! class_exists(Compact::class)) {
            $errors->add(Error\MissingPackage::withMessage(
                'The optional package mck89/peast is required to minify inline amp-script.'
            ));
            return;
        }

        // @codeCoverageIgnoreStart
        try {
            $parser = Peast::latest($node->data, [])->parse();
            $renderer = new Renderer();
            $renderer->setFormatter(new Compact());
            $node->data = $renderer->render($parser);
        } catch (Exception $error) {
            $errors->add(
                Error\CannotMinifyAmpScript::withMessage($node->data, $error->getMessage())
            );
        }
        // @codeCoverageIgnoreEnd
    }

    /**
     * Checks if a node is an amp-mustache template element.
     *
     * @param DOMNode $node The dom node to be checked.
     * @return bool Whether the checked node is an amp-mustache template element.
     */
    private function isMustacheTemplate(DOMNode $node)
    {
        if (
            $node instanceof Element &&
            $node->tagName === Tag::TEMPLATE &&
            $node->getAttribute(Attribute::TYPE) === Extension::MUSTACHE
        ) {
            return true;
        }

        return false;
    }

    /**
     * Get a regular expression that matches all amp-mustache tags while consuming whitespace.
     *
     * @return string Regex pattern to match amp-mustache tags with whitespace.
     */
    private function getMustacheTagPattern()
    {
        static $tagPattern = null;

        if (null === $tagPattern) {
            $delimiter = ':';
            $tags      = [];
            $tokens    = [
                '{{{',
                '}}}',
                '{{#',
                '{{^',
                '{{/',
                '{{',
                '}}',
            ];

            foreach ($tokens as $token) {
                if ('{' === $token[0]) {
                    $tags[] = preg_quote($token, $delimiter) . '\s*';
                } else {
                    $tags[] = '\s*' . preg_quote($token, $delimiter);
                }
            }

            $tagPattern = $delimiter . implode('|', $tags) . $delimiter;
        }

        return $tagPattern;
    }
}
PK.3YK$q�n
n
Vbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Transformer/OptimizeAmpBind.php<?php

namespace AmpProject\Optimizer\Transformer;

use AmpProject\Amp;
use AmpProject\Html\Attribute;
use AmpProject\Dom\Document;
use AmpProject\Dom\Element;
use AmpProject\Dom\NodeWalker;
use AmpProject\Extension;
use AmpProject\Optimizer\Configuration\OptimizeAmpBindConfiguration;
use AmpProject\Optimizer\ErrorCollection;
use AmpProject\Optimizer\Transformer;
use AmpProject\Optimizer\TransformerConfiguration;
use AmpProject\Html\Tag;
use DOMAttr;

/**
 * OptimizeAmpBind - inject a querySelectorAll query-able i-amphtml-binding attribute on elements with bindings.
 *
 * This is ported from the NodeJS optimizer.
 *
 * NodeJS:
 *
 * @version 4aa99eb6e16a39bb562acb67efdfd3ee3d993a98
 * @link https://github.com/ampproject/amp-toolbox/blob/4aa99eb6e16a39bb562acb67efdfd3ee3d993a98/packages/optimizer/lib/transformers/OptimizeAmpBind.js
 *
 * @package ampproject/amp-toolbox
 */
final class OptimizeAmpBind implements Transformer
{
    /**
     * Configuration store to use.
     *
     * @var TransformerConfiguration
     */
    private $configuration;

    /**
     * Instantiate an OptimizeAmpBind object.
     *
     * @param TransformerConfiguration $configuration Configuration store to use.
     */
    public function __construct(TransformerConfiguration $configuration)
    {
        $this->configuration = $configuration;
    }

    /**
     * Apply transformations to the provided DOM document.
     *
     * @param Document        $document DOM document to apply the transformations to.
     * @param ErrorCollection $errors   Collection of errors that are collected during transformation.
     * @return void
     */
    public function transform(Document $document, ErrorCollection $errors)
    {
        if ($this->configuration->get(OptimizeAmpBindConfiguration::ENABLED) === false) {
            return;
        }

        if (!$this->hasAmpBindScriptElement($document)) {
            return;
        }

        $document->html->addBooleanAttribute(Attribute::I_AMPHTML_BINDING);

        for ($node = $document->html; $node !== null; $node = NodeWalker::nextNode($node)) {
            if (!$node instanceof Element) {
                continue;
            }

            if (Amp::isTemplate($node)) {
                $node = NodeWalker::skipNodeAndChildren($node);
                continue;
            }

            /** @var DOMAttr $attribute */
            foreach ($node->attributes as $attribute) {
                if (strpos($attribute->name, Amp::BIND_DATA_ATTR_PREFIX) === 0) {
                    $node->addBooleanAttribute(Attribute::I_AMPHTML_BINDING);
                    break;
                }
            }
        }
    }

    /**
     * Check whether the document has an amp-bind script element.
     *
     * @param Document $document Document to check.
     * @return bool Whether the document has an amp-bind script element.
     */
    private function hasAmpBindScriptElement(Document $document)
    {
        for ($element = $document->head->firstChild; $element !== null; $element = $element->nextSibling) {
            if (!$element instanceof Element) {
                continue;
            }

            if ($element->tagName !== Tag::SCRIPT) {
                continue;
            }

            if ($element->getAttribute(Attribute::CUSTOM_ELEMENT) !== Extension::BIND) {
                continue;
            }

            return true;
        }

        return false;
    }
}
PK.3YJ&�ececYbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Transformer/OptimizeHeroImages.php<?php

namespace AmpProject\Optimizer\Transformer;

use AmpProject\Amp;
use AmpProject\Html\Attribute;
use AmpProject\Dom\Document;
use AmpProject\Dom\Element;
use AmpProject\Dom\NodeWalker;
use AmpProject\Exception\FailedToParseUrl;
use AmpProject\Extension;
use AmpProject\Layout;
use AmpProject\Optimizer\Configuration\OptimizeHeroImagesConfiguration;
use AmpProject\Optimizer\Error;
use AmpProject\Optimizer\ErrorCollection;
use AmpProject\Optimizer\HeroImage;
use AmpProject\Optimizer\ImageDimensions;
use AmpProject\Optimizer\Transformer;
use AmpProject\Optimizer\TransformerConfiguration;
use AmpProject\Html\RequestDestination;
use AmpProject\Html\Tag;
use AmpProject\Url;

/**
 * OptimizeHeroImages - this transformer optimizes image rendering times for hero images. For hero images it will:
 *
 * 1. Inject a preload hint (if possible)
 * 2. Generate img tag(s) enabling the browser to render the hero image(s) without the AMP runtime being loaded.
 *
 * Hero images are either identified automatically or can be explicitly defined by adding an `data-hero` attribute or
 * `data-hero-candidate` to the element. If `data-hero` is present, then auto-detection will not be used to identify
 * any other hero images; using `data-hero-candidate` allows for images to be identified as heroes without
 * short-circuiting automatic detection for other images. Lastly, if no image has either `data-hero` or
 * `data-hero-candidate`, then the first non-tiny image that occurs before two paragraphs is used as the hero.
 *
 * This transformer supports the following options:
 *
 * * `optimizeHeroImages`: [true|false] - enables or disables hero image optimization. The default is `true`.
 * * `maxHeroImageCount`: [int] - defines the maximum number of hero images per page. The default is `2`.
 *
 * This is ported from the NodeJS optimizer.
 *
 * @version 588f80bb6606e9b1eb175381038c215c459f1462
 * @link    https://github.com/ampproject/amp-toolbox/blob/588f80bb6606e9b1eb175381038c215c459f1462/packages/optimizer/lib/transformers/OptimizeHeroImages.js
 *
 * @package ampproject/amp-toolbox
 */
final class OptimizeHeroImages implements Transformer
{
    /**
     * Class(es) to apply to a serverside-rendered image element.
     *
     * @var string
     */
    const SSR_IMAGE_CLASS = 'i-amphtml-fill-content i-amphtml-replaced-content';

    /**
     * List of attributes to copy onto an SSR'ed image.
     *
     * @var string[]
     */
    const ATTRIBUTES_TO_COPY = [
        Attribute::ALT,
        Attribute::ATTRIBUTION,
        Attribute::REFERRERPOLICY,
        Attribute::SRC,
        Attribute::SRCSET,
        Attribute::SIZES,
        Attribute::TITLE,
    ];

    /**
     * List of attributes to inline onto an SSR'ed image.
     *
     * @var string[]
     */
    const ATTRIBUTES_TO_INLINE = [
        Attribute::OBJECT_FIT,
        Attribute::OBJECT_POSITION,
    ];

    /**
     * List of AMP elements that are an embed that can have a placeholder.
     *
     * The array has values assigned so that we can do a fast hash lookup on the element name.
     *
     * @var bool[]
     */
    const AMP_EMBEDS = [
        Extension::AD            => true,
        Extension::ANIM          => true,
        Extension::BRIGHTCOVE    => true,
        Extension::DAILYMOTION   => true,
        Extension::FACEBOOK      => true,
        Extension::GFYCAT        => true,
        Extension::IFRAME        => true,
        Extension::IMGUR         => true,
        Extension::INSTAGRAM     => true,
        Extension::PINTEREST     => true,
        Extension::REDDIT        => true,
        Extension::TWITTER       => true,
        Extension::VIDEO         => true,
        Extension::VIDEO_IFRAME  => true,
        Extension::VIMEO         => true,
        Extension::WISTIA_PLAYER => true,
        Extension::YOUTUBE       => true,
    ];

    /**
     * XPath query to relatively fetch all noscript > img elements.
     *
     * @var string
     */
    const NOSCRIPT_IMG_XPATH_QUERY = './noscript/img';

    /**
     * XPath query to relatively fetch all noscript > img[fetchpriority="high"] elements.
     *
     * @var string
     */
    const NOSCRIPT_IMG_FETCHPRIORITY_HIGH_XPATH_QUERY = './noscript/img[@fetchpriority="high"]';

    /**
     * Regular expression pattern to extract the URL from a CSS background-image property.
     *
     * @var string
     */
    const CSS_BACKGROUND_IMAGE_URL_REGEX_PATTERN = '/background-image\s*:\s*url\(\s*(?<url>[^)]*\s*)/i';

    /**
     * Configuration store to use.
     *
     * @var TransformerConfiguration
     */
    private $configuration;

    /**
     * Reference node to attach preload links to.
     *
     * @var Element|null
     */
    private $preloadReferenceNode;

    /**
     * Inline style backup attribute that stores inline styles that are being moved to <style amp-custom>.
     *
     * An empty string signifies that no inline style backup is available.
     *
     * @var string
     */
    private $inlineStyleBackupAttribute;

    /**
     * Instantiate a PreloadHeroImage object.
     *
     * @param TransformerConfiguration $configuration Configuration store to use.
     */
    public function __construct(TransformerConfiguration $configuration)
    {
        $this->configuration = $configuration;
    }

    /**
     * Apply transformations to the provided DOM document.
     *
     * @param Document        $document DOM document to apply the transformations to.
     * @param ErrorCollection $errors   Collection of errors that are collected during transformation.
     * @return void
     */
    public function transform(Document $document, ErrorCollection $errors)
    {
        if ($this->configuration->get(OptimizeHeroImagesConfiguration::OPTIMIZE_HERO_IMAGES) === false) {
            return;
        }

        $maxHeroImageCount = $this->configuration->get(OptimizeHeroImagesConfiguration::MAX_HERO_IMAGE_COUNT);

        $this->inlineStyleBackupAttribute = $this->configuration->get(
            OptimizeHeroImagesConfiguration::INLINE_STYLE_BACKUP_ATTRIBUTE
        );

        $heroImages     = $this->findHeroImages($document, $maxHeroImageCount);
        $heroImageCount = count($heroImages);
        if ($heroImageCount > $maxHeroImageCount) {
            $errors->add(Error\TooManyHeroImages::whenPastMaximum());
            $heroImageCount = $maxHeroImageCount;
        }

        for ($index = 0; $index < $heroImageCount; $index++) {
            $this->removeLazyLoading($heroImages[$index]);
            $this->generatePreload($heroImages[$index], $document, $errors);
            $this->generateImg($heroImages[$index], $document);
        }
    }

    /**
     * Find the hero images to optimize.
     *
     * @param Document $document          Document to look for hero images in.
     * @param int      $maxHeroImageCount Maximum number of hero images to accept.
     * @return HeroImage[] Array of hero images to optimize.
     */
    private function findHeroImages(Document $document, $maxHeroImageCount)
    {
        $heroImages          = [];
        $heroImageCandidates = [];
        $heroImageFallback   = null;
        $seenParagraphCount  = 0;
        $node                = $document->body;

        while ($node !== null) {
            if (
                ! $node instanceof Element
                ||
                ( $node->parentNode instanceof Element && $node->parentNode->tagName === Tag::NOSCRIPT )
            ) {
                $node = NodeWalker::nextNode($node);
                continue;
            }

            if ($node->tagName === Tag::P) {
                $seenParagraphCount++;
            }

            if ($node->tagName === Extension::IMG && ! $node->hasAttribute(Attribute::DATA_HERO)) {
                $highFetchpriorityImage = $document->xpath->query(
                    self::NOSCRIPT_IMG_FETCHPRIORITY_HIGH_XPATH_QUERY,
                    $node
                )->item(0);

                if ($highFetchpriorityImage instanceof Element) {
                    $node->appendChild($document->createAttribute(Attribute::DATA_HERO));
                }
            }

            $heroImage = $this->detectImageWithAttribute($node, Attribute::DATA_HERO);
            if ($heroImage) {
                $heroImages[] = $heroImage;
            } elseif (count($heroImageCandidates) < $maxHeroImageCount) {
                $heroImageCandidate = $this->detectImageWithAttribute($node, Attribute::DATA_HERO_CANDIDATE);
                if ($heroImageCandidate) {
                    $heroImageCandidates[] = $heroImageCandidate;
                } elseif ($seenParagraphCount < 2 && ! $heroImageFallback) {
                    $heroImageFallback = $this->detectPossibleHeroImageFallbacks($node);
                }
            }

            if (Amp::isTemplate($node)) {
                // Ignore images inside templates.
                $node = NodeWalker::skipNodeAndChildren($node);
            } else {
                $node = NodeWalker::nextNode($node);
            }
        }

        if (count($heroImages) > 0) {
            return $heroImages;
        }

        // Since there were no hero images, use the hero image candidates instead.
        $heroImages = array_slice($heroImageCandidates, 0, $maxHeroImageCount);

        if (count($heroImages) < 1 && $heroImageFallback) {
            $heroImages[] = $heroImageFallback;
        }

        return $heroImages;
    }

    /**
     * Detect a hero image with a specific attribute.
     *
     * This is used for detecting an image marked with data-hero or data-hero-candidate
     *
     * @param Element $element   Element to detect for.
     * @param string  $attribute Attribute to look for.
     * @return HeroImage|null Detected hero image, or null if none detected.
     * @throws FailedToParseUrl Exception when the URL or Base URL is malformed.
     */
    private function detectImageWithAttribute(Element $element, $attribute)
    {
        if (!$element->hasAttribute($attribute)) {
            return null;
        }

        $src = $element->getAttribute(Attribute::SRC);
        if ($element->tagName === Extension::IMG && (new Url($src))->isValidNonDataUrl()) {
            return new HeroImage(
                $src,
                $element->getAttribute(Attribute::MEDIA),
                $element->getAttribute(Attribute::SRCSET),
                $element
            );
        }

        if ($this->isAmpEmbed($element)) {
            $placeholderImage = $this->getPlaceholderImage($element);
            if (null !== $placeholderImage) {
                return $placeholderImage;
            }
        }

        $cssBackgroundImage = $this->getCssBackgroundImageUrl($element);

        if ((new Url($cssBackgroundImage))->isValidNonDataUrl()) {
            return new HeroImage(
                $cssBackgroundImage,
                $element->getAttribute(Attribute::MEDIA),
                '',
                $element
            );
        }

        return null;
    }

    /**
     * Detect a possible hero image fallback.
     *
     * The hero image here can come from one of <amp-img>, <amp-video>, <amp-iframe>, <amp-video-iframe>.
     *
     * @param Element $element Element to detect for.
     * @return HeroImage|null Detected hero image fallback, or null if none detected.
     */
    private function detectPossibleHeroImageFallbacks(Element $element)
    {
        if (
            $element->hasAttribute(Attribute::LAYOUT)
            && $element->getAttribute(Attribute::LAYOUT) === Layout::NODISPLAY
        ) {
            return null;
        }

        if ($element->tagName === Extension::IMG || $element->tagName === Tag::IMG) {
            return $this->detectPossibleHeroImageFallbackForAmpImg($element);
        }

        if ($element->tagName === Extension::VIDEO) {
            return $this->detectPossibleHeroImageFallbackForPosterImage($element);
        }

        if ($this->isAmpEmbed($element)) {
            return $this->detectPossibleHeroImageFallbackForPlaceholderImage($element);
        }

        return null;
    }

    /**
     * Detect a possible hero image fallback from an <amp-img> element.
     *
     * @param Element $element Element to detect for.
     * @return HeroImage|null Detected hero image fallback, or null if none detected.
     */
    private function detectPossibleHeroImageFallbackForAmpImg(Element $element)
    {
        $src = $element->getAttribute(Attribute::SRC);

        if (empty($src)) {
            return null;
        }

        if (! (new Url($src))->isValidNonDataUrl()) {
            return null;
        }

        if ((new ImageDimensions($element))->isTiny()) {
            return null;
        }

        $srcset = $element->getAttribute(Attribute::SRCSET);
        $media  = $element->getAttribute(Attribute::MEDIA);

        return new HeroImage($src, $media, $srcset, $element);
    }

    /**
     * Detect a possible hero image fallback from a video's poster (= placeholder) image.
     *
     * @param Element $element Element to detect for.
     * @return HeroImage|null Detected hero image fallback, or null if none detected.
     */
    private function detectPossibleHeroImageFallbackForPosterImage(Element $element)
    {
        $poster = $element->getAttribute(Attribute::POSTER);

        if (! $poster) {
            return null;
        }

        if (! (new Url($poster))->isValidNonDataUrl()) {
            return null;
        }

        if ((new ImageDimensions($element))->isTiny()) {
            return null;
        }

        $media = $element->getAttribute(Attribute::MEDIA);

        return new HeroImage($poster, $media, '');
    }

    /**
     * Detect a possible hero image fallback from a placeholder image.
     *
     * @param Element $element Element to detect for.
     * @return HeroImage|null Detected hero image fallback, or null if none detected.
     */
    private function detectPossibleHeroImageFallbackForPlaceholderImage(Element $element)
    {
        // The placeholder will be a child node of the element.
        if (! $element->hasChildNodes()) {
            return null;
        }

        // Don't bother if the element is too small.
        if ((new ImageDimensions($element))->isTiny()) {
            return null;
        }

        return $this->getPlaceholderImage($element);
    }

    /**
     * Get the placeholder image for a given element.
     *
     * @param Element $element Element to check the placeholder image for.
     * @return HeroImage|null Placeholder image to use or null if none found.
     */
    private function getPlaceholderImage(Element $element)
    {
        foreach ($element->childNodes as $childNode) {
            if (
                ! $childNode instanceof Element
                || ! $childNode->hasAttribute(Attribute::PLACEHOLDER)
            ) {
                continue;
            }

            $placeholder = $childNode;

            while ($placeholder !== null) {
                if (! $placeholder instanceof Element) {
                    $placeholder = NodeWalker::nextNode($placeholder);
                    continue;
                }

                if (
                    $placeholder->tagName === Extension::IMG
                    || $placeholder->tagName === Tag::IMG
                ) {
                    // Found valid candidate for placeholder image.
                    break;
                }

                if (Amp::isTemplate($placeholder)) {
                    // Ignore images inside templates.
                    $placeholder = NodeWalker::skipNodeAndChildren($placeholder);
                } else {
                    $placeholder = NodeWalker::nextNode($placeholder);
                }
            }

            if (!$placeholder instanceof Element) {
                break;
            }

            $src = $placeholder->getAttribute(Attribute::SRC);

            if (! (new Url($src))->isValidNonDataUrl()) {
                break;
            }

            return new HeroImage(
                $src,
                $element->getAttribute(Attribute::MEDIA),
                $placeholder->getAttribute(Attribute::SRCSET),
                $placeholder
            );
        }

        return null;
    }

    /**
     * Remove the lazy loading from the hero image.
     *
     * @param HeroImage $heroImage Hero image to remove the lazy loading for.
     */
    private function removeLazyLoading(HeroImage $heroImage)
    {
        $img = $heroImage->getAmpImg();

        if (
            $img && $img->getAttribute(Attribute::LOADING) === 'lazy'
            &&
            ! $img->hasAttribute(Attribute::DATA_AMP_STORY_PLAYER_POSTER_IMG)
        ) {
            $img->removeAttribute(Attribute::LOADING);
        }
    }

    /**
     * Generate the preload link for a given hero image.
     *
     * @param HeroImage       $heroImage Hero image to generate the preload link for.
     * @param Document        $document  Document to generate the preload link in.
     * @param ErrorCollection $errors    Collection of errors that are collected during transformation.
     */
    private function generatePreload(HeroImage $heroImage, Document $document, ErrorCollection $errors)
    {
        if (empty($heroImage->getMedia())) {
            // We can only safely preload a hero image if there's a media attribute
            // as we can't detect whether it's hidden on certain viewport sizes otherwise.
            return;
        }

        if ($heroImage->getSrcset() && ! $this->supportsSrcset()) {
            $errors->add(Error\CannotPreloadImage::fromImageWithSrcsetAttribute($heroImage->getAmpImg()));
            return;
        }

        if ($this->hasExistingImagePreload($document, $heroImage->getSrc())) {
            return;
        }

        if ($this->preloadReferenceNode === null) {
            $this->preloadReferenceNode = $document->viewport;
        }

        $preload = $document->createElement(Tag::LINK);
        $preload->setAttribute(Attribute::REL, Attribute::REL_PRELOAD);
        $preload->setAttribute(Attribute::HREF, $heroImage->getSrc());
        $preload->setAttribute(Attribute::AS_, RequestDestination::IMAGE);
        $preload->appendChild($document->createAttribute(Attribute::DATA_HERO));
        if ($heroImage->getSrcset()) {
            $preload->setAttribute(Attribute::IMAGESRCSET, $heroImage->getSrcset());
            $img = $heroImage->getAmpImg();
            if ($img && $img->hasAttribute(Attribute::SIZES)) {
                $preload->setAttribute(Attribute::IMAGESIZES, $img->getAttribute(Attribute::SIZES));
            }
        }

        $preload->setAttribute(Attribute::MEDIA, $heroImage->getMedia());

        if ($this->preloadReferenceNode) {
            $this->preloadReferenceNode->parentNode->insertBefore(
                $preload,
                $this->preloadReferenceNode->nextSibling
            );
        } else {
            $document->head->appendChild($preload);
        }

        $this->preloadReferenceNode = $preload;
    }

    /**
     * Generate the SSR image element for the hero image.
     *
     * @param HeroImage $heroImage Hero image to generate the SSR image element for.
     * @param Document  $document  Document in which to generate the SSR image element in.
     */
    private function generateImg(HeroImage $heroImage, Document $document)
    {
        $element = $heroImage->getAmpImg();

        if (! $element || $element->tagName !== Extension::IMG) {
            return;
        }

        $imgElement = $document->createElement(Tag::IMG);
        $imgElement->setAttribute(Attribute::CLASS_, self::SSR_IMAGE_CLASS);
        $imgElement->setAttribute(Attribute::DECODING, 'async');

        // If the image was detected as hero image candidate (and thus lacks an explicit data-hero), mark it as a hero
        // and add loading=lazy to guard against making the page performance even worse by eagerly loading an image
        // outside the viewport. But if there is a noscript > img then preserve its original loading attribute.
        $noscript_img = $document->xpath->query(self::NOSCRIPT_IMG_XPATH_QUERY, $element)->item(0);
        if ($noscript_img instanceof Element) {
            // Preserve the original loading attribute from the noscript fallback img.
            if ($noscript_img->hasAttribute(Attribute::LOADING)) {
                $imgElement->setAttribute(Attribute::LOADING, $noscript_img->getAttribute(Attribute::LOADING));
            }

            // Preserve the original fetchpriority attribute from the noscript fallback img.
            if ($noscript_img->hasAttribute(Attribute::FETCHPRIORITY)) {
                $imgElement->setAttribute(
                    Attribute::FETCHPRIORITY,
                    $noscript_img->getAttribute(Attribute::FETCHPRIORITY)
                );
            }

            // Remove any noscript>img when an amp-img is pre-rendered.
            $noscript_img->parentNode->parentNode->removeChild($noscript_img->parentNode);
        } elseif (! $this->isMarkedAsHeroImage($element)) {
            $imgElement->setAttribute(Attribute::LOADING, 'lazy');
        }

        if (!$element->hasAttribute(Attribute::DATA_HERO)) {
            $element->appendChild($document->createAttribute(Attribute::DATA_HERO));
        }

        foreach (self::ATTRIBUTES_TO_COPY as $attribute) {
            if ($element->hasAttribute($attribute)) {
                $imgElement->setAttribute($attribute, $element->getAttribute($attribute));
            }
        }

        foreach (self::ATTRIBUTES_TO_INLINE as $attribute) {
            if ($element->hasAttribute($attribute)) {
                $value = $element->getAttribute($attribute);
                $style = empty($value) ? '' : "{$attribute}:{$element->getAttribute($attribute)}";
                $imgElement->addInlineStyle($style);
            }
        }

        $element->appendChild($document->createAttribute(Attribute::I_AMPHTML_SSR));

        $element->appendChild($imgElement);
    }

    /**
     * Check whether an existing preload link exists for a given src.
     *
     * @param Document $document Document in which to check for an existing preload.
     * @param string   $src      Preload URL to look for.
     * @return bool Whether an existing preload already exists.
     */
    private function hasExistingImagePreload(Document $document, $src)
    {
        foreach ($document->head->childNodes as $node) {
            if (! $node instanceof Element) {
                continue;
            }

            if ($node->getAttribute(Attribute::REL) !== Attribute::REL_PRELOAD) {
                continue;
            }

            if ($node->getAttribute(Attribute::AS_) !== RequestDestination::IMAGE) {
                continue;
            }

            if ($node->getAttribute(Attribute::HREF) === $src) {
                return true;
            }
        }

        return false;
    }

    /**
     * Check whether a given element is an AMP embed.
     *
     * @param Element $element Element to check.
     * @return bool Whether the given element is an AMP embed.
     */
    private function isAmpEmbed(Element $element)
    {
        return array_key_exists($element->tagName, self::AMP_EMBEDS);
    }

    /**
     * Get the URL of the CSS background-image property.
     *
     * This falls back to the data-amp-original-style attribute if the inline
     * style was already extracted by the CSS tree-shaking.
     *
     * @param Element $element Element to detect for.
     * @return string URL of the background image, or an empty string if not found.
     */
    private function getCssBackgroundImageUrl(Element $element)
    {
        $matches = [];

        if (
            preg_match(
                self::CSS_BACKGROUND_IMAGE_URL_REGEX_PATTERN,
                $element->getAttribute(Attribute::STYLE),
                $matches
            )
        ) {
            return trim($matches['url'], '\'" ');
        }

        if (
            !empty($this->inlineStyleBackupAttribute)
            && preg_match(
                self::CSS_BACKGROUND_IMAGE_URL_REGEX_PATTERN,
                $element->getAttribute($this->inlineStyleBackupAttribute),
                $matches
            )
        ) {
            return trim($matches['url'], '\'" ');
        }

        return '';
    }

    /**
     * Whether srcset preloading is supported.
     *
     * @return bool
     */
    private function supportsSrcset()
    {
        return $this->configuration->get(OptimizeHeroImagesConfiguration::PRELOAD_SRCSET);
    }

    /**
     * Check if an element or its ancestors is marked as a hero image.
     *
     * @param Element $element Element to check.
     * @return bool Whether the element or one of its ancestors is marked as a hero image.
     */
    private function isMarkedAsHeroImage(Element $element)
    {
        while ($element) {
            if (!$element instanceof Element) {
                $element = $element->parentNode;
                continue;
            }

            if ($element->hasAttribute(Attribute::DATA_HERO)) {
                return true;
            }

            if ($element->tagName === Tag::BODY || $element->tagName === Tag::HTML) {
                return false;
            }

            $element = $element->parentNode;
        }

        return false;
    }
}
PK.3Y
ڱ���Wbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Transformer/OptimizeViewport.php<?php

namespace AmpProject\Optimizer\Transformer;

use AmpProject\Html\Attribute;
use AmpProject\Dom\Document;
use AmpProject\Dom\Element;
use AmpProject\Optimizer\Configuration\OptimizeViewportConfiguration;
use AmpProject\Optimizer\ErrorCollection;
use AmpProject\Optimizer\Transformer;
use AmpProject\Optimizer\TransformerConfiguration;
use AmpProject\Html\Tag;

/**
 * OptimizeViewport - Transformer that normalizes and optimizes the viewport meta tag.
 *
 * This transformer will:
 * * default to 'width=device-width' when the viewport is missing, which is the bare minimum that AMP requires;
 * * extract properties from multiple viewport tags and merge them into a single tag;
 * * remove the initial-scale=1 attribute if applicable to avoid unnecessary tap delay.
 *
 * @package ampproject/amp-toolbox
 */
final class OptimizeViewport implements Transformer
{
    /**
     * Viewport settings to use for AMP markup.
     *
     * @var string
     */
    const AMP_VIEWPORT = 'width=device-width';

    /**
     * The viewport content property that controls the zoom level when the page is first loaded.
     *
     * @var string
     */
    const INITIAL_SCALE = 'initial-scale';

    /**
     * Xpath query to fetch the viewport meta tags.
     *
     * This transformer does not make use of the `Dom\Document::$viewport` helper, as it needs to
     * deal properly with multiple viewport tags as well.
     *
     * @var string
     */
    const XPATH_QUERY = './/meta[@name="viewport"]';

    /**
     * Configuration store to use.
     *
     * @var TransformerConfiguration
     */
    private $configuration;

    /**
     * Instantiate a MinifyHtml object.
     *
     * @param TransformerConfiguration $configuration Configuration store to use.
     */
    public function __construct(TransformerConfiguration $configuration)
    {
        $this->configuration = $configuration;
    }

    /**
     * Apply transformations to the provided DOM document.
     *
     * @param Document        $document DOM document to apply the transformations to.
     * @param ErrorCollection $errors   Collection of errors that are collected during transformation.
     */
    public function transform(Document $document, ErrorCollection $errors)
    {
        $viewport = '';

        $metaTags = $document->xpath->query(self::XPATH_QUERY);

        if (! $metaTags->length) {
            $viewport = self::AMP_VIEWPORT;
        } else {
            // Merge one or more meta[name=viewport] tags into one.
            $parsedRules = [];

            foreach ($metaTags as $metaTag) {
                $propertyPairs = explode(',', $metaTag->getAttribute('content'));

                foreach ($propertyPairs as $propertyPair) {
                    $explodedPair = explode('=', $propertyPair, 2);
                    if (isset($explodedPair[1])) {
                        $parsedRules[ trim($explodedPair[0]) ] = trim($explodedPair[1]);
                    }
                }

                $metaTag->parentNode->removeChild($metaTag);
            }

            // Remove initial-scale=1 to leave just width=device-width in order to avoid a tap delay that hurts FID.
            if (
                $this->configuration->get(OptimizeViewportConfiguration::REMOVE_INITIAL_SCALE_VIEWPORT_PROPERTY)
                && isset($parsedRules[self::INITIAL_SCALE])
                && abs((float) $parsedRules[self::INITIAL_SCALE] - 1.0) < 0.0001
            ) {
                unset($parsedRules[self::INITIAL_SCALE]);
            }

            $viewport = implode(
                ',',
                array_map(
                    static function ($ruleName) use ($parsedRules) {
                        return "{$ruleName}={$parsedRules[$ruleName]}";
                    },
                    array_keys($parsedRules)
                )
            );
        }

        $element = $this->createViewportElement($document, $viewport);
        $document->head->appendChild($element);
    }

    /**
     * Create a new meta tag for the viewport setting.
     *
     * @param Document $document DOM document to apply the transformations to.
     * @param string   $viewport Viewport setting to use.
     * @return Element New meta tag with requested viewport setting.
     */
    protected function createViewportElement(Document $document, $viewport)
    {
        $element = $document->createElement(Tag::META);
        $element->setAttribute(Attribute::NAME, Attribute::VIEWPORT);
        $element->setAttribute(Attribute::CONTENT, $viewport);

        return $element;
    }
}
PK.3Y*�D�--Wbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Transformer/PreloadHeroImage.php<?php

namespace AmpProject\Optimizer\Transformer;

use AmpProject\Html\Attribute;
use AmpProject\Dom\Document;
use AmpProject\Extension;
use AmpProject\Optimizer\Configuration\OptimizeHeroImagesConfiguration;
use AmpProject\Optimizer\Configuration\PreloadHeroImageConfiguration;
use AmpProject\Optimizer\Error;
use AmpProject\Optimizer\ErrorCollection;
use AmpProject\Optimizer\Transformer;
use AmpProject\Optimizer\TransformerConfiguration;

/**
 * PreloadHeroImage - this transformer optimizes image rendering times for hero images. For hero images it will:
 *
 * 1. Inject a preload hint (if possible)
 * 2. Generate an img tag enabling the browser to render the image without the AMP runtime being loaded.
 *
 * Hero images are either identified automatically or can be explicitly defined by adding an `data-hero` attribute to
 * the element.
 *
 * This transformer supports the following options:
 *
 * * `preloadHeroImage`: [true|false] - enables or disables hero image preloading. The default is `true`.
 *
 * This is ported from the NodeJS optimizer.
 *
 * @version 3429af9d91e2c9efe1af85757499e5a308755f5f
 * @link    https://github.com/ampproject/amp-toolbox/blob/3429af9d91e2c9efe1af85757499e5a308755f5f/packages/optimizer/lib/transformers/PreloadHeroImage.js
 *
 * @deprecated since version 0.6.0
 * @see \AmpProject\Optimizer\Transformer\OptimizeHeroImages
 *
 * @package ampproject/amp-toolbox
 */
final class PreloadHeroImage implements Transformer
{
    /**
     * Class(es) to apply to a serverside-rendered image element.
     *
     * @var string
     */
    const SSR_IMAGE_CLASS = 'i-amphtml-fill-content i-amphtml-replaced-content';

    /**
     * List of attributes to copy onto an SSR'ed image.
     *
     * @var string[]
     */
    const ATTRIBUTES_TO_COPY = [
        Attribute::ALT,
        Attribute::ATTRIBUTION,
        Attribute::REFERRERPOLICY,
        Attribute::SRC,
        Attribute::SRCSET,
        Attribute::SIZES,
        Attribute::TITLE,
    ];

    /**
     * List of attributes to inline onto an SSR'ed image.
     *
     * @var string[]
     */
    const ATTRIBUTES_TO_INLINE = [
        Attribute::OBJECT_FIT,
        Attribute::OBJECT_POSITION,
    ];

    /**
     * Maximum number of hero images defined via data-hero attribute.
     *
     * @var int
     */
    const DATA_HERO_MAX = 2;

    /**
     * List of AMP elements that are an embed that can have a placeholder.
     *
     * The array has values assigned so that we can do a fast hash lookup on the element name.
     *
     * @var bool[]
     */
    const AMP_EMBEDS = [
        Extension::AD            => true,
        Extension::ANIM          => true,
        Extension::BRIGHTCOVE    => true,
        Extension::DAILYMOTION   => true,
        Extension::FACEBOOK      => true,
        Extension::GFYCAT        => true,
        Extension::IFRAME        => true,
        Extension::IMGUR         => true,
        Extension::INSTAGRAM     => true,
        Extension::PINTEREST     => true,
        Extension::REDDIT        => true,
        Extension::TWITTER       => true,
        Extension::VIDEO         => true,
        Extension::VIDEO_IFRAME  => true,
        Extension::VIMEO         => true,
        Extension::WISTIA_PLAYER => true,
        Extension::YOUTUBE       => true,
    ];

    /**
     * XPath query to relatively fetch all noscript > img elements.
     *
     * @var string
     */
    const NOSCRIPT_IMG_XPATH_QUERY = './noscript/img';

    /**
     * Regular expression pattern to extract the URL from a CSS background-image property.
     *
     * @var string
     */
    const CSS_BACKGROUND_IMAGE_URL_REGEX_PATTERN = '/background-image\s*:\s*url\(\s*(?<url>[^)]*\s*)/i';

    /**
     * Configuration store to use.
     *
     * @var TransformerConfiguration
     */
    private $configuration;

    /**
     * Instantiate a PreloadHeroImage object.
     *
     * @param TransformerConfiguration $configuration Configuration store to use.
     */
    public function __construct(TransformerConfiguration $configuration)
    {
        $this->configuration = $configuration;
    }

    /**
     * Apply transformations to the provided DOM document.
     *
     * @param Document        $document DOM document to apply the transformations to.
     * @param ErrorCollection $errors   Collection of errors that are collected during transformation.
     * @return void
     */
    public function transform(Document $document, ErrorCollection $errors)
    {
        $errors->add(Error\DeprecatedTransformer::withReplacement(self::class, OptimizeHeroImages::class));

        if ($this->configuration->get(PreloadHeroImageConfiguration::PRELOAD_HERO_IMAGE) === false) {
            return;
        }

        $inlineStyleBackupAttribute = $this->configuration->get(
            PreloadHeroImageConfiguration::INLINE_STYLE_BACKUP_ATTRIBUTE
        );

        $preloadSrcset = $this->configuration->get(PreloadHeroImageConfiguration::PRELOAD_SRCSET);

        $configuration = new OptimizeHeroImagesConfiguration(
            [
                OptimizeHeroImagesConfiguration::INLINE_STYLE_BACKUP_ATTRIBUTE => $inlineStyleBackupAttribute,
                OptimizeHeroImagesConfiguration::PRELOAD_SRCSET                => $preloadSrcset,
            ]
        );

        $transformer = new OptimizeHeroImages($configuration);
        $transformer->transform($document, $errors);
    }
}
PK.3Y�T�1�-�-Rbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Transformer/ReorderHead.php<?php

namespace AmpProject\Optimizer\Transformer;

use AmpProject\Amp;
use AmpProject\Html\Attribute;
use AmpProject\Dom\Document;
use AmpProject\Dom\Element;
use AmpProject\Optimizer\ErrorCollection;
use AmpProject\Optimizer\Transformer;
use AmpProject\Html\Tag;
use DOMNode;
use DOMNodeList;

/**
 * Transformer applying the head reordering transformations to the HTML input.
 *
 * ReorderHead reorders the children of <head>. Specifically, it
 * orders the <head> like so:
 * (0) <meta charset> tag
 * (1) <style amp-runtime> (inserted by AmpRuntimeCss transformer)
 * (2) remaining <meta> tags (those other than <meta charset>)
 * (3) AMP runtime .js <script> tag
 * (4) AMP viewer runtime .js <script>
 * (5) <script> tags that are render delaying
 * (6) <script> tags for remaining extensions
 * (7) <link> tag for favicons
 * (8) <link> tag for resource hints
 * (9) <link rel=stylesheet> tags before <style amp-custom>
 * (10) <style amp-custom>
 * (11) any other tags allowed in <head>
 * (12) AMP boilerplate (first style amp-boilerplate, then noscript)
 *
 * This is ported from the NodeJS optimizer while verifying against the Go version.
 *
 * NodeJS:
 * @version c92d6023ea4c9edadff593742a992da2b400a75d
 * @link    https://github.com/ampproject/amp-toolbox/blob/c92d6023ea4c9edadff593742a992da2b400a75d/packages/optimizer/lib/transformers/ReorderHeadTransformer.js
 *
 * Go:
 * @version ea0959046c179953de43077eafaeb720f9b20bdf
 * @link    https://github.com/ampproject/amppackager/blob/ea0959046c179953de43077eafaeb720f9b20bdf/transformer/transformers/reorderhead.go
 *
 * @package ampproject/amp-toolbox
 */
final class ReorderHead implements Transformer
{
    /**
     * Regular expression pattern to match resource hints pointing to an AMP resource.
     */
    const AMP_RESOURCE_HINT_SRC_PATTERN = '#(^|[\b/])cdn\.ampproject\.org($|[\b/])#i';

    /*
     * Different categories of <head> tags to track and reorder.
     */
    // phpcs:disable Squiz.Commenting.VariableComment.Missing
    private $ampResourceHints                  = [];
    private $linkIcons                         = [];
    private $linkStyleAmpRuntime               = null;
    private $linkStylesheetsBeforeAmpCustom    = [];
    private $metaCharset                       = null;
    private $metaViewport                      = null;
    private $metaOther                         = [];
    private $noscript                          = null;
    private $others                            = [];
    private $resourceHintLinks                 = [];
    private $scriptAmpRuntime                  = [];
    private $scriptAmpViewer                   = [];
    private $scriptNonRenderDelayingExtensions = [];
    private $scriptRenderDelayingExtensions    = [];
    private $styleAmpBoilerplate               = null;
    private $styleAmpCustom                    = null;
    private $styleAmpRuntime                   = null;

    /**
     * Apply transformations to the provided DOM document.
     *
     * @param Document        $document DOM document to apply the transformations to.
     * @param ErrorCollection $errors   Collection of errors that are collected during transformation.
     * @return void
     */
    public function transform(Document $document, ErrorCollection $errors)
    {
        $nodes = $document->head->childNodes;

        if (! $nodes instanceof DOMNodeList || $nodes->length === 0) {
            return;
        }

        while ($document->head->hasChildNodes()) {
            $node = $document->head->removeChild($document->head->firstChild);
            $this->registerNode($node);
        }

        $this->appendToHead($document);
    }

    /**
     * Register a given node in the appropriate category.
     *
     * @param DOMNode $node Node to register.
     */
    private function registerNode(DOMNode $node)
    {
        if (! $node instanceof Element) {
            if ($node->nodeType === XML_TEXT_NODE) {
                $nodeContent = trim($node->textContent);
                if (empty($nodeContent)) {
                    return;
                }
            }
            $this->others[] = $node;
            return;
        }

        switch ($node->tagName) {
            case Tag::META:
                $this->registerMeta($node);
                break;
            case Tag::SCRIPT:
                $this->registerScript($node);
                break;
            case Tag::STYLE:
                $this->registerStyle($node);
                break;
            case Tag::LINK:
                $this->registerLink($node);
                break;
            case Tag::NOSCRIPT:
                $this->noscript = $node; // @todo Make this an array.
                break;
            default:
                $this->others[] = $node;
        }
    }

    /**
     * Register a <meta> node.
     *
     * @param Element $node Node to register.
     */
    private function registerMeta(Element $node)
    {
        if ($node->hasAttribute(Attribute::CHARSET)) {
            $this->metaCharset = $node;
            return;
        }

        if ($node->getAttribute(Attribute::NAME) === Attribute::VIEWPORT) {
            $this->metaViewport = $node;
            return;
        }

        $this->metaOther[] = $node;
    }

    /**
     * Register a <script> node.
     *
     * @param Element $node Node to register.
     */
    private function registerScript(Element $node)
    {
        $nomodule = (int)$node->hasAttribute('nomodule');

        if (Amp::isRuntimeScript($node)) {
            $this->scriptAmpRuntime[$nomodule] = $node;
            return;
        }

        if (Amp::isViewerScript($node)) {
            $this->scriptAmpViewer[$nomodule] = $node;
            return;
        }

        if ($node->hasAttribute(Attribute::CUSTOM_ELEMENT)) {
            $name = $node->getAttribute(Attribute::CUSTOM_ELEMENT);
            if (Amp::isRenderDelayingExtension($node)) {
                $this->scriptRenderDelayingExtensions[$name][$nomodule] = $node;
                return;
            }
            $this->scriptNonRenderDelayingExtensions[$name][$nomodule] = $node;
            return;
        }

        if ($node->hasAttribute(Attribute::CUSTOM_TEMPLATE)) {
            $name = $node->getAttribute(Attribute::CUSTOM_TEMPLATE);
            $this->scriptNonRenderDelayingExtensions[$name][$nomodule] = $node;
            return;
        }

        if ($node->hasAttribute(Attribute::HOST_SERVICE)) {
            $name = $node->getAttribute(Attribute::HOST_SERVICE);
            $this->scriptNonRenderDelayingExtensions[$name][$nomodule] = $node;
            return;
        }

        $this->others[] = $node;
    }

    /**
     * Register a <style> node.
     *
     * @param Element $node Node to register.
     */
    private function registerStyle(Element $node)
    {
        if ($node->hasAttribute(Attribute::AMP_RUNTIME)) {
            $this->styleAmpRuntime = $node;
            return;
        }

        if ($node->hasAttribute(Attribute::AMP_CUSTOM)) {
            $this->styleAmpCustom = $node;
            return;
        }

        if (
            $node->hasAttribute(Attribute::AMP_BOILERPLATE)
            || $node->hasAttribute(Attribute::AMP4ADS_BOILERPLATE)
        ) {
            $this->styleAmpBoilerplate = $node;
            return;
        }

        $this->others[] = $node;
    }

    /**
     * Register a <link> node.
     *
     * @param Element $node Node to register.
     */
    private function registerLink(Element $node)
    {
        $rel = $node->getAttribute(Attribute::REL);

        if ($this->containsWord($rel, Attribute::REL_STYLESHEET)) {
            $href = $node->getAttribute(Attribute::HREF);
            if ($href && substr($href, -7) === '/v0.css') {
                $this->linkStyleAmpRuntime = $node;
                return;
            }
            if (! $this->styleAmpCustom) {
                // We haven't seen amp-custom yet.
                $this->linkStylesheetsBeforeAmpCustom[] = $node;
                return;
            }
        }

        if ($this->containsWord($rel, Attribute::REL_ICON)) {
            $this->linkIcons[] = $node;
            return;
        }

        if (
            $this->containsWord($rel, Attribute::REL_PRELOAD)
            || $this->containsWord($rel, Attribute::REL_PREFETCH)
            || $this->containsWord($rel, Attribute::REL_DNS_PREFETCH)
            || $this->containsWord($rel, Attribute::REL_PRECONNECT)
            || $this->containsWord($rel, Attribute::REL_MODULEPRELOAD)
        ) {
            if ($this->isHintForAmp($node)) {
                $this->ampResourceHints[] = $node;
            } else {
                $this->resourceHintLinks[] = $node;
            }
            return;
        }

        $this->others[] = $node;
    }

    /**
     * Append all registered nodes to the <head> node.
     *
     * @param Document $document Document to append the nodes to.
     */
    private function appendToHead(Document $document)
    {
        $categories = [
            'metaCharset',
            'metaViewport',
            'ampResourceHints',
            'linkStyleAmpRuntime',
            'styleAmpRuntime',
            'metaOther',
            'resourceHintLinks',
            'scriptAmpRuntime',
            'scriptAmpViewer',
            'scriptRenderDelayingExtensions',
            'scriptNonRenderDelayingExtensions',
            'linkIcons',
            'linkStylesheetsBeforeAmpCustom',
            'styleAmpCustom',
            'others',
            'styleAmpBoilerplate',
            'noscript',
        ];

        foreach ($categories as $category) {
            if ($this->$category === null) {
                continue;
            }

            if ($this->$category instanceof DOMNode) {
                $node = $document->importNode($this->$category);
                $document->head->appendChild($node);
            } elseif (is_array($this->$category)) {
                $this->recursiveKeySort($this->$category);
                array_walk_recursive(
                    $this->$category,
                    static function (DOMNode $node) use ($document) {
                        $node = $document->importNode($node);
                        $document->head->appendChild($node);
                    }
                );
            }
        }
    }

    /**
     * Sort array keys recursively.
     *
     * @param array|mixed $item Item.
     */
    private function recursiveKeySort(&$item)
    {
        if (is_array($item)) {
            ksort($item);
            array_walk($item, [$this, 'recursiveKeySort']);
        }
    }

    /**
     * Check if a given string contains another string, respecting word boundaries..
     *
     * @param string $haystack Haystack string to look in.
     * @param string $needle   Needle string to search for.
     * @return bool Whether the needle was found in the haystack.
     */
    private function containsWord($haystack, $needle)
    {
        if (empty($haystack) || empty($needle)) {
            return false;
        }

        return preg_match('/(^|\s)' . preg_quote($needle, '/') . '(\s|$)/i', $haystack);
    }

    /**
     * Check whether a given resource hint link element is pointing to an AMP resource.
     *
     * @param Element $node Link element to check.
     * @return bool Whether the link element is pointing to an AMP resource.
     */
    private function isHintForAmp(Element $node)
    {
        $href = $node->getAttribute(Attribute::HREF);
        if (empty($href)) {
            return false;
        }

        return (bool)preg_match(self::AMP_RESOURCE_HINT_SRC_PATTERN, $href);
    }
}
PK.3Y����V2V2Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Transformer/RewriteAmpUrls.php<?php

namespace AmpProject\Optimizer\Transformer;

use AmpProject\Amp;
use AmpProject\Html\Attribute;
use AmpProject\Dom\Document;
use AmpProject\Dom\Element;
use AmpProject\Optimizer\Configuration\RewriteAmpUrlsConfiguration;
use AmpProject\Optimizer\Error\CannotAdaptDocumentForSelfHosting;
use AmpProject\Optimizer\ErrorCollection;
use AmpProject\Optimizer\Exception\InvalidConfiguration;
use AmpProject\Optimizer\Transformer;
use AmpProject\Optimizer\TransformerConfiguration;
use AmpProject\RuntimeVersion;
use AmpProject\Html\Tag;
use AmpProject\Url;
use Exception;

/**
 * RewriteAmpUrls - rewrites AMP runtime URLs.
 *
 * This transformer supports five parameters:
 *
 * * `ampRuntimeVersion`: specifies a
 *   [specific version](https://github.com/ampproject/amp-toolbox/tree/main/runtime-version)
 *   version of the AMP runtime. For example: `ampRuntimeVersion: "001515617716922"` will result in AMP runtime URLs
 *   being re-written from `https://cdn.ampproject.org/v0.js` to `https://cdn.ampproject.org/rtv/001515617716922/v0.js`.
 *
 * * `ampUrlPrefix`: specifies an URL prefix for AMP runtime URLs. For example: `ampUrlPrefix: "/amp"` will result in
 *   AMP runtime URLs being re-written from `https://cdn.ampproject.org/v0.js` to `/amp/v0.js`. This option is
 *   experimental and not recommended.
 *
 * * `geoApiUrl`: specifies amp-geo API URL to use as a fallback when `amp-geo-0.1.js` is served unpatched, i.e. when
 *   `{{AMP_ISO_COUNTRY_HOTPATCH}}` is not replaced dynamically.
 *
 * * `lts`: Use long-term stable URLs. This option is not compatible with `rtv`, `ampRuntimeVersion` or `ampUrlPrefix`;
 *   an error will be thrown if these options are included together. Similarly, the `geoApiUrl` option is ineffective
 *   with the `lts` flag, but will simply be ignored rather than throwing an error.
 *
 * * `rtv`: Append the runtime version to the rewritten URLs. This option is not compatible with `lts`.
 *
 * * `esmModulesEnabled`: Use ES modules for loading the AMP runtime and components. Defaults to true.
 *
 * All parameters are optional. If no option is provided, runtime URLs won't be re-written. You can combine
 * `ampRuntimeVersion` and  `ampUrlPrefix` to rewrite AMP runtime URLs to versioned URLs on a different origin.
 *
 * This transformer also adds a preload header for the AMP runtime (v0.js) to trigger HTTP/2 push for CDNs (see
 * https://www.w3.org/TR/preload/#server-push-(http/2)).
 *
 * This is ported from the NodeJS optimizer while verifying against the Go version.
 *
 * NodeJS:
 * @version 7fbf187b3c7f07100e8911a52582b640b23490e5
 * @link https://github.com/ampproject/amp-toolbox/blob/7fbf187b3c7f07100e8911a52582b640b23490e5/packages/optimizer/lib/transformers/RewriteAmpUrls.js
 *
 * @package ampproject/amp-toolbox
 */
final class RewriteAmpUrls implements Transformer
{
    /**
     * Configuration to use.
     *
     * @var TransformerConfiguration
     */
    private $configuration;

    /**
     * RewriteAmpUrls constructor.
     *
     * @param TransformerConfiguration $configuration Configuration to use.
     */
    public function __construct(TransformerConfiguration $configuration)
    {
        $this->configuration = $configuration;
    }

    /**
     * Apply transformations to the provided DOM document.
     *
     * @param Document        $document DOM document to apply the
     *                                  transformations to.
     * @param ErrorCollection $errors   Collection of errors that are collected
     *                                  during transformation.
     * @return void
     */
    public function transform(Document $document, ErrorCollection $errors)
    {
        $host = $this->calculateHost();

        $this->adaptForEsmSupport($document, $host);
        $this->adaptForSelfHosting($document, $host, $errors);
    }

    /**
     * Adapt for ES modules support.
     *
     * @param Document $document Document to collect preload nodes for.
     * @param string   $host     Host URL to use.
     */
    private function adaptForEsmSupport(Document $document, $host)
    {
        $usesEsm = $this->configuration->get(RewriteAmpUrlsConfiguration::ESM_MODULES_ENABLED);

        $node = $document->head->firstChild;
        while ($node) {
            $nextSibling = $node->nextSibling;
            if (! $node instanceof Element) {
                $node = $nextSibling;
                continue;
            }

            $src  = $node->getAttribute(Attribute::SRC);
            $href = $node->getAttribute(Attribute::HREF);
            if ($node->tagName === Tag::SCRIPT && $this->usesAmpCacheUrl($src)) {
                $newUrl = $this->replaceUrl($src, $host);
                $node->setAttribute(Attribute::SRC, $newUrl);
                if ($usesEsm) {
                    $this->addEsm($document, $node);
                } else {
                    $this->addPreload($document, $newUrl, Tag::SCRIPT);
                }
            } elseif (
                $node->tagName === Tag::LINK
                &&
                $node->getAttribute(Attribute::REL) === Attribute::REL_STYLESHEET
                &&
                $this->usesAmpCacheUrl($href)
            ) {
                $newUrl = $this->replaceUrl($href, $host);
                $node->setAttribute(Attribute::HREF, $newUrl);
                $this->addPreload($document, $newUrl, Tag::STYLE);
            } elseif (
                $node->tagName === Tag::LINK
                &&
                $node->getAttribute(Attribute::REL) === Attribute::REL_PRELOAD
                &&
                $this->usesAmpCacheUrl($href)
            ) {
                if ($usesEsm && substr_compare($href, 'v0.js', -5) === 0) {
                    // Only preload .mjs runtime in ESM mode.
                    $node->parentNode->removeChild($node);
                } else {
                    $node->setAttribute(Attribute::HREF, $this->replaceUrl($href, $host));
                }
            }

            $node = $nextSibling;
        }
    }

    /**
     * Check if a given URL uses the AMP Cache.
     *
     * @param string $url Url to check.
     * @return bool Whether the provided URL uses the AMP Cache.
     */
    private function usesAmpCacheUrl($url)
    {
        if (! $url) {
            return false;
        }

        return strpos($url, Amp::CACHE_HOST) === 0;
    }

    /**
     * Replace URL root with provided host.
     *
     * @param string $url  Url to replace.
     * @param string $host Host to use.
     * @return string Adapted URL.
     */
    private function replaceUrl($url, $host)
    {
        // Preloads for scripts/styles that were already created for the adapted host need to be skipped,
        // otherwise we end up with the lts or rtv suffix being added twice.
        if (strpos($url, $host) === 0) {
            return $url;
        }

        return str_replace(Amp::CACHE_HOST, $host, $url);
    }

    /**
     * Replace <script> elements with their ES module counterparts.
     *
     * @param Document $document   Document to add the ES module scripts to.
     * @param Element  $scriptNode Script element to replace.
     */
    private function addEsm(Document $document, Element $scriptNode)
    {
        $scriptUrl    = $scriptNode->getAttribute(Attribute::SRC);
        $esmScriptUrl = preg_replace('/\.js$/', '.mjs', $scriptUrl);

        if ($this->shouldPreload($scriptUrl, $document)) {
            $document->links->addModulePreload($esmScriptUrl, Tag::SCRIPT, Attribute::CROSSORIGIN_ANONYMOUS);
        }

        $nomoduleNode = $document->createElement(Tag::SCRIPT);
        $nomoduleNode->addBooleanAttribute(Attribute::ASYNC);
        $nomoduleNode->addBooleanAttribute(Attribute::NOMODULE);
        $nomoduleNode->setAttribute(Attribute::SRC, $scriptUrl);
        $nomoduleNode->setAttribute(Attribute::CROSSORIGIN, Attribute::CROSSORIGIN_ANONYMOUS);

        $scriptNode->copyAttributes([Attribute::CUSTOM_ELEMENT, Attribute::CUSTOM_TEMPLATE], $nomoduleNode);

        $scriptNode->parentNode->insertBefore($nomoduleNode, $scriptNode);

        $scriptNode->setAttribute(Attribute::TYPE, Attribute::TYPE_MODULE);
        // Without crossorigin=anonymous browser loads the script twice because
        // of preload.
        $scriptNode->setAttribute(Attribute::CROSSORIGIN, Attribute::CROSSORIGIN_ANONYMOUS);
        $scriptNode->setAttribute(Attribute::SRC, $esmScriptUrl);
    }

    /**
     * Add a preload directive to the document.
     *
     * @param Document $document Document to add the preload to.
     * @param string   $href     Href to use for the preload.
     * @param string   $type     Type to use for the preload.
     */
    private function addPreload(Document $document, $href, $type)
    {
        if (! $this->shouldPreload($href, $document)) {
            return;
        }

        // TODO: Should the preloads be crossorigin here? Maybe conditionally based on host vs origin?
        $document->links->addPreload($href, $type, null, false);
    }

    /**
     * Add meta tags as needed to adapt for self-hosting the AMP runtime.
     *
     * @param Document        $document Document to add the meta tags to.
     * @param string          $host     Host URL to use.
     * @param ErrorCollection $errors   Error collection to add potential errors to.
     */
    private function adaptForSelfHosting(Document $document, $host, $errors)
    {
        // runtime-host and amp-geo-api meta tags should appear before the first script.
        if (
            ! $this->usesAmpCacheUrl($host)
            &&
            ! $this->configuration->get(RewriteAmpUrlsConfiguration::LTS)
        ) {
            try {
                $url = new Url($host);

                if (!empty($url->scheme) && !empty($url->host)) {
                    $origin = "{$url->scheme}://{$url->host}";
                    $this->addMeta($document, 'runtime-host', $origin);
                } else {
                    $errors->add(CannotAdaptDocumentForSelfHosting::forNonAbsoluteUrl($host));
                }
            } catch (Exception $exception) {
                $errors->add(CannotAdaptDocumentForSelfHosting::fromException($exception));
            }
        }
        if (
            ! empty($this->configuration->get(RewriteAmpUrlsConfiguration::GEO_API_URL))
            &&
            ! $this->configuration->get(RewriteAmpUrlsConfiguration::LTS)
        ) {
            $this->addMeta(
                $document,
                'amp-geo-api',
                $this->configuration->get(RewriteAmpUrlsConfiguration::GEO_API_URL)
            );
        }
    }

    /**
     * Check whether a given URL should be preloaded.
     *
     * @param string   $url      Url to check.
     * @param Document $document Document on which to check.
     * @return bool Whether the provided URL should be preloaded.
     */
    private function shouldPreload($url, Document $document)
    {
        if ($document->documentElement->hasAttribute(Amp::NO_BOILERPLATE_ATTRIBUTE)) {
            return false;
        }

        return substr_compare($url, 'v0.js', -5) === 0
               ||
               substr_compare($url, 'v0.css', -6) === 0;
    }

    /**
     * Calculate the host string to use.
     *
     * @return string Host to use.
     */
    private function calculateHost()
    {
        $lts = $this->configuration->get(RewriteAmpUrlsConfiguration::LTS);
        $rtv = $this->configuration->get(RewriteAmpUrlsConfiguration::RTV);

        if ($lts && $rtv) {
            throw InvalidConfiguration::forMutuallyExclusiveFlags(
                RewriteAmpUrlsConfiguration::LTS,
                RewriteAmpUrlsConfiguration::RTV
            );
        }

        $ampUrlPrefix      = $this->configuration->get(RewriteAmpUrlsConfiguration::AMP_URL_PREFIX);
        $ampRuntimeVersion = $this->configuration->get(RewriteAmpUrlsConfiguration::AMP_RUNTIME_VERSION);

        $ampUrlPrefix = rtrim($ampUrlPrefix, '/');

        if ($ampRuntimeVersion && $rtv) {
            $ampUrlPrefix = RuntimeVersion::appendRuntimeVersion($ampUrlPrefix, $ampRuntimeVersion);
        } elseif ($lts) {
            $ampUrlPrefix .= '/lts';
        }

        return $ampUrlPrefix;
    }

    /**
     * Add meta element to the document head.
     *
     * @param Document $document Document to add the meta to.
     * @param string   $name     Name of the meta element.
     * @param string   $content  Value of the meta element.
     */
    private function addMeta(Document $document, $name, $content)
    {
        $meta = $document->createElement(Tag::META);
        $meta->setAttribute(Attribute::NAME, $name);
        $meta->setAttribute(Attribute::CONTENT, $content);
        $firstScript = $document->xpath->query('./script', $document->head)->item(0);
        $document->head->insertBefore($meta, $firstScript);
    }
}
PK.3Y�����Zbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Transformer/ServerSideRendering.php<?php

namespace AmpProject\Optimizer\Transformer;

use AmpProject\Amp;
use AmpProject\Html\Attribute;
use AmpProject\CssLength;
use AmpProject\Dom\Document;
use AmpProject\Dom\Element;
use AmpProject\Exception\MaxCssByteCountExceeded;
use AmpProject\Extension;
use AmpProject\Layout;
use AmpProject\Optimizer\CssRule;
use AmpProject\Optimizer\CssRules;
use AmpProject\Optimizer\Error;
use AmpProject\Optimizer\ErrorCollection;
use AmpProject\Optimizer\Exception\InvalidArgument;
use AmpProject\Optimizer\Exception\InvalidHtmlAttribute;
use AmpProject\Optimizer\Transformer;
use AmpProject\Html\Role;
use AmpProject\Html\Tag;
use DOMAttr;
use Exception;

/**
 * Transformer applying the server-side rendering transformations to the HTML input.
 *
 * This is ported from the NodeJS optimizer while verifying against the Go version.
 *
 * NodeJS:
 * @version c92d6023ea4c9edadff593742a992da2b400a75d
 * @link    https://github.com/ampproject/amp-toolbox/blob/c92d6023ea4c9edadff593742a992da2b400a75d/packages/optimizer/lib/transformers/ServerSideRendering.js
 *
 * Go:
 * @version ea0959046c179953de43077eafaeb720f9b20bdf
 * @link    https://github.com/ampproject/amppackager/blob/ea0959046c179953de43077eafaeb720f9b20bdf/transformer/transformers/transformedidentifier.go
 *
 * @package ampproject/amp-toolbox
 */
final class ServerSideRendering implements Transformer
{
    /**
     * List of layouts that support server-side rendering.
     *
     * @var string[]
     */
    const SUPPORTED_LAYOUTS = [
        '',
        Layout::NODISPLAY,
        Layout::FIXED,
        Layout::FIXED_HEIGHT,
        Layout::RESPONSIVE,
        Layout::CONTAINER,
        Layout::FILL,
        Layout::FLEX_ITEM,
        Layout::FLUID,
        Layout::INTRINSIC,
    ];

    /**
     * List of elements to exclude from rendering their layout at the server.
     *
     * @var string[]
     */
    const EXCLUDED_ELEMENTS = [
        'amp-audio',
    ];

    /**
     * Regex pattern to match a CSS Dimension with an associated media condition.
     *
     * @var string
     */
    const CSS_DIMENSION_WITH_MEDIA_CONDITION_REGEX_PATTERN = '/\s*(?<media_condition>\(.*\))\s+(?<dimension>.*)\s*/m';

    /**
     * Smallest acceptable difference in floating point comparisons.
     *
     * @var float
     */
    const FLOATING_POINT_EPSILON = 0.00001;

    /**
     * Associative array of custom sizer styles where the key is the ID of the associated element.
     *
     * @var string[]
     */
    private $customSizerStyles = [];

    /**
     * Custom CSS rules that were extracted to remove blocking attributes.
     *
     * @var CssRules
     */
    private $customCss;

    /**
     * Apply transformations to the provided DOM document.
     *
     * @param Document        $document DOM document to apply the transformations to.
     * @param ErrorCollection $errors   Collection of errors that are collected during transformation.
     * @return void
     */
    public function transform(Document $document, ErrorCollection $errors)
    {
        if ($this->isAlreadyTransformed($document)) {
            return;
        }

        // Reset internal state for a new transform.
        $this->customCss = new CssRules();

        /*
         * Within the loop we apply the layout to the custom tags (amp-foo...) where possible, but while we're at this
         * we also look for reasons not to remove the boilerplate.
         */
        $canRemoveBoilerplate = true;
        foreach ($document->ampElements as $ampElement) {
            // Make sure we only deal with valid elements.
            if (! $ampElement instanceof Element) {
                continue;
            }

            // Skip tags inside a template tag.
            if ($this->isWithinTemplate($ampElement)) {
                continue;
            }

            /*
             * Server-side rendering of an amp-audio element.
             */
            if ($ampElement->tagName === Extension::AUDIO) {
                $this->ssrAmpAudio($document, $ampElement);
            }

            /*
             * amp-experiment is a render delaying extension iff the tag is used in the doc. We check for that here
             * rather than checking for the existence of the amp-experiment script in IsRenderDelayingExtension below.
             */
            if ($ampElement->tagName === Extension::EXPERIMENT && $this->isAmpExperimentUsed($ampElement)) {
                $errors->add(Error\CannotRemoveBoilerplate::fromAmpExperiment($ampElement));
                $canRemoveBoilerplate = false;
            }

            /*
             * Try to adapt 'sizes', 'heights' and 'media' attribute to turn them from blocking attributes into
             * CSS styles we add to <style amp-custom>.
             */
            $attributesToRemove = $this->adaptBlockingAttributes($document, $ampElement, $errors);
            if ($attributesToRemove === false) {
                $canRemoveBoilerplate = false;
            }

            /*
             * Now apply the layout to the custom elements. If we encounter any unsupported layout, the applyLayout()
             * method returns false and we can't remove the boilerplate.
             */
            $adaptedElement = $this->applyLayout($document, $ampElement, $errors);
            if ($adaptedElement === false) {
                $errors->add(Error\CannotRemoveBoilerplate::fromUnsupportedLayout($ampElement));
                $canRemoveBoilerplate = false;
            }

            // Removal of attributes is deferred as layout application needs them.
            if (is_array($attributesToRemove)) {
                foreach ($attributesToRemove as $attributeToRemove) {
                    $adaptedElement->removeAttribute($attributeToRemove);
                }
            }
        }

        $this->renderCustomCss($document);

        // Emit the amp-runtime marker to indicate that we're applying server side rendering in the document.
        $ampRuntimeMarker = $document->createElement(Tag::STYLE);
        $ampRuntimeMarker->setAttribute(Attribute::AMP_RUNTIME, '');
        $document->head->insertBefore(
            $ampRuntimeMarker,
            $document->head->hasChildNodes()
                ? $document->head->firstChild
                : null
        );

        foreach ($document->xpath->query('.//script[ @custom-element ]', $document->head) as $customElementScript) {
            /** @var Element $customElementScript */
            // amp-experiment is a render delaying extension iff the tag is used in the doc, which we checked for above.
            if (
                $customElementScript->getAttribute(Attribute::CUSTOM_ELEMENT) !== Extension::EXPERIMENT
                && Amp::isRenderDelayingExtension($customElementScript)
            ) {
                $errors->add(Error\CannotRemoveBoilerplate::fromRenderDelayingScript($customElementScript));
                $canRemoveBoilerplate = false;
            }
        }

        /*
         * Below, we're only concerned about removing the boilerplate.
         * If we've already determined that we can't, we're done here.
         */
        if (! $canRemoveBoilerplate) {
            return;
        }

        // The boilerplate can be removed, note it on the <html> tag.
        $document->html->setAttribute(Amp::NO_BOILERPLATE_ATTRIBUTE, '');

        /*
         * Find the boilerplate and remove it.
         * The following code assumes that the <noscript> tag in the head is only ever used for boilerplate.
         */
        foreach ($document->xpath->query('.//noscript', $document->head) as $noscriptTagInHead) {
            /** @var Element $noscriptTagInHead */
            $noscriptTagInHead->parentNode->removeChild($noscriptTagInHead);
        }

        $boilerplateStyleTags = $document->xpath->query(
            './/style[ @amp-boilerplate or @amp4ads-boilerplate or @amp4email-boilerplate ]',
            $document->head
        );

        foreach ($boilerplateStyleTags as $boilerplateStyleTag) {
            /** @var Element $boilerplateStyleTag */
            $boilerplateStyleTag->parentNode->removeChild($boilerplateStyleTag);
        }
    }

    /**
     * Check whether the document was already transformed.
     *
     * We want to ensure we don't apply server-side rendering modifications more than once.
     *
     * @param Document $document DOM document to apply the transformations to.
     * @return bool Whether the document was already transformed.
     */
    private function isAlreadyTransformed(Document $document)
    {
        if ($document->html->hasAttribute(Amp::LAYOUT_ATTRIBUTE)) {
            return true;
        }

        // Mark the document as "already transformed".
        $document->html->setAttribute(Amp::LAYOUT_ATTRIBUTE, '');

        return false;
    }

    /**
     * Apply the adequate layout to a custom element.
     *
     * @param Document        $document DOM document to apply the transformations to.
     * @param Element         $element  Element to apply the layout to.
     * @param ErrorCollection $errors   Collection of errors that are collected during transformation.
     * @return Element|false Adapted element, or false if the layout could not be applied.
     */
    private function applyLayout(Document $document, Element $element, ErrorCollection $errors)
    {
        $ampLayout = $this->parseLayout($element->getAttribute(Attribute::LAYOUT));

        $attrWidth  = $element->hasAttribute(Attribute::WIDTH) ? $element->getAttribute(Attribute::WIDTH) : null;
        $inputWidth = new CssLength($attrWidth);
        $inputWidth->validate(/* $allowAuto */ true, /* $allowFluid */ false);
        if (! $inputWidth->isValid()) {
            $errors->add(Error\CannotPerformServerSideRendering::fromInvalidInputWidth($element));
            return false;
        }

        $attrHeight  = $element->hasAttribute(Attribute::HEIGHT) ? $element->getAttribute(Attribute::HEIGHT) : null;
        $inputHeight = new CssLength($attrHeight);
        $inputHeight->validate(/* $allowAuto */ true, /* $allowFluid */ $ampLayout === Layout::FLUID);
        if (! $inputHeight->isValid()) {
            $errors->add(Error\CannotPerformServerSideRendering::fromInvalidInputHeight($element));
            return false;
        }

        // Calculate effective width, height and layout.
        $width  = $this->calculateWidth($ampLayout, $inputWidth, $element->tagName);
        $height = $this->calculateHeight($ampLayout, $inputHeight, $element->tagName);
        $layout = $this->calculateLayout(
            $ampLayout,
            $width,
            $height,
            $element->getAttribute(Attribute::SIZES),
            $element->getAttribute(Attribute::HEIGHTS)
        );

        if (! $this->isSupportedLayout($layout)) {
            $errors->add(Error\CannotPerformServerSideRendering::fromUnsupportedLayout($element, $layout));
            return false;
        }

        try {
            /** @var Element $newElement */
            $newElement = $element->cloneNode(false);

            // Transformed AMP validation requires layout attribute to be set.
            // See https://github.com/ampproject/amp-toolbox/issues/959.
            if ($layout && $layout === Layout::RESPONSIVE) {
                $newElement->setAttribute(Attribute::LAYOUT, $layout);
            }

            $this->applyLayoutAttributes($newElement, $layout, $width, $height);
            $this->maybeAddSizerInto($document, $newElement, $layout, $width, $height);
            $element->parentNode->replaceChild($newElement, $element);
            while ($element->firstChild) {
                $newElement->appendChild($element->removeChild($element->firstChild));
            }
        } catch (MaxCssByteCountExceeded $exception) {
            $errors->add(
                Error\CannotPerformServerSideRendering::fromMaxCssByteCountExceededException($exception, $element)
            );
            return false;
        }

        return $newElement;
    }

    /**
     * Parse the layout attribute value.
     *
     * @param string $layout Layout attribute value.
     * @return string Validated AMP layout, or empty string if none.
     */
    private function parseLayout($layout)
    {
        if (empty($layout)) {
            return '';
        }

        $layout = strtolower($layout);

        if (array_key_exists($layout, Layout::TO_SPEC)) {
            return $layout;
        }

        return '';
    }

    /**
     * Calculate the width of an element for its requested layout.
     *
     * @param string    $inputLayout Requested layout.
     * @param CssLength $inputWidth  Input value for the width.
     * @param string    $tagName     Tag name of the element.
     * @return CssLength Calculated Width.
     */
    private function calculateWidth($inputLayout, CssLength $inputWidth, $tagName)
    {
        if ((empty($inputLayout) || $inputLayout === Layout::FIXED) && ! $inputWidth->isDefined()) {
            // These values come from AMP's runtime and can be found in
            // https://github.com/ampproject/amphtml/blob/292dc66b8c0bb078bbe3a1bca960e8f494f7fc8f/src/layout.js#L70-L86.
            switch ($tagName) {
                case Extension::ANALYTICS:
                case Extension::PIXEL:
                    $width = new CssLength('1px');
                    $width->validate(/* $allowAuto */ false, /* $allowFluid */ false);
                    return $width;
                case Extension::AUDIO:
                    $width = new CssLength(CssLength::AUTO);
                    $width->validate(/* $allowAuto */ true, /* $allowFluid */ false);
                    return $width;
                case Extension::SOCIAL_SHARE:
                    $width = new CssLength('60px');
                    $width->validate(/* $allowAuto */ false, /* $allowFluid */ false);
                    return $width;
            }
        }

        return $inputWidth;
    }

    /**
     * Calculate the height of an element for its requested layout.
     *
     * @param string    $inputLayout Requested layout.
     * @param CssLength $inputHeight Input value for the height.
     * @param string    $tagName     Tag name of the element.
     * @return CssLength Calculated Height.
     */
    private function calculateHeight($inputLayout, CssLength $inputHeight, $tagName)
    {
        if (
            (
                empty($inputLayout)
                || $inputLayout === Layout::FIXED
                || $inputLayout === Layout::FIXED_HEIGHT
            ) && ! $inputHeight->isDefined()
        ) {
            // These values come from AMP's runtime and can be found in
            // https://github.com/ampproject/amphtml/blob/292dc66b8c0bb078bbe3a1bca960e8f494f7fc8f/src/layout.js#L70-L86.
            switch ($tagName) {
                case Extension::ANALYTICS:
                case Extension::PIXEL:
                    $height = new CssLength('1px');
                    $height->validate(/* $allowAuto */ false, /* $allowFluid */ false);
                    return $height;
                case Extension::AUDIO:
                    $height = new CssLength(CssLength::AUTO);
                    $height->validate(/* $allowAuto */ true, /* $allowFluid */ false);
                    return $height;
                case Extension::SOCIAL_SHARE:
                    $height = new CssLength('44px');
                    $height->validate(/* $allowAuto */ false, /* $allowFluid */ false);
                    return $height;
            }
        }

        return $inputHeight;
    }

    /**
     * Calculate the final AMP layout attribute for an element.
     *
     * @param string    $inputLayout Requested layout.
     * @param CssLength $width       Calculated width.
     * @param CssLength $height      Calculated height.
     * @param string    $sizesAttr   Sizes attribute value.
     * @param string    $heightsAttr Heights attribute value.
     * @return string Calculated layout.
     */
    private function calculateLayout(
        $inputLayout,
        CssLength $width,
        CssLength $height,
        $sizesAttr,
        $heightsAttr
    ) {
        if (! empty($inputLayout)) {
            return $inputLayout;
        }

        if (! $width->isDefined() && ! $height->isDefined()) {
            return Layout::CONTAINER;
        }

        if ($height->isDefined() && (! $width->isDefined() || $width->isAuto())) {
            return Layout::FIXED_HEIGHT;
        }

        if ($height->isDefined() && $width->isDefined() && (! empty($sizesAttr) || ! empty($heightsAttr))) {
            return Layout::RESPONSIVE;
        }

        return Layout::FIXED;
    }

    /**
     * Check whether a layout is support for SSR.
     *
     * @param string $layout Layout to check.
     * @return bool Whether the layout is supported for SSR.
     */
    private function isSupportedLayout($layout)
    {
        return in_array($layout, self::SUPPORTED_LAYOUTS, true);
    }

    /**
     * Apply the calculated layout attributes to an element.
     *
     * @param Element   $element Element to apply the layout attributes to.
     * @param string    $layout  Final layout.
     * @param CssLength $width   Calculated width.
     * @param CssLength $height  Calculated height.
     */
    private function applyLayoutAttributes(Element $element, $layout, CssLength $width, CssLength $height)
    {
        if ($this->isExcludedElement($element)) {
            return;
        }

        $this->addClass($element, $this->getLayoutClass($layout));

        if ($this->isLayoutSizeDefined($layout)) {
            $this->addClass($element, Amp::LAYOUT_SIZE_DEFINED_CLASS);
        }

        $styles = '';
        switch ($layout) {
            case Layout::NODISPLAY:
                $element->setAttribute(Attribute::HIDDEN, Attribute::HIDDEN);
                break;
            case Layout::FIXED:
                $styles = "width:{$width->getNumeral()}{$width->getUnit()};"
                          . "height:{$height->getNumeral()}{$height->getUnit()};";
                break;
            case Layout::FIXED_HEIGHT:
                $styles = "height:{$height->getNumeral()}{$height->getUnit()};";
                break;
            case Layout::RESPONSIVE:
            case Layout::INTRINSIC:
                // Do nothing here but emit <i-amphtml-sizer> later.
                break;
            case Layout::FILL:
            case Layout::CONTAINER:
                // Do nothing here.
                break;
            case Layout::FLUID:
                $styles = 'width:100%;height:0;';
                $this->addClass($element, Amp::LAYOUT_AWAITING_SIZE_CLASS);
                break;
            case Layout::FLEX_ITEM:
                if ($width->isDefined()) {
                    $styles = "width:{$width->getNumeral()}{$width->getUnit()};";
                }
                if ($height->isDefined()) {
                    $styles .= "height:{$height->getNumeral()}{$height->getUnit()};";
                }
                break;
        }

        if (!empty($styles)) {
            $element->addInlineStyle($styles);
        }

        $element->setAttribute(Amp::LAYOUT_ATTRIBUTE, $layout);
    }

    /**
     * Get the class to use for a given layout.
     *
     * @param string $layout Layout to get the class for.
     * @return string Class name to use for the layout.
     */
    private function getLayoutClass($layout)
    {
        if (empty($layout)) {
            return '';
        }

        return Amp::LAYOUT_CLASS_PREFIX . $layout;
    }

    /**
     * Add a class to an element.
     *
     * This makes sure we keep existing classes on the element.
     *
     * @param Element $element Element to add a class to.
     * @param string  $class   Class to add.
     */
    private function addClass(Element $element, $class)
    {
        if ($element->hasAttribute(Attribute::CLASS_) && ! empty($element->getAttribute(Attribute::CLASS_))) {
            $class = "{$element->getAttribute(Attribute::CLASS_)} {$class}";
        }

        $element->setAttribute(Attribute::CLASS_, $class);
    }

    /**
     * Check whether the provided layout is a layout with a defined size.
     *
     * @param string $layout Layout to check.
     * @return bool Whether the layout has a defined size.
     */
    private function isLayoutSizeDefined($layout)
    {
        return in_array($layout, Layout::SIZE_DEFINED_LAYOUTS, true);
    }

    /**
     * Insert a sizer element if one is required.
     *
     * @param Document  $document DOM document to add a sizer to.
     * @param Element   $element  Element to add a sizer to.
     * @param string    $layout   Calculated layout of the element.
     * @param CssLength $width    Calculated width of the element.
     * @param CssLength $height   Calculated height of the element.
     */
    private function maybeAddSizerInto(
        Document $document,
        Element $element,
        $layout,
        CssLength $width,
        CssLength $height
    ) {
        if (
            ! $width->isDefined()
            || $this->isZero($width->getNumeral())
            || ! $height->isDefined()
            || $width->getUnit() !== $height->getUnit()
        ) {
            return;
        }

        $sizer = null;

        if ($layout === Layout::RESPONSIVE) {
            $elementId = $element->getAttribute(Attribute::ID);
            if (!empty($elementId) && array_key_exists($elementId, $this->customSizerStyles)) {
                $sizer = $this->createResponsiveSizer(
                    $document,
                    $element,
                    $width,
                    $height,
                    $this->customSizerStyles[$elementId]
                );
            } else {
                $sizer = $this->createResponsiveSizer($document, $element, $width, $height);
            }
        } elseif ($layout === Layout::INTRINSIC) {
            $sizer = $this->createIntrinsicSizer($document, $width, $height);
        }

        if ($sizer) {
            $element->insertBefore($sizer, $element->firstChild);
        }
    }

    /**
     * Create a sizer element for a responsive layout.
     *
     * @param Document  $document DOM document to create the sizer for.
     * @param Element   $element  Element to add a sizer to.
     * @param CssLength $width    Calculated width of the element.
     * @param CssLength $height   Calculated height of the element.
     * @param string    $style    Style to use for the sizer. Defaults to padding-top in percentage.
     * @return Element
     */
    private function createResponsiveSizer(
        Document $document,
        Element $element,
        CssLength $width,
        CssLength $height,
        $style = ''
    ) {
        $padding       = $height->getNumeral() / $width->getNumeral() * 100;
        $paddingString = rtrim(rtrim(sprintf('%.4F', round($padding, 4)), '0'), '.');
        $paddingStyle  = ! $element->hasAttribute(Attribute::HEIGHTS)
            ? sprintf('padding-top:%s%%', $paddingString)
            : '';

        $style = "display:block;{$paddingStyle};{$style}";

        $sizer = $document->createElement(Amp::SIZER_ELEMENT);
        $sizer->setAttribute(Attribute::SLOT, Amp::SERVICE_SLOT);
        $sizer->addInlineStyle($style);

        return $sizer;
    }

    /**
     * Create a sizer element for an intrinsic layout.
     *
     * Intrinsic uses an svg inside the sizer element rather than the padding trick.
     * Note: a naked svg won't work because other things expect the i-amphtml-sizer element.
     *
     * @param Document  $document DOM document to create the sizer for.
     * @param CssLength $width    Calculated width of the element.
     * @param CssLength $height   Calculated height of the element.
     * @return Element
     */
    private function createIntrinsicSizer(Document $document, CssLength $width, CssLength $height)
    {
        $sizer = $document->createElement(Amp::SIZER_ELEMENT);
        $sizer->setAttribute(Attribute::SLOT, Amp::SERVICE_SLOT);
        $sizer->setAttribute(Attribute::CLASS_, Amp::SIZER_ELEMENT);

        $sizer_img = $document->createElement(Tag::IMG);
        $sizer_img->setAttribute(Attribute::ALT, '');
        $sizer_img->setAttribute(Attribute::ARIA_HIDDEN, 'true');
        $sizer_img->setAttribute(Attribute::CLASS_, Amp::INTRINSIC_SIZER_ELEMENT);
        $sizer_img->setAttribute(Attribute::ROLE, Role::PRESENTATION);

        $sizer_img->setAttribute(
            Attribute::SRC,
            sprintf(
                'data:image/svg+xml;base64,%s',
                base64_encode("<svg height=\"{$height->getNumeral()}\" width=\"{$width->getNumeral()}\" "
                              . "xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\"/>")
            )
        );

        $sizer->appendChild($sizer_img);

        return $sizer;
    }

    /**
     * Check whether the element is within a template.
     *
     * @param Element $element Element to check.
     * @return bool Whether the element is within a template.
     */
    private function isWithinTemplate(Element $element)
    {
        $parent = $element->parentNode;
        while ($parent !== null) {
            if ($parent instanceof Element) {
                if ($parent->tagName === Tag::TEMPLATE) {
                    return true;
                }

                if ($parent->tagName === Tag::SCRIPT && $parent->hasAttribute(Attribute::TEMPLATE)) {
                    return true;
                }
            }
            $parent = $parent->parentNode;
        }

        return false;
    }

    /**
     * Check if the amp-experiment element is actually used.
     *
     * This checks if amp-experiment has one child that is a script/json tag with a textnode that is parsable JSON and
     * not empty. The validator ensures that the script/json is parsable but since transformers may be used outside of
     * validation it is checked here as well.
     *
     * @param Element $element Element to check.
     * @return bool Whether the amp-experiment element is actually used.
     */
    private function isAmpExperimentUsed(Element $element)
    {
        $script = null;
        $child  = $element->firstChild;

        while ($child) {
            if (
                $child instanceof Element
                && $child->tagName === Tag::SCRIPT
                && strtolower($child->getAttribute(Attribute::TYPE)) === Attribute::TYPE_JSON
            ) {
                $script = $child;
                break;
            }
            $child = $child->nextSibling;
        }

        // If not script/json tag, then not used.
        if ($script === null) {
            return false;
        }

        // If not exactly one child is present, then not used.
        if ($script->childNodes->length !== 1) {
            return false;
        }

        $child = $script->firstChild;

        // If child is not a text node or CDATA section, then not used.
        if ($child->nodeType !== XML_TEXT_NODE && $child->nodeType !== XML_CDATA_SECTION_NODE) {
            return false;
        }

        $json = $child->textContent;

        // If textnode is not JSON parsable, then not used.
        $experiment = json_decode($json, /*$assoc*/ true);
        if ($experiment === null) {
            return false;
        }

        // If JSON is empty, then not used.
        if (empty($experiment)) {
            return false;
        }

        // Otherwise, used.
        return true;
    }

    /**
     * Adapt blocking attributes so that they allow for boilerplate removal.
     *
     * Blocking attributes that need special attention are `sizes`, `heights` and `media`.
     *
     * @see https://github.com/ampproject/amp-wp/issues/4439
     *
     * @param Document        $document   DOM document to apply the transformations to.
     * @param Element         $ampElement Element to adapt.
     * @param ErrorCollection $errors     Collection of errors that are collected during transformation.
     * @return string[]|false Attribute names to remove, or false if attributes could not be adapted.
     */
    private function adaptBlockingAttributes(Document $document, Element $ampElement, ErrorCollection $errors)
    {
        $attributes = $ampElement->attributes;

        $customCss          = [];
        $attributesToRemove = [];

        foreach ($attributes as $attribute) {
            /**
             * Attribute to check.
             *
             * @var DOMAttr $attribute
             */
            $normalizedAttributeName = strtolower($attribute->name);

            try {
                switch ($normalizedAttributeName) {
                    case Attribute::SIZES:
                        if ($ampElement->hasAttribute(Attribute::DISABLE_INLINE_WIDTH)) {
                            // Don't remove sizes when disable-inline-width is set.
                            // @see https://github.com/ampproject/amphtml/pull/27083.
                            break;
                        }

                        $customCss = array_merge(
                            $customCss,
                            $this->extractSizesAttributeCss($document, $ampElement, $attribute)
                        );
                        $attributesToRemove[] = $attribute->name;
                        break;

                    case Attribute::HEIGHTS:
                        $customCss = array_merge(
                            $customCss,
                            $this->extractHeightsAttributeCss($document, $ampElement, $attribute)
                        );
                        $attributesToRemove[] = $attribute->name;
                        break;

                    case Attribute::MEDIA:
                        $customCss = array_merge(
                            $customCss,
                            $this->extractMediaAttributeCss($document, $ampElement, $attribute)
                        );
                        $attributesToRemove[] = $attribute->name;
                        break;
                }
            } catch (Exception $exception) {
                $errors->add(Error\CannotRemoveBoilerplate::fromAttributeThrowingException($exception));
                return false;
            }
        }

        foreach ($customCss as $cssRule) {
            if ($document->getRemainingCustomCssSpace() < $cssRule->getByteCount()) {
                $errors->add(Error\CannotRemoveBoilerplate::fromAttributesRequiringBoilerplate($ampElement));
                return false;
            }

            $this->customCss = $this->customCss->add($cssRule);
        }

        return $attributesToRemove;
    }

    /**
     * Render the custom CSS styling into the document.
     *
     * @param Document $document Document to add the custom CSS styling to.
     */
    private function renderCustomCss(Document $document)
    {
        $customCss = $this->customCss->getCss();

        if (empty($customCss)) {
            return;
        }

        $document->addAmpCustomStyle($customCss);
    }

    /**
     * Extract the custom CSS styling from a 'sizes' attribute.
     *
     * __sizes__
     * "One or more strings separated by commas, indicating a set of source sizes. Each source size consists of:
     * - A media condition. This must be omitted for the last item in the list.
     * - A source size value."
     *
     * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#attr-sizes
     *
     * @param Document $document  Document containing the element to adapt.
     * @param Element  $element   Element to adapt.
     * @param DOMAttr  $attribute Attribute to be extracted.
     * @return CssRule[] Extract custom CSS styling.
     */
    private function extractSizesAttributeCss(Document $document, Element $element, DOMAttr $attribute)
    {
        if (!$element->hasAttribute(Attribute::SRCSET) || empty($element->getAttribute(Attribute::SRCSET))) {
            // According to the Mozilla docs, a sizes attribute without a valid srcset attribute should have no effect.
            // Therefore, it should simply be stripped, without producing media queries.
            // @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#attr-sizes.
            return [];
        }

        return $this->extractAttributeCss(
            $document,
            $element,
            $attribute,
            ['#__ID__', 'width:%s'],
            ['@media %s', '#__ID__', 'width:%s']
        );
    }

    /**
     * Extract the custom CSS styling from a 'heights' attribute.
     *
     * __heights__ (AMP-specific)
     * "The value of this attribute is a sizes expression based on media expressions, similar to the sizes attribute on
     * img tags but with two key differences:
     * - The value applies to the height, not the width of the element.
     * - Percent values are allowed. A percent value indicates the percent of the element's width. For example, a value
     *   of 80% indicates that the height of the element will be 80% of the element's width."
     *
     * @see https://amp.dev/documentation/guides-and-tutorials/learn/common_attributes/#heights
     *
     * @param Document $document  Document containing the element to adapt.
     * @param Element  $element   Element to adapt.
     * @param DOMAttr  $attribute Attribute to be extracted.
     * @return CssRule[] Extract custom CSS styling.
     */
    private function extractHeightsAttributeCss(Document $document, Element $element, DOMAttr $attribute)
    {
        // TODO: I'm not sure why I initially added this here, it looks very intentional.
        // However, it doesn't match what the NodeJS version does, which is to add padding-top
        // to the inline style of the element.
        // phpcs:ignore Squiz.Commenting.InlineComment.InvalidEndChar
        // $this->customSizerStyles[$document->getElementId($element)] = '';

        return $this->extractAttributeCss(
            $document,
            $element,
            $attribute,
            ['#__ID__>:first-child', 'padding-top:%s'],
            ['@media %s', '#__ID__>:first-child', 'padding-top:%s']
        );
    }

    /**
     * Extract the custom CSS styling from an attribute and turn into a templated CSS style string.
     *
     * @param Document $document        Document containing the element to adapt.
     * @param Element  $element         Element to adapt.
     * @param DOMAttr  $attribute       Attribute to be extracted.
     * @param string[] $mainStyle       CSS rule template for the main style.
     * @param string[] $mediaQueryStyle CSS rule template for a media query style.
     * @return CssRule[] Array of CSS rules to use.
     */
    private function extractAttributeCss(
        Document $document,
        Element $element,
        DOMAttr $attribute,
        $mainStyle,
        $mediaQueryStyle
    ) {
        if (empty($attribute->nodeValue)) {
            return [];
        }

        $sourceSizes = explode(',', $attribute->nodeValue);
        $lastItem    = trim(array_pop($sourceSizes), CssRule::CSS_TRIM_CHARACTERS);

        if (empty($lastItem)) {
            throw InvalidHtmlAttribute::fromAttribute($attribute->nodeName, $element);
        }

        $cssRules   = [];
        $cssRules[] = new CssRule($mainStyle[0], sprintf($mainStyle[1], $lastItem));

        foreach (array_reverse($sourceSizes) as $sourceSize) {
            $matches = [];
            if (!preg_match(self::CSS_DIMENSION_WITH_MEDIA_CONDITION_REGEX_PATTERN, $sourceSize, $matches)) {
                throw InvalidHtmlAttribute::fromAttribute($attribute->nodeName, $element);
            }

            $mediaCondition = trim($matches['media_condition'], CssRule::CSS_TRIM_CHARACTERS);

            if (empty($mediaCondition)) {
                throw InvalidHtmlAttribute::fromAttribute($attribute->nodeName, $element);
            }

            $dimension = trim($matches['dimension'], CssRule::CSS_TRIM_CHARACTERS);

            if (empty($dimension)) {
                throw InvalidHtmlAttribute::fromAttribute($attribute->nodeName, $element);
            }

            $cssRules[] = CssRule::withMediaQuery(
                sprintf($mediaQueryStyle[0], $mediaCondition),
                $mediaQueryStyle[1],
                sprintf($mediaQueryStyle[2], $dimension)
            );
        }

        $elementId = $document->getElementId($element);
        $cssRules  = array_map(
            static function (CssRule $cssRule) use ($elementId) {
                return $cssRule->applyID($elementId);
            },
            $cssRules
        );

        return $cssRules;
    }

    /**
     * Extract the custom CSS styling from a 'media' attribute.
     *
     * __media__
     * "The value of media is a media query. If the query does not match, the element is not rendered and its resources
     * and potentially its child resources will not be fetched. If the browser window changes size or orientation, the
     * media queries are re-evaluated and elements are hidden and shown based on the new results."
     *
     * @param Document $document  Document containing the element to adapt.
     * @param Element  $element   Element to adapt.
     * @param DOMAttr  $attribute Attribute to be extracted.
     * @return CssRule[] Extract custom CSS styling.
     */
    private function extractMediaAttributeCss(Document $document, Element $element, DOMAttr $attribute)
    {
        $attributeValue = trim($attribute->nodeValue, CssRule::CSS_TRIM_CHARACTERS);

        if (empty($attributeValue)) {
            return [];
        }

        $notFound       = 0;
        $attributeValue = preg_replace('/^not\s+/i', '', $attributeValue, 1, $notFound);
        $not            = $notFound ? '' : 'not ';

        if ($attributeValue[0] === '(' && ! $notFound) {
            // 'not' can only be used with a media type, so we use 'all' as media type if it is missing.
            // See quirksmode.org/blog/archives/2012/11/what_the_hells.html#c15586
            $attributeValue = 'all and ' . $attributeValue;
        }

        return [
            CssRule::withMediaQuery("@media {$not}{$attributeValue}", '#__ID__', 'display:none')
                   ->applyID($document->getElementId($element)),
        ];
    }

    /**
     * Check whether a given element should be excluded from applying its layout on the server.
     *
     * @param Element $element Element to check.
     * @return bool Whether to exclude the element or not.
     */
    private function isExcludedElement(Element $element)
    {
        return in_array($element->tagName, self::EXCLUDED_ELEMENTS, true);
    }

    /**
     * Check if a number is zero.
     *
     * This works correctly with both integer and float values.
     *
     * @param int|float $number Number to check for zero.
     * @return bool Whether the provided number is zero.
     * @throws InvalidArgument When an unsupported number type is provided.
     */
    private function isZero($number)
    {
        if (is_int($number)) {
            return $number === 0;
        }

        if (!is_float($number)) {
            throw InvalidArgument::forNumericComparison($number);
        }

        return abs($number) < self::FLOATING_POINT_EPSILON;
    }

    /**
     * Server-side rendering of an amp-audio element.
     *
     * @param Document $document DOM document to apply the transformations to.
     * @param Element  $element  Element to adapt.
     */
    private function ssrAmpAudio(Document $document, Element $element)
    {
        // Check if we already have a SSR-ed audio element.
        if ($element->hasChildNodes()) {
            foreach ($element->childNodes as $childNode) {
                if ($childNode instanceof Element && $childNode->tagName === Tag::AUDIO) {
                    return;
                }
            }
        }

        $audio    = $document->createElement(Tag::AUDIO);
        $controls = $document->createAttribute(Attribute::CONTROLS);

        $audio->setAttributeNode($controls);
        $element->appendChild($audio);
    }
}
PK.3YsyHH\bunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Transformer/TransformedIdentifier.php<?php

namespace AmpProject\Optimizer\Transformer;

use AmpProject\Dom\Document;
use AmpProject\Optimizer\Configuration\TransformedIdentifierConfiguration;
use AmpProject\Optimizer\ErrorCollection;
use AmpProject\Optimizer\Transformer;
use AmpProject\Optimizer\TransformerConfiguration;
use AmpProject\Validator\Spec\CssRuleset\AmpTransformed;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Transformer applying the transformed identifier transformations to the HTML input.
 *
 * This is ported from the NodeJS optimizer while verifying against the Go version.
 *
 * NodeJS:
 * @version 2ca65a94b77130c91ac11fcc32c94b93cbd2b7a0
 * @link    https://github.com/ampproject/amp-toolbox/blob/2ca65a94b77130c91ac11fcc32c94b93cbd2b7a0/packages/optimizer/lib/transformers/AddTransformedFlag.js
 *
 * Go:
 * @version b26a35142e0ed1458158435b252a0fcd659f93c4
 * @link    https://github.com/ampproject/amppackager/blob/b26a35142e0ed1458158435b252a0fcd659f93c4/transformer/transformers/transformedidentifier.go
 *
 * @package ampproject/amp-toolbox
 */
final class TransformedIdentifier implements Transformer
{
    /**
     * Attribute name of the "transformed" identifier.
     *
     * @var string
     */
    const TRANSFORMED_ATTRIBUTE = 'transformed';

    /**
     * Origin to use for the "transformed" identifier.
     *
     * @var string
     */
    const TRANSFORMED_ORIGIN = 'self';

    /**
     * Configuration store to use.
     *
     * @var TransformerConfiguration
     */
    private $configuration;

    /**
     * Instantiate a TransformedIdentifier object.
     *
     * @param TransformerConfiguration $configuration Configuration store to use.
     */
    public function __construct(TransformerConfiguration $configuration)
    {
        $this->configuration = $configuration;
    }

    /**
     * Apply transformations to the provided DOM document.
     *
     * @param Document        $document DOM document to apply the transformations to.
     * @param ErrorCollection $errors   Collection of errors that are collected during transformation.
     * @return void
     */
    public function transform(Document $document, ErrorCollection $errors)
    {
        $document->html->setAttribute(self::TRANSFORMED_ATTRIBUTE, $this->getOrigin());

        // Ensure that the document uses the larges CSS byte limit for transformed documents,
        // as it would probably be set to the non-transformed limit at this point.
        $enforced_max_byte_count = $this->configuration->get(
            TransformedIdentifierConfiguration::ENFORCED_CSS_MAX_BYTE_COUNT
        );
        if ($enforced_max_byte_count !== false) {
            $document->enforceCssMaxByteCount($enforced_max_byte_count);
        }
    }

    /**
     * Get the origin that transformed the AMP document.
     *
     * @return string Origin of the transformation.
     */
    private function getOrigin()
    {
        $version = $this->configuration->get(TransformedIdentifierConfiguration::VERSION);
        $origin  = self::TRANSFORMED_ORIGIN;

        if ($version > 0) {
            $origin .= ";v={$version}";
        }

        return $origin;
    }
}
PK.3Y$�ISbunyad-amp/vendor/ampproject/amp-toolbox/src/RemoteRequest/CurlRemoteGetRequest.php<?php

namespace AmpProject\RemoteRequest;

use AmpProject\Exception\FailedRemoteRequest;
use AmpProject\Exception\FailedToGetFromRemoteUrl;
use AmpProject\RemoteGetRequest;
use AmpProject\Response;
use AmpProject\Exception\FailedToParseUrl;

/**
 * Remote request transport using cURL.
 *
 * @package ampproject/amp-toolbox
 */
final class CurlRemoteGetRequest implements RemoteGetRequest
{
    /**
     * Default timeout value to use in seconds.
     *
     * @var int
     */
    const DEFAULT_TIMEOUT = 10;

    /**
     * Default number of retry attempts to do.
     *
     * @var int
     */
    const DEFAULT_RETRIES = 2;

    /**
     * List of cURL error codes that are worth retrying for.
     *
     * @var int[]
     */
    const RETRYABLE_ERROR_CODES = [
        CURLE_COULDNT_RESOLVE_HOST,
        CURLE_COULDNT_CONNECT,
        CURLE_READ_ERROR,
        CURLE_OPERATION_TIMEOUTED,
        CURLE_HTTP_POST_ERROR,
        CURLE_SSL_CONNECT_ERROR,
    ];

    /**
     * Whether to verify SSL certificates or not.
     *
     * @var boolean
     */
    private $sslVerify;

    /**
     * Timeout value to use in seconds.
     *
     * @var int
     */
    private $timeout;

    /**
     * Number of retry attempts to do for an error that is worth retrying.
     *
     * @var int
     */
    private $retries;

    /**
     * Instantiate a CurlRemoteGetRequest object.
     *
     * @param bool $sslVerify Optional. Whether to verify SSL certificates. Defaults to true.
     * @param int  $timeout   Optional. Timeout value to use in seconds. Defaults to 10.
     * @param int  $retries   Optional. Number of retry attempts to do if an error code was thrown that is worth
     *                        retrying. Defaults to 2.
     */
    public function __construct($sslVerify = true, $timeout = self::DEFAULT_TIMEOUT, $retries = self::DEFAULT_RETRIES)
    {
        if (! is_int($timeout) || $timeout < 0) {
            $timeout = self::DEFAULT_TIMEOUT;
        }

        if (! is_int($retries) || $retries < 0) {
            $retries = self::DEFAULT_RETRIES;
        }

        $this->sslVerify = $sslVerify;
        $this->timeout   = $timeout;
        $this->retries   = $retries;
    }

    /**
     * Do a GET request to retrieve the contents of a remote URL.
     *
     * @param string $url     URL to get.
     * @param array  $headers Optional. Associative array of headers to send with the request. Defaults to empty array.
     * @return Response Response for the executed request.
     * @throws FailedRemoteRequest If retrieving the contents from the URL failed.
     */
    public function get($url, $headers = [])
    {
        $retriesLeft = $this->retries;

        if (! is_string($url) || empty($url)) {
            throw FailedToGetFromRemoteUrl::withException($url, FailedToParseUrl::forUrl($url));
        }

        do {
            $curlHandle = curl_init();

            curl_setopt($curlHandle, CURLOPT_URL, $url);
            curl_setopt($curlHandle, CURLOPT_HEADER, false);
            curl_setopt($curlHandle, CURLOPT_FOLLOWLOCATION, true);
            curl_setopt($curlHandle, CURLOPT_SSL_VERIFYPEER, $this->sslVerify);
            curl_setopt($curlHandle, CURLOPT_SSL_VERIFYHOST, $this->sslVerify ? 2 : 0);
            curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($curlHandle, CURLOPT_FAILONERROR, true);
            curl_setopt($curlHandle, CURLOPT_CONNECTTIMEOUT, $this->timeout);
            curl_setopt($curlHandle, CURLOPT_TIMEOUT, $this->timeout);

            curl_setopt(
                $curlHandle,
                CURLOPT_HEADERFUNCTION,
                static function ($curl, $header) use (&$headers) {
                    $length = strlen($header);
                    $header = array_map('trim', explode(':', $header, 2));

                    // Only store valid headers, discard invalid ones that choke on the explode.
                    if (count($header) === 2) {
                        $headers[$header[0]][] = $header[1];
                    }

                    return $length;
                }
            );

            $body   = curl_exec($curlHandle);
            $status = curl_getinfo($curlHandle, CURLINFO_HTTP_CODE);

            $curlErrno = curl_errno($curlHandle);
            curl_close($curlHandle);

            if ($body === false || $status < 200 || $status >= 300) {
                if (! $retriesLeft || in_array($curlErrno, self::RETRYABLE_ERROR_CODES, true) === false) {
                    if (! empty($status) && is_numeric($status)) {
                        throw FailedToGetFromRemoteUrl::withHttpStatus($url, (int) $status);
                    }

                    throw FailedToGetFromRemoteUrl::withoutHttpStatus($url);
                }

                continue;
            }

            return new RemoteGetRequestResponse($body, $headers, (int) $status);
        } while ($retriesLeft--);

        // This should never be triggered, but we want to ensure we always have a typed return value,
        // to make PHPStan happy.
        return new RemoteGetRequestResponse('', [], 500);
    }
}
PK.3Yv���Wbunyad-amp/vendor/ampproject/amp-toolbox/src/RemoteRequest/FallbackRemoteGetRequest.php<?php

namespace AmpProject\RemoteRequest;

use AmpProject\Exception\FailedRemoteRequest;
use AmpProject\RemoteGetRequest;
use AmpProject\Response;
use Exception;

/**
 * Fallback pipeline implementation to go through a series of fallback requests until a request succeeds.
 *
 * The request will be tried with the first instance provided, and follow the instance series from one to the next until
 * a successful response was returned.
 *
 * A successful response is a response that doesn't return boolean false and doesn't throw an exception.
 *
 * @package ampproject/amp-toolbox
 */
final class FallbackRemoteGetRequest implements RemoteGetRequest
{
    /**
     * Array of RemoteGetRequest instances to churn through.
     *
     * @var RemoteGetRequest[]
     */
    private $pipeline;

    /**
     * Instantiate a FallbackRemoteGetRequest object.
     *
     * @param RemoteGetRequest ...$pipeline Variadic array of RemoteGetRequest instances to use as consecutive
     *                                      fallbacks.
     */
    public function __construct(RemoteGetRequest ...$pipeline)
    {
        array_walk($pipeline, [$this, 'addRemoteGetRequestInstance']);
    }

    /**
     * Add a single RemoteGetRequest instance to the pipeline.
     *
     * This adds strong typing to the variadic $pipeline argument in the constructor.
     *
     * @param RemoteGetRequest $remoteGetRequest RemoteGetRequest instance to the pipeline.
     */
    private function addRemoteGetRequestInstance(RemoteGetRequest $remoteGetRequest)
    {
        $this->pipeline[] = $remoteGetRequest;
    }

    /**
     * Do a GET request to retrieve the contents of a remote URL.
     *
     * @param string $url     URL to get.
     * @param array  $headers Optional. Associative array of headers to send with the request. Defaults to empty array.
     * @return Response Response for the executed request.
     * @throws FailedRemoteRequest If retrieving the contents from the URL failed.
     */
    public function get($url, $headers = [])
    {
        foreach ($this->pipeline as $remoteGetRequest) {
            try {
                $response = $remoteGetRequest->get($url, $headers);

                if (! $response instanceof RemoteGetRequestResponse) {
                    continue;
                }

                $statusCode = $response->getStatusCode();

                if (200 <= $statusCode && $statusCode < 300) {
                    return $response;
                }
            } catch (Exception $exception) {
                // Don't let exceptions bubble up, just continue with the next instance in the pipeline.
            }
        }

        // @todo Not sure what status code to use here. "503 Service Unavailable" is a temporary server-side error.
        return new RemoteGetRequestResponse('', [], 503);
    }
}
PK.3Y����Ybunyad-amp/vendor/ampproject/amp-toolbox/src/RemoteRequest/FilesystemRemoteGetRequest.php<?php

namespace AmpProject\RemoteRequest;

use AmpProject\Exception\FailedToGetFromRemoteUrl;
use AmpProject\RemoteGetRequest;
use AmpProject\Response;
use Exception;
use LogicException;

/**
 * Fetch the response for a remote request from the local filesystem instead.
 *
 * This can be used to provide offline fallbacks.
 *
 * @package ampproject/amp-toolbox
 */
final class FilesystemRemoteGetRequest implements RemoteGetRequest
{
    /**
     * Associative array of data for mapping between arguments and filepaths pointing to the results to return.
     *
     * @var array
     */
    private $argumentMap;

    /**
     * Instantiate a FilesystemRemoteGetRequest object.
     *
     * @param array $argumentMap Associative array of data for mapping between arguments and filepaths pointing to the
     *                           results to return.
     */
    public function __construct($argumentMap)
    {
        $this->argumentMap = $argumentMap;
    }

    /**
     * Do a GET request to retrieve the contents of a remote URL.
     *
     * @param string $url     URL to get.
     * @param array  $headers Optional. Associative array of headers to send with the request. Defaults to empty array.
     * @return Response Response for the executed request.
     * @throws FailedToGetFromRemoteUrl If retrieving the contents from the URL failed.
     * @throws LogicException If invalid file path and/or invalid or non-readable file.
     */
    public function get($url, $headers = [])
    {
        if (! array_key_exists($url, $this->argumentMap)) {
            throw new LogicException("Trying to get a remote request from the filesystem for an unknown URL: {$url}.");
        }

        if (! file_exists($this->argumentMap[$url]) || ! is_readable($this->argumentMap[$url])) {
            throw new LogicException(
                'Trying to get a remote request from the filesystem for a file that is not accessible: '
                . "{$url} => {$this->argumentMap[$url]}."
            );
        }

        try {
            return new RemoteGetRequestResponse(file_get_contents($this->argumentMap[$url]));
        } catch (Exception $exception) {
            throw FailedToGetFromRemoteUrl::withException($url, $exception);
        }
    }
}
PK.3Y��^Wbunyad-amp/vendor/ampproject/amp-toolbox/src/RemoteRequest/RemoteGetRequestResponse.php<?php

namespace AmpProject\RemoteRequest;

use AmpProject\Response;

/**
 * Stub for simulating remote requests.
 *
 * @package ampproject/amp-toolbox
 */
final class RemoteGetRequestResponse implements Response
{
    /**
     * Body of the response.
     *
     * @var mixed
     */
    private $body;

    /**
     * Headers of the response.
     *
     * @var string[][]
     */
    private $headers;

    /**
     * Index mapping lowercase keys to actual keys in $this->headers.
     *
     * This is used for case-insensitive lookups.
     *
     * @var string[]
     */
    private $headersIndex;

    /**
     * Status code of the response.
     *
     * @var int
     */
    private $statusCode;

    /**
     * Instantiate a RemoteGetRequestResponse object.
     *
     * @param mixed      $body       Body of the response.
     * @param string[][] $headers    Headers of the response.
     * @param int        $statusCode Status code of the response.
     */
    public function __construct($body, $headers = [], $statusCode = 200)
    {
        $this->body       = $body;
        $this->headers    = $headers;
        $this->statusCode = $statusCode;
    }

    /**
     * Retrieves all message header values.
     *
     * The keys represent the header name as it will be sent over the wire, and each value is an array of strings
     * associated with the header.
     *
     *     // Represent the headers as a string
     *     foreach ($message->getHeaders() as $name => $values) {
     *         echo $name . ': ' . implode(', ', $values);
     *     }
     *
     *     // Emit headers iteratively:
     *     foreach ($message->getHeaders() as $name => $values) {
     *         foreach ($values as $value) {
     *             header(sprintf('%s: %s', $name, $value), false);
     *         }
     *     }
     *
     * While header names are not case-sensitive, getHeaders() will preserve the exact case in which headers were
     * originally specified.
     *
     * @return string[][] Returns an associative array of the message's headers. Each key MUST be a header name, and
     *                    each value MUST be an array of strings for that header.
     */
    public function getHeaders()
    {
        return $this->headers;
    }

    /**
     * Checks if a header exists by the given case-insensitive name.
     *
     * @param string $name Case-insensitive header field name.
     * @return bool Returns true if any header names match the given header name using a case-insensitive string
     *              comparison. Returns false if no matching header name is found in the message.
     */
    public function hasHeader($name)
    {
        $this->maybeInitHeadersIndex();
        return array_key_exists(strtolower($name), $this->headersIndex);
    }

    /**
     * Retrieves a message header value by the given case-insensitive name.
     *
     * This method returns an array of all the header values of the given case-insensitive header name.
     *
     * If the header does not appear in the message, this method MUST return an empty array.
     *
     * @param string $name Case-insensitive header field name.
     * @return string[] An array of string values as provided for the given header. If the header does not appear in
     *                  the message, this method MUST return an empty array.
     */
    public function getHeader($name)
    {
        $this->maybeInitHeadersIndex();
        $key = strtolower($name);

        if (! array_key_exists($key, $this->headersIndex)) {
            return [];
        }

        return (array) $this->headers[$this->headersIndex[$key]];
    }

    /**
     * Retrieves a comma-separated string of the values for a single header.
     *
     * This method returns all of the header values of the given case-insensitive header name as a string concatenated
     * together using a comma.
     *
     * NOTE: Not all header values may be appropriately represented using comma concatenation. For such headers, use
     * getHeader() instead and supply your own delimiter when concatenating.
     *
     * If the header does not appear in the message, this method MUST return an empty string.
     *
     * @param string $name Case-insensitive header field name.
     * @return string A string of values as provided for the given header concatenated together using a comma. If the
     *                header does not appear in the message, this method MUST return an empty string.
     */
    public function getHeaderLine($name)
    {
        $key = strtolower($name);

        if (! array_key_exists($key, $this->headersIndex)) {
            return '';
        }

        return implode(',', (array)$this->headers[$this->headersIndex[$key]]);
    }

    /**
     * Gets the response status code.
     *
     * The status code is a 3-digit integer result code of the server's attempt to understand and satisfy the request.
     *
     * @return int Status code.
     */
    public function getStatusCode()
    {
        return $this->statusCode;
    }

    /**
     * Get the body of the response.
     *
     * @return mixed Body of the response.
     */
    public function getBody()
    {
        return $this->body;
    }

    /**
     * Initial the headersIndex for case-insensitive lookups if that hasn't been done yet.
     */
    private function maybeInitHeadersIndex()
    {
        if ($this->headersIndex !== null) {
            return;
        }

        $this->headersIndex = array_combine(array_keys($this->headers), array_keys($this->headers));
        $this->headersIndex = array_change_key_case($this->headersIndex, CASE_LOWER);
    }
}
PK.3Y�H�$Vbunyad-amp/vendor/ampproject/amp-toolbox/src/RemoteRequest/StubbedRemoteGetRequest.php<?php

namespace AmpProject\RemoteRequest;

use AmpProject\Exception\FailedRemoteRequest;
use AmpProject\RemoteGetRequest;
use AmpProject\Response;
use LogicException;

/**
 * Stub for simulating remote requests.
 *
 * @package ampproject/amp-toolbox
 */
final class StubbedRemoteGetRequest implements RemoteGetRequest
{
    /**
     * Associative array of data for mapping between arguments and returned results.
     *
     * @var array
     */
    private $argumentMap;

    /**
     * Instantiate a StubbedRemoteGetRequest object.
     *
     * @param array $argumentMap Associative array of data for mapping between arguments and returned results.
     */
    public function __construct($argumentMap)
    {
        $this->argumentMap = $argumentMap;
    }

    /**
     * Do a GET request to retrieve the contents of a remote URL.
     *
     * @param string $url     URL to get.
     * @param array  $headers Optional. Associative array of headers to send with the request. Defaults to empty array.
     * @return Response Response for the executed request.
     * @throws FailedRemoteRequest If retrieving the contents from the URL failed.
     */
    public function get($url, $headers = [])
    {
        if (! array_key_exists($url, $this->argumentMap)) {
            throw new LogicException("Trying to stub a remote request for an unknown URL: {$url}.");
        }

        $args = $this->argumentMap[$url];
        return new RemoteGetRequestResponse($args['body'], [], isset($args['status']) ? $args['status'] : 200);
    }
}
PK.3Y��h�hhbbunyad-amp/vendor/ampproject/amp-toolbox/src/RemoteRequest/TemporaryFileCachedRemoteGetRequest.php<?php

namespace AmpProject\RemoteRequest;

use AmpProject\Exception\FailedToGetCachedResponse;
use AmpProject\RemoteGetRequest;
use AmpProject\Response;
use DateTimeImmutable;
use Exception;

/**
 * Temporarily cache remote response.
 *
 * @package ampproject/amp-toolbox
 */
final class TemporaryFileCachedRemoteGetRequest implements RemoteGetRequest
{
    /**
     * Prefix to use to identify cached file.
     *
     * @var string
     */
    const CACHED_FILE_PREFIX = 'amp-remote-request-';

    /**
     * Cache control header directive name.
     *
     * @var string
     */
    const CACHE_CONTROL = 'Cache-Control';

    /**
     * Default cache expiration time in seconds.
     *
     * The number represents one month time in seconds. It will be used by default for successful requests when
     * the 'cache-control: max-age' was not provided.
     *
     * @var int
     */
    const EXPIRY_TIME = 2592000;

    /**
     * The decorated RemoteGetRequest instance.
     *
     * @var RemoteGetRequest
     */
    private $remoteGetRequest;

    /**
     * Absolute path to the directory where temporary files are saved.
     *
     * @var string
     */
    private $directory;

    /**
     * Instantiate a TemporaryFileCachedRemoteGetRequest object.
     *
     * @param RemoteGetRequest $remoteGetRequest The decorated RemoteGetRequest object.
     * @param string           $directory        Optional. Absolute path to the directory where temporary files are
     *                                           saved.
     */
    public function __construct(RemoteGetRequest $remoteGetRequest, $directory = '')
    {
        $this->remoteGetRequest = $remoteGetRequest;
        $this->directory        = $directory ? $directory : sys_get_temp_dir();
    }

    /**
     * Get the cached request from a temporary file.
     *
     * @param string $url     URL to get.
     * @param array  $headers Optional. Associative array of headers to send with the request. Defaults to empty array.
     * @return Response Response for the executed request.
     * @throws FailedToGetCachedResponse If retrieving the contents from the cache failed.
     */
    public function get($url, $headers = [])
    {
        $file = $this->getTemporaryFilePath($url);

        if (! file_exists($file)) {
            return $this->getRemoteResponse($url, $headers);
        }

        $cachedResponse = file_get_contents($file);

        // phpcs:disable PHPCompatibility.FunctionUse.NewFunctionParameters.unserialize_optionsFound
        if ($cachedResponse !== false) {
            if (PHP_MAJOR_VERSION >= 7) {
                $cachedResponse = unserialize($cachedResponse, [RemoteGetRequestResponse::class]);
            } else {
                // PHP 5.6 does not provide the second $options argument yet.
                $cachedResponse = unserialize($cachedResponse);
            }
        }
        // phpcs:enable PHPCompatibility.FunctionUse.NewFunctionParameters.unserialize_optionsFound

        if (! $cachedResponse instanceof RemoteGetRequestResponse || $this->isExpired($file, $cachedResponse)) {
            return $this->getRemoteResponse($url, $headers);
        }

        return $cachedResponse;
    }

    /**
     * Get the absolute path of the temporary file.
     *
     * @param string $url The request url.
     * @return string The absolute path to the temporary file.
     */
    private function getTemporaryFilePath($url)
    {
        $filename = self::CACHED_FILE_PREFIX . md5($url);
        return "{$this->directory}/{$filename}";
    }

    /**
     * Get the remote response using the decorated RemoteGetRequest object.
     *
     * @param string $url     URL to get.
     * @param array  $headers Associative array of headers to send with the request.
     * @return Response Response for the executed request.
     * @throws FailedToGetCachedResponse If the remote GET request could not be executed.
     */
    private function getRemoteResponse($url, $headers)
    {
        try {
            $response = $this->remoteGetRequest->get($url, $headers);
            $this->cacheResponse($url, $response);
            return $response;
        } catch (Exception $error) {
            throw FailedToGetCachedResponse::withUrl($url);
        }
    }

    /**
     * Save the response in a temporary file.
     *
     * @param string   $url      The request url.
     * @param Response $response The response that needs to be cached.
     */
    private function cacheResponse($url, Response $response)
    {
        $statusCode = $response->getStatusCode();
        if ($statusCode < 200 || $statusCode >= 300) {
            return;
        }

        file_put_contents($this->getTemporaryFilePath($url), serialize($response));
    }

    /**
     * Check whether the request is expired.
     *
     * @param string                   $file     The absolute path of the file that contains the response data.
     * @param RemoteGetRequestResponse $response The response that needs to be checked.
     * @return bool
     */
    private function isExpired($file, RemoteGetRequestResponse $response)
    {
        $expiry = $this->getExpiryTime($file, $response);

        return microtime(true) > $expiry->getTimestamp();
    }

    /**
     * Calculate the expiry time.
     *
     * @param string                   $file     The absolute path of the file that contains the response data.
     * @param RemoteGetRequestResponse $response The response data that needs to be calculated.
     *
     * @return DateTimeImmutable Cache expiry time object.
     */
    private function getExpiryTime($file, RemoteGetRequestResponse $response)
    {
        $expiry           = self::EXPIRY_TIME;
        $fileModifiedTime = (new DateTimeImmutable())->setTimestamp(filemtime($file));

        if ($response->hasHeader(self::CACHE_CONTROL)) {
            $maxAge = $this->getMaxAge($response->getHeader(self::CACHE_CONTROL));
            $expiry = ($maxAge >= 0) ? $maxAge : $expiry;
        }

        return $fileModifiedTime->modify("{$expiry} sec");
    }

    /**
     * Extract the max-age from response header.
     *
     * @param array $cacheControlStrings Cache-Control header value.
     * @return int The max-age value of the Cache-Control header.
     */
    private function getMaxAge($cacheControlStrings)
    {
        $maxAge = -1;

        foreach ((array) $cacheControlStrings as $cacheControlString) {
            $cacheControlParts = array_map('trim', explode(',', $cacheControlString));

            foreach ($cacheControlParts as $cacheControlPart) {
                $cacheControlSettingParts = array_map('trim', explode('=', $cacheControlPart));

                if (count($cacheControlSettingParts) !== 2) {
                    continue;
                }

                if ($cacheControlSettingParts[0] === 'max-age') {
                    $maxAge = abs((int)$cacheControlSettingParts[1]);
                }
            }
        }

        return $maxAge;
    }
}
PK.3Y*C�llBbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Context.php<?php

namespace AmpProject\Validator;

use AmpProject\Html\Parser\DocLocator;
use AmpProject\Html\Parser\ParsedAttribute;

/**
 * The Context keeps track of the line / column that the validator is in, as well as the mandatory tag specs that have
 * already been validated. So, this constitutes the mutable state for the validator except for the validation result
 * itself.
 *
 * @package ampproject/amp-toolbox
 */
final class Context
{
    /**
     * Validator rules to be applied.
     *
     * @var ValidatorRules
     */
    private $rules;

    /**
     * The mandatory alternatives that we've validated (a small list of ids).
     *
     * @var array<int>
     */
    private $mandatoryAlternativesSatisfied = [];

    /**
     * Set of type identifiers in this document.
     *
     * @var array<string>
     */
    private $typeIdentifiers = [];

    /**
     * DocLocator object from the parser which gives us line / column numbers.
     *
     * @var DocLocator
     */
    private $locator;

    /**
     * Attributes that were found in the (last) <body> tag.
     *
     * @var ParsedAttribute[]|null
     */
    private $encounteredBodyAttributes;

    /**
     * Position in the file of the (last) <body> tag.
     *
     * @var FilePosition
     */
    private $encounteredBodyFilePosition;

    /**
     * Context keeping track of the extensions.
     *
     * @var ExtensionsContext
     */
    private $extensionsContext;

    /**
     * Instantiate a Context object.
     *
     * @param ValidatorRules $rules Validator rules to be applied.
     */
    public function __construct(ValidatorRules $rules)
    {
        $this->rules             = $rules;
        $this->extensionsContext = new ExtensionsContext();
    }

    /**
     * Set the document locator to be used.
     *
     * @param DocLocator $locator DocLocator instance to use.
     */
    public function setDocLocator(DocLocator $locator)
    {
        $this->locator = $locator;
    }


    /**
     * Get the validation rules to be applied.
     *
     * @return ValidatorRules Validation rules.
     */
    public function getRules()
    {
        return $this->rules;
    }

    /**
     * Get the line and column positions into the file.
     *
     * @return FilePosition
     */
    public function getFilePosition()
    {
        return new FilePosition($this->locator->getLine(), $this->locator->getColumn());
    }

    /**
     * Add an error field to validationResult with severity WARNING.
     *
     * @param int              $validationErrorCode Error code.
     * @param FilePosition     $filePosition        Position into the file as a line / column pair.
     * @param array            $params              Additional params to store with the error.
     * @param string           $specUrl             A link (URL) to the amphtml spec.
     * @param ValidationResult $validationResult    Validation result to add the warning to.
     */
    public function addWarning($validationErrorCode, FilePosition $filePosition, $params, $specUrl, $validationResult)
    {
        $this->recordError(
            new ValidationError(
                ValidationSeverity::WARNING(),
                $validationErrorCode,
                $filePosition->getLine(),
                $filePosition->getColumn(),
                $specUrl,
                $params
            ),
            $validationResult
        );
    }

    /**
     * Add an error field to validationResult with severity ERROR.
     *
     * @param int              $validationErrorCode Error code.
     * @param FilePosition     $filePosition        Position into the file as a line / column pair.
     * @param array            $params              Additional params to store with the error.
     * @param string           $specUrl             A link (URL) to the amphtml spec.
     * @param ValidationResult $validationResult    Validation result to add the warning to.
     */
    public function addError($validationErrorCode, FilePosition $filePosition, $params, $specUrl, $validationResult)
    {
        $this->recordError(
            new ValidationError(
                ValidationSeverity::ERROR(),
                $validationErrorCode,
                $filePosition->getLine(),
                $filePosition->getColumn(),
                $specUrl,
                $params
            ),
            $validationResult
        );
    }

    /**
     * Record an encountered <body> tag.
     *
     * @param ParsedAttribute[] $attributes Attributes of the body tag.
     */
    public function recordBodyTag($attributes)
    {
        $this->encounteredBodyAttributes   = $attributes;
        $this->encounteredBodyFilePosition = $this->getFilePosition();
    }

    /**
     * Record an error and check if the status needs to be adapted.
     *
     * @param ValidationError  $error            Error to record.
     * @param ValidationResult $validationResult Validation result to adapt.
     */
    public function recordError(ValidationError $error, ValidationResult $validationResult)
    {
        // If any of the errors amount to more than a WARNING, validation fails.
        if (! $error->getSeverity()->equals(ValidationSeverity::WARNING())) {
            $validationResult->setStatus(ValidationStatus::FAIL());
        }

        $validationResult->getErrors()->add($error);
    }

    /**
     * Get the extensions context.
     *
     * @return ExtensionsContext Extensions context.
     */
    public function getExtensionsContext()
    {
        return $this->extensionsContext;
    }

    /**
     * Get the set of encountered <body> tag attributes.
     *
     * If no <body> tag has been encountered yet, this returns null instead.
     *
     * @return ParsedAttribute[]|null Array of attributes, or null if no <body> tag was encountered yet.
     */
    public function getEncounteredBodyAttributes()
    {
        return $this->encounteredBodyAttributes;
    }

    /**
     * Get the position within the file of the encountered <body> tag.
     *
     * @return FilePosition Position within the file of the encountered <body> tag.
     */
    public function getEncounteredBodyFilePosition()
    {
        return $this->encounteredBodyFilePosition;
    }

    /**
     * Record a newly encountered type identifier.
     *
     * @param string $typeIdentifier Type identifier to record.
     */
    public function recordTypeIdentifier($typeIdentifier)
    {
        $this->typeIdentifiers[] = $typeIdentifier;
    }
}
PK.3Y�
h\"\"Dbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/ErrorCode.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator;

interface ErrorCode
{
    const AMP_EMAIL_MISSING_STRICT_CSS_ATTR = 'AMP_EMAIL_MISSING_STRICT_CSS_ATTR';
    const ATTR_DISALLOWED_BY_IMPLIED_LAYOUT = 'ATTR_DISALLOWED_BY_IMPLIED_LAYOUT';
    const ATTR_DISALLOWED_BY_SPECIFIED_LAYOUT = 'ATTR_DISALLOWED_BY_SPECIFIED_LAYOUT';
    const ATTR_MISSING_REQUIRED_EXTENSION = 'ATTR_MISSING_REQUIRED_EXTENSION';
    const ATTR_REQUIRED_BUT_MISSING = 'ATTR_REQUIRED_BUT_MISSING';
    const ATTR_VALUE_REQUIRED_BY_LAYOUT = 'ATTR_VALUE_REQUIRED_BY_LAYOUT';
    const BASE_TAG_MUST_PRECEED_ALL_URLS = 'BASE_TAG_MUST_PRECEED_ALL_URLS';
    const CDATA_VIOLATES_DENYLIST = 'CDATA_VIOLATES_DENYLIST';
    const CHILD_TAG_DOES_NOT_SATISFY_REFERENCE_POINT = 'CHILD_TAG_DOES_NOT_SATISFY_REFERENCE_POINT';
    const CHILD_TAG_DOES_NOT_SATISFY_REFERENCE_POINT_SINGULAR = 'CHILD_TAG_DOES_NOT_SATISFY_REFERENCE_POINT_SINGULAR';
    const CSS_EXCESSIVELY_NESTED = 'CSS_EXCESSIVELY_NESTED';
    const CSS_SYNTAX_BAD_URL = 'CSS_SYNTAX_BAD_URL';
    const CSS_SYNTAX_DISALLOWED_ATTR_SELECTOR = 'CSS_SYNTAX_DISALLOWED_ATTR_SELECTOR';
    const CSS_SYNTAX_DISALLOWED_DOMAIN = 'CSS_SYNTAX_DISALLOWED_DOMAIN';
    const CSS_SYNTAX_DISALLOWED_IMPORTANT = 'CSS_SYNTAX_DISALLOWED_IMPORTANT';
    const CSS_SYNTAX_DISALLOWED_KEYFRAME_INSIDE_KEYFRAME = 'CSS_SYNTAX_DISALLOWED_KEYFRAME_INSIDE_KEYFRAME';
    const CSS_SYNTAX_DISALLOWED_MEDIA_FEATURE = 'CSS_SYNTAX_DISALLOWED_MEDIA_FEATURE';
    const CSS_SYNTAX_DISALLOWED_MEDIA_TYPE = 'CSS_SYNTAX_DISALLOWED_MEDIA_TYPE';
    const CSS_SYNTAX_DISALLOWED_PROPERTY_VALUE = 'CSS_SYNTAX_DISALLOWED_PROPERTY_VALUE';
    const CSS_SYNTAX_DISALLOWED_PROPERTY_VALUE_WITH_HINT = 'CSS_SYNTAX_DISALLOWED_PROPERTY_VALUE_WITH_HINT';
    const CSS_SYNTAX_DISALLOWED_PSEUDO_CLASS = 'CSS_SYNTAX_DISALLOWED_PSEUDO_CLASS';
    const CSS_SYNTAX_DISALLOWED_PSEUDO_ELEMENT = 'CSS_SYNTAX_DISALLOWED_PSEUDO_ELEMENT';
    const CSS_SYNTAX_DISALLOWED_QUALIFIED_RULE_MUST_BE_INSIDE_KEYFRAME = 'CSS_SYNTAX_DISALLOWED_QUALIFIED_RULE_MUST_BE_INSIDE_KEYFRAME';
    const CSS_SYNTAX_DISALLOWED_RELATIVE_URL = 'CSS_SYNTAX_DISALLOWED_RELATIVE_URL';
    const CSS_SYNTAX_EOF_IN_PRELUDE_OF_QUALIFIED_RULE = 'CSS_SYNTAX_EOF_IN_PRELUDE_OF_QUALIFIED_RULE';
    const CSS_SYNTAX_ERROR_IN_PSEUDO_SELECTOR = 'CSS_SYNTAX_ERROR_IN_PSEUDO_SELECTOR';
    const CSS_SYNTAX_INCOMPLETE_DECLARATION = 'CSS_SYNTAX_INCOMPLETE_DECLARATION';
    const CSS_SYNTAX_INVALID_ATTR_SELECTOR = 'CSS_SYNTAX_INVALID_ATTR_SELECTOR';
    const CSS_SYNTAX_INVALID_AT_RULE = 'CSS_SYNTAX_INVALID_AT_RULE';
    const CSS_SYNTAX_INVALID_DECLARATION = 'CSS_SYNTAX_INVALID_DECLARATION';
    const CSS_SYNTAX_INVALID_PROPERTY = 'CSS_SYNTAX_INVALID_PROPERTY';
    const CSS_SYNTAX_INVALID_PROPERTY_NOLIST = 'CSS_SYNTAX_INVALID_PROPERTY_NOLIST';
    const CSS_SYNTAX_INVALID_URL = 'CSS_SYNTAX_INVALID_URL';
    const CSS_SYNTAX_INVALID_URL_PROTOCOL = 'CSS_SYNTAX_INVALID_URL_PROTOCOL';
    const CSS_SYNTAX_MALFORMED_MEDIA_QUERY = 'CSS_SYNTAX_MALFORMED_MEDIA_QUERY';
    const CSS_SYNTAX_MISSING_SELECTOR = 'CSS_SYNTAX_MISSING_SELECTOR';
    const CSS_SYNTAX_MISSING_URL = 'CSS_SYNTAX_MISSING_URL';
    const CSS_SYNTAX_NOT_A_SELECTOR_START = 'CSS_SYNTAX_NOT_A_SELECTOR_START';
    const CSS_SYNTAX_PROPERTY_DISALLOWED_TOGETHER_WITH = 'CSS_SYNTAX_PROPERTY_DISALLOWED_TOGETHER_WITH';
    const CSS_SYNTAX_PROPERTY_DISALLOWED_WITHIN_AT_RULE = 'CSS_SYNTAX_PROPERTY_DISALLOWED_WITHIN_AT_RULE';
    const CSS_SYNTAX_PROPERTY_REQUIRES_QUALIFICATION = 'CSS_SYNTAX_PROPERTY_REQUIRES_QUALIFICATION';
    const CSS_SYNTAX_QUALIFIED_RULE_HAS_NO_DECLARATIONS = 'CSS_SYNTAX_QUALIFIED_RULE_HAS_NO_DECLARATIONS';
    const CSS_SYNTAX_STRAY_TRAILING_BACKSLASH = 'CSS_SYNTAX_STRAY_TRAILING_BACKSLASH';
    const CSS_SYNTAX_UNPARSED_INPUT_REMAINS_IN_SELECTOR = 'CSS_SYNTAX_UNPARSED_INPUT_REMAINS_IN_SELECTOR';
    const CSS_SYNTAX_UNTERMINATED_COMMENT = 'CSS_SYNTAX_UNTERMINATED_COMMENT';
    const CSS_SYNTAX_UNTERMINATED_STRING = 'CSS_SYNTAX_UNTERMINATED_STRING';
    const DEPRECATED_ATTR = 'DEPRECATED_ATTR';
    const DEPRECATED_TAG = 'DEPRECATED_TAG';
    const DEV_MODE_ONLY = 'DEV_MODE_ONLY';
    const DISALLOWED_AMP_DOMAIN = 'DISALLOWED_AMP_DOMAIN';
    const DISALLOWED_ATTR = 'DISALLOWED_ATTR';
    const DISALLOWED_CHILD_TAG_NAME = 'DISALLOWED_CHILD_TAG_NAME';
    const DISALLOWED_DOMAIN = 'DISALLOWED_DOMAIN';
    const DISALLOWED_FIRST_CHILD_TAG_NAME = 'DISALLOWED_FIRST_CHILD_TAG_NAME';
    const DISALLOWED_MANUFACTURED_BODY = 'DISALLOWED_MANUFACTURED_BODY';
    const DISALLOWED_PROPERTY_IN_ATTR_VALUE = 'DISALLOWED_PROPERTY_IN_ATTR_VALUE';
    const DISALLOWED_RELATIVE_URL = 'DISALLOWED_RELATIVE_URL';
    const DISALLOWED_SCRIPT_TAG = 'DISALLOWED_SCRIPT_TAG';
    const DISALLOWED_STYLE_ATTR = 'DISALLOWED_STYLE_ATTR';
    const DISALLOWED_TAG = 'DISALLOWED_TAG';
    const DISALLOWED_TAG_ANCESTOR = 'DISALLOWED_TAG_ANCESTOR';
    const DOCUMENT_SIZE_LIMIT_EXCEEDED = 'DOCUMENT_SIZE_LIMIT_EXCEEDED';
    const DOCUMENT_TOO_COMPLEX = 'DOCUMENT_TOO_COMPLEX';
    const DUPLICATE_ATTRIBUTE = 'DUPLICATE_ATTRIBUTE';
    const DUPLICATE_DIMENSION = 'DUPLICATE_DIMENSION';
    const DUPLICATE_REFERENCE_POINT = 'DUPLICATE_REFERENCE_POINT';
    const DUPLICATE_UNIQUE_TAG = 'DUPLICATE_UNIQUE_TAG';
    const DUPLICATE_UNIQUE_TAG_WARNING = 'DUPLICATE_UNIQUE_TAG_WARNING';
    const EXTENSION_UNUSED = 'EXTENSION_UNUSED';
    const GENERAL_DISALLOWED_TAG = 'GENERAL_DISALLOWED_TAG';
    const IMPLIED_LAYOUT_INVALID = 'IMPLIED_LAYOUT_INVALID';
    const INCONSISTENT_UNITS_FOR_WIDTH_AND_HEIGHT = 'INCONSISTENT_UNITS_FOR_WIDTH_AND_HEIGHT';
    const INCORRECT_MIN_NUM_CHILD_TAGS = 'INCORRECT_MIN_NUM_CHILD_TAGS';
    const INCORRECT_NUM_CHILD_TAGS = 'INCORRECT_NUM_CHILD_TAGS';
    const INCORRECT_SCRIPT_RELEASE_VERSION = 'INCORRECT_SCRIPT_RELEASE_VERSION';
    const INLINE_SCRIPT_TOO_LONG = 'INLINE_SCRIPT_TOO_LONG';
    const INLINE_STYLE_TOO_LONG = 'INLINE_STYLE_TOO_LONG';
    const INVALID_ATTR_VALUE = 'INVALID_ATTR_VALUE';
    const INVALID_DOCTYPE_HTML = 'INVALID_DOCTYPE_HTML';
    const INVALID_EXTENSION_PATH = 'INVALID_EXTENSION_PATH';
    const INVALID_EXTENSION_VERSION = 'INVALID_EXTENSION_VERSION';
    const INVALID_JSON_CDATA = 'INVALID_JSON_CDATA';
    const INVALID_PROPERTY_VALUE_IN_ATTR_VALUE = 'INVALID_PROPERTY_VALUE_IN_ATTR_VALUE';
    const INVALID_URL = 'INVALID_URL';
    const INVALID_URL_PROTOCOL = 'INVALID_URL_PROTOCOL';
    const INVALID_UTF8 = 'INVALID_UTF8';
    const LTS_SCRIPT_AFTER_NON_LTS = 'LTS_SCRIPT_AFTER_NON_LTS';
    const MANDATORY_ANYOF_ATTR_MISSING = 'MANDATORY_ANYOF_ATTR_MISSING';
    const MANDATORY_ATTR_MISSING = 'MANDATORY_ATTR_MISSING';
    const MANDATORY_CDATA_MISSING_OR_INCORRECT = 'MANDATORY_CDATA_MISSING_OR_INCORRECT';
    const MANDATORY_LAST_CHILD_TAG = 'MANDATORY_LAST_CHILD_TAG';
    const MANDATORY_ONEOF_ATTR_MISSING = 'MANDATORY_ONEOF_ATTR_MISSING';
    const MANDATORY_PROPERTY_MISSING_FROM_ATTR_VALUE = 'MANDATORY_PROPERTY_MISSING_FROM_ATTR_VALUE';
    const MANDATORY_REFERENCE_POINT_MISSING = 'MANDATORY_REFERENCE_POINT_MISSING';
    const MANDATORY_TAG_ANCESTOR = 'MANDATORY_TAG_ANCESTOR';
    const MANDATORY_TAG_ANCESTOR_WITH_HINT = 'MANDATORY_TAG_ANCESTOR_WITH_HINT';
    const MANDATORY_TAG_MISSING = 'MANDATORY_TAG_MISSING';
    const MISSING_LAYOUT_ATTRIBUTES = 'MISSING_LAYOUT_ATTRIBUTES';
    const MISSING_REQUIRED_EXTENSION = 'MISSING_REQUIRED_EXTENSION';
    const MISSING_URL = 'MISSING_URL';
    const MUTUALLY_EXCLUSIVE_ATTRS = 'MUTUALLY_EXCLUSIVE_ATTRS';
    const NON_LTS_SCRIPT_AFTER_LTS = 'NON_LTS_SCRIPT_AFTER_LTS';
    const NON_WHITESPACE_CDATA_ENCOUNTERED = 'NON_WHITESPACE_CDATA_ENCOUNTERED';
    const SPECIFIED_LAYOUT_INVALID = 'SPECIFIED_LAYOUT_INVALID';
    const STYLESHEET_AND_INLINE_STYLE_TOO_LONG = 'STYLESHEET_AND_INLINE_STYLE_TOO_LONG';
    const STYLESHEET_TOO_LONG = 'STYLESHEET_TOO_LONG';
    const TAG_EXCLUDED_BY_TAG = 'TAG_EXCLUDED_BY_TAG';
    const TAG_NOT_ALLOWED_TO_HAVE_SIBLINGS = 'TAG_NOT_ALLOWED_TO_HAVE_SIBLINGS';
    const TAG_REFERENCE_POINT_CONFLICT = 'TAG_REFERENCE_POINT_CONFLICT';
    const TAG_REQUIRED_BY_MISSING = 'TAG_REQUIRED_BY_MISSING';
    const TEMPLATE_IN_ATTR_NAME = 'TEMPLATE_IN_ATTR_NAME';
    const TEMPLATE_PARTIAL_IN_ATTR_VALUE = 'TEMPLATE_PARTIAL_IN_ATTR_VALUE';
    const UNESCAPED_TEMPLATE_IN_ATTR_VALUE = 'UNESCAPED_TEMPLATE_IN_ATTR_VALUE';
    const UNKNOWN_CODE = 'UNKNOWN_CODE';
    const VALUE_SET_MISMATCH = 'VALUE_SET_MISMATCH';
    const WARNING_EXTENSION_DEPRECATED_VERSION = 'WARNING_EXTENSION_DEPRECATED_VERSION';
    const WARNING_EXTENSION_UNUSED = 'WARNING_EXTENSION_UNUSED';
    const WARNING_TAG_REQUIRED_BY_MISSING = 'WARNING_TAG_REQUIRED_BY_MISSING';
    const WRONG_PARENT_TAG = 'WRONG_PARENT_TAG';
}
PK.3Yrΰ1��Lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/ExtensionsContext.php<?php

namespace AmpProject\Validator;

use AmpProject\Extension;

/**
 * The extensions context keeps track of the extensions that the validator has seen, as well as which have been used,
 * which are required to be used, etc.
 *
 * @package ampproject/amp-toolbox
 */
final class ExtensionsContext
{
    /**
     * Extensions that have been already loaded.
     *
     * This tracks the valid <script> tags loading amp extensions which were seen in the document's head. Most
     * extensions are also added to $extensionsUnusedRequired when encountered in the head. When a tag is seen later in
     * the document which makes use of an extension, that extension is recorded in $extensionsUsed.
     *
     * @var string[]
     */
    private $extensionsLoaded = [
        // AMP-AD is exempted to not require the respective extension javascript file for historical reasons. We still
        // need to mark that the extension is used if we see the tags.
        Extension::AD,
    ];

    /**
     * Extensions recorded as being used.
     *
     * @var string[]
     */
    private $extensionsUsed = [];

    /**
     * Extensions marked as required but not yet recorded as being used.
     *
     * @var string[]
     */
    private $extensionsUnusedRequired = [];

    /**
     * Validation errors due to missing required extensions.
     *
     * @var ValidationError[]
     */
    private $extensionMissingErrors = [];

    /**
     * Check if the given extension has already been loaded.
     *
     * Note that this assumes that all extensions will be loaded in the document earlier than their first usage. This
     * is
     * true for <amp-foo> tags, since the extension must be loaded in the head and <amp-foo> tags are not supported in
     * the head as per HTML spec.
     *
     * @param string $extension Extension to check.
     * @return bool Whether the extension is loaded.
     */
    private function isExtensionLoaded($extension)
    {
        return in_array($extension, $this->extensionsLoaded, true);
    }

    /*
    /**
     * Record a possible error to report once we have collected all
     * extensions in the document. If the given extension is missing,
     * then report the given error.
     *
     * @param ParsedTagSpec $parsedTagSpec
     * @param FilePosition  $filePosition
     * /
    private function recordFutureErrorsIfMissing(ParsedTagSpec $parsedTagSpec, FilePosition $filePosition)
    {
        const tagSpec = parsedTagSpec.getSpec();
        for (const requiredExtension of tagSpec.requiresExtension) {
        if (!this.isExtensionLoaded(requiredExtension)) {
            const error = new generated.ValidationError();
            error.severity = generated.ValidationError.Severity.ERROR;
            error.code = generated.ValidationError.Code.MISSING_REQUIRED_EXTENSION;
            error.params = [getTagDescriptiveName(tagSpec), requiredExtension];
            error.line = lineCol.getLine();
            error.col = lineCol.getCol();
            error.specUrl = getTagSpecUrl(tagSpec);

            this.extensionMissingErrors_.push(
                {missingExtension: requiredExtension, maybeError: error});
            }
        }
    }
    */

    /**
     * Returns a list of errors accrued while processing the <head> for tags requiring an extension which was not found.
     *
     * @return ValidationError[]
     */
    public function getMissingExtensionErrors()
    {
        $result = [];
        foreach ($this->extensionMissingErrors as $extensionMissingError) {
            if (! $this->isExtensionLoaded($extensionMissingError->missingExtension)) {
                $result[] = $extensionMissingError->maybeError;
            }
        }

        return $result;
    }

    /**
     * Records extensions that are used within the document.
     *
     * @param string[] $extensions Extensions to record as being used.
     */
    private function recordUsedExtensions($extensions)
    {
        foreach ($extensions as $extension) {
            $this->extensionsUsed[] = $extension;
        }
    }

    /**
     * Returns a list of unused extensions which produce validation errors when unused.
     *
     * @return string[]
     */
    private function getUnusedExtensionsRequired()
    {
        $result = [];
        foreach ($this->extensionsUnusedRequired as $extension) {
            if (! in_array($extension, $this->extensionsUsed, true)) {
                $result[] = $extension;
            }
        }
        sort($result);

        return $result;
    }

    /**
     * Update ExtensionContext state when we encounter an amp extension or tag using an extension.
     *
     * @param ValidateTagResult $validateTagResult Tag result to update from.
     */
    private function updateFromTagResult(ValidateTagResult $validateTagResult)
    {
        /*
        If (result.bestMatchTagSpec === null) {
            return;
        }
        const parsedTagSpec = result.bestMatchTagSpec;
        const tagSpec = parsedTagSpec.getSpec();

        // Keep track of which extensions are loaded.
        if (tagSpec.extensionSpec !== null) {
            const {extensionSpec} = tagSpec;
          // This is an always present field if extension spec is set.
          const extensionName = /** @type{string} * / (extensionSpec.name);

          // Record that we have encountered an extension 'load' tag. This will
          // look like <script custom-element=amp-foo ...> or similar.
          this.extensionsLoaded_[extensionName] = true;
          switch (extensionSpec.requiresUsage) {
              case generated.ExtensionSpec.ExtensionUsageRequirement
                   .EXEMPTED:  // Fallthrough intended:
              case generated.ExtensionSpec.ExtensionUsageRequirement.NONE:
                  // This extension does not have usage demonstrated by a tag, for
                  // example: amp-dynamic-css-classes
                  break;
              case generated.ExtensionSpec.ExtensionUsageRequirement.ERROR:
                  // TODO(powdercloud): Make enum proto defaults work in generated
                  // javascript.
              default:  // Default is error
                  // Record that a loaded extension indicates a new requirement:
                  // namely that some tag must make use of this extension.
                  this.extensionsUnusedRequired_.push(extensionName);
                  break;
          }
        }

        // Record presence of a tag, such as <amp-foo> which requires the usage
        // of an amp extension.
        this.recordUsedExtensions(tagSpec.requiresExtension);
        */
    }
}
PK.3Y��>OGbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/FilePosition.php<?php

namespace AmpProject\Validator;

/**
 * Position into a file, in line and column coordinates.
 *
 * @package ampproject/amp-toolbox
 */
final class FilePosition
{
    /**
     * Line position into the file.
     *
     * @var int
     */
    private $line;

    /**
     * Column position into the file.
     *
     * @var int
     */
    private $column;

    /**
     * Instantiate a FilePosition object.
     *
     * @param int $line   Line position into the file.
     * @param int $column Column position into the file.
     */
    public function __construct($line, $column)
    {
        $this->line   = $line;
        $this->column = $column;
    }

    /**
     * Get the line position into the file.
     *
     * @return int Line position into the file.
     */
    public function getLine()
    {
        return $this->line;
    }

    /**
     * Get the column position into the file.
     *
     * @return int Column position into the file.
     */
    public function getColumn()
    {
        return $this->column;
    }
}
PK.3Y�el�``?bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator;

final class Spec
{
    /** @var Spec\Section\Tags */
    private $tags;

    /** @var int */
    private $minValidatorRevisionRequired = 475;

    /** @var int */
    private $specFileRevision = 1188;

    /** @var string */
    private $templateSpecUrl = 'https://amp.dev/documentation/components/amp-mustache';

    /** @var string */
    private $stylesSpecUrl = 'https://amp.dev/documentation/guides-and-tutorials/develop/style_and_layout/style_pages/';

    /** @var string */
    private $scriptSpecUrl = 'https://amp.dev/documentation/guides-and-tutorials/learn/validation-workflow/validation_errors/#custom-javascript-is-not-allowed';

    /** @var Spec\Section\CssRulesets */
    private $cssRulesets;

    /** @var Spec\Section\DocRulesets */
    private $docRulesets;

    /** @var Spec\Section\AttributeLists */
    private $attributeLists;

    /** @var Spec\Section\DeclarationLists */
    private $declarationLists;

    /** @var Spec\Section\DescendantTagLists */
    private $descendantTagLists;

    /** @var Spec\Section\Errors */
    private $errors;

    /**
     * @return Spec\Section\Tags
     */
    public function tags()
    {
        if ($this->tags === null) {
            $this->tags = new Spec\Section\Tags();
        }
        return $this->tags;
    }

    /**
     * @return int
     */
    public function minValidatorRevisionRequired()
    {
        return $this->minValidatorRevisionRequired;
    }

    /**
     * @return int
     */
    public function specFileRevision()
    {
        return $this->specFileRevision;
    }

    /**
     * @return string
     */
    public function templateSpecUrl()
    {
        return $this->templateSpecUrl;
    }

    /**
     * @return string
     */
    public function stylesSpecUrl()
    {
        return $this->stylesSpecUrl;
    }

    /**
     * @return string
     */
    public function scriptSpecUrl()
    {
        return $this->scriptSpecUrl;
    }

    /**
     * @return Spec\Section\CssRulesets
     */
    public function cssRulesets()
    {
        if ($this->cssRulesets === null) {
            $this->cssRulesets = new Spec\Section\CssRulesets();
        }
        return $this->cssRulesets;
    }

    /**
     * @return Spec\Section\DocRulesets
     */
    public function docRulesets()
    {
        if ($this->docRulesets === null) {
            $this->docRulesets = new Spec\Section\DocRulesets();
        }
        return $this->docRulesets;
    }

    /**
     * @return Spec\Section\AttributeLists
     */
    public function attributeLists()
    {
        if ($this->attributeLists === null) {
            $this->attributeLists = new Spec\Section\AttributeLists();
        }
        return $this->attributeLists;
    }

    /**
     * @return Spec\Section\DeclarationLists
     */
    public function declarationLists()
    {
        if ($this->declarationLists === null) {
            $this->declarationLists = new Spec\Section\DeclarationLists();
        }
        return $this->declarationLists;
    }

    /**
     * @return Spec\Section\DescendantTagLists
     */
    public function descendantTagLists()
    {
        if ($this->descendantTagLists === null) {
            $this->descendantTagLists = new Spec\Section\DescendantTagLists();
        }
        return $this->descendantTagLists;
    }

    /**
     * @return Spec\Section\Errors
     */
    public function errors()
    {
        if ($this->errors === null) {
            $this->errors = new Spec\Section\Errors();
        }
        return $this->errors;
    }
}
PK.3Y��#N��Lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/ValidateTagResult.php<?php

namespace AmpProject\Validator;

/**
 * Return type tuple for `ValidationHandler::validateTag()`.
 *
 * @package ampproject/amp-toolbox
 */
final class ValidateTagResult
{
    /**
     * Validation result.
     *
     * @var ValidationResult
     */
    private $validationResult;

    /**
     * Tag spec that was the best match.
     *
     * @var ParsedTagSpec|null
     */
    private $bestMatchTagSpec;

    /**
     * Count of bytes of inline CSS styles.
     *
     * @var int
     */
    private $inlineStyleCssBytes;

    /**
     * Developer mode suppression.
     *
     * @var bool|null
     */
    private $devModeSuppress;

    /**
     * Instantiate a ValidateTagResult object.
     *
     * @param ValidationResult   $validationResult    Validation result.
     * @param ParsedTagSpec|null $bestMatchTagSpec    Tag spec that was the best match.
     * @param int                $inlineStyleCssBytes Count of bytes of inline CSS styles.
     * @param null               $devModeSuppress     Developer mode suppression.
     */
    public function __construct(
        ValidationResult $validationResult,
        ParsedTagSpec $bestMatchTagSpec = null,
        $inlineStyleCssBytes = 0,
        $devModeSuppress = null
    ) {
        $this->validationResult = $validationResult;
        $this->bestMatchTagSpec = $bestMatchTagSpec;
        $this->inlineStyleCssBytes = $inlineStyleCssBytes;
        $this->devModeSuppress = $devModeSuppress;
    }

    /**
     * Get the validation result.
     *
     * @return ValidationResult
     */
    public function getValidationResult()
    {
        return $this->validationResult;
    }

    /**
     * Get the tag spec that was the best match.
     *
     * @return ParsedTagSpec|null
     */
    public function getBestMatchTagSpec()
    {
        return $this->bestMatchTagSpec;
    }

    /**
     * Get the count of bytes of inline CSS styles.
     *
     * @return int
     */
    public function getInlineStyleCssBytes()
    {
        return $this->inlineStyleCssBytes;
    }

    /**
     * Get the state of the developer mode suppression.
     *
     * @return bool|null
     */
    public function getDevModeSuppress()
    {
        return $this->devModeSuppress;
    }
}
PK.3Y
'�EEKbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/ValidationEngine.php<?php

namespace AmpProject\Validator;

use AmpProject\Dom\Document;
use AmpProject\Format;
use AmpProject\Html\Parser\HtmlParser;

/**
 * Validator engine that checks adherence to spec rules against provided markup.
 *
 * @package ampproject/amp-toolbox
 */
final class ValidationEngine
{
    /**
     * Validate the provided DOM document.
     *
     * @param Document $document   DOM document to apply the transformations to.
     * @param string   $htmlFormat Optional. AMP HTML format to validate against. Defaults to 'AMP'.
     * @return ValidationResult Result of the validation.
     */
    public function validateDom(Document $document, $htmlFormat = Format::AMP)
    {
        return $this->validateHtml($document->saveHTML());
    }

    /**
     * Validate the provided string of HTML markup.
     *
     * @param string $html       HTML markup to apply the transformations to.
     * @param string $htmlFormat Optional. AMP HTML format to validate against. Defaults to 'AMP'.
     * @return ValidationResult Result of the validation.
     */
    public function validateHtml($html, $htmlFormat = Format::AMP)
    {
        $parser  = new HtmlParser();
        $spec    = new Spec();
        $handler = new ValidationHandler($htmlFormat, $spec);

        $parser->parse($handler, $html);

        return $handler->getResult();
    }
}
PK.3Y�g�~Jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/ValidationError.php<?php

namespace AmpProject\Validator;

/**
 * Validation error value object.
 *
 * @package ampproject/amp-toolbox
 */
final class ValidationError
{
    /**
     * Severity of the validation error.
     *
     * @var ValidationSeverity
     */
    private $severity;

    /**
     * Code of the validation error.
     *
     * @var int
     */
    private $code;

    /**
     * Line that the validation error was found in.
     *
     * @var int
     */
    private $line;

    /**
     * Column that the validation error was found in.
     *
     * @var int|null
     */
    private $column;

    /**
     * Spec URL related to the validation error.
     *
     * @var string|null
     */
    private $specUrl;

    /**
     * Array of additional parameters for the validation error.
     *
     * @var string[]
     */
    private $params;

    /**
     * ValidationError constructor.
     *
     * @param ValidationSeverity $severity Severity of the validation error.
     * @param int                $code     Code of the validation error.
     * @param int                $line     Optional. Line that the validation error was found in. Defaults to 1.
     * @param int|null           $column   Optional. Column that the validation error was found in.
     * @param string|null        $specUrl  Optional. Spec URL related to the validation error.
     * @param array<string>|null $params   Optional. Array of additional parameters for the validation error.
     */
    public function __construct(
        ValidationSeverity $severity,
        $code,
        $line = 1,
        $column = null,
        $specUrl = null,
        $params = []
    ) {
        $this->severity = $severity;
        $this->code     = $code;
        $this->line     = $line;
        $this->column   = $column;
        $this->specUrl  = $specUrl;
        $this->params   = $params;
    }

    /**
     * Get the severity of the validation error.
     *
     * @return ValidationSeverity Severity of the validation error.
     */
    public function getSeverity()
    {
        return $this->severity;
    }

    /**
     * Get the code of the validation error.
     *
     * @return int Code of the validation error.
     */
    public function getCode()
    {
        return $this->code;
    }

    /**
     * Get the line of the validation error.
     *
     * @return int Line of the validation error.
     */
    public function getLine()
    {
        return $this->line;
    }

    /**
     * Get the column of the validation error.
     *
     * @return int|null Column of the validation error.
     */
    public function getColumn()
    {
        return $this->column;
    }

    /**
     * Get the specification URL of the validation error.
     *
     * @return string|null Specification URL of the validation error.
     */
    public function getSpecUrl()
    {
        return $this->specUrl;
    }

    /**
     * Get the params of the validation error.
     *
     * @return array Params of the validation error.
     */
    public function getParams()
    {
        return $this->params;
    }
}
PK.3Y-�ǧ
�
Tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/ValidationErrorCollection.php<?php

namespace AmpProject\Validator;

use Countable;
use Iterator;

/**
 * Collection of ValidationError objects.
 *
 * @package ampproject/amp-toolbox
 */
final class ValidationErrorCollection implements Countable, Iterator
{
    /**
     * Internal storage for the errors that were added.
     *
     * @var ValidationError[]
     */
    private $errors = [];

    /**
     * Add an error to the error collection.
     *
     * @param ValidationError $error Error to add.
     * @return void
     */
    public function add(ValidationError $error) // phpcs:ignore PHPCompatibility.Classes.NewClasses.errorFound
    {
        $this->errors[] = $error;
    }

    /**
     * Check whether the error collection contains an error for the given code.
     *
     * @param string $code Code of the error.
     * @return bool Whether the error collection contains an error with the given code.
     */
    public function has($code)
    {
        foreach ($this->errors as $error) {
            if ($error->getCode() === $code) {
                return true;
            }
        }

        return false;
    }

    /**
     * Count how many errors are contained within the error collection.
     *
     * @return int Number of contained errors.
     */
    #[\ReturnTypeWillChange]
    public function count()
    {
        return count($this->errors);
    }

    /**
     * Sort errors by their position in the file.
     */
    public function sortByPosition()
    {
        usort(
            $this->errors,
            function (ValidationError $a, ValidationError $b) {
                if ($a->getLine() === $b->getLine()) {
                    if (PHP_MAJOR_VERSION < 7 && $a->getColumn() === $b->getColumn()) {
                        // Hack required for PHP 5.6, as it does not maintain stable order for equal items.
                        // See https://bugs.php.net/bug.php?id=69158.
                        // To get around this, we compare the index within $this->errors instead to keep existing order.
                        return strcmp(array_search($a, $this->errors, true), array_search($b, $this->errors, true));
                    }

                    return $a->getColumn() - $b->getColumn();
                }

                return $a->getLine() - $b->getLine();
            }
        );
    }

    /**
     * Return the current validation error.
     *
     * @return ValidationError Current validation error.
     */
    #[\ReturnTypeWillChange]
    public function current()
    {
        return current($this->errors);
    }

    /**
     * Move forward to next validation error.
     *
     * @return void Any returned value is ignored.
     */
    #[\ReturnTypeWillChange]
    public function next()
    {
        next($this->errors);
    }

    /**
     * Return the key of the current validation error.
     *
     * @return string|int|null Scalar on success, or null on failure.
     */
    #[\ReturnTypeWillChange]
    public function key()
    {
        return key($this->errors);
    }

    /**
     * Checks if current position is valid.
     *
     * @return bool Whether the current position is valid.
     */
    #[\ReturnTypeWillChange]
    public function valid()
    {
        return $this->key() !== null;
    }

    /**
     * Rewind the iterator to the first validation error.
     *
     * @return void Any returned value is ignored.
     */
    #[\ReturnTypeWillChange]
    public function rewind()
    {
        reset($this->errors);
    }
}
PK.3Y
o\�N�NLbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/ValidationHandler.php<?php

namespace AmpProject\Validator;

use AmpProject\Format;
use AmpProject\Html\Parser\DocLocator;
use AmpProject\Html\Parser\HtmlSaxHandlerWithLocation;
use AmpProject\Html\Parser\ParsedAttribute;
use AmpProject\Html\Parser\ParsedTag;
use AmpProject\Html\UpperCaseTag as Tag;
use AmpProject\Str;
use AmpProject\Validator\Spec\Error\DisallowedManufacturedBody;
use AmpProject\Validator\Spec\Error\DuplicateAttribute;
use AmpProject\Validator\Spec\Error\DuplicateUniqueTag;
use AmpProject\Validator\Spec\Error\InvalidDoctypeHtml;

/**
 * Validation Handler which accepts callbacks from HTML Parser.
 *
 * @package ampproject/amp-toolbox
 */
final class ValidationHandler implements HtmlSaxHandlerWithLocation
{
    /**
     * AMP HTML format to validate against.
     *
     * @var string
     */
    private $htmlFormat;

    /**
     * Selection of validation rules to use.
     *
     * @var ValidatorRules
     */
    private $rules;

    /**
     * Validator specification to use.
     *
     * @var Spec
     */
    private $spec;

    /**
     * Validation context.
     *
     * @var Context
     */
    private $context;

    /**
     * Result of the validation.
     *
     * @var ValidationResult
     */
    private $validationResult;

    public function __construct($htmlFormat = Format::AMP, Spec $spec = null)
    {
        $this->htmlFormat       = $htmlFormat;
        $this->spec             = $spec instanceof Spec ? $spec : new Spec();
        $this->validationResult = new ValidationResult();
        $this->rules            = new ValidatorRules($htmlFormat, $spec);
        $this->context          = new Context($this->rules);
    }

    /**
     * Get the validation result.
     *
     * @return ValidationResult Validation result.
     */
    public function getResult()
    {
        return $this->validationResult;
    }

    /**
     * Handler called when the parser found a new tag.
     *
     * @param ParsedTag $tag New tag that was found.
     * @return void
     */
    public function startTag(ParsedTag $tag)
    {
        if ($tag->upperName() === Tag::HTML) {
            $this->context->getRules()->validateHtmlTag($tag, $this->context, $this->validationResult);
        }
        if ($tag->upperName() === Tag::_DOCTYPE) {
            $this->validateDocType($tag);
            // Even though validateDocType emits all necessary errors about the tag, we continue to process it further
            // (validateTag and such) so that we can record the tag was present and record it as the root pseudo element
            // for the document.
        }
        $maybeDuplicateAttributeName = $tag->hasDuplicateAttributes();
        if ($maybeDuplicateAttributeName !== null) {
            $this->context->addWarning(
                DuplicateAttribute::CODE,
                $this->context->getFilePosition(),
                [$tag->lowerName(), $maybeDuplicateAttributeName],
                '',
                $this->validationResult
            );
            $tag->dedupeAttributes();
        }

        if ($tag->upperName() === Tag::BODY) {
            $this->context->recordBodyTag($tag->attributes());
            $this->emitMissingExtensionErrors();
        }

        /*
        /** @type {ValidateTagResult} * /
        let resultForReferencePoint = {
        bestMatchTagSpec: null,
        validationResult: new generated.ValidationResult(),
        devModeSuppress: false,
        inlineStyleCssBytes: 0,
        };
        resultForReferencePoint.validationResult->status =
        generated.ValidationResult.Status.UNKNOWN;
        const referencePointMatcher =
        $this->context->getTagStack()->parentReferencePointMatcher();
        // We must match the reference point before the TagSpec, as otherwise we
        // will end up with "unexplained" attributes during tagspec matching
        // which the reference point takes care of.
        if (referencePointMatcher !== null) {
        resultForReferencePoint =
        referencePointMatcher.validateTag($tag, $this->context);
        }

        const resultForTag = validateTag(
        $tag, resultForReferencePoint.bestMatchTagSpec,
        $this->context);
        resultForTag.devModeSuppress =
        ShouldSuppressDevModeErrors($tag, $this->context);
        // Only merge in the reference point errors into the final result if the
        // tag otherwise passes one of the TagSpecs. Otherwise, we end up with
        // unnecessarily verbose errors.
        if (referencePointMatcher !== null &&
        resultForTag.validationResult->status ===
        generated.ValidationResult.Status.PASS &&
        !resultForTag.devModeSuppress) {
        $this->validationResult->mergeFrom(
        resultForReferencePoint.validationResult);
        }


        checkForReferencePointCollision(
        resultForReferencePoint.bestMatchTagSpec, resultForTag.bestMatchTagSpec,
        $this->context, resultForTag.validationResult);
        if (!resultForTag.devModeSuppress)
        $this->validationResult->mergeFrom(resultForTag.validationResult);

        $this->context->updateFromTagResults(
        $tag, resultForReferencePoint, resultForTag);
        */
    }

    /**
     * Handler called when the parser found a closing tag.
     *
     * @param ParsedTag $tag Closing tag that was found.
     * @return void
     */
    public function endTag(ParsedTag $tag)
    {
        // TODO: Implement endTag() method.
    }

    /**
     * Handler called when PCDATA is found.
     *
     * @param string $text The PCDATA that was found.
     * @return void
     */
    public function pcdata($text)
    {
        // TODO: Implement pcdata() method.
    }

    /**
     * Handler called when RCDATA is found.
     *
     * @param string $text The RCDATA that was found.
     * @return void
     */
    public function rcdata($text)
    {
        // TODO: Implement rcdata() method.
    }

    /**
     * Handler called when CDATA is found.
     *
     * @param string $text The CDATA that was found.
     * @return void
     */
    public function cdata($text)
    {
        // TODO: Implement cdata() method.
    }

    /**
     * Handler called when the parser is starting to parse the document.
     *
     * @return void
     */
    public function startDoc()
    {
        $this->validationResult = new ValidationResult();
    }

    /**
     * Handler called when the parsing is done.
     *
     * @return void
     */
    public function endDoc()
    {
        $this->rules->maybeEmitGlobalTagValidationErrors($this->context, $this->validationResult);

        if ($this->validationResult->getStatus()->equals(ValidationStatus::UNKNOWN())) {
            $this->validationResult->setStatus(ValidationStatus::PASS());
        }

        // As some errors can be inserted out of order, sort errors at the end based on their line / column numbers.
        $this->validationResult->getErrors()->sortByPosition();
    }

    /**
     * Callback for informing that the parser is manufacturing a <body> tag not actually found on the page. This will be
     * followed by a startTag() with the actual body tag in question.
     *
     * @return void
     */
    public function markManufacturedBody()
    {
        $this->context->addError(
            DisallowedManufacturedBody::CODE,
            $this->context->getFilePosition(),
            [],
            '',
            $this->validationResult
        );
    }

    /**
     * HTML5 defines how parsers treat documents with multiple body tags: they merge the attributes from the later ones
     * into the first one. Therefore, just before the parser sends the endDoc event, it will also send this event which
     * will provide the attributes from the effective body tag to the client (the handler).
     *
     * @param array<ParsedAttribute> $attributes Array of parsed attributes.
     * @return void
     */
    public function effectiveBodyTag($attributes)
    {
        $encounteredAttributes = $this->context->getEncounteredBodyAttributes();

        // If we never recorded a body tag with attributes, it was manufactured, in which case we've already logged an
        // error for that. Doing more here would be confusing.
        if ($encounteredAttributes === null) {
            return;
        }

        // So now we compare the attributes from the tag that we encountered (HtmlParser sent us a startTag() event for
        // it earlier) with the attributes from the effective body tag that we're just receiving now, which contains all
        // attributes on body tags within the doc. It's correct to think of this synthetic tag simply as a concatenation
        // - there is in general no elimination of duplicate attributes or overriding behavior. Thus, if the second body
        // tag has any attribute this will result in an error.
        $differenceSeen = count($attributes) !== count($encounteredAttributes);
        if (! $differenceSeen) {
            $attributesCount = count($attributes);
            for ($index = 0; $index < $attributesCount; $index++) {
                if ($attributes[$index] !== $encounteredAttributes[$index]) {
                    $differenceSeen = true;
                    break;
                }
            }
        }

        if (! $differenceSeen) {
            return;
        }

        $this->context->addError(
            DuplicateUniqueTag::CODE,
            $this->context->getEncounteredBodyFilePosition(),
            [Tag::BODY],
            '',
            $this->validationResult
        );
    }

    /**
     * Called prior to parsing a document, that is, before startTag().
     *
     * @param DocLocator $locator A locator instance which provides access to the line/column information while SAX
     *                            events are being received by the handler.
     * @return void
     */
    public function setDocLocator(DocLocator $locator)
    {
        $this->context->setDocLocator($locator);
    }

    /**
     * While parsing the document HEAD, we may accumulate errors which depend on seeing later extension <script> tags.
     */
    private function emitMissingExtensionErrors()
    {
        foreach ($this->context->getExtensionsContext()->getMissingExtensionErrors() as $missingExtensionError) {
            $this->context->recordError($missingExtensionError, $this->validationResult);
        }
    }

    /**
     * Validate the <!doctype> tag.
     *
     * Currently, the HTML parser considers Doctype to be another HTML tag, which is not technically accurate. There is
     * special handling for doctype in Javascript which applies to all AMP formats, as this is strict handling for all
     * HTML in general. Specifically "attributes" are not allowed, even things like `data-foo`.
     *
     * @param ParsedTag $tag The <!doctype> tag to validate.
     */
    private function validateDocType(ParsedTag $tag)
    {
        $attributes = $tag->attributes();

        // <!doctype html> - OK
        if (count($attributes) === 1 && $attributes[0]->name() === 'html') {
            return;
        }

        // <!doctype html lang=...> OK
        // This is technically invalid. The 'correct' way to do this is to emit the
        // lang attribute on the `<html>` tag. However, we observe a number of
        // websites incorrectly emitting `lang` as part of doctype, so this specific
        // attribute is allowed to avoid breaking existing pages.
        if (
            count($attributes) === 2
            &&
            (
                ($attributes[0]->name() === 'html' && $attributes[1]->name() === 'lang')
                ||
                ($attributes[0]->name() === 'lang' && $attributes[1]->name() === 'html')
            )
        ) {
            return;
        }

        if (count($attributes) !== 1 || $attributes[0]->name() !== 'html') {
            $this->context->addError(
                InvalidDoctypeHtml::CODE,
                $this->context->getFilePosition(),
                [],
                'https://amp.dev/documentation/guides-and-tutorials/start/create/basic_markup/',
                $this->validationResult
            );
        }
    }

    /**
     * Validates the provided `ParsedHtmlTag` with respect to the tag specifications in the validator's rules, returning
     * a `ValidationResult` with errors for this tag and a PASS or FAIL status. At least one specification must
     * validate, or the result will have status `FAIL`.
     * Also passes back a reference to the tag spec which matched, if a match was found.
     * Context is not mutated; instead, pending mutations are stored in the return value, and are merged only if the tag
     * spec is applied (pending some reference point stuff).
     *
     * @param ParsedTag          $encounteredTag          Tag that was encountered.
     * @param ParsedTagSpec|null $bestMatchReferencePoint Reference point for the best match.
     * @param Context            $context                 Validation context.
     * @return ValidateTagResult
     */
    private function validateTag($encounteredTag, $bestMatchReferencePoint, $context)
    {
        $tagSpecDispatch = $context->getRules()->dispatchForTagName($encounteredTag->upperName());
        // Filter TagSpecDispatch.AllTagSpecs by type identifiers.
        $filteredTagSpecs = [];
        if ($tagSpecDispatch !== null) {
            foreach ($tagSpecDispatch->allTagSpecs() as $tagSpecId) {
                $parsedTagSpec = $context->getRules()->getByTagSpecId($tagSpecId);
                // Keep TagSpecs that are used for these type identifiers.
                if ($parsedTagSpec->isUsedForTypeIdentifiers($context->getTypeIdentifiers())) {
                    $filteredTagSpecs[] = $parsedTagSpec;
                }
            }
        }

        // If there are no dispatch keys matching the tag name, ex: tag name is "foo", set a disallowed tag error.
        if (
            $tagSpecDispatch === null
            ||
            (! $tagSpecDispatch->hasDispatchKeys() && count($filteredTagSpecs) === 0)
        ) {
            $result  = new ValidationResult();
            $specUrl = '';
            // Special case the spec_url for font tags to be slightly more useful.
            if ($encounteredTag->upperName() === Tag::FONT) {
                $specUrl = $context->getRules()->getStylesSpecUrl();
            }
            $context->addError(
                ErrorCode::DISALLOWED_TAG,
                $context->getFilePosition(),
                [$encounteredTag->lowerName()],
                $specUrl,
                $result
            );

            return new ValidateTagResult($result);
        }

        // At this point, we have dispatch keys, tag specs, or both.
        // The strategy is to look for a matching dispatch key first. A matching dispatch key does not guarantee that
        // the dispatched tag spec will also match. If we find a matching dispatch key, we immediately return the result
        // for that tag spec, success or fail.
        // If we don't find a matching dispatch key, we must try all the tag specs to see if any of them match. If there
        // are no tag specs, we want to return a `GENERAL_DISALLOWED_TAG` error.
        // Calling `hasDispatchKeys()` here is only an optimization to skip the loop over encountered attributes in the
        // case where we have no dispatches.
        if ($tagSpecDispatch->hasDispatchKeys()) {
            foreach ($encounteredTag->attributes() as $attribute) {
                $tagSpecIds  = $tagSpecDispatch->matchingDispatchKey(
                    $attribute->name(),
                    // Attribute values are case-sensitive by default, but we match dispatch keys in a case-insensitive
                    // manner and then validate using whatever the tag spec requests.
                    Str::toLowerCase($attribute->value()),
                    $context->getTagStack()->parentTagName()
                );
                $bestAttempt = new ValidateTagResult(new ValidationResult());
                $bestAttempt->getValidationResult()->setStatus(ValidationStatus::UNKNOWN());
                foreach ($tagSpecIds as $tagSpecId) {
                    $parsedTagSpec = $context->getRules()->getByTagSpecId($tagSpecId);
                    // Skip tag specs that aren't used for these type identifiers.
                    if (! $parsedTagSpec->isUsedForTypeIdentifiers($context->getTypeIdentifiers())) {
                        continue;
                    }
                    $attempt = $this->validateTagAgainstSpec(
                        $parsedTagSpec,
                        $bestMatchReferencePoint,
                        $context,
                        $encounteredTag
                    );
                    if (
                        $context->getRules()->betterValidationResultThan(
                            $attempt->getValidationResult(),
                            $bestAttempt->getValidationResult()
                        )
                    ) {
                        $bestAttempt                   = $attempt;
                        $bestAttempt->bestMatchTagSpec = $parsedTagSpec;
                        // Exit early on success.
                        if ($bestAttempt->getValidationResult()->getStatus()->equals(ValidationStatus::PASS())) {
                            return $bestAttempt;
                        }
                    }
                }
                if (! $bestAttempt->getValidationResult()->getStatus()->equals(ValidationStatus::UNKNOWN())) {
                    return $bestAttempt;
                }
            }
        }

        // None of the dispatch tag specs matched and passed. If there are no non-dispatch tag specs, consider this a
        // 'generally' disallowed tag, which gives an error that reads "tag foo is disallowed except in specific forms".
        if (count($filteredTagSpecs) === 0) {
            $result = new ValidationResult();
            if ($encounteredTag->upperName() === Tag::SCRIPT) {
                // Special case for `<script>` tags to produce better error messages.
                $context->addError(
                    ErrorCode::DISALLOWED_SCRIPT_TAG,
                    $context->getFilePosition(),
                    [],
                    $context->getRules()->getScriptSpecUrl(),
                    $result
                );
            } else {
                $context->addError(
                    ErrorCode::GENERAL_DISALLOWED_TAG,
                    $context->getFilePosition(),
                    [$encounteredTag->lowerName()],
                    '',
                    $result
                );
            }

            return new ValidateTagResult($result);
        }

        // Validate against all remaining tag specs. Each tag spec will produce a different set of errors. Even if none
        // of them match, we only want to return errors from a single tag spec, not all of them. We keep around the
        // 'best' attempt until we have found a matching tag spec or have tried them all.
        $bestAttempt = new ValidateTagResult(new ValidationResult());
        $bestAttempt->getValidationResult()->setStatus(ValidationStatus::UNKNOWN());
        foreach ($filteredTagSpecs as $parsedTagSpec) {
            $attempt = $this->validateTagAgainstSpec(
                $parsedTagSpec,
                $bestMatchReferencePoint,
                $context,
                $encounteredTag
            );
            if (
                $context->getRules()->betterValidationResultThan(
                    $attempt->getValidationResult(),
                    $bestAttempt->getValidationResult()
                )
            ) {
                $bestAttempt                   = $attempt;
                $bestAttempt->bestMatchTagSpec = $parsedTagSpec;
                // Exit early.
                if ($bestAttempt->getValidationResult()->getStatus()->equals(ValidationStatus::PASS())) {
                    return $bestAttempt;
                }
            }
        }

        return $bestAttempt;
    }
}
PK.3YO�O�Kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/ValidationResult.php<?php

namespace AmpProject\Validator;

/**
 * Validation result value object.
 *
 * @package ampproject/amp-toolbox
 */
final class ValidationResult
{
    /**
     * Validation result status.
     *
     * @var ValidationStatus
     */
    private $status;

    /**
     * Collection of validation errors that were found.
     *
     * @var ValidationErrorCollection
     */
    private $errors;

    /**
     * Spec rules revision.
     *
     * @var int
     */
    private $specRevision;

    /**
     * Version of the transformer used.
     *
     * If the AMP document is a transformed AMP document, then this is the version of the transformers that were used to
     * transform it. If the document is not transformed, then the value will be 0.
     *
     * @var int
     */
    private $transformerVersion;

    /**
     * The type identifier(s) used on the document.
     *
     * This contains the type identifier of the parsed document, e.g. AMP, AMP4ADS or some other type that has yet to be
     * defined. These are declared on the HTML tag and parsed by the validator engine.
     *
     * @var string[]
     */
    private $typeIdentifiers;

    /**
     * The set of provisions from all matching $attrSpecs in this $tagSpec match.
     *
     * If the $tagSpec is selected, these will be added to the final set of provisions.
     *
     * @var ValueSetProvision[]
     */
    private $valueSetProvisions;

    /**
     * The set of requirements from all matching $attrSpecs in this $tagSpec match.
     *
     * If the $tagSpec is selected, these will be added to the final set of requirements.
     *
     * @var ValueSetRequirement[]
     */
    private $valueSetRequirements;

    /**
     * ValidationResult constructor.
     *
     * @param ValidationStatus          $status               Optional. Validation result status.
     * @param ValidationErrorCollection $errors               Optional. Collection of validation errors that were found.
     * @param int                       $specRevision         Optional. Spec rules revision. Defaults to -1.
     * @param int                       $transformerVersion   Optional. Version of the transformer used. Defaults to 0.
     * @param string[]                  $typeIdentifiers      Optional. The type identifier(s) used on the document.
     *                                                        Defaults to an empty array.
     * @param ValueSetProvision[]       $valueSetProvisions   Optional. The set of provisions from all matching
     *                                                        $attrSpecs in this $tagSpec match. Defaults to an empty
     *                                                        array.
     * @param ValueSetRequirement[]     $valueSetRequirements Optional. The set of requirements from all matching
     *                                                        $attrSpecs in this $tagSpec match. Defaults to an empty
     *                                                        array.
     */
    public function __construct(
        ValidationStatus $status = null,
        ValidationErrorCollection $errors = null,
        $specRevision = -1,
        $transformerVersion = 0,
        $typeIdentifiers = [],
        $valueSetProvisions = [],
        $valueSetRequirements = []
    ) {
        $this->status               = $status instanceof ValidationStatus ? $status : ValidationStatus::UNKNOWN();
        $this->errors               = $errors instanceof ValidationErrorCollection
            ? $errors
            : new ValidationErrorCollection();
        $this->specRevision         = $specRevision;
        $this->transformerVersion   = $transformerVersion;
        $this->typeIdentifiers      = $typeIdentifiers;
        $this->valueSetProvisions   = $valueSetProvisions;
        $this->valueSetRequirements = $valueSetRequirements;
    }

    /**
     * Get the validation status.
     *
     * @return ValidationStatus Current validation status of the validation result.
     */
    public function getStatus()
    {
        return $this->status;
    }

    /**
     * Set the validation status.
     *
     * @param ValidationStatus $status New validation status to set the validation result to.
     */
    public function setStatus(ValidationStatus $status)
    {
        $this->status = $status;
    }

    /**
     * Get the validation errors.
     *
     * @return ValidationErrorCollection
     */
    public function getErrors()
    {
        return $this->errors;
    }

    /**
     * Get the spec rules revision.
     *
     * @return int
     */
    public function getSpecRevision()
    {
        return $this->specRevision;
    }

    /**
     * Get the transformer version.
     *
     * @return int
     */
    public function getTransformerVersion()
    {
        return $this->transformerVersion;
    }

    /**
     * Set the transformer version.
     *
     * @param int $transformerVersion Transformer version.
     */
    public function setTransformerVersion($transformerVersion)
    {
        $this->transformerVersion = $transformerVersion;
    }

    /**
     * Get the type identifiers.
     *
     * @return string[]
     */
    public function getTypeIdentifiers()
    {
        return $this->typeIdentifiers;
    }

    /**
     * Add a type identifier.
     *
     * @param string $typeIdentifier Type identifier to add.
     */
    public function addTypeIdentifier($typeIdentifier)
    {
        $this->typeIdentifiers[] = $typeIdentifier;
    }

    /**
     * Get the value set provisions.
     *
     * @return ValueSetProvision[]
     */
    public function getValueSetProvisions()
    {
        return $this->valueSetProvisions;
    }

    /**
     * Get the value set requirements.
     *
     * @return ValueSetRequirement[]
     */
    public function getValueSetRequirements()
    {
        return $this->valueSetRequirements;
    }
}
PK.3Y!xC�JJMbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/ValidationSeverity.php<?php

namespace AmpProject\Validator;

use AmpProject\FakeEnum;

/**
 * Severity of a validation error.
 *
 * @method static ValidationSeverity UNKNOWN_SEVERITY()
 * @method static ValidationSeverity ERROR()
 * @method static ValidationSeverity WARNING()
 *
 * @package ampproject/amp-toolbox
 *
 * @method static ValidationSeverity UNKNOWN_SEVERITY()
 * @method static ValidationSeverity ERROR()
 * @method static ValidationSeverity WARNING()
 */
final class ValidationSeverity extends FakeEnum
{
    const UNKNOWN_SEVERITY = 0;
    const ERROR            = 1;
    const WARNING          = 4;

    /**
     * Get the severity as an integer.
     *
     * @return int
     */
    public function asInt()
    {
        return (int)$this->value;
    }

    /**
     * Get the severity as a string.
     *
     * @return string
     */
    public function asString()
    {
        return (string)$this->getKey();
    }

    /**
     * Get the string representation of the severity.
     *
     * @return string
     */
    public function __toString()
    {
        return $this->asString();
    }
}
PK.3Y��{{Kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/ValidationStatus.php<?php

namespace AmpProject\Validator;

use AmpProject\FakeEnum;

/**
 * Status of the validation run.
 *
 * @method static ValidationStatus UNKNOWN()
 * @method static ValidationStatus PASS()
 * @method static ValidationStatus FAIL()
 *
 * @package ampproject/amp-toolbox
 */
final class ValidationStatus extends FakeEnum
{
    const UNKNOWN = 0;
    const PASS    = 1;
    const FAIL    = 2;

    /**
     * Get the status as an integer.
     *
     * @return int
     */
    public function asInt()
    {
        return (int)$this->value;
    }

    /**
     * Get the status as a string.
     *
     * @return string
     */
    public function asString()
    {
        return (string)$this->getKey();
    }

    /**
     * Get the string representation of the status.
     *
     * @return string
     */
    public function __toString()
    {
        return $this->asString();
    }
}
PK.3Y�L}lJlJIbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/ValidatorRules.php<?php

namespace AmpProject\Validator;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\LowerCaseTag;
use AmpProject\Html\Parser\ParsedAttribute;
use AmpProject\Html\Parser\ParsedTag;
use AmpProject\Validator\Spec\Error\DevModeOnly;
use AmpProject\Validator\Spec\Error\DisallowedAttr;
use AmpProject\Validator\Spec\Error\InvalidAttrValue;
use AmpProject\Validator\Spec\Error\MandatoryAttrMissing;

final class ValidatorRules
{
    /**
     * Regular expression to validate the value of a transformed attribute.
     *
     * @var string
     */
    const TRANSFORMED_VALUE_REGEX = '/^\\w+;v=(\\d+)$/';

    /**
     * Set of valid type identifiers.
     *
     * @var array<string>
     */
    const TYPE_IDENTIFIERS = [
        Attribute::AMP_EMOJI,
        Attribute::AMP_EMOJI_ALT,
        Attribute::AMP,
        Attribute::AMP4ADS_EMOJI,
        Attribute::AMP4ADS_EMOJI_ALT,
        Attribute::AMP4ADS,
        Attribute::AMP4EMAIL_EMOJI,
        Attribute::AMP4EMAIL_EMOJI_ALT,
        Attribute::AMP4EMAIL,
        Attribute::TRANSFORMED,
        Attribute::DATA_AMPDEVMODE,
        Attribute::DATA_CSS_STRICT
    ];

    /**
     * Set of type identifiers that are not mandatory.
     *
     * @var array<string>
     */
    const OPTIONAL_TYPE_IDENTIFIERS = [
        Attribute::TRANSFORMED,
        Attribute::DATA_AMPDEVMODE,
        Attribute::DATA_CSS_STRICT
    ];

    /**
     * AMP HTML format to validate against.
     *
     * @var string
     */
    private $htmlFormat;

    /**
     * Validator Specification to use.
     *
     * @var Spec
     */
    private $spec;

    /**
     * Creates a new instance and initializes it with the proper specification rules.
     *
     * @param string    $htmlFormat Optional. AMP HTML format to validate against.
     * @param Spec|null $spec       Optional. Validator specification to use.
     */
    public function __construct($htmlFormat = Format::AMP, Spec $spec = null)
    {
        $this->htmlFormat = $htmlFormat;
        $this->spec       = $spec instanceof Spec ? $spec : new Spec();
    }

    /**
     * Emits any validation errors which require a global view (mandatory tags, tags required by other tags, mandatory
     * alternatives).
     *
     * @param Context          $context          Validation context.
     * @param ValidationResult $validationResult Validation result.
     */
    public function maybeEmitGlobalTagValidationErrors(Context $context, ValidationResult $validationResult)
    {
        $this->maybeEmitMandatoryTagValidationErrors($context, $validationResult);
        $this->maybeEmitAlsoRequiresTagValidationErrors($context, $validationResult);
        $this->maybeEmitMandatoryAlternativesSatisfiedErrors($context, $validationResult);
        $this->maybeEmitDocSizeErrors($context, $validationResult);
        $this->maybeEmitCssLengthSpecErrors($context, $validationResult);
        $this->maybeEmitValueSetMismatchErrors($context, $validationResult);
    }

    /**
     * Emits errors for tags that are specified to be mandatory.
     *
     * @param Context          $context Validation context.
     * @param ValidationResult $validationResult Validation result.
     */
    private function maybeEmitMandatoryTagValidationErrors($context, $validationResult)
    {
        /*
        For (const tagSpecId of $this->mandatoryTagSpecs_) {
              const parsedTagSpec = $this->getByTagSpecId(tagSpecId);
              // Skip TagSpecs that aren't used for these type identifiers.
              if (!parsedTagSpec.isUsedForTypeIdentifiers(
                      context.getTypeIdentifiers())) {
                continue;
              }
        if (!context.getTagspecsValidated().hasOwnProperty(tagSpecId)) {
            const spec = parsedTagSpec.getSpec();
            context.addError(
                            generated.ValidationError.Code.MANDATORY_TAG_MISSING,
                            context.getFilePosition(),
                [getTagDescriptiveName(spec)], getTagSpecUrl(spec),
                            validationResult);
        }
        }
        */
    }

    /**
     * Emits errors for tags that specify that another tag is also required or a condition is required to be satisfied.
     *
     * Returns false iff context.Progress(result).complete.
     *
     * @param Context          $context Validation context.
     * @param ValidationResult $validationResult Validation result.
     */
    private function maybeEmitAlsoRequiresTagValidationErrors($context, $validationResult)
    {
        /*
        /** @type {!Array<number>} * /
            const tagspecsValidated =
                Object.keys($context->g$etTagspecsValidated()).map(Number);
            googArray.sort(tagspecsValidated);
            for (const tagSpecId of tagspecsValidated) {
            const parsedTagSpec = $this->getByTagSpecId(tagSpecId);
            // Skip TagSpecs that aren't used for these type identifiers.
            if (!parsedTagSpec.isUsedForTypeIdentifiers(
                    context.getTypeIdentifiers())) {
                continue;
            }
            for (const condition of parsedTagSpec.requires()) {
                if (!context.satisfiesCondition(condition)) {
                    context.addError(
                        generated.ValidationError.Code.TAG_REQUIRED_BY_MISSING,
                        context.getFilePosition(),
                        [
                            context.getRules().getInternedString(condition),
                            getTagDescriptiveName(parsedTagSpec.getSpec()),
                        ],
                        getTagSpecUrl(parsedTagSpec), validationResult);
                }
            }
              for (const condition of parsedTagSpec.excludes()) {
                if ($context->satisfiesCondition(condition)) {
                    context.addError(
                        generated.ValidationError.Code.TAG_EXCLUDED_BY_TAG,
                        context.getFilePosition(),
                        [
                            getTagDescriptiveName(parsedTagSpec.getSpec()),
                            context.getRules().getInternedString(condition),
                        ],
                        getTagSpecUrl(parsedTagSpec), validationResult);
                }
            }
              for (const tagspecId of parsedTagSpec.getAlsoRequiresTagWarning()) {
                if (!context.getTagspecsValidated().hasOwnProperty(tagspecId)) {
                    const alsoRequiresTagspec = $this->getByTagSpecId(tagspecId);
                    context.addWarning(
                        generated.ValidationError.Code.WARNING_TAG_REQUIRED_BY_MISSING,
                        context.getFilePosition(),
                        [
                            getTagDescriptiveName(alsoRequiresTagspec.getSpec()),
                            getTagDescriptiveName(parsedTagSpec.getSpec()),
                        ],
                        getTagSpecUrl(parsedTagSpec), validationResult);
                }
            }
            }

            const extensionsCtx = context.getExtensionsContext();
            const unusedRequired = extensionsCtx.unusedExtensionsRequired();
            for (const unusedExtensionName of unusedRequired) {
            context.addError(
                              generated.ValidationError.Code.EXTENSION_UNUSED, context.getFilePosition(),
                [unusedExtensionName],
                '', validationResult);
        }
        */
    }

      /**
       * Emits errors for tags that are specified as mandatory alternatives.
       *
       * Returns false iff context.Progress(result).complete.
       *
       * @param Context          $context Validation context.
       * @param ValidationResult $validationResult Validation result.
       */
    private function maybeEmitMandatoryAlternativesSatisfiedErrors($context, $validationResult)
    {
        /*
        Const satisfied = context.getMandatoryAlternativesSatisfied();
        /** @type {!Array<string>} * /
        const missing = [];
        const specUrlsByMissing = Object.create(null);
        for (const tagSpec of $this->rules_.tags) {
            if (tagSpec.mandatoryAlternatives === null ||
              !$this->isTagSpecCorrectHtmlFormat_(tagSpec)) {
              continue;
            }
            const alternative = tagSpec.mandatoryAlternatives;
            if (satisfied.indexOf(alternative) === -1) {
              const alternativeName = context.getRules().getInternedString(alternative);
              missing.push(alternativeName);
              specUrlsByMissing[alternativeName] = getTagSpecUrl(tagSpec);
            }
        }
        sortAndUniquify(missing);
        for (const tagMissing of missing) {
            context.addError(
                generated.ValidationError.Code.MANDATORY_TAG_MISSING,
                context.getFilePosition(),
                [tagMissing],
                specUrlsByMissing[tagMissing],
                validationResult
            );
        }
        */
    }

      /**
       * Emits errors for doc size limitations across entire document.
       *
       * @param Context          $context Validation context.
       * @param ValidationResult $validationResult Validation result.
       */
    private function maybeEmitDocSizeErrors($context, $validationResult)
    {
        /*
        Const parsedDocSpec = context.matchingDocSpec();
        if (parsedDocSpec !== null) {
          const bytesUsed = context.getDocByteSize();
          /** @type {!generated.DocSpec} * /
          const docSpec = parsedDocSpec.spec();
          if (docSpec.maxBytes !== -2 && bytesUsed > docSpec.maxBytes) {
              context.addError(
                  generated.ValidationError.Code.DOCUMENT_SIZE_LIMIT_EXCEEDED,
                  context.getFilePosition(),
                  [docSpec.maxBytes.toString(), bytesUsed.toString()],
                  docSpec.maxBytesSpecUrl, validationResult);
          }
        }
        */
    }

      /**
       * Emits errors for css size limitations across entire document.
       *
       * @param Context          $context Validation context.
       * @param ValidationResult $validationResult Validation result.
       */
    private function maybeEmitCssLengthSpecErrors($context, $validationResult)
    {
        /*
        Const bytesUsed =
          context.getInlineStyleByteSize() + context.getStyleTagByteSize();

        const parsedCssSpec = context.matchingDocCssSpec();
        if (parsedCssSpec !== null) {
          /** @type {!generated.DocCssSpec} * /
          const cssSpec = parsedCssSpec.spec();
          if (cssSpec.maxBytes !== -2 && bytesUsed > cssSpec.maxBytes) {
              if (cssSpec.maxBytesIsWarning) {
                  context.addWarning(
                      generated.ValidationError.Code
                      .STYLESHEET_AND_INLINE_STYLE_TOO_LONG,
                      context.getFilePosition(),
                      [bytesUsed.toString(), cssSpec.maxBytes.toString()],
                      cssSpec.maxBytesSpecUrl, validationResult);
              } else {
                  context.addError(
                      generated.ValidationError.Code
                      .STYLESHEET_AND_INLINE_STYLE_TOO_LONG,
                      context.getFilePosition(),
                      [bytesUsed.toString(), cssSpec.maxBytes.toString()],
                      cssSpec.maxBytesSpecUrl, validationResult);
              }
          }
        }
        */
    }

      /**
       * Emits errors when there is a ValueSetRequirement with no matching ValueSetProvision in the document.
       *
       * @param Context          $context Validation context.
       * @param ValidationResult $validationResult Validation result.
       */
    private function maybeEmitValueSetMismatchErrors($context, $validationResult)
    {
        /*
        Const providedKeys = context.valueSetsProvided();
        for (const [requiredKey, errors] of context.valueSetsRequired()) {
        if (!providedKeys.has(/** @type {string} * / (requiredKey))) {
          for (const error of errors)
            context.addBuiltError(error, validationResult);
        }
        */
    }

    /**
     * Validates the <html> tag for type identifiers.
     *
     * @param ParsedTag        $htmlTag          <html> tag to validate.
     * @param Context          $context          Validation context.
     * @param ValidationResult $validationResult Validation result.
     */
    public function validateHtmlTag(ParsedTag $htmlTag, Context $context, ValidationResult $validationResult)
    {
        switch ($this->htmlFormat) {
            case Format::AMP:
                $this->validateTypeIdentifiers(
                    $htmlTag->attributes(),
                    [
                        Attribute::AMP_EMOJI,
                        Attribute::AMP_EMOJI_ALT,
                        Attribute::AMP,
                        Attribute::TRANSFORMED,
                        Attribute::DATA_AMPDEVMODE
                    ],
                    $context,
                    $validationResult
                );
                break;
            case Format::AMP4ADS:
                $this->validateTypeIdentifiers(
                    $htmlTag->attributes(),
                    [
                        Attribute::AMP4ADS_EMOJI,
                        Attribute::AMP4ADS_EMOJI_ALT,
                        Attribute::AMP4ADS,
                        Attribute::DATA_AMPDEVMODE
                    ],
                    $context,
                    $validationResult
                );
                break;
            case Format::AMP4EMAIL:
                $this->validateTypeIdentifiers(
                    $htmlTag->attributes(),
                    [
                        Attribute::AMP4EMAIL_EMOJI,
                        Attribute::AMP4EMAIL_EMOJI_ALT,
                        Attribute::AMP4EMAIL,
                        Attribute::DATA_AMPDEVMODE,
                        Attribute::DATA_CSS_STRICT
                    ],
                    $context,
                    $validationResult
                );
                break;
        }
    }

    /**
     * @param ParsedAttribute[] $attributes        Array of parsed attributes.
     * @param string[]          $formatIdentifiers Array of format identifiers to validate against.
     * @param Context           $context           Validation context.
     * @param ValidationResult  $validationResult  Validation result.
     */
    private function validateTypeIdentifiers(
        $attributes,
        $formatIdentifiers,
        Context $context,
        ValidationResult $validationResult
    ) {
        $hasMandatoryTypeIdentifier = false;
        foreach ($attributes as $attribute) {
            // Verify this attribute is a type identifier. Other attributes are validated in validateAttributes().
            if ($this->isTypeIdentifier($attribute->name())) {
                // Verify this type identifier is allowed for this format.
                if (in_array($attribute->name(), $formatIdentifiers, true)) {
                    // Only add the type identifier once per representation. That is, both "⚡" and "amp", which
                    // represent the same type identifier.
                    $typeIdentifier = str_replace(
                        [Attribute::AMP_EMOJI_ALT, Attribute::AMP_EMOJI],
                        Attribute::AMP,
                        $attribute->name()
                    );
                    if (! in_array($typeIdentifier, $validationResult->getTypeIdentifiers(), true)) {
                        $validationResult->addTypeIdentifier($typeIdentifier);
                        $context->recordTypeIdentifier($typeIdentifier);
                    }

                    // Register the presence of a mandatory identifier (i.e. anything that is not optional).
                    if (! in_array($typeIdentifier, self::OPTIONAL_TYPE_IDENTIFIERS, true)) {
                        $hasMandatoryTypeIdentifier = true;
                    }

                    // The type identifier "transformed" has restrictions on its value.
                    // It must be \w+;v=\d+ (e.g. google;v=1).
                    if (($typeIdentifier === Attribute::TRANSFORMED) && ($attribute->value() !== '')) {
                        $matches = [];
                        if (preg_match(self::TRANSFORMED_VALUE_REGEX, $attribute->value(), $matches)) {
                            $validationResult->setTransformerVersion((int)$matches[1]);
                        } else {
                            $context->addError(
                                InvalidAttrValue::CODE,
                                $context->getFilePosition(),
                                [$attribute->name(), LowerCaseTag::HTML, $attribute->value()],
                                'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml#required-markup',
                                $validationResult
                            );
                        }
                    }
                    if ($typeIdentifier === Attribute::DATA_AMPDEVMODE) {
                        // We always emit an error for this type identifier, but it suppresses other errors later in the
                        // document. See https://github.com/ampproject/amphtml/issues/20974.
                        $context->addError(
                            DevModeOnly::CODE,
                            $context->getFilePosition(),
                            [],
                            '',
                            $validationResult
                        );
                    }
                } else {
                    $context->addError(
                        DisallowedAttr::CODE,
                        $context->getFilePosition(),
                        [$attribute->name(), LowerCaseTag::HTML],
                        'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml#required-markup',
                        $validationResult
                    );
                }
            }
        }
        if (! $hasMandatoryTypeIdentifier) {
            // Missing mandatory type identifier (any AMP variant but "transformed").
            $context->addError(
                MandatoryAttrMissing::CODE,
                $context->getFilePosition(),
                [$formatIdentifiers[0], LowerCaseTag::HTML],
                'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml#required-markup',
                $validationResult
            );
        }
    }

    /**
     * Check whether a given attribute is a valid type identifier.
     *
     * @param string $attribute Attribute to check.
     * @return bool Whether the provided attribute is a valid type identifier.
     */
    private function isTypeIdentifier($attribute)
    {
        return in_array($attribute, self::TYPE_IDENTIFIERS, true);
    }
}
PK.3Y+�l��Lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/ValueSetProvision.php<?php

namespace AmpProject\Validator;

/**
 * Value set provision structure.
 *
 * @package ampproject/amp-toolbox
 */
final class ValueSetProvision
{
}
PK.3Y@�x��Nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/ValueSetRequirement.php<?php

namespace AmpProject\Validator;

/**
 * Value set requirement structure.
 *
 * @package ampproject/amp-toolbox
 */
final class ValueSetRequirement
{
}
PK.3Y�g<		Lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AggregateTag.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec;

use AmpProject\Exception\InvalidSpecRuleName;

/**
 * An aggregate tag is the aggregate of multiple Tag instances that represent the same HTML element.
 *
 * An aggregate tag is a simplification which only provides access to the information that can safely be aggregated.
 *
 * @package ampproject/amp-toolbox
 */
final class AggregateTag extends Tag
{
    /**
     * List of spec rules that can be aggregated.
     *
     * @var string[]
     */
    const AGGREGATEABLE_RULES = [
        'id',
        'tagName',
    ];

    /**
     * Array of Tag instances that this AggregateTag aggregates.
     *
     * @var Tag[]
     */
    protected $tags;

    /**
     * Instantiate an AggregateTag object.
     *
     * @param Tag[] $tags Array of tags that this AggregateTag aggregates.
     */
    public function __construct($tags)
    {
        $this->tags = $tags;
    }

    /**
     * Get the ID of the tag.
     *
     * @return string ID of the tag.
     */
    public function getId()
    {
        return 'AggregateTag for ' . $this->get(SpecRule::TAG_NAME);
    }

    /**
     * Check whether a given spec rule is present.
     *
     * Note: For an aggregate tag, this shows only the rules that can unambiguously be aggregated.
     *
     * @param string $specRuleName Name of the spec rule to check for.
     * @return bool Whether the given spec rule is contained in the spec.
     */
    public function has($specRuleName)
    {
        return in_array($specRuleName, static::AGGREGATEABLE_RULES, true);
    }

    /**
     * Get a specific spec rule.
     *
     * Note: For an aggregate tag, this returns only the rules that can unambiguously be aggregated.
     *
     * @param string $specRuleName Name of the spec rule to get.
     * @return mixed Spec rule data that was requested.
     */
    public function get($specRuleName)
    {
        if (!$this->has($specRuleName)) {
            throw InvalidSpecRuleName::forSpecRuleName($specRuleName);
        }

        switch ($specRuleName) {
            case 'id':
                return $this->getId();
            default:
                return $this->tags[0]->get($specRuleName);
        }
    }
}
PK.3Y$�:��]bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AggregateTagWithExtensionSpec.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec;

/**
 * An aggregate tag with extension spec is the aggregate of multiple TagWithExtensionSpec instances that represent the
 * same HTML element.
 *
 * An aggregate tag is a simplification which only provides access to the information that can safely be aggregated.
 *
 * @package ampproject/amp-toolbox
 */
final class AggregateTagWithExtensionSpec extends TagWithExtensionSpec
{
    /**
     * Array of TagWithExtensionSpec instances that this AggregateTag aggregates.
     *
     * @var TagWithExtensionSpec[]
     */
    protected $tags;

    /**
     * Instantiate an AggregateTagWithExtensionSpec object.
     *
     * @param TagWithExtensionSpec[] $tags Array of tags that this AggregateTagWithExtensionSpec aggregates.
     */
    public function __construct($tags)
    {
        $this->tags = $tags;
    }

    /**
     * Get the name of the extension.
     *
     * @return string Extension name.
     */
    public function getExtensionName()
    {
        return $this->tags[0]->getExtensionName();
    }

    /**
     * Get the latest available version of the extension.
     *
     * @return string Latest available version.
     */
    public function getLatestVersion()
    {
        return $this->tags[0]->getLatestVersion();
    }

    /**
     * Get the type of the extension.
     *
     * @return string Extension type.
     */
    public function getExtensionType()
    {
        return $this->tags[0]->getExtensionType();
    }

    /**
     * Get the associative array of versions meta data.
     *
     * @return array
     */
    public function getVersionsMeta()
    {
        $versionsMeta = [];

        foreach ($this->tags as $tag) {
            $versionsMeta = array_merge($versionsMeta, $tag->getVersionsMeta());
        }

        return $versionsMeta;
    }
}
PK.3Y��a�	�	Mbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec;

use AmpProject\Exception\InvalidAttributeName;
use AmpProject\Exception\InvalidSpecRuleName;

/**
 * The base class for a single AttributeList object that defines a possible set of allowed attributes.
 *
 * @package ampproject/amp-toolbox
 *
 * @property-read string $id ID of the attribute list.
 */
abstract class AttributeList
{
    /**
     * ID of the attribute list.
     *
     * This needs to be overridden in the extending class.
     *
     * @var string
     */
    const ID = '[attribute list base class]';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [];

    /**
     * Get the ID of the attribute list.
     *
     * @return string ID of the attribute list.
     */
    public function getId()
    {
        return static::ID;
    }

    /**
     * Check whether a given attribute is contained within the list.
     *
     * @param string $attribute Attribute to check for.
     * @return bool Whether the given attribute is contained within the list.
     */
    public function has($attribute)
    {
        return array_key_exists($attribute, static::ATTRIBUTES);
    }

    /**
     * Get a specific attribute.
     *
     * @param string $attribute Attribute to get.
     * @return array Attribute data that was requested.
     */
    public function get($attribute)
    {
        if (!$this->has($attribute)) {
            throw InvalidAttributeName::forAttribute($attribute);
        }

        return static::ATTRIBUTES[$attribute];
    }

    /**
     * Magic getter to return the attributes.
     *
     * @param string $attribute Name of the attribute to return.
     * @return mixed Value of the spec rule.
     */
    public function __get($attribute)
    {
        $attribute = strtolower(preg_replace('/([a-z])([A-Z])/', '$1-$2', $attribute));

        if (substr($attribute, -8) === '_binding') {
            $attribute = '[' . substr($attribute, 0, -8) . ']';
        }

        switch ($attribute) {
            case 'id':
                return static::ID;
            default:
                if (!array_key_exists($attribute, static::ATTRIBUTES)) {
                    throw InvalidSpecRuleName::forSpecRuleName($attribute);
                }

                return static::ATTRIBUTES[$attribute];
        }
    }
}
PK.3YA?�
�
Jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/CssRuleset.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec;

use AmpProject\Exception\InvalidSpecRuleName;

/**
 * The base class for a single CSSRuleset object that provides the CSS validation rules for a specific format.
 *
 * @package ampproject/amp-toolbox
 *
 * @property-read string        $id                         ID of the CSS ruleset.
 * @property-read bool          $allowAllDeclarationInStyle
 * @property-read bool          $allowImportant
 * @property-read bool          $expandVendorPrefixes
 * @property-read bool          $maxBytesIsWarning
 * @property-read bool          $urlBytesIncluded
 * @property-read array<string> $declarationListSvg
 * @property-read array<string> $disabledBy
 * @property-read array<string> $enabledBy
 * @property-read array<array>  $fontUrlSpec
 * @property-read array<string> $htmlFormat
 * @property-read array<array>  $imageUrlSpec
 */
abstract class CssRuleset
{
    /**
     * ID of the CSS ruleset.
     *
     * This needs to be overridden in the extending class.
     *
     * @var string
     */
    const ID = '[css ruleset base class]';

    /**
     * Spec data of the CSS ruleset.
     *
     * @var array
     */
    const SPEC = [];

    /**
     * Get the ID of the CSS ruleset.
     *
     * @return string ID of the CSS ruleset.
     */
    public function getId()
    {
        return static::ID;
    }

    /**
     * Check whether a given spec rule is present.
     *
     * @param string $cssRulesetName Name of the spec rule to check for.
     * @return bool Whether the given spec rule is contained in the spec.
     */
    public function has($cssRulesetName)
    {
        return array_key_exists($cssRulesetName, static::SPEC);
    }

    /**
     * Get a specific spec rule.
     *
     * @param string $cssRulesetName Name of the spec rule to get.
     * @return array Spec rule data that was requested.
     */
    public function get($cssRulesetName)
    {
        if (!$this->has($cssRulesetName)) {
            throw InvalidSpecRuleName::forSpecRuleName($cssRulesetName);
        }

        return static::SPEC[$cssRulesetName];
    }

    /**
     * Magic getter to return the spec rules.
     *
     * @param string $cssRulesetName Name of the spec rule to return.
     * @return mixed Value of the spec rule.
     */
    public function __get($cssRulesetName)
    {
        switch ($cssRulesetName) {
            case 'id':
                return static::ID;
            case SpecRule::ALLOW_ALL_DECLARATION_IN_STYLE:
            case SpecRule::ALLOW_IMPORTANT:
            case SpecRule::EXPAND_VENDOR_PREFIXES:
            case SpecRule::MAX_BYTES_IS_WARNING:
            case SpecRule::URL_BYTES_INCLUDED:
                return array_key_exists($cssRulesetName, static::SPEC) ? static::SPEC[$cssRulesetName] : false;
            case SpecRule::DECLARATION_LIST_SVG:
            case SpecRule::DISABLED_BY:
            case SpecRule::ENABLED_BY:
            case SpecRule::FONT_URL_SPEC:
            case SpecRule::HTML_FORMAT:
            case SpecRule::IMAGE_URL_SPEC:
                return array_key_exists($cssRulesetName, static::SPEC) ? static::SPEC[$cssRulesetName] : [];
            default:
                if (!array_key_exists($cssRulesetName, static::SPEC)) {
                    throw InvalidSpecRuleName::forSpecRuleName($cssRulesetName);
                }

                return static::SPEC[$cssRulesetName];
        }
    }
}
PK.3Yv�|A		Obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/DeclarationList.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec;

use AmpProject\Exception\InvalidDeclarationName;
use AmpProject\Exception\InvalidSpecRuleName;

/**
 * The base class for a single DeclarationList object that defines the set of allowed declarations for a specific type.
 *
 * @package ampproject/amp-toolbox
 *
 * @property-read string $id ID of the declaration list.
 */
abstract class DeclarationList
{
    /**
     * ID of the declaration list.
     *
     * This needs to be overridden in the extending class.
     *
     * @var string
     */
    const ID = '[declaration list base class]';

    /**
     * Array of declarations.
     *
     * @var array<array>
     */
    const DECLARATIONS = [];

    /**
     * Get the ID of the declaration list.
     *
     * @return string ID of the declaration list.
     */
    public function getId()
    {
        return static::ID;
    }

    /**
     * Check whether a given declaration is contained within the list.
     *
     * @param string $declaration Declaration to check for.
     * @return bool Whether the given declaration is contained within the list.
     */
    public function has($declaration)
    {
        return array_key_exists($declaration, static::DECLARATIONS);
    }

    /**
     * Get a specific declaration.
     *
     * @param string $declaration Declaration to get.
     * @return array Declaration data that was requested.
     */
    public function get($declaration)
    {
        if (!$this->has($declaration)) {
            throw InvalidDeclarationName::forDeclaration($declaration);
        }

        return static::DECLARATIONS[$declaration];
    }

    /**
     * Magic getter to return the spec rules.
     *
     * @param string $specRuleName Name of the spec rule to return.
     * @return mixed Value of the spec rule.
     */
    public function __get($specRuleName)
    {
        switch ($specRuleName) {
            case 'id':
                return static::ID;
            default:
                if (!array_key_exists($specRuleName, static::DECLARATIONS)) {
                    throw InvalidSpecRuleName::forSpecRuleName($specRuleName);
                }

                return static::DECLARATIONS[$specRuleName];
        }
    }
}
PK.3Y���
wwQbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec;

use AmpProject\Exception\InvalidSpecRuleName;

/**
 * The base class for a single DescendantTagList that defines the set of allowed descendant tags.
 *
 * @package ampproject/amp-toolbox
 *
 * @property-read string $id ID of the descendant tag list.
 */
abstract class DescendantTagList
{
    /**
     * ID of the descendant tag list.
     *
     * This needs to be overridden in the extending class.
     *
     * @var string
     */
    const ID = '[descendant tag list base class]';

    /**
     * Array of descendant tags.
     *
     * @var array<string>
     */
    const DESCENDANT_TAGS = [];

    /**
     * Get the ID of the descendant tag list.
     *
     * @return string ID of the descendant tag list.
     */
    public function getId()
    {
        return static::ID;
    }

    /**
     * Check whether a given descendant tag is contained within the list.
     *
     * @param string $descendantTag Descendant tag to check for.
     * @return bool Whether the given descendant tag is contained within the list.
     */
    public function has($descendantTag)
    {
        return in_array($descendantTag, static::DESCENDANT_TAGS, true);
    }

    /**
     * Magic getter to return the spec rules.
     *
     * @param string $specRuleName Name of the spec rule to return.
     * @return mixed Value of the spec rule.
     */
    public function __get($specRuleName)
    {
        switch ($specRuleName) {
            case 'id':
                return static::ID;
            default:
                if (!array_key_exists($specRuleName, static::DESCENDANT_TAGS)) {
                    throw InvalidSpecRuleName::forSpecRuleName($specRuleName);
                }

                return static::DESCENDANT_TAGS[$specRuleName];
        }
    }
}
PK.3Y��0�	�	Jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/DocRuleset.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec;

use AmpProject\Exception\InvalidSpecRuleName;

/**
 * The base class for a single DocRuleset object that defines the validation rules that apply to the entire document.
 *
 * @package ampproject/amp-toolbox
 *
 * @property-read string        $id         ID of the document ruleset.
 * @property-read array<string> $htmlFormat HTML format that this DocRuleset applies to.
 */
abstract class DocRuleset
{
    /**
     * ID of the document ruleset.
     *
     * This needs to be overridden in the extending class.
     *
     * @var string
     */
    const ID = '[document ruleset base class]';

    /**
     * Spec data of the document ruleset.
     *
     * @var array
     */
    const SPEC = [];

    /**
     * Get the ID of the document ruleset.
     *
     * @return string ID of the document ruleset.
     */
    public function getId()
    {
        return static::ID;
    }

    /**
     * Check whether a given spec rule is present.
     *
     * @param string $docRulesetName Name of the spec rule to check for.
     * @return bool Whether the given spec rule is contained in the spec.
     */
    public function has($docRulesetName)
    {
        return array_key_exists($docRulesetName, static::SPEC);
    }

    /**
     * Get a specific spec rule.
     *
     * @param string $docRulesetName Name of the spec rule to get.
     * @return array Spec rule data that was requested.
     */
    public function get($docRulesetName)
    {
        if (!$this->has($docRulesetName)) {
            throw InvalidSpecRuleName::forSpecRuleName($docRulesetName);
        }

        return static::SPEC[$docRulesetName];
    }

    /**
     * Magic getter to return the spec rules.
     *
     * @param string $docRulesetName Name of the spec rule to return.
     * @return mixed Value of the spec rule.
     */
    public function __get($docRulesetName)
    {
        switch ($docRulesetName) {
            case 'id':
                return static::ID;
            case SpecRule::HTML_FORMAT:
                return array_key_exists($docRulesetName, static::SPEC) ? static::SPEC[$docRulesetName] : [];
            default:
                if (!array_key_exists($docRulesetName, static::SPEC)) {
                    throw InvalidSpecRuleName::forSpecRuleName($docRulesetName);
                }

                return static::SPEC[$docRulesetName];
        }
    }
}
PK.3Y�d���Ebunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec;

use AmpProject\Exception\InvalidSpecRuleName;

/**
 * The base class for a single validation error definition.
 *
 * @package ampproject/amp-toolbox
 *
 * @property-read string $code   Code of the error.
 * @property-read string $format Formatting template for the error.
 */
abstract class Error
{
    /**
     * Code of the error.
     *
     * This needs to be overridden in the extending class.
     *
     * @var string
     */
    const CODE = '[error base class]';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => '',
    ];

    /**
     * Get the code of the error.
     *
     * @return string Code of the error.
     */
    public function getCode()
    {
        return static::CODE;
    }

    /**
     * Check whether the error has a given spec rule.
     *
     * @param string $specRule Spec rule to check for.
     * @return bool Whether the error has the given spec rule.
     */
    public function has($specRule)
    {
        return array_key_exists($specRule, static::SPEC);
    }

    /**
     * Get a specific spec rule.
     *
     * @param string $specRuleName Name of the spec rule to get.
     * @return mixed Spec rule data that was requested.
     */
    public function get($specRuleName)
    {
        if (!$this->has($specRuleName)) {
            throw InvalidSpecRuleName::forSpecRuleName($specRuleName);
        }

        return static::SPEC[$specRuleName];
    }

    /**
     * Magic getter to return the spec rules.
     *
     * @param string $docRulesetName Name of the spec rule to return.
     * @return mixed Value of the spec rule.
     */
    public function __get($docRulesetName)
    {
        switch ($docRulesetName) {
            case 'code':
                return static::CODE;
            default:
                if (!array_key_exists($docRulesetName, static::SPEC)) {
                    throw InvalidSpecRuleName::forSpecRuleName($docRulesetName);
                }

                return static::SPEC[$docRulesetName];
        }
    }
}
PK.3Y�p�k��Lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Identifiable.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec;

/**
 * An element that has an ID that it can return.
 *
 * @package ampproject/amp-toolbox
 */
interface Identifiable
{
    /**
     * Get the ID of the identifiable element.
     *
     * @return string ID of the identifiable element.
     */
    public function getId();
}
PK.3Y�Ɓ���Obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/IterableSection.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec;

use Countable;
use Iterator;

/**
 * A section that can be iterated in order to get to all of its contents.
 *
 * @package ampproject/amp-toolbox
 */
interface IterableSection extends Iterator, Countable
{
    /**
     * Get the list of available keys.
     *
     * @return array<string> Array of available keys.
     */
    public function getAvailableKeys();

    /**
     * Find the instantiated object for the current key.
     *
     * This should use its own caching mechanism as needed.
     *
     * Ideally, current() should be overridden as well to provide the correct object type-hint.
     *
     * @param string $key Key to retrieve the instantiated object for.
     * @return object Instantiated object for the current key.
     */
    public function findByKey($key);
}
PK.3YaӻZZIbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Iteration.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec;

/**
 * Convenience trait to help implement the IterableSection interface.
 *
 * @package ampproject/amp-toolbox
 */
trait Iteration
{
    /**
     * Array to use for iteration.
     *
     * @var string[]
     */
    private $iterationArray;

    /**
     * Return the current iterable object.
     *
     * @return object Tag object.
     */
    #[\ReturnTypeWillChange]
    public function current()
    {
        $this->initIterationArray();

        $key = current($this->iterationArray);

        return $this->findByKey($key);
    }

    /**
     * Move forward to next iterable object.
     *
     * @return void Any returned value is ignored.
     */
    #[\ReturnTypeWillChange]
    public function next()
    {
        $this->initIterationArray();

        next($this->iterationArray);
    }

    /**
     * Return the ID of the current iterable object.
     *
     * @return string|null ID of the current iterable object, or null if out of bounds.
     */
    #[\ReturnTypeWillChange]
    public function key()
    {
        $this->initIterationArray();

        return key($this->iterationArray);
    }

    /**
     * Checks if current position is valid.
     *
     * @return bool The return value will be casted to boolean and then evaluated.
     *              Returns true on success or false on failure.
     */
    #[\ReturnTypeWillChange]
    public function valid()
    {
        $this->initIterationArray();

        $key = $this->key();

        return $key !== null && $key !== false;
    }

    /**
     * Rewind the Iterator to the first iterable object.
     *
     * @return void Any returned value is ignored.
     */
    #[\ReturnTypeWillChange]
    public function rewind()
    {
        $this->initIterationArray();

        reset($this->iterationArray);
    }

    /**
     * Initialize the iteration array.
     */
    private function initIterationArray()
    {
        if ($this->iterationArray === null) {
            $this->iterationArray = $this->getAvailableKeys();
        }
    }

    /**
     * Count elements of an iterable section.
     *
     * @return int The custom count as an integer.
     */
    #[\ReturnTypeWillChange]
    public function count()
    {
        return count($this->getAvailableKeys());
    }

    /**
     * Get the list of available keys.
     *
     * @return array<string> Array of available keys.
     */
    abstract public function getAvailableKeys();

    /**
     * Find the instantiated object for the current key.
     *
     * This should use its own caching mechanism as needed.
     *
     * @param string $key Key to retrieve the instantiated object for.
     * @return object Instantiated object for the current key.
     */
    abstract public function findByKey($key);
}
PK.3Yy�y���Hbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/SpecRule.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec;

interface SpecRule
{
    const ADD_VALUE_TO_SET = 'addValueToSet';
    const ALLOW_ALL_DECLARATION_IN_STYLE = 'allowAllDeclarationInStyle';
    const ALLOW_EMPTY = 'allowEmpty';
    const ALLOW_IMPORTANT = 'allowImportant';
    const ALLOW_RELATIVE = 'allowRelative';
    const ALSO_REQUIRES_ATTR = 'alsoRequiresAttr';
    const ALSO_REQUIRES_TAG_WARNING = 'alsoRequiresTagWarning';
    const ALTERNATIVE_NAMES = 'alternativeNames';
    const AMP_LAYOUT = 'ampLayout';
    const AT_RULE_SPEC = 'atRuleSpec';
    const ATTR_LISTS = 'attrLists';
    const ATTRIBUTE_NAME = 'attributeName';
    const ATTRS = 'attrs';
    const BENTO_SUPPORTED_VERSION = 'bentoSupportedVersion';
    const CDATA = 'cdata';
    const CDATA_REGEX = 'cdataRegex';
    const CHILD_TAG_NAME_ONEOF = 'childTagNameOneof';
    const CHILD_TAGS = 'childTags';
    const CSS_DECLARATION = 'cssDeclaration';
    const CSS_SPEC = 'cssSpec';
    const DECLARATION = 'declaration';
    const DECLARATION_LIST = 'declarationList';
    const DECLARATION_LIST_SVG = 'declarationListSvg';
    const DEFINES_DEFAULT_HEIGHT = 'definesDefaultHeight';
    const DEFINES_DEFAULT_WIDTH = 'definesDefaultWidth';
    const DEPRECATED_ALLOW_DUPLICATES = 'deprecatedAllowDuplicates';
    const DEPRECATED_VERSION = 'deprecatedVersion';
    const DEPRECATION = 'deprecation';
    const DEPRECATION_URL = 'deprecationUrl';
    const DESCENDANT_TAG_LIST = 'descendantTagList';
    const DESCRIPTIVE_NAME = 'descriptiveName';
    const DISABLED_BY = 'disabledBy';
    const DISALLOWED_ANCESTOR = 'disallowedAncestor';
    const DISALLOWED_CDATA_REGEX = 'disallowedCdataRegex';
    const DISALLOWED_VALUE_REGEX = 'disallowedValueRegex';
    const DISPATCH_KEY = 'dispatchKey';
    const DOC_CSS_BYTES = 'docCssBytes';
    const ENABLED_BY = 'enabledBy';
    const ERROR_MESSAGE = 'errorMessage';
    const EXCLUDES = 'excludes';
    const EXPAND_VENDOR_PREFIXES = 'expandVendorPrefixes';
    const EXPLICIT_ATTRS_ONLY = 'explicitAttrsOnly';
    const EXTENSION_SPEC = 'extensionSpec';
    const EXTENSION_TYPE = 'extensionType';
    const FEATURE = 'feature';
    const FIRST_CHILD_TAG_NAME_ONEOF = 'firstChildTagNameOneof';
    const FONT_URL_SPEC = 'fontUrlSpec';
    const FORMAT = 'format';
    const HTML_FORMAT = 'htmlFormat';
    const IF_VALUE_REGEX = 'ifValueRegex';
    const IMAGE_URL_SPEC = 'imageUrlSpec';
    const IMPLICIT = 'implicit';
    const ISSUES_AS_ERROR = 'issuesAsError';
    const MANDATORY = 'mandatory';
    const MANDATORY_ANCESTOR = 'mandatoryAncestor';
    const MANDATORY_ANCESTOR_SUGGESTED_ALTERNATIVE = 'mandatoryAncestorSuggestedAlternative';
    const MANDATORY_ANYOF = 'mandatoryAnyof';
    const MANDATORY_CDATA = 'mandatoryCdata';
    const MANDATORY_LAST_CHILD = 'mandatoryLastChild';
    const MANDATORY_MIN_NUM_CHILD_TAGS = 'mandatoryMinNumChildTags';
    const MANDATORY_NUM_CHILD_TAGS = 'mandatoryNumChildTags';
    const MANDATORY_ONEOF = 'mandatoryOneof';
    const MANDATORY_PARENT = 'mandatoryParent';
    const MARK_DESCENDANTS = 'markDescendants';
    const MARKER = 'marker';
    const MAX_BYTES = 'maxBytes';
    const MAX_BYTES_IS_WARNING = 'maxBytesIsWarning';
    const MAX_BYTES_PER_INLINE_STYLE = 'maxBytesPerInlineStyle';
    const MAX_BYTES_SPEC_URL = 'maxBytesSpecUrl';
    const MEDIA_QUERY_SPEC = 'mediaQuerySpec';
    const NAME = 'name';
    const NAMED_ID = 'namedId';
    const PROPERTIES = 'properties';
    const PROTOCOL = 'protocol';
    const PSEUDO_CLASS = 'pseudoClass';
    const REFERENCE_POINTS = 'referencePoints';
    const REGEX = 'regex';
    const REQUIRES = 'requires';
    const REQUIRES_ANCESTOR = 'requiresAncestor';
    const REQUIRES_EXTENSION = 'requiresExtension';
    const REQUIRES_USAGE = 'requiresUsage';
    const SATISFIES = 'satisfies';
    const SELECTOR_SPEC = 'selectorSpec';
    const SIBLINGS_DISALLOWED = 'siblingsDisallowed';
    const SPEC_NAME = 'specName';
    const SPEC_URL = 'specUrl';
    const SPECIFICITY = 'specificity';
    const SUPPORTED_LAYOUTS = 'supportedLayouts';
    const TAG_NAME = 'tagName';
    const TAG_SPEC_NAME = 'tagSpecName';
    const TRIGGER = 'trigger';
    const TYPE = 'type';
    const UNIQUE = 'unique';
    const UNIQUE_WARNING = 'uniqueWarning';
    const URL_BYTES_INCLUDED = 'urlBytesIncluded';
    const VALIDATE_AMP4ADS = 'validateAmp4ads';
    const VALIDATE_KEYFRAMES = 'validateKeyframes';
    const VALUE = 'value';
    const VALUE_CASEI = 'valueCasei';
    const VALUE_DOC_CSS = 'valueDocCss';
    const VALUE_DOC_SVG_CSS = 'valueDocSvgCss';
    const VALUE_ONEOF_SET = 'valueOneofSet';
    const VALUE_PROPERTIES = 'valueProperties';
    const VALUE_REGEX = 'valueRegex';
    const VALUE_REGEX_CASEI = 'valueRegexCasei';
    const VALUE_URL = 'valueUrl';
    const VERSION = 'version';
    const VERSION_NAME = 'versionName';
    const WHITESPACE_ONLY = 'whitespaceOnly';
}
PK.3YhLW?��Cbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec;

use AmpProject\Exception\InvalidSpecRuleName;

/**
 * The base class for a single Tag spec definition that provides the validation rules for a specific HTML element.
 *
 * @package ampproject/amp-toolbox
 *
 * @property-read string        $id                     ID of the tag.
 * @property-read array<string> $alsoRequiresTagWarning
 * @property-read array         $ampLayout
 * @property-read array<string> $attrLists
 * @property-read array         $attrs
 * @property-read array         $cdata
 * @property-read array         $childTags
 * @property-read string        $deprecation
 * @property-read string        $deprecationUrl
 * @property-read string        $descendantTagList
 * @property-read string        $descriptiveName
 * @property-read array<string> $disabledBy
 * @property-read array<string> $disallowedAncestor
 * @property-read array<string> $enabledBy
 * @property-read array<string> $excludes
 * @property-read bool          $explicitAttrsOnly
 * @property-read array         $extensionSpec
 * @property-read array<string> $htmlFormat
 * @property-read bool          $mandatory
 * @property-read string        $mandatoryAlternatives
 * @property-read string        $mandatoryAncestor
 * @property-read string        $mandatoryAncestorSuggestedAlternative
 * @property-read bool          $mandatoryLastChild
 * @property-read string        $mandatoryParent
 * @property-read array         $markDescendants
 * @property-read string        $namedId
 * @property-read array<array>  $referencePoints
 * @property-read array<string> $requires
 * @property-read array<string> $requiresExtension
 * @property-read array<string> $satisfies
 * @property-read bool          $siblingsDisallowed
 * @property-read string        $specName
 * @property-read string        $specUrl
 * @property-read string        $tagName
 * @property-read bool          $unique
 * @property-read bool          $uniqueWarning
 */
abstract class Tag
{
    /**
     * ID of the tag.
     *
     * This needs to be overridden in the extending class.
     *
     * @var string
     */
    const ID = '[tag base class]';

    /**
     * Spec data of the tag.
     *
     * @var array
     */
    const SPEC = [];

    /**
     * Get the ID of the tag.
     *
     * @return string ID of the tag.
     */
    public function getId()
    {
        return static::ID;
    }

    /**
     * Check whether a given spec rule is present.
     *
     * @param string $specRuleName Name of the spec rule to check for.
     * @return bool Whether the given spec rule is contained in the spec.
     */
    public function has($specRuleName)
    {
        return array_key_exists($specRuleName, static::SPEC);
    }

    /**
     * Get a specific spec rule.
     *
     * @param string $specRuleName Name of the spec rule to get.
     * @return mixed Spec rule data that was requested.
     */
    public function get($specRuleName)
    {
        switch ($specRuleName) {
            case 'id':
                return static::ID;
            case SpecRule::EXPLICIT_ATTRS_ONLY:
            case SpecRule::MANDATORY:
            case SpecRule::MANDATORY_LAST_CHILD:
            case SpecRule::SIBLINGS_DISALLOWED:
            case SpecRule::UNIQUE:
            case SpecRule::UNIQUE_WARNING:
                return array_key_exists($specRuleName, static::SPEC) ? static::SPEC[$specRuleName] : false;
            case SpecRule::ALSO_REQUIRES_TAG_WARNING:
            case SpecRule::ATTR_LISTS:
            case SpecRule::DISABLED_BY:
            case SpecRule::DISALLOWED_ANCESTOR:
            case SpecRule::ENABLED_BY:
            case SpecRule::EXCLUDES:
            case SpecRule::HTML_FORMAT:
            case SpecRule::REQUIRES:
            case SpecRule::REQUIRES_EXTENSION:
            case SpecRule::SATISFIES:
                return array_key_exists($specRuleName, static::SPEC) ? static::SPEC[$specRuleName] : [];
            default:
                if (!$this->has($specRuleName)) {
                    throw InvalidSpecRuleName::forSpecRuleName($specRuleName);
                }

                return static::SPEC[$specRuleName];
        }
    }

    /**
     * Magic getter to return the spec rules.
     *
     * @param string $specRuleName Name of the spec rule to return.
     * @return mixed Value of the spec rule.
     */
    public function __get($specRuleName)
    {
        return $this->get($specRuleName);
    }
}
PK.3Y���Tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/TagWithExtensionSpec.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec;

use AmpProject\Html\Attribute;

/**
 * A tag specification that provides the script for an AMP extension.
 *
 * @package ampproject/amp-toolbox
 */
abstract class TagWithExtensionSpec extends Tag
{
    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [];

    /**
     * Get the name of the extension.
     *
     * @return string Extension name.
     */
    public function getExtensionName()
    {
        if (! array_key_exists(SpecRule::NAME, static::EXTENSION_SPEC)) {
            return 'unknown';
        }

        return static::EXTENSION_SPEC[SpecRule::NAME];
    }

    /**
     * Get the latest available version of the extension.
     *
     * @return string Latest available version.
     */
    public function getLatestVersion()
    {
        return static::LATEST_VERSION;
    }

    /**
     * Get the type of the extension.
     *
     * @return string Extension type.
     */
    public function getExtensionType()
    {
        if (! array_key_exists(SpecRule::EXTENSION_TYPE, static::EXTENSION_SPEC)) {
            return Attribute::CUSTOM_ELEMENT;
        }

        return str_replace('_', '-', strtolower(static::EXTENSION_SPEC[SpecRule::EXTENSION_TYPE]));
    }

    /**
     * Get the associative array of versions meta data.
     *
     * @return array
     */
    public function getVersionsMeta()
    {
        return static::VERSIONS_META;
    }
}
PK.3Y��,���\bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpAudioCommon.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class AmpAudioCommon.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array $album
 * @property-read array $artist
 * @property-read array $artwork
 * @property-read array $controls
 * @property-read array $controlslist
 * @property-read array<array<string>> $loop
 * @property-read array<array<string>> $muted
 * @property-read array $src
 * @property-read array $album_binding
 * @property-read array $artist_binding
 * @property-read array $artwork_binding
 * @property-read array $controlslist_binding
 * @property-read array $loop_binding
 * @property-read array $src_binding
 * @property-read array $title_binding
 */
final class AmpAudioCommon extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'amp-audio-common';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::ALBUM => [],
        Attribute::ARTIST => [],
        Attribute::ARTWORK => [],
        Attribute::CONTROLS => [],
        Attribute::CONTROLSLIST => [],
        Attribute::LOOP => [
            SpecRule::VALUE => [
                '',
            ],
        ],
        Attribute::MUTED => [
            SpecRule::VALUE => [
                '',
            ],
        ],
        Attribute::SRC => [
            SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
            SpecRule::VALUE_URL => [
                SpecRule::PROTOCOL => [
                    Protocol::HTTPS,
                ],
                SpecRule::ALLOW_RELATIVE => true,
            ],
        ],
        '[ALBUM]' => [],
        '[ARTIST]' => [],
        '[ARTWORK]' => [],
        '[CONTROLSLIST]' => [],
        '[LOOP]' => [],
        '[SRC]' => [],
        '[TITLE]' => [],
    ];
}
PK.3Yi�=���cbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpBaseCarouselCommon.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class AmpBaseCarouselCommon.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array<string> $advanceCount
 * @property-read array<string> $autoAdvance
 * @property-read array<string> $autoAdvanceCount
 * @property-read array<string> $autoAdvanceInterval
 * @property-read array<string> $autoAdvanceLoops
 * @property-read array<string> $controls
 * @property-read array<string> $horizontal
 * @property-read array<string> $loop
 * @property-read array<string> $mixedLength
 * @property-read array<string> $orientation
 * @property-read array<string> $slide
 * @property-read array<string> $snap
 * @property-read array<string> $snapAlign
 * @property-read array<string> $snapBy
 * @property-read array<string> $visibleCount
 * @property-read array $advanceCount_binding
 * @property-read array $autoAdvance_binding
 * @property-read array $autoAdvanceCount_binding
 * @property-read array $autoAdvanceInterval_binding
 * @property-read array $autoAdvanceLoops_binding
 * @property-read array $horizontal_binding
 * @property-read array $loop_binding
 * @property-read array $mixedLength_binding
 * @property-read array $orientation_binding
 * @property-read array $slide_binding
 * @property-read array $snap_binding
 * @property-read array $snapAlign_binding
 * @property-read array $snapBy_binding
 * @property-read array $visibleCount_binding
 */
final class AmpBaseCarouselCommon extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'amp-base-carousel-common';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::ADVANCE_COUNT => [
            SpecRule::VALUE_REGEX => '([^,]+\s+(-?\d+),\s*)*(-?\d+)',
        ],
        Attribute::AUTO_ADVANCE => [
            SpecRule::VALUE_REGEX => '([^,]+\s+(true|false),\s*)*(true|false)',
        ],
        Attribute::AUTO_ADVANCE_COUNT => [
            SpecRule::VALUE_REGEX => '([^,]+\s+(-?\d+),\s*)*(-?\d+)',
        ],
        Attribute::AUTO_ADVANCE_INTERVAL => [
            SpecRule::VALUE_REGEX => '([^,]+\s+(\d+),\s*)*(\d+)',
        ],
        Attribute::AUTO_ADVANCE_LOOPS => [
            SpecRule::VALUE_REGEX => '([^,]+\s+(\d+),\s*)*(\d+)',
        ],
        Attribute::CONTROLS => [
            SpecRule::VALUE_REGEX => '([^,]+\s+(always|auto|never),\s*)*(always|auto|never)',
        ],
        Attribute::HORIZONTAL => [
            SpecRule::VALUE_REGEX => '([^,]+\s+(true|false),\s*)*(true|false)',
        ],
        Attribute::LOOP => [
            SpecRule::VALUE_REGEX => '([^,]+\s+(true|false),\s*)*(true|false|^$)',
        ],
        Attribute::MIXED_LENGTH => [
            SpecRule::VALUE_REGEX => '([^,]+\s+(true|false),\s*)*(true|false)',
        ],
        Attribute::ORIENTATION => [
            SpecRule::VALUE_REGEX => '([^,]+\s+(horizontal|vertical),\s*)*(horizontal|vertical)',
        ],
        Attribute::SLIDE => [
            SpecRule::VALUE_REGEX => '([^,]+\s+(\d+),\s*)*(\d+)',
        ],
        Attribute::SNAP => [
            SpecRule::VALUE_REGEX => '([^,]+\s+(true|false),\s*)*(true|false)',
        ],
        Attribute::SNAP_ALIGN => [
            SpecRule::VALUE_REGEX => '([^,]+\s+(start|center),\s*)*(start|center)',
        ],
        Attribute::SNAP_BY => [
            SpecRule::VALUE_REGEX => '([^,]+\s+(\d+),\s*)*(\d+)',
        ],
        Attribute::VISIBLE_COUNT => [
            SpecRule::VALUE_REGEX => '([^,]+\s+(\d+(\.\d+)?),\s*)*(\d+(\.\d+)?)',
        ],
        '[ADVANCE_COUNT]' => [],
        '[AUTO_ADVANCE]' => [],
        '[AUTO_ADVANCE_COUNT]' => [],
        '[AUTO_ADVANCE_INTERVAL]' => [],
        '[AUTO_ADVANCE_LOOPS]' => [],
        '[HORIZONTAL]' => [],
        '[LOOP]' => [],
        '[MIXED_LENGTH]' => [],
        '[ORIENTATION]' => [],
        '[SLIDE]' => [],
        '[SNAP]' => [],
        '[SNAP_ALIGN]' => [],
        '[SNAP_BY]' => [],
        '[VISIBLE_COUNT]' => [],
    ];
}
PK.3Y�S�_bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpCarouselCommon.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class AmpCarouselCommon.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array<array<string>> $arrows
 * @property-read array<string> $autoplay
 * @property-read array $controls
 * @property-read array<string> $delay
 * @property-read array<array<string>> $dots
 * @property-read array<array<string>> $loop
 * @property-read array<string> $slide
 * @property-read array<array<string>> $type
 * @property-read array $slide_binding
 */
final class AmpCarouselCommon extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'amp-carousel-common';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::ARROWS => [
            SpecRule::VALUE => [
                '',
            ],
            SpecRule::DISABLED_BY => [
                Attribute::AMP4EMAIL,
            ],
        ],
        Attribute::AUTOPLAY => [
            SpecRule::VALUE_REGEX => '(|[0-9]+)',
        ],
        Attribute::CONTROLS => [],
        Attribute::DELAY => [
            SpecRule::VALUE_REGEX => '[0-9]+',
        ],
        Attribute::DOTS => [
            SpecRule::VALUE => [
                '',
            ],
            SpecRule::DISABLED_BY => [
                Attribute::AMP4EMAIL,
            ],
        ],
        Attribute::LOOP => [
            SpecRule::VALUE => [
                '',
            ],
        ],
        Attribute::SLIDE => [
            SpecRule::VALUE_REGEX => '[0-9]+',
        ],
        Attribute::TYPE => [
            SpecRule::VALUE => [
                'carousel',
                'slides',
            ],
        ],
        '[SLIDE]' => [],
    ];
}
PK.3Y�X(�yykbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpDatePickerCommonAttributes.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class AmpDatePickerCommonAttributes.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array<array<string>> $allowBlockedEndDate
 * @property-read array<array<string>> $allowBlockedRanges
 * @property-read array $blocked
 * @property-read array<string> $daySize
 * @property-read array<string> $firstDayOfWeek
 * @property-read array $format
 * @property-read array $highlighted
 * @property-read array $locale
 * @property-read array $max
 * @property-read array $min
 * @property-read array $monthFormat
 * @property-read array<string> $numberOfMonths
 * @property-read array<array<string>> $openAfterClear
 * @property-read array<array<string>> $openAfterSelect
 * @property-read array<array<string>> $hideKeyboardShortcutsPanel
 * @property-read array $src
 * @property-read array $weekDayFormat
 * @property-read array $src_binding
 * @property-read array $max_binding
 * @property-read array $min_binding
 */
final class AmpDatePickerCommonAttributes extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'amp-date-picker-common-attributes';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::ALLOW_BLOCKED_END_DATE => [
            SpecRule::VALUE => [
                '',
            ],
        ],
        Attribute::ALLOW_BLOCKED_RANGES => [
            SpecRule::VALUE => [
                '',
            ],
        ],
        Attribute::BLOCKED => [],
        Attribute::DAY_SIZE => [
            SpecRule::VALUE_REGEX => '[0-9]+',
        ],
        Attribute::FIRST_DAY_OF_WEEK => [
            SpecRule::VALUE_REGEX => '[0-6]',
        ],
        Attribute::FORMAT => [],
        Attribute::HIGHLIGHTED => [],
        Attribute::LOCALE => [],
        Attribute::MAX => [],
        Attribute::MIN => [],
        Attribute::MONTH_FORMAT => [],
        Attribute::NUMBER_OF_MONTHS => [
            SpecRule::VALUE_REGEX => '[0-9]+',
        ],
        Attribute::OPEN_AFTER_CLEAR => [
            SpecRule::VALUE => [
                '',
            ],
        ],
        Attribute::OPEN_AFTER_SELECT => [
            SpecRule::VALUE => [
                '',
            ],
        ],
        Attribute::HIDE_KEYBOARD_SHORTCUTS_PANEL => [
            SpecRule::VALUE => [
                '',
            ],
        ],
        Attribute::SRC => [
            SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
            SpecRule::VALUE_URL => [
                SpecRule::PROTOCOL => [
                    Protocol::HTTPS,
                ],
                SpecRule::ALLOW_RELATIVE => false,
            ],
        ],
        Attribute::WEEK_DAY_FORMAT => [],
        '[SRC]' => [],
        '[MAX]' => [],
        '[MIN]' => [],
    ];
}
PK.3Y<����pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpDatePickerOverlayModeAttributes.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class AmpDatePickerOverlayModeAttributes.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array<array<string>> $touchKeyboardEditable
 */
final class AmpDatePickerOverlayModeAttributes extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'amp-date-picker-overlay-mode-attributes';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::TOUCH_KEYBOARD_EDITABLE => [
            SpecRule::VALUE => [
                '',
            ],
        ],
    ];
}
PK.3Y&2�[\\nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpDatePickerRangeTypeAttributes.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class AmpDatePickerRangeTypeAttributes.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array $endDate
 * @property-read array $endInputSelector
 * @property-read array<string> $maximumNights
 * @property-read array<string> $minimumNights
 * @property-read array $startDate
 * @property-read array $startInputSelector
 */
final class AmpDatePickerRangeTypeAttributes extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'amp-date-picker-range-type-attributes';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::END_DATE => [],
        Attribute::END_INPUT_SELECTOR => [],
        Attribute::MAXIMUM_NIGHTS => [
            SpecRule::VALUE_REGEX => '[0-9]+',
        ],
        Attribute::MINIMUM_NIGHTS => [
            SpecRule::VALUE_REGEX => '[0-9]+',
        ],
        Attribute::START_DATE => [],
        Attribute::START_INPUT_SELECTOR => [],
    ];
}
PK.3Y�M&�ffobunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpDatePickerSingleTypeAttributes.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;

/**
 * Attribute list class AmpDatePickerSingleTypeAttributes.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array $date
 * @property-read array $inputSelector
 */
final class AmpDatePickerSingleTypeAttributes extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'amp-date-picker-single-type-attributes';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::DATE => [],
        Attribute::INPUT_SELECTOR => [],
    ];
}
PK.3Y�>HX��obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpDatePickerStaticModeAttributes.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class AmpDatePickerStaticModeAttributes.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array<array<string>> $fullscreen
 */
final class AmpDatePickerStaticModeAttributes extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'amp-date-picker-static-mode-attributes';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::FULLSCREEN => [
            SpecRule::VALUE => [
                '',
            ],
        ],
    ];
}
PK.3Y�t�99Ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpFacebook.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class AmpFacebook.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array<bool> $dataHref
 */
final class AmpFacebook extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'amp-facebook';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::DATA_HREF => [
            SpecRule::MANDATORY => true,
        ],
    ];
}
PK.3Y���JJ_bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpFacebookStrict.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class AmpFacebookStrict.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array $dataHref
 */
final class AmpFacebookStrict extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'amp-facebook-strict';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::DATA_HREF => [
            SpecRule::MANDATORY => true,
            SpecRule::VALUE_URL => [
                SpecRule::PROTOCOL => [
                    Protocol::HTTP,
                    Protocol::HTTPS,
                ],
                SpecRule::ALLOW_RELATIVE => false,
            ],
        ],
    ];
}
PK.3Y�ۭ���`bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmphtmlEngineAttrs.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class AmphtmlEngineAttrs.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array $async
 * @property-read array<array<string>> $crossorigin
 * @property-read array<array<string>> $type
 */
final class AmphtmlEngineAttrs extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'amphtml-engine-attrs';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::ASYNC => [
            SpecRule::MANDATORY => true,
            SpecRule::VALUE => [
                '',
            ],
        ],
        Attribute::CROSSORIGIN => [
            SpecRule::VALUE => [
                'anonymous',
            ],
        ],
        Attribute::TYPE => [
            SpecRule::VALUE_CASEI => [
                'text/javascript',
            ],
        ],
    ];
}
PK.3Y��|�__fbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmphtmlModuleEngineAttrs.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class AmphtmlModuleEngineAttrs.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array $async
 * @property-read array $crossorigin
 * @property-read array $type
 */
final class AmphtmlModuleEngineAttrs extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'amphtml-module-engine-attrs';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::ASYNC => [
            SpecRule::MANDATORY => true,
            SpecRule::VALUE => [
                '',
            ],
        ],
        Attribute::CROSSORIGIN => [
            SpecRule::MANDATORY => true,
            SpecRule::VALUE => [
                'anonymous',
            ],
        ],
        Attribute::TYPE => [
            SpecRule::MANDATORY => true,
            SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
            SpecRule::VALUE_CASEI => [
                'module',
            ],
        ],
    ];
}
PK.3Yh����hbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmphtmlNomoduleEngineAttrs.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class AmphtmlNomoduleEngineAttrs.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array $async
 * @property-read array<array<string>> $crossorigin
 * @property-read array $nomodule
 * @property-read array<array<string>> $type
 */
final class AmphtmlNomoduleEngineAttrs extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'amphtml-nomodule-engine-attrs';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::ASYNC => [
            SpecRule::MANDATORY => true,
            SpecRule::VALUE => [
                '',
            ],
        ],
        Attribute::CROSSORIGIN => [
            SpecRule::VALUE => [
                'anonymous',
            ],
        ],
        Attribute::NOMODULE => [
            SpecRule::MANDATORY => true,
            SpecRule::VALUE => [
                '',
            ],
        ],
        Attribute::TYPE => [
            SpecRule::VALUE_CASEI => [
                'text/javascript',
            ],
        ],
    ];
}
PK.3Y����dbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpInputmaskCommonAttr.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class AmpInputmaskCommonAttr.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array<array<array<string>>> $maskOutput
 * @property-read array<array<string>> $type
 * @property-read array $type_binding
 */
final class AmpInputmaskCommonAttr extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'amp-inputmask-common-attr';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::MASK_OUTPUT => [
            SpecRule::TRIGGER => [
                SpecRule::ALSO_REQUIRES_ATTR => [
                    Attribute::MASK,
                ],
            ],
        ],
        Attribute::TYPE => [
            SpecRule::VALUE => [
                'text',
                'tel',
                'search',
            ],
        ],
        '[TYPE]' => [],
    ];
}
PK.3Y~��\bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpLayoutAttrs.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;

/**
 * Attribute list class AmpLayoutAttrs.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array $disableInlineWidth
 * @property-read array $height
 * @property-read array $heights
 * @property-read array $layout
 * @property-read array $sizes
 * @property-read array $width
 * @property-read array $height_binding
 * @property-read array $width_binding
 */
final class AmpLayoutAttrs extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = '$AMP_LAYOUT_ATTRS';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::DISABLE_INLINE_WIDTH => [],
        Attribute::HEIGHT => [],
        Attribute::HEIGHTS => [],
        Attribute::LAYOUT => [],
        Attribute::SIZES => [],
        Attribute::WIDTH => [],
        '[HEIGHT]' => [],
        '[WIDTH]' => [],
    ];
}
PK.3Y��`bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpMegaphoneCommon.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class AmpMegaphoneCommon.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array<array<string>> $dataLight
 * @property-read array<array<string>> $dataSharing
 */
final class AmpMegaphoneCommon extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'amp-megaphone-common';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::DATA_LIGHT => [
            SpecRule::VALUE => [
                '',
            ],
        ],
        Attribute::DATA_SHARING => [
            SpecRule::VALUE => [
                '',
            ],
        ],
    ];
}
PK.3Y,�Ebbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpNestedMenuActions.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class AmpNestedMenuActions.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array<string> $ampNestedSubmenuClose
 * @property-read array<string> $ampNestedSubmenuOpen
 */
final class AmpNestedMenuActions extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'amp-nested-menu-actions';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::AMP_NESTED_SUBMENU_CLOSE => [
            SpecRule::MANDATORY_ONEOF => [
                Attribute::AMP_NESTED_SUBMENU_CLOSE,
                Attribute::AMP_NESTED_SUBMENU_OPEN,
            ],
        ],
        Attribute::AMP_NESTED_SUBMENU_OPEN => [
            SpecRule::MANDATORY_ONEOF => [
                Attribute::AMP_NESTED_SUBMENU_CLOSE,
                Attribute::AMP_NESTED_SUBMENU_OPEN,
            ],
        ],
    ];
}
PK.3Y��(a
a
dbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpStreamGalleryCommon.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class AmpStreamGalleryCommon.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array<string> $controls
 * @property-read array<array<string>> $extraSpace
 * @property-read array<string> $loop
 * @property-read array<string> $minVisibleCount
 * @property-read array<string> $maxVisibleCount
 * @property-read array<string> $minItemWidth
 * @property-read array<string> $maxItemWidth
 * @property-read array<string> $outsetArrows
 * @property-read array<string> $peek
 * @property-read array<string> $slideAlign
 * @property-read array<string> $snap
 * @property-read array $controls_binding
 * @property-read array $extraSpace_binding
 * @property-read array $loop_binding
 * @property-read array $minVisibleCount_binding
 * @property-read array $maxVisibleCount_binding
 * @property-read array $minItemWidth_binding
 * @property-read array $maxItemWidth_binding
 * @property-read array $outsetArrows_binding
 * @property-read array $peek_binding
 * @property-read array $slideAlign_binding
 * @property-read array $snap_binding
 */
final class AmpStreamGalleryCommon extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'amp-stream-gallery-common';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::CONTROLS => [
            SpecRule::VALUE_REGEX => '([^,]+\s+(always|auto|never),\s*)*(always|auto|never)',
        ],
        Attribute::EXTRA_SPACE => [
            SpecRule::VALUE => [
                'between',
            ],
        ],
        Attribute::LOOP => [
            SpecRule::VALUE_REGEX => '([^,]+\s+(true|false),\s*)*(true|false|^$)',
        ],
        Attribute::MIN_VISIBLE_COUNT => [
            SpecRule::VALUE_REGEX => '([^,]+\s+(\d+(\.\d+)?),\s*)*(\d+(\.\d+)?)',
        ],
        Attribute::MAX_VISIBLE_COUNT => [
            SpecRule::VALUE_REGEX => '([^,]+\s+(\d+(\.\d+)?),\s*)*(\d+(\.\d+)?)',
        ],
        Attribute::MIN_ITEM_WIDTH => [
            SpecRule::VALUE_REGEX => '([^,]+\s+(\d+),\s*)*(\d+)',
        ],
        Attribute::MAX_ITEM_WIDTH => [
            SpecRule::VALUE_REGEX => '([^,]+\s+(\d+),\s*)*(\d+)',
        ],
        Attribute::OUTSET_ARROWS => [
            SpecRule::VALUE_REGEX => '([^,]+\s+(true|false),\s*)*(true|false)',
        ],
        Attribute::PEEK => [
            SpecRule::VALUE_REGEX => '([^,]+\s+(\d+(\.\d+)?),\s*)*(\d+(\.\d+)?)',
        ],
        Attribute::SLIDE_ALIGN => [
            SpecRule::VALUE_REGEX => '([^,]+\s+(start|center),\s*)*(start|center)',
        ],
        Attribute::SNAP => [
            SpecRule::VALUE_REGEX => '([^,]+\s+(true|false),\s*)*(true|false)',
        ],
        '[CONTROLS]' => [],
        '[EXTRA_SPACE]' => [],
        '[LOOP]' => [],
        '[MIN_VISIBLE_COUNT]' => [],
        '[MAX_VISIBLE_COUNT]' => [],
        '[MIN_ITEM_WIDTH]' => [],
        '[MAX_ITEM_WIDTH]' => [],
        '[OUTSET_ARROWS]' => [],
        '[PEEK]' => [],
        '[SLIDE_ALIGN]' => [],
        '[SNAP]' => [],
    ];
}
PK.3Ys.l�__\bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpVideoCommon.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Extension;
use AmpProject\Html\Attribute;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class AmpVideoCommon.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array $album
 * @property-read array $alt
 * @property-read array $artist
 * @property-read array $artwork
 * @property-read array $attribution
 * @property-read array<array<string>> $autoplay
 * @property-read array<array<string>> $controls
 * @property-read array $controlslist
 * @property-read array $crossorigin
 * @property-read array<array<string>> $disableremoteplayback
 * @property-read array<array<string>> $dock
 * @property-read array<array<string>> $loop
 * @property-read array<array<string>> $muted
 * @property-read array<array<string>> $noaudio
 * @property-read array $objectFit
 * @property-read array $objectPosition
 * @property-read array $placeholder
 * @property-read array<array<string>> $preload
 * @property-read array<array<string>> $rotateToFullscreen
 * @property-read array $src
 * @property-read array $album_binding
 * @property-read array $alt_binding
 * @property-read array $artist_binding
 * @property-read array $artwork_binding
 * @property-read array $attribution_binding
 * @property-read array $controls_binding
 * @property-read array $controlslist_binding
 * @property-read array $loop_binding
 * @property-read array $poster_binding
 * @property-read array $preload_binding
 * @property-read array $src_binding
 * @property-read array $title_binding
 */
final class AmpVideoCommon extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'amp-video-common';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::ALBUM => [],
        Attribute::ALT => [],
        Attribute::ARTIST => [],
        Attribute::ARTWORK => [],
        Attribute::ATTRIBUTION => [],
        Attribute::AUTOPLAY => [
            SpecRule::VALUE => [
                '',
            ],
        ],
        Attribute::CONTROLS => [
            SpecRule::VALUE => [
                '',
            ],
        ],
        Attribute::CONTROLSLIST => [],
        Attribute::CROSSORIGIN => [],
        Attribute::DISABLEREMOTEPLAYBACK => [
            SpecRule::VALUE => [
                '',
            ],
        ],
        Attribute::DOCK => [
            SpecRule::REQUIRES_EXTENSION => [
                Extension::VIDEO_DOCKING,
            ],
        ],
        Attribute::LOOP => [
            SpecRule::VALUE => [
                '',
            ],
        ],
        Attribute::MUTED => [
            SpecRule::VALUE => [
                '',
            ],
        ],
        Attribute::NOAUDIO => [
            SpecRule::VALUE => [
                '',
            ],
        ],
        Attribute::OBJECT_FIT => [],
        Attribute::OBJECT_POSITION => [],
        Attribute::PLACEHOLDER => [],
        Attribute::PRELOAD => [
            SpecRule::VALUE => [
                'auto',
                'metadata',
                'none',
                '',
            ],
        ],
        Attribute::ROTATE_TO_FULLSCREEN => [
            SpecRule::VALUE => [
                '',
            ],
        ],
        Attribute::SRC => [
            SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
            SpecRule::VALUE_URL => [
                SpecRule::PROTOCOL => [
                    Protocol::HTTPS,
                ],
                SpecRule::ALLOW_RELATIVE => true,
            ],
        ],
        '[ALBUM]' => [],
        '[ALT]' => [],
        '[ARTIST]' => [],
        '[ARTWORK]' => [],
        '[ATTRIBUTION]' => [],
        '[CONTROLS]' => [],
        '[CONTROLSLIST]' => [],
        '[LOOP]' => [],
        '[POSTER]' => [],
        '[PRELOAD]' => [],
        '[SRC]' => [],
        '[TITLE]' => [],
    ];
}
PK.3YrF}	
	
bbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpVideoIframeCommon.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Extension;
use AmpProject\Html\Attribute;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class AmpVideoIframeCommon.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array $album
 * @property-read array $alt
 * @property-read array $artist
 * @property-read array $artwork
 * @property-read array $attribution
 * @property-read array<array<string>> $autoplay
 * @property-read array<array<string>> $dock
 * @property-read array<array<string>> $implementsMediaSession
 * @property-read array<array<string>> $implementsRotateToFullscreen
 * @property-read array $poster
 * @property-read array $referrerpolicy
 * @property-read array<array<string>> $rotateToFullscreen
 * @property-read array $src
 * @property-read array $src_binding
 */
final class AmpVideoIframeCommon extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'amp-video-iframe-common';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::ALBUM => [],
        Attribute::ALT => [],
        Attribute::ARTIST => [],
        Attribute::ARTWORK => [],
        Attribute::ATTRIBUTION => [],
        Attribute::AUTOPLAY => [
            SpecRule::VALUE => [
                '',
            ],
        ],
        Attribute::DOCK => [
            SpecRule::REQUIRES_EXTENSION => [
                Extension::VIDEO_DOCKING,
            ],
        ],
        Attribute::IMPLEMENTS_MEDIA_SESSION => [
            SpecRule::VALUE => [
                '',
            ],
        ],
        Attribute::IMPLEMENTS_ROTATE_TO_FULLSCREEN => [
            SpecRule::VALUE => [
                '',
            ],
        ],
        Attribute::POSTER => [],
        Attribute::REFERRERPOLICY => [],
        Attribute::ROTATE_TO_FULLSCREEN => [
            SpecRule::VALUE => [
                '',
            ],
        ],
        Attribute::SRC => [
            SpecRule::MANDATORY => true,
            SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
            SpecRule::VALUE_URL => [
                SpecRule::PROTOCOL => [
                    Protocol::HTTPS,
                ],
            ],
        ],
        '[SRC]' => [],
    ];
}
PK.3YȾd\??Vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/CiteAttr.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class CiteAttr.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array $cite
 */
final class CiteAttr extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'cite-attr';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::CITE => [
            SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
            SpecRule::VALUE_URL => [
                SpecRule::PROTOCOL => [
                    Protocol::HTTP,
                    Protocol::HTTPS,
                ],
                SpecRule::ALLOW_EMPTY => true,
            ],
        ],
    ];
}
PK.3Y�m���_bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/ClickAttributions.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;

/**
 * Attribute list class ClickAttributions.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array $attributiondestination
 * @property-read array $attributionexpiry
 * @property-read array $attributionreportto
 * @property-read array $attributionsourceeventid
 * @property-read array $attributionsourceid
 * @property-read array $conversiondestination
 * @property-read array $impressiondata
 * @property-read array $impressionexpiry
 * @property-read array $reportingorigin
 */
final class ClickAttributions extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'click-attributions';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::ATTRIBUTIONDESTINATION => [],
        Attribute::ATTRIBUTIONEXPIRY => [],
        Attribute::ATTRIBUTIONREPORTTO => [],
        Attribute::ATTRIBUTIONSOURCEEVENTID => [],
        Attribute::ATTRIBUTIONSOURCEID => [],
        Attribute::CONVERSIONDESTINATION => [],
        Attribute::IMPRESSIONDATA => [],
        Attribute::IMPRESSIONEXPIRY => [],
        Attribute::REPORTINGORIGIN => [],
    ];
}
PK.3Y�*!���bbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/CommonExtensionAttrs.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class CommonExtensionAttrs.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array $async
 * @property-read array<array<string>> $crossorigin
 * @property-read array<array<string>> $nonce
 * @property-read array<array<string>> $type
 */
final class CommonExtensionAttrs extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'common-extension-attrs';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::ASYNC => [
            SpecRule::MANDATORY => true,
            SpecRule::VALUE => [
                '',
            ],
        ],
        Attribute::CROSSORIGIN => [
            SpecRule::VALUE => [
                'anonymous',
            ],
        ],
        Attribute::NONCE => [
            SpecRule::DISABLED_BY => [
                Attribute::AMP4EMAIL,
            ],
        ],
        Attribute::TYPE => [
            SpecRule::VALUE_CASEI => [
                'text/javascript',
            ],
        ],
    ];
}
PK.3YA~�==]bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/CommonLinkAttrs.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class CommonLinkAttrs.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array<array<string>> $charset
 * @property-read array $color
 * @property-read array $crossorigin
 * @property-read array $hreflang
 * @property-read array $media
 * @property-read array $sizes
 * @property-read array $target
 * @property-read array $type
 */
final class CommonLinkAttrs extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'common-link-attrs';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::CHARSET => [
            SpecRule::VALUE_CASEI => [
                'utf-8',
            ],
        ],
        Attribute::COLOR => [],
        Attribute::CROSSORIGIN => [],
        Attribute::HREFLANG => [],
        Attribute::MEDIA => [],
        Attribute::SIZES => [],
        Attribute::TARGET => [],
        Attribute::TYPE => [],
    ];
}
PK.3Y^^gf��_bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/ExtendedAmpGlobal.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class ExtendedAmpGlobal.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array<array<string>> $iAmphtmlLayout
 * @property-read array $media
 * @property-read array<array<string>> $noloading
 */
final class ExtendedAmpGlobal extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'extended-amp-global';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::I_AMPHTML_LAYOUT => [
            SpecRule::VALUE_CASEI => [
                'container',
                'fill',
                'fixed',
                'fixed-height',
                'flex-item',
                'fluid',
                'intrinsic',
                'nodisplay',
                'responsive',
            ],
            SpecRule::ENABLED_BY => [
                Attribute::TRANSFORMED,
            ],
        ],
        Attribute::MEDIA => [],
        Attribute::NOLOADING => [
            SpecRule::VALUE => [
                '',
            ],
        ],
    ];
}
PK.3Y��Z��Zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/FormNameAttr.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class FormNameAttr.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array<string> $name
 */
final class FormNameAttr extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'form-name-attr';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::NAME => [
            SpecRule::DISALLOWED_VALUE_REGEX => '(^|\s)(ATTRIBUTE_NODE|CDATA_SECTION_NODE|COMMENT_NODE|DOCUMENT_FRAGMENT_NODE|DOCUMENT_NODE|DOCUMENT_POSITION_CONTAINED_BY|DOCUMENT_POSITION_CONTAINS|DOCUMENT_POSITION_DISCONNECTED|DOCUMENT_POSITION_FOLLOWING|DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC|DOCUMENT_POSITION_PRECEDING|DOCUMENT_TYPE_NODE|ELEMENT_NODE|ENTITY_NODE|ENTITY_REFERENCE_NODE|NOTATION_NODE|PROCESSING_INSTRUCTION_NODE|TEXT_NODE|URL|URLUnencoded|__amp_\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\S*|activeElement|addEventListener|adoptNode|alinkColor|all|anchors|append|appendChild|applets|baseURI|bgColor|body|captureEvents|caretPositionFromPoint|caretRangeFromPoint|characterSet|charset|childElementCount|childNodes|children|clear|cloneNode|close|compareDocumentPosition|compatMode|constructor|contains|contentType|cookie|createAttribute|createAttributeNS|createCDATASection|createComment|createDocumentFragment|createElement|createElementNS|createEvent|createExpression|createNSResolver|createNodeIterator|createProcessingInstruction|createRange|createTextNode|createTreeWalker|currentScript|defaultView|designMode|dir|dispatchEvent|doctype|documentElement|documentURI|domain|elementFromPoint|elementsFromPoint|embeds|enableStyleSheetsForSet|evaluate|execCommand|execCommandShowHelp|exitFullscreen|exitPictureInPicture|exitPointerLock|fgColor|firstChild|firstElementChild|focus|fonts|forms|fullscreen|fullscreenElement|fullscreenEnabled|getCSSCanvasContext|getElementById|getElementsByClassName|getElementsByName|getElementsByTagName|getElementsByTagNameNS|getOverrideStyle|getRootNode|getSelection|hasChildNodes|hasFocus|hasOwnProperty|hasStorageAccess|head|hidden|images|implementation|importNode|inputEncoding|insertBefore|isConnected|isDefaultNamespace|isEqualNode|isPrototypeOf|isSameNode|l10n|lastChild|lastElementChild|lastModified|lastStyleSheetSet|linkColor|links|location|lookupNamespaceURI|lookupPrefix|mozCancelFullScreen|mozFullScreen|mozFullScreenElement|mozFullScreenEnabled|mozSetImageElement|msCSSOMElementFloatMetrics|msCapsLockWarningOff|msElementsFromPoint|msElementsFromRect|nextSibling|nodeName|nodeType|nodeValue|normalize|onabort|onactivate|onafterscriptexecute|onanimationcancel|onanimationend|onanimationiteration|onanimationstart|onauxclick|onbeforeactivate|onbeforecopy|onbeforecut|onbeforedeactivate|onbeforeinput|onbeforepaste|onbeforescriptexecute|onblur|oncancel|oncanplay|oncanplaythrough|onchange|onclick|onclose|oncontextmenu|oncopy|oncuechange|oncut|ondblclick|ondeactivate|ondrag|ondragend|ondragenter|ondragexit|ondragleave|ondragover|ondragstart|ondrop|ondurationchange|onemptied|onended|onerror|onfocus|onfreeze|onfullscreenchange|onfullscreenerror|ongotpointercapture|oninput|oninvalid|onkeydown|onkeypress|onkeyup|onload|onloadeddata|onloadedmetadata|onloadend|onloadstart|onlostpointercapture|onmousedown|onmouseenter|onmouseleave|onmousemove|onmouseout|onmouseover|onmouseup|onmousewheel|onmozfullscreenchange|onmozfullscreenerror|onmscontentzoom|onmsgesturechange|onmsgesturedoubletap|onmsgestureend|onmsgesturehold|onmsgesturestart|onmsgesturetap|onmsinertiastart|onmsmanipulationstatechanged|onmssitemodejumplistitemremoved|onmsthumbnailclick|onpaste|onpause|onplay|onplaying|onpointercancel|onpointerdown|onpointerenter|onpointerleave|onpointerlockchange|onpointerlockerror|onpointermove|onpointerout|onpointerover|onpointerup|onprogress|onratechange|onreadystatechange|onrejectionhandled|onreset|onresize|onresume|onscroll|onsearch|onseeked|onseeking|onselect|onselectionchange|onselectstart|onshow|onstalled|onstop|onsubmit|onsuspend|ontimeupdate|ontoggle|ontransitioncancel|ontransitionend|ontransitionrun|ontransitionstart|onunhandledrejection|onvisibilitychange|onvolumechange|onwaiting|onwebkitanimationend|onwebkitanimationiteration|onwebkitanimationstart|onwebkitfullscreenchange|onwebkitfullscreenerror|onwebkitmouseforcechanged|onwebkitmouseforcedown|onwebkitmouseforceup|onwebkitmouseforcewillbegin|onwebkittransitionend|onwheel|open|origin|ownerDocument|parentElement|parentNode|pictureInPictureElement|pictureInPictureEnabled|plugins|pointerLockElement|preferredStyleSheetSet|prepend|previousSibling|propertyIsEnumerable|queryCommandEnabled|queryCommandIndeterm|queryCommandState|queryCommandSupported|queryCommandText|queryCommandValue|querySelector|querySelectorAll|readyState|referrer|registerElement|releaseCapture|releaseEvents|removeChild|removeEventListener|replaceChild|requestStorageAccess|rootElement|scripts|scrollingElement|selectedStyleSheetSet|styleSheetSets|styleSheets|textContent|title|toLocaleString|toSource|toString|updateSettings|valueOf|visibilityState|vlinkColor|wasDiscarded|webkitCancelFullScreen|webkitCurrentFullScreenElement|webkitExitFullscreen|webkitFullScreenKeyboardInputAllowed|webkitFullscreenElement|webkitFullscreenEnabled|webkitHidden|webkitIsFullScreen|webkitVisibilityState|write|writeln|xmlEncoding|xmlStandalone|xmlVersion)(\s|$)',
        ],
    ];
}
PK.3Y���BBYbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/GlobalAttrs.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Extension;
use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class GlobalAttrs.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array $itemid
 * @property-read array $itemprop
 * @property-read array $itemref
 * @property-read array $itemscope
 * @property-read array $itemtype
 * @property-read array $about
 * @property-read array $content
 * @property-read array $datatype
 * @property-read array $inlist
 * @property-read array $prefix
 * @property-read array $property
 * @property-read array<string> $rel
 * @property-read array $resource
 * @property-read array $rev
 * @property-read array<bool> $style
 * @property-read array $typeof
 * @property-read array $vocab
 * @property-read array $accesskey
 * @property-read array $class
 * @property-read array $dir
 * @property-read array $draggable
 * @property-read array<array<string>> $hidden
 * @property-read array<string> $id
 * @property-read array $lang
 * @property-read array $slot
 * @property-read array $tabindex
 * @property-read array $title
 * @property-read array $translate
 * @property-read array $ariaActivedescendant
 * @property-read array $ariaAtomic
 * @property-read array $ariaAutocomplete
 * @property-read array $ariaBusy
 * @property-read array $ariaChecked
 * @property-read array $ariaControls
 * @property-read array $ariaCurrent
 * @property-read array $ariaDescribedby
 * @property-read array $ariaDisabled
 * @property-read array $ariaDropeffect
 * @property-read array $ariaExpanded
 * @property-read array $ariaFlowto
 * @property-read array $ariaGrabbed
 * @property-read array $ariaHaspopup
 * @property-read array $ariaHidden
 * @property-read array $ariaInvalid
 * @property-read array $ariaLabel
 * @property-read array $ariaLabelledby
 * @property-read array $ariaLevel
 * @property-read array $ariaLive
 * @property-read array $ariaModal
 * @property-read array $ariaMultiline
 * @property-read array $ariaMultiselectable
 * @property-read array $ariaOrientation
 * @property-read array $ariaOwns
 * @property-read array $ariaPosinset
 * @property-read array $ariaPressed
 * @property-read array $ariaReadonly
 * @property-read array $ariaRelevant
 * @property-read array $ariaRequired
 * @property-read array $ariaSelected
 * @property-read array $ariaSetsize
 * @property-read array $ariaSort
 * @property-read array $ariaValuemax
 * @property-read array $ariaValuemin
 * @property-read array $ariaValuenow
 * @property-read array $ariaValuetext
 * @property-read array<array> $on
 * @property-read array $role
 * @property-read array<array<string>> $placeholder
 * @property-read array<array<string>> $fallback
 * @property-read array $overflow
 * @property-read array $ampAccess
 * @property-read array $ampAccessBehavior
 * @property-read array $ampAccessHide
 * @property-read array $ampAccessId
 * @property-read array $ampAccessLoader
 * @property-read array $ampAccessLoading
 * @property-read array $ampAccessOff
 * @property-read array $ampAccessOn
 * @property-read array $ampAccessShow
 * @property-read array $ampAccessStyle
 * @property-read array $ampAccessTemplate
 * @property-read array $iAmpAccessId
 * @property-read array<array<array<string>>> $validationFor
 * @property-read array $visibleWhenInvalid
 * @property-read array $ampFx
 * @property-read array<array<string>> $subscriptionsAction
 * @property-read array<array<string>> $subscriptionsActions
 * @property-read array<array<string>> $subscriptionsDecorate
 * @property-read array<array<string>> $subscriptionsDialog
 * @property-read array<array<string>> $subscriptionsDisplay
 * @property-read array<array<string>> $subscriptionsLang
 * @property-read array<array<string>> $subscriptionsSection
 * @property-read array<array<string>> $subscriptionsService
 * @property-read array<array<string>> $subscriptionsGoogleRtc
 * @property-read array<array<string>> $nextPageHide
 * @property-read array<array<string>> $nextPageReplace
 * @property-read array $ariaActivedescendant_binding
 * @property-read array $ariaAtomic_binding
 * @property-read array $ariaAutocomplete_binding
 * @property-read array $ariaBusy_binding
 * @property-read array $ariaChecked_binding
 * @property-read array $ariaControls_binding
 * @property-read array $ariaDescribedby_binding
 * @property-read array $ariaDisabled_binding
 * @property-read array $ariaDropeffect_binding
 * @property-read array $ariaExpanded_binding
 * @property-read array $ariaFlowto_binding
 * @property-read array $ariaGrabbed_binding
 * @property-read array $ariaHaspopup_binding
 * @property-read array $ariaHidden_binding
 * @property-read array $ariaInvalid_binding
 * @property-read array $ariaLabel_binding
 * @property-read array $ariaLabelledby_binding
 * @property-read array $ariaLevel_binding
 * @property-read array $ariaLive_binding
 * @property-read array $ariaMultiline_binding
 * @property-read array $ariaMultiselectable_binding
 * @property-read array $ariaOrientation_binding
 * @property-read array $ariaOwns_binding
 * @property-read array $ariaPosinset_binding
 * @property-read array $ariaPressed_binding
 * @property-read array $ariaReadonly_binding
 * @property-read array $ariaRelevant_binding
 * @property-read array $ariaRequired_binding
 * @property-read array $ariaSelected_binding
 * @property-read array $ariaSetsize_binding
 * @property-read array $ariaSort_binding
 * @property-read array $ariaValuemax_binding
 * @property-read array $ariaValuemin_binding
 * @property-read array $ariaValuenow_binding
 * @property-read array $ariaValuetext_binding
 * @property-read array $class_binding
 * @property-read array $hidden_binding
 * @property-read array $text_binding
 * @property-read array<array<string>> $iAmphtmlBinding
 * @property-read array<array<array<string>>> $autoscroll
 */
final class GlobalAttrs extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = '$GLOBAL_ATTRS';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::ITEMID => [],
        Attribute::ITEMPROP => [],
        Attribute::ITEMREF => [],
        Attribute::ITEMSCOPE => [],
        Attribute::ITEMTYPE => [],
        Attribute::ABOUT => [],
        Attribute::CONTENT => [],
        Attribute::DATATYPE => [],
        Attribute::INLIST => [],
        Attribute::PREFIX => [],
        Attribute::PROPERTY => [],
        Attribute::REL => [
            SpecRule::DISALLOWED_VALUE_REGEX => '(^|\s)(canonical|components|dns-prefetch|import|manifest|preconnect|preload|prerender|serviceworker|stylesheet|subresource)(\s|$)',
        ],
        Attribute::RESOURCE => [],
        Attribute::REV => [],
        Attribute::STYLE => [
            SpecRule::VALUE_DOC_CSS => true,
        ],
        Attribute::TYPEOF => [],
        Attribute::VOCAB => [],
        Attribute::ACCESSKEY => [],
        Attribute::CLASS_ => [],
        Attribute::DIR => [],
        Attribute::DRAGGABLE => [],
        Attribute::HIDDEN => [
            SpecRule::VALUE => [
                '',
            ],
        ],
        Attribute::ID => [
            SpecRule::DISALLOWED_VALUE_REGEX => '(^|\s)(__amp_\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\S*|\$p|\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|AMP|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|i-amphtml-\S*|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\s|$)',
        ],
        Attribute::LANG => [],
        Attribute::SLOT => [],
        Attribute::TABINDEX => [],
        Attribute::TITLE => [],
        Attribute::TRANSLATE => [],
        Attribute::ARIA_ACTIVEDESCENDANT => [],
        Attribute::ARIA_ATOMIC => [],
        Attribute::ARIA_AUTOCOMPLETE => [],
        Attribute::ARIA_BUSY => [],
        Attribute::ARIA_CHECKED => [],
        Attribute::ARIA_CONTROLS => [],
        Attribute::ARIA_CURRENT => [],
        Attribute::ARIA_DESCRIBEDBY => [],
        Attribute::ARIA_DISABLED => [],
        Attribute::ARIA_DROPEFFECT => [],
        Attribute::ARIA_EXPANDED => [],
        Attribute::ARIA_FLOWTO => [],
        Attribute::ARIA_GRABBED => [],
        Attribute::ARIA_HASPOPUP => [],
        Attribute::ARIA_HIDDEN => [],
        Attribute::ARIA_INVALID => [],
        Attribute::ARIA_LABEL => [],
        Attribute::ARIA_LABELLEDBY => [],
        Attribute::ARIA_LEVEL => [],
        Attribute::ARIA_LIVE => [],
        Attribute::ARIA_MODAL => [],
        Attribute::ARIA_MULTILINE => [],
        Attribute::ARIA_MULTISELECTABLE => [],
        Attribute::ARIA_ORIENTATION => [],
        Attribute::ARIA_OWNS => [],
        Attribute::ARIA_POSINSET => [],
        Attribute::ARIA_PRESSED => [],
        Attribute::ARIA_READONLY => [],
        Attribute::ARIA_RELEVANT => [],
        Attribute::ARIA_REQUIRED => [],
        Attribute::ARIA_SELECTED => [],
        Attribute::ARIA_SETSIZE => [],
        Attribute::ARIA_SORT => [],
        Attribute::ARIA_VALUEMAX => [],
        Attribute::ARIA_VALUEMIN => [],
        Attribute::ARIA_VALUENOW => [],
        Attribute::ARIA_VALUETEXT => [],
        Attribute::ON => [
            SpecRule::TRIGGER => [
                SpecRule::IF_VALUE_REGEX => 'tap:.*',
                SpecRule::ALSO_REQUIRES_ATTR => [
                    Attribute::ROLE,
                    Attribute::TABINDEX,
                ],
            ],
        ],
        Attribute::ROLE => [],
        Attribute::PLACEHOLDER => [
            SpecRule::VALUE => [
                '',
            ],
        ],
        Attribute::FALLBACK => [
            SpecRule::VALUE => [
                '',
            ],
        ],
        Attribute::OVERFLOW => [],
        Attribute::AMP_ACCESS => [],
        Attribute::AMP_ACCESS_BEHAVIOR => [],
        Attribute::AMP_ACCESS_HIDE => [],
        Attribute::AMP_ACCESS_ID => [],
        Attribute::AMP_ACCESS_LOADER => [],
        Attribute::AMP_ACCESS_LOADING => [],
        Attribute::AMP_ACCESS_OFF => [],
        Attribute::AMP_ACCESS_ON => [],
        Attribute::AMP_ACCESS_SHOW => [],
        Attribute::AMP_ACCESS_STYLE => [],
        Attribute::AMP_ACCESS_TEMPLATE => [],
        Attribute::I_AMP_ACCESS_ID => [],
        Attribute::VALIDATION_FOR => [
            SpecRule::TRIGGER => [
                SpecRule::ALSO_REQUIRES_ATTR => [
                    Attribute::VISIBLE_WHEN_INVALID,
                ],
            ],
        ],
        Attribute::VISIBLE_WHEN_INVALID => [
            SpecRule::VALUE => [
                'badInput',
                'customError',
                'patternMismatch',
                'rangeOverflow',
                'rangeUnderflow',
                'stepMismatch',
                'tooLong',
                'tooShort',
                'typeMismatch',
                'valueMissing',
            ],
            SpecRule::TRIGGER => [
                SpecRule::ALSO_REQUIRES_ATTR => [
                    Attribute::VALIDATION_FOR,
                ],
            ],
        ],
        Attribute::AMP_FX => [
            SpecRule::VALUE_REGEX_CASEI => '(fade-in|fade-in-scroll|float-in-bottom|float-in-top|fly-in-bottom|fly-in-left|fly-in-right|fly-in-top|parallax)(\s|fade-in|fade-in-scroll|float-in-bottom|float-in-top|fly-in-bottom|fly-in-left|fly-in-right|fly-in-top|parallax)*',
            SpecRule::REQUIRES_EXTENSION => [
                Extension::FX_COLLECTION,
            ],
        ],
        Attribute::SUBSCRIPTIONS_ACTION => [
            SpecRule::REQUIRES_EXTENSION => [
                Extension::SUBSCRIPTIONS,
            ],
        ],
        Attribute::SUBSCRIPTIONS_ACTIONS => [
            SpecRule::VALUE => [
                '',
            ],
            SpecRule::REQUIRES_EXTENSION => [
                Extension::SUBSCRIPTIONS,
            ],
        ],
        Attribute::SUBSCRIPTIONS_DECORATE => [
            SpecRule::REQUIRES_EXTENSION => [
                Extension::SUBSCRIPTIONS,
            ],
        ],
        Attribute::SUBSCRIPTIONS_DIALOG => [
            SpecRule::VALUE => [
                '',
            ],
            SpecRule::REQUIRES_EXTENSION => [
                Extension::SUBSCRIPTIONS,
            ],
        ],
        Attribute::SUBSCRIPTIONS_DISPLAY => [
            SpecRule::REQUIRES_EXTENSION => [
                Extension::SUBSCRIPTIONS,
            ],
        ],
        Attribute::SUBSCRIPTIONS_LANG => [
            SpecRule::REQUIRES_EXTENSION => [
                Extension::SUBSCRIPTIONS,
            ],
        ],
        Attribute::SUBSCRIPTIONS_SECTION => [
            SpecRule::VALUE_CASEI => [
                'actions',
                'content',
                'content-not-granted',
                'loading',
            ],
            SpecRule::REQUIRES_EXTENSION => [
                Extension::SUBSCRIPTIONS,
            ],
        ],
        Attribute::SUBSCRIPTIONS_SERVICE => [
            SpecRule::REQUIRES_EXTENSION => [
                Extension::SUBSCRIPTIONS,
            ],
        ],
        Attribute::SUBSCRIPTIONS_GOOGLE_RTC => [
            SpecRule::REQUIRES_EXTENSION => [
                Extension::SUBSCRIPTIONS_GOOGLE,
            ],
        ],
        Attribute::NEXT_PAGE_HIDE => [
            SpecRule::REQUIRES_EXTENSION => [
                Extension::NEXT_PAGE,
            ],
        ],
        Attribute::NEXT_PAGE_REPLACE => [
            SpecRule::REQUIRES_EXTENSION => [
                Extension::NEXT_PAGE,
            ],
        ],
        '[ARIA_ACTIVEDESCENDANT]' => [],
        '[ARIA_ATOMIC]' => [],
        '[ARIA_AUTOCOMPLETE]' => [],
        '[ARIA_BUSY]' => [],
        '[ARIA_CHECKED]' => [],
        '[ARIA_CONTROLS]' => [],
        '[ARIA_DESCRIBEDBY]' => [],
        '[ARIA_DISABLED]' => [],
        '[ARIA_DROPEFFECT]' => [],
        '[ARIA_EXPANDED]' => [],
        '[ARIA_FLOWTO]' => [],
        '[ARIA_GRABBED]' => [],
        '[ARIA_HASPOPUP]' => [],
        '[ARIA_HIDDEN]' => [],
        '[ARIA_INVALID]' => [],
        '[ARIA_LABEL]' => [],
        '[ARIA_LABELLEDBY]' => [],
        '[ARIA_LEVEL]' => [],
        '[ARIA_LIVE]' => [],
        '[ARIA_MULTILINE]' => [],
        '[ARIA_MULTISELECTABLE]' => [],
        '[ARIA_ORIENTATION]' => [],
        '[ARIA_OWNS]' => [],
        '[ARIA_POSINSET]' => [],
        '[ARIA_PRESSED]' => [],
        '[ARIA_READONLY]' => [],
        '[ARIA_RELEVANT]' => [],
        '[ARIA_REQUIRED]' => [],
        '[ARIA_SELECTED]' => [],
        '[ARIA_SETSIZE]' => [],
        '[ARIA_SORT]' => [],
        '[ARIA_VALUEMAX]' => [],
        '[ARIA_VALUEMIN]' => [],
        '[ARIA_VALUENOW]' => [],
        '[ARIA_VALUETEXT]' => [],
        '[CLASS]' => [],
        '[HIDDEN]' => [],
        '[TEXT]' => [],
        Attribute::I_AMPHTML_BINDING => [
            SpecRule::VALUE => [
                '',
            ],
            SpecRule::ENABLED_BY => [
                Attribute::TRANSFORMED,
            ],
        ],
        Attribute::AUTOSCROLL => [
            SpecRule::REQUIRES_ANCESTOR => [
                SpecRule::MARKER => [
                    'AUTOSCROLL',
                ],
            ],
        ],
    ];
}
PK.3Y�xN

Vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/ImgAttrs.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class ImgAttrs.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array<array<string>> $align
 * @property-read array $alt
 * @property-read array $border
 * @property-read array<array<string>> $crossorigin
 * @property-read array $height
 * @property-read array $hspace
 * @property-read array<array<string>> $importance
 * @property-read array $ismap
 * @property-read array<array<string>> $loading
 * @property-read array $name
 * @property-read array<array<string>> $referrerpolicy
 * @property-read array $usemap
 * @property-read array $vspace
 * @property-read array $width
 */
final class ImgAttrs extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'img-attrs';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::ALIGN => [
            SpecRule::VALUE_CASEI => [
                'top',
                'middle',
                'bottom',
                'left',
                'right',
            ],
        ],
        Attribute::ALT => [],
        Attribute::BORDER => [],
        Attribute::CROSSORIGIN => [
            SpecRule::VALUE_CASEI => [
                'anonymous',
                'use-credentials',
            ],
        ],
        Attribute::HEIGHT => [],
        Attribute::HSPACE => [],
        Attribute::IMPORTANCE => [
            SpecRule::VALUE_CASEI => [
                'high',
                'low',
                'auto',
            ],
        ],
        Attribute::ISMAP => [],
        Attribute::LOADING => [
            SpecRule::VALUE_CASEI => [
                'lazy',
            ],
        ],
        Attribute::NAME => [],
        Attribute::REFERRERPOLICY => [
            SpecRule::VALUE_CASEI => [
                'no-referrer',
                'no-referrer-when-downgrade',
                'origin',
                'origin-when-cross-origin',
                'same-origin',
                'strict-origin',
                'strict-origin-when-cross-origin',
                'unsafe-url',
            ],
        ],
        Attribute::USEMAP => [],
        Attribute::VSPACE => [],
        Attribute::WIDTH => [],
    ];
}
PK.3Y�˜W��]bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/InputCommonAttr.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class InputCommonAttr.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array $accept
 * @property-read array $accesskey
 * @property-read array $autocomplete
 * @property-read array<array<string>> $autofocus
 * @property-read array $checked
 * @property-read array $disabled
 * @property-read array $height
 * @property-read array<array<string>> $inputmode
 * @property-read array<array<string>> $list
 * @property-read array<array<string>> $enterkeyhint
 * @property-read array $max
 * @property-read array $maxlength
 * @property-read array $min
 * @property-read array $minlength
 * @property-read array $multiple
 * @property-read array $pattern
 * @property-read array $placeholder
 * @property-read array $readonly
 * @property-read array $required
 * @property-read array<array<string>> $selectiondirection
 * @property-read array $size
 * @property-read array $spellcheck
 * @property-read array $step
 * @property-read array $tabindex
 * @property-read array $value
 * @property-read array $width
 * @property-read array<array<string>> $accept_binding
 * @property-read array<array<string>> $accesskey_binding
 * @property-read array $autocomplete_binding
 * @property-read array $checked_binding
 * @property-read array $disabled_binding
 * @property-read array $height_binding
 * @property-read array<array<string>> $inputmode_binding
 * @property-read array $max_binding
 * @property-read array $maxlength_binding
 * @property-read array $min_binding
 * @property-read array $minlength_binding
 * @property-read array $multiple_binding
 * @property-read array $pattern_binding
 * @property-read array $placeholder_binding
 * @property-read array $readonly_binding
 * @property-read array $required_binding
 * @property-read array<array<string>> $selectiondirection_binding
 * @property-read array $size_binding
 * @property-read array $spellcheck_binding
 * @property-read array $step_binding
 * @property-read array $value_binding
 * @property-read array $width_binding
 */
final class InputCommonAttr extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'input-common-attr';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::ACCEPT => [],
        Attribute::ACCESSKEY => [],
        Attribute::AUTOCOMPLETE => [],
        Attribute::AUTOFOCUS => [
            SpecRule::DISABLED_BY => [
                Attribute::AMP4EMAIL,
            ],
        ],
        Attribute::CHECKED => [],
        Attribute::DISABLED => [],
        Attribute::HEIGHT => [],
        Attribute::INPUTMODE => [
            SpecRule::DISABLED_BY => [
                Attribute::AMP4EMAIL,
            ],
        ],
        Attribute::LIST_ => [
            SpecRule::DISABLED_BY => [
                Attribute::AMP4EMAIL,
            ],
        ],
        Attribute::ENTERKEYHINT => [
            SpecRule::DISABLED_BY => [
                Attribute::AMP4EMAIL,
            ],
        ],
        Attribute::MAX => [],
        Attribute::MAXLENGTH => [],
        Attribute::MIN => [],
        Attribute::MINLENGTH => [],
        Attribute::MULTIPLE => [],
        Attribute::PATTERN => [],
        Attribute::PLACEHOLDER => [],
        Attribute::READONLY => [],
        Attribute::REQUIRED => [],
        Attribute::SELECTIONDIRECTION => [
            SpecRule::DISABLED_BY => [
                Attribute::AMP4EMAIL,
            ],
        ],
        Attribute::SIZE => [],
        Attribute::SPELLCHECK => [],
        Attribute::STEP => [],
        Attribute::TABINDEX => [],
        Attribute::VALUE => [],
        Attribute::WIDTH => [],
        '[ACCEPT]' => [
            SpecRule::DISABLED_BY => [
                Attribute::AMP4EMAIL,
            ],
        ],
        '[ACCESSKEY]' => [
            SpecRule::DISABLED_BY => [
                Attribute::AMP4EMAIL,
            ],
        ],
        '[AUTOCOMPLETE]' => [],
        '[CHECKED]' => [],
        '[DISABLED]' => [],
        '[HEIGHT]' => [],
        '[INPUTMODE]' => [
            SpecRule::DISABLED_BY => [
                Attribute::AMP4EMAIL,
            ],
        ],
        '[MAX]' => [],
        '[MAXLENGTH]' => [],
        '[MIN]' => [],
        '[MINLENGTH]' => [],
        '[MULTIPLE]' => [],
        '[PATTERN]' => [],
        '[PLACEHOLDER]' => [],
        '[READONLY]' => [],
        '[REQUIRED]' => [],
        '[SELECTIONDIRECTION]' => [
            SpecRule::DISABLED_BY => [
                Attribute::AMP4EMAIL,
            ],
        ],
        '[SIZE]' => [],
        '[SPELLCHECK]' => [],
        '[STEP]' => [],
        '[VALUE]' => [],
        '[WIDTH]' => [],
    ];
}
PK.3Y�<hF%%mbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/InteractiveOptionsConfettiAttrs.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;

/**
 * Attribute list class InteractiveOptionsConfettiAttrs.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array $option1Confetti
 * @property-read array $option2Confetti
 * @property-read array $option3Confetti
 * @property-read array $option4Confetti
 */
final class InteractiveOptionsConfettiAttrs extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'interactive-options-confetti-attrs';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::OPTION_1_CONFETTI => [],
        Attribute::OPTION_2_CONFETTI => [],
        Attribute::OPTION_3_CONFETTI => [],
        Attribute::OPTION_4_CONFETTI => [],
    ];
}
PK.3YW=�K��hbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/InteractiveOptionsImgAttrs.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class InteractiveOptionsImgAttrs.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array $option1Image
 * @property-read array $option2Image
 * @property-read array<array<array<string>>> $option3Image
 * @property-read array<array<array<string>>> $option4Image
 * @property-read array<bool> $option1ImageAlt
 * @property-read array<bool> $option2ImageAlt
 * @property-read array<array<array<string>>> $option3ImageAlt
 * @property-read array<array<array<string>>> $option4ImageAlt
 */
final class InteractiveOptionsImgAttrs extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'interactive-options-img-attrs';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::OPTION_1_IMAGE => [
            SpecRule::MANDATORY => true,
            SpecRule::VALUE_URL => [
                SpecRule::PROTOCOL => [
                    Protocol::HTTP,
                    Protocol::HTTPS,
                ],
            ],
        ],
        Attribute::OPTION_2_IMAGE => [
            SpecRule::MANDATORY => true,
            SpecRule::VALUE_URL => [
                SpecRule::PROTOCOL => [
                    Protocol::HTTP,
                    Protocol::HTTPS,
                ],
            ],
        ],
        Attribute::OPTION_3_IMAGE => [
            SpecRule::VALUE_URL => [
                SpecRule::PROTOCOL => [
                    Protocol::HTTP,
                    Protocol::HTTPS,
                ],
            ],
            SpecRule::TRIGGER => [
                SpecRule::ALSO_REQUIRES_ATTR => [
                    Attribute::OPTION_3_IMAGE_ALT,
                ],
            ],
        ],
        Attribute::OPTION_4_IMAGE => [
            SpecRule::VALUE_URL => [
                SpecRule::PROTOCOL => [
                    Protocol::HTTP,
                    Protocol::HTTPS,
                ],
            ],
            SpecRule::TRIGGER => [
                SpecRule::ALSO_REQUIRES_ATTR => [
                    Attribute::OPTION_3_IMAGE,
                    Attribute::OPTION_4_IMAGE_ALT,
                ],
            ],
        ],
        Attribute::OPTION_1_IMAGE_ALT => [
            SpecRule::MANDATORY => true,
        ],
        Attribute::OPTION_2_IMAGE_ALT => [
            SpecRule::MANDATORY => true,
        ],
        Attribute::OPTION_3_IMAGE_ALT => [
            SpecRule::TRIGGER => [
                SpecRule::ALSO_REQUIRES_ATTR => [
                    Attribute::OPTION_3_IMAGE,
                ],
            ],
        ],
        Attribute::OPTION_4_IMAGE_ALT => [
            SpecRule::TRIGGER => [
                SpecRule::ALSO_REQUIRES_ATTR => [
                    Attribute::OPTION_4_IMAGE,
                ],
            ],
        ],
    ];
}
PK.3Y	�N/;;tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/InteractiveOptionsResultsCategoryAttrs.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class InteractiveOptionsResultsCategoryAttrs.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array<array<array<string>>> $option1ResultsCategory
 * @property-read array<array<array<string>>> $option2ResultsCategory
 * @property-read array<array<array<string>>> $option3ResultsCategory
 * @property-read array<array<array<string>>> $option4ResultsCategory
 */
final class InteractiveOptionsResultsCategoryAttrs extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'interactive-options-results-category-attrs';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::OPTION_1_RESULTS_CATEGORY => [
            SpecRule::TRIGGER => [
                SpecRule::ALSO_REQUIRES_ATTR => [
                    Attribute::OPTION_2_RESULTS_CATEGORY,
                ],
            ],
        ],
        Attribute::OPTION_2_RESULTS_CATEGORY => [
            SpecRule::TRIGGER => [
                SpecRule::ALSO_REQUIRES_ATTR => [
                    Attribute::OPTION_1_RESULTS_CATEGORY,
                ],
            ],
        ],
        Attribute::OPTION_3_RESULTS_CATEGORY => [
            SpecRule::TRIGGER => [
                SpecRule::ALSO_REQUIRES_ATTR => [
                    Attribute::OPTION_2_RESULTS_CATEGORY,
                    Attribute::OPTION_3_TEXT,
                ],
            ],
        ],
        Attribute::OPTION_4_RESULTS_CATEGORY => [
            SpecRule::TRIGGER => [
                SpecRule::ALSO_REQUIRES_ATTR => [
                    Attribute::OPTION_3_RESULTS_CATEGORY,
                    Attribute::OPTION_4_TEXT,
                ],
            ],
        ],
    ];
}
PK.3Ya��1UUibunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/InteractiveOptionsTextAttrs.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class InteractiveOptionsTextAttrs.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array<bool> $option1Text
 * @property-read array<bool> $option2Text
 * @property-read array $option3Text
 * @property-read array<array<array<string>>> $option4Text
 */
final class InteractiveOptionsTextAttrs extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'interactive-options-text-attrs';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::OPTION_1_TEXT => [
            SpecRule::MANDATORY => true,
        ],
        Attribute::OPTION_2_TEXT => [
            SpecRule::MANDATORY => true,
        ],
        Attribute::OPTION_3_TEXT => [],
        Attribute::OPTION_4_TEXT => [
            SpecRule::TRIGGER => [
                SpecRule::ALSO_REQUIRES_ATTR => [
                    Attribute::OPTION_3_TEXT,
                ],
            ],
        ],
    ];
}
PK.3YL2=Ǭ�kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/InteractiveSharedConfigsAttrs.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class InteractiveSharedConfigsAttrs.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array<bool> $id
 * @property-read array $promptText
 * @property-read array $endpoint
 * @property-read array<array<string>> $theme
 * @property-read array<array<string>> $chipStyle
 * @property-read array<array<string>> $promptSize
 */
final class InteractiveSharedConfigsAttrs extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'interactive-shared-configs-attrs';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::ID => [
            SpecRule::MANDATORY => true,
        ],
        Attribute::PROMPT_TEXT => [],
        Attribute::ENDPOINT => [
            SpecRule::MANDATORY => true,
            SpecRule::VALUE_URL => [
                SpecRule::PROTOCOL => [
                    Protocol::HTTPS,
                ],
                SpecRule::ALLOW_RELATIVE => false,
                SpecRule::ALLOW_EMPTY => false,
            ],
        ],
        Attribute::THEME => [
            SpecRule::VALUE => [
                'light',
                'dark',
            ],
        ],
        Attribute::CHIP_STYLE => [
            SpecRule::VALUE => [
                'shadow',
                'flat',
                'transparent',
            ],
        ],
        Attribute::PROMPT_SIZE => [
            SpecRule::VALUE => [
                'small',
                'medium',
                'large',
            ],
        ],
    ];
}
PK.3Yj����bbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/LightboxableElements.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class LightboxableElements.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array $lightbox
 * @property-read array<string> $lightboxThumbnailId
 */
final class LightboxableElements extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'lightboxable-elements';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::LIGHTBOX => [],
        Attribute::LIGHTBOX_THUMBNAIL_ID => [
            SpecRule::VALUE_REGEX_CASEI => '^[a-z][a-z\d_-]*',
        ],
    ];
}
PK.3Y��ڿ<
<
]bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/MandatoryIdAttr.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class MandatoryIdAttr.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array $id
 */
final class MandatoryIdAttr extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'mandatory-id-attr';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::ID => [
            SpecRule::MANDATORY => true,
            SpecRule::DISALLOWED_VALUE_REGEX => '(^|\s)(__amp_\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\S*|\$p|\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|AMP|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|i-amphtml-\S*|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\s|$)',
        ],
    ];
}
PK.3Y��v4
4
_bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/MandatoryNameAttr.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class MandatoryNameAttr.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array $name
 */
final class MandatoryNameAttr extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'mandatory-name-attr';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::NAME => [
            SpecRule::MANDATORY => true,
            SpecRule::DISALLOWED_VALUE_REGEX => '(^|\s)(__amp_\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\S*|\$p|\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\s|$)',
        ],
    ];
}
PK.3Yw(h���cbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/MandatorySrcAmp4email.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class MandatorySrcAmp4email.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array $src
 */
final class MandatorySrcAmp4email extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'mandatory-src-amp4email';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::SRC => [
            SpecRule::MANDATORY => true,
            SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin|(.|\s){{|}}(.|\s)|^{{.*[^}][^}]$|^[^{][^{].*}}$|^}}|{{$|{{#|{{/|{{\^',
            SpecRule::VALUE_URL => [
                SpecRule::PROTOCOL => [
                    Protocol::HTTPS,
                ],
                SpecRule::ALLOW_RELATIVE => false,
            ],
        ],
    ];
}
PK.3Y�6��bbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/MandatorySrcOrSrcset.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class MandatorySrcOrSrcset.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array $src
 */
final class MandatorySrcOrSrcset extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'mandatory-src-or-srcset';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::SRC => [
            SpecRule::ALTERNATIVE_NAMES => [
                Attribute::SRCSET,
            ],
            SpecRule::MANDATORY => true,
            SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
            SpecRule::VALUE_URL => [
                SpecRule::PROTOCOL => [
                    Protocol::DATA,
                    Protocol::HTTP,
                    Protocol::HTTPS,
                ],
            ],
        ],
    ];
}
PK.3Ya��	�	Vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/NameAttr.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class NameAttr.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array<string> $name
 */
final class NameAttr extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'name-attr';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::NAME => [
            SpecRule::DISALLOWED_VALUE_REGEX => '(^|\s)(__amp_\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\S*|\$p|\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\s|$)',
        ],
    ];
}
PK.3Y�GkVhhWbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/NonceAttr.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class NonceAttr.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array<array<string>> $nonce
 */
final class NonceAttr extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'nonce-attr';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::NONCE => [
            SpecRule::DISABLED_BY => [
                Attribute::AMP4EMAIL,
            ],
        ],
    ];
}
PK.3Y{��n��bbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/OptionalSrcAmp4email.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class OptionalSrcAmp4email.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array $src
 */
final class OptionalSrcAmp4email extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'optional-src-amp4email';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::SRC => [
            SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin|(.|\s){{|}}(.|\s)|^{{.*[^}][^}]$|^[^{][^{].*}}$|^}}|{{$|{{#|{{/|{{\^',
            SpecRule::VALUE_URL => [
                SpecRule::PROTOCOL => [
                    Protocol::HTTPS,
                ],
                SpecRule::ALLOW_RELATIVE => false,
            ],
        ],
    ];
}
PK.3Y`m�-��^bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/PooolAccessAttrs.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Extension;
use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class PooolAccessAttrs.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array<array<string>> $pooolAccessPreview
 * @property-read array<array<string>> $pooolAccessContent
 */
final class PooolAccessAttrs extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'poool-access-attrs';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::POOOL_ACCESS_PREVIEW => [
            SpecRule::REQUIRES_EXTENSION => [
                Extension::ACCESS_POOOL,
            ],
        ],
        Attribute::POOOL_ACCESS_CONTENT => [
            SpecRule::REQUIRES_EXTENSION => [
                Extension::ACCESS_POOOL,
            ],
        ],
    ];
}
PK.3Y�Vobunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/PrivateClickMeasurementAttributes.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;

/**
 * Attribute list class PrivateClickMeasurementAttributes.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array $attributiondestination
 * @property-read array $attributionexpiry
 * @property-read array $attributionreportto
 * @property-read array $attributionsourceeventid
 * @property-read array $attributionsourceid
 * @property-read array $conversiondestination
 * @property-read array $impressiondata
 * @property-read array $impressionexpiry
 * @property-read array $reportingorigin
 */
final class PrivateClickMeasurementAttributes extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'private-click-measurement-attributes';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::ATTRIBUTIONDESTINATION => [],
        Attribute::ATTRIBUTIONEXPIRY => [],
        Attribute::ATTRIBUTIONREPORTTO => [],
        Attribute::ATTRIBUTIONSOURCEEVENTID => [],
        Attribute::ATTRIBUTIONSOURCEID => [],
        Attribute::CONVERSIONDESTINATION => [],
        Attribute::IMPRESSIONDATA => [],
        Attribute::IMPRESSIONEXPIRY => [],
        Attribute::REPORTINGORIGIN => [],
    ];
}
PK.3YsW�p��pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/SvgConditionalProcessingAttributes.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;

/**
 * Attribute list class SvgConditionalProcessingAttributes.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array $requiredextensions
 * @property-read array $requiredfeatures
 * @property-read array $systemlanguage
 */
final class SvgConditionalProcessingAttributes extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'svg-conditional-processing-attributes';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::REQUIREDEXTENSIONS => [],
        Attribute::REQUIREDFEATURES => [],
        Attribute::SYSTEMLANGUAGE => [],
    ];
}
PK.3Ys�k���_bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/SvgCoreAttributes.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;

/**
 * Attribute list class SvgCoreAttributes.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array $xml:lang
 * @property-read array $xml:space
 * @property-read array $xmlns
 * @property-read array $xmlns:xlink
 */
final class SvgCoreAttributes extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'svg-core-attributes';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::XML_LANG => [],
        Attribute::XML_SPACE => [],
        Attribute::XMLNS => [],
        Attribute::XMLNS_XLINK => [],
    ];
}
PK.3Y���?��jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/SvgFilterPrimitiveAttributes.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;

/**
 * Attribute list class SvgFilterPrimitiveAttributes.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array $height
 * @property-read array $result
 * @property-read array $width
 * @property-read array $x
 * @property-read array $y
 */
final class SvgFilterPrimitiveAttributes extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'svg-filter-primitive-attributes';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::HEIGHT => [],
        Attribute::RESULT => [],
        Attribute::WIDTH => [],
        Attribute::X => [],
        Attribute::Y => [],
    ];
}
PK.3YR�z�gbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/SvgPresentationAttributes.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;

/**
 * Attribute list class SvgPresentationAttributes.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array $alignmentBaseline
 * @property-read array $baselineShift
 * @property-read array $clip
 * @property-read array $clipPath
 * @property-read array $clipRule
 * @property-read array $color
 * @property-read array $colorInterpolation
 * @property-read array $colorInterpolationFilters
 * @property-read array $colorProfile
 * @property-read array $colorRendering
 * @property-read array $cursor
 * @property-read array $direction
 * @property-read array $display
 * @property-read array $dominantBaseline
 * @property-read array $enableBackground
 * @property-read array $fill
 * @property-read array $fillOpacity
 * @property-read array $fillRule
 * @property-read array $filter
 * @property-read array $floodColor
 * @property-read array $floodOpacity
 * @property-read array $focusable
 * @property-read array $fontFamily
 * @property-read array $fontSize
 * @property-read array $fontSizeAdjust
 * @property-read array $fontStretch
 * @property-read array $fontStyle
 * @property-read array $fontVariant
 * @property-read array $fontWeight
 * @property-read array $glyphOrientationHorizontal
 * @property-read array $glyphOrientationVertical
 * @property-read array $imageRendering
 * @property-read array $kerning
 * @property-read array $letterSpacing
 * @property-read array $lightingColor
 * @property-read array $markerEnd
 * @property-read array $markerMid
 * @property-read array $markerStart
 * @property-read array $mask
 * @property-read array $opacity
 * @property-read array $overflow
 * @property-read array $pointerEvents
 * @property-read array $shapeRendering
 * @property-read array $stopColor
 * @property-read array $stopOpacity
 * @property-read array $stroke
 * @property-read array $strokeDasharray
 * @property-read array $strokeDashoffset
 * @property-read array $strokeLinecap
 * @property-read array $strokeLinejoin
 * @property-read array $strokeMiterlimit
 * @property-read array $strokeOpacity
 * @property-read array $strokeWidth
 * @property-read array $textAnchor
 * @property-read array $textDecoration
 * @property-read array $textRendering
 * @property-read array $unicodeBidi
 * @property-read array $vectorEffect
 * @property-read array $visibility
 * @property-read array $wordSpacing
 * @property-read array $writingMode
 */
final class SvgPresentationAttributes extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'svg-presentation-attributes';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::ALIGNMENT_BASELINE => [],
        Attribute::BASELINE_SHIFT => [],
        Attribute::CLIP => [],
        Attribute::CLIP_PATH => [],
        Attribute::CLIP_RULE => [],
        Attribute::COLOR => [],
        Attribute::COLOR_INTERPOLATION => [],
        Attribute::COLOR_INTERPOLATION_FILTERS => [],
        Attribute::COLOR_PROFILE => [],
        Attribute::COLOR_RENDERING => [],
        Attribute::CURSOR => [],
        Attribute::DIRECTION => [],
        Attribute::DISPLAY => [],
        Attribute::DOMINANT_BASELINE => [],
        Attribute::ENABLE_BACKGROUND => [],
        Attribute::FILL => [],
        Attribute::FILL_OPACITY => [],
        Attribute::FILL_RULE => [],
        Attribute::FILTER => [],
        Attribute::FLOOD_COLOR => [],
        Attribute::FLOOD_OPACITY => [],
        Attribute::FOCUSABLE => [],
        Attribute::FONT_FAMILY => [],
        Attribute::FONT_SIZE => [],
        Attribute::FONT_SIZE_ADJUST => [],
        Attribute::FONT_STRETCH => [],
        Attribute::FONT_STYLE => [],
        Attribute::FONT_VARIANT => [],
        Attribute::FONT_WEIGHT => [],
        Attribute::GLYPH_ORIENTATION_HORIZONTAL => [],
        Attribute::GLYPH_ORIENTATION_VERTICAL => [],
        Attribute::IMAGE_RENDERING => [],
        Attribute::KERNING => [],
        Attribute::LETTER_SPACING => [],
        Attribute::LIGHTING_COLOR => [],
        Attribute::MARKER_END => [],
        Attribute::MARKER_MID => [],
        Attribute::MARKER_START => [],
        Attribute::MASK => [],
        Attribute::OPACITY => [],
        Attribute::OVERFLOW => [],
        Attribute::POINTER_EVENTS => [],
        Attribute::SHAPE_RENDERING => [],
        Attribute::STOP_COLOR => [],
        Attribute::STOP_OPACITY => [],
        Attribute::STROKE => [],
        Attribute::STROKE_DASHARRAY => [],
        Attribute::STROKE_DASHOFFSET => [],
        Attribute::STROKE_LINECAP => [],
        Attribute::STROKE_LINEJOIN => [],
        Attribute::STROKE_MITERLIMIT => [],
        Attribute::STROKE_OPACITY => [],
        Attribute::STROKE_WIDTH => [],
        Attribute::TEXT_ANCHOR => [],
        Attribute::TEXT_DECORATION => [],
        Attribute::TEXT_RENDERING => [],
        Attribute::UNICODE_BIDI => [],
        Attribute::VECTOR_EFFECT => [],
        Attribute::VISIBILITY => [],
        Attribute::WORD_SPACING => [],
        Attribute::WRITING_MODE => [],
    ];
}
PK.3Y��>>Zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/SvgStyleAttr.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class SvgStyleAttr.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array<bool> $style
 */
final class SvgStyleAttr extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'svg-style-attr';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::STYLE => [
            SpecRule::VALUE_DOC_SVG_CSS => true,
        ],
    ];
}
PK.3Y�u^���kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/SvgTransferFunctionAttributes.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;

/**
 * Attribute list class SvgTransferFunctionAttributes.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array $amplitude
 * @property-read array $exponent
 * @property-read array $intercept
 * @property-read array $offset
 * @property-read array $slope
 * @property-read array $table
 * @property-read array $tablevalues
 * @property-read array $type
 */
final class SvgTransferFunctionAttributes extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'svg-transfer-function-attributes';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::AMPLITUDE => [],
        Attribute::EXPONENT => [],
        Attribute::INTERCEPT => [],
        Attribute::OFFSET => [],
        Attribute::SLOPE => [],
        Attribute::TABLE => [],
        Attribute::TABLEVALUES => [],
        Attribute::TYPE => [],
    ];
}
PK.3Yx,EE`bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/SvgXlinkAttributes.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class SvgXlinkAttributes.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array $xlink:actuate
 * @property-read array $xlink:arcrole
 * @property-read array $xlink:href
 * @property-read array $xlink:role
 * @property-read array $xlink:show
 * @property-read array $xlink:title
 * @property-read array $xlink:type
 */
final class SvgXlinkAttributes extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'svg-xlink-attributes';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::XLINK_ACTUATE => [],
        Attribute::XLINK_ARCROLE => [],
        Attribute::XLINK_HREF => [
            SpecRule::ALTERNATIVE_NAMES => [
                Attribute::HREF,
            ],
            SpecRule::VALUE_URL => [
                SpecRule::PROTOCOL => [
                    Protocol::HTTP,
                    Protocol::HTTPS,
                ],
                SpecRule::ALLOW_EMPTY => false,
            ],
        ],
        Attribute::XLINK_ROLE => [],
        Attribute::XLINK_SHOW => [],
        Attribute::XLINK_TITLE => [],
        Attribute::XLINK_TYPE => [],
    ];
}
PK.3Y��ۊ�cbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/TrackAttrsNoSubtitles.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class TrackAttrsNoSubtitles.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array<array<string>> $default
 * @property-read array<array<string>> $kind
 * @property-read array $label
 * @property-read array $src
 * @property-read array $srclang
 */
final class TrackAttrsNoSubtitles extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'track-attrs-no-subtitles';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::DEFAULT_ => [
            SpecRule::VALUE => [
                '',
            ],
        ],
        Attribute::KIND => [
            SpecRule::VALUE => [
                'captions',
                'chapters',
                'descriptions',
                'metadata',
            ],
        ],
        Attribute::LABEL => [],
        Attribute::SRC => [
            SpecRule::MANDATORY => true,
            SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
            SpecRule::VALUE_URL => [
                SpecRule::PROTOCOL => [
                    Protocol::HTTPS,
                ],
                SpecRule::ALLOW_RELATIVE => false,
            ],
        ],
        Attribute::SRCLANG => [],
    ];
}
PK.3Yq4i��abunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/TrackAttrsSubtitles.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\AttributeList;

use AmpProject\Html\Attribute;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Attribute list class TrackAttrsSubtitles.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array<array<string>> $default
 * @property-read array $kind
 * @property-read array $label
 * @property-read array $src
 * @property-read array<bool> $srclang
 */
final class TrackAttrsSubtitles extends AttributeList implements Identifiable
{
    /**
     * ID of the attribute list.
     *
     * @var string
     */
    const ID = 'track-attrs-subtitles';

    /**
     * Array of attributes.
     *
     * @var array<array>
     */
    const ATTRIBUTES = [
        Attribute::DEFAULT_ => [
            SpecRule::VALUE => [
                '',
            ],
        ],
        Attribute::KIND => [
            SpecRule::MANDATORY => true,
            SpecRule::VALUE_CASEI => [
                'subtitles',
            ],
        ],
        Attribute::LABEL => [],
        Attribute::SRC => [
            SpecRule::MANDATORY => true,
            SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
            SpecRule::VALUE_URL => [
                SpecRule::PROTOCOL => [
                    Protocol::HTTPS,
                ],
                SpecRule::ALLOW_RELATIVE => false,
            ],
        ],
        Attribute::SRCLANG => [
            SpecRule::MANDATORY => true,
        ],
    ];
}
PK.3Y[���Rbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/CssRuleset/Amp4ads.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\CssRuleset;

use AmpProject\Format;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\CssRuleset;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * CSS ruleset class Amp4ads.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array<string> $htmlFormat
 * @property-read string $specUrl
 * @property-read string $maxBytesSpecUrl
 * @property-read bool $allowAllDeclarationInStyle
 * @property-read array $imageUrlSpec
 * @property-read array $fontUrlSpec
 * @property-read bool $allowImportant
 * @property-read bool $expandVendorPrefixes
 */
final class Amp4ads extends CssRuleset implements Identifiable
{
    /**
     * ID of the ruleset.
     *
     * @var string
     */
    const ID = 'AMP4ADS';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::HTML_FORMAT => [
            Format::AMP4ADS,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/a4a_spec/#css',
        SpecRule::MAX_BYTES_SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/a4a_spec/#css',
        SpecRule::ALLOW_ALL_DECLARATION_IN_STYLE => true,
        SpecRule::IMAGE_URL_SPEC => [
            SpecRule::PROTOCOL => [
                Protocol::HTTPS,
                Protocol::HTTP,
                Protocol::DATA,
            ],
            SpecRule::ALLOW_EMPTY => true,
        ],
        SpecRule::FONT_URL_SPEC => [
            SpecRule::PROTOCOL => [
                Protocol::HTTPS,
                Protocol::HTTP,
                Protocol::DATA,
            ],
            SpecRule::ALLOW_EMPTY => true,
        ],
        SpecRule::ALLOW_IMPORTANT => false,
        SpecRule::EXPAND_VENDOR_PREFIXES => true,
    ];
}
PK.3YB�c�,	,	abunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/CssRuleset/Amp4emailDataCssStrict.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\CssRuleset;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\CssRuleset;
use AmpProject\Validator\Spec\DeclarationList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * CSS ruleset class Amp4emailDataCssStrict.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $enabledBy
 * @property-read string $specUrl
 * @property-read int $maxBytes
 * @property-read int $maxBytesPerInlineStyle
 * @property-read bool $urlBytesIncluded
 * @property-read string $maxBytesSpecUrl
 * @property-read bool $allowAllDeclarationInStyle
 * @property-read array<string> $declarationList
 * @property-read array<array<string>> $imageUrlSpec
 * @property-read bool $allowImportant
 * @property-read bool $maxBytesIsWarning
 * @property-read bool $expandVendorPrefixes
 */
final class Amp4emailDataCssStrict extends CssRuleset implements Identifiable
{
    /**
     * ID of the ruleset.
     *
     * @var string
     */
    const ID = 'AMP4EMAIL (data-css-strict)';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::HTML_FORMAT => [
            Format::AMP4EMAIL,
        ],
        SpecRule::ENABLED_BY => [
            Attribute::DATA_CSS_STRICT,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-css',
        SpecRule::MAX_BYTES => 75000,
        SpecRule::MAX_BYTES_PER_INLINE_STYLE => 1000,
        SpecRule::URL_BYTES_INCLUDED => true,
        SpecRule::MAX_BYTES_SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#maximum-size',
        SpecRule::ALLOW_ALL_DECLARATION_IN_STYLE => false,
        SpecRule::DECLARATION_LIST => [
            DeclarationList\EmailSpecificDeclarations::ID,
        ],
        SpecRule::IMAGE_URL_SPEC => [
            SpecRule::PROTOCOL => [
                Protocol::HTTPS,
            ],
        ],
        SpecRule::ALLOW_IMPORTANT => false,
        SpecRule::MAX_BYTES_IS_WARNING => false,
        SpecRule::EXPAND_VENDOR_PREFIXES => false,
    ];
}
PK.3Y'��	�	cbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/CssRuleset/Amp4emailNoDataCssStrict.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\CssRuleset;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\CssRuleset;
use AmpProject\Validator\Spec\DeclarationList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * CSS ruleset class Amp4emailNoDataCssStrict.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $disabledBy
 * @property-read string $specUrl
 * @property-read int $maxBytes
 * @property-read int $maxBytesPerInlineStyle
 * @property-read bool $urlBytesIncluded
 * @property-read string $maxBytesSpecUrl
 * @property-read bool $allowAllDeclarationInStyle
 * @property-read array<string> $declarationList
 * @property-read array<string> $declarationListSvg
 * @property-read array<array<string>> $imageUrlSpec
 * @property-read bool $allowImportant
 * @property-read bool $maxBytesIsWarning
 * @property-read bool $expandVendorPrefixes
 */
final class Amp4emailNoDataCssStrict extends CssRuleset implements Identifiable
{
    /**
     * ID of the ruleset.
     *
     * @var string
     */
    const ID = 'AMP4EMAIL (no-data-css-strict)';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::HTML_FORMAT => [
            Format::AMP4EMAIL,
        ],
        SpecRule::DISABLED_BY => [
            Attribute::DATA_CSS_STRICT,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-css',
        SpecRule::MAX_BYTES => 75000,
        SpecRule::MAX_BYTES_PER_INLINE_STYLE => 1000,
        SpecRule::URL_BYTES_INCLUDED => true,
        SpecRule::MAX_BYTES_SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#maximum-size',
        SpecRule::ALLOW_ALL_DECLARATION_IN_STYLE => true,
        SpecRule::DECLARATION_LIST => [
            DeclarationList\BasicDeclarations::ID,
        ],
        SpecRule::DECLARATION_LIST_SVG => [
            'SVG_BASIC_DECLARATIONS',
        ],
        SpecRule::IMAGE_URL_SPEC => [
            SpecRule::PROTOCOL => [
                Protocol::HTTPS,
            ],
        ],
        SpecRule::ALLOW_IMPORTANT => false,
        SpecRule::MAX_BYTES_IS_WARNING => true,
        SpecRule::EXPAND_VENDOR_PREFIXES => true,
    ];
}
PK.3Y]��W	W	[bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/CssRuleset/AmpNoTransformed.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\CssRuleset;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\CssRuleset;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * CSS ruleset class AmpNoTransformed.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $disabledBy
 * @property-read string $specUrl
 * @property-read int $maxBytes
 * @property-read int $maxBytesPerInlineStyle
 * @property-read bool $urlBytesIncluded
 * @property-read string $maxBytesSpecUrl
 * @property-read bool $allowAllDeclarationInStyle
 * @property-read array $imageUrlSpec
 * @property-read array $fontUrlSpec
 * @property-read bool $allowImportant
 * @property-read bool $expandVendorPrefixes
 */
final class AmpNoTransformed extends CssRuleset implements Identifiable
{
    /**
     * ID of the ruleset.
     *
     * @var string
     */
    const ID = 'AMP (no-transformed)';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DISABLED_BY => [
            Attribute::TRANSFORMED,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#stylesheets',
        SpecRule::MAX_BYTES => 75000,
        SpecRule::MAX_BYTES_PER_INLINE_STYLE => 1000,
        SpecRule::URL_BYTES_INCLUDED => true,
        SpecRule::MAX_BYTES_SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#maximum-size',
        SpecRule::ALLOW_ALL_DECLARATION_IN_STYLE => true,
        SpecRule::IMAGE_URL_SPEC => [
            SpecRule::PROTOCOL => [
                Protocol::HTTPS,
                Protocol::HTTP,
                Protocol::DATA,
            ],
            SpecRule::ALLOW_EMPTY => true,
        ],
        SpecRule::FONT_URL_SPEC => [
            SpecRule::PROTOCOL => [
                Protocol::HTTPS,
                Protocol::HTTP,
                Protocol::DATA,
            ],
            SpecRule::ALLOW_EMPTY => true,
        ],
        SpecRule::ALLOW_IMPORTANT => false,
        SpecRule::EXPAND_VENDOR_PREFIXES => true,
    ];
}
PK.3Y؅�P	P	Ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/CssRuleset/AmpTransformed.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\CssRuleset;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\CssRuleset;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * CSS ruleset class AmpTransformed.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $enabledBy
 * @property-read string $specUrl
 * @property-read int $maxBytes
 * @property-read int $maxBytesPerInlineStyle
 * @property-read bool $urlBytesIncluded
 * @property-read string $maxBytesSpecUrl
 * @property-read bool $allowAllDeclarationInStyle
 * @property-read array $imageUrlSpec
 * @property-read array $fontUrlSpec
 * @property-read bool $allowImportant
 * @property-read bool $expandVendorPrefixes
 */
final class AmpTransformed extends CssRuleset implements Identifiable
{
    /**
     * ID of the ruleset.
     *
     * @var string
     */
    const ID = 'AMP (transformed)';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::ENABLED_BY => [
            Attribute::TRANSFORMED,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#stylesheets',
        SpecRule::MAX_BYTES => 112500,
        SpecRule::MAX_BYTES_PER_INLINE_STYLE => 1500,
        SpecRule::URL_BYTES_INCLUDED => false,
        SpecRule::MAX_BYTES_SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#maximum-size',
        SpecRule::ALLOW_ALL_DECLARATION_IN_STYLE => true,
        SpecRule::IMAGE_URL_SPEC => [
            SpecRule::PROTOCOL => [
                Protocol::HTTPS,
                Protocol::HTTP,
                Protocol::DATA,
            ],
            SpecRule::ALLOW_EMPTY => true,
        ],
        SpecRule::FONT_URL_SPEC => [
            SpecRule::PROTOCOL => [
                Protocol::HTTPS,
                Protocol::HTTP,
                Protocol::DATA,
            ],
            SpecRule::ALLOW_EMPTY => true,
        ],
        SpecRule::ALLOW_IMPORTANT => false,
        SpecRule::EXPAND_VENDOR_PREFIXES => true,
    ];
}
PK.3Y���g�I�Iabunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/DeclarationList/BasicDeclarations.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\DeclarationList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\DeclarationList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Declaration list class BasicDeclarations.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array $alignContent
 * @property-read array $alignItems
 * @property-read array $alignSelf
 * @property-read array $all
 * @property-read array $animation
 * @property-read array $animationDelay
 * @property-read array $animationDirection
 * @property-read array $animationDuration
 * @property-read array $animationFillMode
 * @property-read array $animationIterationCount
 * @property-read array $animationName
 * @property-read array $animationPlayState
 * @property-read array $animationTimingFunction
 * @property-read array $aspectRatio
 * @property-read array $backfaceVisibility
 * @property-read array $background
 * @property-read array $backgroundAttachment
 * @property-read array $backgroundBlendMode
 * @property-read array $backgroundClip
 * @property-read array $backgroundColor
 * @property-read array $backgroundImage
 * @property-read array $backgroundOrigin
 * @property-read array $backgroundPosition
 * @property-read array $backgroundRepeat
 * @property-read array $backgroundSize
 * @property-read array $border
 * @property-read array $borderBottom
 * @property-read array $borderBottomColor
 * @property-read array $borderBottomLeftRadius
 * @property-read array $borderBottomRightRadius
 * @property-read array $borderBottomStyle
 * @property-read array $borderBottomWidth
 * @property-read array $borderCollapse
 * @property-read array $borderColor
 * @property-read array $borderImage
 * @property-read array $borderImageOutset
 * @property-read array $borderImageRepeat
 * @property-read array $borderImageSlice
 * @property-read array $borderImageSource
 * @property-read array $borderImageWidth
 * @property-read array $borderLeft
 * @property-read array $borderLeftColor
 * @property-read array $borderLeftStyle
 * @property-read array $borderLeftWidth
 * @property-read array $borderRadius
 * @property-read array $borderRight
 * @property-read array $borderRightColor
 * @property-read array $borderRightStyle
 * @property-read array $borderRightWidth
 * @property-read array $borderSpacing
 * @property-read array $borderStyle
 * @property-read array $borderTop
 * @property-read array $borderTopColor
 * @property-read array $borderTopLeftRadius
 * @property-read array $borderTopRightRadius
 * @property-read array $borderTopStyle
 * @property-read array $borderTopWidth
 * @property-read array $borderWidth
 * @property-read array $bottom
 * @property-read array $boxDecorationBreak
 * @property-read array $boxShadow
 * @property-read array $boxSizing
 * @property-read array $breakAfter
 * @property-read array $breakBefore
 * @property-read array $breakInside
 * @property-read array $captionSide
 * @property-read array $caretColor
 * @property-read array $clear
 * @property-read array $clip
 * @property-read array $color
 * @property-read array $columnCount
 * @property-read array $columnFill
 * @property-read array $columnGap
 * @property-read array $columnRule
 * @property-read array $columnRuleColor
 * @property-read array $columnRuleStyle
 * @property-read array $columnRuleWidth
 * @property-read array $columnSpan
 * @property-read array $columnWidth
 * @property-read array $columns
 * @property-read array $content
 * @property-read array $counterIncrement
 * @property-read array $counterReset
 * @property-read array $cursor
 * @property-read array $direction
 * @property-read array $display
 * @property-read array $emptyCells
 * @property-read array $filter
 * @property-read array $flex
 * @property-read array $flexBasis
 * @property-read array $flexDirection
 * @property-read array $flexFlow
 * @property-read array $flexGrow
 * @property-read array $flexShrink
 * @property-read array $flexWrap
 * @property-read array $float
 * @property-read array $font
 * @property-read array $fontFamily
 * @property-read array $fontFeatureSettings
 * @property-read array $fontKerning
 * @property-read array $fontLanguageOverride
 * @property-read array $fontSize
 * @property-read array $fontSizeAdjust
 * @property-read array $fontStretch
 * @property-read array $fontStyle
 * @property-read array $fontSynthesis
 * @property-read array $fontVariant
 * @property-read array $fontVariantAlternates
 * @property-read array $fontVariantCaps
 * @property-read array $fontVariantEastAsian
 * @property-read array $fontVariantLigatures
 * @property-read array $fontVariantNumeric
 * @property-read array $fontVariantPosition
 * @property-read array $fontWeight
 * @property-read array $grid
 * @property-read array $gridArea
 * @property-read array $gridAutoColumns
 * @property-read array $gridAutoFlow
 * @property-read array $gridAutoRows
 * @property-read array $gridColumn
 * @property-read array $gridColumnEnd
 * @property-read array $gridColumnGap
 * @property-read array $gridColumnStart
 * @property-read array $gridGap
 * @property-read array $gridRow
 * @property-read array $gridRowEnd
 * @property-read array $gridRowGap
 * @property-read array $gridRowStart
 * @property-read array $gridTemplate
 * @property-read array $gridTemplateAreas
 * @property-read array $gridTemplateColumns
 * @property-read array $gridTemplateRows
 * @property-read array $hangingPunctuation
 * @property-read array $height
 * @property-read array $hyphens
 * @property-read array $imageRendering
 * @property-read array $isolation
 * @property-read array $justifyContent
 * @property-read array $left
 * @property-read array $letterSpacing
 * @property-read array $lineBreak
 * @property-read array $lineHeight
 * @property-read array $listStyle
 * @property-read array $listStyleImage
 * @property-read array $listStylePosition
 * @property-read array $listStyleType
 * @property-read array $margin
 * @property-read array $marginBottom
 * @property-read array $marginLeft
 * @property-read array $marginRight
 * @property-read array $marginTop
 * @property-read array $maxHeight
 * @property-read array $maxWidth
 * @property-read array $minHeight
 * @property-read array $minWidth
 * @property-read array $mixBlendMode
 * @property-read array $objectFit
 * @property-read array $objectPosition
 * @property-read array $opacity
 * @property-read array $order
 * @property-read array $orphans
 * @property-read array $outline
 * @property-read array $outlineColor
 * @property-read array $outlineOffset
 * @property-read array $outlineStyle
 * @property-read array $outlineWidth
 * @property-read array $overflow
 * @property-read array $overflowWrap
 * @property-read array $overflowX
 * @property-read array $overflowY
 * @property-read array $padding
 * @property-read array $paddingBottom
 * @property-read array $paddingLeft
 * @property-read array $paddingRight
 * @property-read array $paddingTop
 * @property-read array $pageBreakAfter
 * @property-read array $pageBreakBefore
 * @property-read array $pageBreakInside
 * @property-read array $perspective
 * @property-read array $perspectiveOrigin
 * @property-read array $pointerEvents
 * @property-read array<array<string>> $position
 * @property-read array $quotes
 * @property-read array $resize
 * @property-read array $right
 * @property-read array $tabSize
 * @property-read array $tableLayout
 * @property-read array $textAlign
 * @property-read array $textAlignLast
 * @property-read array $textCombineUpright
 * @property-read array $textDecoration
 * @property-read array $textDecorationColor
 * @property-read array $textDecorationLine
 * @property-read array $textDecorationSkipInk
 * @property-read array $textDecorationStyle
 * @property-read array $textFillColor
 * @property-read array $textIndent
 * @property-read array $textJustify
 * @property-read array $textOrientation
 * @property-read array $textOverflow
 * @property-read array $textShadow
 * @property-read array $textStroke
 * @property-read array $textStrokeColor
 * @property-read array $textStrokeWidth
 * @property-read array $textTransform
 * @property-read array $textUnderlinePosition
 * @property-read array $top
 * @property-read array $transform
 * @property-read array $transformOrigin
 * @property-read array $transformStyle
 * @property-read array $transition
 * @property-read array $transitionDelay
 * @property-read array $transitionDuration
 * @property-read array $transitionProperty
 * @property-read array $transitionTimingFunction
 * @property-read array $unicodeBidi
 * @property-read array $userSelect
 * @property-read array $verticalAlign
 * @property-read array $visibility
 * @property-read array $whiteSpace
 * @property-read array $widows
 * @property-read array $width
 * @property-read array $wordBreak
 * @property-read array $wordSpacing
 * @property-read array $wordWrap
 * @property-read array $writingMode
 * @property-read array<string> $zIndex
 */
final class BasicDeclarations extends DeclarationList implements Identifiable
{
    /**
     * ID of the declaration list.
     *
     * @var string
     */
    const ID = 'BASIC_DECLARATIONS';

    /**
     * Array of declarations.
     *
     * @var array<array>
     */
    const DECLARATIONS = [
        Attribute::ALIGN_CONTENT => [],
        Attribute::ALIGN_ITEMS => [],
        Attribute::ALIGN_SELF => [],
        Attribute::ALL => [],
        Attribute::ANIMATION => [],
        Attribute::ANIMATION_DELAY => [],
        Attribute::ANIMATION_DIRECTION => [],
        Attribute::ANIMATION_DURATION => [],
        Attribute::ANIMATION_FILL_MODE => [],
        Attribute::ANIMATION_ITERATION_COUNT => [],
        Attribute::ANIMATION_NAME => [],
        Attribute::ANIMATION_PLAY_STATE => [],
        Attribute::ANIMATION_TIMING_FUNCTION => [],
        Attribute::ASPECT_RATIO => [],
        Attribute::BACKFACE_VISIBILITY => [],
        Attribute::BACKGROUND => [],
        Attribute::BACKGROUND_ATTACHMENT => [],
        Attribute::BACKGROUND_BLEND_MODE => [],
        Attribute::BACKGROUND_CLIP => [],
        Attribute::BACKGROUND_COLOR => [],
        Attribute::BACKGROUND_IMAGE => [],
        Attribute::BACKGROUND_ORIGIN => [],
        Attribute::BACKGROUND_POSITION => [],
        Attribute::BACKGROUND_REPEAT => [],
        Attribute::BACKGROUND_SIZE => [],
        Attribute::BORDER => [],
        Attribute::BORDER_BOTTOM => [],
        Attribute::BORDER_BOTTOM_COLOR => [],
        Attribute::BORDER_BOTTOM_LEFT_RADIUS => [],
        Attribute::BORDER_BOTTOM_RIGHT_RADIUS => [],
        Attribute::BORDER_BOTTOM_STYLE => [],
        Attribute::BORDER_BOTTOM_WIDTH => [],
        Attribute::BORDER_COLLAPSE => [],
        Attribute::BORDER_COLOR => [],
        Attribute::BORDER_IMAGE => [],
        Attribute::BORDER_IMAGE_OUTSET => [],
        Attribute::BORDER_IMAGE_REPEAT => [],
        Attribute::BORDER_IMAGE_SLICE => [],
        Attribute::BORDER_IMAGE_SOURCE => [],
        Attribute::BORDER_IMAGE_WIDTH => [],
        Attribute::BORDER_LEFT => [],
        Attribute::BORDER_LEFT_COLOR => [],
        Attribute::BORDER_LEFT_STYLE => [],
        Attribute::BORDER_LEFT_WIDTH => [],
        Attribute::BORDER_RADIUS => [],
        Attribute::BORDER_RIGHT => [],
        Attribute::BORDER_RIGHT_COLOR => [],
        Attribute::BORDER_RIGHT_STYLE => [],
        Attribute::BORDER_RIGHT_WIDTH => [],
        Attribute::BORDER_SPACING => [],
        Attribute::BORDER_STYLE => [],
        Attribute::BORDER_TOP => [],
        Attribute::BORDER_TOP_COLOR => [],
        Attribute::BORDER_TOP_LEFT_RADIUS => [],
        Attribute::BORDER_TOP_RIGHT_RADIUS => [],
        Attribute::BORDER_TOP_STYLE => [],
        Attribute::BORDER_TOP_WIDTH => [],
        Attribute::BORDER_WIDTH => [],
        Attribute::BOTTOM => [],
        Attribute::BOX_DECORATION_BREAK => [],
        Attribute::BOX_SHADOW => [],
        Attribute::BOX_SIZING => [],
        Attribute::BREAK_AFTER => [],
        Attribute::BREAK_BEFORE => [],
        Attribute::BREAK_INSIDE => [],
        Attribute::CAPTION_SIDE => [],
        Attribute::CARET_COLOR => [],
        Attribute::CLEAR => [],
        Attribute::CLIP => [],
        Attribute::COLOR => [],
        Attribute::COLUMN_COUNT => [],
        Attribute::COLUMN_FILL => [],
        Attribute::COLUMN_GAP => [],
        Attribute::COLUMN_RULE => [],
        Attribute::COLUMN_RULE_COLOR => [],
        Attribute::COLUMN_RULE_STYLE => [],
        Attribute::COLUMN_RULE_WIDTH => [],
        Attribute::COLUMN_SPAN => [],
        Attribute::COLUMN_WIDTH => [],
        Attribute::COLUMNS => [],
        Attribute::CONTENT => [],
        Attribute::COUNTER_INCREMENT => [],
        Attribute::COUNTER_RESET => [],
        Attribute::CURSOR => [],
        Attribute::DIRECTION => [],
        Attribute::DISPLAY => [],
        Attribute::EMPTY_CELLS => [],
        Attribute::FILTER => [],
        Attribute::FLEX => [],
        Attribute::FLEX_BASIS => [],
        Attribute::FLEX_DIRECTION => [],
        Attribute::FLEX_FLOW => [],
        Attribute::FLEX_GROW => [],
        Attribute::FLEX_SHRINK => [],
        Attribute::FLEX_WRAP => [],
        Attribute::FLOAT => [],
        Attribute::FONT => [],
        Attribute::FONT_FAMILY => [],
        Attribute::FONT_FEATURE_SETTINGS => [],
        Attribute::FONT_KERNING => [],
        Attribute::FONT_LANGUAGE_OVERRIDE => [],
        Attribute::FONT_SIZE => [],
        Attribute::FONT_SIZE_ADJUST => [],
        Attribute::FONT_STRETCH => [],
        Attribute::FONT_STYLE => [],
        Attribute::FONT_SYNTHESIS => [],
        Attribute::FONT_VARIANT => [],
        Attribute::FONT_VARIANT_ALTERNATES => [],
        Attribute::FONT_VARIANT_CAPS => [],
        Attribute::FONT_VARIANT_EAST_ASIAN => [],
        Attribute::FONT_VARIANT_LIGATURES => [],
        Attribute::FONT_VARIANT_NUMERIC => [],
        Attribute::FONT_VARIANT_POSITION => [],
        Attribute::FONT_WEIGHT => [],
        Attribute::GRID => [],
        Attribute::GRID_AREA => [],
        Attribute::GRID_AUTO_COLUMNS => [],
        Attribute::GRID_AUTO_FLOW => [],
        Attribute::GRID_AUTO_ROWS => [],
        Attribute::GRID_COLUMN => [],
        Attribute::GRID_COLUMN_END => [],
        Attribute::GRID_COLUMN_GAP => [],
        Attribute::GRID_COLUMN_START => [],
        Attribute::GRID_GAP => [],
        Attribute::GRID_ROW => [],
        Attribute::GRID_ROW_END => [],
        Attribute::GRID_ROW_GAP => [],
        Attribute::GRID_ROW_START => [],
        Attribute::GRID_TEMPLATE => [],
        Attribute::GRID_TEMPLATE_AREAS => [],
        Attribute::GRID_TEMPLATE_COLUMNS => [],
        Attribute::GRID_TEMPLATE_ROWS => [],
        Attribute::HANGING_PUNCTUATION => [],
        Attribute::HEIGHT => [],
        Attribute::HYPHENS => [],
        Attribute::IMAGE_RENDERING => [],
        Attribute::ISOLATION => [],
        Attribute::JUSTIFY_CONTENT => [],
        Attribute::LEFT => [],
        Attribute::LETTER_SPACING => [],
        Attribute::LINE_BREAK => [],
        Attribute::LINE_HEIGHT => [],
        Attribute::LIST_STYLE => [],
        Attribute::LIST_STYLE_IMAGE => [],
        Attribute::LIST_STYLE_POSITION => [],
        Attribute::LIST_STYLE_TYPE => [],
        Attribute::MARGIN => [],
        Attribute::MARGIN_BOTTOM => [],
        Attribute::MARGIN_LEFT => [],
        Attribute::MARGIN_RIGHT => [],
        Attribute::MARGIN_TOP => [],
        Attribute::MAX_HEIGHT => [],
        Attribute::MAX_WIDTH => [],
        Attribute::MIN_HEIGHT => [],
        Attribute::MIN_WIDTH => [],
        Attribute::MIX_BLEND_MODE => [],
        Attribute::OBJECT_FIT => [],
        Attribute::OBJECT_POSITION => [],
        Attribute::OPACITY => [],
        Attribute::ORDER => [],
        Attribute::ORPHANS => [],
        Attribute::OUTLINE => [],
        Attribute::OUTLINE_COLOR => [],
        Attribute::OUTLINE_OFFSET => [],
        Attribute::OUTLINE_STYLE => [],
        Attribute::OUTLINE_WIDTH => [],
        Attribute::OVERFLOW => [],
        Attribute::OVERFLOW_WRAP => [],
        Attribute::OVERFLOW_X => [],
        Attribute::OVERFLOW_Y => [],
        Attribute::PADDING => [],
        Attribute::PADDING_BOTTOM => [],
        Attribute::PADDING_LEFT => [],
        Attribute::PADDING_RIGHT => [],
        Attribute::PADDING_TOP => [],
        Attribute::PAGE_BREAK_AFTER => [],
        Attribute::PAGE_BREAK_BEFORE => [],
        Attribute::PAGE_BREAK_INSIDE => [],
        Attribute::PERSPECTIVE => [],
        Attribute::PERSPECTIVE_ORIGIN => [],
        Attribute::POINTER_EVENTS => [],
        Attribute::POSITION => [
            SpecRule::VALUE_CASEI => [
                'absolute',
                'inherit',
                'initial',
                'relative',
                'static',
            ],
        ],
        Attribute::QUOTES => [],
        Attribute::RESIZE => [],
        Attribute::RIGHT => [],
        Attribute::TAB_SIZE => [],
        Attribute::TABLE_LAYOUT => [],
        Attribute::TEXT_ALIGN => [],
        Attribute::TEXT_ALIGN_LAST => [],
        Attribute::TEXT_COMBINE_UPRIGHT => [],
        Attribute::TEXT_DECORATION => [],
        Attribute::TEXT_DECORATION_COLOR => [],
        Attribute::TEXT_DECORATION_LINE => [],
        Attribute::TEXT_DECORATION_SKIP_INK => [],
        Attribute::TEXT_DECORATION_STYLE => [],
        Attribute::TEXT_FILL_COLOR => [],
        Attribute::TEXT_INDENT => [],
        Attribute::TEXT_JUSTIFY => [],
        Attribute::TEXT_ORIENTATION => [],
        Attribute::TEXT_OVERFLOW => [],
        Attribute::TEXT_SHADOW => [],
        Attribute::TEXT_STROKE => [],
        Attribute::TEXT_STROKE_COLOR => [],
        Attribute::TEXT_STROKE_WIDTH => [],
        Attribute::TEXT_TRANSFORM => [],
        Attribute::TEXT_UNDERLINE_POSITION => [],
        Attribute::TOP => [],
        Attribute::TRANSFORM => [],
        Attribute::TRANSFORM_ORIGIN => [],
        Attribute::TRANSFORM_STYLE => [],
        Attribute::TRANSITION => [],
        Attribute::TRANSITION_DELAY => [],
        Attribute::TRANSITION_DURATION => [],
        Attribute::TRANSITION_PROPERTY => [],
        Attribute::TRANSITION_TIMING_FUNCTION => [],
        Attribute::UNICODE_BIDI => [],
        Attribute::USER_SELECT => [],
        Attribute::VERTICAL_ALIGN => [],
        Attribute::VISIBILITY => [],
        Attribute::WHITE_SPACE => [],
        Attribute::WIDOWS => [],
        Attribute::WIDTH => [],
        Attribute::WORD_BREAK => [],
        Attribute::WORD_SPACING => [],
        Attribute::WORD_WRAP => [],
        Attribute::WRITING_MODE => [],
        Attribute::Z_INDEX => [
            SpecRule::VALUE_REGEX_CASEI => 'auto|initial|inherit|[-+]?[0-9]+',
        ],
    ];
}
PK.3Y�^Y�lMlMibunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/DeclarationList/EmailSpecificDeclarations.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\DeclarationList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\DeclarationList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Declaration list class EmailSpecificDeclarations.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array $mozAppearance
 * @property-read array $webkitAppearance
 * @property-read array $webkitTapHighlightColor
 * @property-read array $alignContent
 * @property-read array $alignItems
 * @property-read array $alignSelf
 * @property-read array $appearance
 * @property-read array $aspectRatio
 * @property-read array $azimuth
 * @property-read array $background
 * @property-read array $backgroundAttachment
 * @property-read array $backgroundBlendMode
 * @property-read array $backgroundClip
 * @property-read array $backgroundColor
 * @property-read array $backgroundImage
 * @property-read array $backgroundOrigin
 * @property-read array $backgroundPosition
 * @property-read array $backgroundRepeat
 * @property-read array $backgroundSize
 * @property-read array $border
 * @property-read array $borderBottom
 * @property-read array $borderBottomColor
 * @property-read array $borderBottomLeftRadius
 * @property-read array $borderBottomRightRadius
 * @property-read array $borderBottomStyle
 * @property-read array $borderBottomWidth
 * @property-read array $borderCollapse
 * @property-read array $borderColor
 * @property-read array $borderLeft
 * @property-read array $borderLeftColor
 * @property-read array $borderLeftStyle
 * @property-read array $borderLeftWidth
 * @property-read array $borderRadius
 * @property-read array $borderRight
 * @property-read array $borderRightColor
 * @property-read array $borderRightStyle
 * @property-read array $borderRightWidth
 * @property-read array $borderSpacing
 * @property-read array $borderStyle
 * @property-read array $borderTop
 * @property-read array $borderTopColor
 * @property-read array $borderTopLeftRadius
 * @property-read array $borderTopRightRadius
 * @property-read array $borderTopStyle
 * @property-read array $borderTopWidth
 * @property-read array $borderWidth
 * @property-read array $bottom
 * @property-read array $boxShadow
 * @property-read array $boxSizing
 * @property-read array $breakAfter
 * @property-read array $breakBefore
 * @property-read array $breakInside
 * @property-read array $captionSide
 * @property-read array $caretColor
 * @property-read array $clear
 * @property-read array $color
 * @property-read array $colorAdjust
 * @property-read array $columnCount
 * @property-read array $columnFill
 * @property-read array $columnGap
 * @property-read array $columnRule
 * @property-read array $columnRuleColor
 * @property-read array $columnRuleStyle
 * @property-read array $columnRuleWidth
 * @property-read array $columnSpan
 * @property-read array $columnWidth
 * @property-read array $columns
 * @property-read array $counterIncrement
 * @property-read array $counterReset
 * @property-read array<array<string>> $cursor
 * @property-read array $direction
 * @property-read array $display
 * @property-read array $elevation
 * @property-read array $emptyCells
 * @property-read array<string> $filter
 * @property-read array $flex
 * @property-read array $flexBasis
 * @property-read array $flexDirection
 * @property-read array $flexFlow
 * @property-read array $flexGrow
 * @property-read array $flexShrink
 * @property-read array $flexWrap
 * @property-read array $float
 * @property-read array $font
 * @property-read array $fontFamily
 * @property-read array $fontFeatureSettings
 * @property-read array $fontKerning
 * @property-read array $fontSize
 * @property-read array $fontSizeAdjust
 * @property-read array $fontStretch
 * @property-read array $fontStyle
 * @property-read array $fontSynthesis
 * @property-read array $fontVariant
 * @property-read array $fontVariantAlternates
 * @property-read array $fontVariantCaps
 * @property-read array $fontVariantEastAsian
 * @property-read array $fontVariantLigatures
 * @property-read array $fontVariantNumeric
 * @property-read array $fontVariationSettings
 * @property-read array $fontWeight
 * @property-read array $gap
 * @property-read array $grid
 * @property-read array $gridArea
 * @property-read array $gridAutoColumns
 * @property-read array $gridAutoFlow
 * @property-read array $gridAutoRows
 * @property-read array $gridColumn
 * @property-read array $gridColumnEnd
 * @property-read array $gridColumnStart
 * @property-read array $gridRow
 * @property-read array $gridRowEnd
 * @property-read array $gridRowStart
 * @property-read array $gridTemplate
 * @property-read array $gridTemplateAreas
 * @property-read array $gridTemplateColumns
 * @property-read array $gridTemplateRows
 * @property-read array $height
 * @property-read array $hyphens
 * @property-read array $imageOrientation
 * @property-read array $imageResolution
 * @property-read array $inlineSize
 * @property-read array $isolation
 * @property-read array $justifyContent
 * @property-read array $justifyItems
 * @property-read array $justifySelf
 * @property-read array $left
 * @property-read array $letterSpacing
 * @property-read array $lineBreak
 * @property-read array $lineHeight
 * @property-read array $listStyle
 * @property-read array $listStylePosition
 * @property-read array $listStyleType
 * @property-read array $margin
 * @property-read array $marginBottom
 * @property-read array $marginLeft
 * @property-read array $marginRight
 * @property-read array $marginTop
 * @property-read array $maxHeight
 * @property-read array $maxWidth
 * @property-read array $minHeight
 * @property-read array $minWidth
 * @property-read array $mixBlendMode
 * @property-read array $objectFit
 * @property-read array $objectPosition
 * @property-read array $offsetDistance
 * @property-read array $opacity
 * @property-read array $order
 * @property-read array $outline
 * @property-read array $outlineColor
 * @property-read array $outlineOffset
 * @property-read array $outlineStyle
 * @property-read array $outlineWidth
 * @property-read array $overflow
 * @property-read array $overflowWrap
 * @property-read array $overflowX
 * @property-read array $overflowY
 * @property-read array $padding
 * @property-read array $paddingBottom
 * @property-read array $paddingLeft
 * @property-read array $paddingRight
 * @property-read array $paddingTop
 * @property-read array $pause
 * @property-read array $pauseAfter
 * @property-read array $pauseBefore
 * @property-read array $perspective
 * @property-read array $perspectiveOrigin
 * @property-read array $pitch
 * @property-read array $pitchRange
 * @property-read array $placeItems
 * @property-read array $position
 * @property-read array $quotes
 * @property-read array $resize
 * @property-read array $richness
 * @property-read array $right
 * @property-read array $rowGap
 * @property-read array $speak
 * @property-read array $speakHeader
 * @property-read array $speakNumeral
 * @property-read array $speakPunctuation
 * @property-read array $speechRate
 * @property-read array $stress
 * @property-read array $tableLayout
 * @property-read array $textAlign
 * @property-read array $textAlignLast
 * @property-read array $textCombineUpright
 * @property-read array $textDecoration
 * @property-read array $textDecorationColor
 * @property-read array $textDecorationLine
 * @property-read array $textDecorationSkip
 * @property-read array $textDecorationStyle
 * @property-read array $textEmphasis
 * @property-read array $textEmphasisColor
 * @property-read array $textEmphasisPosition
 * @property-read array $textEmphasisStyle
 * @property-read array $textIndent
 * @property-read array $textJustify
 * @property-read array $textOrientation
 * @property-read array $textOverflow
 * @property-read array $textShadow
 * @property-read array $textTransform
 * @property-read array $textUnderlinePosition
 * @property-read array $top
 * @property-read array $transform
 * @property-read array $transformBox
 * @property-read array $transformOrigin
 * @property-read array $transformStyle
 * @property-read array<string> $transition
 * @property-read array $transitionDelay
 * @property-read array $transitionDuration
 * @property-read array<string> $transitionProperty
 * @property-read array $transitionTimingFunction
 * @property-read array $unicodeBidi
 * @property-read array $verticalAlign
 * @property-read array<array<string>> $visibility
 * @property-read array $voiceFamily
 * @property-read array $whiteSpace
 * @property-read array $width
 * @property-read array $wordBreak
 * @property-read array $wordSpacing
 * @property-read array $wordWrap
 * @property-read array $writingMode
 * @property-read array<string> $zIndex
 */
final class EmailSpecificDeclarations extends DeclarationList implements Identifiable
{
    /**
     * ID of the declaration list.
     *
     * @var string
     */
    const ID = 'EMAIL_SPECIFIC_DECLARATIONS';

    /**
     * Array of declarations.
     *
     * @var array<array>
     */
    const DECLARATIONS = [
        Attribute::_MOZ_APPEARANCE => [],
        Attribute::_WEBKIT_APPEARANCE => [],
        Attribute::_WEBKIT_TAP_HIGHLIGHT_COLOR => [],
        Attribute::ALIGN_CONTENT => [],
        Attribute::ALIGN_ITEMS => [],
        Attribute::ALIGN_SELF => [],
        Attribute::APPEARANCE => [],
        Attribute::ASPECT_RATIO => [],
        Attribute::AZIMUTH => [],
        Attribute::BACKGROUND => [],
        Attribute::BACKGROUND_ATTACHMENT => [],
        Attribute::BACKGROUND_BLEND_MODE => [],
        Attribute::BACKGROUND_CLIP => [],
        Attribute::BACKGROUND_COLOR => [],
        Attribute::BACKGROUND_IMAGE => [],
        Attribute::BACKGROUND_ORIGIN => [],
        Attribute::BACKGROUND_POSITION => [],
        Attribute::BACKGROUND_REPEAT => [],
        Attribute::BACKGROUND_SIZE => [],
        Attribute::BORDER => [],
        Attribute::BORDER_BOTTOM => [],
        Attribute::BORDER_BOTTOM_COLOR => [],
        Attribute::BORDER_BOTTOM_LEFT_RADIUS => [],
        Attribute::BORDER_BOTTOM_RIGHT_RADIUS => [],
        Attribute::BORDER_BOTTOM_STYLE => [],
        Attribute::BORDER_BOTTOM_WIDTH => [],
        Attribute::BORDER_COLLAPSE => [],
        Attribute::BORDER_COLOR => [],
        Attribute::BORDER_LEFT => [],
        Attribute::BORDER_LEFT_COLOR => [],
        Attribute::BORDER_LEFT_STYLE => [],
        Attribute::BORDER_LEFT_WIDTH => [],
        Attribute::BORDER_RADIUS => [],
        Attribute::BORDER_RIGHT => [],
        Attribute::BORDER_RIGHT_COLOR => [],
        Attribute::BORDER_RIGHT_STYLE => [],
        Attribute::BORDER_RIGHT_WIDTH => [],
        Attribute::BORDER_SPACING => [],
        Attribute::BORDER_STYLE => [],
        Attribute::BORDER_TOP => [],
        Attribute::BORDER_TOP_COLOR => [],
        Attribute::BORDER_TOP_LEFT_RADIUS => [],
        Attribute::BORDER_TOP_RIGHT_RADIUS => [],
        Attribute::BORDER_TOP_STYLE => [],
        Attribute::BORDER_TOP_WIDTH => [],
        Attribute::BORDER_WIDTH => [],
        Attribute::BOTTOM => [],
        Attribute::BOX_SHADOW => [],
        Attribute::BOX_SIZING => [],
        Attribute::BREAK_AFTER => [],
        Attribute::BREAK_BEFORE => [],
        Attribute::BREAK_INSIDE => [],
        Attribute::CAPTION_SIDE => [],
        Attribute::CARET_COLOR => [],
        Attribute::CLEAR => [],
        Attribute::COLOR => [],
        Attribute::COLOR_ADJUST => [],
        Attribute::COLUMN_COUNT => [],
        Attribute::COLUMN_FILL => [],
        Attribute::COLUMN_GAP => [],
        Attribute::COLUMN_RULE => [],
        Attribute::COLUMN_RULE_COLOR => [],
        Attribute::COLUMN_RULE_STYLE => [],
        Attribute::COLUMN_RULE_WIDTH => [],
        Attribute::COLUMN_SPAN => [],
        Attribute::COLUMN_WIDTH => [],
        Attribute::COLUMNS => [],
        Attribute::COUNTER_INCREMENT => [],
        Attribute::COUNTER_RESET => [],
        Attribute::CURSOR => [
            SpecRule::VALUE_CASEI => [
                'initial',
                'pointer',
            ],
        ],
        Attribute::DIRECTION => [],
        Attribute::DISPLAY => [],
        Attribute::ELEVATION => [],
        Attribute::EMPTY_CELLS => [],
        Attribute::FILTER => [
            SpecRule::VALUE_REGEX_CASEI => '^ *((blur|brightness|contrast|drop-shadow|grayscale|hue-rotate|invert|opacity|saturate|sepia)\(([^() ]*|(rgb|rgba|hsl|hsla)\([^()]*\))( +([^() ]*|(rgb|rgba|hsl|hsla)\([^()]*\)))*\) *)*$',
        ],
        Attribute::FLEX => [],
        Attribute::FLEX_BASIS => [],
        Attribute::FLEX_DIRECTION => [],
        Attribute::FLEX_FLOW => [],
        Attribute::FLEX_GROW => [],
        Attribute::FLEX_SHRINK => [],
        Attribute::FLEX_WRAP => [],
        Attribute::FLOAT => [],
        Attribute::FONT => [],
        Attribute::FONT_FAMILY => [],
        Attribute::FONT_FEATURE_SETTINGS => [],
        Attribute::FONT_KERNING => [],
        Attribute::FONT_SIZE => [],
        Attribute::FONT_SIZE_ADJUST => [],
        Attribute::FONT_STRETCH => [],
        Attribute::FONT_STYLE => [],
        Attribute::FONT_SYNTHESIS => [],
        Attribute::FONT_VARIANT => [],
        Attribute::FONT_VARIANT_ALTERNATES => [],
        Attribute::FONT_VARIANT_CAPS => [],
        Attribute::FONT_VARIANT_EAST_ASIAN => [],
        Attribute::FONT_VARIANT_LIGATURES => [],
        Attribute::FONT_VARIANT_NUMERIC => [],
        Attribute::FONT_VARIATION_SETTINGS => [],
        Attribute::FONT_WEIGHT => [],
        Attribute::GAP => [],
        Attribute::GRID => [],
        Attribute::GRID_AREA => [],
        Attribute::GRID_AUTO_COLUMNS => [],
        Attribute::GRID_AUTO_FLOW => [],
        Attribute::GRID_AUTO_ROWS => [],
        Attribute::GRID_COLUMN => [],
        Attribute::GRID_COLUMN_END => [],
        Attribute::GRID_COLUMN_START => [],
        Attribute::GRID_ROW => [],
        Attribute::GRID_ROW_END => [],
        Attribute::GRID_ROW_START => [],
        Attribute::GRID_TEMPLATE => [],
        Attribute::GRID_TEMPLATE_AREAS => [],
        Attribute::GRID_TEMPLATE_COLUMNS => [],
        Attribute::GRID_TEMPLATE_ROWS => [],
        Attribute::HEIGHT => [],
        Attribute::HYPHENS => [],
        Attribute::IMAGE_ORIENTATION => [],
        Attribute::IMAGE_RESOLUTION => [],
        Attribute::INLINE_SIZE => [],
        Attribute::ISOLATION => [],
        Attribute::JUSTIFY_CONTENT => [],
        Attribute::JUSTIFY_ITEMS => [],
        Attribute::JUSTIFY_SELF => [],
        Attribute::LEFT => [],
        Attribute::LETTER_SPACING => [],
        Attribute::LINE_BREAK => [],
        Attribute::LINE_HEIGHT => [],
        Attribute::LIST_STYLE => [],
        Attribute::LIST_STYLE_POSITION => [],
        Attribute::LIST_STYLE_TYPE => [],
        Attribute::MARGIN => [],
        Attribute::MARGIN_BOTTOM => [],
        Attribute::MARGIN_LEFT => [],
        Attribute::MARGIN_RIGHT => [],
        Attribute::MARGIN_TOP => [],
        Attribute::MAX_HEIGHT => [],
        Attribute::MAX_WIDTH => [],
        Attribute::MIN_HEIGHT => [],
        Attribute::MIN_WIDTH => [],
        Attribute::MIX_BLEND_MODE => [],
        Attribute::OBJECT_FIT => [],
        Attribute::OBJECT_POSITION => [],
        Attribute::OFFSET_DISTANCE => [],
        Attribute::OPACITY => [],
        Attribute::ORDER => [],
        Attribute::OUTLINE => [],
        Attribute::OUTLINE_COLOR => [],
        Attribute::OUTLINE_OFFSET => [],
        Attribute::OUTLINE_STYLE => [],
        Attribute::OUTLINE_WIDTH => [],
        Attribute::OVERFLOW => [],
        Attribute::OVERFLOW_WRAP => [],
        Attribute::OVERFLOW_X => [],
        Attribute::OVERFLOW_Y => [],
        Attribute::PADDING => [],
        Attribute::PADDING_BOTTOM => [],
        Attribute::PADDING_LEFT => [],
        Attribute::PADDING_RIGHT => [],
        Attribute::PADDING_TOP => [],
        Attribute::PAUSE => [],
        Attribute::PAUSE_AFTER => [],
        Attribute::PAUSE_BEFORE => [],
        Attribute::PERSPECTIVE => [],
        Attribute::PERSPECTIVE_ORIGIN => [],
        Attribute::PITCH => [],
        Attribute::PITCH_RANGE => [],
        Attribute::PLACE_ITEMS => [],
        Attribute::POSITION => [],
        Attribute::QUOTES => [],
        Attribute::RESIZE => [],
        Attribute::RICHNESS => [],
        Attribute::RIGHT => [],
        Attribute::ROW_GAP => [],
        Attribute::SPEAK => [],
        Attribute::SPEAK_HEADER => [],
        Attribute::SPEAK_NUMERAL => [],
        Attribute::SPEAK_PUNCTUATION => [],
        Attribute::SPEECH_RATE => [],
        Attribute::STRESS => [],
        Attribute::TABLE_LAYOUT => [],
        Attribute::TEXT_ALIGN => [],
        Attribute::TEXT_ALIGN_LAST => [],
        Attribute::TEXT_COMBINE_UPRIGHT => [],
        Attribute::TEXT_DECORATION => [],
        Attribute::TEXT_DECORATION_COLOR => [],
        Attribute::TEXT_DECORATION_LINE => [],
        Attribute::TEXT_DECORATION_SKIP => [],
        Attribute::TEXT_DECORATION_STYLE => [],
        Attribute::TEXT_EMPHASIS => [],
        Attribute::TEXT_EMPHASIS_COLOR => [],
        Attribute::TEXT_EMPHASIS_POSITION => [],
        Attribute::TEXT_EMPHASIS_STYLE => [],
        Attribute::TEXT_INDENT => [],
        Attribute::TEXT_JUSTIFY => [],
        Attribute::TEXT_ORIENTATION => [],
        Attribute::TEXT_OVERFLOW => [],
        Attribute::TEXT_SHADOW => [],
        Attribute::TEXT_TRANSFORM => [],
        Attribute::TEXT_UNDERLINE_POSITION => [],
        Attribute::TOP => [],
        Attribute::TRANSFORM => [],
        Attribute::TRANSFORM_BOX => [],
        Attribute::TRANSFORM_ORIGIN => [],
        Attribute::TRANSFORM_STYLE => [],
        Attribute::TRANSITION => [
            SpecRule::VALUE_REGEX_CASEI => '^ *((initial|unset)|(((none|offset-distance|opacity|transform|visibility)( *(|-|\+)([0-9]+|[0-9]*\.[0-9]+)(e(|-|\+)?[0-9]+)?(s|ms)( *(linear|(ease|ease-in|ease-out|ease-in-out|cubic-bezier\( *(|-|\+)([0-9]+|[0-9]*\.[0-9]+)(e(|-|\+)?[0-9]+)?(, *(|-|\+)([0-9]+|[0-9]*\.[0-9]+)(e(|-|\+)?[0-9]+)?){3} *\))|(step-start|step-end|steps\( *(|-|\+)[0-9]+(, *(jump-start|jump-end|jump-none|jump-both|start|end))? *\)))( *(|-|\+)([0-9]+|[0-9]*\.[0-9]+)(e(|-|\+)?[0-9]+)?(s|ms))?)?)?)(, *((none|offset-distance|opacity|transform|visibility)( *(|-|\+)([0-9]+|[0-9]*\.[0-9]+)(e(|-|\+)?[0-9]+)?(s|ms)( *(linear|(ease|ease-in|ease-out|ease-in-out|cubic-bezier\( *(|-|\+)([0-9]+|[0-9]*\.[0-9]+)(e(|-|\+)?[0-9]+)?(, *(|-|\+)([0-9]+|[0-9]*\.[0-9]+)(e(|-|\+)?[0-9]+)?){3} *\))|(step-start|step-end|steps\( *(|-|\+)[0-9]+(, *(jump-start|jump-end|jump-none|jump-both|start|end))? *\)))( *(|-|\+)([0-9]+|[0-9]*\.[0-9]+)(e(|-|\+)?[0-9]+)?(s|ms))?)?)?))*)) *$',
        ],
        Attribute::TRANSITION_DELAY => [],
        Attribute::TRANSITION_DURATION => [],
        Attribute::TRANSITION_PROPERTY => [
            SpecRule::VALUE_REGEX_CASEI => '^ *(initial|unset|(none|offset-distance|opacity|transform|visibility)(, *(none|offset-distance|opacity|transform|visibility))*) *$',
        ],
        Attribute::TRANSITION_TIMING_FUNCTION => [],
        Attribute::UNICODE_BIDI => [],
        Attribute::VERTICAL_ALIGN => [],
        Attribute::VISIBILITY => [
            SpecRule::VALUE_CASEI => [
                'hidden',
                'initial',
                'visible',
            ],
        ],
        Attribute::VOICE_FAMILY => [],
        Attribute::WHITE_SPACE => [],
        Attribute::WIDTH => [],
        Attribute::WORD_BREAK => [],
        Attribute::WORD_SPACING => [],
        Attribute::WORD_WRAP => [],
        Attribute::WRITING_MODE => [],
        Attribute::Z_INDEX => [
            SpecRule::VALUE_REGEX_CASEI => '([-+]?0)|([-+]?100)|([-+]?[1-9][0-9]?)',
        ],
    ];
}
PK.3Y�NV�%%dbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/DeclarationList/SvgBasicDeclarations.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\DeclarationList;

use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\DeclarationList;
use AmpProject\Validator\Spec\Identifiable;

/**
 * Declaration list class SvgBasicDeclarations.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array $alignmentBaseline
 * @property-read array $baselineShift
 * @property-read array $clipPath
 * @property-read array $clipRule
 * @property-read array $colorInterpolation
 * @property-read array $colorInterpolationFilters
 * @property-read array $colorProfile
 * @property-read array $colorRendering
 * @property-read array $dominantBaseline
 * @property-read array $enableBackground
 * @property-read array $fill
 * @property-read array $fillOpacity
 * @property-read array $fillRule
 * @property-read array $floodColor
 * @property-read array $floodOpacity
 * @property-read array $glyphOrientationHorizontal
 * @property-read array $glyphOrientationVertical
 * @property-read array $kerning
 * @property-read array $lightingColor
 * @property-read array $marker
 * @property-read array $markerEnd
 * @property-read array $markerMid
 * @property-read array $markerStart
 * @property-read array $mask
 * @property-read array $shapeRendering
 * @property-read array $stopColor
 * @property-read array $stopOpacity
 * @property-read array $stroke
 * @property-read array $strokeDasharray
 * @property-read array $strokeDashoffset
 * @property-read array $strokeLinecap
 * @property-read array $strokeLinejoin
 * @property-read array $strokeMiterlimit
 * @property-read array $strokeOpacity
 * @property-read array $strokeWidth
 * @property-read array $textAnchor
 * @property-read array $textRendering
 */
final class SvgBasicDeclarations extends DeclarationList implements Identifiable
{
    /**
     * ID of the declaration list.
     *
     * @var string
     */
    const ID = 'SVG_BASIC_DECLARATIONS';

    /**
     * Array of declarations.
     *
     * @var array<array>
     */
    const DECLARATIONS = [
        Attribute::ALIGNMENT_BASELINE => [],
        Attribute::BASELINE_SHIFT => [],
        Attribute::CLIP_PATH => [],
        Attribute::CLIP_RULE => [],
        Attribute::COLOR_INTERPOLATION => [],
        Attribute::COLOR_INTERPOLATION_FILTERS => [],
        Attribute::COLOR_PROFILE => [],
        Attribute::COLOR_RENDERING => [],
        Attribute::DOMINANT_BASELINE => [],
        Attribute::ENABLE_BACKGROUND => [],
        Attribute::FILL => [],
        Attribute::FILL_OPACITY => [],
        Attribute::FILL_RULE => [],
        Attribute::FLOOD_COLOR => [],
        Attribute::FLOOD_OPACITY => [],
        Attribute::GLYPH_ORIENTATION_HORIZONTAL => [],
        Attribute::GLYPH_ORIENTATION_VERTICAL => [],
        Attribute::KERNING => [],
        Attribute::LIGHTING_COLOR => [],
        Attribute::MARKER => [],
        Attribute::MARKER_END => [],
        Attribute::MARKER_MID => [],
        Attribute::MARKER_START => [],
        Attribute::MASK => [],
        Attribute::SHAPE_RENDERING => [],
        Attribute::STOP_COLOR => [],
        Attribute::STOP_OPACITY => [],
        Attribute::STROKE => [],
        Attribute::STROKE_DASHARRAY => [],
        Attribute::STROKE_DASHOFFSET => [],
        Attribute::STROKE_LINECAP => [],
        Attribute::STROKE_LINEJOIN => [],
        Attribute::STROKE_MITERLIMIT => [],
        Attribute::STROKE_OPACITY => [],
        Attribute::STROKE_WIDTH => [],
        Attribute::TEXT_ANCHOR => [],
        Attribute::TEXT_RENDERING => [],
    ];
}
PK.3Y�6�!��obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList/AmpMegaMenuAllowedDescendants.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\DescendantTagList;

use AmpProject\Extension;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\DescendantTagList;
use AmpProject\Validator\Spec\Identifiable;

/**
 * Descendant tag list class AmpMegaMenuAllowedDescendants.
 *
 * @package ampproject/amp-toolbox.
 */
final class AmpMegaMenuAllowedDescendants extends DescendantTagList implements Identifiable
{
    /**
     * ID of the descendant tag list.
     *
     * @var string
     */
    const ID = 'amp-mega-menu-allowed-descendants';

    /**
     * Array of descendant tags.
     *
     * @var array<string>
     */
    const DESCENDANT_TAGS = [
        Element::A,
        Extension::AD,
        Extension::CAROUSEL,
        Extension::EMBED,
        Extension::IMG,
        Extension::LIGHTBOX,
        Extension::LIST_,
        Extension::VIDEO,
        Element::B,
        Element::BR,
        Element::BUTTON,
        Element::COL,
        Element::COLGROUP,
        Element::DIV,
        Element::EM,
        Element::FIELDSET,
        Element::FORM,
        Element::H1,
        Element::H2,
        Element::H3,
        Element::H4,
        Element::H5,
        Element::H6,
        Element::I,
        Element::INPUT,
        Element::LABEL,
        Element::LI,
        Element::MARK,
        Element::NAV,
        Element::OL,
        Element::OPTION,
        Element::P,
        Element::PATH,
        Element::SECTION,
        Element::SELECT,
        Element::SPAN,
        Element::STRIKE,
        Element::STRONG,
        Element::SUB,
        Element::SUP,
        Element::SVG,
        Element::TABLE,
        Element::TBODY,
        Element::TD,
        Element::TEMPLATE,
        Element::TH,
        Element::TIME,
        Element::TITLE,
        Element::TR,
        Element::U,
        Element::UL,
        Element::USE_,
    ];
}
PK.3Y:	X-��qbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList/AmpNestedMenuAllowedDescendants.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\DescendantTagList;

use AmpProject\Extension;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\DescendantTagList;
use AmpProject\Validator\Spec\Identifiable;

/**
 * Descendant tag list class AmpNestedMenuAllowedDescendants.
 *
 * @package ampproject/amp-toolbox.
 */
final class AmpNestedMenuAllowedDescendants extends DescendantTagList implements Identifiable
{
    /**
     * ID of the descendant tag list.
     *
     * @var string
     */
    const ID = 'amp-nested-menu-allowed-descendants';

    /**
     * Array of descendant tags.
     *
     * @var array<string>
     */
    const DESCENDANT_TAGS = [
        Element::A,
        Extension::ACCORDION,
        Extension::IMG,
        Extension::LIST_,
        Element::B,
        Element::BR,
        Element::BUTTON,
        Element::CIRCLE,
        Element::COL,
        Element::COLGROUP,
        Element::DIV,
        Element::ELLIPSE,
        Element::EM,
        Element::FIELDSET,
        Element::FORM,
        Element::H1,
        Element::H2,
        Element::H3,
        Element::H4,
        Element::H5,
        Element::H6,
        Element::I,
        Element::INPUT,
        Element::LABEL,
        Element::LI,
        Element::LINE,
        Element::MARK,
        Element::NAV,
        Element::OL,
        Element::OPTION,
        Element::P,
        Element::PATH,
        Element::POLYGON,
        Element::POLYLINE,
        Element::RECT,
        Element::SECTION,
        Element::SELECT,
        Element::SPAN,
        Element::STRIKE,
        Element::STRONG,
        Element::SUB,
        Element::SUP,
        Element::SVG,
        Element::TABLE,
        Element::TBODY,
        Element::TD,
        Element::TEMPLATE,
        Element::TH,
        Element::TIME,
        Element::TITLE,
        Element::TR,
        Element::U,
        Element::UL,
        Element::USE_,
    ];
}
PK.3Y�)B�sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList/AmpStoryBookendAllowedDescendants.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\DescendantTagList;

use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\DescendantTagList;
use AmpProject\Validator\Spec\Identifiable;

/**
 * Descendant tag list class AmpStoryBookendAllowedDescendants.
 *
 * @package ampproject/amp-toolbox.
 */
final class AmpStoryBookendAllowedDescendants extends DescendantTagList implements Identifiable
{
    /**
     * ID of the descendant tag list.
     *
     * @var string
     */
    const ID = 'amp-story-bookend-allowed-descendants';

    /**
     * Array of descendant tags.
     *
     * @var array<string>
     */
    const DESCENDANT_TAGS = [
        Element::SCRIPT,
    ];
}
PK.3YR�V��
�
tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList/AmpStoryCtaLayerAllowedDescendants.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\DescendantTagList;

use AmpProject\Extension;
use AmpProject\Html\Tag as Element;
use AmpProject\Internal;
use AmpProject\Validator\Spec\DescendantTagList;
use AmpProject\Validator\Spec\Identifiable;

/**
 * Descendant tag list class AmpStoryCtaLayerAllowedDescendants.
 *
 * @package ampproject/amp-toolbox.
 */
final class AmpStoryCtaLayerAllowedDescendants extends DescendantTagList implements Identifiable
{
    /**
     * ID of the descendant tag list.
     *
     * @var string
     */
    const ID = 'amp-story-cta-layer-allowed-descendants';

    /**
     * Array of descendant tags.
     *
     * @var array<string>
     */
    const DESCENDANT_TAGS = [
        Element::A,
        Element::ABBR,
        Element::ADDRESS,
        Extension::CALL_TRACKING,
        Extension::DATE_COUNTDOWN,
        Extension::DATE_DISPLAY,
        Extension::FIT_TEXT,
        Extension::FONT,
        Extension::IMG,
        Extension::TIMEAGO,
        Element::B,
        Element::BDI,
        Element::BDO,
        Element::BLOCKQUOTE,
        Element::BR,
        Element::BUTTON,
        Element::CAPTION,
        Element::CITE,
        Element::CIRCLE,
        Element::CLIPPATH,
        Element::CODE,
        Element::DATA,
        Element::DEFS,
        Element::DEL,
        Element::DESC,
        Element::DFN,
        Element::DIV,
        Element::ELLIPSE,
        Element::EM,
        Element::FECOLORMATRIX,
        Element::FECOMPOSITE,
        Element::FEBLEND,
        Element::FEFLOOD,
        Element::FEGAUSSIANBLUR,
        Element::FEMERGE,
        Element::FEMERGENODE,
        Element::FEOFFSET,
        Element::FIGCAPTION,
        Element::FIGURE,
        Element::FILTER,
        Element::FOOTER,
        Element::G,
        Element::GLYPH,
        Element::GLYPHREF,
        Element::H1,
        Element::H2,
        Element::H3,
        Element::H4,
        Element::H5,
        Element::H6,
        Element::HEADER,
        Element::HGROUP,
        Element::HKERN,
        Element::HR,
        Element::I,
        Element::IMG,
        Internal::SIZER,
        Element::IMAGE,
        Element::INS,
        Element::KBD,
        Element::LI,
        Element::LINE,
        Element::LINEARGRADIENT,
        Element::MAIN,
        Element::MARKER,
        Element::MARK,
        Element::MASK,
        Element::METADATA,
        Element::NAV,
        Element::NOSCRIPT,
        Element::OL,
        Element::P,
        Element::PATH,
        Element::PATTERN,
        Element::PRE,
        Element::POLYGON,
        Element::POLYLINE,
        Element::RADIALGRADIENT,
        Element::Q,
        Element::RECT,
        Element::RP,
        Element::RT,
        Element::RTC,
        Element::RUBY,
        Element::S,
        Element::SAMP,
        Element::SECTION,
        Element::SMALL,
        Element::SOLIDCOLOR,
        Element::SPAN,
        Element::STOP,
        Element::STRONG,
        Element::SUB,
        Element::SUP,
        Element::SVG,
        Element::SWITCH_,
        Element::SYMBOL,
        Element::TEXT,
        Element::TEXTPATH,
        Element::TREF,
        Element::TSPAN,
        Element::TITLE,
        Element::TIME,
        Element::TR,
        Element::U,
        Element::UL,
        Element::USE_,
        Element::VAR_,
        Element::VIEW,
        Element::VKERN,
        Element::WBR,
    ];
}
PK.3Y~2�		ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList/AmpStoryGridLayerAllowedDescendants.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\DescendantTagList;

use AmpProject\Extension;
use AmpProject\Html\Tag as Element;
use AmpProject\Internal;
use AmpProject\Validator\Spec\DescendantTagList;
use AmpProject\Validator\Spec\Identifiable;

/**
 * Descendant tag list class AmpStoryGridLayerAllowedDescendants.
 *
 * @package ampproject/amp-toolbox.
 */
final class AmpStoryGridLayerAllowedDescendants extends DescendantTagList implements Identifiable
{
    /**
     * ID of the descendant tag list.
     *
     * @var string
     */
    const ID = 'amp-story-grid-layer-allowed-descendants';

    /**
     * Array of descendant tags.
     *
     * @var array<string>
     */
    const DESCENDANT_TAGS = [
        Element::A,
        Element::ABBR,
        Element::ADDRESS,
        Extension::ANALYTICS,
        Extension::AUDIO,
        Extension::DATE_COUNTDOWN,
        Extension::DATE_DISPLAY,
        Extension::EXPERIMENT,
        Extension::FIT_TEXT,
        Extension::FONT,
        Extension::GIST,
        Extension::IMG,
        Extension::INSTALL_SERVICEWORKER,
        Extension::LIST_,
        Extension::LIVE_LIST,
        Extension::PIXEL,
        Extension::RENDER,
        Extension::STATE,
        Extension::STORY_360,
        Extension::STORY_AUTO_ANALYTICS,
        Extension::STORY_CAPTIONS,
        Extension::STORY_INTERACTIVE_BINARY_POLL,
        Extension::STORY_INTERACTIVE_IMG_POLL,
        Extension::STORY_INTERACTIVE_IMG_QUIZ,
        Extension::STORY_INTERACTIVE_POLL,
        Extension::STORY_INTERACTIVE_QUIZ,
        Extension::STORY_INTERACTIVE_RESULTS,
        Extension::STORY_PANNING_MEDIA,
        Extension::TIMEAGO,
        Extension::TWITTER,
        Extension::VIDEO,
        Element::ARTICLE,
        Element::ASIDE,
        Element::B,
        Element::BDI,
        Element::BDO,
        Element::BLOCKQUOTE,
        Element::BR,
        Element::CAPTION,
        Element::CIRCLE,
        Element::CITE,
        Element::CLIPPATH,
        Element::CODE,
        Element::COL,
        Element::COLGROUP,
        Element::DATA,
        Element::DD,
        Element::DEFS,
        Element::DEL,
        Element::DESC,
        Element::DFN,
        Element::DIV,
        Element::DL,
        Element::DT,
        Element::ELLIPSE,
        Element::EM,
        Element::FECOLORMATRIX,
        Element::FECOMPOSITE,
        Element::FEBLEND,
        Element::FEFLOOD,
        Element::FEGAUSSIANBLUR,
        Element::FEMERGE,
        Element::FEMERGENODE,
        Element::FEOFFSET,
        Element::FIGCAPTION,
        Element::FIGURE,
        Element::FILTER,
        Element::FOOTER,
        Element::G,
        Element::GLYPH,
        Element::GLYPHREF,
        Element::H1,
        Element::H2,
        Element::H3,
        Element::H4,
        Element::H5,
        Element::H6,
        Element::HEADER,
        Element::HGROUP,
        Element::HKERN,
        Element::HR,
        Element::I,
        Element::IMAGE,
        Element::IMG,
        Internal::SIZER,
        Element::INS,
        Element::KBD,
        Element::LI,
        Element::LINE,
        Element::LINEARGRADIENT,
        Element::MAIN,
        Element::MARK,
        Element::MARKER,
        Element::MASK,
        Element::METADATA,
        Element::NAV,
        Element::NOSCRIPT,
        Element::OL,
        Element::P,
        Element::PATH,
        Element::PATTERN,
        Element::POLYGON,
        Element::POLYLINE,
        Element::PRE,
        Element::Q,
        Element::RADIALGRADIENT,
        Element::RECT,
        Element::RP,
        Element::RT,
        Element::RTC,
        Element::RUBY,
        Element::S,
        Element::SAMP,
        Element::SCRIPT,
        Element::SECTION,
        Element::SMALL,
        Element::SOLIDCOLOR,
        Element::SOURCE,
        Element::SPAN,
        Element::STOP,
        Element::STRONG,
        Element::SUB,
        Element::SUP,
        Element::SVG,
        Element::SWITCH_,
        Element::SYMBOL,
        Element::TABLE,
        Element::TBODY,
        Element::TD,
        Element::TEMPLATE,
        Element::TEXT,
        Element::TEXTPATH,
        Element::TFOOT,
        Element::TH,
        Element::THEAD,
        Element::TIME,
        Element::TITLE,
        Element::TR,
        Element::TRACK,
        Element::TREF,
        Element::TSPAN,
        Element::U,
        Element::UL,
        Element::USE_,
        Element::VAR_,
        Element::VIEW,
        Element::VKERN,
        Element::WBR,
    ];
}
PK.3Y�|��CCzbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList/AmpStoryPageAttachmentAllowedDescendants.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\DescendantTagList;

use AmpProject\Extension;
use AmpProject\Html\Tag as Element;
use AmpProject\Internal;
use AmpProject\Validator\Spec\DescendantTagList;
use AmpProject\Validator\Spec\Identifiable;

/**
 * Descendant tag list class AmpStoryPageAttachmentAllowedDescendants.
 *
 * @package ampproject/amp-toolbox.
 */
final class AmpStoryPageAttachmentAllowedDescendants extends DescendantTagList implements Identifiable
{
    /**
     * ID of the descendant tag list.
     *
     * @var string
     */
    const ID = 'amp-story-page-attachment-allowed-descendants';

    /**
     * Array of descendant tags.
     *
     * @var array<string>
     */
    const DESCENDANT_TAGS = [
        Element::A,
        Element::ABBR,
        Element::ADDRESS,
        Extension::_3D_GLTF,
        Extension::_3Q_PLAYER,
        Extension::ACCORDION,
        Extension::AUDIO,
        Extension::BEOPINION,
        Extension::BODYMOVIN_ANIMATION,
        Extension::BRID_PLAYER,
        Extension::BRIGHTCOVE,
        Extension::BYSIDE_CONTENT,
        Extension::CALL_TRACKING,
        Extension::CAROUSEL,
        Extension::DAILYMOTION,
        Extension::DATE_COUNTDOWN,
        Extension::DATE_DISPLAY,
        Extension::EMBEDLY_CARD,
        Extension::FACEBOOK,
        Extension::FACEBOOK_COMMENTS,
        Extension::FACEBOOK_LIKE,
        Extension::FACEBOOK_PAGE,
        Extension::FIT_TEXT,
        Extension::FX_COLLECTION,
        Extension::FX_FLYING_CARPET,
        Extension::GFYCAT,
        Extension::GIST,
        Extension::GOOGLE_DOCUMENT_EMBED,
        Extension::HULU,
        Extension::IMA_VIDEO,
        Extension::IMAGE_SLIDER,
        Extension::IMG,
        Extension::IMGUR,
        Extension::INSTAGRAM,
        Extension::IZLESENE,
        Extension::JWPLAYER,
        Extension::KALTURA_PLAYER,
        Extension::LIST_,
        Extension::LIVE_LIST,
        Extension::MATHML,
        Extension::MEGAPHONE,
        Extension::MOWPLAYER,
        Extension::NEXXTV_PLAYER,
        Extension::O2_PLAYER,
        Extension::OOYALA_PLAYER,
        Extension::PAN_ZOOM,
        Extension::PINTEREST,
        Extension::PLAYBUZZ,
        Extension::POWR_PLAYER,
        Extension::REACH_PLAYER,
        Extension::REDDIT,
        Extension::RENDER,
        Extension::RIDDLE_QUIZ,
        Extension::SOUNDCLOUD,
        Extension::SELECTOR,
        Extension::SPRINGBOARD_PLAYER,
        Extension::TIMEAGO,
        Extension::TWITTER,
        Extension::VIDEO,
        Extension::VIDEO_IFRAME,
        Extension::VIMEO,
        Extension::VINE,
        Extension::VIQEO_PLAYER,
        Extension::VK,
        Extension::WISTIA_PLAYER,
        Extension::YOTPO,
        Extension::YOUTUBE,
        Element::ARTICLE,
        Element::ASIDE,
        Element::B,
        Element::BDI,
        Element::BDO,
        Element::BLOCKQUOTE,
        Element::BR,
        Element::BUTTON,
        Element::CAPTION,
        Element::CIRCLE,
        Element::CITE,
        Element::CLIPPATH,
        Element::CODE,
        Element::COL,
        Element::COLGROUP,
        Element::DATA,
        Element::DATALIST,
        Element::DD,
        Element::DEFS,
        Element::DEL,
        Element::DESC,
        Element::DFN,
        Element::DIV,
        Element::DL,
        Element::DT,
        Element::ELLIPSE,
        Element::EM,
        Element::FECOLORMATRIX,
        Element::FECOMPOSITE,
        Element::FEBLEND,
        Element::FEFLOOD,
        Element::FEGAUSSIANBLUR,
        Element::FEMERGE,
        Element::FEMERGENODE,
        Element::FEOFFSET,
        Element::FIGCAPTION,
        Element::FIELDSET,
        Element::FIGURE,
        Element::FILTER,
        Element::FORM,
        Element::FOOTER,
        Element::G,
        Element::GLYPH,
        Element::GLYPHREF,
        Element::H1,
        Element::H2,
        Element::H3,
        Element::H4,
        Element::H5,
        Element::H6,
        Element::HEADER,
        Element::HGROUP,
        Element::HKERN,
        Element::HR,
        Element::I,
        Element::IMAGE,
        Element::IMG,
        Element::INPUT,
        Internal::SIZER,
        Element::INS,
        Element::KBD,
        Element::LABEL,
        Element::LEGEND,
        Element::LI,
        Element::LINE,
        Element::LINEARGRADIENT,
        Element::MAIN,
        Element::MARK,
        Element::MARKER,
        Element::MASK,
        Element::METADATA,
        Element::METER,
        Element::NAV,
        Element::OL,
        Element::OPTGROUP,
        Element::OPTION,
        Element::OUTPUT,
        Element::P,
        Element::PATH,
        Element::PATTERN,
        Element::POLYGON,
        Element::POLYLINE,
        Element::PRE,
        Element::PROGRESS,
        Element::Q,
        Element::RADIALGRADIENT,
        Element::RECT,
        Element::RP,
        Element::RT,
        Element::RTC,
        Element::RUBY,
        Element::S,
        Element::SAMP,
        Element::SECTION,
        Element::SELECT,
        Element::SMALL,
        Element::SOLIDCOLOR,
        Element::SOURCE,
        Element::SPAN,
        Element::STOP,
        Element::STRONG,
        Element::SUB,
        Element::SUP,
        Element::SVG,
        Element::SWITCH_,
        Element::SYMBOL,
        Element::TABLE,
        Element::TBODY,
        Element::TD,
        Element::TEMPLATE,
        Element::TEXT,
        Element::TEXTAREA,
        Element::TEXTPATH,
        Element::TFOOT,
        Element::TH,
        Element::THEAD,
        Element::TIME,
        Element::TITLE,
        Element::TR,
        Element::TRACK,
        Element::TREF,
        Element::TSPAN,
        Element::U,
        Element::UL,
        Element::USE_,
        Element::VAR_,
        Element::VIEW,
        Element::VKERN,
        Element::WBR,
    ];
}
PK.3Y�~]Fkkrbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList/AmpStoryPlayerAllowedDescendants.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\DescendantTagList;

use AmpProject\Html\Tag as Element;
use AmpProject\Internal;
use AmpProject\Validator\Spec\DescendantTagList;
use AmpProject\Validator\Spec\Identifiable;

/**
 * Descendant tag list class AmpStoryPlayerAllowedDescendants.
 *
 * @package ampproject/amp-toolbox.
 */
final class AmpStoryPlayerAllowedDescendants extends DescendantTagList implements Identifiable
{
    /**
     * ID of the descendant tag list.
     *
     * @var string
     */
    const ID = 'amp-story-player-allowed-descendants';

    /**
     * Array of descendant tags.
     *
     * @var array<string>
     */
    const DESCENDANT_TAGS = [
        Element::A,
        Element::SPAN,
        Internal::SIZER,
        Element::IMG,
    ];
}
PK.3Y.�c�!!wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList/AmpStorySocialShareAllowedDescendants.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\DescendantTagList;

use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\DescendantTagList;
use AmpProject\Validator\Spec\Identifiable;

/**
 * Descendant tag list class AmpStorySocialShareAllowedDescendants.
 *
 * @package ampproject/amp-toolbox.
 */
final class AmpStorySocialShareAllowedDescendants extends DescendantTagList implements Identifiable
{
    /**
     * ID of the descendant tag list.
     *
     * @var string
     */
    const ID = 'amp-story-social-share-allowed-descendants';

    /**
     * Array of descendant tags.
     *
     * @var array<string>
     */
    const DESCENDANT_TAGS = [
        Element::SCRIPT,
    ];
}
PK.3Y�@��		Tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/DocRuleset/Amp4email.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\DocRuleset;

use AmpProject\Format;
use AmpProject\Validator\Spec\DocRuleset;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Document ruleset class Amp4email.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read array<string> $htmlFormat
 * @property-read int $maxBytes
 * @property-read string $maxBytesSpecUrl
 */
final class Amp4email extends DocRuleset implements Identifiable
{
    /**
     * ID of the ruleset.
     *
     * @var string
     */
    const ID = 'AMP4EMAIL';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::HTML_FORMAT => [
            Format::AMP4EMAIL,
        ],
        SpecRule::MAX_BYTES => 200000,
        SpecRule::MAX_BYTES_SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/?format=email',
    ];
}
PK.3Y�[8vvbbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/AmpEmailMissingStrictCssAttr.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class AmpEmailMissingStrictCssAttr.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 */
final class AmpEmailMissingStrictCssAttr extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'AMP_EMAIL_MISSING_STRICT_CSS_ATTR';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'Tag \'html\' marked with attribute \'amp4email\' is missing the corresponding attribute \'data-css-strict\' for enabling strict CSS validation. This may become an error in the future.',
    ];
}
PK.3YJd��SScbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/AttrDisallowedByImpliedLayout.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class AttrDisallowedByImpliedLayout.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class AttrDisallowedByImpliedLayout extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'ATTR_DISALLOWED_BY_IMPLIED_LAYOUT';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The attribute \'%1\' in tag \'%2\' is disallowed by implied layout \'%3\'.',
        SpecRule::SPECIFICITY => 51,
    ];
}
PK.3Y�M{�[[ebunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/AttrDisallowedBySpecifiedLayout.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class AttrDisallowedBySpecifiedLayout.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class AttrDisallowedBySpecifiedLayout extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'ATTR_DISALLOWED_BY_SPECIFIED_LAYOUT';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The attribute \'%1\' in tag \'%2\' is disallowed by specified layout \'%3\'.',
        SpecRule::SPECIFICITY => 52,
    ];
}
PK.3YVK^MMbbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/AttrMissingRequiredExtension.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class AttrMissingRequiredExtension.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class AttrMissingRequiredExtension extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'ATTR_MISSING_REQUIRED_EXTENSION';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The attribute \'%1\' requires including the \'%2\' extension JavaScript.',
        SpecRule::SPECIFICITY => 13,
    ];
}
PK.3Y�
�PP\bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/AttrRequiredButMissing.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class AttrRequiredButMissing.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class AttrRequiredButMissing extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'ATTR_REQUIRED_BUT_MISSING';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The attribute \'%1\' in tag \'%2\' is missing or incorrect, but required by attribute \'%3\'.',
        SpecRule::SPECIFICITY => 32,
    ];
}
PK.3Y�C�ss_bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/AttrValueRequiredByLayout.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class AttrValueRequiredByLayout.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class AttrValueRequiredByLayout extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'ATTR_VALUE_REQUIRED_BY_LAYOUT';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'Invalid value \'%1\' for attribute \'%2\' in tag \'%3\' - for layout \'%4\', set the attribute \'%2\' to value \'%5\'.',
        SpecRule::SPECIFICITY => 28,
    ];
}
PK.3Y<\[[_bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/BaseTagMustPreceedAllUrls.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class BaseTagMustPreceedAllUrls.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class BaseTagMustPreceedAllUrls extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'BASE_TAG_MUST_PRECEED_ALL_URLS';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The tag \'%1\', which contains URLs, was found earlier in the document than the BASE element.',
        SpecRule::SPECIFICITY => 90,
    ];
}
PK.3YU��C..[bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CdataViolatesDenylist.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CdataViolatesDenylist.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CdataViolatesDenylist extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CDATA_VIOLATES_DENYLIST';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The text inside tag \'%1\' contains \'%2\', which is disallowed.',
        SpecRule::SPECIFICITY => 2,
    ];
}
PK.3Yu[����jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/ChildTagDoesNotSatisfyReferencePoint.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class ChildTagDoesNotSatisfyReferencePoint.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class ChildTagDoesNotSatisfyReferencePoint extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CHILD_TAG_DOES_NOT_SATISFY_REFERENCE_POINT';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The tag \'%1\', a child tag of \'%2\', does not satisfy one of the acceptable reference points: %3.',
        SpecRule::SPECIFICITY => 80,
    ];
}
PK.3YET���rbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/ChildTagDoesNotSatisfyReferencePointSingular.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class ChildTagDoesNotSatisfyReferencePointSingular.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class ChildTagDoesNotSatisfyReferencePointSingular extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CHILD_TAG_DOES_NOT_SATISFY_REFERENCE_POINT_SINGULAR';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The tag \'%1\', a child tag of \'%2\', does not satisfy the reference point \'%3\'.',
        SpecRule::SPECIFICITY => 84,
    ];
}
PK.3YV���Zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssExcessivelyNested.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssExcessivelyNested.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssExcessivelyNested extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_EXCESSIVELY_NESTED';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS excessively nested in tag \'%1\'.',
        SpecRule::SPECIFICITY => 125,
    ];
}
PK.3Y~�Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxBadUrl.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxBadUrl.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxBadUrl extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_BAD_URL';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS syntax error in tag \'%1\' - bad url.',
        SpecRule::SPECIFICITY => 63,
    ];
}
PK.3Y���OOebunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedAttrSelector.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxDisallowedAttrSelector.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxDisallowedAttrSelector extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_DISALLOWED_ATTR_SELECTOR';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS error in tag \'%1\' - disallowed attribute selector \'%2\'.',
        SpecRule::SPECIFICITY => 120,
    ];
}
PK.3Ym���33_bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedDomain.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxDisallowedDomain.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxDisallowedDomain extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_DISALLOWED_DOMAIN';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS syntax error in tag \'%1\' - invalid domain \'%2\'.',
        SpecRule::SPECIFICITY => 72,
    ];
}
PK.3Y�g�;;bbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedImportant.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxDisallowedImportant.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxDisallowedImportant extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_DISALLOWED_IMPORTANT';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'Usage of the !important CSS qualifier is not allowed.',
        SpecRule::SPECIFICITY => 123,
    ];
}
PK.3Y�!�fxxobunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedKeyframeInsideKeyframe.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxDisallowedKeyframeInsideKeyframe.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxDisallowedKeyframeInsideKeyframe extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_DISALLOWED_KEYFRAME_INSIDE_KEYFRAME';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS syntax error in tag \'%1\' - keyframe inside keyframe is not allowed.',
        SpecRule::SPECIFICITY => 115,
    ];
}
PK.3Y�Q�QQebunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedMediaFeature.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxDisallowedMediaFeature.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxDisallowedMediaFeature extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_DISALLOWED_MEDIA_FEATURE';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS syntax error in tag \'%1\' - disallowed media feature \'%2\'.',
        SpecRule::SPECIFICITY => 119,
    ];
}
PK.3Yd�EEbbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedMediaType.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxDisallowedMediaType.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxDisallowedMediaType extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_DISALLOWED_MEDIA_TYPE';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS syntax error in tag \'%1\' - disallowed media type \'%2\'.',
        SpecRule::SPECIFICITY => 118,
    ];
}
PK.3Y���mmfbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedPropertyValue.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxDisallowedPropertyValue.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxDisallowedPropertyValue extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_DISALLOWED_PROPERTY_VALUE';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS syntax error in tag \'%1\' - the property \'%2\' is set to the disallowed value \'%3\'.',
        SpecRule::SPECIFICITY => 85,
    ];
}
PK.3Y8�Y��nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedPropertyValueWithHint.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxDisallowedPropertyValueWithHint.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxDisallowedPropertyValueWithHint extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_DISALLOWED_PROPERTY_VALUE_WITH_HINT';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS syntax error in tag \'%1\' - the property \'%2\' is set to the disallowed value \'%3\'. Allowed values: %4.',
        SpecRule::SPECIFICITY => 86,
    ];
}
PK.3YN�j�FFdbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedPseudoClass.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxDisallowedPseudoClass.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxDisallowedPseudoClass extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_DISALLOWED_PSEUDO_CLASS';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS error in tag \'%1\' - disallowed pseudo class \'%2\'.',
        SpecRule::SPECIFICITY => 121,
    ];
}
PK.3Y�E>�NNfbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedPseudoElement.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxDisallowedPseudoElement.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxDisallowedPseudoElement extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_DISALLOWED_PSEUDO_ELEMENT';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS error in tag \'%1\' - disallowed pseudo element \'%2\'.',
        SpecRule::SPECIFICITY => 122,
    ];
}
PK.3Y"9�+��zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedQualifiedRuleMustBeInsideKeyframe.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxDisallowedQualifiedRuleMustBeInsideKeyframe.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxDisallowedQualifiedRuleMustBeInsideKeyframe extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_DISALLOWED_QUALIFIED_RULE_MUST_BE_INSIDE_KEYFRAME';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS syntax error in tag \'%1\' - qualified rule \'%2\' must be located inside of a keyframe.',
        SpecRule::SPECIFICITY => 114,
    ];
}
PK.3Y٫LLdbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedRelativeUrl.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxDisallowedRelativeUrl.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxDisallowedRelativeUrl extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_DISALLOWED_RELATIVE_URL';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS syntax error in tag \'%1\' - disallowed relative url \'%2\'.',
        SpecRule::SPECIFICITY => 75,
    ];
}
PK.3Y)V?sjbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxEofInPreludeOfQualifiedRule.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxEofInPreludeOfQualifiedRule.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxEofInPreludeOfQualifiedRule extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_EOF_IN_PRELUDE_OF_QUALIFIED_RULE';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS syntax error in tag \'%1\' - end of stylesheet encountered in prelude of a qualified rule.',
        SpecRule::SPECIFICITY => 64,
    ];
}
PK.3Y���.FFdbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxErrorInPseudoSelector.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxErrorInPseudoSelector.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxErrorInPseudoSelector extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_ERROR_IN_PSEUDO_SELECTOR';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS syntax error in tag \'%1\' - invalid pseudo selector.',
        SpecRule::SPECIFICITY => 67,
    ];
}
PK.3YRx�mCCdbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxIncompleteDeclaration.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxIncompleteDeclaration.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxIncompleteDeclaration extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_INCOMPLETE_DECLARATION';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS syntax error in tag \'%1\' - incomplete declaration.',
        SpecRule::SPECIFICITY => 66,
    ];
}
PK.3Y�‚11\bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxInvalidAtRule.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxInvalidAtRule.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxInvalidAtRule extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_INVALID_AT_RULE';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS syntax error in tag \'%1\' - saw invalid at rule \'@%2\'.',
        SpecRule::SPECIFICITY => 39,
    ];
}
PK.3Y\�BBbbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxInvalidAttrSelector.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxInvalidAttrSelector.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxInvalidAttrSelector extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_INVALID_ATTR_SELECTOR';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS syntax error in tag \'%1\' - invalid attribute selector.',
        SpecRule::SPECIFICITY => 79,
    ];
}
PK.3YzV�]77abunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxInvalidDeclaration.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxInvalidDeclaration.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxInvalidDeclaration extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_INVALID_DECLARATION';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS syntax error in tag \'%1\' - invalid declaration.',
        SpecRule::SPECIFICITY => 65,
    ];
}
PK.3Y	b'7[[^bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxInvalidProperty.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxInvalidProperty.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxInvalidProperty extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_INVALID_PROPERTY';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS syntax error in tag \'%1\' - invalid property \'%2\'. The only allowed properties are \'%3\'.',
        SpecRule::SPECIFICITY => 111,
    ];
}
PK.3Y.��FFdbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxInvalidPropertyNolist.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxInvalidPropertyNolist.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxInvalidPropertyNolist extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_INVALID_PROPERTY_NOLIST';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS syntax error in tag \'%1\' - invalid property \'%2\'.',
        SpecRule::SPECIFICITY => 112,
    ];
}
PK.3Y�,5Ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxInvalidUrl.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxInvalidUrl.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxInvalidUrl extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_INVALID_URL';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS syntax error in tag \'%1\' - invalid url \'%2\'.',
        SpecRule::SPECIFICITY => 73,
    ];
}
PK.3YW�AAabunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxInvalidUrlProtocol.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxInvalidUrlProtocol.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxInvalidUrlProtocol extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_INVALID_URL_PROTOCOL';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS syntax error in tag \'%1\' - invalid url protocol \'%2:\'.',
        SpecRule::SPECIFICITY => 74,
    ];
}
PK.3Y�M��>>bbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxMalformedMediaQuery.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxMalformedMediaQuery.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxMalformedMediaQuery extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_MALFORMED_MEDIA_QUERY';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS syntax error in tag \'%1\' - malformed media query.',
        SpecRule::SPECIFICITY => 117,
    ];
}
PK.3YYq�;++^bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxMissingSelector.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxMissingSelector.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxMissingSelector extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_MISSING_SELECTOR';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS syntax error in tag \'%1\' - missing selector.',
        SpecRule::SPECIFICITY => 68,
    ];
}
PK.3Y��Q�Ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxMissingUrl.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxMissingUrl.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxMissingUrl extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_MISSING_URL';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS syntax error in tag \'%1\' - missing url.',
        SpecRule::SPECIFICITY => 71,
    ];
}
PK.3Yg���77`bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxNotASelectorStart.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxNotASelectorStart.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxNotASelectorStart extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_NOT_A_SELECTOR_START';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS syntax error in tag \'%1\' - not a selector start.',
        SpecRule::SPECIFICITY => 69,
    ];
}
PK.3Y&����mbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxPropertyDisallowedTogetherWith.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxPropertyDisallowedTogetherWith.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxPropertyDisallowedTogetherWith extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_PROPERTY_DISALLOWED_TOGETHER_WITH';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS syntax error in tag \'%1\' - the property \'%2\' is disallowed together with \'%3\'. Allowed properties: %4.',
        SpecRule::SPECIFICITY => 88,
    ];
}
PK.3Y�1ᨏ�mbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxPropertyDisallowedWithinAtRule.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxPropertyDisallowedWithinAtRule.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxPropertyDisallowedWithinAtRule extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_PROPERTY_DISALLOWED_WITHIN_AT_RULE';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS syntax error in tag \'%1\' - the property \'%2\' is disallowed within @%3. Allowed properties: %4.',
        SpecRule::SPECIFICITY => 87,
    ];
}
PK.3Y��$B��lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxPropertyRequiresQualification.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxPropertyRequiresQualification.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxPropertyRequiresQualification extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_PROPERTY_REQUIRES_QUALIFICATION';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS syntax error in tag \'%1\' - the property \'%2\' is disallowed unless the enclosing rule is prefixed with the \'%3\' qualification.',
        SpecRule::SPECIFICITY => 89,
    ];
}
PK.3Y@^I�uumbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxQualifiedRuleHasNoDeclarations.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxQualifiedRuleHasNoDeclarations.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxQualifiedRuleHasNoDeclarations extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_QUALIFIED_RULE_HAS_NO_DECLARATIONS';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS syntax error in tag \'%1\' - qualified rule \'%2\' has no declarations.',
        SpecRule::SPECIFICITY => 113,
    ];
}
PK.3Y���[IIebunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxStrayTrailingBackslash.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxStrayTrailingBackslash.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxStrayTrailingBackslash extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_STRAY_TRAILING_BACKSLASH';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS syntax error in tag \'%1\' - stray trailing backslash.',
        SpecRule::SPECIFICITY => 60,
    ];
}
PK.3Yx��mmmbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxUnparsedInputRemainsInSelector.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxUnparsedInputRemainsInSelector.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxUnparsedInputRemainsInSelector extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_UNPARSED_INPUT_REMAINS_IN_SELECTOR';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS syntax error in tag \'%1\' - unparsed input remains in selector.',
        SpecRule::SPECIFICITY => 70,
    ];
}
PK.3Y˯|;;bbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxUnterminatedComment.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxUnterminatedComment.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxUnterminatedComment extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_UNTERMINATED_COMMENT';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS syntax error in tag \'%1\' - unterminated comment.',
        SpecRule::SPECIFICITY => 61,
    ];
}
PK.3Yc�"77abunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxUnterminatedString.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class CssSyntaxUnterminatedString.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class CssSyntaxUnterminatedString extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'CSS_SYNTAX_UNTERMINATED_STRING';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'CSS syntax error in tag \'%1\' - unterminated string.',
        SpecRule::SPECIFICITY => 62,
    ];
}
PK.3Y}�h�  Tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DeprecatedAttr.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class DeprecatedAttr.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class DeprecatedAttr extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'DEPRECATED_ATTR';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The attribute \'%1\' in tag \'%2\' is deprecated - use \'%3\' instead.',
        SpecRule::SPECIFICITY => 104,
    ];
}
PK.3Y��Q		Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DeprecatedTag.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class DeprecatedTag.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class DeprecatedTag extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'DEPRECATED_TAG';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The tag \'%1\' is deprecated - use \'%2\' instead.',
        SpecRule::SPECIFICITY => 105,
    ];
}
PK.3Y��6VVQbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DevModeOnly.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class DevModeOnly.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class DevModeOnly extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'DEV_MODE_ONLY';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'Tag \'html\' marked with attribute \'data-ampdevmode\'. Validator will suppress errors regarding any other tag with this attribute.',
        SpecRule::SPECIFICITY => 1000,
    ];
}
PK.3Yt:��,,Ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedAmpDomain.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class DisallowedAmpDomain.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class DisallowedAmpDomain extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'DISALLOWED_AMP_DOMAIN';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The script tag includes an invalid AMP domain in the src attribute.',
        SpecRule::SPECIFICITY => 23,
    ];
}
PK.3Y��
�Tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedAttr.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class DisallowedAttr.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class DisallowedAttr extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'DISALLOWED_ATTR';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The attribute \'%1\' may not appear in tag \'%2\'.',
        SpecRule::SPECIFICITY => 25,
    ];
}
PK.3Yc��@@\bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedChildTagName.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class DisallowedChildTagName.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class DisallowedChildTagName extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'DISALLOWED_CHILD_TAG_NAME';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'Tag \'%1\' is disallowed as child of tag \'%2\'. Child tag must be one of %3.',
        SpecRule::SPECIFICITY => 77,
    ];
}
PK.3Y(�D""Vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedDomain.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class DisallowedDomain.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class DisallowedDomain extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'DISALLOWED_DOMAIN';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The domain \'%3\' for attribute \'%1\' in tag \'%2\' is disallowed.',
        SpecRule::SPECIFICITY => 56,
    ];
}
PK.3Y���\\abunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedFirstChildTagName.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class DisallowedFirstChildTagName.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class DisallowedFirstChildTagName extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'DISALLOWED_FIRST_CHILD_TAG_NAME';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'Tag \'%1\' is disallowed as first child of tag \'%2\'. First child tag must be one of %3.',
        SpecRule::SPECIFICITY => 78,
    ];
}
PK.3Y�f�<[[`bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedManufacturedBody.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class DisallowedManufacturedBody.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class DisallowedManufacturedBody extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'DISALLOWED_MANUFACTURED_BODY';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'Tag or text which is only allowed inside the body section found outside of the body section.',
        SpecRule::SPECIFICITY => 106,
    ];
}
PK.3YQ]�bMMcbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedPropertyInAttrValue.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class DisallowedPropertyInAttrValue.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class DisallowedPropertyInAttrValue extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'DISALLOWED_PROPERTY_IN_ATTR_VALUE';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The property \'%1\' in attribute \'%2\' in tag \'%3\' is disallowed.',
        SpecRule::SPECIFICITY => 42,
    ];
}
PK.3Y3+�(88[bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedRelativeUrl.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class DisallowedRelativeUrl.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class DisallowedRelativeUrl extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'DISALLOWED_RELATIVE_URL';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The relative URL \'%3\' for attribute \'%1\' in tag \'%2\' is disallowed.',
        SpecRule::SPECIFICITY => 54,
    ];
}
PK.3Y�$eYbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedScriptTag.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class DisallowedScriptTag.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class DisallowedScriptTag extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'DISALLOWED_SCRIPT_TAG';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'Custom JavaScript is not allowed.',
        SpecRule::SPECIFICITY => 102,
    ];
}
PK.3YyqVNNYbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedStyleAttr.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class DisallowedStyleAttr.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class DisallowedStyleAttr extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'DISALLOWED_STYLE_ATTR';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The inline \'style\' attribute is not allowed in AMP documents. Use \'style amp-custom\' tag instead.',
        SpecRule::SPECIFICITY => 59,
    ];
}
PK.3Ys�%P��Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedTag.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class DisallowedTag.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class DisallowedTag extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'DISALLOWED_TAG';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The tag \'%1\' is disallowed.',
        SpecRule::SPECIFICITY => 24,
    ];
}
PK.3Y��**[bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedTagAncestor.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class DisallowedTagAncestor.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class DisallowedTagAncestor extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'DISALLOWED_TAG_ANCESTOR';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The tag \'%1\' may not appear as a descendant of tag \'%2\'.',
        SpecRule::SPECIFICITY => 5,
    ];
}
PK.3Y���44_bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DocumentSizeLimitExceeded.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class DocumentSizeLimitExceeded.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class DocumentSizeLimitExceeded extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'DOCUMENT_SIZE_LIMIT_EXCEEDED';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'Document exceeded %1 bytes limit. Actual size %2 bytes.',
        SpecRule::SPECIFICITY => 126,
    ];
}
PK.3Y7[PXbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DocumentTooComplex.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class DocumentTooComplex.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class DocumentTooComplex extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'DOCUMENT_TOO_COMPLEX';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The document is too complex.',
        SpecRule::SPECIFICITY => 107,
    ];
}
PK.3Yա�V**Xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DuplicateAttribute.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class DuplicateAttribute.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class DuplicateAttribute extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'DUPLICATE_ATTRIBUTE';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The tag \'%1\' contains the attribute \'%2\' repeated multiple times.',
        SpecRule::SPECIFICITY => 27,
    ];
}
PK.3Y�7`LLXbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DuplicateDimension.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class DuplicateDimension.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class DuplicateDimension extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'DUPLICATE_DIMENSION';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'Multiple image candidates with the same width or pixel density found in attribute \'%1\' in tag \'%2\'.',
        SpecRule::SPECIFICITY => 53,
    ];
}
PK.3Y
S�2JJ]bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DuplicateReferencePoint.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class DuplicateReferencePoint.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class DuplicateReferencePoint extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'DUPLICATE_REFERENCE_POINT';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The reference point \'%1\' for \'%2\' must be unique but a duplicate was encountered.',
        SpecRule::SPECIFICITY => 82,
    ];
}
PK.3Y�O�Xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DuplicateUniqueTag.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class DuplicateUniqueTag.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class DuplicateUniqueTag extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'DUPLICATE_UNIQUE_TAG';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The tag \'%1\' appears more than once in the document.',
        SpecRule::SPECIFICITY => 33,
    ];
}
PK.3Y��NN_bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DuplicateUniqueTagWarning.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class DuplicateUniqueTagWarning.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class DuplicateUniqueTagWarning extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'DUPLICATE_UNIQUE_TAG_WARNING';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The tag \'%1\' appears more than once in the document. This will soon be an error.',
        SpecRule::SPECIFICITY => 34,
    ];
}
PK.3Y�X�55Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/ExtensionUnused.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class ExtensionUnused.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class ExtensionUnused extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'EXTENSION_UNUSED';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The extension \'%1\' was found on this page, but is unused. Please remove this extension.',
        SpecRule::SPECIFICITY => 15,
    ];
}
PK.3Y`9��##Zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/GeneralDisallowedTag.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class GeneralDisallowedTag.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class GeneralDisallowedTag extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'GENERAL_DISALLOWED_TAG';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The tag \'%1\' is disallowed except in specific forms.',
        SpecRule::SPECIFICITY => 103,
    ];
}
PK.3Y���[%%Zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/ImpliedLayoutInvalid.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class ImpliedLayoutInvalid.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class ImpliedLayoutInvalid extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'IMPLIED_LAYOUT_INVALID';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The implied layout \'%1\' is not supported by tag \'%2\'.',
        SpecRule::SPECIFICITY => 49,
    ];
}
PK.3Y�G����hbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/InconsistentUnitsForWidthAndHeight.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class InconsistentUnitsForWidthAndHeight.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class InconsistentUnitsForWidthAndHeight extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'INCONSISTENT_UNITS_FOR_WIDTH_AND_HEIGHT';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'Inconsistent units for width and height in tag \'%1\' - width is specified in \'%2\' whereas height is specified in \'%3\'.',
        SpecRule::SPECIFICITY => 47,
    ];
}
PK.3Y��_�??^bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/IncorrectMinNumChildTags.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class IncorrectMinNumChildTags.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class IncorrectMinNumChildTags extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'INCORRECT_MIN_NUM_CHILD_TAGS';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'Tag \'%1\' must have a minimum of %2 child tags - saw %3 child tags.',
        SpecRule::SPECIFICITY => 108,
    ];
}
PK.3Ym*�''[bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/IncorrectNumChildTags.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class IncorrectNumChildTags.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class IncorrectNumChildTags extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'INCORRECT_NUM_CHILD_TAGS';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'Tag \'%1\' must have %2 child tags - saw %3 child tags.',
        SpecRule::SPECIFICITY => 76,
    ];
}
PK.3Y'Y!�~~cbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/IncorrectScriptReleaseVersion.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class IncorrectScriptReleaseVersion.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class IncorrectScriptReleaseVersion extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'INCORRECT_SCRIPT_RELEASE_VERSION';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The script version for \'%1\' is a %2 version which mismatches with the first script on the page using the %3 version.',
        SpecRule::SPECIFICITY => 22,
    ];
}
PK.3YQ_*�--Ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/InlineScriptTooLong.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class InlineScriptTooLong.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class InlineScriptTooLong extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'INLINE_SCRIPT_TOO_LONG';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The inline script is %1 bytes, which exceeds the limit of %2 bytes.',
        SpecRule::SPECIFICITY => 38,
    ];
}
PK.3Y3��QQXbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/InlineStyleTooLong.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class InlineStyleTooLong.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class InlineStyleTooLong extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'INLINE_STYLE_TOO_LONG';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The inline style specified in tag \'%1\' is too long - it contains %2 bytes whereas the limit is %3 bytes.',
        SpecRule::SPECIFICITY => 37,
    ];
}
PK.3Y�7�"&&Vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidAttrValue.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class InvalidAttrValue.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class InvalidAttrValue extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'INVALID_ATTR_VALUE';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The attribute \'%1\' in tag \'%2\' is set to the invalid value \'%3\'.',
        SpecRule::SPECIFICITY => 26,
    ];
}
PK.3Y">=�++Xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidDoctypeHtml.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class InvalidDoctypeHtml.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class InvalidDoctypeHtml extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'INVALID_DOCTYPE_HTML';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'Invalid or missing doctype declaration. Should be \'!doctype html\'.',
        SpecRule::SPECIFICITY => 128,
    ];
}
PK.3YK�TPPZbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidExtensionPath.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class InvalidExtensionPath.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class InvalidExtensionPath extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'INVALID_EXTENSION_PATH';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The extension \'%1\' has a path \'%2\' which is invalid. Please use a valid path for this extension.',
        SpecRule::SPECIFICITY => 19,
    ];
}
PK.3Yf$�}tt]bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidExtensionVersion.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class InvalidExtensionVersion.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class InvalidExtensionVersion extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'INVALID_EXTENSION_VERSION';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The extension \'%1\' is referenced at version \'%2\' which is an invalid version. Please use a valid version of this extension.',
        SpecRule::SPECIFICITY => 18,
    ];
}
PK.3Y�|�Vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidJsonCdata.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class InvalidJsonCdata.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class InvalidJsonCdata extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'INVALID_JSON_CDATA';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The script tag contains invalid JSON that cannot be parsed.',
        SpecRule::SPECIFICITY => 4,
    ];
}
PK.3Y�v�iiebunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidPropertyValueInAttrValue.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class InvalidPropertyValueInAttrValue.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class InvalidPropertyValueInAttrValue extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'INVALID_PROPERTY_VALUE_IN_ATTR_VALUE';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The property \'%1\' in attribute \'%2\' in tag \'%3\' is set to \'%4\', which is invalid.',
        SpecRule::SPECIFICITY => 41,
    ];
}
PK.3YC�0�Pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidUrl.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class InvalidUrl.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class InvalidUrl extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'INVALID_URL';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'Malformed URL \'%3\' for attribute \'%1\' in tag \'%2\'.',
        SpecRule::SPECIFICITY => 58,
    ];
}
PK.3Y�J��&&Xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidUrlProtocol.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class InvalidUrlProtocol.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class InvalidUrlProtocol extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'INVALID_URL_PROTOCOL';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'Invalid URL protocol \'%3:\' for attribute \'%1\' in tag \'%2\'.',
        SpecRule::SPECIFICITY => 57,
    ];
}
PK.3YZE���Qbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidUtf8.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class InvalidUtf8.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class InvalidUtf8 extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'INVALID_UTF8';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The document contains invalid UTF8.',
        SpecRule::SPECIFICITY => 124,
    ];
}
PK.3Y׭{ZZZbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/LtsScriptAfterNonLts.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class LtsScriptAfterNonLts.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class LtsScriptAfterNonLts extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'LTS_SCRIPT_AFTER_NON_LTS';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => '\'%1\' must use the non-LTS version to correspond with the first script in the page, which does not use LTS.',
        SpecRule::SPECIFICITY => 21,
    ];
}
PK.3Y�
�FF_bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryAnyofAttrMissing.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class MandatoryAnyofAttrMissing.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class MandatoryAnyofAttrMissing extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'MANDATORY_ANYOF_ATTR_MISSING';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The tag \'%1\' is missing a mandatory attribute - pick at least one of %2.',
        SpecRule::SPECIFICITY => 31,
    ];
}
PK.3YJӚ$$Zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryAttrMissing.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class MandatoryAttrMissing.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class MandatoryAttrMissing extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'MANDATORY_ATTR_MISSING';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The mandatory attribute \'%1\' is missing in tag \'%2\'.',
        SpecRule::SPECIFICITY => 29,
    ];
}
PK.3Y�2�NNfbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryCdataMissingOrIncorrect.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class MandatoryCdataMissingOrIncorrect.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class MandatoryCdataMissingOrIncorrect extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'MANDATORY_CDATA_MISSING_OR_INCORRECT';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The mandatory text inside tag \'%1\' is missing or incorrect.',
        SpecRule::SPECIFICITY => 1,
    ];
}
PK.3Y-�..[bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryLastChildTag.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class MandatoryLastChildTag.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class MandatoryLastChildTag extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'MANDATORY_LAST_CHILD_TAG';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'Tag \'%1\', if present, must be the last child of tag \'%2\'.',
        SpecRule::SPECIFICITY => 110,
    ];
}
PK.3Y���==_bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryOneofAttrMissing.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class MandatoryOneofAttrMissing.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class MandatoryOneofAttrMissing extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'MANDATORY_ONEOF_ATTR_MISSING';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The tag \'%1\' is missing a mandatory attribute - pick one of %2.',
        SpecRule::SPECIFICITY => 30,
    ];
}
PK.3Y�6p�eekbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryPropertyMissingFromAttrValue.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class MandatoryPropertyMissingFromAttrValue.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class MandatoryPropertyMissingFromAttrValue extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'MANDATORY_PROPERTY_MISSING_FROM_ATTR_VALUE';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The property \'%1\' is missing from attribute \'%2\' in tag \'%3\'.',
        SpecRule::SPECIFICITY => 40,
    ];
}
PK.3Y��FFdbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryReferencePointMissing.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class MandatoryReferencePointMissing.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class MandatoryReferencePointMissing extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'MANDATORY_REFERENCE_POINT_MISSING';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The mandatory reference point \'%1\' for \'%2\' is missing.',
        SpecRule::SPECIFICITY => 81,
    ];
}
PK.3Yӂ29((Zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryTagAncestor.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class MandatoryTagAncestor.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class MandatoryTagAncestor extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'MANDATORY_TAG_ANCESTOR';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The tag \'%1\' may only appear as a descendant of tag \'%2\'.',
        SpecRule::SPECIFICITY => 6,
    ];
}
PK.3Y��$OWWbbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryTagAncestorWithHint.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class MandatoryTagAncestorWithHint.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class MandatoryTagAncestorWithHint extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'MANDATORY_TAG_ANCESTOR_WITH_HINT';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The tag \'%1\' may only appear as a descendant of tag \'%2\'. Did you mean \'%3\'?',
        SpecRule::SPECIFICITY => 7,
    ];
}
PK.3Y���Ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryTagMissing.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class MandatoryTagMissing.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class MandatoryTagMissing extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'MANDATORY_TAG_MISSING';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The mandatory tag \'%1\' is missing or incorrect.',
        SpecRule::SPECIFICITY => 8,
    ];
}
PK.3Y��cee]bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/MissingLayoutAttributes.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class MissingLayoutAttributes.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class MissingLayoutAttributes extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'MISSING_LAYOUT_ATTRIBUTES';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'Incomplete layout attributes specified for tag \'%1\'. For example, provide attributes \'width\' and \'height\'.',
        SpecRule::SPECIFICITY => 48,
    ];
}
PK.3Y�=;H::^bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/MissingRequiredExtension.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class MissingRequiredExtension.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class MissingRequiredExtension extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'MISSING_REQUIRED_EXTENSION';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The tag \'%1\' requires including the \'%2\' extension JavaScript.',
        SpecRule::SPECIFICITY => 12,
    ];
}
PK.3Y�Қ��Pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/MissingUrl.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class MissingUrl.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class MissingUrl extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'MISSING_URL';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'Missing URL for attribute \'%1\' in tag \'%2\'.',
        SpecRule::SPECIFICITY => 55,
    ];
}
PK.3Y�[�s;;\bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/MutuallyExclusiveAttrs.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class MutuallyExclusiveAttrs.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class MutuallyExclusiveAttrs extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'MUTUALLY_EXCLUSIVE_ATTRS';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'Mutually exclusive attributes encountered in tag \'%1\' - pick one of %2.',
        SpecRule::SPECIFICITY => 43,
    ];
}
PK.3Y�z�	NNZbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/NonLtsScriptAfterLts.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class NonLtsScriptAfterLts.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class NonLtsScriptAfterLts extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'NON_LTS_SCRIPT_AFTER_LTS';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => '\'%1\' must use the LTS version to correspond with the first script in the page, which uses LTS.',
        SpecRule::SPECIFICITY => 20,
    ];
}
PK.3Y���99cbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/NonWhitespaceCdataEncountered.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class NonWhitespaceCdataEncountered.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class NonWhitespaceCdataEncountered extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'NON_WHITESPACE_CDATA_ENCOUNTERED';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The tag \'%1\' contains text, which is disallowed.',
        SpecRule::SPECIFICITY => 3,
    ];
}
PK.3Y�--\bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/SpecifiedLayoutInvalid.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class SpecifiedLayoutInvalid.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class SpecifiedLayoutInvalid extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'SPECIFIED_LAYOUT_INVALID';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The specified layout \'%1\' is not supported by tag \'%2\'.',
        SpecRule::SPECIFICITY => 50,
    ];
}
PK.3Y<��ų�ebunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/StylesheetAndInlineStyleTooLong.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class StylesheetAndInlineStyleTooLong.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class StylesheetAndInlineStyleTooLong extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'STYLESHEET_AND_INLINE_STYLE_TOO_LONG';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The author stylesheet specified in tag \'style amp-custom\' and the combined inline styles is too large - document contains %1 bytes whereas the limit is %2 bytes.',
        SpecRule::SPECIFICITY => 36,
    ];
}
PK.3Y��n^XXWbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/StylesheetTooLong.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class StylesheetTooLong.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class StylesheetTooLong extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'STYLESHEET_TOO_LONG';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The author stylesheet specified in tag \'%1\' is too long - document contains %2 bytes whereas the limit is %3 bytes.',
        SpecRule::SPECIFICITY => 35,
    ];
}
PK.3Yˢ* &&Vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/TagExcludedByTag.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class TagExcludedByTag.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class TagExcludedByTag extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'TAG_EXCLUDED_BY_TAG';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The tag \'%1\' is present, but is excluded by the presence of \'%2\'.',
        SpecRule::SPECIFICITY => 11,
    ];
}
PK.3Ywq�6ZZabunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/TagNotAllowedToHaveSiblings.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class TagNotAllowedToHaveSiblings.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class TagNotAllowedToHaveSiblings extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'TAG_NOT_ALLOWED_TO_HAVE_SIBLINGS';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'Tag \'%1\' is not allowed to have any sibling tags (\'%2\' should only have 1 child).',
        SpecRule::SPECIFICITY => 109,
    ];
}
PK.3Y~��VV_bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/TagReferencePointConflict.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class TagReferencePointConflict.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class TagReferencePointConflict extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'TAG_REFERENCE_POINT_CONFLICT';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The tag \'%1\' conflicts with reference point \'%2\' because both define reference points.',
        SpecRule::SPECIFICITY => 83,
    ];
}
PK.3Y��L�,,Zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/TagRequiredByMissing.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class TagRequiredByMissing.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class TagRequiredByMissing extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'TAG_REQUIRED_BY_MISSING';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The tag \'%1\' is missing or incorrect, but required by \'%2\'.',
        SpecRule::SPECIFICITY => 10,
    ];
}
PK.3Y��A0''Xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/TemplateInAttrName.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class TemplateInAttrName.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class TemplateInAttrName extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'TEMPLATE_IN_ATTR_NAME';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'Mustache template syntax in attribute name \'%1\' in tag \'%2\'.',
        SpecRule::SPECIFICITY => 46,
    ];
}
PK.3Y�|�```bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/TemplatePartialInAttrValue.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class TemplatePartialInAttrValue.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class TemplatePartialInAttrValue extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'TEMPLATE_PARTIAL_IN_ATTR_VALUE';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The attribute \'%1\' in tag \'%2\' is set to \'%3\', which contains a Mustache template partial.',
        SpecRule::SPECIFICITY => 45,
    ];
}
PK.3Y�Nmmbbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/UnescapedTemplateInAttrValue.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class UnescapedTemplateInAttrValue.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class UnescapedTemplateInAttrValue extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'UNESCAPED_TEMPLATE_IN_ATTR_VALUE';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The attribute \'%1\' in tag \'%2\' is set to \'%3\', which contains unescaped Mustache template syntax.',
        SpecRule::SPECIFICITY => 44,
    ];
}
PK.3YB����Qbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/UnknownCode.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class UnknownCode.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class UnknownCode extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'UNKNOWN_CODE';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'Unknown error.',
        SpecRule::SPECIFICITY => 0,
    ];
}
PK.3Y�U�d@@Vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/ValueSetMismatch.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class ValueSetMismatch.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class ValueSetMismatch extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'VALUE_SET_MISMATCH';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'Attribute \'%1\' in tag \'%2\' contains a value that does not match any other tags on the page.',
        SpecRule::SPECIFICITY => 127,
    ];
}
PK.3Yb�׾��gbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/WarningExtensionDeprecatedVersion.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class WarningExtensionDeprecatedVersion.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class WarningExtensionDeprecatedVersion extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'WARNING_EXTENSION_DEPRECATED_VERSION';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The extension \'%1\' is referenced at version \'%2\' which is a deprecated version. Please use a more recent version of this extension. This may become an error in the future.',
        SpecRule::SPECIFICITY => 17,
    ];
}
PK.3Y����jj\bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/WarningExtensionUnused.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class WarningExtensionUnused.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class WarningExtensionUnused extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'WARNING_EXTENSION_UNUSED';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The extension \'%1\' was found on this page, but is unused (no \'%2\' tag seen). This may become an error in the future.',
        SpecRule::SPECIFICITY => 16,
    ];
}
PK.3Y�Ǥ^^abunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/WarningTagRequiredByMissing.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class WarningTagRequiredByMissing.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class WarningTagRequiredByMissing extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'WARNING_TAG_REQUIRED_BY_MISSING';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The tag \'%1\' is missing or incorrect, but required by \'%2\'. This will soon be an error.',
        SpecRule::SPECIFICITY => 14,
    ];
}
PK.3Y�yVOTbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/WrongParentTag.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Error;

use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\SpecRule;

/**
 * Error class WrongParentTag.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $format
 * @property-read int $specificity
 */
final class WrongParentTag extends Error
{
    /**
     * Code of the error.
     *
     * @var string
     */
    const CODE = 'WRONG_PARENT_TAG';

    /**
     * Array of spec data.
     *
     * @var array{format: string, specificity?: int}
     */
    const SPEC = [
        SpecRule::FORMAT => 'The parent tag of tag \'%1\' is \'%2\', but it can only be \'%3\'.',
        SpecRule::SPECIFICITY => 9,
    ];
}
PK.3YA����Vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Section/AttributeLists.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Section;

use AmpProject\Exception\InvalidListName;
use AmpProject\Validator\Spec;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\IterableSection;
use AmpProject\Validator\Spec\Iteration;

/**
 * The AttributeLists section provides lists of allowed attributes.
 *
 * @package ampproject/amp-toolbox
 *
 * @method AttributeList parentCurrent()
 */
final class AttributeLists implements IterableSection
{
    use Iteration {
        Iteration::current as parentCurrent;
    }

    /**
     * Mapping of attribute list ID to attribute list implementation.
     *
     * @var array<string>
     */
    const ATTRIBUTE_LISTS = [
        AttributeList\CommonLinkAttrs::ID => AttributeList\CommonLinkAttrs::class,
        AttributeList\PooolAccessAttrs::ID => AttributeList\PooolAccessAttrs::class,
        AttributeList\CiteAttr::ID => AttributeList\CiteAttr::class,
        AttributeList\ClickAttributions::ID => AttributeList\ClickAttributions::class,
        AttributeList\PrivateClickMeasurementAttributes::ID => AttributeList\PrivateClickMeasurementAttributes::class,
        AttributeList\ImgAttrs::ID => AttributeList\ImgAttrs::class,
        AttributeList\TrackAttrsNoSubtitles::ID => AttributeList\TrackAttrsNoSubtitles::class,
        AttributeList\TrackAttrsSubtitles::ID => AttributeList\TrackAttrsSubtitles::class,
        AttributeList\InputCommonAttr::ID => AttributeList\InputCommonAttr::class,
        AttributeList\AmphtmlEngineAttrs::ID => AttributeList\AmphtmlEngineAttrs::class,
        AttributeList\AmphtmlModuleEngineAttrs::ID => AttributeList\AmphtmlModuleEngineAttrs::class,
        AttributeList\AmphtmlNomoduleEngineAttrs::ID => AttributeList\AmphtmlNomoduleEngineAttrs::class,
        AttributeList\MandatorySrcOrSrcset::ID => AttributeList\MandatorySrcOrSrcset::class,
        AttributeList\MandatorySrcAmp4email::ID => AttributeList\MandatorySrcAmp4email::class,
        AttributeList\OptionalSrcAmp4email::ID => AttributeList\OptionalSrcAmp4email::class,
        AttributeList\ExtendedAmpGlobal::ID => AttributeList\ExtendedAmpGlobal::class,
        AttributeList\AmpLayoutAttrs::ID => AttributeList\AmpLayoutAttrs::class,
        AttributeList\NonceAttr::ID => AttributeList\NonceAttr::class,
        AttributeList\CommonExtensionAttrs::ID => AttributeList\CommonExtensionAttrs::class,
        AttributeList\MandatoryIdAttr::ID => AttributeList\MandatoryIdAttr::class,
        AttributeList\FormNameAttr::ID => AttributeList\FormNameAttr::class,
        AttributeList\NameAttr::ID => AttributeList\NameAttr::class,
        AttributeList\MandatoryNameAttr::ID => AttributeList\MandatoryNameAttr::class,
        AttributeList\GlobalAttrs::ID => AttributeList\GlobalAttrs::class,
        AttributeList\SvgConditionalProcessingAttributes::ID => AttributeList\SvgConditionalProcessingAttributes::class,
        AttributeList\SvgCoreAttributes::ID => AttributeList\SvgCoreAttributes::class,
        AttributeList\SvgFilterPrimitiveAttributes::ID => AttributeList\SvgFilterPrimitiveAttributes::class,
        AttributeList\SvgPresentationAttributes::ID => AttributeList\SvgPresentationAttributes::class,
        AttributeList\SvgTransferFunctionAttributes::ID => AttributeList\SvgTransferFunctionAttributes::class,
        AttributeList\SvgXlinkAttributes::ID => AttributeList\SvgXlinkAttributes::class,
        AttributeList\SvgStyleAttr::ID => AttributeList\SvgStyleAttr::class,
        AttributeList\AmpAudioCommon::ID => AttributeList\AmpAudioCommon::class,
        AttributeList\AmpBaseCarouselCommon::ID => AttributeList\AmpBaseCarouselCommon::class,
        AttributeList\AmpCarouselCommon::ID => AttributeList\AmpCarouselCommon::class,
        AttributeList\AmpDatePickerCommonAttributes::ID => AttributeList\AmpDatePickerCommonAttributes::class,
        AttributeList\AmpDatePickerRangeTypeAttributes::ID => AttributeList\AmpDatePickerRangeTypeAttributes::class,
        AttributeList\AmpDatePickerSingleTypeAttributes::ID => AttributeList\AmpDatePickerSingleTypeAttributes::class,
        AttributeList\AmpDatePickerStaticModeAttributes::ID => AttributeList\AmpDatePickerStaticModeAttributes::class,
        AttributeList\AmpDatePickerOverlayModeAttributes::ID => AttributeList\AmpDatePickerOverlayModeAttributes::class,
        AttributeList\AmpFacebook::ID => AttributeList\AmpFacebook::class,
        AttributeList\AmpFacebookStrict::ID => AttributeList\AmpFacebookStrict::class,
        AttributeList\AmpInputmaskCommonAttr::ID => AttributeList\AmpInputmaskCommonAttr::class,
        AttributeList\LightboxableElements::ID => AttributeList\LightboxableElements::class,
        AttributeList\AmpMegaphoneCommon::ID => AttributeList\AmpMegaphoneCommon::class,
        AttributeList\AmpNestedMenuActions::ID => AttributeList\AmpNestedMenuActions::class,
        AttributeList\InteractiveSharedConfigsAttrs::ID => AttributeList\InteractiveSharedConfigsAttrs::class,
        AttributeList\InteractiveOptionsTextAttrs::ID => AttributeList\InteractiveOptionsTextAttrs::class,
        AttributeList\InteractiveOptionsConfettiAttrs::ID => AttributeList\InteractiveOptionsConfettiAttrs::class,
        AttributeList\InteractiveOptionsResultsCategoryAttrs::ID => AttributeList\InteractiveOptionsResultsCategoryAttrs::class,
        AttributeList\InteractiveOptionsImgAttrs::ID => AttributeList\InteractiveOptionsImgAttrs::class,
        AttributeList\AmpStreamGalleryCommon::ID => AttributeList\AmpStreamGalleryCommon::class,
        AttributeList\AmpVideoIframeCommon::ID => AttributeList\AmpVideoIframeCommon::class,
        AttributeList\AmpVideoCommon::ID => AttributeList\AmpVideoCommon::class,
    ];

    /**
     * Cache of instantiated AttributeList objects.
     *
     * @var array<Spec\AttributeList>
     */
    private $attributeLists = [];

    /**
     * Get a specific attribute list.
     *
     * @param string $attributeListName Name of the attribute list to get.
     * @return Spec\AttributeList Attribute list with the given attribute list name.
     * @throws InvalidListName If an invalid attribute list name is requested.
     */
    public function get($attributeListName)
    {
        if (!array_key_exists($attributeListName, self::ATTRIBUTE_LISTS)) {
            throw InvalidListName::forAttributeList($attributeListName);
        }

        if (array_key_exists($attributeListName, $this->attributeLists)) {
            return $this->attributeLists[$attributeListName];
        }

        $attributeListClassName = self::ATTRIBUTE_LISTS[$attributeListName];

        /** @var Spec\AttributeList $attributeList */
        $attributeList = new $attributeListClassName();

        $this->attributeLists[$attributeListName] = $attributeList;

        return $attributeList;
    }

    /**
     * Get the list of available keys.
     *
     * @return array<string> Array of available keys.
     */
    public function getAvailableKeys()
    {
        return array_keys(self::ATTRIBUTE_LISTS);
    }

    /**
     * Find the instantiated object for the current key.
     *
     * This should use its own caching mechanism as needed.
     *
     * Ideally, current() should be overridden as well to provide the correct object type-hint.
     *
     * @param string $key Key to retrieve the instantiated object for.
     * @return object Instantiated object for the current key.
     */
    public function findByKey($key)
    {
        return $this->get($key);
    }

    /**
     * Return the current iterable object.
     *
     * @return AttributeList Attribute list object.
     */
    #[\ReturnTypeWillChange]
    public function current()
    {
        return $this->parentCurrent();
    }
}
PK.3YP�R��Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Section/CssRulesets.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Section;

use AmpProject\Exception\InvalidCssRulesetName;
use AmpProject\Exception\InvalidFormat;
use AmpProject\Format;
use AmpProject\Validator\Spec\CssRuleset;
use AmpProject\Validator\Spec\IterableSection;
use AmpProject\Validator\Spec\Iteration;

/**
 * The CssRulesets section defines the validation rules that apply to the CSS of a document.
 *
 * @package ampproject/amp-toolbox
 *
 * @method CssRuleset parentCurrent()
 */
final class CssRulesets implements IterableSection
{
    use Iteration {
        Iteration::current as parentCurrent;
    }

    /**
     * Mapping of CSS ruleset ID to CSS ruleset implementation.
     *
     * @var array<string>
     */
    const CSS_RULESETS = [
        CssRuleset\AmpNoTransformed::ID => CssRuleset\AmpNoTransformed::class,
        CssRuleset\AmpTransformed::ID => CssRuleset\AmpTransformed::class,
        CssRuleset\Amp4ads::ID => CssRuleset\Amp4ads::class,
        CssRuleset\Amp4emailDataCssStrict::ID => CssRuleset\Amp4emailDataCssStrict::class,
        CssRuleset\Amp4emailNoDataCssStrict::ID => CssRuleset\Amp4emailNoDataCssStrict::class,
    ];

    /**
     * Mapping of AMP format to array of CSS ruleset IDs.
     *
     * This is used to optimize querying by AMP format.
     *
     * @var array<array<string>>
     */
    const BY_FORMAT = [
        Format::AMP => [
            CssRuleset\AmpNoTransformed::ID,
            CssRuleset\AmpTransformed::ID,
        ],
        Format::AMP4ADS => [
            CssRuleset\Amp4ads::ID,
        ],
        Format::AMP4EMAIL => [
            CssRuleset\Amp4emailDataCssStrict::ID,
            CssRuleset\Amp4emailNoDataCssStrict::ID,
        ],
    ];

    /**
     * Cache of instantiated CssRuleset objects.
     *
     * @var array<CssRuleset>
     */
    private $cssRulesetsCache = [];

    /**
     * Get a CSS ruleset by its CSS ruleset ID.
     *
     * @param string $cssRulesetId CSS ruleset ID to get the collection of CSS rulesets for.
     * @return CssRuleset Requested CSS ruleset.
     * @throws InvalidCssRulesetName If an invalid CSS ruleset name is requested.
     */
    public function get($cssRulesetId)
    {
        if (!array_key_exists($cssRulesetId, self::CSS_RULESETS)) {
            throw InvalidCssRulesetName::forCssRulesetName($cssRulesetId);
        }

        if (array_key_exists($cssRulesetId, $this->cssRulesetsCache)) {
            return $this->cssRulesetsCache[$cssRulesetId];
        }

        $cssRulesetClassName = self::CSS_RULESETS[$cssRulesetId];

        /** @var CssRuleset $cssRuleset */
        $cssRuleset = new $cssRulesetClassName();

        $this->cssRulesetsCache[$cssRulesetId] = $cssRuleset;

        return $cssRuleset;
    }

    /**
     * Get a collection of CSS rulesets for a given AMP HTML format name.
     *
     * @param string $format AMP HTML format to get the CSS rulesets for.
     * @return array<CssRuleset> Array of CSS rulesets matching the requested AMP HTML format.
     * @throws InvalidFormat If an invalid AMP HTML format is requested.
     */
    public function byFormat($format)
    {
        if (!array_key_exists($format, self::BY_FORMAT)) {
            throw InvalidFormat::forFormat($format);
        }

        $cssRulesetIds = self::BY_FORMAT[$format];
        if (!is_array($cssRulesetIds)) {
            $cssRulesetIds = [$cssRulesetIds];
        }

        $cssRulesets = [];
        foreach ($cssRulesetIds as $cssRulesetId) {
            $cssRulesets[] = $this->get($cssRulesetId);
        }

        return $cssRulesets;
    }

    /**
     * Get the list of available keys.
     *
     * @return array<string> Array of available keys.
     */
    public function getAvailableKeys()
    {
        return array_keys(self::CSS_RULESETS);
    }

    /**
     * Find the instantiated object for the current key.
     *
     * This should use its own caching mechanism as needed.
     *
     * Ideally, current() should be overridden as well to provide the correct object type-hint.
     *
     * @param string $key Key to retrieve the instantiated object for.
     * @return CssRuleset Instantiated object for the current key.
     */
    public function findByKey($key)
    {
        return $this->get($key);
    }

    /**
     * Return the current iterable object.
     *
     * @return CssRuleset CssRuleset object.
     */
    #[\ReturnTypeWillChange]
    public function current()
    {
        return $this->parentCurrent();
    }
}
PK.3Y��d��Xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Section/DeclarationLists.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Section;

use AmpProject\Exception\InvalidListName;
use AmpProject\Validator\Spec;
use AmpProject\Validator\Spec\DeclarationList;
use AmpProject\Validator\Spec\IterableSection;
use AmpProject\Validator\Spec\Iteration;

/**
 * The DeclarationLists section defines the sets of allowed declarations that can further qualify an object.
 *
 * @package ampproject/amp-toolbox
 *
 * @method DeclarationList parentCurrent()
 */
final class DeclarationLists implements IterableSection
{
    use Iteration {
        Iteration::current as parentCurrent;
    }

    /**
     * Mapping of declaration list ID to declaration list implementation.
     *
     * @var array<string>
     */
    const DECLARATION_LISTS = [
        DeclarationList\BasicDeclarations::ID => DeclarationList\BasicDeclarations::class,
        DeclarationList\SvgBasicDeclarations::ID => DeclarationList\SvgBasicDeclarations::class,
        DeclarationList\EmailSpecificDeclarations::ID => DeclarationList\EmailSpecificDeclarations::class,
    ];

    /**
     * Cache of instantiated declaration list objects.
     *
     * @var array<Spec\DeclarationList>
     */
    private $declarationLists = [];

    /**
     * Get a specific declaration list.
     *
     * @param string $declarationListName Name of the declaration list to get.
     * @return Spec\DeclarationList Declaration list with the given declaration list name.
     * @throws InvalidListName If an invalid declaration list name is requested.
     */
    public function get($declarationListName)
    {
        if (!array_key_exists($declarationListName, self::DECLARATION_LISTS)) {
            throw InvalidListName::forDeclarationList($declarationListName);
        }

        if (array_key_exists($declarationListName, $this->declarationLists)) {
            return $this->declarationLists[$declarationListName];
        }

        $declarationListClassName = self::DECLARATION_LISTS[$declarationListName];

        /** @var Spec\DeclarationList $declarationList */
        $declarationList = new $declarationListClassName();

        $this->declarationLists[$declarationListName] = $declarationList;

        return $declarationList;
    }

    /**
     * Get the list of available keys.
     *
     * @return array<string> Array of available keys.
     */
    public function getAvailableKeys()
    {
        return array_keys(self::DECLARATION_LISTS);
    }

    /**
     * Find the instantiated object for the current key.
     *
     * This should use its own caching mechanism as needed.
     *
     * Ideally, current() should be overridden as well to provide the correct object type-hint.
     *
     * @param string $key Key to retrieve the instantiated object for.
     * @return object Instantiated object for the current key.
     */
    public function findByKey($key)
    {
        return $this->get($key);
    }

    /**
     * Return the current iterable object.
     *
     * @return DeclarationList Declaration list object.
     */
    #[\ReturnTypeWillChange]
    public function current()
    {
        return $this->parentCurrent();
    }
}
PK.3Y��7^��Zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Section/DescendantTagLists.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Section;

use AmpProject\Exception\InvalidListName;
use AmpProject\Validator\Spec;
use AmpProject\Validator\Spec\DescendantTagList;
use AmpProject\Validator\Spec\IterableSection;
use AmpProject\Validator\Spec\Iteration;

/**
 * The DescendantTagLists section provides lists that define the set of allowed descendant tags.
 *
 * @package ampproject/amp-toolbox
 *
 * @method DescendantTagList parentCurrent()
 */
final class DescendantTagLists implements IterableSection
{
    use Iteration {
        Iteration::current as parentCurrent;
    }

    /**
     * Mapping of descendant tag list ID to descendant tag list implementation.
     *
     * @var array<string>
     */
    const DESCENDANT_TAG_LISTS = [
        DescendantTagList\AmpMegaMenuAllowedDescendants::ID => DescendantTagList\AmpMegaMenuAllowedDescendants::class,
        DescendantTagList\AmpNestedMenuAllowedDescendants::ID => DescendantTagList\AmpNestedMenuAllowedDescendants::class,
        DescendantTagList\AmpStoryPlayerAllowedDescendants::ID => DescendantTagList\AmpStoryPlayerAllowedDescendants::class,
        DescendantTagList\AmpStoryBookendAllowedDescendants::ID => DescendantTagList\AmpStoryBookendAllowedDescendants::class,
        DescendantTagList\AmpStorySocialShareAllowedDescendants::ID => DescendantTagList\AmpStorySocialShareAllowedDescendants::class,
        DescendantTagList\AmpStoryCtaLayerAllowedDescendants::ID => DescendantTagList\AmpStoryCtaLayerAllowedDescendants::class,
        DescendantTagList\AmpStoryGridLayerAllowedDescendants::ID => DescendantTagList\AmpStoryGridLayerAllowedDescendants::class,
        DescendantTagList\AmpStoryPageAttachmentAllowedDescendants::ID => DescendantTagList\AmpStoryPageAttachmentAllowedDescendants::class,
    ];

    /**
     * Cache of instantiated descendant tag list objects.
     *
     * @var array<Spec\DescendantTagList>
     */
    private $descendantTagLists = [];

    /**
     * Get a specific descendantTag list.
     *
     * @param string $descendantTagListName Name of the descendant tag list to get.
     * @return Spec\DescendantTagList Descendant tag list with the given descendant tag list name.
     * @throws InvalidListName If an invalid descendant tag list name is requested.
     */
    public function get($descendantTagListName)
    {
        if (!array_key_exists($descendantTagListName, self::DESCENDANT_TAG_LISTS)) {
            throw InvalidListName::forDescendantTagList($descendantTagListName);
        }

        if (array_key_exists($descendantTagListName, $this->descendantTagLists)) {
            return $this->descendantTagLists[$descendantTagListName];
        }

        $descendantTagListClassName = self::DESCENDANT_TAG_LISTS[$descendantTagListName];

        /** @var Spec\DescendantTagList $descendantTagList */
        $descendantTagList = new $descendantTagListClassName();

        $this->descendantTagLists[$descendantTagListName] = $descendantTagList;

        return $descendantTagList;
    }

    /**
     * Get the list of available keys.
     *
     * @return array<string> Array of available keys.
     */
    public function getAvailableKeys()
    {
        return array_keys(self::DESCENDANT_TAG_LISTS);
    }

    /**
     * Find the instantiated object for the current key.
     *
     * This should use its own caching mechanism as needed.
     *
     * Ideally, current() should be overridden as well to provide the correct object type-hint.
     *
     * @param string $key Key to retrieve the instantiated object for.
     * @return object Instantiated object for the current key.
     */
    public function findByKey($key)
    {
        return $this->get($key);
    }

    /**
     * Return the current iterable object.
     *
     * @return DescendantTagList Descendant tag list object.
     */
    #[\ReturnTypeWillChange]
    public function current()
    {
        return $this->parentCurrent();
    }
}
PK.3Y��e���Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Section/DocRulesets.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Section;

use AmpProject\Exception\InvalidDocRulesetName;
use AmpProject\Exception\InvalidFormat;
use AmpProject\Format;
use AmpProject\Validator\Spec\DocRuleset;
use AmpProject\Validator\Spec\IterableSection;
use AmpProject\Validator\Spec\Iteration;

/**
 * The DocRulesets section defines the validation rules that apply to an entire document.
 *
 * @package ampproject/amp-toolbox
 *
 * @method DocRuleset parentCurrent()
 */
final class DocRulesets implements IterableSection
{
    use Iteration {
        Iteration::current as parentCurrent;
    }

    /**
     * Mapping of document ruleset ID to document ruleset implementation.
     *
     * @var array<string>
     */
    const DOC_RULESETS = [
        DocRuleset\Amp4email::ID => DocRuleset\Amp4email::class,
    ];

    /**
     * Mapping of AMP format to array of document ruleset IDs.
     *
     * This is used to optimize querying by AMP format.
     *
     * @var array<array<string>>
     */
    const BY_FORMAT = [
        Format::AMP4EMAIL => [
            DocRuleset\Amp4email::ID,
        ],
    ];

    /**
     * Cache of instantiated DocRuleset objects.
     *
     * @var array<DocRuleset>
     */
    private $docRulesetsCache = [];

    /**
     * Get a document ruleset by its document ruleset ID.
     *
     * @param string $docRulesetId document ruleset ID to get the collection of document rulesets for.
     * @return DocRuleset Requested document ruleset.
     * @throws InvalidDocRulesetName If an invalid document ruleset name is requested.
     */
    public function get($docRulesetId)
    {
        if (!array_key_exists($docRulesetId, self::DOC_RULESETS)) {
            throw InvalidDocRulesetName::forDocRulesetName($docRulesetId);
        }

        if (array_key_exists($docRulesetId, $this->docRulesetsCache)) {
            return $this->docRulesetsCache[$docRulesetId];
        }

        $docRulesetClassName = self::DOC_RULESETS[$docRulesetId];

        /** @var DocRuleset $docRuleset */
        $docRuleset = new $docRulesetClassName();

        $this->docRulesetsCache[$docRulesetId] = $docRuleset;

        return $docRuleset;
    }

    /**
     * Get a collection of document rulesets for a given AMP HTML format name.
     *
     * @param string $format AMP HTML format to get the document rulesets for.
     * @return array<DocRuleset> Array of document rulesets matching the requested AMP HTML format.
     * @throws InvalidFormat If an invalid AMP HTML format is requested.
     */
    public function byFormat($format)
    {
        if (!array_key_exists($format, self::BY_FORMAT)) {
            throw InvalidFormat::forFormat($format);
        }

        $docRulesetIds = self::BY_FORMAT[$format];
        if (!is_array($docRulesetIds)) {
            $docRulesetIds = [$docRulesetIds];
        }

        $docRulesets = [];
        foreach ($docRulesetIds as $docRulesetId) {
            $docRulesets[] = $this->get($docRulesetId);
        }

        return $docRulesets;
    }

    /**
     * Get the list of available keys.
     *
     * @return array<string> Array of available keys.
     */
    public function getAvailableKeys()
    {
        return array_keys(self::DOC_RULESETS);
    }

    /**
     * Find the instantiated object for the current key.
     *
     * This should use its own caching mechanism as needed.
     *
     * Ideally, current() should be overridden as well to provide the correct object type-hint.
     *
     * @param string $key Key to retrieve the instantiated object for.
     * @return DocRuleset Instantiated object for the current key.
     */
    public function findByKey($key)
    {
        return $this->get($key);
    }

    /**
     * Return the current iterable object.
     *
     * @return DocRuleset DocRuleset object.
     */
    #[\ReturnTypeWillChange]
    public function current()
    {
        return $this->parentCurrent();
    }
}
PK.3Y&:l[�2�2Nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Section/Errors.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Section;

use AmpProject\Exception\InvalidErrorCode;
use AmpProject\Exception\InvalidListName;
use AmpProject\Validator\Spec;
use AmpProject\Validator\Spec\Error;
use AmpProject\Validator\Spec\IterableSection;
use AmpProject\Validator\Spec\Iteration;

/**
 * The Errors section gives access to all the known validation errors.
 *
 * @package ampproject/amp-toolbox
 *
 * @method Error parentCurrent()
 */
final class Errors implements IterableSection
{
    use Iteration {
        Iteration::current as parentCurrent;
    }

    /**
     * Mapping of error code to error implementation.
     *
     * @var array<string>
     */
    const ERRORS = [
        Error\UnknownCode::CODE => Error\UnknownCode::class,
        Error\InvalidDoctypeHtml::CODE => Error\InvalidDoctypeHtml::class,
        Error\MandatoryTagMissing::CODE => Error\MandatoryTagMissing::class,
        Error\TagRequiredByMissing::CODE => Error\TagRequiredByMissing::class,
        Error\WarningTagRequiredByMissing::CODE => Error\WarningTagRequiredByMissing::class,
        Error\TagExcludedByTag::CODE => Error\TagExcludedByTag::class,
        Error\WarningExtensionUnused::CODE => Error\WarningExtensionUnused::class,
        Error\ExtensionUnused::CODE => Error\ExtensionUnused::class,
        Error\WarningExtensionDeprecatedVersion::CODE => Error\WarningExtensionDeprecatedVersion::class,
        Error\InvalidExtensionVersion::CODE => Error\InvalidExtensionVersion::class,
        Error\InvalidExtensionPath::CODE => Error\InvalidExtensionPath::class,
        Error\IncorrectScriptReleaseVersion::CODE => Error\IncorrectScriptReleaseVersion::class,
        Error\DisallowedAmpDomain::CODE => Error\DisallowedAmpDomain::class,
        Error\NonLtsScriptAfterLts::CODE => Error\NonLtsScriptAfterLts::class,
        Error\LtsScriptAfterNonLts::CODE => Error\LtsScriptAfterNonLts::class,
        Error\AttrRequiredButMissing::CODE => Error\AttrRequiredButMissing::class,
        Error\DisallowedTag::CODE => Error\DisallowedTag::class,
        Error\GeneralDisallowedTag::CODE => Error\GeneralDisallowedTag::class,
        Error\DisallowedScriptTag::CODE => Error\DisallowedScriptTag::class,
        Error\DisallowedAttr::CODE => Error\DisallowedAttr::class,
        Error\DisallowedStyleAttr::CODE => Error\DisallowedStyleAttr::class,
        Error\InvalidAttrValue::CODE => Error\InvalidAttrValue::class,
        Error\DuplicateAttribute::CODE => Error\DuplicateAttribute::class,
        Error\AttrValueRequiredByLayout::CODE => Error\AttrValueRequiredByLayout::class,
        Error\MissingLayoutAttributes::CODE => Error\MissingLayoutAttributes::class,
        Error\ImpliedLayoutInvalid::CODE => Error\ImpliedLayoutInvalid::class,
        Error\SpecifiedLayoutInvalid::CODE => Error\SpecifiedLayoutInvalid::class,
        Error\MandatoryAttrMissing::CODE => Error\MandatoryAttrMissing::class,
        Error\InconsistentUnitsForWidthAndHeight::CODE => Error\InconsistentUnitsForWidthAndHeight::class,
        Error\StylesheetTooLong::CODE => Error\StylesheetTooLong::class,
        Error\StylesheetAndInlineStyleTooLong::CODE => Error\StylesheetAndInlineStyleTooLong::class,
        Error\InlineStyleTooLong::CODE => Error\InlineStyleTooLong::class,
        Error\InlineScriptTooLong::CODE => Error\InlineScriptTooLong::class,
        Error\MandatoryCdataMissingOrIncorrect::CODE => Error\MandatoryCdataMissingOrIncorrect::class,
        Error\CdataViolatesDenylist::CODE => Error\CdataViolatesDenylist::class,
        Error\NonWhitespaceCdataEncountered::CODE => Error\NonWhitespaceCdataEncountered::class,
        Error\InvalidJsonCdata::CODE => Error\InvalidJsonCdata::class,
        Error\DisallowedPropertyInAttrValue::CODE => Error\DisallowedPropertyInAttrValue::class,
        Error\InvalidPropertyValueInAttrValue::CODE => Error\InvalidPropertyValueInAttrValue::class,
        Error\DuplicateDimension::CODE => Error\DuplicateDimension::class,
        Error\MissingUrl::CODE => Error\MissingUrl::class,
        Error\InvalidUrl::CODE => Error\InvalidUrl::class,
        Error\InvalidUrlProtocol::CODE => Error\InvalidUrlProtocol::class,
        Error\DisallowedDomain::CODE => Error\DisallowedDomain::class,
        Error\DisallowedRelativeUrl::CODE => Error\DisallowedRelativeUrl::class,
        Error\MandatoryPropertyMissingFromAttrValue::CODE => Error\MandatoryPropertyMissingFromAttrValue::class,
        Error\UnescapedTemplateInAttrValue::CODE => Error\UnescapedTemplateInAttrValue::class,
        Error\TemplatePartialInAttrValue::CODE => Error\TemplatePartialInAttrValue::class,
        Error\DeprecatedTag::CODE => Error\DeprecatedTag::class,
        Error\DeprecatedAttr::CODE => Error\DeprecatedAttr::class,
        Error\MutuallyExclusiveAttrs::CODE => Error\MutuallyExclusiveAttrs::class,
        Error\MandatoryOneofAttrMissing::CODE => Error\MandatoryOneofAttrMissing::class,
        Error\MandatoryAnyofAttrMissing::CODE => Error\MandatoryAnyofAttrMissing::class,
        Error\WrongParentTag::CODE => Error\WrongParentTag::class,
        Error\DisallowedTagAncestor::CODE => Error\DisallowedTagAncestor::class,
        Error\MandatoryTagAncestor::CODE => Error\MandatoryTagAncestor::class,
        Error\MandatoryTagAncestorWithHint::CODE => Error\MandatoryTagAncestorWithHint::class,
        Error\DuplicateUniqueTag::CODE => Error\DuplicateUniqueTag::class,
        Error\DuplicateUniqueTagWarning::CODE => Error\DuplicateUniqueTagWarning::class,
        Error\TemplateInAttrName::CODE => Error\TemplateInAttrName::class,
        Error\AttrDisallowedByImpliedLayout::CODE => Error\AttrDisallowedByImpliedLayout::class,
        Error\AttrDisallowedBySpecifiedLayout::CODE => Error\AttrDisallowedBySpecifiedLayout::class,
        Error\IncorrectNumChildTags::CODE => Error\IncorrectNumChildTags::class,
        Error\IncorrectMinNumChildTags::CODE => Error\IncorrectMinNumChildTags::class,
        Error\TagNotAllowedToHaveSiblings::CODE => Error\TagNotAllowedToHaveSiblings::class,
        Error\MandatoryLastChildTag::CODE => Error\MandatoryLastChildTag::class,
        Error\DisallowedChildTagName::CODE => Error\DisallowedChildTagName::class,
        Error\DisallowedFirstChildTagName::CODE => Error\DisallowedFirstChildTagName::class,
        Error\DisallowedManufacturedBody::CODE => Error\DisallowedManufacturedBody::class,
        Error\ChildTagDoesNotSatisfyReferencePoint::CODE => Error\ChildTagDoesNotSatisfyReferencePoint::class,
        Error\ChildTagDoesNotSatisfyReferencePointSingular::CODE => Error\ChildTagDoesNotSatisfyReferencePointSingular::class,
        Error\MandatoryReferencePointMissing::CODE => Error\MandatoryReferencePointMissing::class,
        Error\DuplicateReferencePoint::CODE => Error\DuplicateReferencePoint::class,
        Error\TagReferencePointConflict::CODE => Error\TagReferencePointConflict::class,
        Error\BaseTagMustPreceedAllUrls::CODE => Error\BaseTagMustPreceedAllUrls::class,
        Error\MissingRequiredExtension::CODE => Error\MissingRequiredExtension::class,
        Error\AttrMissingRequiredExtension::CODE => Error\AttrMissingRequiredExtension::class,
        Error\DocumentTooComplex::CODE => Error\DocumentTooComplex::class,
        Error\InvalidUtf8::CODE => Error\InvalidUtf8::class,
        Error\CssSyntaxInvalidAtRule::CODE => Error\CssSyntaxInvalidAtRule::class,
        Error\CssSyntaxStrayTrailingBackslash::CODE => Error\CssSyntaxStrayTrailingBackslash::class,
        Error\CssSyntaxUnterminatedComment::CODE => Error\CssSyntaxUnterminatedComment::class,
        Error\CssSyntaxUnterminatedString::CODE => Error\CssSyntaxUnterminatedString::class,
        Error\CssSyntaxBadUrl::CODE => Error\CssSyntaxBadUrl::class,
        Error\CssSyntaxEofInPreludeOfQualifiedRule::CODE => Error\CssSyntaxEofInPreludeOfQualifiedRule::class,
        Error\CssSyntaxInvalidProperty::CODE => Error\CssSyntaxInvalidProperty::class,
        Error\CssSyntaxInvalidPropertyNolist::CODE => Error\CssSyntaxInvalidPropertyNolist::class,
        Error\CssSyntaxQualifiedRuleHasNoDeclarations::CODE => Error\CssSyntaxQualifiedRuleHasNoDeclarations::class,
        Error\CssSyntaxDisallowedQualifiedRuleMustBeInsideKeyframe::CODE => Error\CssSyntaxDisallowedQualifiedRuleMustBeInsideKeyframe::class,
        Error\CssSyntaxDisallowedKeyframeInsideKeyframe::CODE => Error\CssSyntaxDisallowedKeyframeInsideKeyframe::class,
        Error\CssSyntaxInvalidDeclaration::CODE => Error\CssSyntaxInvalidDeclaration::class,
        Error\CssSyntaxIncompleteDeclaration::CODE => Error\CssSyntaxIncompleteDeclaration::class,
        Error\CssSyntaxErrorInPseudoSelector::CODE => Error\CssSyntaxErrorInPseudoSelector::class,
        Error\CssSyntaxMissingSelector::CODE => Error\CssSyntaxMissingSelector::class,
        Error\CssSyntaxNotASelectorStart::CODE => Error\CssSyntaxNotASelectorStart::class,
        Error\CssSyntaxUnparsedInputRemainsInSelector::CODE => Error\CssSyntaxUnparsedInputRemainsInSelector::class,
        Error\CssSyntaxMissingUrl::CODE => Error\CssSyntaxMissingUrl::class,
        Error\CssSyntaxInvalidUrl::CODE => Error\CssSyntaxInvalidUrl::class,
        Error\CssSyntaxInvalidUrlProtocol::CODE => Error\CssSyntaxInvalidUrlProtocol::class,
        Error\CssSyntaxDisallowedDomain::CODE => Error\CssSyntaxDisallowedDomain::class,
        Error\CssSyntaxDisallowedRelativeUrl::CODE => Error\CssSyntaxDisallowedRelativeUrl::class,
        Error\CssSyntaxInvalidAttrSelector::CODE => Error\CssSyntaxInvalidAttrSelector::class,
        Error\CssSyntaxDisallowedPropertyValue::CODE => Error\CssSyntaxDisallowedPropertyValue::class,
        Error\CssSyntaxDisallowedPropertyValueWithHint::CODE => Error\CssSyntaxDisallowedPropertyValueWithHint::class,
        Error\CssSyntaxDisallowedImportant::CODE => Error\CssSyntaxDisallowedImportant::class,
        Error\CssSyntaxPropertyDisallowedWithinAtRule::CODE => Error\CssSyntaxPropertyDisallowedWithinAtRule::class,
        Error\CssSyntaxPropertyDisallowedTogetherWith::CODE => Error\CssSyntaxPropertyDisallowedTogetherWith::class,
        Error\CssSyntaxPropertyRequiresQualification::CODE => Error\CssSyntaxPropertyRequiresQualification::class,
        Error\CssSyntaxMalformedMediaQuery::CODE => Error\CssSyntaxMalformedMediaQuery::class,
        Error\CssSyntaxDisallowedMediaType::CODE => Error\CssSyntaxDisallowedMediaType::class,
        Error\CssSyntaxDisallowedMediaFeature::CODE => Error\CssSyntaxDisallowedMediaFeature::class,
        Error\CssSyntaxDisallowedAttrSelector::CODE => Error\CssSyntaxDisallowedAttrSelector::class,
        Error\CssSyntaxDisallowedPseudoClass::CODE => Error\CssSyntaxDisallowedPseudoClass::class,
        Error\CssSyntaxDisallowedPseudoElement::CODE => Error\CssSyntaxDisallowedPseudoElement::class,
        Error\CssExcessivelyNested::CODE => Error\CssExcessivelyNested::class,
        Error\DocumentSizeLimitExceeded::CODE => Error\DocumentSizeLimitExceeded::class,
        Error\ValueSetMismatch::CODE => Error\ValueSetMismatch::class,
        Error\DevModeOnly::CODE => Error\DevModeOnly::class,
        Error\AmpEmailMissingStrictCssAttr::CODE => Error\AmpEmailMissingStrictCssAttr::class,
    ];

    /**
     * Cache of instantiated Error objects.
     *
     * @var array<Spec\Error>
     */
    private $errors = [];

    /**
     * Get a specific error.
     *
     * @param string $errorCode Code of the error to get.
     * @return Spec\Error Error with the given error code.
     * @throws InvalidErrorCode If an invalid error code is requested.
     */
    public function get($errorCode)
    {
        if (!array_key_exists($errorCode, self::ERRORS)) {
            throw InvalidErrorCode::forErrorCode($errorCode);
        }

        if (array_key_exists($errorCode, $this->errors)) {
            return $this->errors[$errorCode];
        }

        $errorClassName = self::ERRORS[$errorCode];

        /** @var Spec\Error $error */
        $error = new $errorClassName();

        $this->errors[$errorCode] = $error;

        return $error;
    }

    /**
     * Get the list of available keys.
     *
     * @return array<string> Array of available keys.
     */
    public function getAvailableKeys()
    {
        return array_keys(self::ERRORS);
    }

    /**
     * Find the instantiated object for the current key.
     *
     * This should use its own caching mechanism as needed.
     *
     * Ideally, current() should be overridden as well to provide the correct object type-hint.
     *
     * @param string $key Key to retrieve the instantiated object for.
     * @return object Instantiated object for the current key.
     */
    public function findByKey($key)
    {
        return $this->get($key);
    }

    /**
     * Return the current iterable object.
     *
     * @return Error Error object.
     */
    #[\ReturnTypeWillChange]
    public function current()
    {
        return $this->parentCurrent();
    }
}
PK.3Y�Lw�DtDtLbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Section/Tags.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Section;

use AmpProject\Exception\InvalidExtension;
use AmpProject\Exception\InvalidFormat;
use AmpProject\Exception\InvalidSpecName;
use AmpProject\Exception\InvalidTagId;
use AmpProject\Exception\InvalidTagName;
use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Internal;
use AmpProject\Validator\Spec\AggregateTag;
use AmpProject\Validator\Spec\AggregateTagWithExtensionSpec;
use AmpProject\Validator\Spec\IterableSection;
use AmpProject\Validator\Spec\Iteration;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;
use LogicException;

/**
 * The Tags section gives access to all of the validation rules are are specific to an HTML element.
 *
 * @package ampproject/amp-toolbox
 *
 * @method Tag parentCurrent()
 */
final class Tags implements IterableSection
{
    use Iteration {
        Iteration::current as parentCurrent;
    }

    /**
     * Mapping of tag ID to tag implementation.
     *
     * @var array<string>
     */
    const TAGS = [
        Tag\HtmlDoctype::ID => Tag\HtmlDoctype::class,
        Tag\HtmlDoctypeAmp4ads::ID => Tag\HtmlDoctypeAmp4ads::class,
        Tag\Html::ID => Tag\Html::class,
        Tag\HtmlTransformed::ID => Tag\HtmlTransformed::class,
        Tag\Head::ID => Tag\Head::class,
        Tag\Title::ID => Tag\Title::class,
        Tag\TitleAmp4email::ID => Tag\TitleAmp4email::class,
        Tag\Base::ID => Tag\Base::class,
        Tag\LinkRel::ID => Tag\LinkRel::class,
        Tag\LinkRelCanonical::ID => Tag\LinkRelCanonical::class,
        Tag\LinkRelManifest::ID => Tag\LinkRelManifest::class,
        Tag\LinkRelModulepreload::ID => Tag\LinkRelModulepreload::class,
        Tag\LinkRelPreload::ID => Tag\LinkRelPreload::class,
        Tag\LinkRelStylesheetForAmpStory10Css::ID => Tag\LinkRelStylesheetForAmpStory10Css::class,
        Tag\LinkRelStylesheetForFonts::ID => Tag\LinkRelStylesheetForFonts::class,
        Tag\LinkItempropSameas::ID => Tag\LinkItempropSameas::class,
        Tag\LinkItemprop::ID => Tag\LinkItemprop::class,
        Tag\LinkProperty::ID => Tag\LinkProperty::class,
        Tag\MetaCharsetUtf8::ID => Tag\MetaCharsetUtf8::class,
        Tag\MetaNameViewport::ID => Tag\MetaNameViewport::class,
        Tag\MetaHttpEquivXUaCompatible::ID => Tag\MetaHttpEquivXUaCompatible::class,
        Tag\MetaNameAppleItunesApp::ID => Tag\MetaNameAppleItunesApp::class,
        Tag\MetaNameAmpExperimentsOptIn::ID => Tag\MetaNameAmpExperimentsOptIn::class,
        Tag\MetaNameAmp3pIframeSrc::ID => Tag\MetaNameAmp3pIframeSrc::class,
        Tag\MetaNameAmpConsentBlocking::ID => Tag\MetaNameAmpConsentBlocking::class,
        Tag\MetaNameAmpExperimentToken::ID => Tag\MetaNameAmpExperimentToken::class,
        Tag\MetaNameAmpLinkVariableAllowedOrigin::ID => Tag\MetaNameAmpLinkVariableAllowedOrigin::class,
        Tag\MetaNameAmpGoogleClientidIdApi::ID => Tag\MetaNameAmpGoogleClientidIdApi::class,
        Tag\MetaNameAmpAdDoubleclickSra::ID => Tag\MetaNameAmpAdDoubleclickSra::class,
        Tag\MetaNameAmpListLoadMore::ID => Tag\MetaNameAmpListLoadMore::class,
        Tag\MetaNameAmpRecaptchaInput::ID => Tag\MetaNameAmpRecaptchaInput::class,
        Tag\MetaNameAmpScriptSrc::ID => Tag\MetaNameAmpScriptSrc::class,
        Tag\MetaNameAmp4adsId::ID => Tag\MetaNameAmp4adsId::class,
        Tag\MetaNameAndContent::ID => Tag\MetaNameAndContent::class,
        Tag\MetaHttpEquivContentType::ID => Tag\MetaHttpEquivContentType::class,
        Tag\MetaHttpEquivContentLanguage::ID => Tag\MetaHttpEquivContentLanguage::class,
        Tag\MetaHttpEquivPicsLabel::ID => Tag\MetaHttpEquivPicsLabel::class,
        Tag\MetaHttpEquivImagetoolbar::ID => Tag\MetaHttpEquivImagetoolbar::class,
        Tag\MetaHttpEquivContentStyleType::ID => Tag\MetaHttpEquivContentStyleType::class,
        Tag\MetaHttpEquivContentScriptType::ID => Tag\MetaHttpEquivContentScriptType::class,
        Tag\MetaHttpEquivOriginTrial::ID => Tag\MetaHttpEquivOriginTrial::class,
        Tag\MetaHttpEquivResourceType::ID => Tag\MetaHttpEquivResourceType::class,
        Tag\MetaHttpEquivXDnsPrefetchControl::ID => Tag\MetaHttpEquivXDnsPrefetchControl::class,
        Tag\MetaNameAmpAdEnableRefresh::ID => Tag\MetaNameAmpAdEnableRefresh::class,
        Tag\MetaNameAmpToAmpNavigation::ID => Tag\MetaNameAmpToAmpNavigation::class,
        Tag\MetaNameAmpCtaType::ID => Tag\MetaNameAmpCtaType::class,
        Tag\MetaNameAmpCtaUrl::ID => Tag\MetaNameAmpCtaUrl::class,
        Tag\MetaNameAmpCtaLandingPageType::ID => Tag\MetaNameAmpCtaLandingPageType::class,
        Tag\MetaNameAmp4adsVars::ID => Tag\MetaNameAmp4adsVars::class,
        Tag\Body::ID => Tag\Body::class,
        Tag\Article::ID => Tag\Article::class,
        Tag\Section::ID => Tag\Section::class,
        Tag\SectionAmp4email::ID => Tag\SectionAmp4email::class,
        Tag\Nav::ID => Tag\Nav::class,
        Tag\Aside::ID => Tag\Aside::class,
        Tag\H1::ID => Tag\H1::class,
        Tag\H2::ID => Tag\H2::class,
        Tag\H3::ID => Tag\H3::class,
        Tag\H4::ID => Tag\H4::class,
        Tag\H5::ID => Tag\H5::class,
        Tag\H6::ID => Tag\H6::class,
        Tag\Header::ID => Tag\Header::class,
        Tag\Footer::ID => Tag\Footer::class,
        Tag\Address::ID => Tag\Address::class,
        Tag\P::ID => Tag\P::class,
        Tag\Hr::ID => Tag\Hr::class,
        Tag\Pre::ID => Tag\Pre::class,
        Tag\Blockquote::ID => Tag\Blockquote::class,
        Tag\Ol::ID => Tag\Ol::class,
        Tag\Ul::ID => Tag\Ul::class,
        Tag\Li::ID => Tag\Li::class,
        Tag\Dl::ID => Tag\Dl::class,
        Tag\Dt::ID => Tag\Dt::class,
        Tag\Dd::ID => Tag\Dd::class,
        Tag\Figure::ID => Tag\Figure::class,
        Tag\Figcaption::ID => Tag\Figcaption::class,
        Tag\Div::ID => Tag\Div::class,
        Tag\Main::ID => Tag\Main::class,
        Tag\A::ID => Tag\A::class,
        Tag\AAmp4email::ID => Tag\AAmp4email::class,
        Tag\Em::ID => Tag\Em::class,
        Tag\Strong::ID => Tag\Strong::class,
        Tag\Small::ID => Tag\Small::class,
        Tag\S::ID => Tag\S::class,
        Tag\Cite::ID => Tag\Cite::class,
        Tag\Q::ID => Tag\Q::class,
        Tag\Dfn::ID => Tag\Dfn::class,
        Tag\Abbr::ID => Tag\Abbr::class,
        Tag\Data::ID => Tag\Data::class,
        Tag\Time::ID => Tag\Time::class,
        Tag\Code::ID => Tag\Code::class,
        Tag\Var_::ID => Tag\Var_::class,
        Tag\Samp::ID => Tag\Samp::class,
        Tag\Kbd::ID => Tag\Kbd::class,
        Tag\Sub::ID => Tag\Sub::class,
        Tag\Sup::ID => Tag\Sup::class,
        Tag\I::ID => Tag\I::class,
        Tag\B::ID => Tag\B::class,
        Tag\U::ID => Tag\U::class,
        Tag\Mark::ID => Tag\Mark::class,
        Tag\Ruby::ID => Tag\Ruby::class,
        Tag\Rb::ID => Tag\Rb::class,
        Tag\Rt::ID => Tag\Rt::class,
        Tag\Rtc::ID => Tag\Rtc::class,
        Tag\Rp::ID => Tag\Rp::class,
        Tag\Bdi::ID => Tag\Bdi::class,
        Tag\Bdo::ID => Tag\Bdo::class,
        Tag\Span::ID => Tag\Span::class,
        Tag\Br::ID => Tag\Br::class,
        Tag\Wbr::ID => Tag\Wbr::class,
        Tag\Ins::ID => Tag\Ins::class,
        Tag\Del::ID => Tag\Del::class,
        Tag\StandardImg::ID => Tag\StandardImg::class,
        Tag\HeroImg::ID => Tag\HeroImg::class,
        Tag\ImgUsingSrcset::ID => Tag\ImgUsingSrcset::class,
        Tag\StandardImage::ID => Tag\StandardImage::class,
        Tag\HeroImage::ID => Tag\HeroImage::class,
        Tag\ImageUsingSrcset::ID => Tag\ImageUsingSrcset::class,
        Tag\NoscriptImg::ID => Tag\NoscriptImg::class,
        Tag\Iframe::ID => Tag\Iframe::class,
        Tag\Video::ID => Tag\Video::class,
        Tag\Audio::ID => Tag\Audio::class,
        Tag\Picture::ID => Tag\Picture::class,
        Tag\PictureSource::ID => Tag\PictureSource::class,
        Tag\AmpVideoSource::ID => Tag\AmpVideoSource::class,
        Tag\AmpAudioSource::ID => Tag\AmpAudioSource::class,
        Tag\AudioSource::ID => Tag\AudioSource::class,
        Tag\VideoSource::ID => Tag\VideoSource::class,
        Tag\AmpImaVideoSource::ID => Tag\AmpImaVideoSource::class,
        Tag\AudioTrack::ID => Tag\AudioTrack::class,
        Tag\AudioTrackKindSubtitles::ID => Tag\AudioTrackKindSubtitles::class,
        Tag\VideoTrack::ID => Tag\VideoTrack::class,
        Tag\VideoTrackKindSubtitles::ID => Tag\VideoTrackKindSubtitles::class,
        Tag\AmpAudioTrack::ID => Tag\AmpAudioTrack::class,
        Tag\AmpAudioTrackKindSubtitles::ID => Tag\AmpAudioTrackKindSubtitles::class,
        Tag\AmpVideoTrack::ID => Tag\AmpVideoTrack::class,
        Tag\AmpVideoTrackKindSubtitles::ID => Tag\AmpVideoTrackKindSubtitles::class,
        Tag\AmpImaVideoTrack::ID => Tag\AmpImaVideoTrack::class,
        Tag\AmpImaVideoTrackKindSubtitles::ID => Tag\AmpImaVideoTrackKindSubtitles::class,
        Tag\Table::ID => Tag\Table::class,
        Tag\Caption::ID => Tag\Caption::class,
        Tag\Colgroup::ID => Tag\Colgroup::class,
        Tag\Col::ID => Tag\Col::class,
        Tag\Tbody::ID => Tag\Tbody::class,
        Tag\Thead::ID => Tag\Thead::class,
        Tag\Tfoot::ID => Tag\Tfoot::class,
        Tag\Tr::ID => Tag\Tr::class,
        Tag\Td::ID => Tag\Td::class,
        Tag\Th::ID => Tag\Th::class,
        Tag\FormMethodGet::ID => Tag\FormMethodGet::class,
        Tag\FormMethodPost::ID => Tag\FormMethodPost::class,
        Tag\FormMethodGetAmp4email::ID => Tag\FormMethodGetAmp4email::class,
        Tag\FormMethodPostAmp4email::ID => Tag\FormMethodPostAmp4email::class,
        Tag\FormDivVerifyError::ID => Tag\FormDivVerifyError::class,
        Tag\FormDivVerifyErrorTemplate::ID => Tag\FormDivVerifyErrorTemplate::class,
        Tag\FormDivSubmitting::ID => Tag\FormDivSubmitting::class,
        Tag\FormDivSubmittingTemplate::ID => Tag\FormDivSubmittingTemplate::class,
        Tag\FormDivSubmitSuccess::ID => Tag\FormDivSubmitSuccess::class,
        Tag\FormDivSubmitSuccessTemplate::ID => Tag\FormDivSubmitSuccessTemplate::class,
        Tag\FormDivSubmitError::ID => Tag\FormDivSubmitError::class,
        Tag\FormDivSubmitErrorTemplate::ID => Tag\FormDivSubmitErrorTemplate::class,
        Tag\Label::ID => Tag\Label::class,
        Tag\Input::ID => Tag\Input::class,
        Tag\InputTypeFile::ID => Tag\InputTypeFile::class,
        Tag\InputTypePassword::ID => Tag\InputTypePassword::class,
        Tag\InputTypeImage::ID => Tag\InputTypeImage::class,
        Tag\Button::ID => Tag\Button::class,
        Tag\AmpAppBannerButtonOpenButton::ID => Tag\AmpAppBannerButtonOpenButton::class,
        Tag\Select::ID => Tag\Select::class,
        Tag\Datalist::ID => Tag\Datalist::class,
        Tag\Optgroup::ID => Tag\Optgroup::class,
        Tag\Option::ID => Tag\Option::class,
        Tag\Textarea::ID => Tag\Textarea::class,
        Tag\Output::ID => Tag\Output::class,
        Tag\Progress::ID => Tag\Progress::class,
        Tag\Meter::ID => Tag\Meter::class,
        Tag\Fieldset::ID => Tag\Fieldset::class,
        Tag\Legend::ID => Tag\Legend::class,
        Tag\Details::ID => Tag\Details::class,
        Tag\Summary::ID => Tag\Summary::class,
        Tag\AmphtmlEngineScript::ID => Tag\AmphtmlEngineScript::class,
        Tag\AmphtmlEngineScriptTransformed::ID => Tag\AmphtmlEngineScriptTransformed::class,
        Tag\AmphtmlEngineScriptLts::ID => Tag\AmphtmlEngineScriptLts::class,
        Tag\AmphtmlEngineScriptLtsTransformed::ID => Tag\AmphtmlEngineScriptLtsTransformed::class,
        Tag\AmphtmlModuleEngineScript::ID => Tag\AmphtmlModuleEngineScript::class,
        Tag\AmphtmlNomoduleEngineScript::ID => Tag\AmphtmlNomoduleEngineScript::class,
        Tag\AmphtmlModuleLtsEngineScript::ID => Tag\AmphtmlModuleLtsEngineScript::class,
        Tag\AmphtmlNomoduleLtsEngineScript::ID => Tag\AmphtmlNomoduleLtsEngineScript::class,
        Tag\AmphtmlEngineScriptAmp4email::ID => Tag\AmphtmlEngineScriptAmp4email::class,
        Tag\Amp4adsEngineScript::ID => Tag\Amp4adsEngineScript::class,
        Tag\ScriptTypeApplicationLdJson::ID => Tag\ScriptTypeApplicationLdJson::class,
        Tag\ScriptIdAmpRtc::ID => Tag\ScriptIdAmpRtc::class,
        Tag\AmpImaVideoScriptTypeApplicationJson::ID => Tag\AmpImaVideoScriptTypeApplicationJson::class,
        Tag\ScriptAmpOnerrorV0JsOrV0Mjs::ID => Tag\ScriptAmpOnerrorV0JsOrV0Mjs::class,
        Tag\ScriptAmpStoryDvhPolyfill::ID => Tag\ScriptAmpStoryDvhPolyfill::class,
        Tag\ScriptAmpOnerrorV0Js::ID => Tag\ScriptAmpOnerrorV0Js::class,
        Tag\NoscriptEnclosureForAmpStyleTags::ID => Tag\NoscriptEnclosureForAmpStyleTags::class,
        Tag\Noscript::ID => Tag\Noscript::class,
        Tag\Acronym::ID => Tag\Acronym::class,
        Tag\Big::ID => Tag\Big::class,
        Tag\Center::ID => Tag\Center::class,
        Tag\Dir::ID => Tag\Dir::class,
        Tag\Hgroup::ID => Tag\Hgroup::class,
        Tag\Listing::ID => Tag\Listing::class,
        Tag\Multicol::ID => Tag\Multicol::class,
        Tag\Nextid::ID => Tag\Nextid::class,
        Tag\Nobr::ID => Tag\Nobr::class,
        Tag\Spacer::ID => Tag\Spacer::class,
        Tag\Strike::ID => Tag\Strike::class,
        Tag\Tt::ID => Tag\Tt::class,
        Tag\Slot::ID => Tag\Slot::class,
        Tag\OP::ID => Tag\OP::class,
        Tag\AmpImg::ID => Tag\AmpImg::class,
        Tag\AmpImgTransformed::ID => Tag\AmpImgTransformed::class,
        Tag\AmpImgAmp4email::ID => Tag\AmpImgAmp4email::class,
        Tag\AmpLayout::ID => Tag\AmpLayout::class,
        Tag\AmpPixel::ID => Tag\AmpPixel::class,
        Tag\IAmphtmlSizerResponsive::ID => Tag\IAmphtmlSizerResponsive::class,
        Tag\IAmphtmlSizerIntrinsic::ID => Tag\IAmphtmlSizerIntrinsic::class,
        Tag\ImgIAmphtmlIntrinsicSizer::ID => Tag\ImgIAmphtmlIntrinsicSizer::class,
        Tag\AmpImgImgTransformed::ID => Tag\AmpImgImgTransformed::class,
        Tag\AmpImgImgPlaceholderTransformed::ID => Tag\AmpImgImgPlaceholderTransformed::class,
        Tag\StyleAmpCustomLengthCheck::ID => Tag\StyleAmpCustomLengthCheck::class,
        Tag\StyleAmpCustom::ID => Tag\StyleAmpCustom::class,
        Tag\StyleAmpCustomAmp4ads::ID => Tag\StyleAmpCustomAmp4ads::class,
        Tag\StyleAmpCustomAmp4email::ID => Tag\StyleAmpCustomAmp4email::class,
        Tag\StyleAmpCustomCssStrict::ID => Tag\StyleAmpCustomCssStrict::class,
        Tag\HeadStyleAmpBoilerplate::ID => Tag\HeadStyleAmpBoilerplate::class,
        Tag\HeadStyleAmp4adsBoilerplate::ID => Tag\HeadStyleAmp4adsBoilerplate::class,
        Tag\HeadStyleAmp4emailBoilerplate::ID => Tag\HeadStyleAmp4emailBoilerplate::class,
        Tag\NoscriptStyleAmpBoilerplate::ID => Tag\NoscriptStyleAmpBoilerplate::class,
        Tag\StyleAmpKeyframes::ID => Tag\StyleAmpKeyframes::class,
        Tag\StyleAmpRuntimeTransformed::ID => Tag\StyleAmpRuntimeTransformed::class,
        Tag\StyleAmpNoscript::ID => Tag\StyleAmpNoscript::class,
        Tag\G::ID => Tag\G::class,
        Tag\Glyph::ID => Tag\Glyph::class,
        Tag\Glyphref::ID => Tag\Glyphref::class,
        Tag\Image::ID => Tag\Image::class,
        Tag\Marker::ID => Tag\Marker::class,
        Tag\Metadata::ID => Tag\Metadata::class,
        Tag\Path::ID => Tag\Path::class,
        Tag\Solidcolor::ID => Tag\Solidcolor::class,
        Tag\Svg::ID => Tag\Svg::class,
        Tag\Switch_::ID => Tag\Switch_::class,
        Tag\View::ID => Tag\View::class,
        Tag\Circle::ID => Tag\Circle::class,
        Tag\Ellipse::ID => Tag\Ellipse::class,
        Tag\Line::ID => Tag\Line::class,
        Tag\Polygon::ID => Tag\Polygon::class,
        Tag\Polyline::ID => Tag\Polyline::class,
        Tag\Rect::ID => Tag\Rect::class,
        Tag\Text::ID => Tag\Text::class,
        Tag\Textpath::ID => Tag\Textpath::class,
        Tag\Tref::ID => Tag\Tref::class,
        Tag\Tspan::ID => Tag\Tspan::class,
        Tag\Clippath::ID => Tag\Clippath::class,
        Tag\Filter::ID => Tag\Filter::class,
        Tag\Hkern::ID => Tag\Hkern::class,
        Tag\Lineargradient::ID => Tag\Lineargradient::class,
        Tag\Mask::ID => Tag\Mask::class,
        Tag\Pattern::ID => Tag\Pattern::class,
        Tag\Radialgradient::ID => Tag\Radialgradient::class,
        Tag\LineargradientStop::ID => Tag\LineargradientStop::class,
        Tag\RadialgradientStop::ID => Tag\RadialgradientStop::class,
        Tag\Vkern::ID => Tag\Vkern::class,
        Tag\Defs::ID => Tag\Defs::class,
        Tag\Symbol::ID => Tag\Symbol::class,
        Tag\Use_::ID => Tag\Use_::class,
        Tag\Feblend::ID => Tag\Feblend::class,
        Tag\Fecolormatrix::ID => Tag\Fecolormatrix::class,
        Tag\Fecomponenttransfer::ID => Tag\Fecomponenttransfer::class,
        Tag\Fecomposite::ID => Tag\Fecomposite::class,
        Tag\Feconvolvematrix::ID => Tag\Feconvolvematrix::class,
        Tag\Fediffuselighting::ID => Tag\Fediffuselighting::class,
        Tag\Fedisplacementmap::ID => Tag\Fedisplacementmap::class,
        Tag\Fedistantlight::ID => Tag\Fedistantlight::class,
        Tag\Fedropshadow::ID => Tag\Fedropshadow::class,
        Tag\Feflood::ID => Tag\Feflood::class,
        Tag\Fefunca::ID => Tag\Fefunca::class,
        Tag\Fefuncb::ID => Tag\Fefuncb::class,
        Tag\Fefuncg::ID => Tag\Fefuncg::class,
        Tag\Fefuncr::ID => Tag\Fefuncr::class,
        Tag\Fegaussianblur::ID => Tag\Fegaussianblur::class,
        Tag\Femerge::ID => Tag\Femerge::class,
        Tag\Femergenode::ID => Tag\Femergenode::class,
        Tag\Femorphology::ID => Tag\Femorphology::class,
        Tag\Feoffset::ID => Tag\Feoffset::class,
        Tag\Fepointlight::ID => Tag\Fepointlight::class,
        Tag\Fespecularlighting::ID => Tag\Fespecularlighting::class,
        Tag\Fespotlight::ID => Tag\Fespotlight::class,
        Tag\Fetile::ID => Tag\Fetile::class,
        Tag\Feturbulence::ID => Tag\Feturbulence::class,
        Tag\Desc::ID => Tag\Desc::class,
        Tag\SvgTitle::ID => Tag\SvgTitle::class,
        Tag\ScriptAmp3dGltf::ID => Tag\ScriptAmp3dGltf::class,
        Tag\Amp3dGltf::ID => Tag\Amp3dGltf::class,
        Tag\ScriptAmp3qPlayer::ID => Tag\ScriptAmp3qPlayer::class,
        Tag\Amp3qPlayer::ID => Tag\Amp3qPlayer::class,
        Tag\ScriptAmpAccessFewcents::ID => Tag\ScriptAmpAccessFewcents::class,
        Tag\ScriptAmpAccessLaterpay::ID => Tag\ScriptAmpAccessLaterpay::class,
        Tag\ScriptAmpAccessPoool::ID => Tag\ScriptAmpAccessPoool::class,
        Tag\ScriptAmpAccessScroll::ID => Tag\ScriptAmpAccessScroll::class,
        Tag\ScriptAmpAccess::ID => Tag\ScriptAmpAccess::class,
        Tag\AmpAccessExtensionJsonScript::ID => Tag\AmpAccessExtensionJsonScript::class,
        Tag\ScriptAmpAccordion::ID => Tag\ScriptAmpAccordion::class,
        Tag\ScriptAmpAccordion2::ID => Tag\ScriptAmpAccordion2::class,
        Tag\ScriptCustomElementAmpAccordionAmp4email::ID => Tag\ScriptCustomElementAmpAccordionAmp4email::class,
        Tag\AmpAccordion::ID => Tag\AmpAccordion::class,
        Tag\AmpAccordionSection::ID => Tag\AmpAccordionSection::class,
        Tag\ScriptAmpActionMacro::ID => Tag\ScriptAmpActionMacro::class,
        Tag\AmpActionMacro::ID => Tag\AmpActionMacro::class,
        Tag\ScriptAmpAdCustom::ID => Tag\ScriptAmpAdCustom::class,
        Tag\AmpAdCustom::ID => Tag\AmpAdCustom::class,
        Tag\ScriptAmpAdExit::ID => Tag\ScriptAmpAdExit::class,
        Tag\AmpAdExit::ID => Tag\AmpAdExit::class,
        Tag\AmpAdExitConfigurationJson::ID => Tag\AmpAdExitConfigurationJson::class,
        Tag\AmpAdExtensionScript::ID => Tag\AmpAdExtensionScript::class,
        Tag\AmpAd::ID => Tag\AmpAd::class,
        Tag\AmpAdWithTypeCustom::ID => Tag\AmpAdWithTypeCustom::class,
        Tag\AmpAdWithDataMultiSizeAttribute::ID => Tag\AmpAdWithDataMultiSizeAttribute::class,
        Tag\AmpAdWithDataEnableRefreshAttribute::ID => Tag\AmpAdWithDataEnableRefreshAttribute::class,
        Tag\AmpEmbed::ID => Tag\AmpEmbed::class,
        Tag\AmpEmbedWithDataMultiSizeAttribute::ID => Tag\AmpEmbedWithDataMultiSizeAttribute::class,
        Tag\ScriptAmpAddthis::ID => Tag\ScriptAmpAddthis::class,
        Tag\AmpAddthis::ID => Tag\AmpAddthis::class,
        Tag\ScriptAmpAnalytics::ID => Tag\ScriptAmpAnalytics::class,
        Tag\AmpAnalyticsExtensionJsonScript::ID => Tag\AmpAnalyticsExtensionJsonScript::class,
        Tag\AmpAnalytics::ID => Tag\AmpAnalytics::class,
        Tag\ScriptAmpAnim::ID => Tag\ScriptAmpAnim::class,
        Tag\AmpAnimExtensionScriptAmp4email::ID => Tag\AmpAnimExtensionScriptAmp4email::class,
        Tag\AmpAnim::ID => Tag\AmpAnim::class,
        Tag\AmpAnimAmp4email::ID => Tag\AmpAnimAmp4email::class,
        Tag\ScriptAmpAnimation::ID => Tag\ScriptAmpAnimation::class,
        Tag\AmpAnimationExtensionJsonScript::ID => Tag\AmpAnimationExtensionJsonScript::class,
        Tag\AmpAnimation::ID => Tag\AmpAnimation::class,
        Tag\ScriptAmpApesterMedia::ID => Tag\ScriptAmpApesterMedia::class,
        Tag\AmpApesterMedia::ID => Tag\AmpApesterMedia::class,
        Tag\ScriptAmpAppBanner::ID => Tag\ScriptAmpAppBanner::class,
        Tag\AmpAppBanner::ID => Tag\AmpAppBanner::class,
        Tag\ScriptAmpAudio::ID => Tag\ScriptAmpAudio::class,
        Tag\AmpAudio::ID => Tag\AmpAudio::class,
        Tag\AmpStoryAmpAudio::ID => Tag\AmpStoryAmpAudio::class,
        Tag\AmpAudioA4a::ID => Tag\AmpAudioA4a::class,
        Tag\ScriptAmpAutoAds::ID => Tag\ScriptAmpAutoAds::class,
        Tag\AmpAutoAds::ID => Tag\AmpAutoAds::class,
        Tag\ScriptAmpAutocomplete::ID => Tag\ScriptAmpAutocomplete::class,
        Tag\ScriptCustomElementAmpAutocompleteAmp4email::ID => Tag\ScriptCustomElementAmpAutocompleteAmp4email::class,
        Tag\AmpAutocomplete::ID => Tag\AmpAutocomplete::class,
        Tag\AmpAutocompleteAmp4email::ID => Tag\AmpAutocompleteAmp4email::class,
        Tag\AmpAutocompleteInput::ID => Tag\AmpAutocompleteInput::class,
        Tag\AmpAutocompleteJson::ID => Tag\AmpAutocompleteJson::class,
        Tag\ScriptAmpBaseCarousel::ID => Tag\ScriptAmpBaseCarousel::class,
        Tag\AmpBaseCarousel::ID => Tag\AmpBaseCarousel::class,
        Tag\AmpBaseCarouselLightbox::ID => Tag\AmpBaseCarouselLightbox::class,
        Tag\AmpBaseCarouselLightboxLightboxExclude::ID => Tag\AmpBaseCarouselLightboxLightboxExclude::class,
        Tag\AmpBaseCarouselLightboxChild::ID => Tag\AmpBaseCarouselLightboxChild::class,
        Tag\ScriptAmpBeopinion::ID => Tag\ScriptAmpBeopinion::class,
        Tag\AmpBeopinion::ID => Tag\AmpBeopinion::class,
        Tag\ScriptAmpBind::ID => Tag\ScriptAmpBind::class,
        Tag\ScriptCustomElementAmpBindAmp4email::ID => Tag\ScriptCustomElementAmpBindAmp4email::class,
        Tag\AmpBindExtensionJsonScript::ID => Tag\AmpBindExtensionJsonScript::class,
        Tag\AmpState::ID => Tag\AmpState::class,
        Tag\AmpStateAmp4email::ID => Tag\AmpStateAmp4email::class,
        Tag\AmpBindMacro::ID => Tag\AmpBindMacro::class,
        Tag\ScriptAmpBodymovinAnimation::ID => Tag\ScriptAmpBodymovinAnimation::class,
        Tag\AmpBodymovinAnimation::ID => Tag\AmpBodymovinAnimation::class,
        Tag\ScriptAmpBridPlayer::ID => Tag\ScriptAmpBridPlayer::class,
        Tag\AmpBridPlayer::ID => Tag\AmpBridPlayer::class,
        Tag\ScriptAmpBrightcove::ID => Tag\ScriptAmpBrightcove::class,
        Tag\ScriptAmpBrightcove2::ID => Tag\ScriptAmpBrightcove2::class,
        Tag\AmpBrightcove::ID => Tag\AmpBrightcove::class,
        Tag\ScriptAmpBysideContent::ID => Tag\ScriptAmpBysideContent::class,
        Tag\AmpBysideContent::ID => Tag\AmpBysideContent::class,
        Tag\ScriptAmpCacheUrl::ID => Tag\ScriptAmpCacheUrl::class,
        Tag\ScriptAmpCallTracking::ID => Tag\ScriptAmpCallTracking::class,
        Tag\AmpCallTracking::ID => Tag\AmpCallTracking::class,
        Tag\ScriptAmpCarousel::ID => Tag\ScriptAmpCarousel::class,
        Tag\ScriptCustomElementAmpCarouselAmp4email::ID => Tag\ScriptCustomElementAmpCarouselAmp4email::class,
        Tag\AmpCarousel::ID => Tag\AmpCarousel::class,
        Tag\AmpCarouselLightbox::ID => Tag\AmpCarouselLightbox::class,
        Tag\AmpCarouselLightboxLightboxExclude::ID => Tag\AmpCarouselLightboxLightboxExclude::class,
        Tag\AmpCarouselLightboxChild::ID => Tag\AmpCarouselLightboxChild::class,
        Tag\ScriptAmpConnatixPlayer::ID => Tag\ScriptAmpConnatixPlayer::class,
        Tag\AmpConnatixPlayer::ID => Tag\AmpConnatixPlayer::class,
        Tag\ScriptAmpConsent::ID => Tag\ScriptAmpConsent::class,
        Tag\AmpConsentExtensionJsonScript::ID => Tag\AmpConsentExtensionJsonScript::class,
        Tag\AmpConsent::ID => Tag\AmpConsent::class,
        Tag\AmpConsentType::ID => Tag\AmpConsentType::class,
        Tag\ScriptAmpDailymotion::ID => Tag\ScriptAmpDailymotion::class,
        Tag\ScriptAmpDailymotion2::ID => Tag\ScriptAmpDailymotion2::class,
        Tag\AmpDailymotion::ID => Tag\AmpDailymotion::class,
        Tag\ScriptAmpDateCountdown::ID => Tag\ScriptAmpDateCountdown::class,
        Tag\AmpDateCountdown::ID => Tag\AmpDateCountdown::class,
        Tag\ScriptAmpDateDisplay::ID => Tag\ScriptAmpDateDisplay::class,
        Tag\AmpDateDisplay::ID => Tag\AmpDateDisplay::class,
        Tag\ScriptAmpDatePicker::ID => Tag\ScriptAmpDatePicker::class,
        Tag\AmpDatePickerTypeSingleModeStatic::ID => Tag\AmpDatePickerTypeSingleModeStatic::class,
        Tag\AmpDatePickerTypeSingleModeOverlay::ID => Tag\AmpDatePickerTypeSingleModeOverlay::class,
        Tag\AmpDatePickerTypeRangeModeStatic::ID => Tag\AmpDatePickerTypeRangeModeStatic::class,
        Tag\AmpDatePickerTypeRangeModeOverlay::ID => Tag\AmpDatePickerTypeRangeModeOverlay::class,
        Tag\AmpDatePickerTemplateDateTemplate::ID => Tag\AmpDatePickerTemplateDateTemplate::class,
        Tag\AmpDatePickerTemplateInfoTemplate::ID => Tag\AmpDatePickerTemplateInfoTemplate::class,
        Tag\ScriptAmpDelightPlayer::ID => Tag\ScriptAmpDelightPlayer::class,
        Tag\AmpDelightPlayer::ID => Tag\AmpDelightPlayer::class,
        Tag\ScriptAmpDynamicCssClasses::ID => Tag\ScriptAmpDynamicCssClasses::class,
        Tag\ScriptAmpEmbedlyCard::ID => Tag\ScriptAmpEmbedlyCard::class,
        Tag\AmpEmbedlyCard::ID => Tag\AmpEmbedlyCard::class,
        Tag\AmpEmbedlyKey::ID => Tag\AmpEmbedlyKey::class,
        Tag\ScriptAmpExperiment::ID => Tag\ScriptAmpExperiment::class,
        Tag\AmpExperimentExtensionJsonScript::ID => Tag\AmpExperimentExtensionJsonScript::class,
        Tag\AmpExperiment::ID => Tag\AmpExperiment::class,
        Tag\ScriptAmpFacebookComments::ID => Tag\ScriptAmpFacebookComments::class,
        Tag\AmpFacebookComments::ID => Tag\AmpFacebookComments::class,
        Tag\ScriptAmpFacebookLike::ID => Tag\ScriptAmpFacebookLike::class,
        Tag\AmpFacebookLike::ID => Tag\AmpFacebookLike::class,
        Tag\ScriptAmpFacebookPage::ID => Tag\ScriptAmpFacebookPage::class,
        Tag\AmpFacebookPage::ID => Tag\AmpFacebookPage::class,
        Tag\AmpFacebook10::ID => Tag\AmpFacebook10::class,
        Tag\ScriptAmpFacebook::ID => Tag\ScriptAmpFacebook::class,
        Tag\AmpFacebook::ID => Tag\AmpFacebook::class,
        Tag\AmpFacebookComments10::ID => Tag\AmpFacebookComments10::class,
        Tag\AmpFacebookLike10::ID => Tag\AmpFacebookLike10::class,
        Tag\AmpFacebookPage10::ID => Tag\AmpFacebookPage10::class,
        Tag\ScriptAmpFitText::ID => Tag\ScriptAmpFitText::class,
        Tag\ScriptAmpFitText2::ID => Tag\ScriptAmpFitText2::class,
        Tag\ScriptCustomElementAmpFitTextAmp4email::ID => Tag\ScriptCustomElementAmpFitTextAmp4email::class,
        Tag\AmpFitText::ID => Tag\AmpFitText::class,
        Tag\ScriptAmpFont::ID => Tag\ScriptAmpFont::class,
        Tag\AmpFont::ID => Tag\AmpFont::class,
        Tag\ScriptAmpForm::ID => Tag\ScriptAmpForm::class,
        Tag\ScriptCustomElementAmpFormAmp4email::ID => Tag\ScriptCustomElementAmpFormAmp4email::class,
        Tag\ScriptAmpFxCollection::ID => Tag\ScriptAmpFxCollection::class,
        Tag\ScriptAmpFxFlyingCarpet::ID => Tag\ScriptAmpFxFlyingCarpet::class,
        Tag\AmpFxFlyingCarpet::ID => Tag\AmpFxFlyingCarpet::class,
        Tag\ScriptAmpGeo::ID => Tag\ScriptAmpGeo::class,
        Tag\AmpGeo::ID => Tag\AmpGeo::class,
        Tag\AmpGeoExtensionJsonScript::ID => Tag\AmpGeoExtensionJsonScript::class,
        Tag\ScriptAmpGfycat::ID => Tag\ScriptAmpGfycat::class,
        Tag\AmpGfycat::ID => Tag\AmpGfycat::class,
        Tag\ScriptAmpGist::ID => Tag\ScriptAmpGist::class,
        Tag\AmpGist::ID => Tag\AmpGist::class,
        Tag\ScriptAmpGoogleDocumentEmbed::ID => Tag\ScriptAmpGoogleDocumentEmbed::class,
        Tag\AmpGoogleDocumentEmbed::ID => Tag\AmpGoogleDocumentEmbed::class,
        Tag\ScriptAmpGoogleReadAloudPlayer::ID => Tag\ScriptAmpGoogleReadAloudPlayer::class,
        Tag\AmpGoogleReadAloudPlayer::ID => Tag\AmpGoogleReadAloudPlayer::class,
        Tag\ScriptAmpGwdAnimation::ID => Tag\ScriptAmpGwdAnimation::class,
        Tag\AmpGwdAnimation::ID => Tag\AmpGwdAnimation::class,
        Tag\ScriptAmpHulu::ID => Tag\ScriptAmpHulu::class,
        Tag\AmpHulu::ID => Tag\AmpHulu::class,
        Tag\ScriptAmpIframe::ID => Tag\ScriptAmpIframe::class,
        Tag\ScriptAmpIframe2::ID => Tag\ScriptAmpIframe2::class,
        Tag\AmpIframe::ID => Tag\AmpIframe::class,
        Tag\ScriptAmpIframely::ID => Tag\ScriptAmpIframely::class,
        Tag\AmpIframely::ID => Tag\AmpIframely::class,
        Tag\ScriptAmpImaVideo::ID => Tag\ScriptAmpImaVideo::class,
        Tag\AmpImaVideo::ID => Tag\AmpImaVideo::class,
        Tag\ScriptAmpImageLightbox::ID => Tag\ScriptAmpImageLightbox::class,
        Tag\ScriptCustomElementAmpImageLightboxAmp4email::ID => Tag\ScriptCustomElementAmpImageLightboxAmp4email::class,
        Tag\AmpImageLightbox::ID => Tag\AmpImageLightbox::class,
        Tag\ScriptAmpImageSlider::ID => Tag\ScriptAmpImageSlider::class,
        Tag\AmpImageSlider::ID => Tag\AmpImageSlider::class,
        Tag\AmpImageSliderTransformed::ID => Tag\AmpImageSliderTransformed::class,
        Tag\AmpImageSliderDivFirst::ID => Tag\AmpImageSliderDivFirst::class,
        Tag\AmpImageSliderDivSecond::ID => Tag\AmpImageSliderDivSecond::class,
        Tag\ScriptAmpImgur::ID => Tag\ScriptAmpImgur::class,
        Tag\AmpImgur::ID => Tag\AmpImgur::class,
        Tag\ScriptAmpInlineGallery::ID => Tag\ScriptAmpInlineGallery::class,
        Tag\AmpInlineGallery::ID => Tag\AmpInlineGallery::class,
        Tag\AmpInlineGalleryPagination::ID => Tag\AmpInlineGalleryPagination::class,
        Tag\AmpInlineGalleryPaginationInset::ID => Tag\AmpInlineGalleryPaginationInset::class,
        Tag\AmpInlineGalleryThumbnails::ID => Tag\AmpInlineGalleryThumbnails::class,
        Tag\ScriptAmpInputmask::ID => Tag\ScriptAmpInputmask::class,
        Tag\InputMaskCustomMask::ID => Tag\InputMaskCustomMask::class,
        Tag\InputMaskPaymentCard::ID => Tag\InputMaskPaymentCard::class,
        Tag\InputMaskDateDdMmYyyy::ID => Tag\InputMaskDateDdMmYyyy::class,
        Tag\InputMaskDateMmDdYyyy::ID => Tag\InputMaskDateMmDdYyyy::class,
        Tag\InputMaskDateMmYy::ID => Tag\InputMaskDateMmYy::class,
        Tag\InputMaskDateYyyyMmDd::ID => Tag\InputMaskDateYyyyMmDd::class,
        Tag\ScriptAmpInstagram::ID => Tag\ScriptAmpInstagram::class,
        Tag\ScriptAmpInstagram2::ID => Tag\ScriptAmpInstagram2::class,
        Tag\AmpInstagram::ID => Tag\AmpInstagram::class,
        Tag\ScriptAmpInstallServiceworker::ID => Tag\ScriptAmpInstallServiceworker::class,
        Tag\AmpInstallServiceworker::ID => Tag\AmpInstallServiceworker::class,
        Tag\ScriptAmpIzlesene::ID => Tag\ScriptAmpIzlesene::class,
        Tag\AmpIzlesene::ID => Tag\AmpIzlesene::class,
        Tag\ScriptAmpJwplayer::ID => Tag\ScriptAmpJwplayer::class,
        Tag\AmpJwplayer::ID => Tag\AmpJwplayer::class,
        Tag\ScriptAmpKalturaPlayer::ID => Tag\ScriptAmpKalturaPlayer::class,
        Tag\AmpKalturaPlayer::ID => Tag\AmpKalturaPlayer::class,
        Tag\ScriptAmpLightboxGallery::ID => Tag\ScriptAmpLightboxGallery::class,
        Tag\ScriptAmpLightbox::ID => Tag\ScriptAmpLightbox::class,
        Tag\ScriptAmpLightbox2::ID => Tag\ScriptAmpLightbox2::class,
        Tag\ScriptCustomElementAmpLightboxAmp4ads::ID => Tag\ScriptCustomElementAmpLightboxAmp4ads::class,
        Tag\ScriptCustomElementAmpLightboxAmp4email::ID => Tag\ScriptCustomElementAmpLightboxAmp4email::class,
        Tag\AmpLightbox::ID => Tag\AmpLightbox::class,
        Tag\AmpLightboxAmp4ads::ID => Tag\AmpLightboxAmp4ads::class,
        Tag\ScriptAmpLinkRewriter::ID => Tag\ScriptAmpLinkRewriter::class,
        Tag\AmpLinkRewriterExtensionJsonScript::ID => Tag\AmpLinkRewriterExtensionJsonScript::class,
        Tag\AmpLinkRewriter::ID => Tag\AmpLinkRewriter::class,
        Tag\ScriptAmpList::ID => Tag\ScriptAmpList::class,
        Tag\ScriptCustomElementAmpListAmp4email::ID => Tag\ScriptCustomElementAmpListAmp4email::class,
        Tag\AmpList::ID => Tag\AmpList::class,
        Tag\AmpListDivFetchError::ID => Tag\AmpListDivFetchError::class,
        Tag\AmpListLoadMore::ID => Tag\AmpListLoadMore::class,
        Tag\AmpListLoadMoreButtonLoadMoreClickable::ID => Tag\AmpListLoadMoreButtonLoadMoreClickable::class,
        Tag\AmpListAmp4email::ID => Tag\AmpListAmp4email::class,
        Tag\ScriptAmpLiveList::ID => Tag\ScriptAmpLiveList::class,
        Tag\AmpLiveList::ID => Tag\AmpLiveList::class,
        Tag\AmpLiveListUpdate::ID => Tag\AmpLiveListUpdate::class,
        Tag\AmpLiveListItems::ID => Tag\AmpLiveListItems::class,
        Tag\AmpLiveListPagination::ID => Tag\AmpLiveListPagination::class,
        Tag\AmpLiveListItemsItem::ID => Tag\AmpLiveListItemsItem::class,
        Tag\ScriptAmpMathml::ID => Tag\ScriptAmpMathml::class,
        Tag\ScriptAmpMathml2::ID => Tag\ScriptAmpMathml2::class,
        Tag\AmpMathml::ID => Tag\AmpMathml::class,
        Tag\ScriptAmpMegaMenu::ID => Tag\ScriptAmpMegaMenu::class,
        Tag\AmpMegaMenu::ID => Tag\AmpMegaMenu::class,
        Tag\AmpMegaMenuNav::ID => Tag\AmpMegaMenuNav::class,
        Tag\AmpMegaMenuAmpList::ID => Tag\AmpMegaMenuAmpList::class,
        Tag\AmpMegaMenuAmpListTemplate::ID => Tag\AmpMegaMenuAmpListTemplate::class,
        Tag\AmpMegaMenuNavUlOl::ID => Tag\AmpMegaMenuNavUlOl::class,
        Tag\AmpMegaMenuNavUlOlLi::ID => Tag\AmpMegaMenuNavUlOlLi::class,
        Tag\AmpMegaMenuItemHeading::ID => Tag\AmpMegaMenuItemHeading::class,
        Tag\AmpMegaMenuItemContent::ID => Tag\AmpMegaMenuItemContent::class,
        Tag\ScriptAmpMegaphone::ID => Tag\ScriptAmpMegaphone::class,
        Tag\AmpMegaphoneDataPlaylist::ID => Tag\AmpMegaphoneDataPlaylist::class,
        Tag\AmpMegaphoneDataEpisode::ID => Tag\AmpMegaphoneDataEpisode::class,
        Tag\ScriptAmpMinuteMediaPlayer::ID => Tag\ScriptAmpMinuteMediaPlayer::class,
        Tag\AmpMinuteMediaPlayer::ID => Tag\AmpMinuteMediaPlayer::class,
        Tag\ScriptAmpMowplayer::ID => Tag\ScriptAmpMowplayer::class,
        Tag\AmpMowplayer::ID => Tag\AmpMowplayer::class,
        Tag\ScriptAmpMraid::ID => Tag\ScriptAmpMraid::class,
        Tag\ScriptAmpMustache::ID => Tag\ScriptAmpMustache::class,
        Tag\ScriptCustomTemplateAmpMustacheAmp4ads::ID => Tag\ScriptCustomTemplateAmpMustacheAmp4ads::class,
        Tag\ScriptCustomTemplateAmpMustacheAmp4email::ID => Tag\ScriptCustomTemplateAmpMustacheAmp4email::class,
        Tag\ScriptTypeTextPlain::ID => Tag\ScriptTypeTextPlain::class,
        Tag\ScriptTypeTextPlainAmp4email::ID => Tag\ScriptTypeTextPlainAmp4email::class,
        Tag\Template::ID => Tag\Template::class,
        Tag\TemplateAmp4email::ID => Tag\TemplateAmp4email::class,
        Tag\ScriptAmpNestedMenu::ID => Tag\ScriptAmpNestedMenu::class,
        Tag\AmpNestedMenu::ID => Tag\AmpNestedMenu::class,
        Tag\DivAmpNestedMenu::ID => Tag\DivAmpNestedMenu::class,
        Tag\ButtonAmpNestedMenu::ID => Tag\ButtonAmpNestedMenu::class,
        Tag\H2AmpNestedMenu::ID => Tag\H2AmpNestedMenu::class,
        Tag\H3AmpNestedMenu::ID => Tag\H3AmpNestedMenu::class,
        Tag\H4AmpNestedMenu::ID => Tag\H4AmpNestedMenu::class,
        Tag\H5AmpNestedMenu::ID => Tag\H5AmpNestedMenu::class,
        Tag\H6AmpNestedMenu::ID => Tag\H6AmpNestedMenu::class,
        Tag\SpanAmpNestedMenu::ID => Tag\SpanAmpNestedMenu::class,
        Tag\ScriptAmpNextPage::ID => Tag\ScriptAmpNextPage::class,
        Tag\AmpNextPageScriptTypeApplicationJson::ID => Tag\AmpNextPageScriptTypeApplicationJson::class,
        Tag\AmpNextPageSeparator::ID => Tag\AmpNextPageSeparator::class,
        Tag\AmpNextPageRecommendationBox::ID => Tag\AmpNextPageRecommendationBox::class,
        Tag\AmpNextPageFooter::ID => Tag\AmpNextPageFooter::class,
        Tag\AmpNextPageWithInlineConfig::ID => Tag\AmpNextPageWithInlineConfig::class,
        Tag\AmpNextPageWithSrcAttribute::ID => Tag\AmpNextPageWithSrcAttribute::class,
        Tag\AmpNextPageTypeAdsense::ID => Tag\AmpNextPageTypeAdsense::class,
        Tag\ScriptAmpNexxtvPlayer::ID => Tag\ScriptAmpNexxtvPlayer::class,
        Tag\AmpNexxtvPlayer::ID => Tag\AmpNexxtvPlayer::class,
        Tag\ScriptAmpO2Player::ID => Tag\ScriptAmpO2Player::class,
        Tag\AmpO2Player::ID => Tag\AmpO2Player::class,
        Tag\ScriptAmpOnetapGoogle::ID => Tag\ScriptAmpOnetapGoogle::class,
        Tag\AmpOnetapGoogle::ID => Tag\AmpOnetapGoogle::class,
        Tag\ScriptAmpOoyalaPlayer::ID => Tag\ScriptAmpOoyalaPlayer::class,
        Tag\AmpOoyalaPlayer::ID => Tag\AmpOoyalaPlayer::class,
        Tag\ScriptAmpOrientationObserver::ID => Tag\ScriptAmpOrientationObserver::class,
        Tag\AmpOrientationObserver::ID => Tag\AmpOrientationObserver::class,
        Tag\ScriptAmpPanZoom::ID => Tag\ScriptAmpPanZoom::class,
        Tag\AmpPanZoom::ID => Tag\AmpPanZoom::class,
        Tag\ScriptAmpPinterest::ID => Tag\ScriptAmpPinterest::class,
        Tag\AmpPinterest::ID => Tag\AmpPinterest::class,
        Tag\ScriptAmpPlaybuzz::ID => Tag\ScriptAmpPlaybuzz::class,
        Tag\AmpPlaybuzz::ID => Tag\AmpPlaybuzz::class,
        Tag\ScriptAmpPositionObserver::ID => Tag\ScriptAmpPositionObserver::class,
        Tag\AmpPositionObserver::ID => Tag\AmpPositionObserver::class,
        Tag\ScriptAmpPowrPlayer::ID => Tag\ScriptAmpPowrPlayer::class,
        Tag\AmpPowrPlayer::ID => Tag\AmpPowrPlayer::class,
        Tag\ScriptAmpReachPlayer::ID => Tag\ScriptAmpReachPlayer::class,
        Tag\AmpReachPlayer::ID => Tag\AmpReachPlayer::class,
        Tag\ScriptAmpRecaptchaInput::ID => Tag\ScriptAmpRecaptchaInput::class,
        Tag\AmpRecaptchaInput::ID => Tag\AmpRecaptchaInput::class,
        Tag\ScriptAmpRedbullPlayer::ID => Tag\ScriptAmpRedbullPlayer::class,
        Tag\AmpRedbullPlayer::ID => Tag\AmpRedbullPlayer::class,
        Tag\ScriptAmpReddit::ID => Tag\ScriptAmpReddit::class,
        Tag\AmpReddit::ID => Tag\AmpReddit::class,
        Tag\ScriptAmpRender::ID => Tag\ScriptAmpRender::class,
        Tag\AmpRender::ID => Tag\AmpRender::class,
        Tag\ScriptAmpRiddleQuiz::ID => Tag\ScriptAmpRiddleQuiz::class,
        Tag\AmpRiddleQuiz::ID => Tag\AmpRiddleQuiz::class,
        Tag\ScriptAmpScript::ID => Tag\ScriptAmpScript::class,
        Tag\AmpScriptExtensionLocalScript::ID => Tag\AmpScriptExtensionLocalScript::class,
        Tag\AmpScript::ID => Tag\AmpScript::class,
        Tag\Canvas::ID => Tag\Canvas::class,
        Tag\ScriptAmpSelector::ID => Tag\ScriptAmpSelector::class,
        Tag\ScriptAmpSelector2::ID => Tag\ScriptAmpSelector2::class,
        Tag\ScriptCustomElementAmpSelectorAmp4email::ID => Tag\ScriptCustomElementAmpSelectorAmp4email::class,
        Tag\AmpSelector::ID => Tag\AmpSelector::class,
        Tag\AmpSelectorOption::ID => Tag\AmpSelectorOption::class,
        Tag\AmpSelectorChild::ID => Tag\AmpSelectorChild::class,
        Tag\ScriptAmpSidebar::ID => Tag\ScriptAmpSidebar::class,
        Tag\ScriptAmpSidebar2::ID => Tag\ScriptAmpSidebar2::class,
        Tag\ScriptCustomElementAmpSidebarAmp4email::ID => Tag\ScriptCustomElementAmpSidebarAmp4email::class,
        Tag\AmpSidebar::ID => Tag\AmpSidebar::class,
        Tag\AmpSidebarAmp4email::ID => Tag\AmpSidebarAmp4email::class,
        Tag\AmpStoryAmpSidebar::ID => Tag\AmpStoryAmpSidebar::class,
        Tag\AmpSidebarNav::ID => Tag\AmpSidebarNav::class,
        Tag\ScriptAmpSkimlinks::ID => Tag\ScriptAmpSkimlinks::class,
        Tag\AmpSkimlinks::ID => Tag\AmpSkimlinks::class,
        Tag\ScriptAmpSlides::ID => Tag\ScriptAmpSlides::class,
        Tag\ScriptAmpSmartlinks::ID => Tag\ScriptAmpSmartlinks::class,
        Tag\AmpSmartlinks::ID => Tag\AmpSmartlinks::class,
        Tag\ScriptAmpSocialShare::ID => Tag\ScriptAmpSocialShare::class,
        Tag\ScriptAmpSocialShare2::ID => Tag\ScriptAmpSocialShare2::class,
        Tag\AmpSocialShare::ID => Tag\AmpSocialShare::class,
        Tag\ScriptAmpSoundcloud::ID => Tag\ScriptAmpSoundcloud::class,
        Tag\ScriptAmpSoundcloud2::ID => Tag\ScriptAmpSoundcloud2::class,
        Tag\AmpSoundcloud::ID => Tag\AmpSoundcloud::class,
        Tag\ScriptAmpSpringboardPlayer::ID => Tag\ScriptAmpSpringboardPlayer::class,
        Tag\AmpSpringboardPlayer::ID => Tag\AmpSpringboardPlayer::class,
        Tag\ScriptAmpStickyAd::ID => Tag\ScriptAmpStickyAd::class,
        Tag\AmpStickyAd::ID => Tag\AmpStickyAd::class,
        Tag\ScriptAmpStory360::ID => Tag\ScriptAmpStory360::class,
        Tag\AmpStory360::ID => Tag\AmpStory360::class,
        Tag\ScriptAmpStoryAutoAds::ID => Tag\ScriptAmpStoryAutoAds::class,
        Tag\AmpStoryAutoAds::ID => Tag\AmpStoryAutoAds::class,
        Tag\AmpStoryAutoAdsConfigScript::ID => Tag\AmpStoryAutoAdsConfigScript::class,
        Tag\AmpStoryAutoAdsTemplate::ID => Tag\AmpStoryAutoAdsTemplate::class,
        Tag\ScriptAmpStoryAutoAnalytics::ID => Tag\ScriptAmpStoryAutoAnalytics::class,
        Tag\AmpStoryAutoAnalytics::ID => Tag\AmpStoryAutoAnalytics::class,
        Tag\ScriptAmpStoryCaptions::ID => Tag\ScriptAmpStoryCaptions::class,
        Tag\AmpStoryCaptions::ID => Tag\AmpStoryCaptions::class,
        Tag\ScriptAmpStoryInteractive::ID => Tag\ScriptAmpStoryInteractive::class,
        Tag\AmpStoryInteractiveQuiz::ID => Tag\AmpStoryInteractiveQuiz::class,
        Tag\AmpStoryInteractivePoll::ID => Tag\AmpStoryInteractivePoll::class,
        Tag\AmpStoryInteractiveBinaryPoll::ID => Tag\AmpStoryInteractiveBinaryPoll::class,
        Tag\AmpStoryInteractiveResults::ID => Tag\AmpStoryInteractiveResults::class,
        Tag\AmpStoryInteractiveImgQuiz::ID => Tag\AmpStoryInteractiveImgQuiz::class,
        Tag\AmpStoryInteractiveImgPoll::ID => Tag\AmpStoryInteractiveImgPoll::class,
        Tag\ScriptAmpStoryPanningMedia::ID => Tag\ScriptAmpStoryPanningMedia::class,
        Tag\AmpStoryPanningMedia::ID => Tag\AmpStoryPanningMedia::class,
        Tag\ScriptAmpStoryPlayer::ID => Tag\ScriptAmpStoryPlayer::class,
        Tag\AmpStoryPlayer::ID => Tag\AmpStoryPlayer::class,
        Tag\ImgIAmphtmlIntrinsicSizerAmpStoryPlayer::ID => Tag\ImgIAmphtmlIntrinsicSizerAmpStoryPlayer::class,
        Tag\AmpStoryPlayerImg::ID => Tag\AmpStoryPlayerImg::class,
        Tag\ScriptAmpStoryShopping::ID => Tag\ScriptAmpStoryShopping::class,
        Tag\AmpStoryShoppingTag::ID => Tag\AmpStoryShoppingTag::class,
        Tag\AmpStoryShoppingConfig::ID => Tag\AmpStoryShoppingConfig::class,
        Tag\AmpStoryShoppingAttachment::ID => Tag\AmpStoryShoppingAttachment::class,
        Tag\ScriptAmpStorySubscriptions::ID => Tag\ScriptAmpStorySubscriptions::class,
        Tag\AmpStorySubscriptions::ID => Tag\AmpStorySubscriptions::class,
        Tag\ScriptAmpStory::ID => Tag\ScriptAmpStory::class,
        Tag\AmpStory::ID => Tag\AmpStory::class,
        Tag\AmpStoryPage::ID => Tag\AmpStoryPage::class,
        Tag\AmpStoryGridLayer::ID => Tag\AmpStoryGridLayer::class,
        Tag\AmpStoryGridLayerDefault::ID => Tag\AmpStoryGridLayerDefault::class,
        Tag\AmpStoryGridLayerAnimateIn::ID => Tag\AmpStoryGridLayerAnimateIn::class,
        Tag\AmpStoryBookend::ID => Tag\AmpStoryBookend::class,
        Tag\AmpStoryBookendExtensionJsonScript::ID => Tag\AmpStoryBookendExtensionJsonScript::class,
        Tag\AmpStorySocialShare::ID => Tag\AmpStorySocialShare::class,
        Tag\AmpStorySocialShareExtensionJsonScript::ID => Tag\AmpStorySocialShareExtensionJsonScript::class,
        Tag\AmpStoryConsentExtensionJsonScript::ID => Tag\AmpStoryConsentExtensionJsonScript::class,
        Tag\AmpStoryConsent::ID => Tag\AmpStoryConsent::class,
        Tag\AmpStoryCtaLayer::ID => Tag\AmpStoryCtaLayer::class,
        Tag\AmpExperimentStoryExtensionJsonScript::ID => Tag\AmpExperimentStoryExtensionJsonScript::class,
        Tag\AmpStoryCtaLayerAnimateIn::ID => Tag\AmpStoryCtaLayerAnimateIn::class,
        Tag\AmpStoryPageAttachmentHref::ID => Tag\AmpStoryPageAttachmentHref::class,
        Tag\AmpStoryPageAttachment::ID => Tag\AmpStoryPageAttachment::class,
        Tag\AmpStoryPageOutlink::ID => Tag\AmpStoryPageOutlink::class,
        Tag\AmpStoryAnimationJsonScript::ID => Tag\AmpStoryAnimationJsonScript::class,
        Tag\AmpStoryAnimation::ID => Tag\AmpStoryAnimation::class,
        Tag\MetaNameAmpStoryGeneratorName::ID => Tag\MetaNameAmpStoryGeneratorName::class,
        Tag\MetaNameAmpStoryGeneratorVersion::ID => Tag\MetaNameAmpStoryGeneratorVersion::class,
        Tag\ScriptAmpStreamGallery::ID => Tag\ScriptAmpStreamGallery::class,
        Tag\AmpStreamGallery::ID => Tag\AmpStreamGallery::class,
        Tag\ScriptAmpSubscriptions::ID => Tag\ScriptAmpSubscriptions::class,
        Tag\AmpSubscriptionsExtensionJsonScript::ID => Tag\AmpSubscriptionsExtensionJsonScript::class,
        Tag\ScriptAmpSubscriptionsGoogle::ID => Tag\ScriptAmpSubscriptionsGoogle::class,
        Tag\CryptokeysJsonScript::ID => Tag\CryptokeysJsonScript::class,
        Tag\SubscriptionsSectionContentSwgAmpCacheNonce::ID => Tag\SubscriptionsSectionContentSwgAmpCacheNonce::class,
        Tag\SubscriptionsScriptCiphertext::ID => Tag\SubscriptionsScriptCiphertext::class,
        Tag\SpanSwgAmpCacheNonce::ID => Tag\SpanSwgAmpCacheNonce::class,
        Tag\ScriptAmpTiktok::ID => Tag\ScriptAmpTiktok::class,
        Tag\AmpTiktok::ID => Tag\AmpTiktok::class,
        Tag\AmpTiktokBlockquote::ID => Tag\AmpTiktokBlockquote::class,
        Tag\BlockquoteWithTiktok::ID => Tag\BlockquoteWithTiktok::class,
        Tag\ScriptAmpTimeago::ID => Tag\ScriptAmpTimeago::class,
        Tag\ScriptCustomElementAmpTimeagoAmp4email::ID => Tag\ScriptCustomElementAmpTimeagoAmp4email::class,
        Tag\AmpTimeago::ID => Tag\AmpTimeago::class,
        Tag\ScriptAmpTruncateText::ID => Tag\ScriptAmpTruncateText::class,
        Tag\AmpTruncateText::ID => Tag\AmpTruncateText::class,
        Tag\ScriptAmpTwitter::ID => Tag\ScriptAmpTwitter::class,
        Tag\ScriptAmpTwitter2::ID => Tag\ScriptAmpTwitter2::class,
        Tag\AmpTwitter::ID => Tag\AmpTwitter::class,
        Tag\ScriptAmpUserNotification::ID => Tag\ScriptAmpUserNotification::class,
        Tag\AmpUserNotification::ID => Tag\AmpUserNotification::class,
        Tag\ScriptAmpVideoDocking::ID => Tag\ScriptAmpVideoDocking::class,
        Tag\ScriptAmpVideoIframe::ID => Tag\ScriptAmpVideoIframe::class,
        Tag\ScriptAmpVideoIframe2::ID => Tag\ScriptAmpVideoIframe2::class,
        Tag\AmpVideoIframe::ID => Tag\AmpVideoIframe::class,
        Tag\AmpVideoIframeTransformed::ID => Tag\AmpVideoIframeTransformed::class,
        Tag\ScriptAmpVideo::ID => Tag\ScriptAmpVideo::class,
        Tag\ScriptAmpVideo2::ID => Tag\ScriptAmpVideo2::class,
        Tag\AmpVideo::ID => Tag\AmpVideo::class,
        Tag\AmpStoryAmpStoryPageAttachmentAmpVideo::ID => Tag\AmpStoryAmpStoryPageAttachmentAmpVideo::class,
        Tag\AmpStoryAmpVideo::ID => Tag\AmpStoryAmpVideo::class,
        Tag\ScriptAmpVimeo::ID => Tag\ScriptAmpVimeo::class,
        Tag\ScriptAmpVimeo2::ID => Tag\ScriptAmpVimeo2::class,
        Tag\AmpVimeo::ID => Tag\AmpVimeo::class,
        Tag\ScriptAmpVine::ID => Tag\ScriptAmpVine::class,
        Tag\AmpVine::ID => Tag\AmpVine::class,
        Tag\ScriptAmpViqeoPlayer::ID => Tag\ScriptAmpViqeoPlayer::class,
        Tag\AmpViqeoPlayer::ID => Tag\AmpViqeoPlayer::class,
        Tag\ScriptAmpVk::ID => Tag\ScriptAmpVk::class,
        Tag\AmpVk::ID => Tag\AmpVk::class,
        Tag\ScriptAmpWebPush::ID => Tag\ScriptAmpWebPush::class,
        Tag\AmpWebPush::ID => Tag\AmpWebPush::class,
        Tag\AmpWebPushWidget::ID => Tag\AmpWebPushWidget::class,
        Tag\ScriptAmpWistiaPlayer::ID => Tag\ScriptAmpWistiaPlayer::class,
        Tag\AmpWistiaPlayer::ID => Tag\AmpWistiaPlayer::class,
        Tag\ScriptAmpWordpressEmbed::ID => Tag\ScriptAmpWordpressEmbed::class,
        Tag\AmpWordpressEmbed::ID => Tag\AmpWordpressEmbed::class,
        Tag\ScriptAmpYotpo::ID => Tag\ScriptAmpYotpo::class,
        Tag\AmpYotpo::ID => Tag\AmpYotpo::class,
        Tag\ScriptAmpYoutube::ID => Tag\ScriptAmpYoutube::class,
        Tag\ScriptAmpYoutube2::ID => Tag\ScriptAmpYoutube2::class,
        Tag\AmpYoutube::ID => Tag\AmpYoutube::class,
    ];

    /**
     * Mapping of tag name to tag ID or array of tag IDs.
     *
     * This is used to optimize querying by tag name.
     *
     * @var array<string|array<string>>
     */
    const BY_TAG_NAME = [
        Element::A => [
            Tag\A::ID,
            Tag\AAmp4email::ID,
        ],
        Element::ABBR => Tag\Abbr::ID,
        Element::ACRONYM => Tag\Acronym::ID,
        Element::ADDRESS => Tag\Address::ID,
        Extension::_3D_GLTF => Tag\Amp3dGltf::ID,
        Extension::_3Q_PLAYER => Tag\Amp3qPlayer::ID,
        Element::SCRIPT => [
            Tag\AmpAccessExtensionJsonScript::ID,
            Tag\AmpAdExitConfigurationJson::ID,
            Tag\AmpAdExtensionScript::ID,
            Tag\AmpAnalyticsExtensionJsonScript::ID,
            Tag\AmpAnimationExtensionJsonScript::ID,
            Tag\AmpAnimExtensionScriptAmp4email::ID,
            Tag\AmpAutocompleteJson::ID,
            Tag\AmpBindExtensionJsonScript::ID,
            Tag\AmpConsentExtensionJsonScript::ID,
            Tag\AmpExperimentExtensionJsonScript::ID,
            Tag\AmpExperimentStoryExtensionJsonScript::ID,
            Tag\AmpFacebook10::ID,
            Tag\AmpGeoExtensionJsonScript::ID,
            Tag\AmpImaVideoScriptTypeApplicationJson::ID,
            Tag\AmpLinkRewriterExtensionJsonScript::ID,
            Tag\AmpNextPageScriptTypeApplicationJson::ID,
            Tag\AmpScriptExtensionLocalScript::ID,
            Tag\AmpStoryAnimationJsonScript::ID,
            Tag\AmpStoryAutoAdsConfigScript::ID,
            Tag\AmpStoryBookendExtensionJsonScript::ID,
            Tag\AmpStoryConsentExtensionJsonScript::ID,
            Tag\AmpStorySocialShareExtensionJsonScript::ID,
            Tag\AmpSubscriptionsExtensionJsonScript::ID,
            Tag\Amp4adsEngineScript::ID,
            Tag\AmphtmlEngineScript::ID,
            Tag\AmphtmlEngineScriptLts::ID,
            Tag\AmphtmlEngineScriptLtsTransformed::ID,
            Tag\AmphtmlEngineScriptTransformed::ID,
            Tag\AmphtmlEngineScriptAmp4email::ID,
            Tag\AmphtmlModuleEngineScript::ID,
            Tag\AmphtmlModuleLtsEngineScript::ID,
            Tag\AmphtmlNomoduleEngineScript::ID,
            Tag\AmphtmlNomoduleLtsEngineScript::ID,
            Tag\CryptokeysJsonScript::ID,
            Tag\ScriptAmpOnerrorV0Js::ID,
            Tag\ScriptAmpOnerrorV0JsOrV0Mjs::ID,
            Tag\ScriptAmpStoryDvhPolyfill::ID,
            Tag\ScriptIdAmpRtc::ID,
            Tag\ScriptTypeApplicationLdJson::ID,
            Tag\ScriptTypeTextPlain::ID,
            Tag\ScriptTypeTextPlainAmp4email::ID,
            Tag\ScriptAmp3dGltf::ID,
            Tag\ScriptAmp3qPlayer::ID,
            Tag\ScriptAmpAccessFewcents::ID,
            Tag\ScriptAmpAccessLaterpay::ID,
            Tag\ScriptAmpAccessPoool::ID,
            Tag\ScriptAmpAccessScroll::ID,
            Tag\ScriptAmpAccess::ID,
            Tag\ScriptAmpAccordion::ID,
            Tag\ScriptAmpAccordion2::ID,
            Tag\ScriptAmpActionMacro::ID,
            Tag\ScriptAmpAdCustom::ID,
            Tag\ScriptAmpAdExit::ID,
            Tag\ScriptAmpAddthis::ID,
            Tag\ScriptAmpAnalytics::ID,
            Tag\ScriptAmpAnimation::ID,
            Tag\ScriptAmpAnim::ID,
            Tag\ScriptAmpApesterMedia::ID,
            Tag\ScriptAmpAppBanner::ID,
            Tag\ScriptAmpAudio::ID,
            Tag\ScriptAmpAutoAds::ID,
            Tag\ScriptAmpAutocomplete::ID,
            Tag\ScriptAmpBaseCarousel::ID,
            Tag\ScriptAmpBeopinion::ID,
            Tag\ScriptAmpBind::ID,
            Tag\ScriptAmpBodymovinAnimation::ID,
            Tag\ScriptAmpBridPlayer::ID,
            Tag\ScriptAmpBrightcove::ID,
            Tag\ScriptAmpBrightcove2::ID,
            Tag\ScriptAmpBysideContent::ID,
            Tag\ScriptAmpCacheUrl::ID,
            Tag\ScriptAmpCallTracking::ID,
            Tag\ScriptAmpCarousel::ID,
            Tag\ScriptAmpConnatixPlayer::ID,
            Tag\ScriptAmpConsent::ID,
            Tag\ScriptAmpDailymotion::ID,
            Tag\ScriptAmpDailymotion2::ID,
            Tag\ScriptAmpDateCountdown::ID,
            Tag\ScriptAmpDateDisplay::ID,
            Tag\ScriptAmpDatePicker::ID,
            Tag\ScriptAmpDelightPlayer::ID,
            Tag\ScriptAmpDynamicCssClasses::ID,
            Tag\ScriptAmpEmbedlyCard::ID,
            Tag\ScriptAmpExperiment::ID,
            Tag\ScriptAmpFacebookComments::ID,
            Tag\ScriptAmpFacebookLike::ID,
            Tag\ScriptAmpFacebookPage::ID,
            Tag\ScriptAmpFacebook::ID,
            Tag\ScriptAmpFitText::ID,
            Tag\ScriptAmpFitText2::ID,
            Tag\ScriptAmpFont::ID,
            Tag\ScriptAmpForm::ID,
            Tag\ScriptAmpFxCollection::ID,
            Tag\ScriptAmpFxFlyingCarpet::ID,
            Tag\ScriptAmpGeo::ID,
            Tag\ScriptAmpGfycat::ID,
            Tag\ScriptAmpGist::ID,
            Tag\ScriptAmpGoogleDocumentEmbed::ID,
            Tag\ScriptAmpGoogleReadAloudPlayer::ID,
            Tag\ScriptAmpGwdAnimation::ID,
            Tag\ScriptAmpHulu::ID,
            Tag\ScriptAmpIframely::ID,
            Tag\ScriptAmpIframe::ID,
            Tag\ScriptAmpIframe2::ID,
            Tag\ScriptAmpImaVideo::ID,
            Tag\ScriptAmpImageLightbox::ID,
            Tag\ScriptAmpImageSlider::ID,
            Tag\ScriptAmpImgur::ID,
            Tag\ScriptAmpInlineGallery::ID,
            Tag\ScriptAmpInputmask::ID,
            Tag\ScriptAmpInstagram::ID,
            Tag\ScriptAmpInstagram2::ID,
            Tag\ScriptAmpInstallServiceworker::ID,
            Tag\ScriptAmpIzlesene::ID,
            Tag\ScriptAmpJwplayer::ID,
            Tag\ScriptAmpKalturaPlayer::ID,
            Tag\ScriptAmpLightboxGallery::ID,
            Tag\ScriptAmpLightbox::ID,
            Tag\ScriptAmpLightbox2::ID,
            Tag\ScriptAmpLinkRewriter::ID,
            Tag\ScriptAmpList::ID,
            Tag\ScriptAmpLiveList::ID,
            Tag\ScriptAmpMathml::ID,
            Tag\ScriptAmpMathml2::ID,
            Tag\ScriptAmpMegaMenu::ID,
            Tag\ScriptAmpMegaphone::ID,
            Tag\ScriptAmpMinuteMediaPlayer::ID,
            Tag\ScriptAmpMowplayer::ID,
            Tag\ScriptAmpMraid::ID,
            Tag\ScriptAmpMustache::ID,
            Tag\ScriptAmpNestedMenu::ID,
            Tag\ScriptAmpNextPage::ID,
            Tag\ScriptAmpNexxtvPlayer::ID,
            Tag\ScriptAmpO2Player::ID,
            Tag\ScriptAmpOnetapGoogle::ID,
            Tag\ScriptAmpOoyalaPlayer::ID,
            Tag\ScriptAmpOrientationObserver::ID,
            Tag\ScriptAmpPanZoom::ID,
            Tag\ScriptAmpPinterest::ID,
            Tag\ScriptAmpPlaybuzz::ID,
            Tag\ScriptAmpPositionObserver::ID,
            Tag\ScriptAmpPowrPlayer::ID,
            Tag\ScriptAmpReachPlayer::ID,
            Tag\ScriptAmpRecaptchaInput::ID,
            Tag\ScriptAmpRedbullPlayer::ID,
            Tag\ScriptAmpReddit::ID,
            Tag\ScriptAmpRender::ID,
            Tag\ScriptAmpRiddleQuiz::ID,
            Tag\ScriptAmpScript::ID,
            Tag\ScriptAmpSelector::ID,
            Tag\ScriptAmpSelector2::ID,
            Tag\ScriptAmpSidebar::ID,
            Tag\ScriptAmpSidebar2::ID,
            Tag\ScriptAmpSkimlinks::ID,
            Tag\ScriptAmpSlides::ID,
            Tag\ScriptAmpSmartlinks::ID,
            Tag\ScriptAmpSocialShare::ID,
            Tag\ScriptAmpSocialShare2::ID,
            Tag\ScriptAmpSoundcloud::ID,
            Tag\ScriptAmpSoundcloud2::ID,
            Tag\ScriptAmpSpringboardPlayer::ID,
            Tag\ScriptAmpStickyAd::ID,
            Tag\ScriptAmpStory360::ID,
            Tag\ScriptAmpStoryAutoAds::ID,
            Tag\ScriptAmpStoryAutoAnalytics::ID,
            Tag\ScriptAmpStoryCaptions::ID,
            Tag\ScriptAmpStoryInteractive::ID,
            Tag\ScriptAmpStoryPanningMedia::ID,
            Tag\ScriptAmpStoryPlayer::ID,
            Tag\ScriptAmpStoryShopping::ID,
            Tag\ScriptAmpStorySubscriptions::ID,
            Tag\ScriptAmpStory::ID,
            Tag\ScriptAmpStreamGallery::ID,
            Tag\ScriptAmpSubscriptionsGoogle::ID,
            Tag\ScriptAmpSubscriptions::ID,
            Tag\ScriptAmpTiktok::ID,
            Tag\ScriptAmpTimeago::ID,
            Tag\ScriptAmpTruncateText::ID,
            Tag\ScriptAmpTwitter::ID,
            Tag\ScriptAmpTwitter2::ID,
            Tag\ScriptAmpUserNotification::ID,
            Tag\ScriptAmpVideoDocking::ID,
            Tag\ScriptAmpVideoIframe::ID,
            Tag\ScriptAmpVideoIframe2::ID,
            Tag\ScriptAmpVideo::ID,
            Tag\ScriptAmpVideo2::ID,
            Tag\ScriptAmpVimeo::ID,
            Tag\ScriptAmpVimeo2::ID,
            Tag\ScriptAmpVine::ID,
            Tag\ScriptAmpViqeoPlayer::ID,
            Tag\ScriptAmpVk::ID,
            Tag\ScriptAmpWebPush::ID,
            Tag\ScriptAmpWistiaPlayer::ID,
            Tag\ScriptAmpWordpressEmbed::ID,
            Tag\ScriptAmpYotpo::ID,
            Tag\ScriptAmpYoutube::ID,
            Tag\ScriptAmpYoutube2::ID,
            Tag\ScriptCustomElementAmpAccordionAmp4email::ID,
            Tag\ScriptCustomElementAmpAutocompleteAmp4email::ID,
            Tag\ScriptCustomElementAmpBindAmp4email::ID,
            Tag\ScriptCustomElementAmpCarouselAmp4email::ID,
            Tag\ScriptCustomElementAmpFitTextAmp4email::ID,
            Tag\ScriptCustomElementAmpFormAmp4email::ID,
            Tag\ScriptCustomElementAmpImageLightboxAmp4email::ID,
            Tag\ScriptCustomElementAmpLightboxAmp4ads::ID,
            Tag\ScriptCustomElementAmpLightboxAmp4email::ID,
            Tag\ScriptCustomElementAmpListAmp4email::ID,
            Tag\ScriptCustomElementAmpSelectorAmp4email::ID,
            Tag\ScriptCustomElementAmpSidebarAmp4email::ID,
            Tag\ScriptCustomElementAmpTimeagoAmp4email::ID,
            Tag\ScriptCustomTemplateAmpMustacheAmp4ads::ID,
            Tag\ScriptCustomTemplateAmpMustacheAmp4email::ID,
            Tag\SubscriptionsScriptCiphertext::ID,
        ],
        Extension::ACCORDION => Tag\AmpAccordion::ID,
        Element::SECTION => [
            Tag\AmpAccordionSection::ID,
            Tag\Section::ID,
            Tag\SectionAmp4email::ID,
            Tag\SubscriptionsSectionContentSwgAmpCacheNonce::ID,
        ],
        Extension::ACTION_MACRO => Tag\AmpActionMacro::ID,
        Extension::AD => [
            Tag\AmpAd::ID,
            Tag\AmpAdWithDataEnableRefreshAttribute::ID,
            Tag\AmpAdWithDataMultiSizeAttribute::ID,
            Tag\AmpAdWithTypeCustom::ID,
        ],
        Extension::AD_CUSTOM => Tag\AmpAdCustom::ID,
        Extension::AD_EXIT => Tag\AmpAdExit::ID,
        Extension::ADDTHIS => Tag\AmpAddthis::ID,
        Extension::ANALYTICS => Tag\AmpAnalytics::ID,
        Extension::ANIM => [
            Tag\AmpAnim::ID,
            Tag\AmpAnimAmp4email::ID,
        ],
        Extension::ANIMATION => Tag\AmpAnimation::ID,
        Extension::APESTER_MEDIA => Tag\AmpApesterMedia::ID,
        Extension::APP_BANNER => Tag\AmpAppBanner::ID,
        Element::BUTTON => [
            Tag\AmpAppBannerButtonOpenButton::ID,
            Tag\AmpListLoadMoreButtonLoadMoreClickable::ID,
            Tag\Button::ID,
            Tag\ButtonAmpNestedMenu::ID,
        ],
        Extension::AUDIO => [
            Tag\AmpAudio::ID,
            Tag\AmpAudioA4a::ID,
            Tag\AmpStoryAmpAudio::ID,
        ],
        Element::SOURCE => [
            Tag\AmpAudioSource::ID,
            Tag\AmpImaVideoSource::ID,
            Tag\AmpVideoSource::ID,
            Tag\AudioSource::ID,
            Tag\PictureSource::ID,
            Tag\VideoSource::ID,
        ],
        Element::TRACK => [
            Tag\AmpAudioTrack::ID,
            Tag\AmpAudioTrackKindSubtitles::ID,
            Tag\AmpImaVideoTrack::ID,
            Tag\AmpImaVideoTrackKindSubtitles::ID,
            Tag\AmpVideoTrack::ID,
            Tag\AmpVideoTrackKindSubtitles::ID,
            Tag\AudioTrack::ID,
            Tag\AudioTrackKindSubtitles::ID,
            Tag\VideoTrack::ID,
            Tag\VideoTrackKindSubtitles::ID,
        ],
        Extension::AUTO_ADS => Tag\AmpAutoAds::ID,
        Extension::AUTOCOMPLETE => [
            Tag\AmpAutocomplete::ID,
            Tag\AmpAutocompleteAmp4email::ID,
        ],
        Element::INPUT => [
            Tag\AmpAutocompleteInput::ID,
            Tag\Input::ID,
            Tag\InputMaskDateDdMmYyyy::ID,
            Tag\InputMaskDateMmDdYyyy::ID,
            Tag\InputMaskDateMmYy::ID,
            Tag\InputMaskDateYyyyMmDd::ID,
            Tag\InputMaskPaymentCard::ID,
            Tag\InputMaskCustomMask::ID,
            Tag\InputTypeFile::ID,
            Tag\InputTypeImage::ID,
            Tag\InputTypePassword::ID,
        ],
        Extension::BASE_CAROUSEL => [
            Tag\AmpBaseCarousel::ID,
            Tag\AmpBaseCarouselLightbox::ID,
        ],
        Extension::BEOPINION => Tag\AmpBeopinion::ID,
        Extension::BIND_MACRO => Tag\AmpBindMacro::ID,
        Extension::BODYMOVIN_ANIMATION => Tag\AmpBodymovinAnimation::ID,
        Extension::BRID_PLAYER => Tag\AmpBridPlayer::ID,
        Extension::BRIGHTCOVE => Tag\AmpBrightcove::ID,
        Extension::BYSIDE_CONTENT => Tag\AmpBysideContent::ID,
        Extension::CALL_TRACKING => Tag\AmpCallTracking::ID,
        Extension::CAROUSEL => [
            Tag\AmpCarousel::ID,
            Tag\AmpCarouselLightbox::ID,
        ],
        Extension::CONNATIX_PLAYER => Tag\AmpConnatixPlayer::ID,
        Extension::CONSENT => [
            Tag\AmpConsent::ID,
            Tag\AmpConsentType::ID,
        ],
        Extension::DAILYMOTION => Tag\AmpDailymotion::ID,
        Extension::DATE_COUNTDOWN => Tag\AmpDateCountdown::ID,
        Extension::DATE_DISPLAY => Tag\AmpDateDisplay::ID,
        Element::TEMPLATE => [
            Tag\AmpDatePickerTemplateDateTemplate::ID,
            Tag\AmpDatePickerTemplateInfoTemplate::ID,
            Tag\AmpStoryAutoAdsTemplate::ID,
            Tag\Template::ID,
            Tag\TemplateAmp4email::ID,
        ],
        Extension::DATE_PICKER => [
            Tag\AmpDatePickerTypeRangeModeOverlay::ID,
            Tag\AmpDatePickerTypeRangeModeStatic::ID,
            Tag\AmpDatePickerTypeSingleModeOverlay::ID,
            Tag\AmpDatePickerTypeSingleModeStatic::ID,
        ],
        Extension::DELIGHT_PLAYER => Tag\AmpDelightPlayer::ID,
        Extension::EMBED => [
            Tag\AmpEmbed::ID,
            Tag\AmpEmbedWithDataMultiSizeAttribute::ID,
        ],
        Extension::EMBEDLY_CARD => Tag\AmpEmbedlyCard::ID,
        Extension::EMBEDLY_KEY => Tag\AmpEmbedlyKey::ID,
        Extension::EXPERIMENT => Tag\AmpExperiment::ID,
        Extension::FACEBOOK => Tag\AmpFacebook::ID,
        Extension::FACEBOOK_COMMENTS => [
            Tag\AmpFacebookComments::ID,
            Tag\AmpFacebookComments10::ID,
        ],
        Extension::FACEBOOK_LIKE => [
            Tag\AmpFacebookLike::ID,
            Tag\AmpFacebookLike10::ID,
        ],
        Extension::FACEBOOK_PAGE => [
            Tag\AmpFacebookPage::ID,
            Tag\AmpFacebookPage10::ID,
        ],
        Extension::FIT_TEXT => Tag\AmpFitText::ID,
        Extension::FONT => Tag\AmpFont::ID,
        Extension::FX_FLYING_CARPET => Tag\AmpFxFlyingCarpet::ID,
        Extension::GEO => Tag\AmpGeo::ID,
        Extension::GFYCAT => Tag\AmpGfycat::ID,
        Extension::GIST => Tag\AmpGist::ID,
        Extension::GOOGLE_DOCUMENT_EMBED => Tag\AmpGoogleDocumentEmbed::ID,
        Extension::GOOGLE_READ_ALOUD_PLAYER => Tag\AmpGoogleReadAloudPlayer::ID,
        Extension::GWD_ANIMATION => Tag\AmpGwdAnimation::ID,
        Extension::HULU => Tag\AmpHulu::ID,
        Extension::IFRAME => Tag\AmpIframe::ID,
        Extension::IFRAMELY => Tag\AmpIframely::ID,
        Extension::IMA_VIDEO => Tag\AmpImaVideo::ID,
        Extension::IMAGE_LIGHTBOX => Tag\AmpImageLightbox::ID,
        Extension::IMAGE_SLIDER => [
            Tag\AmpImageSlider::ID,
            Tag\AmpImageSliderTransformed::ID,
        ],
        Element::DIV => [
            Tag\AmpImageSliderDivFirst::ID,
            Tag\AmpImageSliderDivSecond::ID,
            Tag\AmpListDivFetchError::ID,
            Tag\Div::ID,
            Tag\DivAmpNestedMenu::ID,
            Tag\FormDivSubmitError::ID,
            Tag\FormDivSubmitErrorTemplate::ID,
            Tag\FormDivSubmitSuccess::ID,
            Tag\FormDivSubmitSuccessTemplate::ID,
            Tag\FormDivSubmitting::ID,
            Tag\FormDivSubmittingTemplate::ID,
            Tag\FormDivVerifyError::ID,
            Tag\FormDivVerifyErrorTemplate::ID,
        ],
        Extension::IMG => [
            Tag\AmpImg::ID,
            Tag\AmpImgAmp4email::ID,
            Tag\AmpImgTransformed::ID,
        ],
        Element::IMG => [
            Tag\AmpImgImgTransformed::ID,
            Tag\AmpImgImgPlaceholderTransformed::ID,
            Tag\AmpStoryPlayerImg::ID,
            Tag\HeroImg::ID,
            Tag\ImgIAmphtmlIntrinsicSizer::ID,
            Tag\ImgIAmphtmlIntrinsicSizerAmpStoryPlayer::ID,
            Tag\ImgUsingSrcset::ID,
            Tag\NoscriptImg::ID,
            Tag\StandardImg::ID,
        ],
        Extension::IMGUR => Tag\AmpImgur::ID,
        Extension::INLINE_GALLERY => Tag\AmpInlineGallery::ID,
        Extension::INLINE_GALLERY_PAGINATION => [
            Tag\AmpInlineGalleryPagination::ID,
            Tag\AmpInlineGalleryPaginationInset::ID,
        ],
        Extension::INLINE_GALLERY_THUMBNAILS => Tag\AmpInlineGalleryThumbnails::ID,
        Extension::INSTAGRAM => Tag\AmpInstagram::ID,
        Extension::INSTALL_SERVICEWORKER => Tag\AmpInstallServiceworker::ID,
        Extension::IZLESENE => Tag\AmpIzlesene::ID,
        Extension::JWPLAYER => Tag\AmpJwplayer::ID,
        Extension::KALTURA_PLAYER => Tag\AmpKalturaPlayer::ID,
        Extension::LAYOUT => Tag\AmpLayout::ID,
        Extension::LIGHTBOX => [
            Tag\AmpLightbox::ID,
            Tag\AmpLightboxAmp4ads::ID,
        ],
        Extension::LINK_REWRITER => Tag\AmpLinkRewriter::ID,
        Extension::LIST_ => [
            Tag\AmpList::ID,
            Tag\AmpListAmp4email::ID,
        ],
        Extension::LIST_LOAD_MORE => Tag\AmpListLoadMore::ID,
        Extension::LIVE_LIST => Tag\AmpLiveList::ID,
        Extension::MATHML => Tag\AmpMathml::ID,
        Extension::MEGA_MENU => Tag\AmpMegaMenu::ID,
        Extension::MEGAPHONE => [
            Tag\AmpMegaphoneDataEpisode::ID,
            Tag\AmpMegaphoneDataPlaylist::ID,
        ],
        Extension::MINUTE_MEDIA_PLAYER => Tag\AmpMinuteMediaPlayer::ID,
        Extension::MOWPLAYER => Tag\AmpMowplayer::ID,
        Extension::NESTED_MENU => Tag\AmpNestedMenu::ID,
        Extension::NEXT_PAGE => [
            Tag\AmpNextPageWithInlineConfig::ID,
            Tag\AmpNextPageWithSrcAttribute::ID,
            Tag\AmpNextPageTypeAdsense::ID,
        ],
        Extension::NEXXTV_PLAYER => Tag\AmpNexxtvPlayer::ID,
        Extension::O2_PLAYER => Tag\AmpO2Player::ID,
        Extension::ONETAP_GOOGLE => Tag\AmpOnetapGoogle::ID,
        Extension::OOYALA_PLAYER => Tag\AmpOoyalaPlayer::ID,
        Extension::ORIENTATION_OBSERVER => Tag\AmpOrientationObserver::ID,
        Extension::PAN_ZOOM => Tag\AmpPanZoom::ID,
        Extension::PINTEREST => Tag\AmpPinterest::ID,
        Extension::PIXEL => Tag\AmpPixel::ID,
        Extension::PLAYBUZZ => Tag\AmpPlaybuzz::ID,
        Extension::POSITION_OBSERVER => Tag\AmpPositionObserver::ID,
        Extension::POWR_PLAYER => Tag\AmpPowrPlayer::ID,
        Extension::REACH_PLAYER => Tag\AmpReachPlayer::ID,
        Extension::RECAPTCHA_INPUT => Tag\AmpRecaptchaInput::ID,
        Extension::REDBULL_PLAYER => Tag\AmpRedbullPlayer::ID,
        Extension::REDDIT => Tag\AmpReddit::ID,
        Extension::RENDER => Tag\AmpRender::ID,
        Extension::RIDDLE_QUIZ => Tag\AmpRiddleQuiz::ID,
        Extension::SCRIPT => Tag\AmpScript::ID,
        Extension::SELECTOR => Tag\AmpSelector::ID,
        Extension::SIDEBAR => [
            Tag\AmpSidebar::ID,
            Tag\AmpSidebarAmp4email::ID,
            Tag\AmpStoryAmpSidebar::ID,
        ],
        Element::NAV => [
            Tag\AmpSidebarNav::ID,
            Tag\Nav::ID,
        ],
        Extension::SKIMLINKS => Tag\AmpSkimlinks::ID,
        Extension::SMARTLINKS => Tag\AmpSmartlinks::ID,
        Extension::SOCIAL_SHARE => Tag\AmpSocialShare::ID,
        Extension::SOUNDCLOUD => Tag\AmpSoundcloud::ID,
        Extension::SPRINGBOARD_PLAYER => Tag\AmpSpringboardPlayer::ID,
        Extension::STATE => [
            Tag\AmpState::ID,
            Tag\AmpStateAmp4email::ID,
        ],
        Extension::STICKY_AD => Tag\AmpStickyAd::ID,
        Extension::STORY => Tag\AmpStory::ID,
        Extension::STORY_360 => Tag\AmpStory360::ID,
        Extension::STORY_ANIMATION => Tag\AmpStoryAnimation::ID,
        Extension::STORY_AUTO_ADS => Tag\AmpStoryAutoAds::ID,
        Extension::STORY_AUTO_ANALYTICS => Tag\AmpStoryAutoAnalytics::ID,
        Extension::STORY_BOOKEND => Tag\AmpStoryBookend::ID,
        Extension::STORY_CAPTIONS => Tag\AmpStoryCaptions::ID,
        Extension::STORY_CONSENT => Tag\AmpStoryConsent::ID,
        Extension::STORY_CTA_LAYER => Tag\AmpStoryCtaLayer::ID,
        Extension::STORY_GRID_LAYER => Tag\AmpStoryGridLayer::ID,
        Extension::STORY_INTERACTIVE_BINARY_POLL => Tag\AmpStoryInteractiveBinaryPoll::ID,
        Extension::STORY_INTERACTIVE_IMG_POLL => Tag\AmpStoryInteractiveImgPoll::ID,
        Extension::STORY_INTERACTIVE_IMG_QUIZ => Tag\AmpStoryInteractiveImgQuiz::ID,
        Extension::STORY_INTERACTIVE_POLL => Tag\AmpStoryInteractivePoll::ID,
        Extension::STORY_INTERACTIVE_QUIZ => Tag\AmpStoryInteractiveQuiz::ID,
        Extension::STORY_INTERACTIVE_RESULTS => Tag\AmpStoryInteractiveResults::ID,
        Extension::STORY_PAGE => Tag\AmpStoryPage::ID,
        Extension::STORY_PAGE_ATTACHMENT => [
            Tag\AmpStoryPageAttachment::ID,
            Tag\AmpStoryPageAttachmentHref::ID,
        ],
        Extension::STORY_PAGE_OUTLINK => Tag\AmpStoryPageOutlink::ID,
        Extension::STORY_PANNING_MEDIA => Tag\AmpStoryPanningMedia::ID,
        Extension::STORY_PLAYER => Tag\AmpStoryPlayer::ID,
        Extension::STORY_SHOPPING_ATTACHMENT => Tag\AmpStoryShoppingAttachment::ID,
        Extension::STORY_SHOPPING_CONFIG => Tag\AmpStoryShoppingConfig::ID,
        Extension::STORY_SHOPPING_TAG => Tag\AmpStoryShoppingTag::ID,
        Extension::STORY_SOCIAL_SHARE => Tag\AmpStorySocialShare::ID,
        Extension::STORY_SUBSCRIPTIONS => Tag\AmpStorySubscriptions::ID,
        Extension::VIDEO => [
            Tag\AmpStoryAmpStoryPageAttachmentAmpVideo::ID,
            Tag\AmpStoryAmpVideo::ID,
            Tag\AmpVideo::ID,
        ],
        Extension::STREAM_GALLERY => Tag\AmpStreamGallery::ID,
        Extension::TIKTOK => [
            Tag\AmpTiktok::ID,
            Tag\AmpTiktokBlockquote::ID,
        ],
        Extension::TIMEAGO => Tag\AmpTimeago::ID,
        Extension::TRUNCATE_TEXT => Tag\AmpTruncateText::ID,
        Extension::TWITTER => Tag\AmpTwitter::ID,
        Extension::USER_NOTIFICATION => Tag\AmpUserNotification::ID,
        Extension::VIDEO_IFRAME => [
            Tag\AmpVideoIframe::ID,
            Tag\AmpVideoIframeTransformed::ID,
        ],
        Extension::VIMEO => Tag\AmpVimeo::ID,
        Extension::VINE => Tag\AmpVine::ID,
        Extension::VIQEO_PLAYER => Tag\AmpViqeoPlayer::ID,
        Extension::VK => Tag\AmpVk::ID,
        Extension::WEB_PUSH => Tag\AmpWebPush::ID,
        Extension::WEB_PUSH_WIDGET => Tag\AmpWebPushWidget::ID,
        Extension::WISTIA_PLAYER => Tag\AmpWistiaPlayer::ID,
        Extension::WORDPRESS_EMBED => Tag\AmpWordpressEmbed::ID,
        Extension::YOTPO => Tag\AmpYotpo::ID,
        Extension::YOUTUBE => Tag\AmpYoutube::ID,
        Element::ARTICLE => Tag\Article::ID,
        Element::ASIDE => Tag\Aside::ID,
        Element::AUDIO => Tag\Audio::ID,
        Element::B => Tag\B::ID,
        Element::BASE => Tag\Base::ID,
        Element::BDI => Tag\Bdi::ID,
        Element::BDO => Tag\Bdo::ID,
        Element::BIG => Tag\Big::ID,
        Element::BLOCKQUOTE => [
            Tag\Blockquote::ID,
            Tag\BlockquoteWithTiktok::ID,
        ],
        Element::BODY => Tag\Body::ID,
        Element::BR => Tag\Br::ID,
        Element::CANVAS => Tag\Canvas::ID,
        Element::CAPTION => Tag\Caption::ID,
        Element::CENTER => Tag\Center::ID,
        Element::CIRCLE => Tag\Circle::ID,
        Element::CITE => Tag\Cite::ID,
        Element::CLIPPATH => Tag\Clippath::ID,
        Element::CODE => Tag\Code::ID,
        Element::COL => Tag\Col::ID,
        Element::COLGROUP => Tag\Colgroup::ID,
        Element::DATA => Tag\Data::ID,
        Element::DATALIST => Tag\Datalist::ID,
        Element::DD => Tag\Dd::ID,
        Element::DEFS => Tag\Defs::ID,
        Element::DEL => Tag\Del::ID,
        Element::DESC => Tag\Desc::ID,
        Element::DETAILS => Tag\Details::ID,
        Element::DFN => Tag\Dfn::ID,
        Element::DIR => Tag\Dir::ID,
        Element::DL => Tag\Dl::ID,
        Element::DT => Tag\Dt::ID,
        Element::ELLIPSE => Tag\Ellipse::ID,
        Element::EM => Tag\Em::ID,
        Element::FEBLEND => Tag\Feblend::ID,
        Element::FECOLORMATRIX => Tag\Fecolormatrix::ID,
        Element::FECOMPONENTTRANSFER => Tag\Fecomponenttransfer::ID,
        Element::FECOMPOSITE => Tag\Fecomposite::ID,
        Element::FECONVOLVEMATRIX => Tag\Feconvolvematrix::ID,
        Element::FEDIFFUSELIGHTING => Tag\Fediffuselighting::ID,
        Element::FEDISPLACEMENTMAP => Tag\Fedisplacementmap::ID,
        Element::FEDISTANTLIGHT => Tag\Fedistantlight::ID,
        Element::FEDROPSHADOW => Tag\Fedropshadow::ID,
        Element::FEFLOOD => Tag\Feflood::ID,
        Element::FEFUNCA => Tag\Fefunca::ID,
        Element::FEFUNCB => Tag\Fefuncb::ID,
        Element::FEFUNCG => Tag\Fefuncg::ID,
        Element::FEFUNCR => Tag\Fefuncr::ID,
        Element::FEGAUSSIANBLUR => Tag\Fegaussianblur::ID,
        Element::FEMERGE => Tag\Femerge::ID,
        Element::FEMERGENODE => Tag\Femergenode::ID,
        Element::FEMORPHOLOGY => Tag\Femorphology::ID,
        Element::FEOFFSET => Tag\Feoffset::ID,
        Element::FEPOINTLIGHT => Tag\Fepointlight::ID,
        Element::FESPECULARLIGHTING => Tag\Fespecularlighting::ID,
        Element::FESPOTLIGHT => Tag\Fespotlight::ID,
        Element::FETILE => Tag\Fetile::ID,
        Element::FETURBULENCE => Tag\Feturbulence::ID,
        Element::FIELDSET => Tag\Fieldset::ID,
        Element::FIGCAPTION => Tag\Figcaption::ID,
        Element::FIGURE => Tag\Figure::ID,
        Element::FILTER => Tag\Filter::ID,
        Element::FOOTER => Tag\Footer::ID,
        Element::FORM => [
            Tag\FormMethodGet::ID,
            Tag\FormMethodGetAmp4email::ID,
            Tag\FormMethodPost::ID,
            Tag\FormMethodPostAmp4email::ID,
        ],
        Element::G => Tag\G::ID,
        Element::GLYPH => Tag\Glyph::ID,
        Element::GLYPHREF => Tag\Glyphref::ID,
        Element::H1 => Tag\H1::ID,
        Element::H2 => [
            Tag\H2::ID,
            Tag\H2AmpNestedMenu::ID,
        ],
        Element::H3 => [
            Tag\H3::ID,
            Tag\H3AmpNestedMenu::ID,
        ],
        Element::H4 => [
            Tag\H4::ID,
            Tag\H4AmpNestedMenu::ID,
        ],
        Element::H5 => [
            Tag\H5::ID,
            Tag\H5AmpNestedMenu::ID,
        ],
        Element::H6 => [
            Tag\H6::ID,
            Tag\H6AmpNestedMenu::ID,
        ],
        Element::HEAD => Tag\Head::ID,
        Element::STYLE => [
            Tag\HeadStyleAmpBoilerplate::ID,
            Tag\HeadStyleAmp4adsBoilerplate::ID,
            Tag\HeadStyleAmp4emailBoilerplate::ID,
            Tag\NoscriptStyleAmpBoilerplate::ID,
            Tag\StyleAmpCustom::ID,
            Tag\StyleAmpCustomAmp4ads::ID,
            Tag\StyleAmpCustomAmp4email::ID,
            Tag\StyleAmpCustomCssStrict::ID,
            Tag\StyleAmpCustomLengthCheck::ID,
            Tag\StyleAmpNoscript::ID,
            Tag\StyleAmpKeyframes::ID,
            Tag\StyleAmpRuntimeTransformed::ID,
        ],
        Element::HEADER => Tag\Header::ID,
        Element::IMAGE => [
            Tag\HeroImage::ID,
            Tag\Image::ID,
            Tag\ImageUsingSrcset::ID,
            Tag\StandardImage::ID,
        ],
        Element::HGROUP => Tag\Hgroup::ID,
        Element::HKERN => Tag\Hkern::ID,
        Element::HR => Tag\Hr::ID,
        Element::HTML => [
            Tag\Html::ID,
            Tag\HtmlTransformed::ID,
        ],
        Element::_DOCTYPE => [
            Tag\HtmlDoctype::ID,
            Tag\HtmlDoctypeAmp4ads::ID,
        ],
        Element::I => Tag\I::ID,
        Internal::SIZER => [
            Tag\IAmphtmlSizerIntrinsic::ID,
            Tag\IAmphtmlSizerResponsive::ID,
        ],
        Element::IFRAME => Tag\Iframe::ID,
        Element::INS => Tag\Ins::ID,
        Element::KBD => Tag\Kbd::ID,
        Element::LABEL => Tag\Label::ID,
        Element::LEGEND => Tag\Legend::ID,
        Element::LI => Tag\Li::ID,
        Element::LINE => Tag\Line::ID,
        Element::LINEARGRADIENT => Tag\Lineargradient::ID,
        Element::STOP => [
            Tag\LineargradientStop::ID,
            Tag\RadialgradientStop::ID,
        ],
        Element::LINK => [
            Tag\LinkItemprop::ID,
            Tag\LinkItempropSameas::ID,
            Tag\LinkProperty::ID,
            Tag\LinkRel::ID,
            Tag\LinkRelCanonical::ID,
            Tag\LinkRelManifest::ID,
            Tag\LinkRelModulepreload::ID,
            Tag\LinkRelPreload::ID,
            Tag\LinkRelStylesheetForAmpStory10Css::ID,
            Tag\LinkRelStylesheetForFonts::ID,
        ],
        Element::LISTING => Tag\Listing::ID,
        Element::MAIN => Tag\Main::ID,
        Element::MARK => Tag\Mark::ID,
        Element::MARKER => Tag\Marker::ID,
        Element::MASK => Tag\Mask::ID,
        Element::META => [
            Tag\MetaCharsetUtf8::ID,
            Tag\MetaHttpEquivContentLanguage::ID,
            Tag\MetaHttpEquivContentScriptType::ID,
            Tag\MetaHttpEquivContentStyleType::ID,
            Tag\MetaHttpEquivContentType::ID,
            Tag\MetaHttpEquivImagetoolbar::ID,
            Tag\MetaHttpEquivOriginTrial::ID,
            Tag\MetaHttpEquivPicsLabel::ID,
            Tag\MetaHttpEquivResourceType::ID,
            Tag\MetaHttpEquivXDnsPrefetchControl::ID,
            Tag\MetaHttpEquivXUaCompatible::ID,
            Tag\MetaNameAmp3pIframeSrc::ID,
            Tag\MetaNameAmpAdDoubleclickSra::ID,
            Tag\MetaNameAmpAdEnableRefresh::ID,
            Tag\MetaNameAmpConsentBlocking::ID,
            Tag\MetaNameAmpCtaLandingPageType::ID,
            Tag\MetaNameAmpCtaType::ID,
            Tag\MetaNameAmpCtaUrl::ID,
            Tag\MetaNameAmpExperimentToken::ID,
            Tag\MetaNameAmpExperimentsOptIn::ID,
            Tag\MetaNameAmpGoogleClientidIdApi::ID,
            Tag\MetaNameAmpLinkVariableAllowedOrigin::ID,
            Tag\MetaNameAmpListLoadMore::ID,
            Tag\MetaNameAmpRecaptchaInput::ID,
            Tag\MetaNameAmpScriptSrc::ID,
            Tag\MetaNameAmpStoryGeneratorName::ID,
            Tag\MetaNameAmpStoryGeneratorVersion::ID,
            Tag\MetaNameAmpToAmpNavigation::ID,
            Tag\MetaNameAmp4adsId::ID,
            Tag\MetaNameAmp4adsVars::ID,
            Tag\MetaNameAndContent::ID,
            Tag\MetaNameAppleItunesApp::ID,
            Tag\MetaNameViewport::ID,
        ],
        Element::METADATA => Tag\Metadata::ID,
        Element::METER => Tag\Meter::ID,
        Element::MULTICOL => Tag\Multicol::ID,
        Element::NEXTID => Tag\Nextid::ID,
        Element::NOBR => Tag\Nobr::ID,
        Element::NOSCRIPT => [
            Tag\Noscript::ID,
            Tag\NoscriptEnclosureForAmpStyleTags::ID,
        ],
        Element::O_P => Tag\OP::ID,
        Element::OL => Tag\Ol::ID,
        Element::OPTGROUP => Tag\Optgroup::ID,
        Element::OPTION => Tag\Option::ID,
        Element::OUTPUT => Tag\Output::ID,
        Element::P => Tag\P::ID,
        Element::PATH => Tag\Path::ID,
        Element::PATTERN => Tag\Pattern::ID,
        Element::PICTURE => Tag\Picture::ID,
        Element::POLYGON => Tag\Polygon::ID,
        Element::POLYLINE => Tag\Polyline::ID,
        Element::PRE => Tag\Pre::ID,
        Element::PROGRESS => Tag\Progress::ID,
        Element::Q => Tag\Q::ID,
        Element::RADIALGRADIENT => Tag\Radialgradient::ID,
        Element::RB => Tag\Rb::ID,
        Element::RECT => Tag\Rect::ID,
        Element::RP => Tag\Rp::ID,
        Element::RT => Tag\Rt::ID,
        Element::RTC => Tag\Rtc::ID,
        Element::RUBY => Tag\Ruby::ID,
        Element::S => Tag\S::ID,
        Element::SAMP => Tag\Samp::ID,
        Element::SELECT => Tag\Select::ID,
        Element::SLOT => Tag\Slot::ID,
        Element::SMALL => Tag\Small::ID,
        Element::SOLIDCOLOR => Tag\Solidcolor::ID,
        Element::SPACER => Tag\Spacer::ID,
        Element::SPAN => [
            Tag\Span::ID,
            Tag\SpanAmpNestedMenu::ID,
            Tag\SpanSwgAmpCacheNonce::ID,
        ],
        Element::STRIKE => Tag\Strike::ID,
        Element::STRONG => Tag\Strong::ID,
        Element::SUB => Tag\Sub::ID,
        Element::SUMMARY => Tag\Summary::ID,
        Element::SUP => Tag\Sup::ID,
        Element::SVG => Tag\Svg::ID,
        Element::TITLE => [
            Tag\SvgTitle::ID,
            Tag\Title::ID,
            Tag\TitleAmp4email::ID,
        ],
        Element::SWITCH_ => Tag\Switch_::ID,
        Element::SYMBOL => Tag\Symbol::ID,
        Element::TABLE => Tag\Table::ID,
        Element::TBODY => Tag\Tbody::ID,
        Element::TD => Tag\Td::ID,
        Element::TEXT => Tag\Text::ID,
        Element::TEXTAREA => Tag\Textarea::ID,
        Element::TEXTPATH => Tag\Textpath::ID,
        Element::TFOOT => Tag\Tfoot::ID,
        Element::TH => Tag\Th::ID,
        Element::THEAD => Tag\Thead::ID,
        Element::TIME => Tag\Time::ID,
        Element::TR => Tag\Tr::ID,
        Element::TREF => Tag\Tref::ID,
        Element::TSPAN => Tag\Tspan::ID,
        Element::TT => Tag\Tt::ID,
        Element::U => Tag\U::ID,
        Element::UL => Tag\Ul::ID,
        Element::USE_ => Tag\Use_::ID,
        Element::VAR_ => Tag\Var_::ID,
        Element::VIDEO => Tag\Video::ID,
        Element::VIEW => Tag\View::ID,
        Element::VKERN => Tag\Vkern::ID,
        Element::WBR => Tag\Wbr::ID,
    ];

    /**
     * Mapping of spec name to tag ID.
     *
     * This is used to optimize querying by spec name.
     *
     * @var array<string>
     */
    const BY_SPEC_NAME = [
        Tag\AAmp4email::ID => Tag\AAmp4email::ID,
        Tag\AmpAccessExtensionJsonScript::ID => Tag\AmpAccessExtensionJsonScript::ID,
        Tag\AmpAccordionSection::ID => Tag\AmpAccordionSection::ID,
        Tag\AmpAdExitConfigurationJson::ID => Tag\AmpAdExitConfigurationJson::ID,
        Tag\AmpAdExtensionScript::ID => Tag\AmpAdExtensionScript::ID,
        Tag\AmpAdWithDataEnableRefreshAttribute::ID => Tag\AmpAdWithDataEnableRefreshAttribute::ID,
        Tag\AmpAdWithDataMultiSizeAttribute::ID => Tag\AmpAdWithDataMultiSizeAttribute::ID,
        Tag\AmpAdWithTypeCustom::ID => Tag\AmpAdWithTypeCustom::ID,
        Tag\AmpAnalyticsExtensionJsonScript::ID => Tag\AmpAnalyticsExtensionJsonScript::ID,
        Tag\AmpAnimAmp4email::ID => Tag\AmpAnimAmp4email::ID,
        Tag\AmpAnimationExtensionJsonScript::ID => Tag\AmpAnimationExtensionJsonScript::ID,
        Tag\AmpAnimExtensionScriptAmp4email::ID => Tag\AmpAnimExtensionScriptAmp4email::ID,
        Tag\AmpAppBannerButtonOpenButton::ID => Tag\AmpAppBannerButtonOpenButton::ID,
        Tag\AmpAudioA4a::ID => Tag\AmpAudioA4a::ID,
        Tag\AmpAudioSource::ID => Tag\AmpAudioSource::ID,
        Tag\AmpAudioTrack::ID => Tag\AmpAudioTrack::ID,
        Tag\AmpAudioTrackKindSubtitles::ID => Tag\AmpAudioTrackKindSubtitles::ID,
        Tag\AmpAutocomplete::ID => Tag\AmpAutocomplete::ID,
        Tag\AmpAutocompleteAmp4email::ID => Tag\AmpAutocompleteAmp4email::ID,
        Tag\AmpAutocompleteInput::ID => Tag\AmpAutocompleteInput::ID,
        Tag\AmpAutocompleteJson::ID => Tag\AmpAutocompleteJson::ID,
        Tag\AmpBaseCarouselLightboxChild::ID => Tag\AmpBaseCarouselLightboxChild::ID,
        Tag\AmpBaseCarouselLightboxLightboxExclude::ID => Tag\AmpBaseCarouselLightboxLightboxExclude::ID,
        Tag\AmpBaseCarouselLightbox::ID => Tag\AmpBaseCarouselLightbox::ID,
        Tag\AmpBindExtensionJsonScript::ID => Tag\AmpBindExtensionJsonScript::ID,
        Tag\AmpCarousel::ID => Tag\AmpCarousel::ID,
        Tag\AmpCarouselLightbox::ID => Tag\AmpCarouselLightbox::ID,
        Tag\AmpCarouselLightboxChild::ID => Tag\AmpCarouselLightboxChild::ID,
        Tag\AmpCarouselLightboxLightboxExclude::ID => Tag\AmpCarouselLightboxLightboxExclude::ID,
        Tag\AmpConsentExtensionJsonScript::ID => Tag\AmpConsentExtensionJsonScript::ID,
        Tag\AmpConsentType::ID => Tag\AmpConsentType::ID,
        Tag\AmpDatePickerTemplateDateTemplate::ID => Tag\AmpDatePickerTemplateDateTemplate::ID,
        Tag\AmpDatePickerTemplateInfoTemplate::ID => Tag\AmpDatePickerTemplateInfoTemplate::ID,
        Tag\AmpDatePickerTypeRangeModeOverlay::ID => Tag\AmpDatePickerTypeRangeModeOverlay::ID,
        Tag\AmpDatePickerTypeRangeModeStatic::ID => Tag\AmpDatePickerTypeRangeModeStatic::ID,
        Tag\AmpDatePickerTypeSingleModeOverlay::ID => Tag\AmpDatePickerTypeSingleModeOverlay::ID,
        Tag\AmpDatePickerTypeSingleModeStatic::ID => Tag\AmpDatePickerTypeSingleModeStatic::ID,
        Tag\AmpEmbedWithDataMultiSizeAttribute::ID => Tag\AmpEmbedWithDataMultiSizeAttribute::ID,
        Tag\AmpExperimentExtensionJsonScript::ID => Tag\AmpExperimentExtensionJsonScript::ID,
        Tag\AmpExperimentStoryExtensionJsonScript::ID => Tag\AmpExperimentStoryExtensionJsonScript::ID,
        Tag\AmpFacebookComments10::ID => Tag\AmpFacebookComments10::ID,
        Tag\AmpFacebookLike10::ID => Tag\AmpFacebookLike10::ID,
        Tag\AmpFacebookPage10::ID => Tag\AmpFacebookPage10::ID,
        Tag\AmpFacebook10::ID => Tag\AmpFacebook10::ID,
        Tag\AmpGeoExtensionJsonScript::ID => Tag\AmpGeoExtensionJsonScript::ID,
        Tag\AmpImaVideoScriptTypeApplicationJson::ID => Tag\AmpImaVideoScriptTypeApplicationJson::ID,
        Tag\AmpImaVideoSource::ID => Tag\AmpImaVideoSource::ID,
        Tag\AmpImaVideoTrack::ID => Tag\AmpImaVideoTrack::ID,
        Tag\AmpImaVideoTrackKindSubtitles::ID => Tag\AmpImaVideoTrackKindSubtitles::ID,
        Tag\AmpImageSliderTransformed::ID => Tag\AmpImageSliderTransformed::ID,
        Tag\AmpImageSliderDivFirst::ID => Tag\AmpImageSliderDivFirst::ID,
        Tag\AmpImageSliderDivSecond::ID => Tag\AmpImageSliderDivSecond::ID,
        Tag\AmpImgAmp4email::ID => Tag\AmpImgAmp4email::ID,
        Tag\AmpImgTransformed::ID => Tag\AmpImgTransformed::ID,
        Tag\AmpImgImgTransformed::ID => Tag\AmpImgImgTransformed::ID,
        Tag\AmpImgImgPlaceholderTransformed::ID => Tag\AmpImgImgPlaceholderTransformed::ID,
        Tag\AmpInlineGalleryPagination::ID => Tag\AmpInlineGalleryPagination::ID,
        Tag\AmpInlineGalleryPaginationInset::ID => Tag\AmpInlineGalleryPaginationInset::ID,
        Tag\AmpLightboxAmp4ads::ID => Tag\AmpLightboxAmp4ads::ID,
        Tag\AmpLinkRewriterExtensionJsonScript::ID => Tag\AmpLinkRewriterExtensionJsonScript::ID,
        Tag\AmpListAmp4email::ID => Tag\AmpListAmp4email::ID,
        Tag\AmpListLoadMoreButtonLoadMoreClickable::ID => Tag\AmpListLoadMoreButtonLoadMoreClickable::ID,
        Tag\AmpListDivFetchError::ID => Tag\AmpListDivFetchError::ID,
        Tag\AmpLiveListItems::ID => Tag\AmpLiveListItems::ID,
        Tag\AmpLiveListItemsItem::ID => Tag\AmpLiveListItemsItem::ID,
        Tag\AmpLiveListPagination::ID => Tag\AmpLiveListPagination::ID,
        Tag\AmpLiveListUpdate::ID => Tag\AmpLiveListUpdate::ID,
        Tag\AmpMegaMenuAmpList::ID => Tag\AmpMegaMenuAmpList::ID,
        Tag\AmpMegaMenuAmpListTemplate::ID => Tag\AmpMegaMenuAmpListTemplate::ID,
        Tag\AmpMegaMenuNav::ID => Tag\AmpMegaMenuNav::ID,
        Tag\AmpMegaMenuItemContent::ID => Tag\AmpMegaMenuItemContent::ID,
        Tag\AmpMegaMenuItemHeading::ID => Tag\AmpMegaMenuItemHeading::ID,
        Tag\AmpMegaMenuNavUlOl::ID => Tag\AmpMegaMenuNavUlOl::ID,
        Tag\AmpMegaMenuNavUlOlLi::ID => Tag\AmpMegaMenuNavUlOlLi::ID,
        Tag\AmpMegaphoneDataEpisode::ID => Tag\AmpMegaphoneDataEpisode::ID,
        Tag\AmpMegaphoneDataPlaylist::ID => Tag\AmpMegaphoneDataPlaylist::ID,
        Tag\AmpNextPageScriptTypeApplicationJson::ID => Tag\AmpNextPageScriptTypeApplicationJson::ID,
        Tag\AmpNextPageFooter::ID => Tag\AmpNextPageFooter::ID,
        Tag\AmpNextPageRecommendationBox::ID => Tag\AmpNextPageRecommendationBox::ID,
        Tag\AmpNextPageSeparator::ID => Tag\AmpNextPageSeparator::ID,
        Tag\AmpNextPageWithInlineConfig::ID => Tag\AmpNextPageWithInlineConfig::ID,
        Tag\AmpNextPageWithSrcAttribute::ID => Tag\AmpNextPageWithSrcAttribute::ID,
        Tag\AmpNextPageTypeAdsense::ID => Tag\AmpNextPageTypeAdsense::ID,
        Tag\AmpScriptExtensionLocalScript::ID => Tag\AmpScriptExtensionLocalScript::ID,
        Tag\AmpSelectorChild::ID => Tag\AmpSelectorChild::ID,
        Tag\AmpSelectorOption::ID => Tag\AmpSelectorOption::ID,
        Tag\AmpSidebar::ID => Tag\AmpSidebar::ID,
        Tag\AmpSidebarAmp4email::ID => Tag\AmpSidebarAmp4email::ID,
        Tag\AmpSidebarNav::ID => Tag\AmpSidebarNav::ID,
        Tag\AmpState::ID => Tag\AmpState::ID,
        Tag\AmpStateAmp4email::ID => Tag\AmpStateAmp4email::ID,
        Tag\AmpStoryAnimationJsonScript::ID => Tag\AmpStoryAnimationJsonScript::ID,
        Tag\AmpStoryAutoAdsTemplate::ID => Tag\AmpStoryAutoAdsTemplate::ID,
        Tag\AmpStoryAutoAdsConfigScript::ID => Tag\AmpStoryAutoAdsConfigScript::ID,
        Tag\AmpStoryBookendExtensionJsonScript::ID => Tag\AmpStoryBookendExtensionJsonScript::ID,
        Tag\AmpStoryConsentExtensionJsonScript::ID => Tag\AmpStoryConsentExtensionJsonScript::ID,
        Tag\AmpStoryCtaLayerAnimateIn::ID => Tag\AmpStoryCtaLayerAnimateIn::ID,
        Tag\AmpStoryGridLayerAnimateIn::ID => Tag\AmpStoryGridLayerAnimateIn::ID,
        Tag\AmpStoryGridLayerDefault::ID => Tag\AmpStoryGridLayerDefault::ID,
        Tag\AmpStoryPageAttachment::ID => Tag\AmpStoryPageAttachment::ID,
        Tag\AmpStoryPageAttachmentHref::ID => Tag\AmpStoryPageAttachmentHref::ID,
        Tag\AmpStoryPageOutlink::ID => Tag\AmpStoryPageOutlink::ID,
        Tag\AmpStoryPlayerImg::ID => Tag\AmpStoryPlayerImg::ID,
        Tag\AmpStorySocialShareExtensionJsonScript::ID => Tag\AmpStorySocialShareExtensionJsonScript::ID,
        Tag\AmpStoryAmpAudio::ID => Tag\AmpStoryAmpAudio::ID,
        Tag\AmpStoryAmpSidebar::ID => Tag\AmpStoryAmpSidebar::ID,
        Tag\AmpStoryAmpStoryPageAttachmentAmpVideo::ID => Tag\AmpStoryAmpStoryPageAttachmentAmpVideo::ID,
        Tag\AmpStoryAmpVideo::ID => Tag\AmpStoryAmpVideo::ID,
        Tag\AmpSubscriptionsExtensionJsonScript::ID => Tag\AmpSubscriptionsExtensionJsonScript::ID,
        Tag\AmpTiktok::ID => Tag\AmpTiktok::ID,
        Tag\AmpTiktokBlockquote::ID => Tag\AmpTiktokBlockquote::ID,
        Tag\AmpVideoIframeTransformed::ID => Tag\AmpVideoIframeTransformed::ID,
        Tag\AmpVideoSource::ID => Tag\AmpVideoSource::ID,
        Tag\AmpVideoTrack::ID => Tag\AmpVideoTrack::ID,
        Tag\AmpVideoTrackKindSubtitles::ID => Tag\AmpVideoTrackKindSubtitles::ID,
        Tag\Amp4adsEngineScript::ID => Tag\Amp4adsEngineScript::ID,
        Tag\AmphtmlEngineScript::ID => Tag\AmphtmlEngineScript::ID,
        Tag\AmphtmlEngineScriptLts::ID => Tag\AmphtmlEngineScriptLts::ID,
        Tag\AmphtmlEngineScriptLtsTransformed::ID => Tag\AmphtmlEngineScriptLtsTransformed::ID,
        Tag\AmphtmlEngineScriptTransformed::ID => Tag\AmphtmlEngineScriptTransformed::ID,
        Tag\AmphtmlEngineScriptAmp4email::ID => Tag\AmphtmlEngineScriptAmp4email::ID,
        Tag\AmphtmlModuleEngineScript::ID => Tag\AmphtmlModuleEngineScript::ID,
        Tag\AmphtmlModuleLtsEngineScript::ID => Tag\AmphtmlModuleLtsEngineScript::ID,
        Tag\AmphtmlNomoduleEngineScript::ID => Tag\AmphtmlNomoduleEngineScript::ID,
        Tag\AmphtmlNomoduleLtsEngineScript::ID => Tag\AmphtmlNomoduleLtsEngineScript::ID,
        Tag\AudioSource::ID => Tag\AudioSource::ID,
        Tag\AudioTrack::ID => Tag\AudioTrack::ID,
        Tag\AudioTrackKindSubtitles::ID => Tag\AudioTrackKindSubtitles::ID,
        Tag\BlockquoteWithTiktok::ID => Tag\BlockquoteWithTiktok::ID,
        Tag\ButtonAmpNestedMenu::ID => Tag\ButtonAmpNestedMenu::ID,
        Tag\CryptokeysJsonScript::ID => Tag\CryptokeysJsonScript::ID,
        Tag\DivAmpNestedMenu::ID => Tag\DivAmpNestedMenu::ID,
        Tag\FormDivSubmitError::ID => Tag\FormDivSubmitError::ID,
        Tag\FormDivSubmitErrorTemplate::ID => Tag\FormDivSubmitErrorTemplate::ID,
        Tag\FormDivSubmitSuccess::ID => Tag\FormDivSubmitSuccess::ID,
        Tag\FormDivSubmitSuccessTemplate::ID => Tag\FormDivSubmitSuccessTemplate::ID,
        Tag\FormDivSubmitting::ID => Tag\FormDivSubmitting::ID,
        Tag\FormDivSubmittingTemplate::ID => Tag\FormDivSubmittingTemplate::ID,
        Tag\FormDivVerifyError::ID => Tag\FormDivVerifyError::ID,
        Tag\FormDivVerifyErrorTemplate::ID => Tag\FormDivVerifyErrorTemplate::ID,
        Tag\FormMethodGet::ID => Tag\FormMethodGet::ID,
        Tag\FormMethodGetAmp4email::ID => Tag\FormMethodGetAmp4email::ID,
        Tag\FormMethodPost::ID => Tag\FormMethodPost::ID,
        Tag\FormMethodPostAmp4email::ID => Tag\FormMethodPostAmp4email::ID,
        Tag\H2AmpNestedMenu::ID => Tag\H2AmpNestedMenu::ID,
        Tag\H3AmpNestedMenu::ID => Tag\H3AmpNestedMenu::ID,
        Tag\H4AmpNestedMenu::ID => Tag\H4AmpNestedMenu::ID,
        Tag\H5AmpNestedMenu::ID => Tag\H5AmpNestedMenu::ID,
        Tag\H6AmpNestedMenu::ID => Tag\H6AmpNestedMenu::ID,
        Tag\HeadStyleAmpBoilerplate::ID => Tag\HeadStyleAmpBoilerplate::ID,
        Tag\HeadStyleAmp4adsBoilerplate::ID => Tag\HeadStyleAmp4adsBoilerplate::ID,
        Tag\HeadStyleAmp4emailBoilerplate::ID => Tag\HeadStyleAmp4emailBoilerplate::ID,
        Tag\HeroImage::ID => Tag\HeroImage::ID,
        Tag\HeroImg::ID => Tag\HeroImg::ID,
        Tag\HtmlTransformed::ID => Tag\HtmlTransformed::ID,
        Tag\HtmlDoctype::ID => Tag\HtmlDoctype::ID,
        Tag\HtmlDoctypeAmp4ads::ID => Tag\HtmlDoctypeAmp4ads::ID,
        Tag\IAmphtmlSizerIntrinsic::ID => Tag\IAmphtmlSizerIntrinsic::ID,
        Tag\IAmphtmlSizerResponsive::ID => Tag\IAmphtmlSizerResponsive::ID,
        Tag\ImageUsingSrcset::ID => Tag\ImageUsingSrcset::ID,
        Tag\ImgIAmphtmlIntrinsicSizer::ID => Tag\ImgIAmphtmlIntrinsicSizer::ID,
        Tag\ImgIAmphtmlIntrinsicSizerAmpStoryPlayer::ID => Tag\ImgIAmphtmlIntrinsicSizerAmpStoryPlayer::ID,
        Tag\ImgUsingSrcset::ID => Tag\ImgUsingSrcset::ID,
        Tag\InputMaskDateDdMmYyyy::ID => Tag\InputMaskDateDdMmYyyy::ID,
        Tag\InputMaskDateMmDdYyyy::ID => Tag\InputMaskDateMmDdYyyy::ID,
        Tag\InputMaskDateMmYy::ID => Tag\InputMaskDateMmYy::ID,
        Tag\InputMaskDateYyyyMmDd::ID => Tag\InputMaskDateYyyyMmDd::ID,
        Tag\InputMaskPaymentCard::ID => Tag\InputMaskPaymentCard::ID,
        Tag\InputMaskCustomMask::ID => Tag\InputMaskCustomMask::ID,
        Tag\InputTypeFile::ID => Tag\InputTypeFile::ID,
        Tag\InputTypeImage::ID => Tag\InputTypeImage::ID,
        Tag\InputTypePassword::ID => Tag\InputTypePassword::ID,
        Tag\LineargradientStop::ID => Tag\LineargradientStop::ID,
        Tag\LinkItemprop::ID => Tag\LinkItemprop::ID,
        Tag\LinkItempropSameas::ID => Tag\LinkItempropSameas::ID,
        Tag\LinkProperty::ID => Tag\LinkProperty::ID,
        Tag\LinkRel::ID => Tag\LinkRel::ID,
        Tag\LinkRelCanonical::ID => Tag\LinkRelCanonical::ID,
        Tag\LinkRelManifest::ID => Tag\LinkRelManifest::ID,
        Tag\LinkRelModulepreload::ID => Tag\LinkRelModulepreload::ID,
        Tag\LinkRelPreload::ID => Tag\LinkRelPreload::ID,
        Tag\LinkRelStylesheetForAmpStory10Css::ID => Tag\LinkRelStylesheetForAmpStory10Css::ID,
        Tag\LinkRelStylesheetForFonts::ID => Tag\LinkRelStylesheetForFonts::ID,
        Tag\MetaCharsetUtf8::ID => Tag\MetaCharsetUtf8::ID,
        Tag\MetaHttpEquivContentLanguage::ID => Tag\MetaHttpEquivContentLanguage::ID,
        Tag\MetaHttpEquivContentScriptType::ID => Tag\MetaHttpEquivContentScriptType::ID,
        Tag\MetaHttpEquivContentStyleType::ID => Tag\MetaHttpEquivContentStyleType::ID,
        Tag\MetaHttpEquivContentType::ID => Tag\MetaHttpEquivContentType::ID,
        Tag\MetaHttpEquivImagetoolbar::ID => Tag\MetaHttpEquivImagetoolbar::ID,
        Tag\MetaHttpEquivOriginTrial::ID => Tag\MetaHttpEquivOriginTrial::ID,
        Tag\MetaHttpEquivPicsLabel::ID => Tag\MetaHttpEquivPicsLabel::ID,
        Tag\MetaHttpEquivResourceType::ID => Tag\MetaHttpEquivResourceType::ID,
        Tag\MetaHttpEquivXDnsPrefetchControl::ID => Tag\MetaHttpEquivXDnsPrefetchControl::ID,
        Tag\MetaHttpEquivXUaCompatible::ID => Tag\MetaHttpEquivXUaCompatible::ID,
        Tag\MetaNameAmp3pIframeSrc::ID => Tag\MetaNameAmp3pIframeSrc::ID,
        Tag\MetaNameAmpAdDoubleclickSra::ID => Tag\MetaNameAmpAdDoubleclickSra::ID,
        Tag\MetaNameAmpAdEnableRefresh::ID => Tag\MetaNameAmpAdEnableRefresh::ID,
        Tag\MetaNameAmpConsentBlocking::ID => Tag\MetaNameAmpConsentBlocking::ID,
        Tag\MetaNameAmpCtaLandingPageType::ID => Tag\MetaNameAmpCtaLandingPageType::ID,
        Tag\MetaNameAmpCtaType::ID => Tag\MetaNameAmpCtaType::ID,
        Tag\MetaNameAmpCtaUrl::ID => Tag\MetaNameAmpCtaUrl::ID,
        Tag\MetaNameAmpExperimentToken::ID => Tag\MetaNameAmpExperimentToken::ID,
        Tag\MetaNameAmpExperimentsOptIn::ID => Tag\MetaNameAmpExperimentsOptIn::ID,
        Tag\MetaNameAmpGoogleClientidIdApi::ID => Tag\MetaNameAmpGoogleClientidIdApi::ID,
        Tag\MetaNameAmpLinkVariableAllowedOrigin::ID => Tag\MetaNameAmpLinkVariableAllowedOrigin::ID,
        Tag\MetaNameAmpListLoadMore::ID => Tag\MetaNameAmpListLoadMore::ID,
        Tag\MetaNameAmpRecaptchaInput::ID => Tag\MetaNameAmpRecaptchaInput::ID,
        Tag\MetaNameAmpScriptSrc::ID => Tag\MetaNameAmpScriptSrc::ID,
        Tag\MetaNameAmpStoryGeneratorName::ID => Tag\MetaNameAmpStoryGeneratorName::ID,
        Tag\MetaNameAmpStoryGeneratorVersion::ID => Tag\MetaNameAmpStoryGeneratorVersion::ID,
        Tag\MetaNameAmpToAmpNavigation::ID => Tag\MetaNameAmpToAmpNavigation::ID,
        Tag\MetaNameAmp4adsId::ID => Tag\MetaNameAmp4adsId::ID,
        Tag\MetaNameAmp4adsVars::ID => Tag\MetaNameAmp4adsVars::ID,
        Tag\MetaNameAndContent::ID => Tag\MetaNameAndContent::ID,
        Tag\MetaNameAppleItunesApp::ID => Tag\MetaNameAppleItunesApp::ID,
        Tag\MetaNameViewport::ID => Tag\MetaNameViewport::ID,
        Tag\NoscriptImg::ID => Tag\NoscriptImg::ID,
        Tag\NoscriptStyleAmpBoilerplate::ID => Tag\NoscriptStyleAmpBoilerplate::ID,
        Tag\NoscriptEnclosureForAmpStyleTags::ID => Tag\NoscriptEnclosureForAmpStyleTags::ID,
        Tag\PictureSource::ID => Tag\PictureSource::ID,
        Tag\RadialgradientStop::ID => Tag\RadialgradientStop::ID,
        Tag\ScriptAmpOnerrorV0Js::ID => Tag\ScriptAmpOnerrorV0Js::ID,
        Tag\ScriptAmpOnerrorV0JsOrV0Mjs::ID => Tag\ScriptAmpOnerrorV0JsOrV0Mjs::ID,
        Tag\ScriptAmpStoryDvhPolyfill::ID => Tag\ScriptAmpStoryDvhPolyfill::ID,
        Tag\ScriptIdAmpRtc::ID => Tag\ScriptIdAmpRtc::ID,
        Tag\ScriptTypeApplicationLdJson::ID => Tag\ScriptTypeApplicationLdJson::ID,
        Tag\ScriptTypeTextPlain::ID => Tag\ScriptTypeTextPlain::ID,
        Tag\ScriptTypeTextPlainAmp4email::ID => Tag\ScriptTypeTextPlainAmp4email::ID,
        Tag\ScriptCustomElementAmpAccordionAmp4email::ID => Tag\ScriptCustomElementAmpAccordionAmp4email::ID,
        Tag\ScriptCustomElementAmpAutocompleteAmp4email::ID => Tag\ScriptCustomElementAmpAutocompleteAmp4email::ID,
        Tag\ScriptCustomElementAmpBindAmp4email::ID => Tag\ScriptCustomElementAmpBindAmp4email::ID,
        Tag\ScriptCustomElementAmpCarouselAmp4email::ID => Tag\ScriptCustomElementAmpCarouselAmp4email::ID,
        Tag\ScriptCustomElementAmpFitTextAmp4email::ID => Tag\ScriptCustomElementAmpFitTextAmp4email::ID,
        Tag\ScriptCustomElementAmpFormAmp4email::ID => Tag\ScriptCustomElementAmpFormAmp4email::ID,
        Tag\ScriptCustomElementAmpImageLightboxAmp4email::ID => Tag\ScriptCustomElementAmpImageLightboxAmp4email::ID,
        Tag\ScriptCustomElementAmpLightboxAmp4ads::ID => Tag\ScriptCustomElementAmpLightboxAmp4ads::ID,
        Tag\ScriptCustomElementAmpLightboxAmp4email::ID => Tag\ScriptCustomElementAmpLightboxAmp4email::ID,
        Tag\ScriptCustomElementAmpListAmp4email::ID => Tag\ScriptCustomElementAmpListAmp4email::ID,
        Tag\ScriptCustomElementAmpSelectorAmp4email::ID => Tag\ScriptCustomElementAmpSelectorAmp4email::ID,
        Tag\ScriptCustomElementAmpSidebarAmp4email::ID => Tag\ScriptCustomElementAmpSidebarAmp4email::ID,
        Tag\ScriptCustomElementAmpTimeagoAmp4email::ID => Tag\ScriptCustomElementAmpTimeagoAmp4email::ID,
        Tag\ScriptCustomTemplateAmpMustacheAmp4ads::ID => Tag\ScriptCustomTemplateAmpMustacheAmp4ads::ID,
        Tag\ScriptCustomTemplateAmpMustacheAmp4email::ID => Tag\ScriptCustomTemplateAmpMustacheAmp4email::ID,
        Tag\SectionAmp4email::ID => Tag\SectionAmp4email::ID,
        Tag\SpanAmpNestedMenu::ID => Tag\SpanAmpNestedMenu::ID,
        Tag\SpanSwgAmpCacheNonce::ID => Tag\SpanSwgAmpCacheNonce::ID,
        Tag\StandardImage::ID => Tag\StandardImage::ID,
        Tag\StandardImg::ID => Tag\StandardImg::ID,
        Tag\StyleAmpCustom::ID => Tag\StyleAmpCustom::ID,
        Tag\StyleAmpCustomAmp4ads::ID => Tag\StyleAmpCustomAmp4ads::ID,
        Tag\StyleAmpCustomAmp4email::ID => Tag\StyleAmpCustomAmp4email::ID,
        Tag\StyleAmpCustomCssStrict::ID => Tag\StyleAmpCustomCssStrict::ID,
        Tag\StyleAmpCustomLengthCheck::ID => Tag\StyleAmpCustomLengthCheck::ID,
        Tag\StyleAmpNoscript::ID => Tag\StyleAmpNoscript::ID,
        Tag\StyleAmpKeyframes::ID => Tag\StyleAmpKeyframes::ID,
        Tag\StyleAmpRuntimeTransformed::ID => Tag\StyleAmpRuntimeTransformed::ID,
        Tag\SubscriptionsSectionContentSwgAmpCacheNonce::ID => Tag\SubscriptionsSectionContentSwgAmpCacheNonce::ID,
        Tag\SubscriptionsScriptCiphertext::ID => Tag\SubscriptionsScriptCiphertext::ID,
        Tag\SvgTitle::ID => Tag\SvgTitle::ID,
        Tag\TemplateAmp4email::ID => Tag\TemplateAmp4email::ID,
        Tag\Title::ID => Tag\Title::ID,
        Tag\TitleAmp4email::ID => Tag\TitleAmp4email::ID,
        Tag\VideoSource::ID => Tag\VideoSource::ID,
        Tag\VideoTrack::ID => Tag\VideoTrack::ID,
        Tag\VideoTrackKindSubtitles::ID => Tag\VideoTrackKindSubtitles::ID,
    ];

    /**
     * Mapping of AMP format to array of tag IDs.
     *
     * This is used to optimize querying by AMP format.
     *
     * @var array<array<string>>
     */
    const BY_FORMAT = [
        Format::AMP => [
            Tag\A::ID,
            Tag\Abbr::ID,
            Tag\Acronym::ID,
            Tag\Address::ID,
            Tag\Amp3dGltf::ID,
            Tag\Amp3qPlayer::ID,
            Tag\AmpAccessExtensionJsonScript::ID,
            Tag\AmpAccordion::ID,
            Tag\AmpAccordionSection::ID,
            Tag\AmpActionMacro::ID,
            Tag\AmpAd::ID,
            Tag\AmpAdCustom::ID,
            Tag\AmpAddthis::ID,
            Tag\AmpAdExtensionScript::ID,
            Tag\AmpAdWithDataEnableRefreshAttribute::ID,
            Tag\AmpAdWithDataMultiSizeAttribute::ID,
            Tag\AmpAdWithTypeCustom::ID,
            Tag\AmpAnalytics::ID,
            Tag\AmpAnalyticsExtensionJsonScript::ID,
            Tag\AmpAnim::ID,
            Tag\AmpAnimation::ID,
            Tag\AmpAnimationExtensionJsonScript::ID,
            Tag\AmpApesterMedia::ID,
            Tag\AmpAppBanner::ID,
            Tag\AmpAppBannerButtonOpenButton::ID,
            Tag\AmpAudio::ID,
            Tag\AmpAudioSource::ID,
            Tag\AmpAudioTrack::ID,
            Tag\AmpAudioTrackKindSubtitles::ID,
            Tag\AmpAutoAds::ID,
            Tag\AmpAutocomplete::ID,
            Tag\AmpAutocompleteInput::ID,
            Tag\AmpAutocompleteJson::ID,
            Tag\AmpBaseCarousel::ID,
            Tag\AmpBaseCarouselLightboxChild::ID,
            Tag\AmpBaseCarouselLightboxLightboxExclude::ID,
            Tag\AmpBaseCarouselLightbox::ID,
            Tag\AmpBeopinion::ID,
            Tag\AmpBindMacro::ID,
            Tag\AmpBindExtensionJsonScript::ID,
            Tag\AmpBodymovinAnimation::ID,
            Tag\AmpBridPlayer::ID,
            Tag\AmpBrightcove::ID,
            Tag\AmpBysideContent::ID,
            Tag\AmpCallTracking::ID,
            Tag\AmpCarousel::ID,
            Tag\AmpCarouselLightbox::ID,
            Tag\AmpCarouselLightboxChild::ID,
            Tag\AmpCarouselLightboxLightboxExclude::ID,
            Tag\AmpConnatixPlayer::ID,
            Tag\AmpConsent::ID,
            Tag\AmpConsentExtensionJsonScript::ID,
            Tag\AmpConsentType::ID,
            Tag\AmpDailymotion::ID,
            Tag\AmpDateCountdown::ID,
            Tag\AmpDateDisplay::ID,
            Tag\AmpDatePickerTemplateDateTemplate::ID,
            Tag\AmpDatePickerTemplateInfoTemplate::ID,
            Tag\AmpDatePickerTypeRangeModeOverlay::ID,
            Tag\AmpDatePickerTypeRangeModeStatic::ID,
            Tag\AmpDatePickerTypeSingleModeOverlay::ID,
            Tag\AmpDatePickerTypeSingleModeStatic::ID,
            Tag\AmpDelightPlayer::ID,
            Tag\AmpEmbed::ID,
            Tag\AmpEmbedlyCard::ID,
            Tag\AmpEmbedlyKey::ID,
            Tag\AmpEmbedWithDataMultiSizeAttribute::ID,
            Tag\AmpExperiment::ID,
            Tag\AmpExperimentExtensionJsonScript::ID,
            Tag\AmpExperimentStoryExtensionJsonScript::ID,
            Tag\AmpFacebook::ID,
            Tag\AmpFacebookComments::ID,
            Tag\AmpFacebookComments10::ID,
            Tag\AmpFacebookLike::ID,
            Tag\AmpFacebookLike10::ID,
            Tag\AmpFacebookPage::ID,
            Tag\AmpFacebookPage10::ID,
            Tag\AmpFacebook10::ID,
            Tag\AmpFitText::ID,
            Tag\AmpFont::ID,
            Tag\AmpFxFlyingCarpet::ID,
            Tag\AmpGeo::ID,
            Tag\AmpGeoExtensionJsonScript::ID,
            Tag\AmpGfycat::ID,
            Tag\AmpGist::ID,
            Tag\AmpGoogleDocumentEmbed::ID,
            Tag\AmpGoogleReadAloudPlayer::ID,
            Tag\AmpHulu::ID,
            Tag\AmpIframe::ID,
            Tag\AmpIframely::ID,
            Tag\AmpImaVideo::ID,
            Tag\AmpImaVideoScriptTypeApplicationJson::ID,
            Tag\AmpImaVideoSource::ID,
            Tag\AmpImaVideoTrack::ID,
            Tag\AmpImaVideoTrackKindSubtitles::ID,
            Tag\AmpImageLightbox::ID,
            Tag\AmpImageSlider::ID,
            Tag\AmpImageSliderTransformed::ID,
            Tag\AmpImageSliderDivFirst::ID,
            Tag\AmpImageSliderDivSecond::ID,
            Tag\AmpImg::ID,
            Tag\AmpImgTransformed::ID,
            Tag\AmpImgImgTransformed::ID,
            Tag\AmpImgImgPlaceholderTransformed::ID,
            Tag\AmpImgur::ID,
            Tag\AmpInlineGallery::ID,
            Tag\AmpInlineGalleryPagination::ID,
            Tag\AmpInlineGalleryPaginationInset::ID,
            Tag\AmpInlineGalleryThumbnails::ID,
            Tag\AmpInstagram::ID,
            Tag\AmpInstallServiceworker::ID,
            Tag\AmpIzlesene::ID,
            Tag\AmpJwplayer::ID,
            Tag\AmpKalturaPlayer::ID,
            Tag\AmpLayout::ID,
            Tag\AmpLightbox::ID,
            Tag\AmpLinkRewriter::ID,
            Tag\AmpLinkRewriterExtensionJsonScript::ID,
            Tag\AmpList::ID,
            Tag\AmpListLoadMore::ID,
            Tag\AmpListLoadMoreButtonLoadMoreClickable::ID,
            Tag\AmpListDivFetchError::ID,
            Tag\AmpLiveList::ID,
            Tag\AmpLiveListItems::ID,
            Tag\AmpLiveListItemsItem::ID,
            Tag\AmpLiveListPagination::ID,
            Tag\AmpLiveListUpdate::ID,
            Tag\AmpMathml::ID,
            Tag\AmpMegaMenu::ID,
            Tag\AmpMegaMenuAmpList::ID,
            Tag\AmpMegaMenuAmpListTemplate::ID,
            Tag\AmpMegaMenuNav::ID,
            Tag\AmpMegaMenuItemContent::ID,
            Tag\AmpMegaMenuItemHeading::ID,
            Tag\AmpMegaMenuNavUlOl::ID,
            Tag\AmpMegaMenuNavUlOlLi::ID,
            Tag\AmpMegaphoneDataEpisode::ID,
            Tag\AmpMegaphoneDataPlaylist::ID,
            Tag\AmpMinuteMediaPlayer::ID,
            Tag\AmpMowplayer::ID,
            Tag\AmpNestedMenu::ID,
            Tag\AmpNextPageScriptTypeApplicationJson::ID,
            Tag\AmpNextPageFooter::ID,
            Tag\AmpNextPageRecommendationBox::ID,
            Tag\AmpNextPageSeparator::ID,
            Tag\AmpNextPageWithInlineConfig::ID,
            Tag\AmpNextPageWithSrcAttribute::ID,
            Tag\AmpNextPageTypeAdsense::ID,
            Tag\AmpNexxtvPlayer::ID,
            Tag\AmpO2Player::ID,
            Tag\AmpOnetapGoogle::ID,
            Tag\AmpOoyalaPlayer::ID,
            Tag\AmpOrientationObserver::ID,
            Tag\AmpPanZoom::ID,
            Tag\AmpPinterest::ID,
            Tag\AmpPixel::ID,
            Tag\AmpPlaybuzz::ID,
            Tag\AmpPositionObserver::ID,
            Tag\AmpPowrPlayer::ID,
            Tag\AmpReachPlayer::ID,
            Tag\AmpRecaptchaInput::ID,
            Tag\AmpRedbullPlayer::ID,
            Tag\AmpReddit::ID,
            Tag\AmpRender::ID,
            Tag\AmpRiddleQuiz::ID,
            Tag\AmpScript::ID,
            Tag\AmpScriptExtensionLocalScript::ID,
            Tag\AmpSelector::ID,
            Tag\AmpSelectorChild::ID,
            Tag\AmpSelectorOption::ID,
            Tag\AmpSidebar::ID,
            Tag\AmpSidebarNav::ID,
            Tag\AmpSkimlinks::ID,
            Tag\AmpSmartlinks::ID,
            Tag\AmpSocialShare::ID,
            Tag\AmpSoundcloud::ID,
            Tag\AmpSpringboardPlayer::ID,
            Tag\AmpState::ID,
            Tag\AmpStickyAd::ID,
            Tag\AmpStory::ID,
            Tag\AmpStory360::ID,
            Tag\AmpStoryAnimation::ID,
            Tag\AmpStoryAnimationJsonScript::ID,
            Tag\AmpStoryAutoAds::ID,
            Tag\AmpStoryAutoAdsTemplate::ID,
            Tag\AmpStoryAutoAdsConfigScript::ID,
            Tag\AmpStoryAutoAnalytics::ID,
            Tag\AmpStoryBookend::ID,
            Tag\AmpStoryBookendExtensionJsonScript::ID,
            Tag\AmpStoryCaptions::ID,
            Tag\AmpStoryConsent::ID,
            Tag\AmpStoryConsentExtensionJsonScript::ID,
            Tag\AmpStoryCtaLayer::ID,
            Tag\AmpStoryCtaLayerAnimateIn::ID,
            Tag\AmpStoryGridLayer::ID,
            Tag\AmpStoryGridLayerAnimateIn::ID,
            Tag\AmpStoryGridLayerDefault::ID,
            Tag\AmpStoryInteractiveBinaryPoll::ID,
            Tag\AmpStoryInteractiveImgPoll::ID,
            Tag\AmpStoryInteractiveImgQuiz::ID,
            Tag\AmpStoryInteractivePoll::ID,
            Tag\AmpStoryInteractiveQuiz::ID,
            Tag\AmpStoryInteractiveResults::ID,
            Tag\AmpStoryPage::ID,
            Tag\AmpStoryPageAttachment::ID,
            Tag\AmpStoryPageAttachmentHref::ID,
            Tag\AmpStoryPageOutlink::ID,
            Tag\AmpStoryPanningMedia::ID,
            Tag\AmpStoryPlayer::ID,
            Tag\AmpStoryPlayerImg::ID,
            Tag\AmpStoryShoppingAttachment::ID,
            Tag\AmpStoryShoppingConfig::ID,
            Tag\AmpStoryShoppingTag::ID,
            Tag\AmpStorySocialShare::ID,
            Tag\AmpStorySocialShareExtensionJsonScript::ID,
            Tag\AmpStorySubscriptions::ID,
            Tag\AmpStoryAmpAudio::ID,
            Tag\AmpStoryAmpSidebar::ID,
            Tag\AmpStoryAmpStoryPageAttachmentAmpVideo::ID,
            Tag\AmpStoryAmpVideo::ID,
            Tag\AmpStreamGallery::ID,
            Tag\AmpSubscriptionsExtensionJsonScript::ID,
            Tag\AmpTiktok::ID,
            Tag\AmpTiktokBlockquote::ID,
            Tag\AmpTimeago::ID,
            Tag\AmpTruncateText::ID,
            Tag\AmpTwitter::ID,
            Tag\AmpUserNotification::ID,
            Tag\AmpVideo::ID,
            Tag\AmpVideoIframe::ID,
            Tag\AmpVideoIframeTransformed::ID,
            Tag\AmpVideoSource::ID,
            Tag\AmpVideoTrack::ID,
            Tag\AmpVideoTrackKindSubtitles::ID,
            Tag\AmpVimeo::ID,
            Tag\AmpVine::ID,
            Tag\AmpViqeoPlayer::ID,
            Tag\AmpVk::ID,
            Tag\AmpWebPush::ID,
            Tag\AmpWebPushWidget::ID,
            Tag\AmpWistiaPlayer::ID,
            Tag\AmpWordpressEmbed::ID,
            Tag\AmpYotpo::ID,
            Tag\AmpYoutube::ID,
            Tag\AmphtmlEngineScript::ID,
            Tag\AmphtmlEngineScriptLts::ID,
            Tag\AmphtmlEngineScriptLtsTransformed::ID,
            Tag\AmphtmlEngineScriptTransformed::ID,
            Tag\AmphtmlModuleEngineScript::ID,
            Tag\AmphtmlModuleLtsEngineScript::ID,
            Tag\AmphtmlNomoduleEngineScript::ID,
            Tag\AmphtmlNomoduleLtsEngineScript::ID,
            Tag\Article::ID,
            Tag\Aside::ID,
            Tag\Audio::ID,
            Tag\AudioSource::ID,
            Tag\AudioTrack::ID,
            Tag\AudioTrackKindSubtitles::ID,
            Tag\B::ID,
            Tag\Base::ID,
            Tag\Bdi::ID,
            Tag\Bdo::ID,
            Tag\Big::ID,
            Tag\Blockquote::ID,
            Tag\BlockquoteWithTiktok::ID,
            Tag\Body::ID,
            Tag\Br::ID,
            Tag\Button::ID,
            Tag\ButtonAmpNestedMenu::ID,
            Tag\Canvas::ID,
            Tag\Caption::ID,
            Tag\Center::ID,
            Tag\Circle::ID,
            Tag\Cite::ID,
            Tag\Clippath::ID,
            Tag\Code::ID,
            Tag\Col::ID,
            Tag\Colgroup::ID,
            Tag\CryptokeysJsonScript::ID,
            Tag\Data::ID,
            Tag\Datalist::ID,
            Tag\Dd::ID,
            Tag\Defs::ID,
            Tag\Del::ID,
            Tag\Desc::ID,
            Tag\Details::ID,
            Tag\Dfn::ID,
            Tag\Dir::ID,
            Tag\Div::ID,
            Tag\DivAmpNestedMenu::ID,
            Tag\Dl::ID,
            Tag\Dt::ID,
            Tag\Ellipse::ID,
            Tag\Em::ID,
            Tag\Feblend::ID,
            Tag\Fecolormatrix::ID,
            Tag\Fecomponenttransfer::ID,
            Tag\Fecomposite::ID,
            Tag\Feconvolvematrix::ID,
            Tag\Fediffuselighting::ID,
            Tag\Fedisplacementmap::ID,
            Tag\Fedistantlight::ID,
            Tag\Fedropshadow::ID,
            Tag\Feflood::ID,
            Tag\Fefunca::ID,
            Tag\Fefuncb::ID,
            Tag\Fefuncg::ID,
            Tag\Fefuncr::ID,
            Tag\Fegaussianblur::ID,
            Tag\Femerge::ID,
            Tag\Femergenode::ID,
            Tag\Femorphology::ID,
            Tag\Feoffset::ID,
            Tag\Fepointlight::ID,
            Tag\Fespecularlighting::ID,
            Tag\Fespotlight::ID,
            Tag\Fetile::ID,
            Tag\Feturbulence::ID,
            Tag\Fieldset::ID,
            Tag\Figcaption::ID,
            Tag\Figure::ID,
            Tag\Filter::ID,
            Tag\Footer::ID,
            Tag\FormDivSubmitError::ID,
            Tag\FormDivSubmitErrorTemplate::ID,
            Tag\FormDivSubmitSuccess::ID,
            Tag\FormDivSubmitSuccessTemplate::ID,
            Tag\FormDivSubmitting::ID,
            Tag\FormDivSubmittingTemplate::ID,
            Tag\FormDivVerifyError::ID,
            Tag\FormDivVerifyErrorTemplate::ID,
            Tag\FormMethodGet::ID,
            Tag\FormMethodPost::ID,
            Tag\G::ID,
            Tag\Glyph::ID,
            Tag\Glyphref::ID,
            Tag\H1::ID,
            Tag\H2::ID,
            Tag\H2AmpNestedMenu::ID,
            Tag\H3::ID,
            Tag\H3AmpNestedMenu::ID,
            Tag\H4::ID,
            Tag\H4AmpNestedMenu::ID,
            Tag\H5::ID,
            Tag\H5AmpNestedMenu::ID,
            Tag\H6::ID,
            Tag\H6AmpNestedMenu::ID,
            Tag\Head::ID,
            Tag\HeadStyleAmpBoilerplate::ID,
            Tag\Header::ID,
            Tag\HeroImage::ID,
            Tag\HeroImg::ID,
            Tag\Hgroup::ID,
            Tag\Hkern::ID,
            Tag\Hr::ID,
            Tag\Html::ID,
            Tag\HtmlTransformed::ID,
            Tag\HtmlDoctype::ID,
            Tag\I::ID,
            Tag\IAmphtmlSizerIntrinsic::ID,
            Tag\IAmphtmlSizerResponsive::ID,
            Tag\Iframe::ID,
            Tag\Image::ID,
            Tag\ImageUsingSrcset::ID,
            Tag\ImgIAmphtmlIntrinsicSizer::ID,
            Tag\ImgIAmphtmlIntrinsicSizerAmpStoryPlayer::ID,
            Tag\ImgUsingSrcset::ID,
            Tag\Input::ID,
            Tag\InputMaskDateDdMmYyyy::ID,
            Tag\InputMaskDateMmDdYyyy::ID,
            Tag\InputMaskDateMmYy::ID,
            Tag\InputMaskDateYyyyMmDd::ID,
            Tag\InputMaskPaymentCard::ID,
            Tag\InputMaskCustomMask::ID,
            Tag\InputTypeFile::ID,
            Tag\InputTypeImage::ID,
            Tag\InputTypePassword::ID,
            Tag\Ins::ID,
            Tag\Kbd::ID,
            Tag\Label::ID,
            Tag\Legend::ID,
            Tag\Li::ID,
            Tag\Line::ID,
            Tag\Lineargradient::ID,
            Tag\LineargradientStop::ID,
            Tag\LinkItemprop::ID,
            Tag\LinkItempropSameas::ID,
            Tag\LinkProperty::ID,
            Tag\LinkRel::ID,
            Tag\LinkRelCanonical::ID,
            Tag\LinkRelManifest::ID,
            Tag\LinkRelModulepreload::ID,
            Tag\LinkRelPreload::ID,
            Tag\LinkRelStylesheetForAmpStory10Css::ID,
            Tag\LinkRelStylesheetForFonts::ID,
            Tag\Listing::ID,
            Tag\Main::ID,
            Tag\Mark::ID,
            Tag\Marker::ID,
            Tag\Mask::ID,
            Tag\MetaCharsetUtf8::ID,
            Tag\Metadata::ID,
            Tag\MetaHttpEquivContentLanguage::ID,
            Tag\MetaHttpEquivContentScriptType::ID,
            Tag\MetaHttpEquivContentStyleType::ID,
            Tag\MetaHttpEquivContentType::ID,
            Tag\MetaHttpEquivImagetoolbar::ID,
            Tag\MetaHttpEquivOriginTrial::ID,
            Tag\MetaHttpEquivPicsLabel::ID,
            Tag\MetaHttpEquivResourceType::ID,
            Tag\MetaHttpEquivXDnsPrefetchControl::ID,
            Tag\MetaHttpEquivXUaCompatible::ID,
            Tag\MetaNameAmp3pIframeSrc::ID,
            Tag\MetaNameAmpAdDoubleclickSra::ID,
            Tag\MetaNameAmpAdEnableRefresh::ID,
            Tag\MetaNameAmpConsentBlocking::ID,
            Tag\MetaNameAmpExperimentToken::ID,
            Tag\MetaNameAmpExperimentsOptIn::ID,
            Tag\MetaNameAmpGoogleClientidIdApi::ID,
            Tag\MetaNameAmpLinkVariableAllowedOrigin::ID,
            Tag\MetaNameAmpListLoadMore::ID,
            Tag\MetaNameAmpRecaptchaInput::ID,
            Tag\MetaNameAmpScriptSrc::ID,
            Tag\MetaNameAmpStoryGeneratorName::ID,
            Tag\MetaNameAmpStoryGeneratorVersion::ID,
            Tag\MetaNameAmpToAmpNavigation::ID,
            Tag\MetaNameAndContent::ID,
            Tag\MetaNameAppleItunesApp::ID,
            Tag\MetaNameViewport::ID,
            Tag\Meter::ID,
            Tag\Multicol::ID,
            Tag\Nav::ID,
            Tag\Nextid::ID,
            Tag\Nobr::ID,
            Tag\Noscript::ID,
            Tag\NoscriptImg::ID,
            Tag\NoscriptStyleAmpBoilerplate::ID,
            Tag\NoscriptEnclosureForAmpStyleTags::ID,
            Tag\OP::ID,
            Tag\Ol::ID,
            Tag\Optgroup::ID,
            Tag\Option::ID,
            Tag\Output::ID,
            Tag\P::ID,
            Tag\Path::ID,
            Tag\Pattern::ID,
            Tag\Picture::ID,
            Tag\PictureSource::ID,
            Tag\Polygon::ID,
            Tag\Polyline::ID,
            Tag\Pre::ID,
            Tag\Progress::ID,
            Tag\Q::ID,
            Tag\Radialgradient::ID,
            Tag\RadialgradientStop::ID,
            Tag\Rb::ID,
            Tag\Rect::ID,
            Tag\Rp::ID,
            Tag\Rt::ID,
            Tag\Rtc::ID,
            Tag\Ruby::ID,
            Tag\S::ID,
            Tag\Samp::ID,
            Tag\ScriptAmpOnerrorV0Js::ID,
            Tag\ScriptAmpOnerrorV0JsOrV0Mjs::ID,
            Tag\ScriptAmpStoryDvhPolyfill::ID,
            Tag\ScriptIdAmpRtc::ID,
            Tag\ScriptTypeApplicationLdJson::ID,
            Tag\ScriptTypeTextPlain::ID,
            Tag\ScriptAmp3dGltf::ID,
            Tag\ScriptAmp3qPlayer::ID,
            Tag\ScriptAmpAccessFewcents::ID,
            Tag\ScriptAmpAccessLaterpay::ID,
            Tag\ScriptAmpAccessPoool::ID,
            Tag\ScriptAmpAccessScroll::ID,
            Tag\ScriptAmpAccess::ID,
            Tag\ScriptAmpAccordion::ID,
            Tag\ScriptAmpAccordion2::ID,
            Tag\ScriptAmpActionMacro::ID,
            Tag\ScriptAmpAdCustom::ID,
            Tag\ScriptAmpAddthis::ID,
            Tag\ScriptAmpAnalytics::ID,
            Tag\ScriptAmpAnimation::ID,
            Tag\ScriptAmpAnim::ID,
            Tag\ScriptAmpApesterMedia::ID,
            Tag\ScriptAmpAppBanner::ID,
            Tag\ScriptAmpAudio::ID,
            Tag\ScriptAmpAutoAds::ID,
            Tag\ScriptAmpAutocomplete::ID,
            Tag\ScriptAmpBaseCarousel::ID,
            Tag\ScriptAmpBeopinion::ID,
            Tag\ScriptAmpBind::ID,
            Tag\ScriptAmpBodymovinAnimation::ID,
            Tag\ScriptAmpBridPlayer::ID,
            Tag\ScriptAmpBrightcove::ID,
            Tag\ScriptAmpBrightcove2::ID,
            Tag\ScriptAmpBysideContent::ID,
            Tag\ScriptAmpCacheUrl::ID,
            Tag\ScriptAmpCallTracking::ID,
            Tag\ScriptAmpCarousel::ID,
            Tag\ScriptAmpConnatixPlayer::ID,
            Tag\ScriptAmpConsent::ID,
            Tag\ScriptAmpDailymotion::ID,
            Tag\ScriptAmpDailymotion2::ID,
            Tag\ScriptAmpDateCountdown::ID,
            Tag\ScriptAmpDateDisplay::ID,
            Tag\ScriptAmpDatePicker::ID,
            Tag\ScriptAmpDelightPlayer::ID,
            Tag\ScriptAmpDynamicCssClasses::ID,
            Tag\ScriptAmpEmbedlyCard::ID,
            Tag\ScriptAmpExperiment::ID,
            Tag\ScriptAmpFacebookComments::ID,
            Tag\ScriptAmpFacebookLike::ID,
            Tag\ScriptAmpFacebookPage::ID,
            Tag\ScriptAmpFacebook::ID,
            Tag\ScriptAmpFitText::ID,
            Tag\ScriptAmpFitText2::ID,
            Tag\ScriptAmpFont::ID,
            Tag\ScriptAmpForm::ID,
            Tag\ScriptAmpFxCollection::ID,
            Tag\ScriptAmpFxFlyingCarpet::ID,
            Tag\ScriptAmpGeo::ID,
            Tag\ScriptAmpGfycat::ID,
            Tag\ScriptAmpGist::ID,
            Tag\ScriptAmpGoogleDocumentEmbed::ID,
            Tag\ScriptAmpGoogleReadAloudPlayer::ID,
            Tag\ScriptAmpHulu::ID,
            Tag\ScriptAmpIframely::ID,
            Tag\ScriptAmpIframe::ID,
            Tag\ScriptAmpIframe2::ID,
            Tag\ScriptAmpImaVideo::ID,
            Tag\ScriptAmpImageLightbox::ID,
            Tag\ScriptAmpImageSlider::ID,
            Tag\ScriptAmpImgur::ID,
            Tag\ScriptAmpInlineGallery::ID,
            Tag\ScriptAmpInputmask::ID,
            Tag\ScriptAmpInstagram::ID,
            Tag\ScriptAmpInstagram2::ID,
            Tag\ScriptAmpInstallServiceworker::ID,
            Tag\ScriptAmpIzlesene::ID,
            Tag\ScriptAmpJwplayer::ID,
            Tag\ScriptAmpKalturaPlayer::ID,
            Tag\ScriptAmpLightboxGallery::ID,
            Tag\ScriptAmpLightbox::ID,
            Tag\ScriptAmpLightbox2::ID,
            Tag\ScriptAmpLinkRewriter::ID,
            Tag\ScriptAmpList::ID,
            Tag\ScriptAmpLiveList::ID,
            Tag\ScriptAmpMathml::ID,
            Tag\ScriptAmpMathml2::ID,
            Tag\ScriptAmpMegaMenu::ID,
            Tag\ScriptAmpMegaphone::ID,
            Tag\ScriptAmpMinuteMediaPlayer::ID,
            Tag\ScriptAmpMowplayer::ID,
            Tag\ScriptAmpMustache::ID,
            Tag\ScriptAmpNestedMenu::ID,
            Tag\ScriptAmpNextPage::ID,
            Tag\ScriptAmpNexxtvPlayer::ID,
            Tag\ScriptAmpO2Player::ID,
            Tag\ScriptAmpOnetapGoogle::ID,
            Tag\ScriptAmpOoyalaPlayer::ID,
            Tag\ScriptAmpOrientationObserver::ID,
            Tag\ScriptAmpPanZoom::ID,
            Tag\ScriptAmpPinterest::ID,
            Tag\ScriptAmpPlaybuzz::ID,
            Tag\ScriptAmpPositionObserver::ID,
            Tag\ScriptAmpPowrPlayer::ID,
            Tag\ScriptAmpReachPlayer::ID,
            Tag\ScriptAmpRecaptchaInput::ID,
            Tag\ScriptAmpRedbullPlayer::ID,
            Tag\ScriptAmpReddit::ID,
            Tag\ScriptAmpRender::ID,
            Tag\ScriptAmpRiddleQuiz::ID,
            Tag\ScriptAmpScript::ID,
            Tag\ScriptAmpSelector::ID,
            Tag\ScriptAmpSelector2::ID,
            Tag\ScriptAmpSidebar::ID,
            Tag\ScriptAmpSidebar2::ID,
            Tag\ScriptAmpSkimlinks::ID,
            Tag\ScriptAmpSlides::ID,
            Tag\ScriptAmpSmartlinks::ID,
            Tag\ScriptAmpSocialShare::ID,
            Tag\ScriptAmpSocialShare2::ID,
            Tag\ScriptAmpSoundcloud::ID,
            Tag\ScriptAmpSoundcloud2::ID,
            Tag\ScriptAmpSpringboardPlayer::ID,
            Tag\ScriptAmpStickyAd::ID,
            Tag\ScriptAmpStory360::ID,
            Tag\ScriptAmpStoryAutoAds::ID,
            Tag\ScriptAmpStoryAutoAnalytics::ID,
            Tag\ScriptAmpStoryCaptions::ID,
            Tag\ScriptAmpStoryInteractive::ID,
            Tag\ScriptAmpStoryPanningMedia::ID,
            Tag\ScriptAmpStoryPlayer::ID,
            Tag\ScriptAmpStoryShopping::ID,
            Tag\ScriptAmpStorySubscriptions::ID,
            Tag\ScriptAmpStory::ID,
            Tag\ScriptAmpStreamGallery::ID,
            Tag\ScriptAmpSubscriptionsGoogle::ID,
            Tag\ScriptAmpSubscriptions::ID,
            Tag\ScriptAmpTiktok::ID,
            Tag\ScriptAmpTimeago::ID,
            Tag\ScriptAmpTruncateText::ID,
            Tag\ScriptAmpTwitter::ID,
            Tag\ScriptAmpTwitter2::ID,
            Tag\ScriptAmpUserNotification::ID,
            Tag\ScriptAmpVideoDocking::ID,
            Tag\ScriptAmpVideoIframe::ID,
            Tag\ScriptAmpVideoIframe2::ID,
            Tag\ScriptAmpVideo::ID,
            Tag\ScriptAmpVideo2::ID,
            Tag\ScriptAmpVimeo::ID,
            Tag\ScriptAmpVimeo2::ID,
            Tag\ScriptAmpVine::ID,
            Tag\ScriptAmpViqeoPlayer::ID,
            Tag\ScriptAmpVk::ID,
            Tag\ScriptAmpWebPush::ID,
            Tag\ScriptAmpWistiaPlayer::ID,
            Tag\ScriptAmpWordpressEmbed::ID,
            Tag\ScriptAmpYotpo::ID,
            Tag\ScriptAmpYoutube::ID,
            Tag\ScriptAmpYoutube2::ID,
            Tag\Section::ID,
            Tag\Select::ID,
            Tag\Slot::ID,
            Tag\Small::ID,
            Tag\Solidcolor::ID,
            Tag\Spacer::ID,
            Tag\Span::ID,
            Tag\SpanAmpNestedMenu::ID,
            Tag\SpanSwgAmpCacheNonce::ID,
            Tag\StandardImage::ID,
            Tag\StandardImg::ID,
            Tag\Strike::ID,
            Tag\Strong::ID,
            Tag\StyleAmpCustom::ID,
            Tag\StyleAmpCustomLengthCheck::ID,
            Tag\StyleAmpNoscript::ID,
            Tag\StyleAmpKeyframes::ID,
            Tag\StyleAmpRuntimeTransformed::ID,
            Tag\Sub::ID,
            Tag\SubscriptionsSectionContentSwgAmpCacheNonce::ID,
            Tag\SubscriptionsScriptCiphertext::ID,
            Tag\Summary::ID,
            Tag\Sup::ID,
            Tag\Svg::ID,
            Tag\SvgTitle::ID,
            Tag\Switch_::ID,
            Tag\Symbol::ID,
            Tag\Table::ID,
            Tag\Tbody::ID,
            Tag\Td::ID,
            Tag\Template::ID,
            Tag\Text::ID,
            Tag\Textarea::ID,
            Tag\Textpath::ID,
            Tag\Tfoot::ID,
            Tag\Th::ID,
            Tag\Thead::ID,
            Tag\Time::ID,
            Tag\Title::ID,
            Tag\Tr::ID,
            Tag\Tref::ID,
            Tag\Tspan::ID,
            Tag\Tt::ID,
            Tag\U::ID,
            Tag\Ul::ID,
            Tag\Use_::ID,
            Tag\Var_::ID,
            Tag\Video::ID,
            Tag\VideoSource::ID,
            Tag\VideoTrack::ID,
            Tag\VideoTrackKindSubtitles::ID,
            Tag\View::ID,
            Tag\Vkern::ID,
            Tag\Wbr::ID,
        ],
        Format::AMP4ADS => [
            Tag\A::ID,
            Tag\Abbr::ID,
            Tag\Address::ID,
            Tag\AmpAccordion::ID,
            Tag\AmpAccordionSection::ID,
            Tag\AmpAdExit::ID,
            Tag\AmpAdExitConfigurationJson::ID,
            Tag\AmpAnalytics::ID,
            Tag\AmpAnalyticsExtensionJsonScript::ID,
            Tag\AmpAnim::ID,
            Tag\AmpAnimation::ID,
            Tag\AmpAnimationExtensionJsonScript::ID,
            Tag\AmpAppBannerButtonOpenButton::ID,
            Tag\AmpAudioA4a::ID,
            Tag\AmpAudioSource::ID,
            Tag\AmpAudioTrack::ID,
            Tag\AmpAudioTrackKindSubtitles::ID,
            Tag\AmpBindExtensionJsonScript::ID,
            Tag\AmpCarousel::ID,
            Tag\AmpFitText::ID,
            Tag\AmpFont::ID,
            Tag\AmpGwdAnimation::ID,
            Tag\AmpImaVideoSource::ID,
            Tag\AmpImg::ID,
            Tag\AmpLayout::ID,
            Tag\AmpLightboxAmp4ads::ID,
            Tag\AmpListDivFetchError::ID,
            Tag\AmpPixel::ID,
            Tag\AmpPositionObserver::ID,
            Tag\AmpSelector::ID,
            Tag\AmpSelectorChild::ID,
            Tag\AmpSelectorOption::ID,
            Tag\AmpSocialShare::ID,
            Tag\AmpStateAmp4email::ID,
            Tag\AmpStoryAmpStoryPageAttachmentAmpVideo::ID,
            Tag\AmpStoryAmpVideo::ID,
            Tag\AmpVideo::ID,
            Tag\AmpVideoSource::ID,
            Tag\AmpVideoTrack::ID,
            Tag\AmpVideoTrackKindSubtitles::ID,
            Tag\Amp4adsEngineScript::ID,
            Tag\Article::ID,
            Tag\Aside::ID,
            Tag\AudioSource::ID,
            Tag\AudioTrack::ID,
            Tag\AudioTrackKindSubtitles::ID,
            Tag\B::ID,
            Tag\Base::ID,
            Tag\Bdi::ID,
            Tag\Bdo::ID,
            Tag\Blockquote::ID,
            Tag\Body::ID,
            Tag\Br::ID,
            Tag\Button::ID,
            Tag\Caption::ID,
            Tag\Circle::ID,
            Tag\Cite::ID,
            Tag\Clippath::ID,
            Tag\Code::ID,
            Tag\Col::ID,
            Tag\Colgroup::ID,
            Tag\Data::ID,
            Tag\Datalist::ID,
            Tag\Dd::ID,
            Tag\Defs::ID,
            Tag\Del::ID,
            Tag\Desc::ID,
            Tag\Details::ID,
            Tag\Dfn::ID,
            Tag\Div::ID,
            Tag\Dl::ID,
            Tag\Dt::ID,
            Tag\Ellipse::ID,
            Tag\Em::ID,
            Tag\Feblend::ID,
            Tag\Fecolormatrix::ID,
            Tag\Fecomponenttransfer::ID,
            Tag\Fecomposite::ID,
            Tag\Feconvolvematrix::ID,
            Tag\Fediffuselighting::ID,
            Tag\Fedisplacementmap::ID,
            Tag\Fedistantlight::ID,
            Tag\Fedropshadow::ID,
            Tag\Feflood::ID,
            Tag\Fefunca::ID,
            Tag\Fefuncb::ID,
            Tag\Fefuncg::ID,
            Tag\Fefuncr::ID,
            Tag\Fegaussianblur::ID,
            Tag\Femerge::ID,
            Tag\Femergenode::ID,
            Tag\Femorphology::ID,
            Tag\Feoffset::ID,
            Tag\Fepointlight::ID,
            Tag\Fespecularlighting::ID,
            Tag\Fespotlight::ID,
            Tag\Fetile::ID,
            Tag\Feturbulence::ID,
            Tag\Fieldset::ID,
            Tag\Figcaption::ID,
            Tag\Figure::ID,
            Tag\Filter::ID,
            Tag\Footer::ID,
            Tag\FormDivSubmitError::ID,
            Tag\FormDivSubmitErrorTemplate::ID,
            Tag\FormDivSubmitSuccess::ID,
            Tag\FormDivSubmitSuccessTemplate::ID,
            Tag\FormDivSubmitting::ID,
            Tag\FormDivSubmittingTemplate::ID,
            Tag\FormDivVerifyError::ID,
            Tag\FormDivVerifyErrorTemplate::ID,
            Tag\FormMethodGet::ID,
            Tag\FormMethodPost::ID,
            Tag\G::ID,
            Tag\Glyph::ID,
            Tag\Glyphref::ID,
            Tag\H1::ID,
            Tag\H2::ID,
            Tag\H3::ID,
            Tag\H4::ID,
            Tag\H5::ID,
            Tag\H6::ID,
            Tag\Head::ID,
            Tag\HeadStyleAmp4adsBoilerplate::ID,
            Tag\Header::ID,
            Tag\Hkern::ID,
            Tag\Hr::ID,
            Tag\Html::ID,
            Tag\HtmlDoctypeAmp4ads::ID,
            Tag\I::ID,
            Tag\Image::ID,
            Tag\Input::ID,
            Tag\Ins::ID,
            Tag\Kbd::ID,
            Tag\Label::ID,
            Tag\Legend::ID,
            Tag\Li::ID,
            Tag\Line::ID,
            Tag\Lineargradient::ID,
            Tag\LineargradientStop::ID,
            Tag\LinkItemprop::ID,
            Tag\LinkItempropSameas::ID,
            Tag\LinkProperty::ID,
            Tag\LinkRel::ID,
            Tag\LinkRelManifest::ID,
            Tag\LinkRelPreload::ID,
            Tag\LinkRelStylesheetForFonts::ID,
            Tag\Main::ID,
            Tag\Mark::ID,
            Tag\Marker::ID,
            Tag\Mask::ID,
            Tag\MetaCharsetUtf8::ID,
            Tag\Metadata::ID,
            Tag\MetaHttpEquivContentLanguage::ID,
            Tag\MetaHttpEquivContentScriptType::ID,
            Tag\MetaHttpEquivContentStyleType::ID,
            Tag\MetaHttpEquivContentType::ID,
            Tag\MetaHttpEquivImagetoolbar::ID,
            Tag\MetaHttpEquivOriginTrial::ID,
            Tag\MetaHttpEquivPicsLabel::ID,
            Tag\MetaHttpEquivResourceType::ID,
            Tag\MetaHttpEquivXUaCompatible::ID,
            Tag\MetaNameAmpAdEnableRefresh::ID,
            Tag\MetaNameAmpCtaLandingPageType::ID,
            Tag\MetaNameAmpCtaType::ID,
            Tag\MetaNameAmpCtaUrl::ID,
            Tag\MetaNameAmpExperimentsOptIn::ID,
            Tag\MetaNameAmp4adsId::ID,
            Tag\MetaNameAmp4adsVars::ID,
            Tag\MetaNameAndContent::ID,
            Tag\MetaNameAppleItunesApp::ID,
            Tag\MetaNameViewport::ID,
            Tag\Meter::ID,
            Tag\Nav::ID,
            Tag\Ol::ID,
            Tag\Optgroup::ID,
            Tag\Option::ID,
            Tag\Output::ID,
            Tag\P::ID,
            Tag\Path::ID,
            Tag\Pattern::ID,
            Tag\Polygon::ID,
            Tag\Polyline::ID,
            Tag\Pre::ID,
            Tag\Progress::ID,
            Tag\Q::ID,
            Tag\Radialgradient::ID,
            Tag\RadialgradientStop::ID,
            Tag\Rb::ID,
            Tag\Rect::ID,
            Tag\Rp::ID,
            Tag\Rt::ID,
            Tag\Rtc::ID,
            Tag\Ruby::ID,
            Tag\S::ID,
            Tag\Samp::ID,
            Tag\ScriptTypeApplicationLdJson::ID,
            Tag\ScriptTypeTextPlain::ID,
            Tag\ScriptAmpAccordion2::ID,
            Tag\ScriptAmpAdExit::ID,
            Tag\ScriptAmpAnalytics::ID,
            Tag\ScriptAmpAnimation::ID,
            Tag\ScriptAmpAnim::ID,
            Tag\ScriptAmpAudio::ID,
            Tag\ScriptAmpBind::ID,
            Tag\ScriptAmpCarousel::ID,
            Tag\ScriptAmpFitText2::ID,
            Tag\ScriptAmpFont::ID,
            Tag\ScriptAmpForm::ID,
            Tag\ScriptAmpGwdAnimation::ID,
            Tag\ScriptAmpMraid::ID,
            Tag\ScriptAmpPositionObserver::ID,
            Tag\ScriptAmpSelector2::ID,
            Tag\ScriptAmpSocialShare2::ID,
            Tag\ScriptAmpVideo2::ID,
            Tag\ScriptCustomElementAmpLightboxAmp4ads::ID,
            Tag\ScriptCustomTemplateAmpMustacheAmp4ads::ID,
            Tag\Section::ID,
            Tag\Select::ID,
            Tag\Small::ID,
            Tag\Solidcolor::ID,
            Tag\Span::ID,
            Tag\Strong::ID,
            Tag\StyleAmpCustomAmp4ads::ID,
            Tag\StyleAmpCustomLengthCheck::ID,
            Tag\StyleAmpKeyframes::ID,
            Tag\Sub::ID,
            Tag\Summary::ID,
            Tag\Sup::ID,
            Tag\Svg::ID,
            Tag\SvgTitle::ID,
            Tag\Switch_::ID,
            Tag\Symbol::ID,
            Tag\Table::ID,
            Tag\Tbody::ID,
            Tag\Td::ID,
            Tag\Template::ID,
            Tag\Text::ID,
            Tag\Textarea::ID,
            Tag\Textpath::ID,
            Tag\Tfoot::ID,
            Tag\Th::ID,
            Tag\Thead::ID,
            Tag\Time::ID,
            Tag\Title::ID,
            Tag\Tr::ID,
            Tag\Tref::ID,
            Tag\Tspan::ID,
            Tag\U::ID,
            Tag\Ul::ID,
            Tag\Use_::ID,
            Tag\Var_::ID,
            Tag\VideoSource::ID,
            Tag\VideoTrack::ID,
            Tag\VideoTrackKindSubtitles::ID,
            Tag\View::ID,
            Tag\Vkern::ID,
            Tag\Wbr::ID,
        ],
        Format::AMP4EMAIL => [
            Tag\AAmp4email::ID,
            Tag\Abbr::ID,
            Tag\Address::ID,
            Tag\AmpAccordion::ID,
            Tag\AmpAccordionSection::ID,
            Tag\AmpAnimAmp4email::ID,
            Tag\AmpAnimExtensionScriptAmp4email::ID,
            Tag\AmpAutocompleteAmp4email::ID,
            Tag\AmpBindMacro::ID,
            Tag\AmpBindExtensionJsonScript::ID,
            Tag\AmpCarousel::ID,
            Tag\AmpFitText::ID,
            Tag\AmpImageLightbox::ID,
            Tag\AmpImgAmp4email::ID,
            Tag\AmpLayout::ID,
            Tag\AmpLightbox::ID,
            Tag\AmpListAmp4email::ID,
            Tag\AmpListDivFetchError::ID,
            Tag\AmpSelector::ID,
            Tag\AmpSelectorChild::ID,
            Tag\AmpSelectorOption::ID,
            Tag\AmpSidebarAmp4email::ID,
            Tag\AmpSidebarNav::ID,
            Tag\AmpStateAmp4email::ID,
            Tag\AmpTimeago::ID,
            Tag\AmphtmlEngineScriptAmp4email::ID,
            Tag\Article::ID,
            Tag\Aside::ID,
            Tag\B::ID,
            Tag\Bdo::ID,
            Tag\Blockquote::ID,
            Tag\Body::ID,
            Tag\Br::ID,
            Tag\Button::ID,
            Tag\Caption::ID,
            Tag\Cite::ID,
            Tag\Code::ID,
            Tag\Col::ID,
            Tag\Colgroup::ID,
            Tag\Data::ID,
            Tag\Datalist::ID,
            Tag\Dd::ID,
            Tag\Del::ID,
            Tag\Details::ID,
            Tag\Dfn::ID,
            Tag\Div::ID,
            Tag\Dl::ID,
            Tag\Dt::ID,
            Tag\Em::ID,
            Tag\Fieldset::ID,
            Tag\Figcaption::ID,
            Tag\Figure::ID,
            Tag\Footer::ID,
            Tag\FormDivSubmitError::ID,
            Tag\FormDivSubmitErrorTemplate::ID,
            Tag\FormDivSubmitSuccess::ID,
            Tag\FormDivSubmitSuccessTemplate::ID,
            Tag\FormDivSubmitting::ID,
            Tag\FormMethodGetAmp4email::ID,
            Tag\FormMethodPostAmp4email::ID,
            Tag\H1::ID,
            Tag\H2::ID,
            Tag\H3::ID,
            Tag\H4::ID,
            Tag\H5::ID,
            Tag\H6::ID,
            Tag\Head::ID,
            Tag\HeadStyleAmp4emailBoilerplate::ID,
            Tag\Header::ID,
            Tag\Hr::ID,
            Tag\Html::ID,
            Tag\HtmlDoctype::ID,
            Tag\I::ID,
            Tag\Input::ID,
            Tag\Ins::ID,
            Tag\Kbd::ID,
            Tag\Label::ID,
            Tag\Legend::ID,
            Tag\Li::ID,
            Tag\Main::ID,
            Tag\Mark::ID,
            Tag\MetaCharsetUtf8::ID,
            Tag\MetaNameAndContent::ID,
            Tag\Meter::ID,
            Tag\Nav::ID,
            Tag\Ol::ID,
            Tag\Optgroup::ID,
            Tag\Option::ID,
            Tag\Output::ID,
            Tag\P::ID,
            Tag\Pre::ID,
            Tag\Progress::ID,
            Tag\Q::ID,
            Tag\Rb::ID,
            Tag\Rp::ID,
            Tag\Rt::ID,
            Tag\Ruby::ID,
            Tag\S::ID,
            Tag\Samp::ID,
            Tag\ScriptTypeApplicationLdJson::ID,
            Tag\ScriptTypeTextPlainAmp4email::ID,
            Tag\ScriptCustomElementAmpAccordionAmp4email::ID,
            Tag\ScriptCustomElementAmpAutocompleteAmp4email::ID,
            Tag\ScriptCustomElementAmpBindAmp4email::ID,
            Tag\ScriptCustomElementAmpCarouselAmp4email::ID,
            Tag\ScriptCustomElementAmpFitTextAmp4email::ID,
            Tag\ScriptCustomElementAmpFormAmp4email::ID,
            Tag\ScriptCustomElementAmpImageLightboxAmp4email::ID,
            Tag\ScriptCustomElementAmpLightboxAmp4email::ID,
            Tag\ScriptCustomElementAmpListAmp4email::ID,
            Tag\ScriptCustomElementAmpSelectorAmp4email::ID,
            Tag\ScriptCustomElementAmpSidebarAmp4email::ID,
            Tag\ScriptCustomElementAmpTimeagoAmp4email::ID,
            Tag\ScriptCustomTemplateAmpMustacheAmp4email::ID,
            Tag\SectionAmp4email::ID,
            Tag\Select::ID,
            Tag\Small::ID,
            Tag\Span::ID,
            Tag\Strong::ID,
            Tag\StyleAmpCustomAmp4email::ID,
            Tag\StyleAmpCustomCssStrict::ID,
            Tag\StyleAmpCustomLengthCheck::ID,
            Tag\Sub::ID,
            Tag\Summary::ID,
            Tag\Sup::ID,
            Tag\Table::ID,
            Tag\Tbody::ID,
            Tag\Td::ID,
            Tag\TemplateAmp4email::ID,
            Tag\Textarea::ID,
            Tag\Tfoot::ID,
            Tag\Th::ID,
            Tag\Thead::ID,
            Tag\Time::ID,
            Tag\TitleAmp4email::ID,
            Tag\Tr::ID,
            Tag\U::ID,
            Tag\Ul::ID,
            Tag\Var_::ID,
            Tag\Wbr::ID,
        ],
    ];

    /**
     * Mapping of extension name to tag ID or array of tag IDs.
     *
     * This is used to optimize querying by extension spec.
     *
     * @var array<string|array<string>>
     */
    const BY_EXTENSION_SPEC = [
        Extension::AD => Tag\AmpAdExtensionScript::ID,
        Extension::ANIM => [
            Tag\AmpAnimExtensionScriptAmp4email::ID,
            Tag\ScriptAmpAnim::ID,
        ],
        Extension::FACEBOOK => [
            Tag\AmpFacebook10::ID,
            Tag\ScriptAmpFacebook::ID,
        ],
        Extension::_3D_GLTF => Tag\ScriptAmp3dGltf::ID,
        Extension::_3Q_PLAYER => Tag\ScriptAmp3qPlayer::ID,
        'amp-access-fewcents' => Tag\ScriptAmpAccessFewcents::ID,
        Extension::ACCESS_LATERPAY => Tag\ScriptAmpAccessLaterpay::ID,
        Extension::ACCESS_POOOL => Tag\ScriptAmpAccessPoool::ID,
        Extension::ACCESS_SCROLL => Tag\ScriptAmpAccessScroll::ID,
        Extension::ACCESS => Tag\ScriptAmpAccess::ID,
        Extension::ACCORDION => [
            Tag\ScriptAmpAccordion::ID,
            Tag\ScriptAmpAccordion2::ID,
            Tag\ScriptCustomElementAmpAccordionAmp4email::ID,
        ],
        Extension::ACTION_MACRO => Tag\ScriptAmpActionMacro::ID,
        Extension::AD_CUSTOM => Tag\ScriptAmpAdCustom::ID,
        Extension::AD_EXIT => Tag\ScriptAmpAdExit::ID,
        Extension::ADDTHIS => Tag\ScriptAmpAddthis::ID,
        Extension::ANALYTICS => Tag\ScriptAmpAnalytics::ID,
        Extension::ANIMATION => Tag\ScriptAmpAnimation::ID,
        Extension::APESTER_MEDIA => Tag\ScriptAmpApesterMedia::ID,
        Extension::APP_BANNER => Tag\ScriptAmpAppBanner::ID,
        Extension::AUDIO => Tag\ScriptAmpAudio::ID,
        Extension::AUTO_ADS => Tag\ScriptAmpAutoAds::ID,
        Extension::AUTOCOMPLETE => [
            Tag\ScriptAmpAutocomplete::ID,
            Tag\ScriptCustomElementAmpAutocompleteAmp4email::ID,
        ],
        Extension::BASE_CAROUSEL => Tag\ScriptAmpBaseCarousel::ID,
        Extension::BEOPINION => Tag\ScriptAmpBeopinion::ID,
        Extension::BIND => [
            Tag\ScriptAmpBind::ID,
            Tag\ScriptCustomElementAmpBindAmp4email::ID,
        ],
        Extension::BODYMOVIN_ANIMATION => Tag\ScriptAmpBodymovinAnimation::ID,
        Extension::BRID_PLAYER => Tag\ScriptAmpBridPlayer::ID,
        Extension::BRIGHTCOVE => [
            Tag\ScriptAmpBrightcove::ID,
            Tag\ScriptAmpBrightcove2::ID,
        ],
        Extension::BYSIDE_CONTENT => Tag\ScriptAmpBysideContent::ID,
        Extension::CACHE_URL => Tag\ScriptAmpCacheUrl::ID,
        Extension::CALL_TRACKING => Tag\ScriptAmpCallTracking::ID,
        Extension::CAROUSEL => [
            Tag\ScriptAmpCarousel::ID,
            Tag\ScriptCustomElementAmpCarouselAmp4email::ID,
        ],
        Extension::CONNATIX_PLAYER => Tag\ScriptAmpConnatixPlayer::ID,
        Extension::CONSENT => Tag\ScriptAmpConsent::ID,
        Extension::DAILYMOTION => [
            Tag\ScriptAmpDailymotion::ID,
            Tag\ScriptAmpDailymotion2::ID,
        ],
        Extension::DATE_COUNTDOWN => Tag\ScriptAmpDateCountdown::ID,
        Extension::DATE_DISPLAY => Tag\ScriptAmpDateDisplay::ID,
        Extension::DATE_PICKER => Tag\ScriptAmpDatePicker::ID,
        Extension::DELIGHT_PLAYER => Tag\ScriptAmpDelightPlayer::ID,
        Extension::DYNAMIC_CSS_CLASSES => Tag\ScriptAmpDynamicCssClasses::ID,
        Extension::EMBEDLY_CARD => Tag\ScriptAmpEmbedlyCard::ID,
        Extension::EXPERIMENT => Tag\ScriptAmpExperiment::ID,
        Extension::FACEBOOK_COMMENTS => Tag\ScriptAmpFacebookComments::ID,
        Extension::FACEBOOK_LIKE => Tag\ScriptAmpFacebookLike::ID,
        Extension::FACEBOOK_PAGE => Tag\ScriptAmpFacebookPage::ID,
        Extension::FIT_TEXT => [
            Tag\ScriptAmpFitText::ID,
            Tag\ScriptAmpFitText2::ID,
            Tag\ScriptCustomElementAmpFitTextAmp4email::ID,
        ],
        Extension::FONT => Tag\ScriptAmpFont::ID,
        Extension::FORM => [
            Tag\ScriptAmpForm::ID,
            Tag\ScriptCustomElementAmpFormAmp4email::ID,
        ],
        Extension::FX_COLLECTION => Tag\ScriptAmpFxCollection::ID,
        Extension::FX_FLYING_CARPET => Tag\ScriptAmpFxFlyingCarpet::ID,
        Extension::GEO => Tag\ScriptAmpGeo::ID,
        Extension::GFYCAT => Tag\ScriptAmpGfycat::ID,
        Extension::GIST => Tag\ScriptAmpGist::ID,
        Extension::GOOGLE_DOCUMENT_EMBED => Tag\ScriptAmpGoogleDocumentEmbed::ID,
        Extension::GOOGLE_READ_ALOUD_PLAYER => Tag\ScriptAmpGoogleReadAloudPlayer::ID,
        Extension::GWD_ANIMATION => Tag\ScriptAmpGwdAnimation::ID,
        Extension::HULU => Tag\ScriptAmpHulu::ID,
        Extension::IFRAMELY => Tag\ScriptAmpIframely::ID,
        Extension::IFRAME => [
            Tag\ScriptAmpIframe::ID,
            Tag\ScriptAmpIframe2::ID,
        ],
        Extension::IMA_VIDEO => Tag\ScriptAmpImaVideo::ID,
        Extension::IMAGE_LIGHTBOX => [
            Tag\ScriptAmpImageLightbox::ID,
            Tag\ScriptCustomElementAmpImageLightboxAmp4email::ID,
        ],
        Extension::IMAGE_SLIDER => Tag\ScriptAmpImageSlider::ID,
        Extension::IMGUR => Tag\ScriptAmpImgur::ID,
        Extension::INLINE_GALLERY => Tag\ScriptAmpInlineGallery::ID,
        Extension::INPUTMASK => Tag\ScriptAmpInputmask::ID,
        Extension::INSTAGRAM => [
            Tag\ScriptAmpInstagram::ID,
            Tag\ScriptAmpInstagram2::ID,
        ],
        Extension::INSTALL_SERVICEWORKER => Tag\ScriptAmpInstallServiceworker::ID,
        Extension::IZLESENE => Tag\ScriptAmpIzlesene::ID,
        Extension::JWPLAYER => Tag\ScriptAmpJwplayer::ID,
        Extension::KALTURA_PLAYER => Tag\ScriptAmpKalturaPlayer::ID,
        Extension::LIGHTBOX_GALLERY => Tag\ScriptAmpLightboxGallery::ID,
        Extension::LIGHTBOX => [
            Tag\ScriptAmpLightbox::ID,
            Tag\ScriptAmpLightbox2::ID,
            Tag\ScriptCustomElementAmpLightboxAmp4ads::ID,
            Tag\ScriptCustomElementAmpLightboxAmp4email::ID,
        ],
        Extension::LINK_REWRITER => Tag\ScriptAmpLinkRewriter::ID,
        Extension::LIST_ => [
            Tag\ScriptAmpList::ID,
            Tag\ScriptCustomElementAmpListAmp4email::ID,
        ],
        Extension::LIVE_LIST => Tag\ScriptAmpLiveList::ID,
        Extension::MATHML => [
            Tag\ScriptAmpMathml::ID,
            Tag\ScriptAmpMathml2::ID,
        ],
        Extension::MEGA_MENU => Tag\ScriptAmpMegaMenu::ID,
        Extension::MEGAPHONE => Tag\ScriptAmpMegaphone::ID,
        Extension::MINUTE_MEDIA_PLAYER => Tag\ScriptAmpMinuteMediaPlayer::ID,
        Extension::MOWPLAYER => Tag\ScriptAmpMowplayer::ID,
        Extension::MRAID => Tag\ScriptAmpMraid::ID,
        Extension::MUSTACHE => [
            Tag\ScriptAmpMustache::ID,
            Tag\ScriptCustomTemplateAmpMustacheAmp4ads::ID,
            Tag\ScriptCustomTemplateAmpMustacheAmp4email::ID,
        ],
        Extension::NESTED_MENU => Tag\ScriptAmpNestedMenu::ID,
        Extension::NEXT_PAGE => Tag\ScriptAmpNextPage::ID,
        Extension::NEXXTV_PLAYER => Tag\ScriptAmpNexxtvPlayer::ID,
        Extension::O2_PLAYER => Tag\ScriptAmpO2Player::ID,
        Extension::ONETAP_GOOGLE => Tag\ScriptAmpOnetapGoogle::ID,
        Extension::OOYALA_PLAYER => Tag\ScriptAmpOoyalaPlayer::ID,
        Extension::ORIENTATION_OBSERVER => Tag\ScriptAmpOrientationObserver::ID,
        Extension::PAN_ZOOM => Tag\ScriptAmpPanZoom::ID,
        Extension::PINTEREST => Tag\ScriptAmpPinterest::ID,
        Extension::PLAYBUZZ => Tag\ScriptAmpPlaybuzz::ID,
        Extension::POSITION_OBSERVER => Tag\ScriptAmpPositionObserver::ID,
        Extension::POWR_PLAYER => Tag\ScriptAmpPowrPlayer::ID,
        Extension::REACH_PLAYER => Tag\ScriptAmpReachPlayer::ID,
        Extension::RECAPTCHA_INPUT => Tag\ScriptAmpRecaptchaInput::ID,
        Extension::REDBULL_PLAYER => Tag\ScriptAmpRedbullPlayer::ID,
        Extension::REDDIT => Tag\ScriptAmpReddit::ID,
        Extension::RENDER => Tag\ScriptAmpRender::ID,
        Extension::RIDDLE_QUIZ => Tag\ScriptAmpRiddleQuiz::ID,
        Extension::SCRIPT => Tag\ScriptAmpScript::ID,
        Extension::SELECTOR => [
            Tag\ScriptAmpSelector::ID,
            Tag\ScriptAmpSelector2::ID,
            Tag\ScriptCustomElementAmpSelectorAmp4email::ID,
        ],
        Extension::SIDEBAR => [
            Tag\ScriptAmpSidebar::ID,
            Tag\ScriptAmpSidebar2::ID,
            Tag\ScriptCustomElementAmpSidebarAmp4email::ID,
        ],
        Extension::SKIMLINKS => Tag\ScriptAmpSkimlinks::ID,
        Extension::SLIDES => Tag\ScriptAmpSlides::ID,
        Extension::SMARTLINKS => Tag\ScriptAmpSmartlinks::ID,
        Extension::SOCIAL_SHARE => [
            Tag\ScriptAmpSocialShare::ID,
            Tag\ScriptAmpSocialShare2::ID,
        ],
        Extension::SOUNDCLOUD => [
            Tag\ScriptAmpSoundcloud::ID,
            Tag\ScriptAmpSoundcloud2::ID,
        ],
        Extension::SPRINGBOARD_PLAYER => Tag\ScriptAmpSpringboardPlayer::ID,
        Extension::STICKY_AD => Tag\ScriptAmpStickyAd::ID,
        Extension::STORY_360 => Tag\ScriptAmpStory360::ID,
        Extension::STORY_AUTO_ADS => Tag\ScriptAmpStoryAutoAds::ID,
        Extension::STORY_AUTO_ANALYTICS => Tag\ScriptAmpStoryAutoAnalytics::ID,
        Extension::STORY_CAPTIONS => Tag\ScriptAmpStoryCaptions::ID,
        Extension::STORY_INTERACTIVE => Tag\ScriptAmpStoryInteractive::ID,
        Extension::STORY_PANNING_MEDIA => Tag\ScriptAmpStoryPanningMedia::ID,
        Extension::STORY_PLAYER => Tag\ScriptAmpStoryPlayer::ID,
        Extension::STORY_SHOPPING => Tag\ScriptAmpStoryShopping::ID,
        Extension::STORY_SUBSCRIPTIONS => Tag\ScriptAmpStorySubscriptions::ID,
        Extension::STORY => Tag\ScriptAmpStory::ID,
        Extension::STREAM_GALLERY => Tag\ScriptAmpStreamGallery::ID,
        Extension::SUBSCRIPTIONS_GOOGLE => Tag\ScriptAmpSubscriptionsGoogle::ID,
        Extension::SUBSCRIPTIONS => Tag\ScriptAmpSubscriptions::ID,
        Extension::TIKTOK => Tag\ScriptAmpTiktok::ID,
        Extension::TIMEAGO => [
            Tag\ScriptAmpTimeago::ID,
            Tag\ScriptCustomElementAmpTimeagoAmp4email::ID,
        ],
        Extension::TRUNCATE_TEXT => Tag\ScriptAmpTruncateText::ID,
        Extension::TWITTER => [
            Tag\ScriptAmpTwitter::ID,
            Tag\ScriptAmpTwitter2::ID,
        ],
        Extension::USER_NOTIFICATION => Tag\ScriptAmpUserNotification::ID,
        Extension::VIDEO_DOCKING => Tag\ScriptAmpVideoDocking::ID,
        Extension::VIDEO_IFRAME => [
            Tag\ScriptAmpVideoIframe::ID,
            Tag\ScriptAmpVideoIframe2::ID,
        ],
        Extension::VIDEO => [
            Tag\ScriptAmpVideo::ID,
            Tag\ScriptAmpVideo2::ID,
        ],
        Extension::VIMEO => [
            Tag\ScriptAmpVimeo::ID,
            Tag\ScriptAmpVimeo2::ID,
        ],
        Extension::VINE => Tag\ScriptAmpVine::ID,
        Extension::VIQEO_PLAYER => Tag\ScriptAmpViqeoPlayer::ID,
        Extension::VK => Tag\ScriptAmpVk::ID,
        Extension::WEB_PUSH => Tag\ScriptAmpWebPush::ID,
        Extension::WISTIA_PLAYER => Tag\ScriptAmpWistiaPlayer::ID,
        Extension::WORDPRESS_EMBED => Tag\ScriptAmpWordpressEmbed::ID,
        Extension::YOTPO => Tag\ScriptAmpYotpo::ID,
        Extension::YOUTUBE => [
            Tag\ScriptAmpYoutube::ID,
            Tag\ScriptAmpYoutube2::ID,
        ],
    ];

    /**
     * Cache of instantiated Tag objects.
     *
     * @var array<Tag>
     */
    private $tagsCache = [];

    /**
     * Get a collection of tags by tag name.
     *
     * @param string $tagName Tag name to get the collection of tags for.
     * @return array<Tag> Array of tags. Empty array if tag name not found.
     */
    public function byTagName($tagName)
    {
        $tagName = strtolower($tagName);

        if (!array_key_exists($tagName, self::BY_TAG_NAME)) {
            return [];
        }

        $tagIds = self::BY_TAG_NAME[$tagName];
        if (!is_array($tagIds)) {
            $tagIds = [$tagIds];
        }

        $tags = [];
        foreach ($tagIds as $tagId) {
            $tags[] = $this->byTagId($tagId);
        }

        return $tags;
    }

    /**
     * Get a tag by aggregating all tag specs that match a tag name.
     *
     * This returns a singular Tag instance if only one tag entry matches.
     *
     * If more tag entries match, it provides an AggregateTag instance that transparently represents all of them.
     *
     * @param string $tagName Tag name to get the aggregated tag for.
     * @return Tag Tag object that matches the tag name.
     */
    public function byAggregateTagName($tagName)
    {
        $tags = $this->byTagName($tagName);

        switch (count($tags)) {
            case 0:
                throw InvalidTagName::forTagName($tagName);
            case 1:
                return $tags[0];
            default:
                $withExtensionSpec = true;

                foreach ($tags as $tag) {
                    if (! $tag instanceof TagWithExtensionSpec) {
                        $withExtensionSpec = false;
                    }
                }

                if ($withExtensionSpec) {
                    /** @var TagWithExtensionSpec[] $tags */
                    return new AggregateTagWithExtensionSpec($tags);
                }

                return new AggregateTag($tags);
        }
    }

    /**
     * Get the tag for a given spec name.
     *
     * @param string $specName Spec name to get the tag for.
     * @return Tag Tag with the given spec name.
     * @throws InvalidSpecName If an invalid spec name is requested.
     */
    public function bySpecName($specName)
    {
        if (!array_key_exists($specName, self::BY_SPEC_NAME)) {
            throw InvalidSpecName::forSpecName($specName);
        }

        return $this->byTagId(self::BY_SPEC_NAME[$specName]);
    }

    /**
     * Get a collection of tags for a given AMP HTML format name.
     *
     * @param string $format AMP HTML format to get the tags for.
     * @return array<Tag> Array of tags matching the requested AMP HTML format.
     * @throws InvalidFormat If an invalid AMP HTML format is requested.
     */
    public function byFormat($format)
    {
        if (!array_key_exists($format, self::BY_FORMAT)) {
            throw InvalidFormat::forFormat($format);
        }

        $tagIds = self::BY_FORMAT[$format];
        if (!is_array($tagIds)) {
            $tagIds = [$tagIds];
        }

        $tags = [];
        foreach ($tagIds as $tagId) {
            $tags[] = $this->byTagId($tagId);
        }

        return $tags;
    }

    /**
     * Get the collection of tags for a given extension spec name.
     *
     * @param string $extension Extension name to get the extension spec for.
     * @return TagWithExtensionSpec[] Tags with the given extension spec name.
     * @throws LogicException If tag is not an instance of TagWithExtensionSpec.
     */
    public function byExtensionSpec($extension)
    {
        $extension = strtolower($extension);

        if (!array_key_exists($extension, self::BY_EXTENSION_SPEC)) {
            return [];
        }

        $tagIds = self::BY_EXTENSION_SPEC[$extension];
        if (!is_array($tagIds)) {
            $tagIds = [$tagIds];
        }

        $tags = [];
        foreach ($tagIds as $tagId) {
            $tag = $this->byTagId($tagId);

            if (! $tag instanceof TagWithExtensionSpec) {
                throw new LogicException('Tags::byExtensionSpec returned tag without extension spec');
            }

            $tags[] = $tag;
        }

        return $tags;
    }

    /**
     * Get a tag by aggregating all tag specs that match an extension spec.
     *
     * This returns a singular Tag instance if only one tag entry matches.
     *
     * If more tag entries match, it provides an AggregateTag instance that transparently represents all of them.
     *
     * @param string $extension Extension spec to get the aggregated tag for.
     * @return TagWithExtensionSpec Tag object that matches the extension spec.
     */
    public function byAggregateExtensionSpec($extension)
    {
        $tags = $this->byExtensionSpec($extension);

        switch (count($tags)) {
            case 0:
                throw InvalidExtension::forExtension($extension);
            case 1:
                return $tags[0];
            default:
                foreach ($tags as $tag) {
                    if (! $tag instanceof TagWithExtensionSpec) {
                        throw new LogicException('Tags::byExtensionSpec returned tag without extension spec');
                    }
                }

                return new AggregateTagWithExtensionSpec($tags);
        }
    }

    /**
     * Get a tag by its tag ID.
     *
     * @param string $tagId Tag ID for which to get the tag.
     * @return Tag Tag object.
     */
    public function byTagId($tagId)
    {
        if (array_key_exists($tagId, $this->tagsCache)) {
            return $this->tagsCache[$tagId];
        }

        if (!array_key_exists($tagId, self::TAGS)) {
            throw InvalidTagId::forTagId($tagId);
        }

        $tagClassName = self::TAGS[$tagId];
        $tag          = new $tagClassName();

        $this->tagsCache[$tagId] = $tag;

        return $tag;
    }

    /**
     * Get the list of available keys.
     *
     * @return array<string> Array of available keys.
     */
    public function getAvailableKeys()
    {
        return array_keys(self::TAGS);
    }

    /**
     * Find the instantiated object for the current key.
     *
     * This should use its own caching mechanism as needed.
     *
     * Ideally, current() should be overridden as well to provide the correct object type-hint.
     *
     * @param string $key Key to retrieve the instantiated object for.
     * @return object Instantiated object for the current key.
     */
    public function findByKey($key)
    {
        return $this->byTagId($key);
    }

    /**
     * Return the current iterable object.
     *
     * @return Tag Tag object.
     */
    #[\ReturnTypeWillChange]
    public function current()
    {
        return $this->parentCurrent();
    }
}
PK.3YחؼEbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/A.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class A.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 */
final class A extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'A';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::A,
        SpecRule::ATTRS => [
            Attribute::BORDER => [],
            Attribute::DOWNLOAD => [],
            Attribute::HREF => [
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::FTP,
                        Protocol::GEO,
                        Protocol::HTTP,
                        Protocol::HTTPS,
                        Protocol::MAILTO,
                        Protocol::MAPS,
                        Protocol::BIP,
                        Protocol::BBMI,
                        Protocol::CHROME,
                        Protocol::ITMS_SERVICES,
                        Protocol::FACETIME,
                        Protocol::FB_ME,
                        Protocol::FB_MESSENGER,
                        Protocol::FEED,
                        Protocol::INTENT,
                        Protocol::LINE,
                        Protocol::MICROSOFT_EDGE,
                        Protocol::SKYPE,
                        Protocol::SMS,
                        Protocol::SNAPCHAT,
                        Protocol::TEL,
                        Protocol::TG,
                        Protocol::THREEMA,
                        Protocol::TWITTER,
                        Protocol::VIBER,
                        Protocol::WEBCAL,
                        Protocol::WEB_MASTODON,
                        Protocol::WH,
                        Protocol::WHATSAPP,
                    ],
                    SpecRule::ALLOW_EMPTY => true,
                ],
            ],
            Attribute::HREFLANG => [],
            Attribute::MEDIA => [],
            Attribute::REFERRERPOLICY => [],
            Attribute::REL => [
                SpecRule::DISALLOWED_VALUE_REGEX => '(^|\s)(components|dns-prefetch|import|manifest|preconnect|prefetch|preload|prerender|serviceworker|stylesheet|subresource)(\s|$)',
            ],
            Attribute::ROLE => [
                SpecRule::IMPLICIT => true,
            ],
            Attribute::SHOW_TOOLTIP => [
                SpecRule::VALUE => [
                    'auto',
                    'true',
                ],
            ],
            Attribute::TABINDEX => [
                SpecRule::IMPLICIT => true,
            ],
            Attribute::TARGET => [
                SpecRule::VALUE => [
                    '_blank',
                    '_self',
                    '_top',
                ],
            ],
            Attribute::TYPE => [
                SpecRule::VALUE_CASEI => [
                    'text/html',
                    'application/rss+xml',
                ],
            ],
            '[href]' => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ClickAttributions::ID,
            AttributeList\NameAttr::ID,
            AttributeList\PrivateClickMeasurementAttributes::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#links',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y|��0��Nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AAmp4email.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AAmp4email.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $htmlFormat
 */
final class AAmp4email extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'A (AMP4EMAIL)';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::A,
        SpecRule::SPEC_NAME => 'A (AMP4EMAIL)',
        SpecRule::ATTRS => [
            Attribute::BORDER => [],
            Attribute::HREF => [
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin|(.|\s){{|}}(.|\s)|^{{.*[^}][^}]$|^[^{][^{].*}}$|^}}|{{$|{{#|{{/|{{\^',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTP,
                        Protocol::HTTPS,
                        Protocol::MAILTO,
                        Protocol::TEL,
                    ],
                    SpecRule::ALLOW_RELATIVE => false,
                ],
            ],
            Attribute::HREFLANG => [],
            Attribute::MEDIA => [],
            Attribute::ROLE => [
                SpecRule::IMPLICIT => true,
            ],
            Attribute::TABINDEX => [
                SpecRule::IMPLICIT => true,
            ],
            Attribute::TARGET => [
                SpecRule::VALUE => [
                    '_blank',
                ],
            ],
            Attribute::TYPE => [
                SpecRule::VALUE_CASEI => [
                    'text/html',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Yp"��~~Hbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Abbr.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Abbr.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Abbr extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'ABBR';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::ABBR,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Yh1PNNKbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Acronym.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Acronym.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Acronym extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'ACRONYM';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::ACRONYM,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y�﯀��Kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Address.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Address.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Address extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'ADDRESS';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::ADDRESS,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y�ْ?�
�
Mbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Amp3dGltf.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Amp3dGltf.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class Amp3dGltf extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-3D-GLTF';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::_3D_GLTF,
        SpecRule::ATTRS => [
            Attribute::ALPHA => [
                SpecRule::VALUE => [
                    'false',
                    'true',
                ],
            ],
            Attribute::ANTIALIASING => [
                SpecRule::VALUE => [
                    'false',
                    'true',
                ],
            ],
            Attribute::AUTOROTATE => [
                SpecRule::VALUE => [
                    'false',
                    'true',
                ],
            ],
            Attribute::CLEARCOLOR => [],
            Attribute::ENABLEZOOM => [
                SpecRule::VALUE => [
                    'false',
                    'true',
                ],
            ],
            Attribute::MAXPIXELRATIO => [
                SpecRule::VALUE_REGEX => '[+-]?(\d*\.)?\d+',
            ],
            Attribute::SRC => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::_3D_GLTF,
        ],
    ];
}
PK.3Y�L!�Obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Amp3qPlayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Amp3qPlayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class Amp3qPlayer extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-3Q-PLAYER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::_3Q_PLAYER,
        SpecRule::ATTRS => [
            Attribute::AUTOPLAY => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::DATA_ID => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FLEX_ITEM,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::_3Q_PLAYER,
        ],
    ];
}
PK.3Y��ML
L
Wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Amp4adsEngineScript.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Amp4adsEngineScript.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $mandatory
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<array<string>>> $cdata
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read array<string> $requires
 * @property-read string $descriptiveName
 */
final class Amp4adsEngineScript extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp4ads engine script';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'amp4ads engine script',
        SpecRule::MANDATORY => true,
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::SRC => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'https://cdn.ampproject.org/amp4ads-v0.js',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
            AttributeList\AmphtmlEngineAttrs::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup',
        SpecRule::CDATA => [
            SpecRule::DISALLOWED_CDATA_REGEX => [
                [
                    SpecRule::REGEX => '.',
                    SpecRule::ERROR_MESSAGE => 'contents',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4ADS,
        ],
        SpecRule::SATISFIES => [
            'amphtml javascript runtime (v0.js)',
        ],
        SpecRule::REQUIRES => [
            'style[amp-boilerplate]',
        ],
        SpecRule::DESCRIPTIVE_NAME => 'amphtml engine script',
    ];
}
PK.3Y�z>�?	?	`bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAccessExtensionJsonScript.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpAccessExtensionJsonScript.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<array<string>>> $cdata
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpAccessExtensionJsonScript extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-access extension .json script';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'amp-access extension .json script',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::ID => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'amp-access',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
            ],
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_CASEI => [
                    'application/json',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
        ],
        SpecRule::CDATA => [
            SpecRule::DISALLOWED_CDATA_REGEX => [
                [
                    SpecRule::REGEX => '<!--',
                    SpecRule::ERROR_MESSAGE => 'html comments',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::ACCESS,
        ],
    ];
}
PK.3Yl~ g	g	Pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAccordion.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpAccordion.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array<array<string>>> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<array<string>> $childTags
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpAccordion extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-ACCORDION';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::ACCORDION,
        SpecRule::ATTRS => [
            Attribute::ANIMATE => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::DISABLE_SESSION_STATES => [
                SpecRule::VALUE => [
                    '',
                ],
                SpecRule::DISABLED_BY => [
                    Attribute::AMP4EMAIL,
                ],
            ],
            Attribute::EXPAND_SINGLE_SECTION => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-accordion/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::CONTAINER,
            ],
        ],
        SpecRule::CHILD_TAGS => [
            SpecRule::CHILD_TAG_NAME_ONEOF => [
                'SECTION',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::ACCORDION,
        ],
    ];
}
PK.3Yk3����Wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAccordionSection.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpAccordionSection.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array $attrs
 * @property-read array $childTags
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class AmpAccordionSection extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-accordion > section';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SECTION,
        SpecRule::SPEC_NAME => 'amp-accordion > section',
        SpecRule::MANDATORY_PARENT => Extension::ACCORDION,
        SpecRule::ATTRS => [
            Attribute::ACCESS_HIDE => [
                SpecRule::VALUE => [
                    '',
                ],
                SpecRule::DISABLED_BY => [
                    Attribute::AMP4EMAIL,
                ],
            ],
            Attribute::EXPANDED => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            '[data-expand]' => [],
            '[expanded]' => [
                SpecRule::DISABLED_BY => [
                    Attribute::AMP4EMAIL,
                ],
            ],
        ],
        SpecRule::CHILD_TAGS => [
            SpecRule::MANDATORY_NUM_CHILD_TAGS => 2,
            SpecRule::FIRST_CHILD_TAG_NAME_ONEOF => [
                'H1',
                'H2',
                'H3',
                'H4',
                'H5',
                'H6',
                'HEADER',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'amp-accordion > section',
    ];
}
PK.3Y���*Rbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpActionMacro.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpActionMacro.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpActionMacro extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-ACTION-MACRO';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::ACTION_MACRO,
        SpecRule::ATTRS => [
            Attribute::ARGUMENTS => [],
            Attribute::EXECUTE => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\MandatoryIdAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-action-macro/',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::ACTION_MACRO,
        ],
    ];
}
PK.3Yh*f`Ibunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAd.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpAd.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $disallowedAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $alsoRequiresTagWarning
 * @property-read array<string> $requiresExtension
 */
final class AmpAd extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-AD';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::AD,
        SpecRule::ATTRS => [
            Attribute::ALT => [],
            Attribute::JSON => [],
            Attribute::RTC_CONFIG => [],
            Attribute::SRC => [
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => true,
                ],
            ],
            Attribute::TEMPLATE => [],
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::STICKY => [
                SpecRule::VALUE => [
                    '',
                    'bottom',
                    'bottom-right',
                    'left',
                    'right',
                    'top',
                ],
            ],
            Attribute::ALWAYS_SERVE_NPA => [],
            Attribute::BLOCK_RTC => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-ad/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::FLUID,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::DISALLOWED_ANCESTOR => [
            'AMP-APP-BANNER',
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::ALSO_REQUIRES_TAG_WARNING => [
            'amp-ad extension script',
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::AD,
        ],
    ];
}
PK.3Y��"���Obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAdCustom.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpAdCustom.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $disallowedAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpAdCustom extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-AD-CUSTOM';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::AD_CUSTOM,
        SpecRule::ATTRS => [
            Attribute::SRC => [
                SpecRule::MANDATORY => true,
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => false,
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::FLUID,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::DISALLOWED_ANCESTOR => [
            'AMP-APP-BANNER',
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::AD_CUSTOM,
        ],
    ];
}
PK.3Y,���||Nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAddthis.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpAddthis.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpAddthis extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-ADDTHIS';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::ADDTHIS,
        SpecRule::ATTRS => [
            Attribute::DATA_PRODUCT_CODE => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::DATA_PRODUCT_CODE,
                    Attribute::DATA_WIDGET_ID,
                ],
            ],
            Attribute::DATA_SHARE_MEDIA => [
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTP,
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_EMPTY => true,
                ],
            ],
            Attribute::DATA_SHARE_URL => [
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTP,
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_EMPTY => true,
                ],
            ],
            Attribute::DATA_WIDGET_ID => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::DATA_PRODUCT_CODE,
                    Attribute::DATA_WIDGET_ID,
                ],
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::DATA_PUB_ID,
                    ],
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::ADDTHIS,
        ],
    ];
}
PK.3Y!X�K��Mbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAdExit.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpAdExit.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array $childTags
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requires
 * @property-read array<string> $requiresExtension
 */
final class AmpAdExit extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-AD-EXIT';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::AD_EXIT,
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
            AttributeList\MandatoryIdAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-ad-exit/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::NODISPLAY,
                Layout::CONTAINER,
            ],
        ],
        SpecRule::CHILD_TAGS => [
            SpecRule::MANDATORY_NUM_CHILD_TAGS => 1,
            SpecRule::CHILD_TAG_NAME_ONEOF => [
                'SCRIPT',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4ADS,
        ],
        SpecRule::REQUIRES => [
            'amp-ad-exit configuration JSON',
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::AD_EXIT,
        ],
    ];
}
PK.3YF��^bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAdExitConfigurationJson.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpAdExitConfigurationJson.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read array<string> $requiresExtension
 */
final class AmpAdExitConfigurationJson extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-ad-exit configuration JSON';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'amp-ad-exit configuration JSON',
        SpecRule::MANDATORY_PARENT => Extension::AD_EXIT,
        SpecRule::ATTRS => [
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'application/json',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_PARENT_DISPATCH',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-ad-exit/',
        SpecRule::HTML_FORMAT => [
            Format::AMP4ADS,
        ],
        SpecRule::SATISFIES => [
            'amp-ad-exit configuration JSON',
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::AD_EXIT,
        ],
    ];
}
PK.3Y�L�0��Xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAdExtensionScript.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class AmpAdExtensionScript.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class AmpAdExtensionScript extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-ad extension script';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-ad',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'amp-ad extension script',
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Yqe�8QQgbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAdWithDataEnableRefreshAttribute.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpAdWithDataEnableRefreshAttribute.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $disallowedAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $alsoRequiresTagWarning
 * @property-read array<string> $requiresExtension
 */
final class AmpAdWithDataEnableRefreshAttribute extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-ad with data-enable-refresh attribute';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::AD,
        SpecRule::SPEC_NAME => 'amp-ad with data-enable-refresh attribute',
        SpecRule::ATTRS => [
            Attribute::ALT => [],
            Attribute::DATA_ENABLE_REFRESH => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    '',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
            ],
            Attribute::JSON => [],
            Attribute::SRC => [
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => true,
                ],
            ],
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-ad/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::FLUID,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::DISALLOWED_ANCESTOR => [
            'AMP-APP-BANNER',
            'AMP-FX-FLYING-CARPET',
            'AMP-LIGHTBOX',
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::ALSO_REQUIRES_TAG_WARNING => [
            'amp-ad extension script',
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::AD,
        ],
    ];
}
PK.3YDփ��cbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAdWithDataMultiSizeAttribute.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpAdWithDataMultiSizeAttribute.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $disallowedAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $alsoRequiresTagWarning
 * @property-read array<string> $requiresExtension
 */
final class AmpAdWithDataMultiSizeAttribute extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-ad with data-multi-size attribute';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::AD,
        SpecRule::SPEC_NAME => 'amp-ad with data-multi-size attribute',
        SpecRule::ATTRS => [
            Attribute::ALT => [],
            Attribute::DATA_MULTI_SIZE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    '',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
            ],
            Attribute::JSON => [],
            Attribute::RTC_CONFIG => [],
            Attribute::SRC => [
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => true,
                ],
            ],
            Attribute::ALWAYS_SERVE_NPA => [],
            Attribute::BLOCK_RTC => [],
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-ad/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::FLUID,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::DISALLOWED_ANCESTOR => [
            'AMP-APP-BANNER',
            'AMP-CAROUSEL',
            'AMP-FX-FLYING-CARPET',
            'AMP-LIGHTBOX',
            'AMP-STICKY-AD',
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::ALSO_REQUIRES_TAG_WARNING => [
            'amp-ad extension script',
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::AD,
        ],
    ];
}
PK.3YNN�Wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAdWithTypeCustom.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpAdWithTypeCustom.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $disallowedAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $alsoRequiresTagWarning
 * @property-read array<string> $requiresExtension
 */
final class AmpAdWithTypeCustom extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-ad with type=custom';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::AD,
        SpecRule::SPEC_NAME => 'amp-ad with type=custom',
        SpecRule::ATTRS => [
            Attribute::DATA_URL => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                ],
            ],
            Attribute::TEMPLATE => [],
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'custom',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://github.com/ampproject/amphtml/blob/main/ads/vendors/custom.md',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::FLUID,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::DISALLOWED_ANCESTOR => [
            'AMP-APP-BANNER',
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::ALSO_REQUIRES_TAG_WARNING => [
            'amp-ad extension script',
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::AD,
        ],
    ];
}
PK.3Y�Q���Pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAnalytics.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpAnalytics.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpAnalytics extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-ANALYTICS';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::ANALYTICS,
        SpecRule::ATTRS => [
            Attribute::CONFIG => [
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => true,
                    SpecRule::ALLOW_EMPTY => true,
                ],
            ],
            Attribute::TYPE => [],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-analytics/',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::ANALYTICS,
        ],
    ];
}
PK.3Y���rv	v	cbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAnalyticsExtensionJsonScript.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpAnalyticsExtensionJsonScript.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<array<string>>> $cdata
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 * @property-read string $descriptiveName
 */
final class AmpAnalyticsExtensionJsonScript extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-analytics extension .json script';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'amp-analytics extension .json script',
        SpecRule::MANDATORY_PARENT => Extension::ANALYTICS,
        SpecRule::ATTRS => [
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_PARENT_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'application/json',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-analytics/',
        SpecRule::CDATA => [
            SpecRule::DISALLOWED_CDATA_REGEX => [
                [
                    SpecRule::REGEX => '<!--',
                    SpecRule::ERROR_MESSAGE => 'html comments',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::ANALYTICS,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'amp-analytics extension .json script',
    ];
}
PK.3Y'��`��Kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAnim.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpAnim.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpAnim extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-ANIM';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::ANIM,
        SpecRule::ATTRS => [
            Attribute::ALT => [],
            Attribute::ATTRIBUTION => [],
            Attribute::OBJECT_FIT => [],
            Attribute::OBJECT_POSITION => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
            AttributeList\MandatorySrcOrSrcset::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-anim/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::ANIM,
        ],
    ];
}
PK.3Y��f��Tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAnimAmp4email.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpAnimAmp4email.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpAnimAmp4email extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-ANIM (AMP4EMAIL)';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::ANIM,
        SpecRule::SPEC_NAME => 'AMP-ANIM (AMP4EMAIL)',
        SpecRule::ATTRS => [
            Attribute::ALT => [],
            Attribute::ATTRIBUTION => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
            AttributeList\MandatorySrcAmp4email::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-anim/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4EMAIL,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::ANIM,
        ],
    ];
}
PK.3Y��WD��Pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAnimation.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpAnimation.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array<array<string>>> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array $childTags
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requires
 * @property-read array<string> $requiresExtension
 */
final class AmpAnimation extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-ANIMATION';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::ANIMATION,
        SpecRule::ATTRS => [
            Attribute::TRIGGER => [
                SpecRule::VALUE => [
                    'visibility',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::NODISPLAY,
            ],
        ],
        SpecRule::CHILD_TAGS => [
            SpecRule::MANDATORY_NUM_CHILD_TAGS => 1,
            SpecRule::CHILD_TAG_NAME_ONEOF => [
                'SCRIPT',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::REQUIRES => [
            'amp-animation extension .json script',
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::ANIMATION,
        ],
    ];
}
PK.3YFRS		cbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAnimationExtensionJsonScript.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpAnimationExtensionJsonScript.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<array<string>>> $cdata
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read array<string> $requiresExtension
 */
final class AmpAnimationExtensionJsonScript extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-animation extension .json script';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'amp-animation extension .json script',
        SpecRule::MANDATORY_PARENT => Extension::ANIMATION,
        SpecRule::ATTRS => [
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_PARENT_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'application/json',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
        ],
        SpecRule::CDATA => [
            SpecRule::DISALLOWED_CDATA_REGEX => [
                [
                    SpecRule::REGEX => '<!--',
                    SpecRule::ERROR_MESSAGE => 'html comments',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::SATISFIES => [
            'amp-animation extension .json script',
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::ANIMATION,
        ],
    ];
}
PK.3Y�JG��cbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAnimExtensionScriptAmp4email.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class AmpAnimExtensionScriptAmp4email.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class AmpAnimExtensionScriptAmp4email extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-anim extension script (AMP4EMAIL)';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-anim',
        SpecRule::VERSION => [
            '0.1',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'amp-anim extension script (AMP4EMAIL)',
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4EMAIL,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y�J�}|	|	Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpApesterMedia.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpApesterMedia.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array<string>> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpApesterMedia extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-APESTER-MEDIA';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::APESTER_MEDIA,
        SpecRule::ATTRS => [
            Attribute::DATA_APESTER_CHANNEL_TOKEN => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::DATA_APESTER_MEDIA_ID,
                    Attribute::DATA_APESTER_CHANNEL_TOKEN,
                ],
                SpecRule::VALUE_REGEX => '[0-9a-zA-Z]+',
            ],
            Attribute::DATA_APESTER_MEDIA_ID => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::DATA_APESTER_MEDIA_ID,
                    Attribute::DATA_APESTER_CHANNEL_TOKEN,
                ],
                SpecRule::VALUE_REGEX => '[0-9a-zA-Z]+',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-apester-media/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::APESTER_MEDIA,
        ],
    ];
}
PK.3YmH�ڐ�Pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAppBanner.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpAppBanner.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requires
 * @property-read array<string> $requiresExtension
 */
final class AmpAppBanner extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-APP-BANNER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::APP_BANNER,
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::BODY,
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
            AttributeList\MandatoryIdAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-app-banner/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::NODISPLAY,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES => [
            'amp-app-banner data source',
            'amp-app-banner button[open-button]',
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::APP_BANNER,
        ],
    ];
}
PK.3Y�����`bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAppBannerButtonOpenButton.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpAppBannerButtonOpenButton.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 */
final class AmpAppBannerButtonOpenButton extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-app-banner button[open-button]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::BUTTON,
        SpecRule::SPEC_NAME => 'amp-app-banner button[open-button]',
        SpecRule::ATTRS => [
            Attribute::OPEN_BUTTON => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::ROLE => [
                SpecRule::IMPLICIT => true,
            ],
            Attribute::TABINDEX => [
                SpecRule::IMPLICIT => true,
            ],
            Attribute::TYPE => [],
            Attribute::VALUE => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NameAttr::ID,
        ],
        SpecRule::MANDATORY_ANCESTOR => Extension::APP_BANNER,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::SATISFIES => [
            'amp-app-banner button[open-button]',
        ],
    ];
}
PK.3YC;?v��Lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAudio.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpAudio.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array<array<string>>> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array $ampLayout
 * @property-read array<string> $disallowedAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpAudio extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-AUDIO';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::AUDIO,
        SpecRule::ATTRS => [
            Attribute::AUTOPLAY => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::PRELOAD => [
                SpecRule::VALUE_CASEI => [
                    'auto',
                    'metadata',
                    'none',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\AmpAudioCommon::ID,
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-audio/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::NODISPLAY,
            ],
            SpecRule::DEFINES_DEFAULT_WIDTH => true,
            SpecRule::DEFINES_DEFAULT_HEIGHT => true,
        ],
        SpecRule::DISALLOWED_ANCESTOR => [
            'AMP-STORY',
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::AUDIO,
        ],
    ];
}
PK.3Y|�`wObunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAudioA4a.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpAudioA4a.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpAudioA4a extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-audio (A4A)';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::AUDIO,
        SpecRule::SPEC_NAME => 'amp-audio (A4A)',
        SpecRule::ATTR_LISTS => [
            AttributeList\AmpAudioCommon::ID,
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-audio/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::NODISPLAY,
            ],
            SpecRule::DEFINES_DEFAULT_WIDTH => true,
            SpecRule::DEFINES_DEFAULT_HEIGHT => true,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4ADS,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::AUDIO,
        ],
    ];
}
PK.3Y+Z܂**Rbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAudioSource.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpAudioSource.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 */
final class AmpAudioSource extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-audio > source';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SOURCE,
        SpecRule::SPEC_NAME => 'amp-audio > source',
        SpecRule::MANDATORY_PARENT => Extension::AUDIO,
        SpecRule::ATTRS => [
            Attribute::MEDIA => [],
            Attribute::SRC => [
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => true,
                ],
            ],
            Attribute::TYPE => [],
            '[src]' => [],
            '[type]' => [],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-audio/',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y-"e��Qbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAudioTrack.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpAudioTrack.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 */
final class AmpAudioTrack extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-audio > track';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::TRACK,
        SpecRule::SPEC_NAME => 'amp-audio > track',
        SpecRule::MANDATORY_PARENT => Extension::AUDIO,
        SpecRule::ATTRS => [
            '[label]' => [],
            '[src]' => [],
            '[srclang]' => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\TrackAttrsNoSubtitles::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y�L{���^bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAudioTrackKindSubtitles.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpAudioTrackKindSubtitles.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 */
final class AmpAudioTrackKindSubtitles extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-audio > track[kind=subtitles]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::TRACK,
        SpecRule::SPEC_NAME => 'amp-audio > track[kind=subtitles]',
        SpecRule::MANDATORY_PARENT => Extension::AUDIO,
        SpecRule::ATTRS => [
            '[label]' => [],
            '[src]' => [],
            '[srclang]' => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\TrackAttrsSubtitles::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y[�$aaNbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAutoAds.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpAutoAds.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array<bool>> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<string> $disallowedAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpAutoAds extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-AUTO-ADS';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::AUTO_ADS,
        SpecRule::ATTRS => [
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-auto-ads/',
        SpecRule::DISALLOWED_ANCESTOR => [
            'AMP-AUTO-ADS',
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::AUTO_ADS,
        ],
    ];
}
PK.3Y�<8�
�
Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAutocomplete.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpAutocomplete.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpAutocomplete extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-autocomplete';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::AUTOCOMPLETE,
        SpecRule::SPEC_NAME => 'amp-autocomplete',
        SpecRule::ATTRS => [
            Attribute::FILTER => [
                SpecRule::MANDATORY => true,
                SpecRule::TRIGGER => [
                    SpecRule::IF_VALUE_REGEX => 'custom',
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::FILTER_EXPR,
                    ],
                ],
                SpecRule::VALUE_CASEI => [
                    'custom',
                    'fuzzy',
                    'none',
                    'prefix',
                    'substring',
                    'token-prefix',
                ],
            ],
            Attribute::FILTER_EXPR => [
                SpecRule::REQUIRES_EXTENSION => [
                    Extension::BIND,
                ],
            ],
            Attribute::FILTER_VALUE => [],
            Attribute::HIGHLIGHT_USER_ENTRY => [],
            Attribute::INLINE => [],
            Attribute::ITEMS => [],
            Attribute::MAX_ENTRIES => [],
            Attribute::MAX_ITEMS => [],
            Attribute::MIN_CHARACTERS => [],
            Attribute::PREFETCH => [],
            Attribute::QUERY => [
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::SRC,
                    ],
                ],
            ],
            Attribute::SRC => [
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => true,
                ],
            ],
            Attribute::SUBMIT_ON_ENTER => [],
            Attribute::SUGGEST_FIRST => [],
            Attribute::TEMPLATE => [],
            '[src]' => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-autocomplete/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::CONTAINER,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::AUTOCOMPLETE,
        ],
    ];
}
PK.3YPL�Okk\bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAutocompleteAmp4email.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpAutocompleteAmp4email.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $disallowedAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpAutocompleteAmp4email extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-AUTOCOMPLETE (AMP4EMAIL)';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::AUTOCOMPLETE,
        SpecRule::SPEC_NAME => 'AMP-AUTOCOMPLETE (AMP4EMAIL)',
        SpecRule::ATTRS => [
            Attribute::HIGHLIGHT_USER_ENTRY => [],
            Attribute::INLINE => [],
            Attribute::ITEMS => [],
            Attribute::MAX_ITEMS => [],
            Attribute::MIN_CHARACTERS => [],
            Attribute::PREFETCH => [],
            Attribute::QUERY => [
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::SRC,
                    ],
                ],
            ],
            Attribute::SUBMIT_ON_ENTER => [],
            Attribute::SUGGEST_FIRST => [],
            Attribute::SRC => [
                SpecRule::MANDATORY => true,
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin|{{|}}',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => false,
                ],
            ],
            Attribute::TEMPLATE => [
                SpecRule::VALUE_ONEOF_SET => 'TEMPLATE_IDS',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::CONTAINER,
            ],
        ],
        SpecRule::DISALLOWED_ANCESTOR => [
            'AMP-AUTOCOMPLETE',
            'AMP-STATE',
            'TEMPLATE',
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4EMAIL,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::AUTOCOMPLETE,
        ],
    ];
}
PK.3Yݯ��DDXbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAutocompleteInput.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpAutocompleteInput.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpAutocompleteInput extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-autocomplete > input';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::INPUT,
        SpecRule::SPEC_NAME => 'amp-autocomplete > input',
        SpecRule::MANDATORY_PARENT => Extension::AUTOCOMPLETE,
        SpecRule::ATTRS => [
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_CASEI => [
                    'search',
                    'text',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::AUTOCOMPLETE,
            Extension::FORM,
        ],
    ];
}
PK.3Y�֐66Wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAutocompleteJson.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpAutocompleteJson.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<array<string>>> $cdata
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpAutocompleteJson extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-autocomplete JSON';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'amp-autocomplete JSON',
        SpecRule::MANDATORY_PARENT => Extension::AUTOCOMPLETE,
        SpecRule::ATTRS => [
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_PARENT_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'application/json',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
        ],
        SpecRule::CDATA => [
            SpecRule::DISALLOWED_CDATA_REGEX => [
                [
                    SpecRule::REGEX => '<!--',
                    SpecRule::ERROR_MESSAGE => 'html comments',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::AUTOCOMPLETE,
        ],
    ];
}
PK.3Y�|M�Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBaseCarousel.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpBaseCarousel.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpBaseCarousel extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-BASE-CAROUSEL';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::BASE_CAROUSEL,
        SpecRule::ATTR_LISTS => [
            AttributeList\AmpBaseCarouselCommon::ID,
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-base-carousel/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::BASE_CAROUSEL,
        ],
    ];
}
PK.3YY��"�	�	[bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBaseCarouselLightbox.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpBaseCarouselLightbox.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array<bool>> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<array<string>> $referencePoints
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpBaseCarouselLightbox extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-BASE-CAROUSEL [lightbox]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::BASE_CAROUSEL,
        SpecRule::SPEC_NAME => 'AMP-BASE-CAROUSEL [lightbox]',
        SpecRule::ATTRS => [
            Attribute::LIGHTBOX => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\AmpBaseCarouselCommon::ID,
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-base-carousel/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::REFERENCE_POINTS => [
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-BASE-CAROUSEL lightbox [lightbox-exclude]',
            ],
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-BASE-CAROUSEL lightbox [child]',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::BASE_CAROUSEL,
            Extension::LIGHTBOX_GALLERY,
        ],
    ];
}
PK.3Y2���UU`bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBaseCarouselLightboxChild.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpBaseCarouselLightboxChild.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array<string>> $attrs
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class AmpBaseCarouselLightboxChild extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-BASE-CAROUSEL lightbox [child]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => '$REFERENCE_POINT',
        SpecRule::SPEC_NAME => 'AMP-BASE-CAROUSEL lightbox [child]',
        SpecRule::ATTRS => [
            Attribute::LIGHTBOX_THUMBNAIL_ID => [
                SpecRule::VALUE_REGEX_CASEI => '^[a-z][a-z\d_-]*',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'amp-base-carousel [lightbox-thumbnail-id] child',
    ];
}
PK.3Y��0�]]jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBaseCarouselLightboxLightboxExclude.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpBaseCarouselLightboxLightboxExclude.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array<bool>> $attrs
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class AmpBaseCarouselLightboxLightboxExclude extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-BASE-CAROUSEL lightbox [lightbox-exclude]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => '$REFERENCE_POINT',
        SpecRule::SPEC_NAME => 'AMP-BASE-CAROUSEL lightbox [lightbox-exclude]',
        SpecRule::ATTRS => [
            Attribute::LIGHTBOX_EXCLUDE => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'amp-base-carousel [lightbox-exclude] child',
    ];
}
PK.3Y�>sS��Pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBeopinion.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpBeopinion.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpBeopinion extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-BEOPINION';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::BEOPINION,
        SpecRule::ATTRS => [
            Attribute::DATA_ACCOUNT => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_REGEX_CASEI => '[0-9a-f]{24}',
            ],
            Attribute::DATA_CONTENT => [
                SpecRule::VALUE_REGEX_CASEI => '[0-9a-f]{24}',
            ],
            Attribute::DATA_MY_CONTENT => [
                SpecRule::VALUE => [
                    '0',
                    '1',
                ],
            ],
            Attribute::DATA_NAME => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::BEOPINION,
        ],
    ];
}
PK.3Y���w	w	^bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBindExtensionJsonScript.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpBindExtensionJsonScript.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array $cdata
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpBindExtensionJsonScript extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-bind extension .json script';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'amp-bind extension .json script',
        SpecRule::MANDATORY_PARENT => Extension::STATE,
        SpecRule::ATTRS => [
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_PARENT_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'application/json',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-bind/',
        SpecRule::CDATA => [
            SpecRule::MAX_BYTES => 100000,
            SpecRule::MAX_BYTES_SPEC_URL => 'https://amp.dev/documentation/components/amp-bind#state',
            SpecRule::DISALLOWED_CDATA_REGEX => [
                [
                    SpecRule::REGEX => '<!--',
                    SpecRule::ERROR_MESSAGE => 'html comments',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::BIND,
        ],
    ];
}
PK.3Y¬6�Pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBindMacro.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpBindMacro.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpBindMacro extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-BIND-MACRO';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::BIND_MACRO,
        SpecRule::ATTRS => [
            Attribute::ARGUMENTS => [],
            Attribute::EXPRESSION => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\MandatoryIdAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-bind/',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4EMAIL,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::BIND,
        ],
    ];
}
PK.3Y�Ln��	�	Ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBodymovinAnimation.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpBodymovinAnimation.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpBodymovinAnimation extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-BODYMOVIN-ANIMATION';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::BODYMOVIN_ANIMATION,
        SpecRule::ATTRS => [
            Attribute::LOOP => [
                SpecRule::VALUE_REGEX_CASEI => '[1-9][0-9]*|false|true',
            ],
            Attribute::NOAUTOPLAY => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::SRC => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => false,
                ],
            ],
            Attribute::RENDERER => [
                SpecRule::VALUE_CASEI => [
                    'canvas',
                    'html',
                    'svg',
                ],
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-bodymovin-animation/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::BODYMOVIN_ANIMATION,
        ],
    ];
}
PK.3Y�"~v��Qbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBridPlayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpBridPlayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpBridPlayer extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-BRID-PLAYER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::BRID_PLAYER,
        SpecRule::ATTRS => [
            Attribute::AUTOPLAY => [],
            Attribute::DATA_DYNAMIC => [
                SpecRule::VALUE_REGEX => '[a-z]+',
            ],
            Attribute::DATA_OUTSTREAM => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::DATA_CAROUSEL,
                    Attribute::DATA_OUTSTREAM,
                    Attribute::DATA_PLAYLIST,
                    Attribute::DATA_VIDEO,
                ],
                SpecRule::VALUE_REGEX => '[0-9]+',
            ],
            Attribute::DATA_PARTNER => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_REGEX => '[0-9]+',
            ],
            Attribute::DATA_PLAYER => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_REGEX => '[0-9]+',
            ],
            Attribute::DATA_PLAYLIST => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::DATA_CAROUSEL,
                    Attribute::DATA_OUTSTREAM,
                    Attribute::DATA_PLAYLIST,
                    Attribute::DATA_VIDEO,
                ],
                SpecRule::VALUE_REGEX => '.+',
            ],
            Attribute::DATA_VIDEO => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::DATA_CAROUSEL,
                    Attribute::DATA_OUTSTREAM,
                    Attribute::DATA_PLAYLIST,
                    Attribute::DATA_VIDEO,
                ],
                SpecRule::VALUE_REGEX => '[0-9]+',
            ],
            Attribute::DATA_CAROUSEL => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::DATA_CAROUSEL,
                    Attribute::DATA_OUTSTREAM,
                    Attribute::DATA_PLAYLIST,
                    Attribute::DATA_VIDEO,
                ],
                SpecRule::VALUE_REGEX => '[0-9]+',
            ],
            Attribute::DOCK => [
                SpecRule::REQUIRES_EXTENSION => [
                    Extension::VIDEO_DOCKING,
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-brid-player/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::BRID_PLAYER,
        ],
    ];
}
PK.3Y��(
�	�	Qbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBrightcove.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpBrightcove.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpBrightcove extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-BRIGHTCOVE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::BRIGHTCOVE,
        SpecRule::ATTRS => [
            Attribute::AUTOPLAY => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::DATA_ACCOUNT => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::DOCK => [
                SpecRule::REQUIRES_EXTENSION => [
                    Extension::VIDEO_DOCKING,
                ],
            ],
            '[data-account]' => [],
            '[data-embed]' => [],
            '[data-player-id]' => [],
            '[data-player]' => [],
            '[data-playlist-id]' => [],
            '[data-video-id]' => [],
            '[data-referrer]' => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-brightcove/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::BRIGHTCOVE,
        ],
    ];
}
PK.3Y��4HllTbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBysideContent.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpBysideContent.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array<bool>> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpBysideContent extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-BYSIDE-CONTENT';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::BYSIDE_CONTENT,
        SpecRule::ATTRS => [
            Attribute::DATA_LABEL => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::DATA_WEBCARE_ID => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::BYSIDE_CONTENT,
        ],
    ];
}
PK.3Y�}?�	�	Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpCallTracking.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpCallTracking.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array $childTags
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpCallTracking extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-CALL-TRACKING';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::CALL_TRACKING,
        SpecRule::ATTRS => [
            Attribute::CONFIG => [
                SpecRule::MANDATORY => true,
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => false,
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-call-tracking/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::CONTAINER,
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::CHILD_TAGS => [
            SpecRule::MANDATORY_NUM_CHILD_TAGS => 1,
            SpecRule::CHILD_TAG_NAME_ONEOF => [
                'A',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::CALL_TRACKING,
        ],
    ];
}
PK.3Y
�� nnObunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpCarousel.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpCarousel.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpCarousel extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-CAROUSEL';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::CAROUSEL,
        SpecRule::SPEC_NAME => 'AMP-CAROUSEL',
        SpecRule::ATTR_LISTS => [
            AttributeList\AmpCarouselCommon::ID,
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-carousel/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::CAROUSEL,
        ],
    ];
}
PK.3Yw���	�	Wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpCarouselLightbox.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpCarouselLightbox.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array<bool>> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<array<string>> $referencePoints
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpCarouselLightbox extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-CAROUSEL lightbox';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::CAROUSEL,
        SpecRule::SPEC_NAME => 'AMP-CAROUSEL lightbox',
        SpecRule::ATTRS => [
            Attribute::LIGHTBOX => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\AmpCarouselCommon::ID,
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-carousel/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::REFERENCE_POINTS => [
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-CAROUSEL lightbox [lightbox-exclude]',
            ],
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-CAROUSEL lightbox [child]',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::CAROUSEL,
            Extension::LIGHTBOX_GALLERY,
        ],
    ];
}
PK.3Y!gC�GG\bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpCarouselLightboxChild.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpCarouselLightboxChild.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array<string>> $attrs
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class AmpCarouselLightboxChild extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-CAROUSEL lightbox [child]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => '$REFERENCE_POINT',
        SpecRule::SPEC_NAME => 'AMP-CAROUSEL lightbox [child]',
        SpecRule::ATTRS => [
            Attribute::LIGHTBOX_THUMBNAIL_ID => [
                SpecRule::VALUE_REGEX_CASEI => '^[a-z][a-z\d_-]*',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'amp-carousel lightbox [lightbox-thumbnail-id] child',
    ];
}
PK.3Y�2�BOOfbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpCarouselLightboxLightboxExclude.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpCarouselLightboxLightboxExclude.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array<bool>> $attrs
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class AmpCarouselLightboxLightboxExclude extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-CAROUSEL lightbox [lightbox-exclude]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => '$REFERENCE_POINT',
        SpecRule::SPEC_NAME => 'AMP-CAROUSEL lightbox [lightbox-exclude]',
        SpecRule::ATTRS => [
            Attribute::LIGHTBOX_EXCLUDE => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'amp-carousel lightbox [lightbox-exclude] child',
    ];
}
PK.3YH~��Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpConnatixPlayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpConnatixPlayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array<bool>> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpConnatixPlayer extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-CONNATIX-PLAYER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::CONNATIX_PLAYER,
        SpecRule::ATTRS => [
            Attribute::DATA_PLAYER_ID => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-connatix-player/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::CONNATIX_PLAYER,
        ],
    ];
}
PK.3Y�b���Nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpConsent.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpConsent.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read bool $unique
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requires
 * @property-read array<string> $requiresExtension
 * @property-read array<string> $excludes
 */
final class AmpConsent extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-CONSENT';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::CONSENT,
        SpecRule::UNIQUE => true,
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::NODISPLAY,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES => [
            'amp-consent extension .json script',
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::CONSENT,
        ],
        SpecRule::EXCLUDES => [
            'amp-consent [type]',
        ],
    ];
}
PK.3Yr�(($	$	abunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpConsentExtensionJsonScript.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpConsentExtensionJsonScript.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<array<string>>> $cdata
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read array<string> $requiresExtension
 */
final class AmpConsentExtensionJsonScript extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-consent extension .json script';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'amp-consent extension .json script',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Extension::CONSENT,
        SpecRule::ATTRS => [
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_PARENT_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'application/json',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
        ],
        SpecRule::CDATA => [
            SpecRule::DISALLOWED_CDATA_REGEX => [
                [
                    SpecRule::REGEX => '<!--',
                    SpecRule::ERROR_MESSAGE => 'html comments',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-consent extension .json script',
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::CONSENT,
        ],
    ];
}
PK.3YJ��		Rbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpConsentType.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpConsentType.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read array<array<bool>> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read array<string> $requires
 * @property-read array<string> $requiresExtension
 */
final class AmpConsentType extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-consent [type]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::CONSENT,
        SpecRule::SPEC_NAME => 'amp-consent [type]',
        SpecRule::UNIQUE => true,
        SpecRule::ATTRS => [
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::NODISPLAY,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-consent [type]',
        ],
        SpecRule::REQUIRES => [
            'meta name=amp-consent-blocking',
            'amp-consent extension .json script',
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::CONSENT,
        ],
    ];
}
PK.3YV�����Rbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDailymotion.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpDailymotion.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpDailymotion extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-DAILYMOTION';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::DAILYMOTION,
        SpecRule::ATTRS => [
            Attribute::AUTOPLAY => [],
            Attribute::DATA_ENDSCREEN_ENABLE => [
                SpecRule::VALUE => [
                    'false',
                    'true',
                ],
            ],
            Attribute::DATA_INFO => [
                SpecRule::VALUE => [
                    'false',
                    'true',
                ],
            ],
            Attribute::DATA_MUTE => [
                SpecRule::VALUE => [
                    'false',
                    'true',
                ],
            ],
            Attribute::DATA_SHARING_ENABLE => [
                SpecRule::VALUE => [
                    'false',
                    'true',
                ],
            ],
            Attribute::DATA_START => [
                SpecRule::VALUE_REGEX => '[0-9]+',
            ],
            Attribute::DATA_UI_HIGHLIGHT => [
                SpecRule::VALUE_REGEX_CASEI => '([0-9a-f]{3}){1,2}',
            ],
            Attribute::DATA_UI_LOGO => [
                SpecRule::VALUE => [
                    'false',
                    'true',
                ],
            ],
            Attribute::DATA_VIDEOID => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_REGEX_CASEI => '[a-z0-9]+',
            ],
            Attribute::DOCK => [
                SpecRule::REQUIRES_EXTENSION => [
                    Extension::VIDEO_DOCKING,
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-dailymotion/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::DAILYMOTION,
        ],
    ];
}
PK.3Y]=�rTbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDateCountdown.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpDateCountdown.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpDateCountdown extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-DATE-COUNTDOWN';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::DATE_COUNTDOWN,
        SpecRule::ATTRS => [
            Attribute::BIGGEST_UNIT => [
                SpecRule::VALUE_CASEI => [
                    'days',
                    'hours',
                    'minutes',
                    'seconds',
                ],
            ],
            Attribute::COUNT_UP => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::DATA_COUNT_UP => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::END_DATE => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::END_DATE,
                    Attribute::TIMELEFT_MS,
                    Attribute::TIMESTAMP_MS,
                    Attribute::TIMESTAMP_SECONDS,
                ],
                SpecRule::VALUE_REGEX => '\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d(:[0-5]\d(\.\d+)?)?(Z|[+-][0-1][0-9]:[0-5][0-9])',
            ],
            Attribute::LOCALE => [
                SpecRule::VALUE_CASEI => [
                    'de',
                    'en',
                    'es',
                    'fr',
                    'id',
                    'it',
                    'ja',
                    'ko',
                    'nl',
                    'pt',
                    'ru',
                    'th',
                    'tr',
                    'vi',
                    'zh-cn',
                    'zh-tw',
                ],
            ],
            Attribute::OFFSET_SECONDS => [
                SpecRule::VALUE_REGEX => '-?\d+',
            ],
            Attribute::TEMPLATE => [
                SpecRule::VALUE_ONEOF_SET => 'TEMPLATE_IDS',
            ],
            Attribute::TIMELEFT_MS => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::END_DATE,
                    Attribute::TIMELEFT_MS,
                    Attribute::TIMESTAMP_MS,
                    Attribute::TIMESTAMP_SECONDS,
                ],
                SpecRule::VALUE_REGEX => '\d+',
            ],
            Attribute::TIMESTAMP_MS => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::END_DATE,
                    Attribute::TIMELEFT_MS,
                    Attribute::TIMESTAMP_MS,
                    Attribute::TIMESTAMP_SECONDS,
                ],
                SpecRule::VALUE_REGEX => '\d{13}',
            ],
            Attribute::TIMESTAMP_SECONDS => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::END_DATE,
                    Attribute::TIMELEFT_MS,
                    Attribute::TIMESTAMP_MS,
                    Attribute::TIMESTAMP_SECONDS,
                ],
                SpecRule::VALUE_REGEX => '\d{10}',
            ],
            Attribute::WHEN_ENDED => [
                SpecRule::VALUE_CASEI => [
                    'continue',
                    'stop',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::DATE_COUNTDOWN,
        ],
    ];
}
PK.3Y�?Rbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDateDisplay.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpDateDisplay.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpDateDisplay extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-DATE-DISPLAY';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::DATE_DISPLAY,
        SpecRule::ATTRS => [
            Attribute::DATETIME => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::DATETIME,
                    Attribute::TIMESTAMP_MS,
                    Attribute::TIMESTAMP_SECONDS,
                ],
                SpecRule::VALUE_REGEX => 'now|(\d{4}-[01]\d-[0-3]\d(T[0-2]\d:[0-5]\d(:[0-6]\d(\.\d\d?\d?)?)?(Z|[+-][0-1]\d:[0-5]\d)?)?)',
            ],
            Attribute::DISPLAY_IN => [
                SpecRule::VALUE_CASEI => [
                    'utc',
                ],
            ],
            Attribute::OFFSET_SECONDS => [
                SpecRule::VALUE_REGEX => '-?\d+',
            ],
            Attribute::LOCALE => [],
            Attribute::TEMPLATE => [
                SpecRule::VALUE_ONEOF_SET => 'TEMPLATE_IDS',
            ],
            Attribute::TIMESTAMP_MS => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::DATETIME,
                    Attribute::TIMESTAMP_MS,
                    Attribute::TIMESTAMP_SECONDS,
                ],
                SpecRule::VALUE_REGEX => '\d+',
            ],
            Attribute::TIMESTAMP_SECONDS => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::DATETIME,
                    Attribute::TIMESTAMP_MS,
                    Attribute::TIMESTAMP_SECONDS,
                ],
                SpecRule::VALUE_REGEX => '\d+',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::DATE_DISPLAY,
        ],
    ];
}
PK.3Y�#ڃ�ebunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDatePickerTemplateDateTemplate.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpDatePickerTemplateDateTemplate.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpDatePickerTemplateDateTemplate extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-date-picker > template [date-template]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::TEMPLATE,
        SpecRule::SPEC_NAME => 'amp-date-picker > template [date-template]',
        SpecRule::MANDATORY_PARENT => Extension::DATE_PICKER,
        SpecRule::ATTRS => [
            Attribute::DATE_TEMPLATE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    '',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_DISPATCH',
            ],
            Attribute::DEFAULT_ => [],
            Attribute::DATES => [],
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'amp-mustache',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::MUSTACHE,
        ],
    ];
}
PK.3Y�o���ebunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDatePickerTemplateInfoTemplate.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpDatePickerTemplateInfoTemplate.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpDatePickerTemplateInfoTemplate extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-date-picker > template [info-template]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::TEMPLATE,
        SpecRule::SPEC_NAME => 'amp-date-picker > template [info-template]',
        SpecRule::MANDATORY_PARENT => Extension::DATE_PICKER,
        SpecRule::ATTRS => [
            Attribute::INFO_TEMPLATE => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_DISPATCH',
            ],
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'amp-mustache',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::MUSTACHE,
        ],
    ];
}
PK.3Y�B�c(	(	ebunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDatePickerTypeRangeModeOverlay.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpDatePickerTypeRangeModeOverlay.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpDatePickerTypeRangeModeOverlay extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-date-picker[type=range][mode=overlay]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::DATE_PICKER,
        SpecRule::SPEC_NAME => 'amp-date-picker[type=range][mode=overlay]',
        SpecRule::ATTRS => [
            Attribute::MODE => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'overlay',
                ],
            ],
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_CASEI => [
                    'range',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\AmpDatePickerCommonAttributes::ID,
            AttributeList\AmpDatePickerOverlayModeAttributes::ID,
            AttributeList\AmpDatePickerRangeTypeAttributes::ID,
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::CONTAINER,
                Layout::NODISPLAY,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::DATE_PICKER,
        ],
    ];
}
PK.3Y�yW	W	dbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDatePickerTypeRangeModeStatic.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpDatePickerTypeRangeModeStatic.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpDatePickerTypeRangeModeStatic extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-date-picker[type=range][mode=static]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::DATE_PICKER,
        SpecRule::SPEC_NAME => 'amp-date-picker[type=range][mode=static]',
        SpecRule::ATTRS => [
            Attribute::MODE => [
                SpecRule::VALUE_CASEI => [
                    'static',
                ],
            ],
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_CASEI => [
                    'range',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\AmpDatePickerCommonAttributes::ID,
            AttributeList\AmpDatePickerRangeTypeAttributes::ID,
            AttributeList\AmpDatePickerStaticModeAttributes::ID,
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::DATE_PICKER,
        ],
    ];
}
PK.3Y�����fbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDatePickerTypeSingleModeOverlay.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpDatePickerTypeSingleModeOverlay.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpDatePickerTypeSingleModeOverlay extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-date-picker[type=single][mode=overlay]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::DATE_PICKER,
        SpecRule::SPEC_NAME => 'amp-date-picker[type=single][mode=overlay]',
        SpecRule::ATTRS => [
            Attribute::MODE => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'overlay',
                ],
            ],
            Attribute::TYPE => [
                SpecRule::VALUE_CASEI => [
                    'single',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\AmpDatePickerCommonAttributes::ID,
            AttributeList\AmpDatePickerOverlayModeAttributes::ID,
            AttributeList\AmpDatePickerSingleTypeAttributes::ID,
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::CONTAINER,
                Layout::NODISPLAY,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::DATE_PICKER,
        ],
    ];
}
PK.3Y����F	F	ebunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDatePickerTypeSingleModeStatic.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpDatePickerTypeSingleModeStatic.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array<array<string>>> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpDatePickerTypeSingleModeStatic extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-date-picker[type=single][mode=static]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::DATE_PICKER,
        SpecRule::SPEC_NAME => 'amp-date-picker[type=single][mode=static]',
        SpecRule::ATTRS => [
            Attribute::MODE => [
                SpecRule::VALUE_CASEI => [
                    'static',
                ],
            ],
            Attribute::TYPE => [
                SpecRule::VALUE_CASEI => [
                    'single',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\AmpDatePickerCommonAttributes::ID,
            AttributeList\AmpDatePickerSingleTypeAttributes::ID,
            AttributeList\AmpDatePickerStaticModeAttributes::ID,
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::DATE_PICKER,
        ],
    ];
}
PK.3Y� ��Tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDelightPlayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpDelightPlayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpDelightPlayer extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-DELIGHT-PLAYER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::DELIGHT_PLAYER,
        SpecRule::ATTRS => [
            Attribute::DATA_CONTENT_ID => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::DOCK => [
                SpecRule::REQUIRES_EXTENSION => [
                    Extension::VIDEO_DOCKING,
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::DELIGHT_PLAYER,
        ],
    ];
}
PK.3Y�����
�
Lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpEmbed.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpEmbed.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $disallowedAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $alsoRequiresTagWarning
 * @property-read array<string> $requiresExtension
 */
final class AmpEmbed extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-EMBED';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::EMBED,
        SpecRule::ATTRS => [
            Attribute::ALT => [],
            Attribute::JSON => [],
            Attribute::RTC_CONFIG => [],
            Attribute::SRC => [
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => true,
                ],
            ],
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::ALWAYS_SERVE_NPA => [],
            Attribute::BLOCK_RTC => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-ad/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::FLUID,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::DISALLOWED_ANCESTOR => [
            'AMP-APP-BANNER',
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::ALSO_REQUIRES_TAG_WARNING => [
            'amp-ad extension script',
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::AD,
        ],
    ];
}
PK.3Y��<��Rbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpEmbedlyCard.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpEmbedlyCard.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpEmbedlyCard extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-EMBEDLY-CARD';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::EMBEDLY_CARD,
        SpecRule::ATTRS => [
            Attribute::DATA_URL => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => false,
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-embedly-card/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::EMBEDLY_CARD,
        ],
    ];
}
PK.3Y�	o���Qbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpEmbedlyKey.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpEmbedlyKey.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read bool $unique
 * @property-read array<array<bool>> $attrs
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpEmbedlyKey extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-EMBEDLY-KEY';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::EMBEDLY_KEY,
        SpecRule::UNIQUE => true,
        SpecRule::ATTRS => [
            Attribute::VALUE => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::NODISPLAY,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::EMBEDLY_CARD,
        ],
    ];
}
PK.3Y�w��

fbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpEmbedWithDataMultiSizeAttribute.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpEmbedWithDataMultiSizeAttribute.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $disallowedAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $alsoRequiresTagWarning
 * @property-read array<string> $requiresExtension
 */
final class AmpEmbedWithDataMultiSizeAttribute extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-embed with data-multi-size attribute';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::EMBED,
        SpecRule::SPEC_NAME => 'amp-embed with data-multi-size attribute',
        SpecRule::ATTRS => [
            Attribute::ALT => [],
            Attribute::DATA_MULTI_SIZE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    '',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
            ],
            Attribute::JSON => [],
            Attribute::RTC_CONFIG => [],
            Attribute::ALWAYS_SERVE_NPA => [],
            Attribute::BLOCK_RTC => [],
            Attribute::SRC => [
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => true,
                ],
            ],
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-ad/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::FLUID,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::DISALLOWED_ANCESTOR => [
            'AMP-APP-BANNER',
            'AMP-CAROUSEL',
            'AMP-FX-FLYING-CARPET',
            'AMP-LIGHTBOX',
            'AMP-STICKY-AD',
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::ALSO_REQUIRES_TAG_WARNING => [
            'amp-ad extension script',
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::AD,
        ],
    ];
}
PK.3Y3X&���Qbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpExperiment.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpExperiment.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read bool $unique
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpExperiment extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-EXPERIMENT';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::EXPERIMENT,
        SpecRule::UNIQUE => true,
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-experiment/',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::EXPERIMENT,
        ],
    ];
}
PK.3YP��)��dbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpExperimentExtensionJsonScript.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpExperimentExtensionJsonScript.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array $cdata
 * @property-read array<string> $htmlFormat
 */
final class AmpExperimentExtensionJsonScript extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-experiment extension .json script';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'amp-experiment extension .json script',
        SpecRule::MANDATORY_PARENT => Extension::EXPERIMENT,
        SpecRule::ATTRS => [
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_PARENT_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'application/json',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-experiment/',
        SpecRule::CDATA => [
            SpecRule::MAX_BYTES => 15000,
            SpecRule::MAX_BYTES_SPEC_URL => 'https://amp.dev/documentation/components/amp-experiment/#configuration',
            SpecRule::DISALLOWED_CDATA_REGEX => [
                [
                    SpecRule::REGEX => '<!--',
                    SpecRule::ERROR_MESSAGE => 'html comments',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y���e��ibunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpExperimentStoryExtensionJsonScript.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpExperimentStoryExtensionJsonScript.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array $cdata
 * @property-read array<string> $htmlFormat
 */
final class AmpExperimentStoryExtensionJsonScript extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-experiment story extension .json script';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'amp-experiment story extension .json script',
        SpecRule::MANDATORY_PARENT => Extension::EXPERIMENT,
        SpecRule::ATTRS => [
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_PARENT_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'application/json',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-experiment/',
        SpecRule::CDATA => [
            SpecRule::MAX_BYTES => 15000,
            SpecRule::MAX_BYTES_SPEC_URL => 'https://amp.dev/documentation/components/amp-experiment/#configuration',
            SpecRule::DISALLOWED_CDATA_REGEX => [
                [
                    SpecRule::REGEX => '<!--',
                    SpecRule::ERROR_MESSAGE => 'html comments',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y��Q==Obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFacebook.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpFacebook.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpFacebook extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-FACEBOOK';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::FACEBOOK,
        SpecRule::ATTR_LISTS => [
            AttributeList\AmpFacebook::ID,
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::FACEBOOK,
        ],
    ];
}
PK.3Y�l
�		Qbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFacebook10.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class AmpFacebook10.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class AmpFacebook10 extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-facebook 1.0';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-facebook',
        SpecRule::VERSION => [
            '1.0',
        ],
        SpecRule::VERSION_NAME => 'v1.0',
        SpecRule::BENTO_SUPPORTED_VERSION => [
            '1.0',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '1.0' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'amp-facebook 1.0',
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-facebook 1.0',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-facebook 0.1',
            'amp-facebook-comments 0.1',
            'amp-facebook-like 0.1',
            'amp-facebook-page 0.1',
        ],
    ];
}
PK.3YG�N��Wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFacebookComments.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpFacebookComments.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requires
 * @property-read array<string> $requiresExtension
 */
final class AmpFacebookComments extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-FACEBOOK-COMMENTS';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::FACEBOOK_COMMENTS,
        SpecRule::ATTR_LISTS => [
            AttributeList\AmpFacebook::ID,
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES => [
            'amp-facebook-comments 0.1',
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::FACEBOOK_COMMENTS,
        ],
    ];
}
PK.3Yj;;Ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFacebookComments10.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpFacebookComments10.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requires
 * @property-read array<string> $requiresExtension
 */
final class AmpFacebookComments10 extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-facebook-comments 1.0';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::FACEBOOK_COMMENTS,
        SpecRule::SPEC_NAME => 'amp-facebook-comments 1.0',
        SpecRule::ATTR_LISTS => [
            AttributeList\AmpFacebook::ID,
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES => [
            'amp-facebook 1.0',
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::FACEBOOK,
        ],
    ];
}
PK.3Y~�]���Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFacebookLike.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpFacebookLike.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requires
 * @property-read array<string> $requiresExtension
 */
final class AmpFacebookLike extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-FACEBOOK-LIKE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::FACEBOOK_LIKE,
        SpecRule::ATTR_LISTS => [
            AttributeList\AmpFacebookStrict::ID,
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES => [
            'amp-facebook-like 0.1',
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::FACEBOOK_LIKE,
        ],
    ];
}
PK.3Y���--Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFacebookLike10.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpFacebookLike10.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requires
 * @property-read array<string> $requiresExtension
 */
final class AmpFacebookLike10 extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-facebook-like 1.0';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::FACEBOOK_LIKE,
        SpecRule::SPEC_NAME => 'amp-facebook-like 1.0',
        SpecRule::ATTR_LISTS => [
            AttributeList\AmpFacebookStrict::ID,
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES => [
            'amp-facebook 1.0',
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::FACEBOOK,
        ],
    ];
}
PK.3Y�Z���Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFacebookPage.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpFacebookPage.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requires
 * @property-read array<string> $requiresExtension
 */
final class AmpFacebookPage extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-FACEBOOK-PAGE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::FACEBOOK_PAGE,
        SpecRule::ATTR_LISTS => [
            AttributeList\AmpFacebookStrict::ID,
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES => [
            'amp-facebook-page 0.1',
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::FACEBOOK_PAGE,
        ],
    ];
}
PK.3YV�?<--Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFacebookPage10.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpFacebookPage10.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requires
 * @property-read array<string> $requiresExtension
 */
final class AmpFacebookPage10 extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-facebook-page 1.0';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::FACEBOOK_PAGE,
        SpecRule::SPEC_NAME => 'amp-facebook-page 1.0',
        SpecRule::ATTR_LISTS => [
            AttributeList\AmpFacebookStrict::ID,
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES => [
            'amp-facebook 1.0',
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::FACEBOOK,
        ],
    ];
}
PK.3Y�"sC44Nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFitText.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpFitText.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpFitText extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-FIT-TEXT';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::FIT_TEXT,
        SpecRule::ATTRS => [
            Attribute::MAX_FONT_SIZE => [],
            Attribute::MIN_FONT_SIZE => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::FIT_TEXT,
        ],
    ];
}
PK.3Yg�{S��Kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFont.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpFont.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpFont extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-FONT';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::FONT,
        SpecRule::ATTRS => [
            Attribute::FONT_FAMILY => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::FONT_STYLE => [],
            Attribute::FONT_VARIANT => [],
            Attribute::FONT_WEIGHT => [],
            Attribute::ON_ERROR_ADD_CLASS => [],
            Attribute::ON_ERROR_REMOVE_CLASS => [],
            Attribute::ON_LOAD_ADD_CLASS => [],
            Attribute::ON_LOAD_REMOVE_CLASS => [],
            Attribute::TIMEOUT => [
                SpecRule::VALUE_REGEX => '[0-9]+',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::NODISPLAY,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::FONT,
        ],
    ];
}
PK.3Yî&���Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFxFlyingCarpet.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpFxFlyingCarpet.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array<bool>> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpFxFlyingCarpet extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-FX-FLYING-CARPET';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::FX_FLYING_CARPET,
        SpecRule::ATTRS => [
            Attribute::HEIGHT => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::FX_FLYING_CARPET,
        ],
    ];
}
PK.3Y5l�NNJbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpGeo.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpGeo.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read bool $unique
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<array<string>> $childTags
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpGeo extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-GEO';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::GEO,
        SpecRule::UNIQUE => true,
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::NODISPLAY,
            ],
        ],
        SpecRule::CHILD_TAGS => [
            SpecRule::FIRST_CHILD_TAG_NAME_ONEOF => [
                'SCRIPT',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::GEO,
        ],
    ];
}
PK.3YI�����]bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpGeoExtensionJsonScript.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpGeoExtensionJsonScript.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<array<string>>> $cdata
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpGeoExtensionJsonScript extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-geo extension .json script';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'amp-geo extension .json script',
        SpecRule::MANDATORY_PARENT => Extension::GEO,
        SpecRule::ATTRS => [
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_PARENT_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'application/json',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-geo/',
        SpecRule::CDATA => [
            SpecRule::DISALLOWED_CDATA_REGEX => [
                [
                    SpecRule::REGEX => '<!--',
                    SpecRule::ERROR_MESSAGE => 'html comments',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::GEO,
        ],
    ];
}
PK.3Y�!S��Mbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpGfycat.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpGfycat.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpGfycat extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-GFYCAT';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::GFYCAT,
        SpecRule::ATTRS => [
            Attribute::DATA_GFYID => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::NOAUTOPLAY => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-gfycat/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::GFYCAT,
        ],
    ];
}
PK.3Y��*1��Kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpGist.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpGist.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array<bool>> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpGist extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-GIST';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::GIST,
        SpecRule::ATTRS => [
            Attribute::DATA_GISTID => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-gist/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FIXED_HEIGHT,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::GIST,
        ],
    ];
}
PK.3YV=Ő=	=	Zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpGoogleDocumentEmbed.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpGoogleDocumentEmbed.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpGoogleDocumentEmbed extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-GOOGLE-DOCUMENT-EMBED';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::GOOGLE_DOCUMENT_EMBED,
        SpecRule::ATTRS => [
            Attribute::SRC => [
                SpecRule::MANDATORY => true,
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => false,
                ],
            ],
            '[src]' => [],
            '[title]' => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-google-document-embed/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::GOOGLE_DOCUMENT_EMBED,
        ],
    ];
}
PK.3Y�ez�
�
\bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpGoogleReadAloudPlayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpGoogleReadAloudPlayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpGoogleReadAloudPlayer extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-GOOGLE-READ-ALOUD-PLAYER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::GOOGLE_READ_ALOUD_PLAYER,
        SpecRule::ATTRS => [
            Attribute::DATA_API_KEY => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::DATA_TRACKING_IDS => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_REGEX_CASEI => '^UA-\d+-\d+(\s*,\s*UA-\d+-\d+)*$',
            ],
            Attribute::DATA_VOICE => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::DATA_URL => [
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => false,
                ],
            ],
            Attribute::DATA_SPEAKABLE => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::DATA_CALL_TO_ACTION_LABEL => [],
            Attribute::DATA_LOCALE => [
                SpecRule::VALUE_REGEX_CASEI => '[a-z]{2}',
            ],
            Attribute::DATA_INTRO => [
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => false,
                ],
            ],
            Attribute::DATA_OUTRO => [
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => false,
                ],
            ],
            Attribute::DATA_AD_TAG_URL => [
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => false,
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-google-read-aloud-player',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::GOOGLE_READ_ALOUD_PLAYER,
        ],
    ];
}
PK.3Y��)�$$Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpGwdAnimation.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpGwdAnimation.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpGwdAnimation extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-GWD-ANIMATION';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::GWD_ANIMATION,
        SpecRule::ATTRS => [
            Attribute::TIMELINE_EVENT_PREFIX => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::NODISPLAY,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4ADS,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::GWD_ANIMATION,
        ],
    ];
}
PK.3Y���(�
�
Wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlEngineScript.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmphtmlEngineScript.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<array<string>>> $cdata
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read array<string> $requires
 * @property-read array<string> $disabledBy
 * @property-read string $descriptiveName
 */
final class AmphtmlEngineScript extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amphtml engine script';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'amphtml engine script',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::SRC => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'https://cdn.ampproject.org/v0.js',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
            AttributeList\AmphtmlEngineAttrs::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup',
        SpecRule::CDATA => [
            SpecRule::DISALLOWED_CDATA_REGEX => [
                [
                    SpecRule::REGEX => '.',
                    SpecRule::ERROR_MESSAGE => 'contents',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amphtml javascript runtime (v0.js)',
        ],
        SpecRule::REQUIRES => [
            'style[amp-boilerplate]',
            'noscript > style[amp-boilerplate]',
        ],
        SpecRule::DISABLED_BY => [
            Attribute::TRANSFORMED,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'amphtml engine script',
    ];
}
PK.3Y ���p
p
`bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlEngineScriptAmp4email.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmphtmlEngineScriptAmp4email.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $mandatory
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<array<string>>> $cdata
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read array<string> $requires
 * @property-read string $descriptiveName
 */
final class AmphtmlEngineScriptAmp4email extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amphtml engine script [AMP4EMAIL]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'amphtml engine script [AMP4EMAIL]',
        SpecRule::MANDATORY => true,
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::SRC => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'https://cdn.ampproject.org/v0.js',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
            AttributeList\AmphtmlEngineAttrs::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup',
        SpecRule::CDATA => [
            SpecRule::DISALLOWED_CDATA_REGEX => [
                [
                    SpecRule::REGEX => '.',
                    SpecRule::ERROR_MESSAGE => 'contents',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4EMAIL,
        ],
        SpecRule::SATISFIES => [
            'amphtml javascript runtime (v0.js)',
        ],
        SpecRule::REQUIRES => [
            'style[amp-boilerplate]',
        ],
        SpecRule::DESCRIPTIVE_NAME => 'amphtml engine script',
    ];
}
PK.3Y�xu3�
�
Zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlEngineScriptLts.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmphtmlEngineScriptLts.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<array<string>>> $cdata
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read array<string> $requires
 * @property-read array<string> $disabledBy
 * @property-read string $descriptiveName
 */
final class AmphtmlEngineScriptLts extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amphtml engine script (LTS)';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'amphtml engine script (LTS)',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::SRC => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'https://cdn.ampproject.org/lts/v0.js',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
            AttributeList\AmphtmlEngineAttrs::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup',
        SpecRule::CDATA => [
            SpecRule::DISALLOWED_CDATA_REGEX => [
                [
                    SpecRule::REGEX => '.',
                    SpecRule::ERROR_MESSAGE => 'contents',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amphtml javascript runtime (v0.js)',
        ],
        SpecRule::REQUIRES => [
            'style[amp-boilerplate]',
            'noscript > style[amp-boilerplate]',
        ],
        SpecRule::DISABLED_BY => [
            Attribute::TRANSFORMED,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'amphtml engine script',
    ];
}
PK.3Y�r,3B
B
ebunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlEngineScriptLtsTransformed.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmphtmlEngineScriptLtsTransformed.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<array<string>>> $cdata
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read array<string> $enabledBy
 * @property-read string $descriptiveName
 */
final class AmphtmlEngineScriptLtsTransformed extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amphtml engine script (LTS) (transformed)';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'amphtml engine script (LTS) (transformed)',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::SRC => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'https://cdn.ampproject.org/lts/v0.js',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
            AttributeList\AmphtmlEngineAttrs::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup',
        SpecRule::CDATA => [
            SpecRule::DISALLOWED_CDATA_REGEX => [
                [
                    SpecRule::REGEX => '.',
                    SpecRule::ERROR_MESSAGE => 'contents',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amphtml javascript runtime (v0.js)',
        ],
        SpecRule::ENABLED_BY => [
            Attribute::TRANSFORMED,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'amphtml engine script',
    ];
}
PK.3YW�cm,
,
bbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlEngineScriptTransformed.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmphtmlEngineScriptTransformed.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<array<string>>> $cdata
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read array<string> $enabledBy
 * @property-read string $descriptiveName
 */
final class AmphtmlEngineScriptTransformed extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amphtml engine script (transformed)';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'amphtml engine script (transformed)',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::SRC => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'https://cdn.ampproject.org/v0.js',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
            AttributeList\AmphtmlEngineAttrs::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup',
        SpecRule::CDATA => [
            SpecRule::DISALLOWED_CDATA_REGEX => [
                [
                    SpecRule::REGEX => '.',
                    SpecRule::ERROR_MESSAGE => 'contents',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amphtml javascript runtime (v0.js)',
        ],
        SpecRule::ENABLED_BY => [
            Attribute::TRANSFORMED,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'amphtml engine script',
    ];
}
PK.3Y��l#
#
]bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlModuleEngineScript.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmphtmlModuleEngineScript.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<bool> $cdata
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read array<string> $requires
 * @property-read array<string> $enabledBy
 * @property-read string $descriptiveName
 */
final class AmphtmlModuleEngineScript extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amphtml module engine script';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'amphtml module engine script',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::SRC => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'https://cdn.ampproject.org/v0.mjs',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
            AttributeList\AmphtmlModuleEngineAttrs::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup',
        SpecRule::CDATA => [
            SpecRule::WHITESPACE_ONLY => true,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amphtml javascript runtime (v0.js)',
            'amphtml module engine script',
        ],
        SpecRule::REQUIRES => [
            'amphtml nomodule engine script',
        ],
        SpecRule::ENABLED_BY => [
            Attribute::TRANSFORMED,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'amphtml module engine script',
    ];
}
PK.3Y�V��A
A
`bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlModuleLtsEngineScript.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmphtmlModuleLtsEngineScript.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<bool> $cdata
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read array<string> $requires
 * @property-read array<string> $enabledBy
 * @property-read string $descriptiveName
 */
final class AmphtmlModuleLtsEngineScript extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amphtml module LTS engine script';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'amphtml module LTS engine script',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::SRC => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'https://cdn.ampproject.org/lts/v0.mjs',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
            AttributeList\AmphtmlModuleEngineAttrs::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup',
        SpecRule::CDATA => [
            SpecRule::WHITESPACE_ONLY => true,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amphtml javascript runtime (v0.js)',
            'amphtml module LTS engine script',
        ],
        SpecRule::REQUIRES => [
            'amphtml nomodule LTS engine script',
        ],
        SpecRule::ENABLED_BY => [
            Attribute::TRANSFORMED,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'amphtml module LTS engine script',
    ];
}
PK.3Y�n��.
.
_bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlNomoduleEngineScript.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmphtmlNomoduleEngineScript.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<bool> $cdata
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read array<string> $requires
 * @property-read array<string> $enabledBy
 * @property-read string $descriptiveName
 */
final class AmphtmlNomoduleEngineScript extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amphtml nomodule engine script';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'amphtml nomodule engine script',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::SRC => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'https://cdn.ampproject.org/v0.js',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
            AttributeList\AmphtmlNomoduleEngineAttrs::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup',
        SpecRule::CDATA => [
            SpecRule::WHITESPACE_ONLY => true,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amphtml javascript runtime (v0.js)',
            'amphtml nomodule engine script',
        ],
        SpecRule::REQUIRES => [
            'amphtml module engine script',
        ],
        SpecRule::ENABLED_BY => [
            Attribute::TRANSFORMED,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'amphtml nomodule engine script',
    ];
}
PK.3Yh��K
K
bbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlNomoduleLtsEngineScript.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmphtmlNomoduleLtsEngineScript.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<bool> $cdata
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read array<string> $requires
 * @property-read array<string> $enabledBy
 * @property-read string $descriptiveName
 */
final class AmphtmlNomoduleLtsEngineScript extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amphtml nomodule LTS engine script';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'amphtml nomodule LTS engine script',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::SRC => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'https://cdn.ampproject.org/lts/v0.js',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
            AttributeList\AmphtmlNomoduleEngineAttrs::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup',
        SpecRule::CDATA => [
            SpecRule::WHITESPACE_ONLY => true,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amphtml javascript runtime (v0.js)',
            'amphtml nomodule LTS engine script',
        ],
        SpecRule::REQUIRES => [
            'amphtml module LTS engine script',
        ],
        SpecRule::ENABLED_BY => [
            Attribute::TRANSFORMED,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'amphtml nomdule LTS engine script',
    ];
}
PK.3Y/})�%%Kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpHulu.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpHulu.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array<bool>> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpHulu extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-HULU';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::HULU,
        SpecRule::ATTRS => [
            Attribute::DATA_EID => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-hulu/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::HULU,
        ],
    ];
}
PK.3Y�gE`��Mbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpIframe.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpIframe.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpIframe extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-IFRAME';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::IFRAME,
        SpecRule::ATTRS => [
            Attribute::ALLOW => [],
            Attribute::ALLOWFULLSCREEN => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::ALLOWPAYMENTREQUEST => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::ALLOWTRANSPARENCY => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::FRAMEBORDER => [
                SpecRule::VALUE => [
                    '0',
                    '1',
                ],
            ],
            Attribute::REFERRERPOLICY => [],
            Attribute::RESIZABLE => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::SANDBOX => [],
            Attribute::SCROLLING => [
                SpecRule::VALUE => [
                    'auto',
                    'no',
                    'yes',
                ],
            ],
            Attribute::TABINDEX => [
                SpecRule::VALUE_REGEX => '-?\d+',
            ],
            Attribute::SRC => [
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::SRC,
                    Attribute::SRCDOC,
                ],
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::DATA,
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => true,
                ],
            ],
            Attribute::SRCDOC => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::SRC,
                    Attribute::SRCDOC,
                ],
            ],
            '[src]' => [
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::SRC,
                    ],
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::IFRAME,
        ],
    ];
}
PK.3Y̑���Obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpIframely.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpIframely.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpIframely extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-IFRAMELY';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::IFRAMELY,
        SpecRule::ATTRS => [
            Attribute::DATA_ID => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::DATA_ID,
                    Attribute::DATA_URL,
                ],
            ],
            Attribute::DATA_URL => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::DATA_ID,
                    Attribute::DATA_URL,
                ],
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::DATA_KEY,
                    ],
                ],
            ],
            Attribute::DATA_KEY => [],
            Attribute::DATA_IMG => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::DATA_BORDER => [
                SpecRule::VALUE_REGEX => '(\d+)',
            ],
            Attribute::DATA_DOMAIN => [
                SpecRule::VALUE_REGEX => '^((?:[^\.\/]+\.)?iframe\.ly|if\-cdn\.com|iframely\.net|oembed\.vice\.com|iframe\.nbcnews\.com)$',
            ],
            Attribute::RESIZABLE => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-iframely',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::RESPONSIVE,
                Layout::INTRINSIC,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::IFRAMELY,
        ],
    ];
}
PK.3YO�ڽ77Tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImageLightbox.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpImageLightbox.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpImageLightbox extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-IMAGE-LIGHTBOX';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::IMAGE_LIGHTBOX,
        SpecRule::ATTRS => [
            Attribute::CONTROLS => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::NODISPLAY,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4EMAIL,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::IMAGE_LIGHTBOX,
        ],
    ];
}
PK.3Y�`��l	l	Rbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImageSlider.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpImageSlider.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array $childTags
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 * @property-read array<string> $disabledBy
 */
final class AmpImageSlider extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-IMAGE-SLIDER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::IMAGE_SLIDER,
        SpecRule::ATTRS => [
            Attribute::DISABLE_HINT_REAPPEAR => [],
            Attribute::INITIAL_SLIDER_POSITION => [
                SpecRule::VALUE_REGEX => '0(\.[0-9]+)?|1(\.0+)?',
            ],
            Attribute::STEP_SIZE => [
                SpecRule::VALUE_REGEX => '0(\.[0-9]+)?|1(\.0+)?',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-image-slider/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FIXED,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::CHILD_TAGS => [
            SpecRule::CHILD_TAG_NAME_ONEOF => [
                'AMP-IMG',
                'DIV',
            ],
            SpecRule::MANDATORY_MIN_NUM_CHILD_TAGS => 2,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::IMAGE_SLIDER,
        ],
        SpecRule::DISABLED_BY => [
            Attribute::TRANSFORMED,
        ],
    ];
}
PK.3Y�q���Zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImageSliderDivFirst.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpImageSliderDivFirst.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array<bool>> $attrs
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 */
final class AmpImageSliderDivFirst extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-IMAGE-SLIDER > DIV [first]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::DIV,
        SpecRule::SPEC_NAME => 'AMP-IMAGE-SLIDER > DIV [first]',
        SpecRule::MANDATORY_PARENT => Extension::IMAGE_SLIDER,
        SpecRule::ATTRS => [
            Attribute::FIRST => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-image-slider/',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Yv��,��[bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImageSliderDivSecond.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpImageSliderDivSecond.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array<bool>> $attrs
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 */
final class AmpImageSliderDivSecond extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-IMAGE-SLIDER > DIV [second]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::DIV,
        SpecRule::SPEC_NAME => 'AMP-IMAGE-SLIDER > DIV [second]',
        SpecRule::MANDATORY_PARENT => Extension::IMAGE_SLIDER,
        SpecRule::ATTRS => [
            Attribute::SECOND => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-image-slider/',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y��:�

]bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImageSliderTransformed.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpImageSliderTransformed.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array $childTags
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 * @property-read array<string> $enabledBy
 */
final class AmpImageSliderTransformed extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-image-slider (transformed)';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::IMAGE_SLIDER,
        SpecRule::SPEC_NAME => 'amp-image-slider (transformed)',
        SpecRule::ATTRS => [
            Attribute::DISABLE_HINT_REAPPEAR => [],
            Attribute::INITIAL_SLIDER_POSITION => [
                SpecRule::VALUE_REGEX => '0(\.[0-9]+)?|1(\.0+)?',
            ],
            Attribute::STEP_SIZE => [
                SpecRule::VALUE_REGEX => '0(\.[0-9]+)?|1(\.0+)?',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-image-slider/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FIXED,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::CHILD_TAGS => [
            SpecRule::CHILD_TAG_NAME_ONEOF => [
                'AMP-IMG',
                'DIV',
                'I-AMPHTML-SIZER',
            ],
            SpecRule::MANDATORY_MIN_NUM_CHILD_TAGS => 2,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::IMAGE_SLIDER,
        ],
        SpecRule::ENABLED_BY => [
            Attribute::TRANSFORMED,
        ],
    ];
}
PK.3Y@���??Obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImaVideo.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpImaVideo.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpImaVideo extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-IMA-VIDEO';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::IMA_VIDEO,
        SpecRule::ATTRS => [
            Attribute::AUTOPLAY => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::DATA_SRC => [
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => true,
                ],
            ],
            Attribute::DATA_TAG => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => true,
                ],
            ],
            Attribute::DOCK => [
                SpecRule::REQUIRES_EXTENSION => [
                    Extension::VIDEO_DOCKING,
                ],
            ],
            Attribute::ROTATE_TO_FULLSCREEN => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-ima-video/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::IMA_VIDEO,
        ],
    ];
}
PK.3YvdY��hbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImaVideoScriptTypeApplicationJson.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpImaVideoScriptTypeApplicationJson.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<array<array<string>>> $cdata
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class AmpImaVideoScriptTypeApplicationJson extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-ima-video > script[type=application/json]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'amp-ima-video > script[type=application/json]',
        SpecRule::MANDATORY_PARENT => Extension::IMA_VIDEO,
        SpecRule::ATTRS => [
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_PARENT_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'application/json',
                ],
            ],
        ],
        SpecRule::CDATA => [
            SpecRule::DISALLOWED_CDATA_REGEX => [
                [
                    SpecRule::REGEX => '<!--',
                    SpecRule::ERROR_MESSAGE => 'html comments',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'script type=application/ld+json',
    ];
}
PK.3Y/mOOUbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImaVideoSource.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpImaVideoSource.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpImaVideoSource extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-ima-video > source';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SOURCE,
        SpecRule::SPEC_NAME => 'amp-ima-video > source',
        SpecRule::MANDATORY_PARENT => Extension::IMA_VIDEO,
        SpecRule::ATTRS => [
            Attribute::MEDIA => [],
            Attribute::SRC => [
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => true,
                ],
            ],
            Attribute::TYPE => [],
            '[src]' => [],
            '[type]' => [],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::IMA_VIDEO,
        ],
    ];
}
PK.3Y����Tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImaVideoTrack.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpImaVideoTrack.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 */
final class AmpImaVideoTrack extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-ima-video > track';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::TRACK,
        SpecRule::SPEC_NAME => 'amp-ima-video > track',
        SpecRule::MANDATORY_PARENT => Extension::IMA_VIDEO,
        SpecRule::ATTRS => [
            '[label]' => [],
            '[src]' => [],
            '[srclang]' => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\TrackAttrsNoSubtitles::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y��GSYYabunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImaVideoTrackKindSubtitles.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpImaVideoTrackKindSubtitles.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 */
final class AmpImaVideoTrackKindSubtitles extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-ima-video > track[kind=subtitles]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::TRACK,
        SpecRule::SPEC_NAME => 'amp-ima-video > track[kind=subtitles]',
        SpecRule::MANDATORY_PARENT => Extension::IMA_VIDEO,
        SpecRule::ATTRS => [
            '[label]' => [],
            '[src]' => [],
            '[srclang]' => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\TrackAttrsSubtitles::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-ima-video/',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y����	�	Jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImg.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpImg.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requires
 */
final class AmpImg extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-IMG';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::IMG,
        SpecRule::ATTRS => [
            Attribute::ALT => [],
            Attribute::ATTRIBUTION => [],
            Attribute::CROSSORIGIN => [],
            Attribute::IMPORTANCE => [
                SpecRule::VALUE_CASEI => [
                    'high',
                    'low',
                    'auto',
                ],
            ],
            Attribute::OBJECT_FIT => [],
            Attribute::OBJECT_POSITION => [],
            Attribute::PLACEHOLDER => [],
            Attribute::REFERRERPOLICY => [],
            '[alt]' => [],
            '[attribution]' => [],
            '[src]' => [],
            '[srcset]' => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
            AttributeList\LightboxableElements::ID,
            AttributeList\MandatorySrcOrSrcset::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-img/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::REQUIRES => [
            'amphtml javascript runtime (v0.js)',
        ],
    ];
}
PK.3Y3�ggSbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImgAmp4email.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpImgAmp4email.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requires
 */
final class AmpImgAmp4email extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-IMG (AMP4EMAIL)';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::IMG,
        SpecRule::SPEC_NAME => 'AMP-IMG (AMP4EMAIL)',
        SpecRule::ATTRS => [
            Attribute::ALT => [],
            Attribute::ATTRIBUTION => [],
            Attribute::PLACEHOLDER => [],
            '[alt]' => [],
            '[attribution]' => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
            AttributeList\MandatorySrcAmp4email::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-img/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4EMAIL,
        ],
        SpecRule::REQUIRES => [
            'amphtml javascript runtime (v0.js)',
        ],
    ];
}
PK.3Yn\���cbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImgImgPlaceholderTransformed.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpImgImgPlaceholderTransformed.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $enabledBy
 */
final class AmpImgImgPlaceholderTransformed extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-img > img[placeholder] (transformed)';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::IMG,
        SpecRule::SPEC_NAME => 'amp-img > img[placeholder] (transformed)',
        SpecRule::MANDATORY_PARENT => 'amp-img (transformed)',
        SpecRule::ATTRS => [
            Attribute::ALT => [],
            Attribute::ATTRIBUTION => [],
            Attribute::CLASS_ => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'i-amphtml-blurry-placeholder',
                ],
            ],
            Attribute::OBJECT_FIT => [],
            Attribute::OBJECT_POSITION => [],
            Attribute::PLACEHOLDER => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    '',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_DISPATCH',
            ],
            Attribute::REFERRERPOLICY => [],
            Attribute::SIZES => [],
            Attribute::TITLE => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\MandatorySrcOrSrcset::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::ENABLED_BY => [
            Attribute::TRANSFORMED,
        ],
    ];
}
PK.3Yڥ�R
R
Xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImgImgTransformed.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpImgImgTransformed.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $enabledBy
 */
final class AmpImgImgTransformed extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-img > img (transformed)';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::IMG,
        SpecRule::SPEC_NAME => 'amp-img > img (transformed)',
        SpecRule::MANDATORY_PARENT => 'amp-img (transformed)',
        SpecRule::ATTRS => [
            Attribute::ALT => [],
            Attribute::ATTRIBUTION => [],
            Attribute::HEIGHT => [],
            Attribute::IMPORTANCE => [
                SpecRule::VALUE_CASEI => [
                    'high',
                    'low',
                    'auto',
                ],
            ],
            Attribute::OBJECT_FIT => [],
            Attribute::OBJECT_POSITION => [],
            Attribute::REFERRERPOLICY => [],
            Attribute::SIZES => [],
            Attribute::TITLE => [],
            Attribute::WIDTH => [],
            Attribute::CLASS_ => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_REGEX => 'i-amphtml-fill-content\s+i-amphtml-replaced-content|i-amphtml-replaced-content\s+i-amphtml-fill-content',
            ],
            Attribute::DECODING => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'async',
                ],
            ],
            Attribute::LOADING => [
                SpecRule::VALUE => [
                    'lazy',
                    'eager',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\MandatorySrcOrSrcset::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::ENABLED_BY => [
            Attribute::TRANSFORMED,
        ],
    ];
}
PK.3Y�B�p66Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImgTransformed.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpImgTransformed.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requires
 * @property-read array<string> $enabledBy
 */
final class AmpImgTransformed extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-img (transformed)';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::IMG,
        SpecRule::SPEC_NAME => 'amp-img (transformed)',
        SpecRule::ATTRS => [
            Attribute::I_AMPHTML_SSR => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_DISPATCH',
            ],
            Attribute::ALT => [],
            Attribute::ATTRIBUTION => [],
            Attribute::IMPORTANCE => [
                SpecRule::VALUE_CASEI => [
                    'high',
                    'low',
                    'auto',
                ],
            ],
            Attribute::OBJECT_FIT => [],
            Attribute::OBJECT_POSITION => [],
            Attribute::PLACEHOLDER => [],
            Attribute::REFERRERPOLICY => [],
            '[alt]' => [],
            '[attribution]' => [],
            '[src]' => [],
            '[srcset]' => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
            AttributeList\LightboxableElements::ID,
            AttributeList\MandatorySrcOrSrcset::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-img/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES => [
            'amphtml javascript runtime (v0.js)',
        ],
        SpecRule::ENABLED_BY => [
            Attribute::TRANSFORMED,
        ],
    ];
}
PK.3Yo�����Lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImgur.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpImgur.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array<bool>> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpImgur extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-IMGUR';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::IMGUR,
        SpecRule::ATTRS => [
            Attribute::DATA_IMGUR_ID => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::IMGUR,
        ],
    ];
}
PK.3Y��iTbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpInlineGallery.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpInlineGallery.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpInlineGallery extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-INLINE-GALLERY';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::INLINE_GALLERY,
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-inline-gallery/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::CONTAINER,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::INLINE_GALLERY,
        ],
    ];
}
PK.3Y��Se��^bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpInlineGalleryPagination.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpInlineGalleryPagination.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpInlineGalleryPagination extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-inline-gallery-pagination';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::INLINE_GALLERY_PAGINATION,
        SpecRule::SPEC_NAME => 'amp-inline-gallery-pagination',
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-inline-gallery/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::MANDATORY_ANCESTOR => Extension::INLINE_GALLERY,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::INLINE_GALLERY,
        ],
    ];
}
PK.3Y��!��cbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpInlineGalleryPaginationInset.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpInlineGalleryPaginationInset.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array<bool>> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpInlineGalleryPaginationInset extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-inline-gallery-pagination [inset]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::INLINE_GALLERY_PAGINATION,
        SpecRule::SPEC_NAME => 'amp-inline-gallery-pagination [inset]',
        SpecRule::ATTRS => [
            Attribute::INSET => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-inline-gallery/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::NODISPLAY,
            ],
        ],
        SpecRule::MANDATORY_ANCESTOR => Extension::INLINE_GALLERY,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::INLINE_GALLERY,
        ],
    ];
}
PK.3Y,���,,^bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpInlineGalleryThumbnails.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpInlineGalleryThumbnails.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpInlineGalleryThumbnails extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-INLINE-GALLERY-THUMBNAILS';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::INLINE_GALLERY_THUMBNAILS,
        SpecRule::ATTRS => [
            Attribute::ASPECT_RATIO_HEIGHT => [
                SpecRule::DISALLOWED_VALUE_REGEX => '^0+(\.0+)?$',
                SpecRule::VALUE_REGEX => '\d+(\.\d+)?',
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::ASPECT_RATIO_WIDTH,
                    ],
                ],
            ],
            Attribute::ASPECT_RATIO_WIDTH => [
                SpecRule::DISALLOWED_VALUE_REGEX => '^0+(\.0+)?$',
                SpecRule::VALUE_REGEX => '\d+(\.\d+)?',
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::ASPECT_RATIO_HEIGHT,
                    ],
                ],
            ],
            Attribute::ASPECT_RATIO => [
                SpecRule::DISALLOWED_VALUE_REGEX => '^0+(\.0+)?$',
                SpecRule::VALUE_REGEX => '\d+(\.\d+)?',
            ],
            Attribute::LOOP => [
                SpecRule::VALUE => [
                    'true',
                    'false',
                    '',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-inline-gallery/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::MANDATORY_ANCESTOR => Extension::INLINE_GALLERY,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::INLINE_GALLERY,
        ],
    ];
}
PK.3Y;a��Pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpInstagram.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpInstagram.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpInstagram extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-INSTAGRAM';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::INSTAGRAM,
        SpecRule::ATTRS => [
            Attribute::ALT => [],
            Attribute::DATA_SHORTCODE => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::INSTAGRAM,
        ],
    ];
}
PK.3Y5�5�``[bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpInstallServiceworker.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpInstallServiceworker.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpInstallServiceworker extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-INSTALL-SERVICEWORKER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::INSTALL_SERVICEWORKER,
        SpecRule::ATTRS => [
            Attribute::DATA_IFRAME_SRC => [
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => true,
                ],
            ],
            Attribute::SRC => [
                SpecRule::MANDATORY => true,
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => true,
                ],
            ],
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::NODISPLAY,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::INSTALL_SERVICEWORKER,
        ],
    ];
}
PK.3Y�����Obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpIzlesene.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpIzlesene.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpIzlesene extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-IZLESENE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::IZLESENE,
        SpecRule::ATTRS => [
            Attribute::DATA_VIDEOID => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_REGEX => '[0-9]+',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::IZLESENE,
        ],
    ];
}
PK.3Y��tbE
E
Obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpJwplayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpJwplayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpJwplayer extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-JWPLAYER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::JWPLAYER,
        SpecRule::ATTRS => [
            Attribute::AUTOPLAY => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::DATA_MEDIA_ID => [
                SpecRule::VALUE_REGEX_CASEI => '[0-9a-z]{8}|outstream',
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::DATA_MEDIA_ID,
                    Attribute::DATA_PLAYLIST_ID,
                ],
            ],
            Attribute::DATA_PLAYER_ID => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_REGEX_CASEI => '[0-9a-z]{8}',
            ],
            Attribute::DATA_PLAYLIST_ID => [
                SpecRule::VALUE_REGEX_CASEI => '[0-9a-z]{8}',
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::DATA_MEDIA_ID,
                    Attribute::DATA_PLAYLIST_ID,
                ],
            ],
            Attribute::DOCK => [
                SpecRule::REQUIRES_EXTENSION => [
                    Extension::VIDEO_DOCKING,
                ],
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-jwplayer/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::JWPLAYER,
        ],
    ];
}
PK.3Y�E�aTbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpKalturaPlayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpKalturaPlayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array<bool>> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpKalturaPlayer extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-KALTURA-PLAYER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::KALTURA_PLAYER,
        SpecRule::ATTRS => [
            Attribute::DATA_PARTNER => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::KALTURA_PLAYER,
        ],
    ];
}
PK.3Yı��Mbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLayout.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpLayout.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requires
 */
final class AmpLayout extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-LAYOUT';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::LAYOUT,
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-layout/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
                Layout::CONTAINER,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
        SpecRule::REQUIRES => [
            'amphtml javascript runtime (v0.js)',
        ],
    ];
}
PK.3Y�tA		Obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLightbox.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpLightbox.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpLightbox extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-LIGHTBOX';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::LIGHTBOX,
        SpecRule::ATTRS => [
            Attribute::ANIMATE_IN => [
                SpecRule::VALUE_CASEI => [
                    'fade-in',
                    'fly-in-bottom',
                    'fly-in-top',
                ],
            ],
            Attribute::ANIMATION => [
                SpecRule::VALUE_CASEI => [
                    'fade-in',
                    'fly-in-bottom',
                    'fly-in-top',
                ],
                SpecRule::DISABLED_BY => [
                    Attribute::AMP4EMAIL,
                ],
            ],
            Attribute::CONTROLS => [],
            Attribute::FROM => [],
            Attribute::SCROLLABLE => [
                SpecRule::DISABLED_BY => [
                    Attribute::AMP4EMAIL,
                ],
            ],
            '[open]' => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::NODISPLAY,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4EMAIL,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::LIGHTBOX,
        ],
    ];
}
PK.3Y�DA���Vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLightboxAmp4ads.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpLightboxAmp4ads.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpLightboxAmp4ads extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-lightbox [AMP4ADS]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::LIGHTBOX,
        SpecRule::SPEC_NAME => 'amp-lightbox [AMP4ADS]',
        SpecRule::ATTRS => [
            Attribute::ANIMATE_IN => [
                SpecRule::VALUE_CASEI => [
                    'fade-in',
                    'fly-in-bottom',
                    'fly-in-top',
                ],
            ],
            Attribute::CLOSE_BUTTON => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::CONTROLS => [],
            Attribute::FROM => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::NODISPLAY,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4ADS,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::LIGHTBOX,
        ],
    ];
}
PK.3Y�2��Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLinkRewriter.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Layout;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpLinkRewriter.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read bool $unique
 * @property-read array<array<string>> $ampLayout
 * @property-read array $childTags
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpLinkRewriter extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-LINK-REWRITER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::LINK_REWRITER,
        SpecRule::UNIQUE => true,
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::NODISPLAY,
            ],
        ],
        SpecRule::CHILD_TAGS => [
            SpecRule::MANDATORY_NUM_CHILD_TAGS => 1,
            SpecRule::FIRST_CHILD_TAG_NAME_ONEOF => [
                'SCRIPT',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::LINK_REWRITER,
        ],
    ];
}
PK.3YD6�S||fbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLinkRewriterExtensionJsonScript.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpLinkRewriterExtensionJsonScript.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<array<string>>> $cdata
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpLinkRewriterExtensionJsonScript extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-link-rewriter extension .json script';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'amp-link-rewriter extension .json script',
        SpecRule::MANDATORY_PARENT => Extension::LINK_REWRITER,
        SpecRule::ATTRS => [
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_PARENT_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'application/json',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
        ],
        SpecRule::CDATA => [
            SpecRule::DISALLOWED_CDATA_REGEX => [
                [
                    SpecRule::REGEX => '<!--',
                    SpecRule::ERROR_MESSAGE => 'html comments',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::LINK_REWRITER,
        ],
    ];
}
PK.3YF<�'Kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpList.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpList.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpList extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-LIST';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::LIST_,
        SpecRule::ATTRS => [
            Attribute::AUTO_RESIZE => [
                SpecRule::VALUE => [
                    '',
                ],
                SpecRule::DEPRECATION => 'replacement-to-be-determined-at-a-later-date',
                SpecRule::DEPRECATION_URL => 'https://github.com/ampproject/amphtml/issues/18849',
            ],
            Attribute::BINDING => [
                SpecRule::VALUE => [
                    'always',
                    'no',
                    'refresh',
                ],
            ],
            Attribute::CREDENTIALS => [],
            Attribute::DATA_AMP_BIND_SRC => [
                SpecRule::MANDATORY_ANYOF => [
                    Attribute::SRC,
                    '[src]',
                    Attribute::DATA_AMP_BIND_SRC,
                ],
            ],
            Attribute::DIFFABLE => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::ITEMS => [],
            Attribute::LOAD_MORE => [
                SpecRule::VALUE => [
                    'auto',
                    'manual',
                ],
            ],
            Attribute::LOAD_MORE_BOOKMARK => [
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::LOAD_MORE,
                    ],
                ],
            ],
            Attribute::MAX_ITEMS => [],
            Attribute::RESET_ON_REFRESH => [
                SpecRule::VALUE => [
                    '',
                    'always',
                    'fetch',
                ],
            ],
            Attribute::SINGLE_ITEM => [],
            Attribute::SRC => [
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                        Protocol::AMP_STATE,
                        Protocol::AMP_SCRIPT,
                    ],
                    SpecRule::ALLOW_RELATIVE => true,
                ],
                SpecRule::MANDATORY_ANYOF => [
                    Attribute::SRC,
                    '[src]',
                    Attribute::DATA_AMP_BIND_SRC,
                ],
            ],
            Attribute::TEMPLATE => [
                SpecRule::VALUE_ONEOF_SET => 'TEMPLATE_IDS',
            ],
            Attribute::XSSI_PREFIX => [],
            '[is-layout-container]' => [],
            '[src]' => [
                SpecRule::MANDATORY_ANYOF => [
                    Attribute::SRC,
                    '[src]',
                    Attribute::DATA_AMP_BIND_SRC,
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::LIST_,
        ],
    ];
}
PK.3Y`��
		Tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpListAmp4email.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpListAmp4email.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $disallowedAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpListAmp4email extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-LIST (AMP4EMAIL)';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::LIST_,
        SpecRule::SPEC_NAME => 'AMP-LIST (AMP4EMAIL)',
        SpecRule::ATTRS => [
            Attribute::BINDING => [
                SpecRule::VALUE => [
                    'always',
                    'no',
                    'refresh',
                    'refresh-evaluate',
                ],
            ],
            Attribute::DIFFABLE => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::ITEMS => [],
            Attribute::MAX_ITEMS => [],
            Attribute::SINGLE_ITEM => [],
            Attribute::SRC => [
                SpecRule::MANDATORY => true,
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin|{{|}}',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => false,
                ],
            ],
            Attribute::TEMPLATE => [
                SpecRule::VALUE_ONEOF_SET => 'TEMPLATE_IDS',
            ],
            Attribute::XSSI_PREFIX => [],
            '[is-layout-container]' => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::CONTAINER,
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::DISALLOWED_ANCESTOR => [
            'AMP-LIST',
            'AMP-STATE',
            'TEMPLATE',
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4EMAIL,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::LIST_,
        ],
    ];
}
PK.3Y�eJ��Xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpListDivFetchError.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpListDivFetchError.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class AmpListDivFetchError extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-LIST DIV [fetch-error]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::DIV,
        SpecRule::SPEC_NAME => 'AMP-LIST DIV [fetch-error]',
        SpecRule::ATTRS => [
            Attribute::ALIGN => [],
            Attribute::FETCH_ERROR => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::MANDATORY_ANCESTOR => Extension::LIST_,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y�㍵�
�
Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpListLoadMore.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpListLoadMore.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpListLoadMore extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-LIST-LOAD-MORE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::LIST_LOAD_MORE,
        SpecRule::MANDATORY_PARENT => Extension::LIST_,
        SpecRule::ATTRS => [
            Attribute::LOAD_MORE_BUTTON => [
                SpecRule::VALUE => [
                    '',
                ],
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::LOAD_MORE_BUTTON,
                    Attribute::LOAD_MORE_FAILED,
                    Attribute::LOAD_MORE_END,
                    Attribute::LOAD_MORE_LOADING,
                ],
            ],
            Attribute::LOAD_MORE_FAILED => [
                SpecRule::VALUE => [
                    '',
                ],
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::LOAD_MORE_BUTTON,
                    Attribute::LOAD_MORE_FAILED,
                    Attribute::LOAD_MORE_END,
                    Attribute::LOAD_MORE_LOADING,
                ],
            ],
            Attribute::LOAD_MORE_LOADING => [
                SpecRule::VALUE => [
                    '',
                ],
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::LOAD_MORE_BUTTON,
                    Attribute::LOAD_MORE_FAILED,
                    Attribute::LOAD_MORE_END,
                    Attribute::LOAD_MORE_LOADING,
                ],
            ],
            Attribute::LOAD_MORE_END => [
                SpecRule::VALUE => [
                    '',
                ],
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::LOAD_MORE_BUTTON,
                    Attribute::LOAD_MORE_FAILED,
                    Attribute::LOAD_MORE_END,
                    Attribute::LOAD_MORE_LOADING,
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::LIST_,
        ],
    ];
}
PK.3Yq"���jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpListLoadMoreButtonLoadMoreClickable.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpListLoadMoreButtonLoadMoreClickable.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpListLoadMoreButtonLoadMoreClickable extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-list-load-more button[load-more-clickable]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::BUTTON,
        SpecRule::SPEC_NAME => 'amp-list-load-more button[load-more-clickable]',
        SpecRule::MANDATORY_PARENT => Extension::LIST_LOAD_MORE,
        SpecRule::ATTRS => [
            Attribute::DISABLED => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::LOAD_MORE_CLICKABLE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    '',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_DISPATCH',
            ],
            Attribute::ROLE => [
                SpecRule::IMPLICIT => true,
            ],
            Attribute::TABINDEX => [
                SpecRule::IMPLICIT => true,
            ],
            Attribute::TYPE => [],
            Attribute::VALUE => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NameAttr::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::LIST_,
        ],
    ];
}
PK.3Yj^�w
w
Obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLiveList.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpLiveList.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<array> $referencePoints
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpLiveList extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-LIVE-LIST';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::LIVE_LIST,
        SpecRule::ATTRS => [
            Attribute::DATA_MAX_ITEMS_PER_PAGE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_REGEX => '\d+',
            ],
            Attribute::DATA_POLL_INTERVAL => [
                SpecRule::VALUE_REGEX => '\d{5,}',
            ],
            Attribute::DISABLED => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::SORT => [
                SpecRule::VALUE => [
                    'ascending',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\MandatoryIdAttr::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::CONTAINER,
                Layout::FIXED_HEIGHT,
            ],
        ],
        SpecRule::REFERENCE_POINTS => [
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-LIVE-LIST [update]',
                SpecRule::MANDATORY => true,
                SpecRule::UNIQUE => true,
            ],
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-LIVE-LIST [items]',
                SpecRule::MANDATORY => true,
                SpecRule::UNIQUE => true,
            ],
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-LIVE-LIST [pagination]',
                SpecRule::UNIQUE => true,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::LIVE_LIST,
        ],
    ];
}
PK.3Y����99Tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLiveListItems.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpLiveListItems.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array<bool>> $attrs
 * @property-read string $specUrl
 * @property-read array<array<string>> $referencePoints
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class AmpLiveListItems extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-LIVE-LIST [items]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => '$REFERENCE_POINT',
        SpecRule::SPEC_NAME => 'AMP-LIVE-LIST [items]',
        SpecRule::ATTRS => [
            Attribute::ITEMS => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-live-list/#items',
        SpecRule::REFERENCE_POINTS => [
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-LIVE-LIST [items] item',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'amp-live-list [items] child',
    ];
}
PK.3YF�t��Xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLiveListItemsItem.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpLiveListItemsItem.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class AmpLiveListItemsItem extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-LIVE-LIST [items] item';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => '$REFERENCE_POINT',
        SpecRule::SPEC_NAME => 'AMP-LIVE-LIST [items] item',
        SpecRule::ATTRS => [
            Attribute::DATA_SORT_TIME => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::DATA_TOMBSTONE => [],
            Attribute::DATA_UPDATE_TIME => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\MandatoryIdAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-live-list/#items',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'amp-live-list [data-sort-time] child',
    ];
}
PK.3Y�ʓ���Ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLiveListPagination.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpLiveListPagination.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array<bool>> $attrs
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class AmpLiveListPagination extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-LIVE-LIST [pagination]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => '$REFERENCE_POINT',
        SpecRule::SPEC_NAME => 'AMP-LIVE-LIST [pagination]',
        SpecRule::ATTRS => [
            Attribute::PAGINATION => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-live-list/#pagination',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'amp-live-list [pagination] child',
    ];
}
PK.3Y�WνooUbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLiveListUpdate.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpLiveListUpdate.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array<bool>> $attrs
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class AmpLiveListUpdate extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-LIVE-LIST [update]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => '$REFERENCE_POINT',
        SpecRule::SPEC_NAME => 'AMP-LIVE-LIST [update]',
        SpecRule::ATTRS => [
            Attribute::UPDATE => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-live-list/#update',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'amp-live-list [update] child',
    ];
}
PK.3Y�z�_NNMbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMathml.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpMathml.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpMathml extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-MATHML';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::MATHML,
        SpecRule::ATTRS => [
            Attribute::DATA_FORMULA => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::INLINE => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::CONTAINER,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::MATHML,
        ],
    ];
}
PK.3Y�!����Obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaMenu.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\DescendantTagList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpMegaMenu.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array $childTags
 * @property-read array<array<string>> $referencePoints
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 * @property-read string $descendantTagList
 */
final class AmpMegaMenu extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-MEGA-MENU';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::MEGA_MENU,
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-mega-menu/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FIXED_HEIGHT,
            ],
        ],
        SpecRule::CHILD_TAGS => [
            SpecRule::MANDATORY_NUM_CHILD_TAGS => 1,
            SpecRule::CHILD_TAG_NAME_ONEOF => [
                'NAV',
                'AMP-LIST',
            ],
        ],
        SpecRule::REFERENCE_POINTS => [
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-MEGA-MENU > AMP-LIST',
            ],
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-MEGA-MENU > NAV',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::MEGA_MENU,
        ],
        SpecRule::DESCENDANT_TAG_LIST => DescendantTagList\AmpMegaMenuAllowedDescendants::ID,
    ];
}
PK.3Y�
����Vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaMenuAmpList.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpMegaMenuAmpList.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array<string>> $attrs
 * @property-read array $childTags
 * @property-read array<array<string>> $referencePoints
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class AmpMegaMenuAmpList extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-MEGA-MENU > AMP-LIST';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => '$REFERENCE_POINT',
        SpecRule::SPEC_NAME => 'AMP-MEGA-MENU > AMP-LIST',
        SpecRule::ATTRS => [
            Attribute::SRC => [
                SpecRule::MANDATORY_ANYOF => [
                    Attribute::SRC,
                    '[src]',
                ],
            ],
            '[src]' => [
                SpecRule::MANDATORY_ANYOF => [
                    Attribute::SRC,
                    '[src]',
                ],
            ],
        ],
        SpecRule::CHILD_TAGS => [
            SpecRule::MANDATORY_NUM_CHILD_TAGS => 1,
            SpecRule::CHILD_TAG_NAME_ONEOF => [
                'TEMPLATE',
            ],
        ],
        SpecRule::REFERENCE_POINTS => [
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-MEGA-MENU > AMP-LIST > TEMPLATE',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'amp-mega-menu > amp-list',
    ];
}
PK.3Y�.�oo^bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaMenuAmpListTemplate.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpMegaMenuAmpListTemplate.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array $childTags
 * @property-read array<array<string>> $referencePoints
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class AmpMegaMenuAmpListTemplate extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-MEGA-MENU > AMP-LIST > TEMPLATE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => '$REFERENCE_POINT',
        SpecRule::SPEC_NAME => 'AMP-MEGA-MENU > AMP-LIST > TEMPLATE',
        SpecRule::MANDATORY_PARENT => Extension::LIST_,
        SpecRule::CHILD_TAGS => [
            SpecRule::MANDATORY_NUM_CHILD_TAGS => 1,
            SpecRule::CHILD_TAG_NAME_ONEOF => [
                'NAV',
            ],
        ],
        SpecRule::REFERENCE_POINTS => [
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-MEGA-MENU > NAV',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'amp-mega-menu > amp-list > template',
    ];
}
PK.3Y�g�KKZbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaMenuItemContent.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpMegaMenuItemContent.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array> $attrs
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class AmpMegaMenuItemContent extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-MEGA-MENU item-content';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => '$REFERENCE_POINT',
        SpecRule::SPEC_NAME => 'AMP-MEGA-MENU item-content',
        SpecRule::ATTRS => [
            Attribute::ROLE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'dialog',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'amp-mega-menu item-content',
    ];
}
PK.3Ys�m�--Zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaMenuItemHeading.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpMegaMenuItemHeading.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array<array<string>>> $attrs
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class AmpMegaMenuItemHeading extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-MEGA-MENU item-heading';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => '$REFERENCE_POINT',
        SpecRule::SPEC_NAME => 'AMP-MEGA-MENU item-heading',
        SpecRule::ATTRS => [
            Attribute::ROLE => [
                SpecRule::VALUE => [
                    'button',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'amp-mega-menu item-heading',
    ];
}
PK.3Y�A��  Rbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaMenuNav.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpMegaMenuNav.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $childTags
 * @property-read array<array<string>> $referencePoints
 * @property-read array<string> $htmlFormat
 * @property-read bool $siblingsDisallowed
 * @property-read string $descriptiveName
 */
final class AmpMegaMenuNav extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-MEGA-MENU > NAV';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => '$REFERENCE_POINT',
        SpecRule::SPEC_NAME => 'AMP-MEGA-MENU > NAV',
        SpecRule::CHILD_TAGS => [
            SpecRule::MANDATORY_NUM_CHILD_TAGS => 1,
            SpecRule::CHILD_TAG_NAME_ONEOF => [
                'OL',
                'UL',
            ],
        ],
        SpecRule::REFERENCE_POINTS => [
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-MEGA-MENU NAV > UL/OL',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SIBLINGS_DISALLOWED => true,
        SpecRule::DESCRIPTIVE_NAME => 'amp-mega-menu > nav',
    ];
}
PK.3Y6s$8UUVbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaMenuNavUlOl.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpMegaMenuNavUlOl.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array $childTags
 * @property-read array<array<string>> $referencePoints
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class AmpMegaMenuNavUlOl extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-MEGA-MENU NAV > UL/OL';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => '$REFERENCE_POINT',
        SpecRule::SPEC_NAME => 'AMP-MEGA-MENU NAV > UL/OL',
        SpecRule::MANDATORY_PARENT => Element::NAV,
        SpecRule::CHILD_TAGS => [
            SpecRule::CHILD_TAG_NAME_ONEOF => [
                'LI',
            ],
            SpecRule::MANDATORY_MIN_NUM_CHILD_TAGS => 1,
        ],
        SpecRule::REFERENCE_POINTS => [
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-MEGA-MENU NAV > UL/OL > LI',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'amp-mega-menu nav > ul/ol',
    ];
}
PK.3YЌQ��Xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaMenuNavUlOlLi.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpMegaMenuNavUlOlLi.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $childTags
 * @property-read array<array> $referencePoints
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class AmpMegaMenuNavUlOlLi extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-MEGA-MENU NAV > UL/OL > LI';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => '$REFERENCE_POINT',
        SpecRule::SPEC_NAME => 'AMP-MEGA-MENU NAV > UL/OL > LI',
        SpecRule::CHILD_TAGS => [
            SpecRule::CHILD_TAG_NAME_ONEOF => [
                'A',
                'BUTTON',
                'DIV',
                'H1',
                'H2',
                'H3',
                'H4',
                'H5',
                'H6',
                'SPAN',
            ],
            SpecRule::MANDATORY_MIN_NUM_CHILD_TAGS => 1,
        ],
        SpecRule::REFERENCE_POINTS => [
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-MEGA-MENU item-content',
                SpecRule::UNIQUE => true,
            ],
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-MEGA-MENU item-heading',
                SpecRule::MANDATORY => true,
                SpecRule::UNIQUE => true,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'amp-mega-menu nav > ul/ol > li',
    ];
}
PK.3Y�f��zz[bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaphoneDataEpisode.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpMegaphoneDataEpisode.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpMegaphoneDataEpisode extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-megaphone [data-episode]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::MEGAPHONE,
        SpecRule::SPEC_NAME => 'amp-megaphone [data-episode]',
        SpecRule::ATTRS => [
            Attribute::DATA_EPISODE => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_DISPATCH',
                SpecRule::VALUE_REGEX => '[A-Za-z0-9]+',
            ],
            Attribute::DATA_START => [
                SpecRule::VALUE_REGEX => '\d+(\.\d+)?',
            ],
            Attribute::DATA_TILE => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\AmpMegaphoneCommon::ID,
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::MEGAPHONE,
        ],
    ];
}
PK.3Yy�4���\bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaphoneDataPlaylist.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpMegaphoneDataPlaylist.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpMegaphoneDataPlaylist extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-megaphone [data-playlist]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::MEGAPHONE,
        SpecRule::SPEC_NAME => 'amp-megaphone [data-playlist]',
        SpecRule::ATTRS => [
            Attribute::DATA_PLAYLIST => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_DISPATCH',
                SpecRule::VALUE_REGEX => '[A-Za-z0-9]+',
            ],
            Attribute::DATA_EPISODES => [
                SpecRule::VALUE_REGEX => '[0-9]+',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\AmpMegaphoneCommon::ID,
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::MEGAPHONE,
        ],
    ];
}
PK.3Y��~��
�
Xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMinuteMediaPlayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpMinuteMediaPlayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpMinuteMediaPlayer extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-MINUTE-MEDIA-PLAYER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::MINUTE_MEDIA_PLAYER,
        SpecRule::ATTRS => [
            Attribute::AUTOPLAY => [],
            Attribute::DATA_CONTENT_ID => [],
            Attribute::DATA_CONTENT_TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'curated',
                    'semantic',
                    'specific',
                ],
            ],
            Attribute::DATA_MINIMUM_DATE_FACTOR => [],
            Attribute::DATA_SCANNED_ELEMENT => [],
            Attribute::DATA_SCANNED_ELEMENT_TYPE => [
                SpecRule::VALUE => [
                    'className',
                    'id',
                    'tag',
                ],
            ],
            Attribute::DATA_SCOPED_KEYWORDS => [],
            Attribute::DATA_TAGS => [],
            Attribute::DOCK => [
                SpecRule::REQUIRES_EXTENSION => [
                    Extension::VIDEO_DOCKING,
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-minute-media-player/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::MINUTE_MEDIA_PLAYER,
        ],
    ];
}
PK.3YX%��		Pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMowplayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpMowplayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpMowplayer extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-MOWPLAYER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::MOWPLAYER,
        SpecRule::ATTRS => [
            Attribute::AUTOPLAY => [],
            Attribute::DATA_MEDIAID => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::MOWPLAYER,
        ],
    ];
}
PK.3Y׈++Qbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNestedMenu.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\DescendantTagList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpNestedMenu.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array<array<string>>> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 * @property-read string $descendantTagList
 */
final class AmpNestedMenu extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-NESTED-MENU';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::NESTED_MENU,
        SpecRule::ATTRS => [
            Attribute::SIDE => [
                SpecRule::VALUE => [
                    'left',
                    'right',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-nested-menu/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
            ],
        ],
        SpecRule::MANDATORY_ANCESTOR => Extension::SIDEBAR,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::SIDEBAR,
        ],
        SpecRule::DESCENDANT_TAG_LIST => DescendantTagList\AmpNestedMenuAllowedDescendants::ID,
    ];
}
PK.3Y���qqUbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNextPageFooter.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpNextPageFooter.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array<bool>> $attrs
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class AmpNextPageFooter extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-NEXT-PAGE > [footer]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => '$REFERENCE_POINT',
        SpecRule::SPEC_NAME => 'AMP-NEXT-PAGE > [footer]',
        SpecRule::MANDATORY_PARENT => Extension::NEXT_PAGE,
        SpecRule::ATTRS => [
            Attribute::FOOTER => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'amp-next-page [footer] child',
    ];
}
PK.3Y�$���`bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNextPageRecommendationBox.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpNextPageRecommendationBox.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array<bool>> $attrs
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class AmpNextPageRecommendationBox extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-NEXT-PAGE > [recommendation-box]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => '$REFERENCE_POINT',
        SpecRule::SPEC_NAME => 'AMP-NEXT-PAGE > [recommendation-box]',
        SpecRule::MANDATORY_PARENT => Extension::NEXT_PAGE,
        SpecRule::ATTRS => [
            Attribute::RECOMMENDATION_BOX => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'amp-next-page [recommendation-box] child',
    ];
}
PK.3Y�	�vhbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNextPageScriptTypeApplicationJson.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpNextPageScriptTypeApplicationJson.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpNextPageScriptTypeApplicationJson extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-NEXT-PAGE > SCRIPT[type=application/json]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'AMP-NEXT-PAGE > SCRIPT[type=application/json]',
        SpecRule::MANDATORY_PARENT => Extension::NEXT_PAGE,
        SpecRule::ATTRS => [
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_PARENT_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'application/json',
                ],
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-next-page/',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::NEXT_PAGE,
        ],
    ];
}
PK.3Yҧm��Xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNextPageSeparator.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpNextPageSeparator.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array<bool>> $attrs
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class AmpNextPageSeparator extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-NEXT-PAGE > [separator]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => '$REFERENCE_POINT',
        SpecRule::SPEC_NAME => 'AMP-NEXT-PAGE > [separator]',
        SpecRule::MANDATORY_PARENT => Extension::NEXT_PAGE,
        SpecRule::ATTRS => [
            Attribute::SEPARATOR => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'amp-next-page [separator] child',
    ];
}
PK.3Y_��

Zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNextPageTypeAdsense.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpNextPageTypeAdsense.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read array $attrs
 * @property-read string $specUrl
 * @property-read array<array> $referencePoints
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpNextPageTypeAdsense extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-next-page [type=adsense]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::NEXT_PAGE,
        SpecRule::SPEC_NAME => 'amp-next-page [type=adsense]',
        SpecRule::UNIQUE => true,
        SpecRule::ATTRS => [
            Attribute::DATA_CLIENT => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::DATA_SLOT => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::DEEP_PARSING => [],
            Attribute::MAX_PAGES => [],
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'adsense',
                ],
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-next-page/',
        SpecRule::REFERENCE_POINTS => [
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-NEXT-PAGE > [separator]',
                SpecRule::UNIQUE => true,
            ],
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-NEXT-PAGE > [recommendation-box]',
                SpecRule::UNIQUE => true,
            ],
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-NEXT-PAGE > [footer]',
                SpecRule::UNIQUE => true,
            ],
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-NEXT-PAGE > SCRIPT[type=application/json]',
                SpecRule::UNIQUE => true,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::NEXT_PAGE,
        ],
    ];
}
PK.3Y|'���_bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNextPageWithInlineConfig.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpNextPageWithInlineConfig.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read array<array> $attrs
 * @property-read string $specUrl
 * @property-read array<array> $referencePoints
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpNextPageWithInlineConfig extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-next-page with inline config';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::NEXT_PAGE,
        SpecRule::SPEC_NAME => 'amp-next-page with inline config',
        SpecRule::UNIQUE => true,
        SpecRule::ATTRS => [
            Attribute::DEEP_PARSING => [],
            Attribute::MAX_PAGES => [],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-next-page/',
        SpecRule::REFERENCE_POINTS => [
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-NEXT-PAGE > [separator]',
                SpecRule::UNIQUE => true,
            ],
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-NEXT-PAGE > [recommendation-box]',
                SpecRule::UNIQUE => true,
            ],
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-NEXT-PAGE > [footer]',
                SpecRule::UNIQUE => true,
            ],
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-NEXT-PAGE > SCRIPT[type=application/json]',
                SpecRule::MANDATORY => true,
                SpecRule::UNIQUE => true,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::NEXT_PAGE,
        ],
    ];
}
PK.3Y��.�}
}
_bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNextPageWithSrcAttribute.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpNextPageWithSrcAttribute.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read array<array> $attrs
 * @property-read string $specUrl
 * @property-read array<array> $referencePoints
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpNextPageWithSrcAttribute extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-next-page with src attribute';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::NEXT_PAGE,
        SpecRule::SPEC_NAME => 'amp-next-page with src attribute',
        SpecRule::UNIQUE => true,
        SpecRule::ATTRS => [
            Attribute::DEEP_PARSING => [],
            Attribute::MAX_PAGES => [],
            Attribute::SRC => [
                SpecRule::MANDATORY => true,
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => false,
                ],
            ],
            Attribute::XSSI_PREFIX => [],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-next-page/',
        SpecRule::REFERENCE_POINTS => [
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-NEXT-PAGE > [separator]',
                SpecRule::UNIQUE => true,
            ],
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-NEXT-PAGE > [recommendation-box]',
                SpecRule::UNIQUE => true,
            ],
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-NEXT-PAGE > [footer]',
                SpecRule::UNIQUE => true,
            ],
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-NEXT-PAGE > SCRIPT[type=application/json]',
                SpecRule::UNIQUE => true,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::NEXT_PAGE,
        ],
    ];
}
PK.3YJ�t�
�
Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNexxtvPlayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpNexxtvPlayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpNexxtvPlayer extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-NEXXTV-PLAYER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::NEXXTV_PLAYER,
        SpecRule::ATTRS => [
            Attribute::DATA_CLIENT => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::DATA_MEDIAID => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_REGEX => '[^=/?:]+',
            ],
            Attribute::DATA_MODE => [
                SpecRule::VALUE => [
                    'api',
                    'static',
                ],
            ],
            Attribute::DATA_STREAMTYPE => [
                SpecRule::VALUE => [
                    'album',
                    'audio',
                    'audioalbum',
                    'collection',
                    'live',
                    'playlist',
                    'playlist-marked',
                    'radio',
                    'set',
                    'video',
                ],
            ],
            Attribute::DATA_EXIT_MODE => [
                SpecRule::VALUE => [
                    'load',
                    'loop',
                    'replay',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::NEXXTV_PLAYER,
        ],
    ];
}
PK.3Y���KKObunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpO2Player.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpO2Player.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array<bool>> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpO2Player extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-O2-PLAYER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::O2_PLAYER,
        SpecRule::ATTRS => [
            Attribute::DATA_BCID => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::DATA_PID => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::O2_PLAYER,
        ],
    ];
}
PK.3Y�[�qOOSbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpOnetapGoogle.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpOnetapGoogle.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read bool $unique
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpOnetapGoogle extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-ONETAP-GOOGLE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::ONETAP_GOOGLE,
        SpecRule::UNIQUE => true,
        SpecRule::ATTRS => [
            Attribute::DATA_SRC => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::NODISPLAY,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::ONETAP_GOOGLE,
        ],
    ];
}
PK.3Y�oz��Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpOoyalaPlayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpOoyalaPlayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array<bool>> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpOoyalaPlayer extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-OOYALA-PLAYER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::OOYALA_PLAYER,
        SpecRule::ATTRS => [
            Attribute::DATA_EMBEDCODE => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::DATA_PCODE => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::DATA_PLAYERID => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FLEX_ITEM,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::OOYALA_PLAYER,
        ],
    ];
}
PK.3Yr�r>��Zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpOrientationObserver.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpOrientationObserver.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array<string>> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpOrientationObserver extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-ORIENTATION-OBSERVER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::ORIENTATION_OBSERVER,
        SpecRule::ATTRS => [
            Attribute::ALPHA_RANGE => [
                SpecRule::VALUE_REGEX => '(\d+)\s{1}(\d+)',
            ],
            Attribute::BETA_RANGE => [
                SpecRule::VALUE_REGEX => '(\d+)\s{1}(\d+)',
            ],
            Attribute::GAMMA_RANGE => [
                SpecRule::VALUE_REGEX => '(\d+)\s{1}(\d+)',
            ],
            Attribute::SMOOTHING => [
                SpecRule::VALUE_REGEX => '[0-9]+|',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::NODISPLAY,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::ORIENTATION_OBSERVER,
        ],
    ];
}
PK.3Y��o�		Nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpPanZoom.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpPanZoom.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpPanZoom extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-PAN-ZOOM';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::PAN_ZOOM,
        SpecRule::ATTRS => [
            Attribute::DISABLE_DOUBLE_TAP => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::INITIAL_SCALE => [
                SpecRule::VALUE_REGEX => '[0-9]+(\.[0-9]+)?',
            ],
            Attribute::INITIAL_X => [
                SpecRule::VALUE_REGEX => '[0-9]+',
            ],
            Attribute::INITIAL_Y => [
                SpecRule::VALUE_REGEX => '[0-9]+',
            ],
            Attribute::MAX_SCALE => [
                SpecRule::VALUE_REGEX => '[0-9]+(\.[0-9]+)?',
            ],
            Attribute::RESET_ON_RESIZE => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::PAN_ZOOM,
        ],
    ];
}
PK.3Y��tzzPbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpPinterest.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpPinterest.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpPinterest extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-PINTEREST';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::PINTEREST,
        SpecRule::ATTRS => [
            Attribute::ALT => [],
            Attribute::DATA_DO => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-pinterest/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::PINTEREST,
        ],
    ];
}
PK.3Y���a	a	Lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpPixel.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpPixel.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requires
 */
final class AmpPixel extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-PIXEL';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::PIXEL,
        SpecRule::ATTRS => [
            Attribute::ALLOW_SSR_IMG => [],
            Attribute::REFERRERPOLICY => [
                SpecRule::VALUE => [
                    'no-referrer',
                ],
            ],
            Attribute::SRC => [
                SpecRule::MANDATORY => true,
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => true,
                    SpecRule::ALLOW_EMPTY => true,
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-pixel/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FIXED,
                Layout::NODISPLAY,
            ],
            SpecRule::DEFINES_DEFAULT_WIDTH => true,
            SpecRule::DEFINES_DEFAULT_HEIGHT => true,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::REQUIRES => [
            'amphtml javascript runtime (v0.js)',
        ],
    ];
}
PK.3YP��	�	Obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpPlaybuzz.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpPlaybuzz.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpPlaybuzz extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-PLAYBUZZ';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::PLAYBUZZ,
        SpecRule::ATTRS => [
            Attribute::DATA_COMMENTS => [
                SpecRule::VALUE_CASEI => [
                    'false',
                    'true',
                ],
            ],
            Attribute::DATA_ITEM => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::DATA_ITEM,
                    Attribute::SRC,
                ],
            ],
            Attribute::DATA_ITEM_INFO => [
                SpecRule::VALUE_CASEI => [
                    'false',
                    'true',
                ],
            ],
            Attribute::DATA_SHARE_BUTTONS => [
                SpecRule::VALUE_CASEI => [
                    'false',
                    'true',
                ],
            ],
            Attribute::SRC => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::DATA_ITEM,
                    Attribute::SRC,
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::RESPONSIVE,
                Layout::FIXED_HEIGHT,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::PLAYBUZZ,
        ],
    ];
}
PK.3Y�?�1Wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpPositionObserver.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpPositionObserver.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpPositionObserver extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-POSITION-OBSERVER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::POSITION_OBSERVER,
        SpecRule::ATTRS => [
            Attribute::INTERSECTION_RATIOS => [
                SpecRule::VALUE_REGEX => '^([0]*?\.\d*$|1$|0$)|([0]*?\.\d*|1|0)\s{1}([0]*?\.\d*$|1$|0$)',
            ],
            Attribute::ONCE => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::TARGET => [],
            Attribute::VIEWPORT_MARGINS => [
                SpecRule::VALUE_REGEX => '^(\d+$|\d+px$|\d+vh$)|((\d+|\d+px|\d+vh)\s{1}(\d+$|\d+px$|\d+vh$))',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::NODISPLAY,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::POSITION_OBSERVER,
        ],
    ];
}
PK.3Y��^a
a
Qbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpPowrPlayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpPowrPlayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpPowrPlayer extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-POWR-PLAYER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::POWR_PLAYER,
        SpecRule::ATTRS => [
            Attribute::AUTOPLAY => [],
            Attribute::DATA_ACCOUNT => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_REGEX => '[0-9a-zA-Z-]+',
            ],
            Attribute::DATA_PLAYER => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_REGEX => '[0-9a-zA-Z-]+',
            ],
            '[data-referrer]' => [],
            Attribute::DATA_TERMS => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::DATA_VIDEO,
                    Attribute::DATA_TERMS,
                ],
            ],
            Attribute::DATA_VIDEO => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::DATA_VIDEO,
                    Attribute::DATA_TERMS,
                ],
                SpecRule::VALUE_REGEX => '[0-9a-zA-Z-]+',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-powr-player/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::POWR_PLAYER,
        ],
    ];
}
PK.3Yf|!�Rbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpReachPlayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpReachPlayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpReachPlayer extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-REACH-PLAYER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::REACH_PLAYER,
        SpecRule::ATTRS => [
            Attribute::DATA_EMBED_ID => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_REGEX => '[0-9a-z-]+',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::REACH_PLAYER,
        ],
    ];
}
PK.3Y��*iiUbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpRecaptchaInput.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpRecaptchaInput.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array<bool>> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpRecaptchaInput extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-RECAPTCHA-INPUT';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::RECAPTCHA_INPUT,
        SpecRule::ATTRS => [
            Attribute::DATA_SITEKEY => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::DATA_ACTION => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\MandatoryNameAttr::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::NODISPLAY,
            ],
        ],
        SpecRule::MANDATORY_ANCESTOR => Element::FORM,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::FORM,
            Extension::RECAPTCHA_INPUT,
        ],
    ];
}
PK.3Y&_<i++Tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpRedbullPlayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpRedbullPlayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array<bool>> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpRedbullPlayer extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-REDBULL-PLAYER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::REDBULL_PLAYER,
        SpecRule::ATTRS => [
            Attribute::DATA_PARAM_VIDEOID => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::RESPONSIVE,
                Layout::FILL,
                Layout::FLEX_ITEM,
                Layout::FLUID,
                Layout::INTRINSIC,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::REDBULL_PLAYER,
        ],
    ];
}
PK.3Y�1��		Mbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpReddit.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpReddit.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpReddit extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-REDDIT';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::REDDIT,
        SpecRule::ATTRS => [
            Attribute::DATA_EMBEDLIVE => [
                SpecRule::VALUE_CASEI => [
                    'false',
                    'true',
                ],
            ],
            Attribute::DATA_EMBEDPARENT => [
                SpecRule::VALUE_CASEI => [
                    'false',
                    'true',
                ],
            ],
            Attribute::DATA_EMBEDTYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_CASEI => [
                    'comment',
                    'post',
                ],
            ],
            Attribute::DATA_SRC => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::REDDIT,
        ],
    ];
}
PK.3Y��t��Mbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpRender.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpRender.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpRender extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-RENDER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::RENDER,
        SpecRule::ATTRS => [
            Attribute::BINDING => [
                SpecRule::VALUE => [
                    'always',
                    'never',
                    'no',
                    'refresh',
                ],
            ],
            Attribute::CREDENTIALS => [],
            Attribute::DATA_AMP_BIND_SRC => [
                SpecRule::MANDATORY_ANYOF => [
                    Attribute::SRC,
                    '[src]',
                    Attribute::DATA_AMP_BIND_SRC,
                ],
            ],
            Attribute::KEY => [],
            Attribute::SRC => [
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::AMP_SCRIPT,
                        Protocol::AMP_STATE,
                        Protocol::HTTPS,
                    ],
                ],
                SpecRule::MANDATORY_ANYOF => [
                    Attribute::SRC,
                    '[src]',
                    Attribute::DATA_AMP_BIND_SRC,
                ],
            ],
            Attribute::TEMPLATE => [
                SpecRule::VALUE_ONEOF_SET => 'TEMPLATE_IDS',
            ],
            Attribute::XSSI_PREFIX => [],
            '[src]' => [
                SpecRule::MANDATORY_ANYOF => [
                    Attribute::SRC,
                    '[src]',
                    Attribute::DATA_AMP_BIND_SRC,
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-render/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::CONTAINER,
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::RENDER,
        ],
    ];
}
PK.3Y����Qbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpRiddleQuiz.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpRiddleQuiz.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpRiddleQuiz extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-RIDDLE-QUIZ';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::RIDDLE_QUIZ,
        SpecRule::ATTRS => [
            Attribute::DATA_RIDDLE_ID => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_REGEX => '[0-9]+',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-riddle-quiz/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::RIDDLE_QUIZ,
        ],
    ];
}
PK.3YZR�	F
F
Mbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpScript.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpScript.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $disallowedAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpScript extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-SCRIPT';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::SCRIPT,
        SpecRule::ATTRS => [
            Attribute::DATA_AMPDEVMODE => [
                SpecRule::VALUE => [
                    'false',
                ],
                SpecRule::DISALLOWED_VALUE_REGEX => 'false',
            ],
            Attribute::MAX_AGE => [
                SpecRule::VALUE_REGEX => '[0-9]+',
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::SCRIPT,
                    ],
                ],
            ],
            Attribute::NODOM => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::SANDBOXED => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::SANDBOX => [],
            Attribute::SCRIPT => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::SCRIPT,
                    Attribute::SRC,
                ],
                SpecRule::VALUE_ONEOF_SET => 'AMP_SCRIPT_IDS',
            ],
            Attribute::SRC => [
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::SCRIPT,
                    Attribute::SRC,
                ],
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => false,
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::CONTAINER,
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::DISALLOWED_ANCESTOR => [
            'AMP-SCRIPT',
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::SCRIPT,
        ],
    ];
}
PK.3Y�M3�jjabunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpScriptExtensionLocalScript.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpScriptExtensionLocalScript.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array $cdata
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpScriptExtensionLocalScript extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-script extension local script';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'amp-script extension local script',
        SpecRule::ATTRS => [
            Attribute::ID => [
                SpecRule::MANDATORY => true,
                SpecRule::DISALLOWED_VALUE_REGEX => '(^|\s)(__amp_\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\S*|\$p|\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|AMP|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|i-amphtml-\S*|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\s|$)',
                SpecRule::ADD_VALUE_TO_SET => 'AMP_SCRIPT_IDS',
            ],
            Attribute::TARGET => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'amp-script',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
            ],
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_CASEI => [
                    'text/plain',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\MandatoryIdAttr::ID,
            AttributeList\NonceAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-script/',
        SpecRule::CDATA => [
            SpecRule::MAX_BYTES => 10000,
            SpecRule::MAX_BYTES_SPEC_URL => 'https://amp.dev/documentation/components/amp-script/#faq',
            SpecRule::DISALLOWED_CDATA_REGEX => [
                [
                    SpecRule::REGEX => '<!--',
                    SpecRule::ERROR_MESSAGE => 'html comments',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::SCRIPT,
        ],
    ];
}
PK.3YOȎ��
�
Obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSelector.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpSelector.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $disallowedAncestor
 * @property-read array<array<string>> $referencePoints
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpSelector extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-SELECTOR';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::SELECTOR,
        SpecRule::ATTRS => [
            Attribute::DISABLED => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::FORM => [],
            Attribute::KEYBOARD_SELECT_MODE => [
                SpecRule::VALUE_CASEI => [
                    'focus',
                    'none',
                    'select',
                ],
            ],
            Attribute::MULTIPLE => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            '[disabled]' => [],
            '[selected]' => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
            AttributeList\NameAttr::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
                Layout::CONTAINER,
            ],
        ],
        SpecRule::DISALLOWED_ANCESTOR => [
            'AMP-SELECTOR',
        ],
        SpecRule::REFERENCE_POINTS => [
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-SELECTOR option',
            ],
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-SELECTOR child',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::SELECTOR,
        ],
    ];
}
PK.3Y����kkTbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSelectorChild.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpSelectorChild.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array<string>> $referencePoints
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class AmpSelectorChild extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-SELECTOR child';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => '$REFERENCE_POINT',
        SpecRule::SPEC_NAME => 'AMP-SELECTOR child',
        SpecRule::REFERENCE_POINTS => [
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-SELECTOR option',
            ],
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-SELECTOR child',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'amp-selector child',
    ];
}
PK.3Y6�1��Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSelectorOption.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpSelectorOption.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class AmpSelectorOption extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-SELECTOR option';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => '$REFERENCE_POINT',
        SpecRule::SPEC_NAME => 'AMP-SELECTOR option',
        SpecRule::ATTRS => [
            Attribute::DISABLED => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::OPTION => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::SELECTED => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-selector/',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'amp-selector [option] descendant',
    ];
}
PK.3Y�w墇�Nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSidebar.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpSidebar.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array<array<string>>> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $disallowedAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 * @property-read array<array<string>> $markDescendants
 */
final class AmpSidebar extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-sidebar';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::SIDEBAR,
        SpecRule::SPEC_NAME => 'amp-sidebar',
        SpecRule::ATTRS => [
            Attribute::SIDE => [
                SpecRule::VALUE => [
                    'left',
                    'right',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-sidebar/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::NODISPLAY,
            ],
        ],
        SpecRule::DISALLOWED_ANCESTOR => [
            'AMP-STORY',
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::SIDEBAR,
        ],
        SpecRule::MARK_DESCENDANTS => [
            SpecRule::MARKER => [
                'AUTOSCROLL',
            ],
        ],
    ];
}
PK.3Y
`DzzWbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSidebarAmp4email.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpSidebarAmp4email.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array<array<string>>> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpSidebarAmp4email extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-sidebar (AMP4EMAIL)';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::SIDEBAR,
        SpecRule::SPEC_NAME => 'amp-sidebar (AMP4EMAIL)',
        SpecRule::ATTRS => [
            Attribute::SIDE => [
                SpecRule::VALUE => [
                    'left',
                    'right',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-sidebar/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::NODISPLAY,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4EMAIL,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::SIDEBAR,
        ],
    ];
}
PK.3Y�[���Qbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSidebarNav.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpSidebarNav.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array $attrs
 * @property-read array $childTags
 * @property-read array<string> $htmlFormat
 */
final class AmpSidebarNav extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-sidebar > nav';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::NAV,
        SpecRule::SPEC_NAME => 'amp-sidebar > nav',
        SpecRule::MANDATORY_PARENT => Extension::SIDEBAR,
        SpecRule::ATTRS => [
            Attribute::TOOLBAR => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_DISPATCH',
            ],
            Attribute::TOOLBAR_TARGET => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::CHILD_TAGS => [
            SpecRule::MANDATORY_NUM_CHILD_TAGS => 1,
            SpecRule::CHILD_TAG_NAME_ONEOF => [
                'OL',
                'UL',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y+/w�++Pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSkimlinks.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpSkimlinks.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpSkimlinks extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-SKIMLINKS';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::SKIMLINKS,
        SpecRule::ATTRS => [
            Attribute::CUSTOM_REDIRECT_DOMAIN => [],
            Attribute::CUSTOM_TRACKING_ID => [
                SpecRule::VALUE_REGEX_CASEI => '^.{0,50}$',
            ],
            Attribute::EXCLUDED_DOMAINS => [],
            Attribute::LINK_SELECTOR => [],
            Attribute::PUBLISHER_CODE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_REGEX_CASEI => '^[0-9]+X[0-9]+$',
            ],
            Attribute::TRACKING => [
                SpecRule::VALUE => [
                    'false',
                    'true',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::NODISPLAY,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::SKIMLINKS,
        ],
    ];
}
PK.3Y���]��Qbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSmartlinks.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpSmartlinks.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpSmartlinks extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-SMARTLINKS';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::SMARTLINKS,
        SpecRule::ATTRS => [
            Attribute::EXCLUSIVE_LINKS => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::LINK_ATTRIBUTE => [],
            Attribute::LINK_SELECTOR => [],
            Attribute::LINKMATE => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::NRTV_ACCOUNT_NAME => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::NODISPLAY,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::SMARTLINKS,
        ],
    ];
}
PK.3Y��
ddRbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSocialShare.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpSocialShare.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpSocialShare extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-SOCIAL-SHARE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::SOCIAL_SHARE,
        SpecRule::ATTRS => [
            Attribute::DATA_SHARE_ENDPOINT => [
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::FTP,
                        Protocol::HTTP,
                        Protocol::HTTPS,
                        Protocol::MAILTO,
                        Protocol::BBMI,
                        Protocol::FB_ME,
                        Protocol::FB_MESSENGER,
                        Protocol::INTENT,
                        Protocol::LINE,
                        Protocol::SKYPE,
                        Protocol::SMS,
                        Protocol::SNAPCHAT,
                        Protocol::TEL,
                        Protocol::TG,
                        Protocol::THREEMA,
                        Protocol::VIBER,
                        Protocol::WH,
                        Protocol::WHATSAPP,
                    ],
                    SpecRule::ALLOW_RELATIVE => false,
                ],
            ],
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::CONTAINER,
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::SOCIAL_SHARE,
        ],
    ];
}
PK.3Yr0�]
]
Qbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSoundcloud.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpSoundcloud.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpSoundcloud extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-SOUNDCLOUD';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::SOUNDCLOUD,
        SpecRule::ATTRS => [
            Attribute::DATA_COLOR => [
                SpecRule::VALUE_REGEX_CASEI => '([0-9a-f]{3}){1,2}',
            ],
            Attribute::DATA_PLAYLISTID => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::DATA_TRACKID,
                    Attribute::DATA_PLAYLISTID,
                ],
                SpecRule::VALUE_REGEX => '[0-9]+',
            ],
            Attribute::DATA_SECRET_TOKEN => [
                SpecRule::VALUE_REGEX => '[A-Za-z0-9_-]+',
            ],
            Attribute::DATA_TRACKID => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::DATA_TRACKID,
                    Attribute::DATA_PLAYLISTID,
                ],
                SpecRule::VALUE_REGEX => '[0-9]+',
            ],
            Attribute::DATA_VISUAL => [
                SpecRule::VALUE_CASEI => [
                    'false',
                    'true',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::SOUNDCLOUD,
        ],
    ];
}
PK.3Y�a���	�	Xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSpringboardPlayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpSpringboardPlayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpSpringboardPlayer extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-SPRINGBOARD-PLAYER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::SPRINGBOARD_PLAYER,
        SpecRule::ATTRS => [
            Attribute::DATA_CONTENT_ID => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::DATA_DOMAIN => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::DATA_ITEMS => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::DATA_MODE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_CASEI => [
                    'playlist',
                    'video',
                ],
            ],
            Attribute::DATA_PLAYER_ID => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_REGEX_CASEI => '[a-z0-9]+',
            ],
            Attribute::DATA_SITE_ID => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_REGEX => '[0-9]+',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FLEX_ITEM,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::SPRINGBOARD_PLAYER,
        ],
    ];
}
PK.3YWwL�QQLbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpState.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpState.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $childTags
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpState extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-state';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::STATE,
        SpecRule::SPEC_NAME => 'amp-state',
        SpecRule::ATTRS => [
            Attribute::CREDENTIALS => [],
            Attribute::OVERRIDABLE => [],
            Attribute::SRC => [
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => true,
                ],
            ],
            '[src]' => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\MandatoryIdAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-bind/',
        SpecRule::CHILD_TAGS => [
            SpecRule::FIRST_CHILD_TAG_NAME_ONEOF => [
                'SCRIPT',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::BIND,
        ],
    ];
}
PK.3YfvUbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStateAmp4email.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStateAmp4email.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<string> $disallowedAncestor
 * @property-read array<array<string>> $childTags
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpStateAmp4email extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-state (AMP4EMAIL)';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::STATE,
        SpecRule::SPEC_NAME => 'amp-state (AMP4EMAIL)',
        SpecRule::ATTR_LISTS => [
            AttributeList\MandatoryIdAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-bind/',
        SpecRule::DISALLOWED_ANCESTOR => [
            'AMP-LIST',
            'AMP-STATE',
            'TEMPLATE',
        ],
        SpecRule::CHILD_TAGS => [
            SpecRule::FIRST_CHILD_TAG_NAME_ONEOF => [
                'SCRIPT',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::BIND,
        ],
    ];
}
PK.3Y�N�Obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStickyAd.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStickyAd.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read bool $unique
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $disallowedAncestor
 * @property-read array $childTags
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpStickyAd extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-STICKY-AD';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::STICKY_AD,
        SpecRule::UNIQUE => true,
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::NODISPLAY,
            ],
        ],
        SpecRule::DISALLOWED_ANCESTOR => [
            'AMP-APP-BANNER',
        ],
        SpecRule::CHILD_TAGS => [
            SpecRule::MANDATORY_NUM_CHILD_TAGS => 1,
            SpecRule::FIRST_CHILD_TAG_NAME_ONEOF => [
                'AMP-AD',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::STICKY_AD,
        ],
    ];
}
PK.3Y�h��Lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStory.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStory.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $mandatoryParent
 * @property-read array $attrs
 * @property-read array $childTags
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requires
 * @property-read array<string> $requiresExtension
 * @property-read bool $siblingsDisallowed
 */
final class AmpStory extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-STORY';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::STORY,
        SpecRule::MANDATORY_PARENT => Element::BODY,
        SpecRule::ATTRS => [
            Attribute::BACKGROUND_AUDIO => [
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTP,
                        Protocol::HTTPS,
                    ],
                ],
            ],
            Attribute::ENTITY => [],
            Attribute::ENTITY_LOGO_SRC => [
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTP,
                        Protocol::HTTPS,
                    ],
                ],
            ],
            Attribute::ENTITY_URL => [
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTP,
                        Protocol::HTTPS,
                    ],
                ],
            ],
            Attribute::POSTER_LANDSCAPE_SRC => [
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTP,
                        Protocol::HTTPS,
                    ],
                ],
            ],
            Attribute::POSTER_PORTRAIT_SRC => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTP,
                        Protocol::HTTPS,
                    ],
                ],
            ],
            Attribute::POSTER_SQUARE_SRC => [
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTP,
                        Protocol::HTTPS,
                    ],
                ],
            ],
            Attribute::PUBLISHER => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::PUBLISHER_LOGO_SRC => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTP,
                        Protocol::HTTPS,
                    ],
                ],
            ],
            Attribute::STANDALONE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::SUPPORTS_LANDSCAPE => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::TITLE => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::LIVE_STORY => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::LIVE_STORY_DISABLED => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
        ],
        SpecRule::CHILD_TAGS => [
            SpecRule::CHILD_TAG_NAME_ONEOF => [
                'AMP-ANALYTICS',
                'AMP-CONSENT',
                'AMP-GEO',
                'AMP-PIXEL',
                'AMP-SIDEBAR',
                'AMP-STORY-AUTO-ADS',
                'AMP-STORY-AUTO-ANALYTICS',
                'AMP-STORY-BOOKEND',
                'AMP-STORY-PAGE',
                'AMP-STORY-SOCIAL-SHARE',
            ],
            SpecRule::MANDATORY_MIN_NUM_CHILD_TAGS => 1,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES => [
            'amp-story-page',
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::STORY,
        ],
        SpecRule::SIBLINGS_DISALLOWED => true,
    ];
}
PK.3Y9���zzObunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStory360.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStory360.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read string $mandatoryAncestor
 * @property-read array $childTags
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpStory360 extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-STORY-360';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::STORY_360,
        SpecRule::ATTRS => [
            Attribute::CONTROLS => [
                SpecRule::VALUE => [
                    'gyroscope',
                ],
            ],
            Attribute::DURATION => [
                SpecRule::VALUE_REGEX => '([0-9\.]+)\s*(s|ms)',
            ],
            Attribute::HEADING_END => [
                SpecRule::VALUE_REGEX => '-?\d+\.?\d*',
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::DURATION,
                    ],
                ],
            ],
            Attribute::HEADING_START => [
                SpecRule::VALUE_REGEX => '-?\d+\.?\d*',
            ],
            Attribute::PITCH_END => [
                SpecRule::VALUE_REGEX => '-?\d+\.?\d*',
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::DURATION,
                    ],
                ],
            ],
            Attribute::PITCH_START => [
                SpecRule::VALUE_REGEX => '-?\d+\.?\d*',
            ],
            Attribute::SCENE_HEADING => [
                SpecRule::VALUE_REGEX => '-?\d+\.?\d*',
            ],
            Attribute::SCENE_PITCH => [
                SpecRule::VALUE_REGEX => '-?\d+\.?\d*',
            ],
            Attribute::SCENE_ROLL => [
                SpecRule::VALUE_REGEX => '-?\d+\.?\d*',
            ],
            Attribute::ZOOM_END => [
                SpecRule::VALUE_REGEX => '\d+\.?\d*',
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::DURATION,
                    ],
                ],
            ],
            Attribute::ZOOM_START => [
                SpecRule::VALUE_REGEX => '\d+\.?\d*',
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-story-360',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
            ],
        ],
        SpecRule::MANDATORY_ANCESTOR => Extension::STORY,
        SpecRule::CHILD_TAGS => [
            SpecRule::MANDATORY_NUM_CHILD_TAGS => 1,
            SpecRule::CHILD_TAG_NAME_ONEOF => [
                'AMP-IMG',
                'AMP-VIDEO',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::STORY_360,
        ],
    ];
}
PK.3Y7P���Tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAmpAudio.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryAmpAudio.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpStoryAmpAudio extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-story >> amp-audio';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::AUDIO,
        SpecRule::SPEC_NAME => 'amp-story >> amp-audio',
        SpecRule::ATTRS => [
            Attribute::AUTOPLAY => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    '',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\AmpAudioCommon::ID,
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-audio/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::NODISPLAY,
            ],
        ],
        SpecRule::MANDATORY_ANCESTOR => Extension::STORY,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::AUDIO,
        ],
    ];
}
PK.3Y;�C5��Vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAmpSidebar.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Layout;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryAmpSidebar.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read string $deprecation
 * @property-read string $deprecationUrl
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 * @property-read array<array<string>> $markDescendants
 */
final class AmpStoryAmpSidebar extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-story >> amp-sidebar';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::SIDEBAR,
        SpecRule::SPEC_NAME => 'amp-story >> amp-sidebar',
        SpecRule::MANDATORY_PARENT => Extension::STORY,
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-sidebar/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::NODISPLAY,
            ],
        ],
        SpecRule::DEPRECATION => 'anchor tags or amp-story-player controls',
        SpecRule::DEPRECATION_URL => 'https://github.com/ampproject/amphtml/issues/33293',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::SIDEBAR,
        ],
        SpecRule::MARK_DESCENDANTS => [
            SpecRule::MARKER => [
                'AUTOSCROLL',
            ],
        ],
    ];
}
PK.3Y�~lM		jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAmpStoryPageAttachmentAmpVideo.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryAmpStoryPageAttachmentAmpVideo.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpStoryAmpStoryPageAttachmentAmpVideo extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-story >> amp-story-page-attachment >> amp-video';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::VIDEO,
        SpecRule::SPEC_NAME => 'amp-story >> amp-story-page-attachment >> amp-video',
        SpecRule::ATTRS => [
            Attribute::POSTER => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
            AttributeList\AmpVideoCommon::ID,
            AttributeList\LightboxableElements::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-video/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::MANDATORY_ANCESTOR => Extension::STORY_PAGE_ATTACHMENT,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::VIDEO,
        ],
    ];
}
PK.3Y�w����Tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAmpVideo.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryAmpVideo.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpStoryAmpVideo extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-story >> amp-video';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::VIDEO,
        SpecRule::SPEC_NAME => 'amp-story >> amp-video',
        SpecRule::ATTRS => [
            Attribute::AUTOPLAY => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::CONTROLS => [
                SpecRule::VALUE => [
                    '',
                ],
                SpecRule::DEPRECATION => '- no replacement',
                SpecRule::DEPRECATION_URL => 'https://github.com/ampproject/amphtml/issues/23798',
            ],
            '[controls]' => [
                SpecRule::DEPRECATION => '- no replacement',
                SpecRule::DEPRECATION_URL => 'https://github.com/ampproject/amphtml/issues/23798',
            ],
            Attribute::POSTER => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::CACHE => [
                SpecRule::VALUE => [
                    'google',
                ],
            ],
            Attribute::CAPTIONS_ID => [
                SpecRule::REQUIRES_EXTENSION => [
                    Extension::STORY_CAPTIONS,
                ],
            ],
            Attribute::VOLUME => [
                SpecRule::VALUE_REGEX => '^((0?\.[1-9]+)?|1(\.0*)?)$',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
            AttributeList\AmpVideoCommon::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-video/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::MANDATORY_ANCESTOR => Extension::STORY,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::VIDEO,
        ],
    ];
}
PK.3Y;��Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAnimation.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryAnimation.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array $childTags
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requires
 * @property-read array<string> $requiresExtension
 */
final class AmpStoryAnimation extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-STORY-ANIMATION';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::STORY_ANIMATION,
        SpecRule::MANDATORY_PARENT => Extension::STORY_PAGE,
        SpecRule::ATTRS => [
            Attribute::ANIMATE_IN_AFTER => [],
            Attribute::TRIGGER => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'visibility',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::NODISPLAY,
            ],
        ],
        SpecRule::CHILD_TAGS => [
            SpecRule::MANDATORY_NUM_CHILD_TAGS => 1,
            SpecRule::CHILD_TAG_NAME_ONEOF => [
                'SCRIPT',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES => [
            'amp-story-animation json script',
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::STORY,
        ],
    ];
}
PK.3YeR�.VV_bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAnimationJsonScript.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryAnimationJsonScript.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<array<string>>> $cdata
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 */
final class AmpStoryAnimationJsonScript extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-story-animation json script';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'amp-story-animation json script',
        SpecRule::MANDATORY_PARENT => Extension::STORY_ANIMATION,
        SpecRule::ATTRS => [
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_PARENT_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'application/json',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
        ],
        SpecRule::CDATA => [
            SpecRule::DISALLOWED_CDATA_REGEX => [
                [
                    SpecRule::REGEX => '<!--',
                    SpecRule::ERROR_MESSAGE => 'html comments',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-story-animation json script',
        ],
    ];
}
PK.3YU��Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAutoAds.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryAutoAds.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpStoryAutoAds extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-STORY-AUTO-ADS';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::STORY_AUTO_ADS,
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Extension::STORY,
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-story-auto-ads/',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::STORY_AUTO_ADS,
        ],
    ];
}
PK.3Y�\r��_bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAutoAdsConfigScript.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryAutoAdsConfigScript.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<array<string>>> $cdata
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpStoryAutoAdsConfigScript extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-story-auto-ads config script';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'amp-story-auto-ads config script',
        SpecRule::MANDATORY_PARENT => Extension::STORY_AUTO_ADS,
        SpecRule::ATTRS => [
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_PARENT_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'application/json',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-story-auto-ads/',
        SpecRule::CDATA => [
            SpecRule::DISALLOWED_CDATA_REGEX => [
                [
                    SpecRule::REGEX => '<!--',
                    SpecRule::ERROR_MESSAGE => 'html comments',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::STORY_AUTO_ADS,
        ],
    ];
}
PK.3Y���cc[bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAutoAdsTemplate.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\DescendantTagList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryAutoAdsTemplate.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<array<string>> $referencePoints
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 * @property-read string $descendantTagList
 */
final class AmpStoryAutoAdsTemplate extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-story-auto-ads > template';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::TEMPLATE,
        SpecRule::SPEC_NAME => 'amp-story-auto-ads > template',
        SpecRule::MANDATORY_PARENT => Extension::STORY_AUTO_ADS,
        SpecRule::ATTRS => [
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'amp-mustache',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_PARENT_DISPATCH',
            ],
        ],
        SpecRule::REFERENCE_POINTS => [
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-STORY-GRID-LAYER default',
            ],
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-STORY-GRID-LAYER animate-in',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::MUSTACHE,
        ],
        SpecRule::DESCENDANT_TAG_LIST => DescendantTagList\AmpStoryGridLayerAllowedDescendants::ID,
    ];
}
PK.3Y� ��$$Ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAutoAnalytics.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryAutoAnalytics.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpStoryAutoAnalytics extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-STORY-AUTO-ANALYTICS';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::STORY_AUTO_ANALYTICS,
        SpecRule::ATTRS => [
            Attribute::GTAG_ID => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_REGEX => '[A-Z]{1,2}-[A-Z0-9-]+',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::STORY_AUTO_ANALYTICS,
        ],
    ];
}
PK.3Y��Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryBookend.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\DescendantTagList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryBookend.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 * @property-read string $descendantTagList
 * @property-read bool $mandatoryLastChild
 */
final class AmpStoryBookend extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-STORY-BOOKEND';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::STORY_BOOKEND,
        SpecRule::ATTRS => [
            Attribute::LAYOUT => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'nodisplay',
                ],
            ],
            Attribute::SRC => [
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTP,
                        Protocol::HTTPS,
                    ],
                ],
            ],
        ],
        SpecRule::MANDATORY_ANCESTOR => Extension::STORY,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCENDANT_TAG_LIST => DescendantTagList\AmpStoryBookendAllowedDescendants::ID,
        SpecRule::MANDATORY_LAST_CHILD => true,
    ];
}
PK.3Ym�j88fbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryBookendExtensionJsonScript.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryBookendExtensionJsonScript.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 * @property-read bool $siblingsDisallowed
 * @property-read bool $mandatoryLastChild
 */
final class AmpStoryBookendExtensionJsonScript extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-story-bookend extension .json script';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'amp-story-bookend extension .json script',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Extension::STORY_BOOKEND,
        SpecRule::ATTRS => [
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_PARENT_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'application/json',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::STORY,
        ],
        SpecRule::SIBLINGS_DISALLOWED => true,
        SpecRule::MANDATORY_LAST_CHILD => true,
    ];
}
PK.3Y�+����Tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryCaptions.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryCaptions.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read string $mandatoryAncestor
 * @property-read array<int> $childTags
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpStoryCaptions extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-STORY-CAPTIONS';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::STORY_CAPTIONS,
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-story-captions',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::CONTAINER,
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::FLUID,
                Layout::INTRINSIC,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::MANDATORY_ANCESTOR => Extension::STORY,
        SpecRule::CHILD_TAGS => [
            SpecRule::MANDATORY_NUM_CHILD_TAGS => 0,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::STORY_CAPTIONS,
        ],
    ];
}
PK.3Y.
ddSbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryConsent.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryConsent.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $mandatoryParent
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array $childTags
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requires
 * @property-read array<string> $requiresExtension
 */
final class AmpStoryConsent extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-STORY-CONSENT';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::STORY_CONSENT,
        SpecRule::MANDATORY_PARENT => Extension::CONSENT,
        SpecRule::ATTR_LISTS => [
            AttributeList\MandatoryIdAttr::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::NODISPLAY,
            ],
        ],
        SpecRule::CHILD_TAGS => [
            SpecRule::MANDATORY_NUM_CHILD_TAGS => 1,
            SpecRule::CHILD_TAG_NAME_ONEOF => [
                'SCRIPT',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES => [
            'amp-story-consent extension .json script',
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::CONSENT,
            Extension::STORY,
        ],
    ];
}
PK.3Y?��d	d	fbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryConsentExtensionJsonScript.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryConsentExtensionJsonScript.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<array<string>>> $cdata
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read array<string> $requiresExtension
 */
final class AmpStoryConsentExtensionJsonScript extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-story-consent extension .json script';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'amp-story-consent extension .json script',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Extension::STORY_CONSENT,
        SpecRule::ATTRS => [
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_PARENT_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'application/json',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
        ],
        SpecRule::CDATA => [
            SpecRule::DISALLOWED_CDATA_REGEX => [
                [
                    SpecRule::REGEX => '<!--',
                    SpecRule::ERROR_MESSAGE => 'html comments',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-story-consent extension .json script',
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::CONSENT,
            Extension::STORY,
        ],
    ];
}
PK.3Yq�wu��Tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryCtaLayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Validator\Spec\DescendantTagList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryCtaLayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $mandatoryAncestor
 * @property-read array<array<string>> $referencePoints
 * @property-read array<string> $htmlFormat
 * @property-read string $descendantTagList
 * @property-read bool $mandatoryLastChild
 */
final class AmpStoryCtaLayer extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-STORY-CTA-LAYER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::STORY_CTA_LAYER,
        SpecRule::MANDATORY_ANCESTOR => Extension::STORY_PAGE,
        SpecRule::REFERENCE_POINTS => [
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-STORY-CTA-LAYER animate-in',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCENDANT_TAG_LIST => DescendantTagList\AmpStoryCtaLayerAllowedDescendants::ID,
        SpecRule::MANDATORY_LAST_CHILD => true,
    ];
}
PK.3YU���]bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryCtaLayerAnimateIn.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryCtaLayerAnimateIn.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read string $specUrl
 * @property-read array<array<string>> $referencePoints
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class AmpStoryCtaLayerAnimateIn extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-STORY-CTA-LAYER animate-in';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => '$REFERENCE_POINT',
        SpecRule::SPEC_NAME => 'AMP-STORY-CTA-LAYER animate-in',
        SpecRule::ATTRS => [
            Attribute::ANIMATE_IN => [
                SpecRule::VALUE => [
                    'drop',
                    'fade-in',
                    'fly-in-bottom',
                    'fly-in-left',
                    'fly-in-right',
                    'fly-in-top',
                    'pan-down',
                    'pan-left',
                    'pan-right',
                    'pan-up',
                    'pulse',
                    'rotate-in-left',
                    'rotate-in-right',
                    'scale-fade-down',
                    'scale-fade-up',
                    'twirl-in',
                    'whoosh-in-left',
                    'whoosh-in-right',
                    'zoom-in',
                    'zoom-out',
                ],
            ],
            Attribute::ANIMATE_IN_AFTER => [],
            Attribute::ANIMATE_IN_DELAY => [],
            Attribute::ANIMATE_IN_DURATION => [],
            Attribute::ANIMATE_IN_TIMING_FUNCTION => [],
            Attribute::SCALE_END => [
                SpecRule::VALUE_REGEX => '[0-9]+([.][0-9]+)?',
            ],
            Attribute::SCALE_START => [
                SpecRule::VALUE_REGEX => '[0-9]+([.][0-9]+)?',
            ],
            Attribute::TRANSLATE_X => [
                SpecRule::VALUE_REGEX_CASEI => '[0-9]+px',
            ],
            Attribute::TRANSLATE_Y => [
                SpecRule::VALUE_REGEX_CASEI => '[0-9]+px',
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-story/',
        SpecRule::REFERENCE_POINTS => [
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-STORY-CTA-LAYER animate-in',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'amp-story-cta-layer [animate-in] child',
    ];
}
PK.3Y���	�	Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryGridLayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\DescendantTagList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryGridLayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read string $mandatoryAncestor
 * @property-read array<array<string>> $referencePoints
 * @property-read array<string> $htmlFormat
 * @property-read string $descendantTagList
 */
final class AmpStoryGridLayer extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-STORY-GRID-LAYER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::STORY_GRID_LAYER,
        SpecRule::ATTRS => [
            Attribute::ANCHOR => [
                SpecRule::VALUE_REGEX => 'top|bottom|left|right|(top|bottom)[ -](left|right)|(left|right)[ -](top|bottom)',
            ],
            Attribute::ASPECT_RATIO => [
                SpecRule::VALUE_REGEX => '\d+:\d+',
            ],
            Attribute::POSITION => [
                SpecRule::VALUE => [
                    'landscape-half-left',
                    'landscape-half-right',
                ],
            ],
            Attribute::PRESET => [
                SpecRule::VALUE => [
                    '2021-background',
                    '2021-foreground',
                ],
            ],
            Attribute::TEMPLATE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'fill',
                    'horizontal',
                    'thirds',
                    'vertical',
                ],
            ],
        ],
        SpecRule::MANDATORY_ANCESTOR => Extension::STORY_PAGE,
        SpecRule::REFERENCE_POINTS => [
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-STORY-GRID-LAYER default',
            ],
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-STORY-GRID-LAYER animate-in',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCENDANT_TAG_LIST => DescendantTagList\AmpStoryGridLayerAllowedDescendants::ID,
    ];
}
PK.3Y�Pi�		^bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryGridLayerAnimateIn.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryGridLayerAnimateIn.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read string $specUrl
 * @property-read array<array<string>> $referencePoints
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class AmpStoryGridLayerAnimateIn extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-STORY-GRID-LAYER animate-in';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => '$REFERENCE_POINT',
        SpecRule::SPEC_NAME => 'AMP-STORY-GRID-LAYER animate-in',
        SpecRule::ATTRS => [
            Attribute::ANIMATE_IN => [
                SpecRule::VALUE => [
                    'drop',
                    'fade-in',
                    'fly-in-bottom',
                    'fly-in-left',
                    'fly-in-right',
                    'fly-in-top',
                    'pan-down',
                    'pan-left',
                    'pan-right',
                    'pan-up',
                    'pulse',
                    'rotate-in-left',
                    'rotate-in-right',
                    'scale-fade-down',
                    'scale-fade-up',
                    'twirl-in',
                    'whoosh-in-left',
                    'whoosh-in-right',
                    'zoom-in',
                    'zoom-out',
                ],
            ],
            Attribute::TARGET => [
                SpecRule::VALUE => [
                    '_blank',
                ],
            ],
            Attribute::DATA_TOOLTIP_ICON => [
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTP,
                        Protocol::HTTPS,
                        Protocol::DATA,
                    ],
                ],
            ],
            Attribute::ANIMATE_IN_AFTER => [],
            Attribute::ANIMATE_IN_DELAY => [],
            Attribute::ANIMATE_IN_DURATION => [],
            Attribute::ANIMATE_IN_TIMING_FUNCTION => [],
            Attribute::INTERACTIVE => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::SCALE_END => [
                SpecRule::VALUE_REGEX => '[0-9]+([.][0-9]+)?',
            ],
            Attribute::SCALE_START => [
                SpecRule::VALUE_REGEX => '[0-9]+([.][0-9]+)?',
            ],
            Attribute::TRANSLATE_X => [
                SpecRule::VALUE_REGEX_CASEI => '[0-9]+px',
            ],
            Attribute::TRANSLATE_Y => [
                SpecRule::VALUE_REGEX_CASEI => '[0-9]+px',
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-story/',
        SpecRule::REFERENCE_POINTS => [
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-STORY-GRID-LAYER animate-in',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'amp-story-grid-layer [animate-in] child',
    ];
}
PK.3Y;��TT\bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryGridLayerDefault.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryGridLayerDefault.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read string $specUrl
 * @property-read array<array<string>> $referencePoints
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class AmpStoryGridLayerDefault extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-STORY-GRID-LAYER default';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => '$REFERENCE_POINT',
        SpecRule::SPEC_NAME => 'AMP-STORY-GRID-LAYER default',
        SpecRule::ATTRS => [
            Attribute::ALIGN_CONTENT => [
                SpecRule::VALUE => [
                    'center',
                    'end',
                    'space-around',
                    'space-between',
                    'space-evenly',
                    'start',
                    'stretch',
                ],
            ],
            Attribute::TARGET => [
                SpecRule::VALUE => [
                    '_blank',
                ],
            ],
            Attribute::DATA_TOOLTIP_ICON => [
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTP,
                        Protocol::HTTPS,
                        Protocol::DATA,
                    ],
                ],
            ],
            Attribute::ALIGN_ITEMS => [
                SpecRule::VALUE => [
                    'center',
                    'end',
                    'start',
                    'stretch',
                ],
            ],
            Attribute::ALIGN_SELF => [
                SpecRule::VALUE => [
                    'center',
                    'end',
                    'start',
                    'stretch',
                ],
            ],
            Attribute::ANIMATE_IN => [
                SpecRule::VALUE => [
                    'drop',
                    'fade-in',
                    'fly-in-bottom',
                    'fly-in-left',
                    'fly-in-right',
                    'fly-in-top',
                    'pan-down',
                    'pan-left',
                    'pan-right',
                    'pan-up',
                    'pulse',
                    'rotate-in-left',
                    'rotate-in-right',
                    'scale-fade-down',
                    'scale-fade-up',
                    'twirl-in',
                    'whoosh-in-left',
                    'whoosh-in-right',
                    'zoom-in',
                    'zoom-out',
                ],
            ],
            Attribute::ANIMATE_IN_AFTER => [],
            Attribute::ANIMATE_IN_DELAY => [],
            Attribute::ANIMATE_IN_DURATION => [],
            Attribute::ANIMATE_IN_TIMING_FUNCTION => [],
            Attribute::GRID_AREA => [],
            Attribute::INTERACTIVE => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::SCALE_END => [
                SpecRule::VALUE_REGEX => '[0-9]+([.][0-9]+)?',
            ],
            Attribute::SCALE_START => [
                SpecRule::VALUE_REGEX => '[0-9]+([.][0-9]+)?',
            ],
            Attribute::TRANSLATE_X => [
                SpecRule::VALUE_REGEX_CASEI => '[0-9]+px',
            ],
            Attribute::TRANSLATE_Y => [
                SpecRule::VALUE_REGEX_CASEI => '[0-9]+px',
            ],
            Attribute::JUSTIFY_CONTENT => [
                SpecRule::VALUE => [
                    'center',
                    'end',
                    'space-around',
                    'space-between',
                    'space-evenly',
                    'start',
                    'stretch',
                ],
            ],
            Attribute::JUSTIFY_ITEMS => [
                SpecRule::VALUE => [
                    'center',
                    'end',
                    'start',
                    'stretch',
                ],
            ],
            Attribute::JUSTIFY_SELF => [
                SpecRule::VALUE => [
                    'center',
                    'end',
                    'start',
                    'stretch',
                ],
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-story/',
        SpecRule::REFERENCE_POINTS => [
            [
                SpecRule::TAG_SPEC_NAME => 'AMP-STORY-GRID-LAYER animate-in',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'amp-story-grid-layer child',
    ];
}
PK.3Y���abunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryInteractiveBinaryPoll.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryInteractiveBinaryPoll.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpStoryInteractiveBinaryPoll extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-STORY-INTERACTIVE-BINARY-POLL';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::STORY_INTERACTIVE_BINARY_POLL,
        SpecRule::ATTRS => [
            Attribute::OPTION_1_TEXT => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::OPTION_2_TEXT => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::OPTION_1_CONFETTI => [],
            Attribute::OPTION_2_CONFETTI => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\InteractiveSharedConfigsAttrs::ID,
        ],
        SpecRule::MANDATORY_ANCESTOR => Extension::STORY_GRID_LAYER,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::STORY_INTERACTIVE,
        ],
    ];
}
PK.3Y�S�
�
^bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryInteractiveImgPoll.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryInteractiveImgPoll.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array<array<array<string>>>> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpStoryInteractiveImgPoll extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-STORY-INTERACTIVE-IMG-POLL';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::STORY_INTERACTIVE_IMG_POLL,
        SpecRule::ATTRS => [
            Attribute::OPTION_1_RESULTS_CATEGORY => [
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::OPTION_2_RESULTS_CATEGORY,
                    ],
                ],
            ],
            Attribute::OPTION_2_RESULTS_CATEGORY => [
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::OPTION_1_RESULTS_CATEGORY,
                    ],
                ],
            ],
            Attribute::OPTION_3_RESULTS_CATEGORY => [
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::OPTION_2_RESULTS_CATEGORY,
                        Attribute::OPTION_3_IMAGE,
                    ],
                ],
            ],
            Attribute::OPTION_4_RESULTS_CATEGORY => [
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::OPTION_3_RESULTS_CATEGORY,
                        Attribute::OPTION_4_IMAGE,
                    ],
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\InteractiveOptionsImgAttrs::ID,
            AttributeList\InteractiveOptionsConfettiAttrs::ID,
            AttributeList\InteractiveSharedConfigsAttrs::ID,
        ],
        SpecRule::MANDATORY_ANCESTOR => Extension::STORY_GRID_LAYER,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::STORY_INTERACTIVE,
        ],
    ];
}
PK.3Y\��^bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryInteractiveImgQuiz.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryInteractiveImgQuiz.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpStoryInteractiveImgQuiz extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-STORY-INTERACTIVE-IMG-QUIZ';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::STORY_INTERACTIVE_IMG_QUIZ,
        SpecRule::ATTRS => [
            Attribute::OPTION_1_CORRECT => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::OPTION_1_CORRECT,
                    Attribute::OPTION_2_CORRECT,
                    Attribute::OPTION_3_CORRECT,
                    Attribute::OPTION_4_CORRECT,
                ],
            ],
            Attribute::OPTION_2_CORRECT => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::OPTION_1_CORRECT,
                    Attribute::OPTION_2_CORRECT,
                    Attribute::OPTION_3_CORRECT,
                    Attribute::OPTION_4_CORRECT,
                ],
            ],
            Attribute::OPTION_3_CORRECT => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::OPTION_1_CORRECT,
                    Attribute::OPTION_2_CORRECT,
                    Attribute::OPTION_3_CORRECT,
                    Attribute::OPTION_4_CORRECT,
                ],
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::OPTION_3_IMAGE,
                    ],
                ],
            ],
            Attribute::OPTION_4_CORRECT => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::OPTION_1_CORRECT,
                    Attribute::OPTION_2_CORRECT,
                    Attribute::OPTION_3_CORRECT,
                    Attribute::OPTION_4_CORRECT,
                ],
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::OPTION_4_IMAGE,
                    ],
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\InteractiveOptionsImgAttrs::ID,
            AttributeList\InteractiveOptionsConfettiAttrs::ID,
            AttributeList\InteractiveSharedConfigsAttrs::ID,
        ],
        SpecRule::MANDATORY_ANCESTOR => Extension::STORY_GRID_LAYER,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::STORY_INTERACTIVE,
        ],
    ];
}
PK.3Y���

[bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryInteractivePoll.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryInteractivePoll.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpStoryInteractivePoll extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-STORY-INTERACTIVE-POLL';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::STORY_INTERACTIVE_POLL,
        SpecRule::ATTR_LISTS => [
            AttributeList\InteractiveOptionsTextAttrs::ID,
            AttributeList\InteractiveOptionsConfettiAttrs::ID,
            AttributeList\InteractiveOptionsResultsCategoryAttrs::ID,
            AttributeList\InteractiveSharedConfigsAttrs::ID,
        ],
        SpecRule::MANDATORY_ANCESTOR => Extension::STORY_GRID_LAYER,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::STORY_INTERACTIVE,
        ],
    ];
}
PK.3Y<.R֧�[bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryInteractiveQuiz.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryInteractiveQuiz.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpStoryInteractiveQuiz extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-STORY-INTERACTIVE-QUIZ';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::STORY_INTERACTIVE_QUIZ,
        SpecRule::ATTRS => [
            Attribute::OPTION_1_CORRECT => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::OPTION_1_CORRECT,
                    Attribute::OPTION_2_CORRECT,
                    Attribute::OPTION_3_CORRECT,
                    Attribute::OPTION_4_CORRECT,
                ],
            ],
            Attribute::OPTION_2_CORRECT => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::OPTION_1_CORRECT,
                    Attribute::OPTION_2_CORRECT,
                    Attribute::OPTION_3_CORRECT,
                    Attribute::OPTION_4_CORRECT,
                ],
            ],
            Attribute::OPTION_3_CORRECT => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::OPTION_1_CORRECT,
                    Attribute::OPTION_2_CORRECT,
                    Attribute::OPTION_3_CORRECT,
                    Attribute::OPTION_4_CORRECT,
                ],
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::OPTION_3_TEXT,
                    ],
                ],
            ],
            Attribute::OPTION_4_CORRECT => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::OPTION_1_CORRECT,
                    Attribute::OPTION_2_CORRECT,
                    Attribute::OPTION_3_CORRECT,
                    Attribute::OPTION_4_CORRECT,
                ],
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::OPTION_4_TEXT,
                    ],
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\InteractiveOptionsTextAttrs::ID,
            AttributeList\InteractiveOptionsConfettiAttrs::ID,
            AttributeList\InteractiveSharedConfigsAttrs::ID,
        ],
        SpecRule::MANDATORY_ANCESTOR => Extension::STORY_GRID_LAYER,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::STORY_INTERACTIVE,
        ],
    ];
}
PK.3Y�����^bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryInteractiveResults.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryInteractiveResults.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpStoryInteractiveResults extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-STORY-INTERACTIVE-RESULTS';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::STORY_INTERACTIVE_RESULTS,
        SpecRule::ATTRS => [
            Attribute::OPTION_1_RESULTS_CATEGORY => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::OPTION_2_RESULTS_CATEGORY => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::OPTION_3_RESULTS_CATEGORY => [],
            Attribute::OPTION_4_RESULTS_CATEGORY => [
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::OPTION_3_RESULTS_CATEGORY,
                    ],
                ],
            ],
            Attribute::OPTION_1_IMAGE => [],
            Attribute::OPTION_2_IMAGE => [],
            Attribute::OPTION_3_IMAGE => [
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::OPTION_3_RESULTS_CATEGORY,
                    ],
                ],
            ],
            Attribute::OPTION_4_IMAGE => [
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::OPTION_4_RESULTS_CATEGORY,
                    ],
                ],
            ],
            Attribute::OPTION_1_TEXT => [],
            Attribute::OPTION_2_TEXT => [],
            Attribute::OPTION_3_TEXT => [
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::OPTION_3_RESULTS_CATEGORY,
                    ],
                ],
            ],
            Attribute::OPTION_4_TEXT => [
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::OPTION_4_RESULTS_CATEGORY,
                    ],
                ],
            ],
            Attribute::OPTION_1_RESULTS_THRESHOLD => [
                SpecRule::VALUE_REGEX => '\d+(\.\d+)?',
            ],
            Attribute::OPTION_2_RESULTS_THRESHOLD => [
                SpecRule::VALUE_REGEX => '\d+(\.\d+)?',
            ],
            Attribute::OPTION_3_RESULTS_THRESHOLD => [
                SpecRule::VALUE_REGEX => '\d+(\.\d+)?',
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::OPTION_3_RESULTS_CATEGORY,
                    ],
                ],
            ],
            Attribute::OPTION_4_RESULTS_THRESHOLD => [
                SpecRule::VALUE_REGEX => '\d+(\.\d+)?',
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::OPTION_4_RESULTS_CATEGORY,
                    ],
                ],
            ],
            Attribute::PROMPT_TEXT => [],
            Attribute::THEME => [
                SpecRule::VALUE => [
                    'light',
                    'dark',
                ],
            ],
            Attribute::CHIP_STYLE => [
                SpecRule::VALUE => [
                    'flat',
                    'transparent',
                ],
            ],
        ],
        SpecRule::MANDATORY_ANCESTOR => Extension::STORY_GRID_LAYER,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::STORY_INTERACTIVE,
        ],
    ];
}
PK.3YI�	�T	T	Pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryPage.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryPage.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $mandatoryParent
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array $childTags
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read array<string> $requiresExtension
 */
final class AmpStoryPage extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-STORY-PAGE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::STORY_PAGE,
        SpecRule::MANDATORY_PARENT => Extension::STORY,
        SpecRule::ATTRS => [
            Attribute::AUTO_ADVANCE_AFTER => [],
            Attribute::BACKGROUND_AUDIO => [
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTP,
                        Protocol::HTTPS,
                    ],
                ],
            ],
            Attribute::NEXT_PAGE_NO_AD => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\MandatoryIdAttr::ID,
        ],
        SpecRule::CHILD_TAGS => [
            SpecRule::CHILD_TAG_NAME_ONEOF => [
                'AMP-ANALYTICS',
                'AMP-PIXEL',
                'AMP-STORY-ANIMATION',
                'AMP-STORY-AUTO-ANALYTICS',
                'AMP-STORY-CTA-LAYER',
                'AMP-STORY-GRID-LAYER',
                'AMP-STORY-PAGE-ATTACHMENT',
                'AMP-STORY-PAGE-OUTLINK',
            ],
            SpecRule::MANDATORY_MIN_NUM_CHILD_TAGS => 1,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-story-page',
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::STORY,
        ],
    ];
}
PK.3Y�zٟ	�	Zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryPageAttachment.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\DescendantTagList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryPageAttachment.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 * @property-read string $descendantTagList
 * @property-read bool $mandatoryLastChild
 */
final class AmpStoryPageAttachment extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-story-page-attachment';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::STORY_PAGE_ATTACHMENT,
        SpecRule::SPEC_NAME => 'amp-story-page-attachment',
        SpecRule::ATTRS => [
            Attribute::CTA_TEXT => [],
            Attribute::TITLE => [],
            Attribute::CTA_IMAGE => [
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTP,
                        Protocol::HTTPS,
                    ],
                ],
            ],
            Attribute::CTA_IMAGE_2 => [
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTP,
                        Protocol::HTTPS,
                    ],
                ],
            ],
            Attribute::LAYOUT => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'nodisplay',
                ],
            ],
            Attribute::THEME => [
                SpecRule::VALUE => [
                    'dark',
                    'light',
                ],
            ],
        ],
        SpecRule::MANDATORY_ANCESTOR => Extension::STORY_PAGE,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCENDANT_TAG_LIST => DescendantTagList\AmpStoryPageAttachmentAllowedDescendants::ID,
        SpecRule::MANDATORY_LAST_CHILD => true,
    ];
}
PK.3YZ�QN��^bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryPageAttachmentHref.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryPageAttachmentHref.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read string $mandatoryAncestor
 * @property-read array<int> $childTags
 * @property-read array<string> $htmlFormat
 * @property-read bool $mandatoryLastChild
 */
final class AmpStoryPageAttachmentHref extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-story-page-attachment[href]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::STORY_PAGE_ATTACHMENT,
        SpecRule::SPEC_NAME => 'amp-story-page-attachment[href]',
        SpecRule::ATTRS => [
            Attribute::CTA_TEXT => [],
            Attribute::HREF => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTP,
                        Protocol::HTTPS,
                    ],
                ],
            ],
            Attribute::LAYOUT => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'nodisplay',
                ],
            ],
            Attribute::THEME => [
                SpecRule::VALUE => [
                    'dark',
                    'light',
                ],
            ],
            Attribute::TITLE => [],
        ],
        SpecRule::MANDATORY_ANCESTOR => Extension::STORY_PAGE,
        SpecRule::CHILD_TAGS => [
            SpecRule::MANDATORY_NUM_CHILD_TAGS => 0,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::MANDATORY_LAST_CHILD => true,
    ];
}
PK.3Y-��"R	R	Wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryPageOutlink.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryPageOutlink.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read string $mandatoryAncestor
 * @property-read array $childTags
 * @property-read array<string> $htmlFormat
 * @property-read bool $mandatoryLastChild
 */
final class AmpStoryPageOutlink extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-story-page-outlink';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::STORY_PAGE_OUTLINK,
        SpecRule::SPEC_NAME => 'amp-story-page-outlink',
        SpecRule::ATTRS => [
            Attribute::CTA_ACCENT_COLOR => [],
            Attribute::CTA_ACCENT_ELEMENT => [
                SpecRule::VALUE => [
                    'background',
                    'text',
                ],
            ],
            Attribute::CTA_IMAGE => [
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTP,
                        Protocol::HTTPS,
                    ],
                ],
            ],
            Attribute::LAYOUT => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'nodisplay',
                ],
            ],
            Attribute::THEME => [
                SpecRule::VALUE => [
                    'custom',
                    'dark',
                    'light',
                ],
            ],
        ],
        SpecRule::MANDATORY_ANCESTOR => Extension::STORY_PAGE,
        SpecRule::CHILD_TAGS => [
            SpecRule::MANDATORY_NUM_CHILD_TAGS => 1,
            SpecRule::CHILD_TAG_NAME_ONEOF => [
                'A',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::MANDATORY_LAST_CHILD => true,
    ];
}
PK.3Y��+��Xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryPanningMedia.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryPanningMedia.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read string $mandatoryAncestor
 * @property-read array $childTags
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpStoryPanningMedia extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-STORY-PANNING-MEDIA';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::STORY_PANNING_MEDIA,
        SpecRule::ATTRS => [
            Attribute::DATA_X => [
                SpecRule::VALUE_REGEX => '-?(0|[0-9]?\d\.?\d*%|100%)',
            ],
            Attribute::DATA_Y => [
                SpecRule::VALUE_REGEX => '-?(0|[0-9]?\d\.?\d*%|100%)',
            ],
            Attribute::DATA_ZOOM => [
                SpecRule::VALUE_REGEX => '\d+\.?\d*',
            ],
            Attribute::LOCK_BOUNDS => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-story-panning-media',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
            ],
        ],
        SpecRule::MANDATORY_ANCESTOR => Extension::STORY_GRID_LAYER,
        SpecRule::CHILD_TAGS => [
            SpecRule::MANDATORY_NUM_CHILD_TAGS => 1,
            SpecRule::CHILD_TAG_NAME_ONEOF => [
                'AMP-IMG',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::STORY_PANNING_MEDIA,
        ],
    ];
}
PK.3Yx��a��Rbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryPlayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Layout;
use AmpProject\Validator\Spec\DescendantTagList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryPlayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 * @property-read string $descendantTagList
 */
final class AmpStoryPlayer extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-STORY-PLAYER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::STORY_PLAYER,
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-story-player/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::RESPONSIVE,
                Layout::INTRINSIC,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::STORY_PLAYER,
        ],
        SpecRule::DESCENDANT_TAG_LIST => DescendantTagList\AmpStoryPlayerAllowedDescendants::ID,
    ];
}
PK.3Y�
��	�	Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryPlayerImg.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryPlayerImg.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class AmpStoryPlayerImg extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-story-player > img';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::IMG,
        SpecRule::SPEC_NAME => 'amp-story-player > img',
        SpecRule::MANDATORY_PARENT => Element::A,
        SpecRule::ATTRS => [
            Attribute::ALT => [],
            Attribute::ATTRIBUTION => [],
            Attribute::DATA_AMP_STORY_PLAYER_POSTER_IMG => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    '',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
            ],
            Attribute::DECODING => [
                SpecRule::VALUE => [
                    'async',
                ],
            ],
            Attribute::HEIGHT => [
                SpecRule::VALUE_REGEX => '[0-9]+',
            ],
            Attribute::LOADING => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'lazy',
                ],
            ],
            Attribute::SIZES => [],
            Attribute::WIDTH => [
                SpecRule::VALUE_REGEX => '[0-9]+',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\MandatorySrcOrSrcset::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-story-player/',
        SpecRule::MANDATORY_ANCESTOR => Extension::STORY_PLAYER,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3YGa��..^bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryShoppingAttachment.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryShoppingAttachment.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpStoryShoppingAttachment extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-STORY-SHOPPING-ATTACHMENT';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::STORY_SHOPPING_ATTACHMENT,
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-story-shopping/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::NODISPLAY,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::STORY_SHOPPING,
        ],
    ];
}
PK.3Y]}�Zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryShoppingConfig.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryShoppingConfig.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpStoryShoppingConfig extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-STORY-SHOPPING-CONFIG';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::STORY_SHOPPING_CONFIG,
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-story-shopping/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::NODISPLAY,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::STORY_SHOPPING,
        ],
    ];
}
PK.3Y�&�,��Wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryShoppingTag.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStoryShoppingTag.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpStoryShoppingTag extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-STORY-SHOPPING-TAG';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::STORY_SHOPPING_TAG,
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-story-shopping/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::CONTAINER,
            ],
        ],
        SpecRule::MANDATORY_ANCESTOR => Extension::STORY_GRID_LAYER,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::STORY_SHOPPING,
        ],
    ];
}
PK.3Y2���22Wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStorySocialShare.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\DescendantTagList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStorySocialShare.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 * @property-read string $descendantTagList
 * @property-read bool $mandatoryLastChild
 */
final class AmpStorySocialShare extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-STORY-SOCIAL-SHARE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::STORY_SOCIAL_SHARE,
        SpecRule::ATTRS => [
            Attribute::LAYOUT => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'nodisplay',
                ],
            ],
            Attribute::SRC => [
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTP,
                        Protocol::HTTPS,
                    ],
                ],
            ],
        ],
        SpecRule::MANDATORY_ANCESTOR => Extension::STORY,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCENDANT_TAG_LIST => DescendantTagList\AmpStorySocialShareAllowedDescendants::ID,
        SpecRule::MANDATORY_LAST_CHILD => true,
    ];
}
PK.3Y��qOOjbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStorySocialShareExtensionJsonScript.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStorySocialShareExtensionJsonScript.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 * @property-read bool $siblingsDisallowed
 * @property-read bool $mandatoryLastChild
 */
final class AmpStorySocialShareExtensionJsonScript extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-story-social-share extension .json script';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'amp-story-social-share extension .json script',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Extension::STORY_SOCIAL_SHARE,
        SpecRule::ATTRS => [
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_PARENT_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'application/json',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::STORY,
        ],
        SpecRule::SIBLINGS_DISALLOWED => true,
        SpecRule::MANDATORY_LAST_CHILD => true,
    ];
}
PK.3Yt�z��Ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStorySubscriptions.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStorySubscriptions.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpStorySubscriptions extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-STORY-SUBSCRIPTIONS';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::STORY_SUBSCRIPTIONS,
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::CONTAINER,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::STORY_SUBSCRIPTIONS,
        ],
    ];
}
PK.3Y��a00Tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStreamGallery.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpStreamGallery.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpStreamGallery extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-STREAM-GALLERY';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::STREAM_GALLERY,
        SpecRule::ATTR_LISTS => [
            AttributeList\AmpStreamGalleryCommon::ID,
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://github.com/ampproject/amphtml/blob/master/extensions/amp-stream-gallery/amp-stream-gallery.md',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::STREAM_GALLERY,
        ],
    ];
}
PK.3Yq+�Ti	i	gbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSubscriptionsExtensionJsonScript.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpSubscriptionsExtensionJsonScript.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<array<string>>> $cdata
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpSubscriptionsExtensionJsonScript extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-subscriptions extension .json script';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'amp-subscriptions extension .json script',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::ID => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'amp-subscriptions',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
            ],
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_CASEI => [
                    'application/json',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
        ],
        SpecRule::CDATA => [
            SpecRule::DISALLOWED_CDATA_REGEX => [
                [
                    SpecRule::REGEX => '<!--',
                    SpecRule::ERROR_MESSAGE => 'html comments',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::SUBSCRIPTIONS,
        ],
    ];
}
PK.3Yz���Mbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpTiktok.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpTiktok.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpTiktok extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-TIKTOK';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::TIKTOK,
        SpecRule::SPEC_NAME => 'AMP-TIKTOK',
        SpecRule::ATTRS => [
            Attribute::DATA_SRC => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_REGEX => '(https://www\.tiktok\.com/.*)?\d+.*',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-tiktok',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::TIKTOK,
        ],
    ];
}
PK.3Y��	�Wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpTiktokBlockquote.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpTiktokBlockquote.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array $childTags
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpTiktokBlockquote extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-TIKTOK blockquote';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::TIKTOK,
        SpecRule::SPEC_NAME => 'AMP-TIKTOK blockquote',
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-tiktok',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::CHILD_TAGS => [
            SpecRule::CHILD_TAG_NAME_ONEOF => [
                'BLOCKQUOTE',
            ],
            SpecRule::MANDATORY_MIN_NUM_CHILD_TAGS => 1,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::TIKTOK,
        ],
    ];
}
PK.3Y�g(�MMNbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpTimeago.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpTimeago.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpTimeago extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-TIMEAGO';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::TIMEAGO,
        SpecRule::ATTRS => [
            Attribute::CUTOFF => [
                SpecRule::VALUE_REGEX => '\d+',
            ],
            Attribute::DATETIME => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_REGEX => '\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d(:[0-5]\d(\.\d+)?)?(Z|[+-][0-1][0-9]:[0-5][0-9])',
            ],
            Attribute::LOCALE => [],
            '[datetime]' => [],
            '[title]' => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-timeago/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4EMAIL,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::TIMEAGO,
        ],
    ];
}
PK.3Y�`�Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpTruncateText.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpTruncateText.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array<array<string>>> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpTruncateText extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-TRUNCATE-TEXT';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::TRUNCATE_TEXT,
        SpecRule::ATTRS => [
            Attribute::OVERFLOW_STYLE => [
                SpecRule::VALUE => [
                    'right',
                    'default',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-truncate-text/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::CONTAINER,
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::TRUNCATE_TEXT,
        ],
    ];
}
PK.3YMx���Nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpTwitter.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpTwitter.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpTwitter extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-TWITTER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::TWITTER,
        SpecRule::ATTRS => [
            Attribute::DATA_CARDS => [
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::DATA_TWEETID,
                    ],
                ],
            ],
            Attribute::DATA_CONVERSATION => [
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::DATA_TWEETID,
                    ],
                ],
            ],
            Attribute::DATA_LIMIT => [
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::DATA_MOMENTID,
                    ],
                ],
            ],
            Attribute::DATA_MOMENTID => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::DATA_MOMENTID,
                    Attribute::DATA_TIMELINE_SOURCE_TYPE,
                    Attribute::DATA_TWEETID,
                ],
                SpecRule::VALUE_REGEX => '\d+',
            ],
            Attribute::DATA_TIMELINE_ID => [
                SpecRule::VALUE_REGEX => '\d+',
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::DATA_TIMELINE_SOURCE_TYPE,
                    ],
                ],
            ],
            Attribute::DATA_TIMELINE_OWNER_SCREEN_NAME => [
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::DATA_TIMELINE_SOURCE_TYPE,
                    ],
                ],
            ],
            Attribute::DATA_TIMELINE_SLUG => [
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::DATA_TIMELINE_SOURCE_TYPE,
                    ],
                ],
            ],
            Attribute::DATA_TIMELINE_SOURCE_TYPE => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::DATA_MOMENTID,
                    Attribute::DATA_TIMELINE_SOURCE_TYPE,
                    Attribute::DATA_TWEETID,
                ],
            ],
            Attribute::DATA_TIMELINE_SCREEN_NAME => [
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::DATA_TIMELINE_SOURCE_TYPE,
                    ],
                ],
            ],
            Attribute::DATA_TIMELINE_URL => [
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTP,
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => false,
                ],
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::DATA_TIMELINE_SOURCE_TYPE,
                    ],
                ],
            ],
            Attribute::DATA_TIMELINE_USER_ID => [
                SpecRule::VALUE_REGEX => '\d+',
                SpecRule::TRIGGER => [
                    SpecRule::ALSO_REQUIRES_ATTR => [
                        Attribute::DATA_TIMELINE_SOURCE_TYPE,
                    ],
                ],
            ],
            Attribute::DATA_TWEETID => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::DATA_MOMENTID,
                    Attribute::DATA_TIMELINE_SOURCE_TYPE,
                    Attribute::DATA_TWEETID,
                ],
            ],
            '[data-tweetid]' => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::TWITTER,
        ],
    ];
}
PK.3YK��BV	V	Wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpUserNotification.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpUserNotification.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpUserNotification extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-USER-NOTIFICATION';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::USER_NOTIFICATION,
        SpecRule::ATTRS => [
            Attribute::DATA_DISMISS_HREF => [
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => false,
                    SpecRule::ALLOW_EMPTY => false,
                ],
            ],
            Attribute::DATA_SHOW_IF_HREF => [
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => false,
                    SpecRule::ALLOW_EMPTY => false,
                ],
            ],
            Attribute::ENCTYPE => [
                SpecRule::VALUE => [
                    'application/x-www-form-urlencoded',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::NODISPLAY,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::USER_NOTIFICATION,
        ],
    ];
}
PK.3YPx��11Lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVideo.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpVideo.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $disallowedAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpVideo extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-VIDEO';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::VIDEO,
        SpecRule::ATTRS => [
            Attribute::POSTER => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
            AttributeList\AmpVideoCommon::ID,
            AttributeList\LightboxableElements::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-video/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::DISALLOWED_ANCESTOR => [
            'AMP-STORY',
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::VIDEO,
        ],
    ];
}
PK.3Y��h��Rbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVideoIframe.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpVideoIframe.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 * @property-read array<string> $disabledBy
 */
final class AmpVideoIframe extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-VIDEO-IFRAME';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::VIDEO_IFRAME,
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
            AttributeList\AmpVideoIframeCommon::ID,
            AttributeList\LightboxableElements::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-video-iframe/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::VIDEO_IFRAME,
        ],
        SpecRule::DISABLED_BY => [
            Attribute::TRANSFORMED,
        ],
    ];
}
PK.3Ypݦ�PP]bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVideoIframeTransformed.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpVideoIframeTransformed.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 * @property-read array<string> $enabledBy
 */
final class AmpVideoIframeTransformed extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-VIDEO-IFRAME (transformed)';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::VIDEO_IFRAME,
        SpecRule::SPEC_NAME => 'AMP-VIDEO-IFRAME (transformed)',
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
            AttributeList\AmpVideoIframeCommon::ID,
            AttributeList\LightboxableElements::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-video-iframe/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::VIDEO_IFRAME,
        ],
        SpecRule::ENABLED_BY => [
            Attribute::TRANSFORMED,
        ],
    ];
}
PK.3Yl���**Rbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVideoSource.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpVideoSource.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 */
final class AmpVideoSource extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-video > source';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SOURCE,
        SpecRule::SPEC_NAME => 'amp-video > source',
        SpecRule::MANDATORY_PARENT => Extension::VIDEO,
        SpecRule::ATTRS => [
            Attribute::MEDIA => [],
            Attribute::SRC => [
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => true,
                ],
            ],
            Attribute::TYPE => [],
            '[src]' => [],
            '[type]' => [],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-video/',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y'k���Qbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVideoTrack.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpVideoTrack.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 */
final class AmpVideoTrack extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-video > track';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::TRACK,
        SpecRule::SPEC_NAME => 'amp-video > track',
        SpecRule::MANDATORY_PARENT => Extension::VIDEO,
        SpecRule::ATTRS => [
            '[label]' => [],
            '[src]' => [],
            '[srclang]' => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\TrackAttrsNoSubtitles::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y?Hw��^bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVideoTrackKindSubtitles.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpVideoTrackKindSubtitles.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 */
final class AmpVideoTrackKindSubtitles extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'amp-video > track[kind=subtitles]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::TRACK,
        SpecRule::SPEC_NAME => 'amp-video > track[kind=subtitles]',
        SpecRule::MANDATORY_PARENT => Extension::VIDEO,
        SpecRule::ATTRS => [
            '[label]' => [],
            '[src]' => [],
            '[srclang]' => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\TrackAttrsSubtitles::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3YiL(ebbLbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVimeo.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpVimeo.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpVimeo extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-VIMEO';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::VIMEO,
        SpecRule::ATTRS => [
            Attribute::AUTOPLAY => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::DATA_VIDEOID => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_REGEX => '[0-9]+',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::VIMEO,
        ],
    ];
}
PK.3Yb�ߑ��Kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVine.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpVine.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array<bool>> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpVine extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-VINE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::VINE,
        SpecRule::ATTRS => [
            Attribute::DATA_VINEID => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::VINE,
        ],
    ];
}
PK.3Y �Ԑ�Rbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpViqeoPlayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpViqeoPlayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpViqeoPlayer extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-VIQEO-PLAYER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::VIQEO_PLAYER,
        SpecRule::ATTRS => [
            Attribute::AUTOPLAY => [],
            Attribute::DATA_PROFILEID => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_REGEX => '[0-9a-f]*',
            ],
            Attribute::DATA_VIDEOID => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::VIQEO_PLAYER,
        ],
    ];
}
PK.3Y@�̲ggIbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVk.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpVk.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array<bool>> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpVk extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-VK';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::VK,
        SpecRule::ATTRS => [
            Attribute::DATA_EMBEDTYPE => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FIXED,
                Layout::FLEX_ITEM,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::VK,
        ],
    ];
}
PK.3Y��-9��Nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpWebPush.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpWebPush.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpWebPush extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-WEB-PUSH';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::WEB_PUSH,
        SpecRule::ATTRS => [
            Attribute::HELPER_IFRAME_URL => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => false,
                ],
            ],
            Attribute::ID => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'amp-web-push',
                ],
            ],
            Attribute::PERMISSION_DIALOG_URL => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => false,
                ],
            ],
            Attribute::SERVICE_WORKER_URL => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => false,
                ],
            ],
            Attribute::SERVICE_WORKER_SCOPE => [
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-web-push/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::NODISPLAY,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::WEB_PUSH,
        ],
    ];
}
PK.3Y��	ccTbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpWebPushWidget.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpWebPushWidget.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpWebPushWidget extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-WEB-PUSH-WIDGET';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::WEB_PUSH_WIDGET,
        SpecRule::ATTRS => [
            Attribute::VISIBILITY => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'blocked',
                    'subscribed',
                    'unsubscribed',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-web-push/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FIXED,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::WEB_PUSH,
        ],
    ];
}
PK.3YU��5��Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpWistiaPlayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpWistiaPlayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpWistiaPlayer extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-WISTIA-PLAYER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::WISTIA_PLAYER,
        SpecRule::ATTRS => [
            Attribute::DATA_MEDIA_HASHED_ID => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_REGEX => '[0-9a-zA-Z]+',
            ],
            Attribute::ROTATE_TO_FULLSCREEN => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::WISTIA_PLAYER,
        ],
    ];
}
PK.3Y�}mܝ�Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpWordpressEmbed.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpWordpressEmbed.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpWordpressEmbed extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-WORDPRESS-EMBED';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::WORDPRESS_EMBED,
        SpecRule::ATTRS => [
            Attribute::DATA_URL => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => false,
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-wordpress-embed/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::INTRINSIC,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::WORDPRESS_EMBED,
        ],
    ];
}
PK.3Y�Aq��Lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpYotpo.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpYotpo.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array<bool>> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpYotpo extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-YOTPO';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::YOTPO,
        SpecRule::ATTRS => [
            Attribute::DATA_APP_KEY => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::DATA_WIDGET_TYPE => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-yotpo/',
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::YOTPO,
        ],
    ];
}
PK.3Y��6*�
�
Nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpYoutube.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Layout;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AmpYoutube.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<string>> $ampLayout
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class AmpYoutube extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AMP-YOUTUBE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Extension::YOUTUBE,
        SpecRule::ATTRS => [
            Attribute::AUTOPLAY => [],
            Attribute::LOOP => [],
            Attribute::CREDENTIALS => [
                SpecRule::VALUE_CASEI => [
                    'include',
                    'omit',
                ],
            ],
            Attribute::DATA_LIVE_CHANNELID => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::DATA_LIVE_CHANNELID,
                    Attribute::DATA_VIDEOID,
                ],
                SpecRule::VALUE_REGEX => '[^=/?:]+',
            ],
            Attribute::DATA_VIDEOID => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::DATA_LIVE_CHANNELID,
                    Attribute::DATA_VIDEOID,
                ],
                SpecRule::VALUE_REGEX => '[^=/?:]+',
            ],
            Attribute::DOCK => [
                SpecRule::REQUIRES_EXTENSION => [
                    Extension::VIDEO_DOCKING,
                ],
            ],
            '[data-videoid]' => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ExtendedAmpGlobal::ID,
            AttributeList\LightboxableElements::ID,
        ],
        SpecRule::AMP_LAYOUT => [
            SpecRule::SUPPORTED_LAYOUTS => [
                Layout::FILL,
                Layout::FIXED,
                Layout::FIXED_HEIGHT,
                Layout::FLEX_ITEM,
                Layout::NODISPLAY,
                Layout::RESPONSIVE,
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::YOUTUBE,
        ],
    ];
}
PK.3Y>ݸ��Kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Article.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Article.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Article extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'ARTICLE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::ARTICLE,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y�愂�Ibunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Aside.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Aside.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Aside extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'ASIDE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::ASIDE,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3YE�>͐�Ibunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Audio.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Audio.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read string $mandatoryAncestorSuggestedAlternative
 * @property-read array<string> $htmlFormat
 */
final class Audio extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'AUDIO';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::AUDIO,
        SpecRule::ATTRS => [
            Attribute::AUTOPLAY => [],
            Attribute::CONTROLS => [],
            Attribute::LOOP => [],
            Attribute::MUTED => [],
            Attribute::PRELOAD => [],
            Attribute::SRC => [
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::DATA,
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => false,
                ],
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-audio/',
        SpecRule::MANDATORY_ANCESTOR => Element::NOSCRIPT,
        SpecRule::MANDATORY_ANCESTOR_SUGGESTED_ALTERNATIVE => Extension::AUDIO,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3YS�� ))Obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AudioSource.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AudioSource.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array $attrs
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 */
final class AudioSource extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'audio > source';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SOURCE,
        SpecRule::SPEC_NAME => 'audio > source',
        SpecRule::MANDATORY_PARENT => Element::AUDIO,
        SpecRule::ATTRS => [
            Attribute::MEDIA => [],
            Attribute::SRC => [
                SpecRule::MANDATORY => true,
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => true,
                ],
            ],
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-audio/',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y������Nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AudioTrack.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AudioTrack.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 */
final class AudioTrack extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'audio > track';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::TRACK,
        SpecRule::SPEC_NAME => 'audio > track',
        SpecRule::MANDATORY_PARENT => Element::AUDIO,
        SpecRule::ATTR_LISTS => [
            AttributeList\TrackAttrsNoSubtitles::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y��/�[bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AudioTrackKindSubtitles.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class AudioTrackKindSubtitles.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 */
final class AudioTrackKindSubtitles extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'audio > track[kind=subtitles]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::TRACK,
        SpecRule::SPEC_NAME => 'audio > track[kind=subtitles]',
        SpecRule::MANDATORY_PARENT => Element::AUDIO,
        SpecRule::ATTR_LISTS => [
            AttributeList\TrackAttrsSubtitles::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y�YjrrEbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/B.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class B.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class B extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'B';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::B,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y5cֶ��Hbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Base.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Base.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array<array<array<string>>> $attrs
 * @property-read array<string> $htmlFormat
 */
final class Base extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'BASE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::BASE,
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::HREF => [
                SpecRule::VALUE => [
                    '/',
                ],
            ],
            Attribute::TARGET => [
                SpecRule::VALUE_CASEI => [
                    '_blank',
                    '_self',
                    '_top',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y+�
[[Gbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Bdi.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Bdi.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Bdi extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'BDI';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::BDI,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y��=G		Gbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Bdo.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Bdo.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $htmlFormat
 */
final class Bdo extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'BDO';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::BDO,
        SpecRule::ATTRS => [
            Attribute::DIR => [],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y�T�>>Gbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Big.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Big.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Big extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'BIG';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::BIG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y�����Nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Blockquote.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Blockquote.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 */
final class Blockquote extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'BLOCKQUOTE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::BLOCKQUOTE,
        SpecRule::ATTRS => [
            Attribute::ALIGN => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\CiteAttr::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y���z��Xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/BlockquoteWithTiktok.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class BlockquoteWithTiktok.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class BlockquoteWithTiktok extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'BLOCKQUOTE with TikTok';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::BLOCKQUOTE,
        SpecRule::SPEC_NAME => 'BLOCKQUOTE with TikTok',
        SpecRule::ATTRS => [
            Attribute::ALIGN => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\CiteAttr::ID,
        ],
        SpecRule::MANDATORY_ANCESTOR => 'AMP-TIKTOK blockquote',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3YE�{���Hbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Body.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Body.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read bool $mandatory
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 */
final class Body extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'BODY';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::BODY,
        SpecRule::MANDATORY => true,
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HTML,
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3YX�BvvFbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Br.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Br.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Br extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'BR';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::BR,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y�����Jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Button.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Button.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 */
final class Button extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'BUTTON';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::BUTTON,
        SpecRule::ATTRS => [
            Attribute::DISABLED => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::ROLE => [
                SpecRule::IMPLICIT => true,
            ],
            Attribute::TABINDEX => [
                SpecRule::IMPLICIT => true,
            ],
            Attribute::TYPE => [],
            Attribute::VALUE => [],
            '[disabled]' => [],
            '[type]' => [
                SpecRule::DISABLED_BY => [
                    Attribute::AMP4EMAIL,
                ],
            ],
            '[value]' => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NameAttr::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y�{?Wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ButtonAmpNestedMenu.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class ButtonAmpNestedMenu.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class ButtonAmpNestedMenu extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'button amp-nested-menu';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::BUTTON,
        SpecRule::SPEC_NAME => 'button amp-nested-menu',
        SpecRule::ATTR_LISTS => [
            AttributeList\AmpNestedMenuActions::ID,
        ],
        SpecRule::MANDATORY_ANCESTOR => Extension::NESTED_MENU,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Yc�V��Jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Canvas.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Canvas.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class Canvas extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'CANVAS';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::CANVAS,
        SpecRule::ATTRS => [
            Attribute::HEIGHT => [],
            Attribute::WIDTH => [],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
        SpecRule::MANDATORY_ANCESTOR => Extension::SCRIPT,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::SCRIPT,
        ],
    ];
}
PK.3Y
�0��Kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Caption.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Caption.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Caption extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'CAPTION';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::CAPTION,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y�Z�JJJbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Center.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Center.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Center extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'CENTER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::CENTER,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Yb�K

Jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Circle.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Circle.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Circle extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'CIRCLE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::CIRCLE,
        SpecRule::ATTRS => [
            Attribute::CX => [],
            Attribute::CY => [],
            Attribute::EXTERNALRESOURCESREQUIRED => [],
            Attribute::R => [],
            Attribute::SKETCH_TYPE => [],
            Attribute::TRANSFORM => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgConditionalProcessingAttributes::ID,
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Yi
/E~~Hbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Cite.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Cite.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Cite extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'CITE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::CITE,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3YL%JY��Lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Clippath.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Clippath.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Clippath extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'CLIPPATH';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::CLIPPATH,
        SpecRule::ATTRS => [
            Attribute::CLIPPATHUNITS => [],
            Attribute::EXTERNALRESOURCESREQUIRED => [],
            Attribute::TRANSFORM => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgConditionalProcessingAttributes::ID,
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Ys�~~Hbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Code.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Code.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Code extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'CODE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::CODE,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y��v�

Gbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Col.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Col.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $htmlFormat
 */
final class Col extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'COL';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::COL,
        SpecRule::ATTRS => [
            Attribute::SPAN => [],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y��Lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Colgroup.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Colgroup.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $htmlFormat
 */
final class Colgroup extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'COLGROUP';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::COLGROUP,
        SpecRule::ATTRS => [
            Attribute::SPAN => [],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y+l����Xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/CryptokeysJsonScript.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class CryptokeysJsonScript.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array $attrs
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class CryptokeysJsonScript extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'cryptokeys .json script';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'cryptokeys .json script',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::CRYPTOKEYS => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    '',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
            ],
            Attribute::SHA_256_HASH => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_CASEI => [
                    'application/json',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::SUBSCRIPTIONS,
        ],
    ];
}
PK.3YѺ�i~~Hbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Data.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Data.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Data extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'DATA';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::DATA,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3YƖ!�Lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Datalist.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Datalist.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 */
final class Datalist extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'DATALIST';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::DATALIST,
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-form/',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y4��kvvFbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Dd.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Dd.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Dd extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'DD';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::DD,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y����yyHbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Defs.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Defs.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Defs extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'DEFS';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::DEFS,
        SpecRule::ATTRS => [
            Attribute::EXTERNALRESOURCESREQUIRED => [],
            Attribute::TRANSFORM => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgConditionalProcessingAttributes::ID,
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y10X��Gbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Del.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Del.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 */
final class Del extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'DEL';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::DEL,
        SpecRule::ATTRS => [
            Attribute::DATETIME => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\CiteAttr::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y��Z11Hbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Desc.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Desc.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Desc extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'DESC';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::DESC,
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Yc��z��Kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Details.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Details.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $htmlFormat
 */
final class Details extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'DETAILS';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::DETAILS,
        SpecRule::ATTRS => [
            Attribute::OPEN => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            '[open]' => [],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y܉��zzGbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Dfn.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Dfn.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Dfn extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'DFN';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::DFN,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y�F�>>Gbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Dir.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Dir.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Dir extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'DIR';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::DIR,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y�x3�Gbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Div.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Div.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $htmlFormat
 */
final class Div extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'DIV';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::DIV,
        SpecRule::ATTRS => [
            Attribute::ALIGN => [],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Yz�{�	�	Tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/DivAmpNestedMenu.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class DivAmpNestedMenu.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array<string>> $attrs
 * @property-read array<string> $disallowedAncestor
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class DivAmpNestedMenu extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'div amp-nested-menu';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::DIV,
        SpecRule::SPEC_NAME => 'div amp-nested-menu',
        SpecRule::ATTRS => [
            Attribute::AMP_NESTED_SUBMENU => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::AMP_NESTED_SUBMENU,
                    Attribute::AMP_NESTED_SUBMENU_CLOSE,
                    Attribute::AMP_NESTED_SUBMENU_OPEN,
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
            ],
            Attribute::AMP_NESTED_SUBMENU_CLOSE => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::AMP_NESTED_SUBMENU,
                    Attribute::AMP_NESTED_SUBMENU_CLOSE,
                    Attribute::AMP_NESTED_SUBMENU_OPEN,
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
            ],
            Attribute::AMP_NESTED_SUBMENU_OPEN => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::AMP_NESTED_SUBMENU,
                    Attribute::AMP_NESTED_SUBMENU_CLOSE,
                    Attribute::AMP_NESTED_SUBMENU_OPEN,
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
            ],
        ],
        SpecRule::DISALLOWED_ANCESTOR => [
            'AMP-ACCORDION',
        ],
        SpecRule::MANDATORY_ANCESTOR => Extension::NESTED_MENU,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'div amp-nested-menu',
    ];
}
PK.3Y�掭vvFbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Dl.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Dl.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Dl extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'DL';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::DL,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y[}�<vvFbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Dt.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Dt.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Dt extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'DT';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::DT,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y��L%33Kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Ellipse.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Ellipse.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Ellipse extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'ELLIPSE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::ELLIPSE,
        SpecRule::ATTRS => [
            Attribute::CX => [],
            Attribute::CY => [],
            Attribute::EXTERNALRESOURCESREQUIRED => [],
            Attribute::RX => [],
            Attribute::RY => [],
            Attribute::SKETCH_TYPE => [],
            Attribute::TRANSFORM => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgConditionalProcessingAttributes::ID,
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y	!UvvFbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Em.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Em.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Em extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'EM';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::EM,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y�d�`��Kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Feblend.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Feblend.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Feblend extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FEBLEND';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::FEBLEND,
        SpecRule::ATTRS => [
            Attribute::IN => [],
            Attribute::IN2 => [],
            Attribute::MODE => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgFilterPrimitiveAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y�"i��Qbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fecolormatrix.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Fecolormatrix.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Fecolormatrix extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FECOLORMATRIX';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::FECOLORMATRIX,
        SpecRule::ATTRS => [
            Attribute::IN => [],
            Attribute::TYPE => [],
            Attribute::VALUES => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgFilterPrimitiveAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y��	��Wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fecomponenttransfer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Fecomponenttransfer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Fecomponenttransfer extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FECOMPONENTTRANSFER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::FECOMPONENTTRANSFER,
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgFilterPrimitiveAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y�m�1Obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fecomposite.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Fecomposite.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Fecomposite extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FECOMPOSITE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::FECOMPOSITE,
        SpecRule::ATTRS => [
            Attribute::IN => [],
            Attribute::IN2 => [],
            Attribute::K1 => [],
            Attribute::K2 => [],
            Attribute::K3 => [],
            Attribute::K4 => [],
            Attribute::OPERATOR => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgFilterPrimitiveAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y���^��Tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Feconvolvematrix.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Feconvolvematrix.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Feconvolvematrix extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FECONVOLVEMATRIX';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::FECONVOLVEMATRIX,
        SpecRule::ATTRS => [
            Attribute::BIAS => [],
            Attribute::DIVISOR => [],
            Attribute::EDGEMODE => [],
            Attribute::IN => [],
            Attribute::KERNELMATRIX => [],
            Attribute::KERNELUNITLENGTH => [],
            Attribute::ORDER => [],
            Attribute::PRESERVEALPHA => [],
            Attribute::TARGETX => [],
            Attribute::TARGETY => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgFilterPrimitiveAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y1e���Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fediffuselighting.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Fediffuselighting.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Fediffuselighting extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FEDIFFUSELIGHTING';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::FEDIFFUSELIGHTING,
        SpecRule::ATTRS => [
            Attribute::DIFFUSECONSTANT => [],
            Attribute::IN => [],
            Attribute::KERNELUNITLENGTH => [],
            Attribute::SURFACESCALE => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgFilterPrimitiveAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3YX�ӎUbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fedisplacementmap.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Fedisplacementmap.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Fedisplacementmap extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FEDISPLACEMENTMAP';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::FEDISPLACEMENTMAP,
        SpecRule::ATTRS => [
            Attribute::IN => [],
            Attribute::IN2 => [],
            Attribute::SCALE => [],
            Attribute::XCHANNELSELECTOR => [],
            Attribute::YCHANNELSELECTOR => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgFilterPrimitiveAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3YCJ��Rbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fedistantlight.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Fedistantlight.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Fedistantlight extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FEDISTANTLIGHT';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::FEDISTANTLIGHT,
        SpecRule::ATTRS => [
            Attribute::AZIMUTH => [],
            Attribute::ELEVATION => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y�4<�Pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fedropshadow.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Fedropshadow.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Fedropshadow extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FEDROPSHADOW';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::FEDROPSHADOW,
        SpecRule::MANDATORY_PARENT => Element::FILTER,
        SpecRule::ATTRS => [
            Attribute::DX => [],
            Attribute::DY => [],
            Attribute::STDDEVIATION => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgFilterPrimitiveAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y�}�P��Kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Feflood.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Feflood.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Feflood extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FEFLOOD';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::FEFLOOD,
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgFilterPrimitiveAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y�eؼ�Kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fefunca.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Fefunca.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $mandatoryParent
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Fefunca extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FEFUNCA';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::FEFUNCA,
        SpecRule::MANDATORY_PARENT => Element::FECOMPONENTTRANSFER,
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgTransferFunctionAttributes::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y���Kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fefuncb.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Fefuncb.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $mandatoryParent
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Fefuncb extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FEFUNCB';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::FEFUNCB,
        SpecRule::MANDATORY_PARENT => Element::FECOMPONENTTRANSFER,
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgTransferFunctionAttributes::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y�;���Kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fefuncg.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Fefuncg.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $mandatoryParent
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Fefuncg extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FEFUNCG';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::FEFUNCG,
        SpecRule::MANDATORY_PARENT => Element::FECOMPONENTTRANSFER,
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgTransferFunctionAttributes::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y^�ü�Kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fefuncr.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Fefuncr.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $mandatoryParent
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Fefuncr extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FEFUNCR';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::FEFUNCR,
        SpecRule::MANDATORY_PARENT => Element::FECOMPONENTTRANSFER,
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgTransferFunctionAttributes::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y�9Y{��Rbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fegaussianblur.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Fegaussianblur.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Fegaussianblur extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FEGAUSSIANBLUR';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::FEGAUSSIANBLUR,
        SpecRule::ATTRS => [
            Attribute::EDGEMODE => [],
            Attribute::IN => [],
            Attribute::STDDEVIATION => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgFilterPrimitiveAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y8�޲�Kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Femerge.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Femerge.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Femerge extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FEMERGE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::FEMERGE,
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgFilterPrimitiveAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3YWF����Obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Femergenode.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Femergenode.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Femergenode extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FEMERGENODE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::FEMERGENODE,
        SpecRule::ATTRS => [
            Attribute::IN => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y��O��Pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Femorphology.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Femorphology.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Femorphology extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FEMORPHOLOGY';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::FEMORPHOLOGY,
        SpecRule::ATTRS => [
            Attribute::IN => [],
            Attribute::OPERATOR => [],
            Attribute::RADIUS => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgFilterPrimitiveAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Yg���Lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Feoffset.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Feoffset.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Feoffset extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FEOFFSET';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::FEOFFSET,
        SpecRule::ATTRS => [
            Attribute::DX => [],
            Attribute::DY => [],
            Attribute::IN => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgFilterPrimitiveAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Ye~rI��Pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fepointlight.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Fepointlight.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Fepointlight extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FEPOINTLIGHT';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::FEPOINTLIGHT,
        SpecRule::ATTRS => [
            Attribute::X => [],
            Attribute::Y => [],
            Attribute::Z => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y3y$$Vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fespecularlighting.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Fespecularlighting.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Fespecularlighting extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FESPECULARLIGHTING';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::FESPECULARLIGHTING,
        SpecRule::ATTRS => [
            Attribute::IN => [],
            Attribute::KERNELUNITLENGTH => [],
            Attribute::SPECULARCONSTANT => [],
            Attribute::SPECULAREXPONENT => [],
            Attribute::SURFACESCALE => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgFilterPrimitiveAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y�]|��Obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fespotlight.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Fespotlight.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Fespotlight extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FESPOTLIGHT';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::FESPOTLIGHT,
        SpecRule::ATTRS => [
            Attribute::LIMITINGCONEANGLE => [],
            Attribute::POINTSATX => [],
            Attribute::POINTSATY => [],
            Attribute::POINTSATZ => [],
            Attribute::SPECULAREXPONENT => [],
            Attribute::X => [],
            Attribute::Y => [],
            Attribute::Z => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y��&�<<Jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fetile.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Fetile.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Fetile extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FETILE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::FETILE,
        SpecRule::ATTRS => [
            Attribute::IN => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgFilterPrimitiveAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Yh�N���Pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Feturbulence.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Feturbulence.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Feturbulence extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FETURBULENCE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::FETURBULENCE,
        SpecRule::ATTRS => [
            Attribute::BASEFREQUENCY => [],
            Attribute::NUMOCTAVES => [],
            Attribute::SEED => [],
            Attribute::STITCHTILES => [],
            Attribute::TYPE => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgFilterPrimitiveAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y��g���Lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fieldset.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Fieldset.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 */
final class Fieldset extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FIELDSET';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::FIELDSET,
        SpecRule::ATTRS => [
            Attribute::DISABLED => [],
            '[disabled]' => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NameAttr::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y�c��Nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Figcaption.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Figcaption.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Figcaption extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FIGCAPTION';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::FIGCAPTION,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y�
��Jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Figure.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Figure.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Figure extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FIGURE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::FIGURE,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y���QQJbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Filter.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Filter.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Filter extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FILTER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::FILTER,
        SpecRule::ATTRS => [
            Attribute::EXTERNALRESOURCESREQUIRED => [],
            Attribute::FILTERRES => [],
            Attribute::FILTERUNITS => [],
            Attribute::HEIGHT => [],
            Attribute::PRIMITIVEUNITS => [],
            Attribute::WIDTH => [],
            Attribute::X => [],
            Attribute::Y => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
            AttributeList\SvgXlinkAttributes::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y�{���Jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Footer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Footer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Footer extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FOOTER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::FOOTER,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y�ie=[[Vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormDivSubmitError.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class FormDivSubmitError.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class FormDivSubmitError extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FORM DIV [submit-error]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::DIV,
        SpecRule::SPEC_NAME => 'FORM DIV [submit-error]',
        SpecRule::ATTRS => [
            Attribute::ALIGN => [],
            Attribute::SUBMIT_ERROR => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::MANDATORY_ANCESTOR => Element::FORM,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y���^bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormDivSubmitErrorTemplate.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class FormDivSubmitErrorTemplate.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class FormDivSubmitErrorTemplate extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FORM DIV [submit-error][template]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::DIV,
        SpecRule::SPEC_NAME => 'FORM DIV [submit-error][template]',
        SpecRule::ATTRS => [
            Attribute::ALIGN => [],
            Attribute::SUBMIT_ERROR => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::TEMPLATE => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::MANDATORY_ANCESTOR => Element::FORM,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y�߭�eeXbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormDivSubmitSuccess.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class FormDivSubmitSuccess.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class FormDivSubmitSuccess extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FORM DIV [submit-success]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::DIV,
        SpecRule::SPEC_NAME => 'FORM DIV [submit-success]',
        SpecRule::ATTRS => [
            Attribute::ALIGN => [],
            Attribute::SUBMIT_SUCCESS => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::MANDATORY_ANCESTOR => Element::FORM,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y0"���`bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormDivSubmitSuccessTemplate.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class FormDivSubmitSuccessTemplate.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class FormDivSubmitSuccessTemplate extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FORM DIV [submit-success][template]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::DIV,
        SpecRule::SPEC_NAME => 'FORM DIV [submit-success][template]',
        SpecRule::ATTRS => [
            Attribute::ALIGN => [],
            Attribute::SUBMIT_SUCCESS => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::TEMPLATE => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::MANDATORY_ANCESTOR => Element::FORM,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y��cSSUbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormDivSubmitting.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class FormDivSubmitting.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class FormDivSubmitting extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FORM DIV [submitting]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::DIV,
        SpecRule::SPEC_NAME => 'FORM DIV [submitting]',
        SpecRule::ATTRS => [
            Attribute::ALIGN => [],
            Attribute::SUBMITTING => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::MANDATORY_ANCESTOR => Element::FORM,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3YV�-��]bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormDivSubmittingTemplate.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class FormDivSubmittingTemplate.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class FormDivSubmittingTemplate extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FORM DIV [submitting][template]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::DIV,
        SpecRule::SPEC_NAME => 'FORM DIV [submitting][template]',
        SpecRule::ATTRS => [
            Attribute::ALIGN => [],
            Attribute::SUBMITTING => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::TEMPLATE => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::MANDATORY_ANCESTOR => Element::FORM,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y@�<<Vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormDivVerifyError.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class FormDivVerifyError.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class FormDivVerifyError extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FORM DIV [verify-error]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::DIV,
        SpecRule::SPEC_NAME => 'FORM DIV [verify-error]',
        SpecRule::ATTRS => [
            Attribute::ALIGN => [],
            Attribute::VERIFY_ERROR => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::MANDATORY_ANCESTOR => Element::FORM,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3YZ�_��^bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormDivVerifyErrorTemplate.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class FormDivVerifyErrorTemplate.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class FormDivVerifyErrorTemplate extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FORM DIV [verify-error][template]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::DIV,
        SpecRule::SPEC_NAME => 'FORM DIV [verify-error][template]',
        SpecRule::ATTRS => [
            Attribute::ALIGN => [],
            Attribute::VERIFY_ERROR => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::TEMPLATE => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::MANDATORY_ANCESTOR => Element::FORM,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y��÷I
I
Qbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormMethodGet.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class FormMethodGet.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<string> $disallowedAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class FormMethodGet extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FORM [method=GET]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::FORM,
        SpecRule::SPEC_NAME => 'FORM [method=GET]',
        SpecRule::ATTRS => [
            Attribute::ACCEPT => [],
            Attribute::ACCEPT_CHARSET => [],
            Attribute::ACTION => [
                SpecRule::MANDATORY => true,
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                ],
            ],
            Attribute::ACTION_XHR => [
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                ],
            ],
            Attribute::AUTOCOMPLETE => [],
            Attribute::CUSTOM_VALIDATION_REPORTING => [
                SpecRule::VALUE => [
                    'as-you-go',
                    'interact-and-submit',
                    'show-all-on-submit',
                    'show-first-on-submit',
                ],
            ],
            Attribute::ENCTYPE => [],
            Attribute::METHOD => [
                SpecRule::VALUE_CASEI => [
                    'get',
                ],
            ],
            Attribute::NOVALIDATE => [],
            Attribute::TARGET => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_CASEI => [
                    '_blank',
                    '_top',
                ],
            ],
            Attribute::VERIFY_XHR => [
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                ],
            ],
            Attribute::XSSI_PREFIX => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\FormNameAttr::ID,
        ],
        SpecRule::DISALLOWED_ANCESTOR => [
            'AMP-APP-BANNER',
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::FORM,
        ],
    ];
}
PK.3Y�		Zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormMethodGetAmp4email.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class FormMethodGetAmp4email.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class FormMethodGetAmp4email extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FORM [method=GET] (AMP4EMAIL)';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::FORM,
        SpecRule::SPEC_NAME => 'FORM [method=GET] (AMP4EMAIL)',
        SpecRule::ATTRS => [
            Attribute::ACCEPT => [],
            Attribute::ACCEPT_CHARSET => [],
            Attribute::ACTION_XHR => [
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin|{{|}}',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => false,
                ],
            ],
            Attribute::AUTOCOMPLETE => [],
            Attribute::CUSTOM_VALIDATION_REPORTING => [
                SpecRule::VALUE => [
                    'as-you-go',
                    'interact-and-submit',
                    'show-all-on-submit',
                    'show-first-on-submit',
                ],
            ],
            Attribute::ENCTYPE => [],
            Attribute::METHOD => [
                SpecRule::VALUE_CASEI => [
                    'get',
                ],
            ],
            Attribute::NOVALIDATE => [],
            Attribute::XSSI_PREFIX => [],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4EMAIL,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::FORM,
        ],
    ];
}
PK.3Y$Z�@@Rbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormMethodPost.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class FormMethodPost.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<string> $disallowedAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class FormMethodPost extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FORM [method=POST]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::FORM,
        SpecRule::SPEC_NAME => 'FORM [method=POST]',
        SpecRule::ATTRS => [
            Attribute::ACCEPT => [],
            Attribute::ACCEPT_CHARSET => [],
            Attribute::ACTION_XHR => [
                SpecRule::MANDATORY => true,
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                ],
            ],
            Attribute::AUTOCOMPLETE => [],
            Attribute::CUSTOM_VALIDATION_REPORTING => [
                SpecRule::VALUE => [
                    'as-you-go',
                    'interact-and-submit',
                    'show-all-on-submit',
                    'show-first-on-submit',
                ],
            ],
            Attribute::ENCTYPE => [],
            Attribute::METHOD => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'post',
                ],
            ],
            Attribute::NOVALIDATE => [],
            Attribute::TARGET => [
                SpecRule::VALUE_CASEI => [
                    '_blank',
                    '_top',
                ],
            ],
            Attribute::VERIFY_XHR => [
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\FormNameAttr::ID,
        ],
        SpecRule::DISALLOWED_ANCESTOR => [
            'AMP-APP-BANNER',
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::FORM,
        ],
    ];
}
PK.3Y����	�	[bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormMethodPostAmp4email.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class FormMethodPostAmp4email.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class FormMethodPostAmp4email extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'FORM [method=POST] (AMP4EMAIL)';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::FORM,
        SpecRule::SPEC_NAME => 'FORM [method=POST] (AMP4EMAIL)',
        SpecRule::ATTRS => [
            Attribute::ACCEPT => [],
            Attribute::ACCEPT_CHARSET => [],
            Attribute::ACTION_XHR => [
                SpecRule::MANDATORY => true,
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin|{{|}}',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => false,
                ],
            ],
            Attribute::AUTOCOMPLETE => [],
            Attribute::CUSTOM_VALIDATION_REPORTING => [
                SpecRule::VALUE => [
                    'as-you-go',
                    'interact-and-submit',
                    'show-all-on-submit',
                    'show-first-on-submit',
                ],
            ],
            Attribute::ENCTYPE => [],
            Attribute::METHOD => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'post',
                ],
            ],
            Attribute::NOVALIDATE => [],
            Attribute::XSSI_PREFIX => [],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4EMAIL,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::FORM,
        ],
    ];
}
PK.3Y�	�=mmEbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/G.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class G.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class G extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'G';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::G,
        SpecRule::ATTRS => [
            Attribute::EXTERNALRESOURCESREQUIRED => [],
            Attribute::TRANSFORM => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgConditionalProcessingAttributes::ID,
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y��u}IIIbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Glyph.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Glyph.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Glyph extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'GLYPH';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::GLYPH,
        SpecRule::ATTRS => [
            Attribute::ARABIC_FORM => [],
            Attribute::D => [],
            Attribute::GLYPH_NAME => [],
            Attribute::HORIZ_ADV_X => [],
            Attribute::ORIENTATION => [],
            Attribute::UNICODE => [],
            Attribute::VERT_ADV_Y => [],
            Attribute::VERT_ORIGIN_X => [],
            Attribute::VERT_ORIGIN_Y => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Yv���Lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Glyphref.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Glyphref.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Glyphref extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'GLYPHREF';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::GLYPHREF,
        SpecRule::ATTRS => [
            Attribute::DX => [],
            Attribute::DY => [],
            Attribute::FORMAT => [],
            Attribute::GLYPHREF => [],
            Attribute::X => [],
            Attribute::Y => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
            AttributeList\SvgXlinkAttributes::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y"���Fbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/H1.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class H1.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $htmlFormat
 */
final class H1 extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'H1';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::H1,
        SpecRule::ATTRS => [
            Attribute::ALIGN => [],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y��SFbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/H2.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class H2.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $htmlFormat
 */
final class H2 extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'H2';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::H2,
        SpecRule::ATTRS => [
            Attribute::ALIGN => [],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3YU;5��Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/H2AmpNestedMenu.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class H2AmpNestedMenu.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class H2AmpNestedMenu extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'h2 amp-nested-menu';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::H2,
        SpecRule::SPEC_NAME => 'h2 amp-nested-menu',
        SpecRule::ATTR_LISTS => [
            AttributeList\AmpNestedMenuActions::ID,
        ],
        SpecRule::MANDATORY_ANCESTOR => Extension::NESTED_MENU,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y��Fbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/H3.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class H3.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $htmlFormat
 */
final class H3 extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'H3';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::H3,
        SpecRule::ATTRS => [
            Attribute::ALIGN => [],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y����Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/H3AmpNestedMenu.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class H3AmpNestedMenu.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class H3AmpNestedMenu extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'h3 amp-nested-menu';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::H3,
        SpecRule::SPEC_NAME => 'h3 amp-nested-menu',
        SpecRule::ATTR_LISTS => [
            AttributeList\AmpNestedMenuActions::ID,
        ],
        SpecRule::MANDATORY_ANCESTOR => Extension::NESTED_MENU,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y�/t�Fbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/H4.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class H4.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $htmlFormat
 */
final class H4 extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'H4';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::H4,
        SpecRule::ATTRS => [
            Attribute::ALIGN => [],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y4*2@��Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/H4AmpNestedMenu.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class H4AmpNestedMenu.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class H4AmpNestedMenu extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'h4 amp-nested-menu';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::H4,
        SpecRule::SPEC_NAME => 'h4 amp-nested-menu',
        SpecRule::ATTR_LISTS => [
            AttributeList\AmpNestedMenuActions::ID,
        ],
        SpecRule::MANDATORY_ANCESTOR => Extension::NESTED_MENU,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y��=bFbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/H5.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class H5.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $htmlFormat
 */
final class H5 extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'H5';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::H5,
        SpecRule::ATTRS => [
            Attribute::ALIGN => [],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y{ы���Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/H5AmpNestedMenu.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class H5AmpNestedMenu.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class H5AmpNestedMenu extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'h5 amp-nested-menu';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::H5,
        SpecRule::SPEC_NAME => 'h5 amp-nested-menu',
        SpecRule::ATTR_LISTS => [
            AttributeList\AmpNestedMenuActions::ID,
        ],
        SpecRule::MANDATORY_ANCESTOR => Extension::NESTED_MENU,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y=���Fbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/H6.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class H6.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $htmlFormat
 */
final class H6 extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'H6';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::H6,
        SpecRule::ATTRS => [
            Attribute::ALIGN => [],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y��08��Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/H6AmpNestedMenu.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class H6AmpNestedMenu.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class H6AmpNestedMenu extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'h6 amp-nested-menu';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::H6,
        SpecRule::SPEC_NAME => 'h6 amp-nested-menu',
        SpecRule::ATTR_LISTS => [
            AttributeList\AmpNestedMenuActions::ID,
        ],
        SpecRule::MANDATORY_ANCESTOR => Extension::NESTED_MENU,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y��8��Hbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Head.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Head.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read bool $mandatory
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 */
final class Head extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'HEAD';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::HEAD,
        SpecRule::MANDATORY => true,
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HTML,
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y��׆�Jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Header.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Header.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Header extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'HEADER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::HEADER,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y���		_bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/HeadStyleAmp4adsBoilerplate.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class HeadStyleAmp4adsBoilerplate.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array $cdata
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $descriptiveName
 */
final class HeadStyleAmp4adsBoilerplate extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'head > style[amp4ads-boilerplate]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::STYLE,
        SpecRule::SPEC_NAME => 'head > style[amp4ads-boilerplate]',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::AMP4ADS_BOILERPLATE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    '',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_PARENT_DISPATCH',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/a4a_spec/?format=ads#boilerplate',
        SpecRule::CDATA => [
            SpecRule::CDATA_REGEX => '\s*body\s*{\s*visibility:\s*hidden;?\s*}\s*',
            SpecRule::DOC_CSS_BYTES => false,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4ADS,
        ],
        SpecRule::SATISFIES => [
            'style[amp-boilerplate]',
        ],
        SpecRule::DESCRIPTIVE_NAME => 'head > style[amp4ads-boilerplate]',
    ];
}
PK.3Ya�bA��abunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/HeadStyleAmp4emailBoilerplate.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class HeadStyleAmp4emailBoilerplate.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read string $specUrl
 * @property-read array $cdata
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $descriptiveName
 */
final class HeadStyleAmp4emailBoilerplate extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'head > style[amp4email-boilerplate]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::STYLE,
        SpecRule::SPEC_NAME => 'head > style[amp4email-boilerplate]',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::AMP4EMAIL_BOILERPLATE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    '',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_PARENT_DISPATCH',
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/?format=email#required-markup',
        SpecRule::CDATA => [
            SpecRule::CDATA_REGEX => '\s*body\s*{\s*visibility:\s*hidden;?\s*}\s*',
            SpecRule::DOC_CSS_BYTES => false,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4EMAIL,
        ],
        SpecRule::SATISFIES => [
            'style[amp-boilerplate]',
        ],
        SpecRule::DESCRIPTIVE_NAME => 'head > style[amp4email-boilerplate]',
    ];
}
PK.3Y���݁�[bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/HeadStyleAmpBoilerplate.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class HeadStyleAmpBoilerplate.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array $cdata
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $descriptiveName
 */
final class HeadStyleAmpBoilerplate extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'head > style[amp-boilerplate]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::STYLE,
        SpecRule::SPEC_NAME => 'head > style[amp-boilerplate]',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::AMP_BOILERPLATE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    '',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_PARENT_DISPATCH',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amp-boilerplate/?format=websites',
        SpecRule::CDATA => [
            SpecRule::CDATA_REGEX => '\s*body\s*{\s*-webkit-animation:\s*-amp-start\s+8s\s+steps\(1,\s*end\)\s+0s\s+1\s+normal\s+both;\s*-moz-animation:\s*-amp-start\s+8s\s+steps\s*\(1\s*,\s*end\s*\)\s+0s\s+1\s+normal\s+both;\s*-ms-animation:\s*-amp-start\s+8s\s+steps\s*\(1\s*,\s*end\s*\)\s+0s\s+1\s+normal\s+both;\s*animation:\s*-amp-start\s+8s\s+steps\(1,\s*end\)\s+0s\s+1\s+normal\s+both;?\s*}\s*@-webkit-keyframes\s+-amp-start\s*{\s*from\s*{\s*visibility:\s*hidden;?\s*}\s*to\s*{\s*visibility:\s*visible;?\s*}\s*}\s*@-moz-keyframes\s+-amp-start\s*{\s*from\s*{\s*visibility:\s*hidden;?\s*}\s*to\s*{\s*visibility:\s*visible;?\s*}\s*}\s*@-ms-keyframes\s+-amp-start\s*{\s*from\s*{\s*visibility:\s*hidden;?\s*}\s*to\s*{\s*visibility:\s*visible;?\s*}\s*}\s*@-o-keyframes\s+-amp-start\s*{\s*from\s*{\s*visibility:\s*hidden;?\s*}\s*to\s*{\s*visibility:\s*visible;?\s*}\s*}\s*@keyframes\s+-amp-start\s*{\s*from\s*{\s*visibility:\s*hidden;?\s*}\s*to\s*{\s*visibility:\s*visible;?\s*}\s*}\s*',
            SpecRule::DOC_CSS_BYTES => false,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'style[amp-boilerplate]',
        ],
        SpecRule::DESCRIPTIVE_NAME => 'head > style[amp-boilerplate]',
    ];
}
PK.3Y��++Mbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/HeroImage.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class HeroImage.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<string> $disallowedAncestor
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class HeroImage extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'Hero Image';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::IMAGE,
        SpecRule::SPEC_NAME => 'Hero Image',
        SpecRule::ATTRS => [
            Attribute::DATA_HERO => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_DISPATCH',
            ],
            Attribute::DECODING => [
                SpecRule::VALUE_CASEI => [
                    'async',
                ],
            ],
            Attribute::SIZES => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ImgAttrs::ID,
            AttributeList\MandatorySrcOrSrcset::ID,
        ],
        SpecRule::DISALLOWED_ANCESTOR => [
            'AMP-IMG',
            'AMP-STORY',
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'img',
    ];
}
PK.3Yo��g!!Kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/HeroImg.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class HeroImg.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<string> $disallowedAncestor
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class HeroImg extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'Hero Img';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::IMG,
        SpecRule::SPEC_NAME => 'Hero Img',
        SpecRule::ATTRS => [
            Attribute::DATA_HERO => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_DISPATCH',
            ],
            Attribute::DECODING => [
                SpecRule::VALUE_CASEI => [
                    'async',
                ],
            ],
            Attribute::SIZES => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ImgAttrs::ID,
            AttributeList\MandatorySrcOrSrcset::ID,
        ],
        SpecRule::DISALLOWED_ANCESTOR => [
            'AMP-IMG',
            'AMP-STORY',
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'img',
    ];
}
PK.3Y�}}JJJbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Hgroup.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Hgroup.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Hgroup extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'HGROUP';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::HGROUP,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3YTՕ�FFIbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Hkern.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Hkern.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Hkern extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'HKERN';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::HKERN,
        SpecRule::ATTRS => [
            Attribute::G1 => [],
            Attribute::G2 => [],
            Attribute::K => [],
            Attribute::U1 => [],
            Attribute::U2 => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y_�ԬvvFbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Hr.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Hr.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Hr extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'HR';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::HR,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3YFF	��Hbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Html.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Html.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read bool $mandatory
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $disabledBy
 */
final class Html extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'HTML';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::HTML,
        SpecRule::MANDATORY => true,
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::_DOCTYPE,
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
        SpecRule::DISABLED_BY => [
            Attribute::TRANSFORMED,
        ],
    ];
}
PK.3Y�n�V��Obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/HtmlDoctype.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class HtmlDoctype.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $mandatory
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array $attrs
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 * @property-read bool $explicitAttrsOnly
 * @property-read string $descriptiveName
 */
final class HtmlDoctype extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'html doctype';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::_DOCTYPE,
        SpecRule::SPEC_NAME => 'html doctype',
        SpecRule::MANDATORY => true,
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => '$ROOT',
        SpecRule::ATTRS => [
            Attribute::HTML => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::LANG => [
                SpecRule::DEPRECATION => 'html',
                SpecRule::DEPRECATION_URL => 'https://github.com/ampproject/amphtml/issues/25926',
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4EMAIL,
        ],
        SpecRule::EXPLICIT_ATTRS_ONLY => true,
        SpecRule::DESCRIPTIVE_NAME => 'html !doctype',
    ];
}
PK.3Y0�����Vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/HtmlDoctypeAmp4ads.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class HtmlDoctypeAmp4ads.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $mandatory
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class HtmlDoctypeAmp4ads extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'html doctype (AMP4ADS)';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::_DOCTYPE,
        SpecRule::SPEC_NAME => 'html doctype (AMP4ADS)',
        SpecRule::MANDATORY => true,
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => '$ROOT',
        SpecRule::ATTRS => [
            Attribute::HTML => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    '',
                ],
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup',
        SpecRule::HTML_FORMAT => [
            Format::AMP4ADS,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'html !doctype',
    ];
}
PK.3Y'�u�[[Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/HtmlTransformed.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class HtmlTransformed.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $mandatory
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array<array<array<string>>> $attrs
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $enabledBy
 */
final class HtmlTransformed extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'html (transformed)';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::HTML,
        SpecRule::SPEC_NAME => 'html (transformed)',
        SpecRule::MANDATORY => true,
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::_DOCTYPE,
        SpecRule::ATTRS => [
            Attribute::I_AMPHTML_LAYOUT => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::I_AMPHTML_NO_BOILERPLATE => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::ENABLED_BY => [
            Attribute::TRANSFORMED,
        ],
    ];
}
PK.3Y�@�rrEbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/I.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class I.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class I extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'I';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::I,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y*߯<""Zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/IAmphtmlSizerIntrinsic.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Internal;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class IAmphtmlSizerIntrinsic.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $htmlFormat
 * @property-read bool $explicitAttrsOnly
 * @property-read array<string> $enabledBy
 */
final class IAmphtmlSizerIntrinsic extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'I-AMPHTML-SIZER-INTRINSIC';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Internal::SIZER,
        SpecRule::SPEC_NAME => 'I-AMPHTML-SIZER-INTRINSIC',
        SpecRule::ATTRS => [
            Attribute::CLASS_ => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'i-amphtml-sizer',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_DISPATCH',
            ],
            Attribute::I_AMPHTML_DISABLE_AR => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::SLOT => [
                SpecRule::VALUE => [
                    'i-amphtml-svc',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXPLICIT_ATTRS_ONLY => true,
        SpecRule::ENABLED_BY => [
            Attribute::TRANSFORMED,
        ],
    ];
}
PK.3Y��m��[bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/IAmphtmlSizerResponsive.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Internal;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class IAmphtmlSizerResponsive.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $htmlFormat
 * @property-read bool $explicitAttrsOnly
 * @property-read array<string> $enabledBy
 */
final class IAmphtmlSizerResponsive extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'I-AMPHTML-SIZER-RESPONSIVE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Internal::SIZER,
        SpecRule::SPEC_NAME => 'I-AMPHTML-SIZER-RESPONSIVE',
        SpecRule::ATTRS => [
            Attribute::STYLE => [
                SpecRule::MANDATORY => true,
                SpecRule::DISALLOWED_VALUE_REGEX => '!\s*important',
                SpecRule::DISPATCH_KEY => 'NAME_DISPATCH',
                SpecRule::CSS_DECLARATION => [
                    [
                        SpecRule::NAME => Attribute::DISPLAY,
                        SpecRule::VALUE_CASEI => [
                            'block',
                        ],
                    ],
                    [
                        SpecRule::NAME => Attribute::PADDING_TOP,
                    ],
                ],
            ],
            Attribute::I_AMPHTML_DISABLE_AR => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::SLOT => [
                SpecRule::VALUE => [
                    'i-amphtml-svc',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXPLICIT_ATTRS_ONLY => true,
        SpecRule::ENABLED_BY => [
            Attribute::TRANSFORMED,
        ],
    ];
}
PK.3YɦfMMJbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Iframe.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Iframe.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read string $mandatoryAncestorSuggestedAlternative
 * @property-read array<string> $htmlFormat
 */
final class Iframe extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'IFRAME';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::IFRAME,
        SpecRule::ATTRS => [
            Attribute::FRAMEBORDER => [
                SpecRule::VALUE => [
                    '0',
                    '1',
                ],
            ],
            Attribute::HEIGHT => [],
            Attribute::REFERRERPOLICY => [],
            Attribute::RESIZABLE => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::SANDBOX => [],
            Attribute::SCROLLING => [
                SpecRule::VALUE => [
                    'auto',
                    'yes',
                    'no',
                ],
            ],
            Attribute::SRC => [
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::SRC,
                    Attribute::SRCDOC,
                ],
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::DATA,
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => false,
                ],
            ],
            Attribute::SRCDOC => [
                SpecRule::MANDATORY_ONEOF => [
                    Attribute::SRC,
                    Attribute::SRCDOC,
                ],
            ],
            Attribute::WIDTH => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NameAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-iframe/',
        SpecRule::MANDATORY_ANCESTOR => Element::NOSCRIPT,
        SpecRule::MANDATORY_ANCESTOR_SUGGESTED_ALTERNATIVE => Extension::IFRAME,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y��Yk
k
Ibunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Image.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Image.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Image extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'IMAGE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::IMAGE,
        SpecRule::ATTRS => [
            Attribute::EXTERNALRESOURCESREQUIRED => [],
            Attribute::HEIGHT => [],
            Attribute::PRESERVEASPECTRATIO => [],
            Attribute::TRANSFORM => [],
            Attribute::WIDTH => [],
            Attribute::X => [],
            Attribute::XLINK_ACTUATE => [],
            Attribute::XLINK_ARCROLE => [],
            Attribute::XLINK_HREF => [
                SpecRule::ALTERNATIVE_NAMES => [
                    Attribute::HREF,
                ],
                SpecRule::DISALLOWED_VALUE_REGEX => '(^|\s)data:image\/svg\+xml',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::DATA,
                        Protocol::HTTP,
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_EMPTY => false,
                ],
            ],
            Attribute::XLINK_ROLE => [],
            Attribute::XLINK_SHOW => [],
            Attribute::XLINK_TITLE => [],
            Attribute::XLINK_TYPE => [],
            Attribute::Y => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgConditionalProcessingAttributes::ID,
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Ym#�	��Tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ImageUsingSrcset.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class ImageUsingSrcset.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<string> $disallowedAncestor
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class ImageUsingSrcset extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'Image using srcset';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::IMAGE,
        SpecRule::SPEC_NAME => 'Image using srcset',
        SpecRule::ATTRS => [
            Attribute::DECODING => [
                SpecRule::VALUE_CASEI => [
                    'async',
                ],
            ],
            Attribute::SIZES => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ImgAttrs::ID,
            AttributeList\MandatorySrcOrSrcset::ID,
        ],
        SpecRule::DISALLOWED_ANCESTOR => [
            'AMP-IMG',
            'AMP-STORY',
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'img',
    ];
}
PK.3Y����

]bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ImgIAmphtmlIntrinsicSizer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Internal;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class ImgIAmphtmlIntrinsicSizer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $enabledBy
 */
final class ImgIAmphtmlIntrinsicSizer extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'IMG-I-AMPHTML-INTRINSIC-SIZER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::IMG,
        SpecRule::SPEC_NAME => 'IMG-I-AMPHTML-INTRINSIC-SIZER',
        SpecRule::MANDATORY_PARENT => Internal::SIZER_INTRINSIC,
        SpecRule::ATTRS => [
            Attribute::ALT => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::ARIA_HIDDEN => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'true',
                ],
            ],
            Attribute::CLASS_ => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'i-amphtml-intrinsic-sizer',
                ],
            ],
            Attribute::ROLE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'presentation',
                ],
            ],
            Attribute::SRC => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_REGEX => 'data:image\/svg\+xml;charset=utf-8,\s*<svg height="\d+(\.\d+)?" width="\d+(\.\d+)?" xmlns="http:\/\/www\.w3\.org\/2000\/svg" version="1\.1"\/>|data:image\/svg\+xml;charset=utf-8,\s*<svg height=\'\d+(\.\d+)?\' width=\'\d+(\.\d+)?\' xmlns=\'http:\/\/www\.w3\.org\/2000\/svg\' version=\'1\.1\'\/>|data:image\/svg\+xml;base64,[a-zA-Z0-9+\/=]+',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::ENABLED_BY => [
            Attribute::TRANSFORMED,
        ],
    ];
}
PK.3Y�g�}WWkbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ImgIAmphtmlIntrinsicSizerAmpStoryPlayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Internal;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class ImgIAmphtmlIntrinsicSizerAmpStoryPlayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $enabledBy
 */
final class ImgIAmphtmlIntrinsicSizerAmpStoryPlayer extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'img-i-amphtml-intrinsic-sizer-amp-story-player';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::IMG,
        SpecRule::SPEC_NAME => 'img-i-amphtml-intrinsic-sizer-amp-story-player',
        SpecRule::MANDATORY_PARENT => Internal::SIZER_INTRINSIC,
        SpecRule::ATTRS => [
            Attribute::ALT => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::ARIA_HIDDEN => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'true',
                ],
            ],
            Attribute::CLASS_ => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'i-amphtml-intrinsic-sizer',
                ],
            ],
            Attribute::ROLE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'presentation',
                ],
            ],
            Attribute::SRC => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_REGEX => 'data:image\/svg\+xml;charset=utf-8,\s*<svg height="\d+(\.\d+)?" width="\d+(\.\d+)?" xmlns="http:\/\/www\.w3\.org\/2000\/svg" version="1\.1"\/>|data:image\/svg\+xml;charset=utf-8,\s*<svg height=\'\d+(\.\d+)?\' width=\'\d+(\.\d+)?\' xmlns=\'http:\/\/www\.w3\.org\/2000\/svg\' version=\'1\.1\'\/>|data:image\/svg\+xml;base64,[a-zA-Z0-9+\/=]+',
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-story-player/',
        SpecRule::MANDATORY_ANCESTOR => Extension::STORY_PLAYER,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::ENABLED_BY => [
            Attribute::TRANSFORMED,
        ],
    ];
}
PK.3Y��L��Rbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ImgUsingSrcset.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class ImgUsingSrcset.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<string> $disallowedAncestor
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class ImgUsingSrcset extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'Img using srcset';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::IMG,
        SpecRule::SPEC_NAME => 'Img using srcset',
        SpecRule::ATTRS => [
            Attribute::DECODING => [
                SpecRule::VALUE_CASEI => [
                    'async',
                ],
            ],
            Attribute::SIZES => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ImgAttrs::ID,
            AttributeList\MandatorySrcOrSrcset::ID,
        ],
        SpecRule::DISALLOWED_ANCESTOR => [
            'AMP-IMG',
            'AMP-STORY',
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'img',
    ];
}
PK.3Y���aBBIbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Input.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Input.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 */
final class Input extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'INPUT';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::INPUT,
        SpecRule::ATTRS => [
            Attribute::NO_VERIFY => [
                SpecRule::VALUE => [
                    '',
                ],
                SpecRule::DISABLED_BY => [
                    Attribute::AMP4EMAIL,
                ],
            ],
            Attribute::TYPE => [
                SpecRule::DISALLOWED_VALUE_REGEX => '(^|\s)(file|image|password|)(\s|$)',
            ],
            '[type]' => [
                SpecRule::DISABLED_BY => [
                    Attribute::AMP4EMAIL,
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\InputCommonAttr::ID,
            AttributeList\NameAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-form/',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3YT�=�Wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputMaskCustomMask.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class InputMaskCustomMask.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class InputMaskCustomMask extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'input [mask] (custom mask)';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::INPUT,
        SpecRule::SPEC_NAME => 'input [mask] (custom mask)',
        SpecRule::ATTRS => [
            Attribute::MASK => [
                SpecRule::MANDATORY => true,
                SpecRule::DISALLOWED_VALUE_REGEX => '(payment-card|date-dd-mm-yyyy|date-mm-dd-yyyy|date-mm-yy|date-yyyy-mm-dd)',
                SpecRule::DISPATCH_KEY => 'NAME_DISPATCH',
            ],
            Attribute::MASK_TRIM_ZEROS => [
                SpecRule::VALUE_REGEX => '\d+',
            ],
            '[type]' => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\AmpInputmaskCommonAttr::ID,
            AttributeList\InputCommonAttr::ID,
            AttributeList\NameAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-inputmask/',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::INPUTMASK,
        ],
    ];
}
PK.3YTTzzYbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputMaskDateDdMmYyyy.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class InputMaskDateDdMmYyyy.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class InputMaskDateDdMmYyyy extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'input [mask=date-dd-mm-yyyy]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::INPUT,
        SpecRule::SPEC_NAME => 'input [mask=date-dd-mm-yyyy]',
        SpecRule::ATTRS => [
            Attribute::MASK => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'date-dd-mm-yyyy',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\AmpInputmaskCommonAttr::ID,
            AttributeList\InputCommonAttr::ID,
            AttributeList\NameAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-inputmask/',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::INPUTMASK,
        ],
    ];
}
PK.3Yʕ$�zzYbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputMaskDateMmDdYyyy.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class InputMaskDateMmDdYyyy.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class InputMaskDateMmDdYyyy extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'input [mask=date-mm-dd-yyyy]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::INPUT,
        SpecRule::SPEC_NAME => 'input [mask=date-mm-dd-yyyy]',
        SpecRule::ATTRS => [
            Attribute::MASK => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'date-mm-dd-yyyy',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\AmpInputmaskCommonAttr::ID,
            AttributeList\InputCommonAttr::ID,
            AttributeList\NameAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-inputmask/',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::INPUTMASK,
        ],
    ];
}
PK.3YZV��ccUbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputMaskDateMmYy.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class InputMaskDateMmYy.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class InputMaskDateMmYy extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'input [mask=date-mm-yy]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::INPUT,
        SpecRule::SPEC_NAME => 'input [mask=date-mm-yy]',
        SpecRule::ATTRS => [
            Attribute::MASK => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'date-mm-yy',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\AmpInputmaskCommonAttr::ID,
            AttributeList\InputCommonAttr::ID,
            AttributeList\NameAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-inputmask/',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::INPUTMASK,
        ],
    ];
}
PK.3Yn�zzYbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputMaskDateYyyyMmDd.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class InputMaskDateYyyyMmDd.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class InputMaskDateYyyyMmDd extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'input [mask=date-yyyy-mm-dd]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::INPUT,
        SpecRule::SPEC_NAME => 'input [mask=date-yyyy-mm-dd]',
        SpecRule::ATTRS => [
            Attribute::MASK => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'date-yyyy-mm-dd',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\AmpInputmaskCommonAttr::ID,
            AttributeList\InputCommonAttr::ID,
            AttributeList\NameAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-inputmask/',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::INPUTMASK,
        ],
    ];
}
PK.3Y6[JooXbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputMaskPaymentCard.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class InputMaskPaymentCard.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class InputMaskPaymentCard extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'input [mask=payment-card]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::INPUT,
        SpecRule::SPEC_NAME => 'input [mask=payment-card]',
        SpecRule::ATTRS => [
            Attribute::MASK => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'payment-card',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\AmpInputmaskCommonAttr::ID,
            AttributeList\InputCommonAttr::ID,
            AttributeList\NameAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-inputmask/',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::INPUTMASK,
        ],
    ];
}
PK.3Yu\y�<	<	Qbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputTypeFile.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class InputTypeFile.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class InputTypeFile extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'INPUT [type=file]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::INPUT,
        SpecRule::SPEC_NAME => 'INPUT [type=file]',
        SpecRule::ATTRS => [
            Attribute::CAPTURE => [
                SpecRule::VALUE => [
                    '',
                ],
                SpecRule::DISABLED_BY => [
                    Attribute::AMP4EMAIL,
                ],
            ],
            Attribute::NO_VERIFY => [
                SpecRule::VALUE => [
                    '',
                ],
                SpecRule::DISABLED_BY => [
                    Attribute::AMP4EMAIL,
                ],
            ],
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'file',
                ],
            ],
            '[type]' => [
                SpecRule::DISABLED_BY => [
                    Attribute::AMP4EMAIL,
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\InputCommonAttr::ID,
            AttributeList\NameAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-form/',
        SpecRule::MANDATORY_ANCESTOR => 'FORM [method=POST]',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y�\�!	!	Rbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputTypeImage.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class InputTypeImage.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class InputTypeImage extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'INPUT [type=image]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::INPUT,
        SpecRule::SPEC_NAME => 'INPUT [type=image]',
        SpecRule::ATTRS => [
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'image',
                ],
            ],
            '[type]' => [
                SpecRule::DISABLED_BY => [
                    Attribute::AMP4EMAIL,
                ],
            ],
            Attribute::SRC => [
                SpecRule::MANDATORY => true,
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::DATA,
                        Protocol::HTTP,
                        Protocol::HTTPS,
                    ],
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\InputCommonAttr::ID,
            AttributeList\NameAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-form/',
        SpecRule::MANDATORY_ANCESTOR => 'FORM [method=POST]',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y��8xxUbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputTypePassword.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class InputTypePassword.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class InputTypePassword extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'INPUT [type=password]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::INPUT,
        SpecRule::SPEC_NAME => 'INPUT [type=password]',
        SpecRule::ATTRS => [
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'password',
                ],
            ],
            '[type]' => [
                SpecRule::DISABLED_BY => [
                    Attribute::AMP4EMAIL,
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\InputCommonAttr::ID,
            AttributeList\NameAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-form/',
        SpecRule::MANDATORY_ANCESTOR => 'FORM [method=POST]',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y���1��Gbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Ins.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Ins.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 */
final class Ins extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'INS';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::INS,
        SpecRule::ATTRS => [
            Attribute::DATETIME => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\CiteAttr::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Ym�5�zzGbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Kbd.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Kbd.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Kbd extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'KBD';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::KBD,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y�dm��Ibunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Label.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Label.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 */
final class Label extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'LABEL';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::LABEL,
        SpecRule::ATTRS => [
            Attribute::FOR_ => [],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-form/',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y�P|��Jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Legend.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Legend.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Legend extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'LEGEND';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::LEGEND,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Yx�y�OOFbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Li.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Li.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array<string>> $attrs
 * @property-read array<string> $htmlFormat
 */
final class Li extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'LI';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::LI,
        SpecRule::ATTRS => [
            Attribute::VALUE => [
                SpecRule::VALUE_REGEX => '[0-9]*',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3YI��''Hbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Line.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Line.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Line extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'LINE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::LINE,
        SpecRule::ATTRS => [
            Attribute::EXTERNALRESOURCESREQUIRED => [],
            Attribute::SKETCH_TYPE => [],
            Attribute::TRANSFORM => [],
            Attribute::X1 => [],
            Attribute::X2 => [],
            Attribute::Y1 => [],
            Attribute::Y2 => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgConditionalProcessingAttributes::ID,
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Yo�<ttRbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Lineargradient.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Lineargradient.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Lineargradient extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'LINEARGRADIENT';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::LINEARGRADIENT,
        SpecRule::ATTRS => [
            Attribute::EXTERNALRESOURCESREQUIRED => [],
            Attribute::GRADIENTTRANSFORM => [],
            Attribute::GRADIENTUNITS => [],
            Attribute::SPREADMETHOD => [],
            Attribute::X1 => [],
            Attribute::X2 => [],
            Attribute::Y1 => [],
            Attribute::Y2 => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
            AttributeList\SvgXlinkAttributes::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y��)yyVbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/LineargradientStop.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class LineargradientStop.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class LineargradientStop extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'lineargradient > stop';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::STOP,
        SpecRule::SPEC_NAME => 'lineargradient > stop',
        SpecRule::ATTRS => [
            Attribute::OFFSET => [],
            Attribute::STOP_COLOR => [],
            Attribute::STOP_OPACITY => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::LINEARGRADIENT,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y��\��Pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkItemprop.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class LinkItemprop.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array<bool>> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class LinkItemprop extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'link itemprop=';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::LINK,
        SpecRule::SPEC_NAME => 'link itemprop=',
        SpecRule::ATTRS => [
            Attribute::HREF => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::ITEMPROP => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonLinkAttrs::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'link itemprop=',
    ];
}
PK.3Y��~VVVVbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkItempropSameas.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class LinkItempropSameas.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class LinkItempropSameas extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'link itemprop=sameAs';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::LINK,
        SpecRule::SPEC_NAME => 'link itemprop=sameAs',
        SpecRule::ATTRS => [
            Attribute::HREF => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::ITEMPROP => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'sameas',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonLinkAttrs::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'link itemprop=sameAs',
    ];
}
PK.3Y��0��Pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkProperty.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class LinkProperty.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array<bool>> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class LinkProperty extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'link property=';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::LINK,
        SpecRule::SPEC_NAME => 'link property=',
        SpecRule::ATTRS => [
            Attribute::HREF => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::PROPERTY => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonLinkAttrs::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'link property=',
    ];
}
PK.3Y7v?]Kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkRel.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class LinkRel.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<string> $disallowedAncestor
 * @property-read array<string> $htmlFormat
 */
final class LinkRel extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'link rel=';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::LINK,
        SpecRule::SPEC_NAME => 'link rel=',
        SpecRule::ATTRS => [
            Attribute::HREF => [],
            Attribute::REL => [
                SpecRule::MANDATORY => true,
                SpecRule::DISALLOWED_VALUE_REGEX => '(^|\s)(canonical|components|import|manifest|modulepreload|preload|serviceworker|stylesheet|subresource)(\s|$)',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonLinkAttrs::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
        SpecRule::DISALLOWED_ANCESTOR => [
            'TEMPLATE',
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y�Ҙ�U	U	Tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkRelCanonical.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class LinkRelCanonical.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $mandatory
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class LinkRelCanonical extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'link rel=canonical';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::LINK,
        SpecRule::SPEC_NAME => 'link rel=canonical',
        SpecRule::MANDATORY => true,
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::HREF => [
                SpecRule::MANDATORY => true,
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTP,
                        Protocol::HTTPS,
                    ],
                ],
            ],
            Attribute::REL => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'canonical',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonLinkAttrs::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'link rel=canonical',
    ];
}
PK.3Y�h�b7	7	Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkRelManifest.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class LinkRelManifest.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $descriptiveName
 */
final class LinkRelManifest extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'link rel=manifest';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::LINK,
        SpecRule::SPEC_NAME => 'link rel=manifest',
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::HREF => [
                SpecRule::MANDATORY => true,
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                ],
            ],
            Attribute::REL => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'manifest',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonLinkAttrs::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::SATISFIES => [
            'amp-app-banner data source',
        ],
        SpecRule::DESCRIPTIVE_NAME => 'link rel=manifest',
    ];
}
PK.3Y�`\(��Xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkRelModulepreload.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class LinkRelModulepreload.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class LinkRelModulepreload extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'link rel=modulepreload';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::LINK,
        SpecRule::SPEC_NAME => 'link rel=modulepreload',
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::AS_ => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'script',
                ],
            ],
            Attribute::CROSSORIGIN => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'anonymous',
                ],
            ],
            Attribute::HREF => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_REGEX => '.*\.mjs$',
            ],
            Attribute::REL => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'modulepreload',
                ],
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'link rel=modulepreload',
    ];
}
PK.3Y@Y<]C	C	Rbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkRelPreload.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class LinkRelPreload.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<string> $disallowedAncestor
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class LinkRelPreload extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'link rel=preload';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::LINK,
        SpecRule::SPEC_NAME => 'link rel=preload',
        SpecRule::ATTRS => [
            Attribute::AS_ => [],
            Attribute::HREF => [],
            Attribute::REL => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'preload',
                ],
            ],
            Attribute::IMAGESRCSET => [
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTP,
                        Protocol::HTTPS,
                    ],
                ],
            ],
            Attribute::IMAGESIZES => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonLinkAttrs::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
        SpecRule::DISALLOWED_ANCESTOR => [
            'TEMPLATE',
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'link rel=preload',
    ];
}
PK.3Yyi
i
ebunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkRelStylesheetForAmpStory10Css.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class LinkRelStylesheetForAmpStory10Css.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $enabledBy
 * @property-read string $descriptiveName
 */
final class LinkRelStylesheetForAmpStory10Css extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'link rel=stylesheet for amp-story-1.0 css';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::LINK,
        SpecRule::SPEC_NAME => 'link rel=stylesheet for amp-story-1.0 css',
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::CROSSORIGIN => [],
            Attribute::HREF => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'https://cdn.ampproject.org/v0/amp-story-1.0.css',
                    'https://cdn.ampproject.org/lts/v0/amp-story-1.0.css',
                ],
            ],
            Attribute::INTEGRITY => [],
            Attribute::MEDIA => [],
            Attribute::REL => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'stylesheet',
                ],
            ],
            Attribute::TYPE => [
                SpecRule::VALUE_CASEI => [
                    'text/css',
                ],
            ],
            Attribute::AMP_EXTENSION => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_CASEI => [
                    'amp-story',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::ENABLED_BY => [
            Attribute::TRANSFORMED,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'link rel=stylesheet for amp-story-1.0 css',
    ];
}
PK.3Y���]bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkRelStylesheetForFonts.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class LinkRelStylesheetForFonts.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 * @property-read string $namedId
 * @property-read string $descriptiveName
 */
final class LinkRelStylesheetForFonts extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'link rel=stylesheet for fonts';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::LINK,
        SpecRule::SPEC_NAME => 'link rel=stylesheet for fonts',
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::ASYNC => [],
            Attribute::CROSSORIGIN => [],
            Attribute::HREF => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_REGEX => 'https://cdn\.materialdesignicons\.com/([0-9]+\.?)+/css/materialdesignicons\.min\.css|https://cloud\.typography\.com/[0-9]*/[0-9]*/css/fonts\.css|https://fast\.fonts\.net/.*|https://fonts\.googleapis\.com/css2?\?.*|https://fonts\.googleapis\.com/icon\?.*|https://fonts\.googleapis\.com/earlyaccess/.*\.css|https://maxcdn\.bootstrapcdn\.com/font-awesome/([0-9]+\.?)+/css/font-awesome\.min\.css(\?.*)?|https://(use|pro|kit)\.fontawesome\.com/releases/v([0-9]+\.?)+/css/[0-9a-zA-Z-]+\.css|https://(use|pro|kit)\.fontawesome\.com/[0-9a-zA-Z-]+\.css|https://use\.typekit\.net/[\w\p{L}\p{N}_]+\.css',
            ],
            Attribute::INTEGRITY => [],
            Attribute::MEDIA => [],
            Attribute::REL => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'stylesheet',
                ],
            ],
            Attribute::TYPE => [
                SpecRule::VALUE_CASEI => [
                    'text/css',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#custom-fonts',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::NAMED_ID => 'LINK_FONT_STYLESHEET',
        SpecRule::DESCRIPTIVE_NAME => 'link rel=stylesheet for fonts',
    ];
}
PK.3Y���<NNKbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Listing.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Listing.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Listing extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'LISTING';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::LISTING,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y]N�~~Hbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Main.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Main.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Main extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'MAIN';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::MAIN,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y��~~Hbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Mark.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Mark.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Mark extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'MARK';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::MARK,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3YҬ7>��Jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Marker.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Marker.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Marker extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'MARKER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::MARKER,
        SpecRule::ATTRS => [
            Attribute::EXTERNALRESOURCESREQUIRED => [],
            Attribute::MARKERHEIGHT => [],
            Attribute::MARKERUNITS => [],
            Attribute::MARKERWIDTH => [],
            Attribute::ORIENT => [],
            Attribute::PRESERVEASPECTRATIO => [],
            Attribute::REFX => [],
            Attribute::REFY => [],
            Attribute::TRANSFORM => [],
            Attribute::VIEWBOX => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y�!�11Hbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Mask.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Mask.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Mask extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'MASK';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::MASK,
        SpecRule::ATTRS => [
            Attribute::EXTERNALRESOURCESREQUIRED => [],
            Attribute::HEIGHT => [],
            Attribute::MASKCONTENTUNITS => [],
            Attribute::MASKUNITS => [],
            Attribute::WIDTH => [],
            Attribute::X => [],
            Attribute::Y => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgConditionalProcessingAttributes::ID,
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3YKaLDDSbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaCharsetUtf8.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class MetaCharsetUtf8.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $mandatory
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class MetaCharsetUtf8 extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'meta charset=utf-8';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::META,
        SpecRule::SPEC_NAME => 'meta charset=utf-8',
        SpecRule::MANDATORY => true,
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::CHARSET => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'utf-8',
                ],
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'meta charset=utf-8',
    ];
}
PK.3YG���AALbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Metadata.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Metadata.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Metadata extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'METADATA';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::METADATA,
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y��`bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivContentLanguage.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class MetaHttpEquivContentLanguage.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class MetaHttpEquivContentLanguage extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'meta http-equiv=content-language';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::META,
        SpecRule::SPEC_NAME => 'meta http-equiv=content-language',
        SpecRule::ATTRS => [
            Attribute::CONTENT => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::HTTP_EQUIV => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'content-language',
                ],
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
        SpecRule::MANDATORY_ANCESTOR => Element::HEAD,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3YZh�QQbbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivContentScriptType.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class MetaHttpEquivContentScriptType.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array> $attrs
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class MetaHttpEquivContentScriptType extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'meta http-equiv=Content-Script-Type';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::META,
        SpecRule::SPEC_NAME => 'meta http-equiv=Content-Script-Type',
        SpecRule::ATTRS => [
            Attribute::CONTENT => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_CASEI => [
                    'text/javascript',
                ],
            ],
            Attribute::HTTP_EQUIV => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'content-script-type',
                ],
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
        SpecRule::MANDATORY_ANCESTOR => Element::HEAD,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y�T�hEEabunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivContentStyleType.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class MetaHttpEquivContentStyleType.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array> $attrs
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class MetaHttpEquivContentStyleType extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'meta http-equiv=Content-Style-Type';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::META,
        SpecRule::SPEC_NAME => 'meta http-equiv=Content-Style-Type',
        SpecRule::ATTRS => [
            Attribute::CONTENT => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_CASEI => [
                    'text/css',
                ],
            ],
            Attribute::HTTP_EQUIV => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'content-style-type',
                ],
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
        SpecRule::MANDATORY_ANCESTOR => Element::HEAD,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y���R99\bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivContentType.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class MetaHttpEquivContentType.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array> $attrs
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class MetaHttpEquivContentType extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'meta http-equiv=Content-Type';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::META,
        SpecRule::SPEC_NAME => 'meta http-equiv=Content-Type',
        SpecRule::ATTRS => [
            Attribute::CONTENT => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_CASEI => [
                    'text/html; charset=utf-8',
                ],
            ],
            Attribute::HTTP_EQUIV => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'content-type',
                ],
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
        SpecRule::MANDATORY_ANCESTOR => Element::HEAD,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3YoWZu��]bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivImagetoolbar.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class MetaHttpEquivImagetoolbar.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class MetaHttpEquivImagetoolbar extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'meta http-equiv=imagetoolbar';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::META,
        SpecRule::SPEC_NAME => 'meta http-equiv=imagetoolbar',
        SpecRule::ATTRS => [
            Attribute::CONTENT => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::HTTP_EQUIV => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'imagetoolbar',
                ],
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
        SpecRule::MANDATORY_ANCESTOR => Element::HEAD,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Yw�t���\bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivOriginTrial.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class MetaHttpEquivOriginTrial.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class MetaHttpEquivOriginTrial extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'meta http-equiv=origin-trial';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::META,
        SpecRule::SPEC_NAME => 'meta http-equiv=origin-trial',
        SpecRule::ATTRS => [
            Attribute::CONTENT => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::HTTP_EQUIV => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'origin-trial',
                ],
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
        SpecRule::MANDATORY_ANCESTOR => Element::HEAD,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3YL
,��Zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivPicsLabel.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class MetaHttpEquivPicsLabel.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class MetaHttpEquivPicsLabel extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'meta http-equiv=pics-label';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::META,
        SpecRule::SPEC_NAME => 'meta http-equiv=pics-label',
        SpecRule::ATTRS => [
            Attribute::CONTENT => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::HTTP_EQUIV => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'pics-label',
                ],
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
        SpecRule::MANDATORY_ANCESTOR => Element::HEAD,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Yh�#���]bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivResourceType.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class MetaHttpEquivResourceType.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class MetaHttpEquivResourceType extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'meta http-equiv=resource-type';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::META,
        SpecRule::SPEC_NAME => 'meta http-equiv=resource-type',
        SpecRule::ATTRS => [
            Attribute::CONTENT => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::HTTP_EQUIV => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'resource-type',
                ],
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
        SpecRule::MANDATORY_ANCESTOR => Element::HEAD,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3YoglOOdbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivXDnsPrefetchControl.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class MetaHttpEquivXDnsPrefetchControl.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array> $attrs
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class MetaHttpEquivXDnsPrefetchControl extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'meta http-equiv=x-dns-prefetch-control';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::META,
        SpecRule::SPEC_NAME => 'meta http-equiv=x-dns-prefetch-control',
        SpecRule::ATTRS => [
            Attribute::CONTENT => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_CASEI => [
                    'off',
                    'on',
                ],
            ],
            Attribute::HTTP_EQUIV => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'x-dns-prefetch-control',
                ],
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
        SpecRule::MANDATORY_ANCESTOR => Element::HEAD,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y��		^bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivXUaCompatible.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class MetaHttpEquivXUaCompatible.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array> $attrs
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class MetaHttpEquivXUaCompatible extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'meta http-equiv=X-UA-Compatible';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::META,
        SpecRule::SPEC_NAME => 'meta http-equiv=X-UA-Compatible',
        SpecRule::ATTRS => [
            Attribute::CONTENT => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_PROPERTIES => [
                    SpecRule::PROPERTIES => [
                        [
                            SpecRule::NAME => 'ie',
                            SpecRule::VALUE => 'edge',
                        ],
                        [
                            SpecRule::NAME => 'chrome',
                            SpecRule::VALUE => '1',
                        ],
                    ],
                ],
            ],
            Attribute::HTTP_EQUIV => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'x-ua-compatible',
                ],
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
        SpecRule::MANDATORY_ANCESTOR => Element::HEAD,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'meta http-equiv=X-UA-Compatible',
    ];
}
PK.3Yă�DDZbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmp3pIframeSrc.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class MetaNameAmp3pIframeSrc.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 */
final class MetaNameAmp3pIframeSrc extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'meta name=amp-3p-iframe-src';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::META,
        SpecRule::SPEC_NAME => 'meta name=amp-3p-iframe-src',
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::CONTENT => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                ],
            ],
            Attribute::NAME => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'amp-3p-iframe-src',
                ],
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-ad/',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y?�q��Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmp4adsId.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class MetaNameAmp4adsId.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array $attrs
 * @property-read array<string> $htmlFormat
 */
final class MetaNameAmp4adsId extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'meta name=amp4ads-id';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::META,
        SpecRule::SPEC_NAME => 'meta name=amp4ads-id',
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::CONTENT => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::NAME => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'amp4ads-id',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y�@��Wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmp4adsVars.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class MetaNameAmp4adsVars.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array $attrs
 * @property-read array<string> $htmlFormat
 */
final class MetaNameAmp4adsVars extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'meta name=amp4ads-vars-*';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::META,
        SpecRule::SPEC_NAME => 'meta name=amp4ads-vars-*',
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::CONTENT => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::NAME => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_REGEX => 'amp4ads-vars-.+',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y���-��_bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpAdDoubleclickSra.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class MetaNameAmpAdDoubleclickSra.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $htmlFormat
 */
final class MetaNameAmpAdDoubleclickSra extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'meta name=amp-ad-doubleclick-sra';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::META,
        SpecRule::SPEC_NAME => 'meta name=amp-ad-doubleclick-sra',
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::NAME => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'amp-ad-doubleclick-sra',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y�b�==^bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpAdEnableRefresh.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class MetaNameAmpAdEnableRefresh.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class MetaNameAmpAdEnableRefresh extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'meta name=amp-ad-enable-refresh';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::META,
        SpecRule::SPEC_NAME => 'meta name=amp-ad-enable-refresh',
        SpecRule::ATTRS => [
            Attribute::CONTENT => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::NAME => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'amp-ad-enable-refresh',
                ],
            ],
        ],
        SpecRule::MANDATORY_ANCESTOR => Element::HEAD,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3YiA�T��^bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpConsentBlocking.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class MetaNameAmpConsentBlocking.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array $attrs
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 */
final class MetaNameAmpConsentBlocking extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'meta name=amp-consent-blocking';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::META,
        SpecRule::SPEC_NAME => 'meta name=amp-consent-blocking',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::CONTENT => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::NAME => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'amp-consent-blocking',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'meta name=amp-consent-blocking',
        ],
    ];
}
PK.3Y;� Oabunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpCtaLandingPageType.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class MetaNameAmpCtaLandingPageType.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $htmlFormat
 */
final class MetaNameAmpCtaLandingPageType extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'meta name=amp-cta-landing-page-type';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::META,
        SpecRule::SPEC_NAME => 'meta name=amp-cta-landing-page-type',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::CONTENT => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_CASEI => [
                    'amp',
                    'nonamp',
                    'story',
                ],
            ],
            Attribute::NAME => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'amp-cta-landing-page-type',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y�}N�66Vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpCtaType.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class MetaNameAmpCtaType.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array $attrs
 * @property-read array<string> $htmlFormat
 */
final class MetaNameAmpCtaType extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'meta name=amp-cta-type';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::META,
        SpecRule::SPEC_NAME => 'meta name=amp-cta-type',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::CONTENT => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::NAME => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'amp-cta-type',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y=&٩11Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpCtaUrl.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class MetaNameAmpCtaUrl.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array $attrs
 * @property-read array<string> $htmlFormat
 */
final class MetaNameAmpCtaUrl extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'meta name=amp-cta-url';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::META,
        SpecRule::SPEC_NAME => 'meta name=amp-cta-url',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::CONTENT => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::NAME => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'amp-cta-url',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4ADS,
        ],
    ];
}
PK.3YX7��>>_bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpExperimentsOptIn.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class MetaNameAmpExperimentsOptIn.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array $attrs
 * @property-read array<string> $htmlFormat
 */
final class MetaNameAmpExperimentsOptIn extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'meta name=amp-experiments-opt-in';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::META,
        SpecRule::SPEC_NAME => 'meta name=amp-experiments-opt-in',
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::CONTENT => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::NAME => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'amp-experiments-opt-in',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y���^bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpExperimentToken.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class MetaNameAmpExperimentToken.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array $attrs
 * @property-read array<string> $htmlFormat
 */
final class MetaNameAmpExperimentToken extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'meta name=amp-experiment-token';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::META,
        SpecRule::SPEC_NAME => 'meta name=amp-experiment-token',
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::CONTENT => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::NAME => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'amp-experiment-token',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y�n��11bbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpGoogleClientidIdApi.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class MetaNameAmpGoogleClientidIdApi.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array $attrs
 * @property-read array<string> $htmlFormat
 */
final class MetaNameAmpGoogleClientidIdApi extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'meta name=amp-google-clientid-id-api';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::META,
        SpecRule::SPEC_NAME => 'meta name=amp-google-clientid-id-api',
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::CONTENT => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::NAME => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'amp-google-client-id-api',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y����QQhbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpLinkVariableAllowedOrigin.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class MetaNameAmpLinkVariableAllowedOrigin.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array $attrs
 * @property-read array<string> $htmlFormat
 */
final class MetaNameAmpLinkVariableAllowedOrigin extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'meta name=amp-link-variable-allowed-origin';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::META,
        SpecRule::SPEC_NAME => 'meta name=amp-link-variable-allowed-origin',
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::CONTENT => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::NAME => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'amp-link-variable-allowed-origin',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y�@0�

[bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpListLoadMore.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class MetaNameAmpListLoadMore.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array $attrs
 * @property-read array<string> $htmlFormat
 */
final class MetaNameAmpListLoadMore extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'meta name=amp-list-load-more';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::META,
        SpecRule::SPEC_NAME => 'meta name=amp-list-load-more',
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::CONTENT => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::NAME => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'amp-list-load-more',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y��/]bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpRecaptchaInput.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class MetaNameAmpRecaptchaInput.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array $attrs
 * @property-read array<string> $htmlFormat
 */
final class MetaNameAmpRecaptchaInput extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'meta name=amp-recaptcha-input';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::META,
        SpecRule::SPEC_NAME => 'meta name=amp-recaptcha-input',
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::CONTENT => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::NAME => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'amp-recaptcha-input',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y�G���Xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpScriptSrc.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class MetaNameAmpScriptSrc.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array $attrs
 * @property-read array<string> $htmlFormat
 */
final class MetaNameAmpScriptSrc extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'meta name=amp-script-src';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::META,
        SpecRule::SPEC_NAME => 'meta name=amp-script-src',
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::CONTENT => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::NAME => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'amp-script-src',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y�4�i++abunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpStoryGeneratorName.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class MetaNameAmpStoryGeneratorName.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array $attrs
 * @property-read array<string> $htmlFormat
 */
final class MetaNameAmpStoryGeneratorName extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'meta name=amp-story-generator-name';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::META,
        SpecRule::SPEC_NAME => 'meta name=amp-story-generator-name',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::CONTENT => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::NAME => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_CASEI => [
                    'amp-story-generator-name',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y�.*�::dbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpStoryGeneratorVersion.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class MetaNameAmpStoryGeneratorVersion.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array $attrs
 * @property-read array<string> $htmlFormat
 */
final class MetaNameAmpStoryGeneratorVersion extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'meta name=amp-story-generator-version';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::META,
        SpecRule::SPEC_NAME => 'meta name=amp-story-generator-version',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::CONTENT => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::NAME => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_CASEI => [
                    'amp-story-generator-version',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y�Σ�]]^bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpToAmpNavigation.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class MetaNameAmpToAmpNavigation.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array $attrs
 * @property-read array<string> $htmlFormat
 */
final class MetaNameAmpToAmpNavigation extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'meta name=amp-to-amp-navigation';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::META,
        SpecRule::SPEC_NAME => 'meta name=amp-to-amp-navigation',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::CONTENT => [
                SpecRule::MANDATORY => true,
            ],
            Attribute::NAME => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'amp-to-amp-navigation',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y35�}��Vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAndContent.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class MetaNameAndContent.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $htmlFormat
 */
final class MetaNameAndContent extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'meta name= and content=';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::META,
        SpecRule::SPEC_NAME => 'meta name= and content=',
        SpecRule::ATTRS => [
            Attribute::CONTENT => [],
            Attribute::ITEMPROP => [],
            Attribute::NAME => [
                SpecRule::DISALLOWED_VALUE_REGEX => '(^|\s)(amp-.*|amp4ads-.*|apple-itunes-app|content-disposition|revisit-after|viewport)(\s|$)',
            ],
            Attribute::MEDIA => [],
            Attribute::PROPERTY => [],
            Attribute::SCHEME => [],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y�7�vvZbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAppleItunesApp.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class MetaNameAppleItunesApp.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 */
final class MetaNameAppleItunesApp extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'meta name=apple-itunes-app';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::META,
        SpecRule::SPEC_NAME => 'meta name=apple-itunes-app',
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::CONTENT => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_REGEX => '.*app-id=.*',
            ],
            Attribute::NAME => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'apple-itunes-app',
                ],
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#html-tags',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::SATISFIES => [
            'amp-app-banner data source',
        ],
    ];
}
PK.3Yx8�iTbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameViewport.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class MetaNameViewport.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $mandatory
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class MetaNameViewport extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'meta name=viewport';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::META,
        SpecRule::SPEC_NAME => 'meta name=viewport',
        SpecRule::MANDATORY => true,
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::CONTENT => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_PROPERTIES => [
                    SpecRule::PROPERTIES => [
                        [
                            SpecRule::NAME => 'width',
                            SpecRule::MANDATORY => true,
                            SpecRule::VALUE => 'device-width',
                        ],
                        [
                            SpecRule::NAME => 'height',
                        ],
                        [
                            SpecRule::NAME => 'initial-scale',
                        ],
                        [
                            SpecRule::NAME => 'minimum-scale',
                        ],
                        [
                            SpecRule::NAME => 'maximum-scale',
                        ],
                        [
                            SpecRule::NAME => 'shrink-to-fit',
                        ],
                        [
                            SpecRule::NAME => 'user-scalable',
                        ],
                        [
                            SpecRule::NAME => 'viewport-fit',
                        ],
                    ],
                ],
            ],
            Attribute::NAME => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'viewport',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#required-markup',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'meta name=viewport',
    ];
}
PK.3Y2f����Ibunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Meter.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Meter.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $htmlFormat
 */
final class Meter extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'METER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::METER,
        SpecRule::ATTRS => [
            Attribute::HIGH => [],
            Attribute::LOW => [],
            Attribute::MAX => [],
            Attribute::MIN => [],
            Attribute::OPTIMUM => [],
            Attribute::VALUE => [],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y���RRLbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Multicol.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Multicol.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Multicol extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'MULTICOL';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::MULTICOL,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y�X�{zzGbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Nav.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Nav.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Nav extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'NAV';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::NAV,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y��JJJbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Nextid.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Nextid.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Nextid extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'NEXTID';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::NEXTID,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y���BBHbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Nobr.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Nobr.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Nobr extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'NOBR';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::NOBR,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Yu�J77Lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Noscript.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Noscript.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $disallowedAncestor
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Noscript extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'NOSCRIPT';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::NOSCRIPT,
        SpecRule::DISALLOWED_ANCESTOR => [
            'NOSCRIPT',
        ],
        SpecRule::MANDATORY_ANCESTOR => Element::BODY,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Yy�R	��dbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/NoscriptEnclosureForAmpStyleTags.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class NoscriptEnclosureForAmpStyleTags.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read string $specUrl
 * @property-read array $childTags
 * @property-read array<string> $htmlFormat
 */
final class NoscriptEnclosureForAmpStyleTags extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'noscript enclosure for amp style tags';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::NOSCRIPT,
        SpecRule::SPEC_NAME => 'noscript enclosure for amp style tags',
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amp-boilerplate/?format=websites',
        SpecRule::CHILD_TAGS => [
            SpecRule::CHILD_TAG_NAME_ONEOF => [
                'STYLE',
            ],
            SpecRule::MANDATORY_MIN_NUM_CHILD_TAGS => 1,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y��"mObunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/NoscriptImg.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class NoscriptImg.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read string $mandatoryAncestorSuggestedAlternative
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class NoscriptImg extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'noscript > img';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::IMG,
        SpecRule::SPEC_NAME => 'noscript > img',
        SpecRule::ATTRS => [
            Attribute::ATTRIBUTION => [],
            Attribute::DECODING => [
                SpecRule::VALUE_CASEI => [
                    'async',
                    'auto',
                    'sync',
                ],
            ],
            Attribute::INTRINSICSIZE => [],
            Attribute::SIZES => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ImgAttrs::ID,
            AttributeList\MandatorySrcOrSrcset::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-img/',
        SpecRule::MANDATORY_ANCESTOR => Element::NOSCRIPT,
        SpecRule::MANDATORY_ANCESTOR_SUGGESTED_ALTERNATIVE => Extension::IMG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'img',
    ];
}
PK.3Y��G�	�	_bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/NoscriptStyleAmpBoilerplate.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class NoscriptStyleAmpBoilerplate.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array $cdata
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $descriptiveName
 */
final class NoscriptStyleAmpBoilerplate extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'noscript > style[amp-boilerplate]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::STYLE,
        SpecRule::SPEC_NAME => 'noscript > style[amp-boilerplate]',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::NOSCRIPT,
        SpecRule::ATTRS => [
            Attribute::AMP_BOILERPLATE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    '',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_PARENT_DISPATCH',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amp-boilerplate/?format=websites',
        SpecRule::CDATA => [
            SpecRule::CDATA_REGEX => '\s*body\s*{\s*-webkit-animation:\s*none;\s*-moz-animation:\s*none;\s*-ms-animation:\s*none;\s*animation:\s*none;?\s*}\s*',
            SpecRule::DOC_CSS_BYTES => false,
        ],
        SpecRule::MANDATORY_ANCESTOR => Element::HEAD,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'noscript > style[amp-boilerplate]',
        ],
        SpecRule::DESCRIPTIVE_NAME => 'noscript > style[amp-boilerplate]',
    ];
}
PK.3Y�%��((Fbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Ol.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Ol.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $htmlFormat
 */
final class Ol extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'OL';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::OL,
        SpecRule::ATTRS => [
            Attribute::REVERSED => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::START => [
                SpecRule::VALUE_REGEX => '[0-9]*',
            ],
            Attribute::TYPE => [
                SpecRule::VALUE_REGEX => '[1AaIi]',
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3YK}<<Fbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/OP.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class OP.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class OP extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'O:P';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::O_P,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y2�MZZLbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Optgroup.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Optgroup.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 */
final class Optgroup extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'OPTGROUP';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::OPTGROUP,
        SpecRule::MANDATORY_PARENT => Element::SELECT,
        SpecRule::ATTRS => [
            Attribute::DISABLED => [],
            Attribute::LABEL => [],
            '[disabled]' => [],
            '[label]' => [],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-form/',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y9�RyyJbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Option.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Option.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 */
final class Option extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'OPTION';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::OPTION,
        SpecRule::ATTRS => [
            Attribute::DISABLED => [],
            Attribute::LABEL => [],
            Attribute::SELECTED => [],
            Attribute::VALUE => [],
            '[disabled]' => [],
            '[label]' => [],
            '[selected]' => [],
            '[value]' => [],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-form/',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Yo
m@��Jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Output.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Output.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 */
final class Output extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'OUTPUT';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::OUTPUT,
        SpecRule::ATTRS => [
            Attribute::FOR_ => [],
            Attribute::FORM => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NameAttr::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y���EEbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/P.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class P.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $htmlFormat
 */
final class P extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'P';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::P,
        SpecRule::ATTRS => [
            Attribute::ALIGN => [],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y�<I��Hbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Path.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Path.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Path extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'PATH';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::PATH,
        SpecRule::ATTRS => [
            Attribute::D => [],
            Attribute::EXTERNALRESOURCESREQUIRED => [],
            Attribute::PATHLENGTH => [],
            Attribute::SKETCH_TYPE => [],
            Attribute::TRANSFORM => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgConditionalProcessingAttributes::ID,
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Ys2*Z��Kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Pattern.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Pattern.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Pattern extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'PATTERN';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::PATTERN,
        SpecRule::ATTRS => [
            Attribute::EXTERNALRESOURCESREQUIRED => [],
            Attribute::HEIGHT => [],
            Attribute::PATTERNCONTENTUNITS => [],
            Attribute::PATTERNTRANSFORM => [],
            Attribute::PATTERNUNITS => [],
            Attribute::PRESERVEASPECTRATIO => [],
            Attribute::VIEWBOX => [],
            Attribute::WIDTH => [],
            Attribute::X => [],
            Attribute::Y => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgConditionalProcessingAttributes::ID,
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
            AttributeList\SvgXlinkAttributes::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y+d3&&Kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Picture.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Picture.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $mandatoryParent
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 */
final class Picture extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'PICTURE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::PICTURE,
        SpecRule::MANDATORY_PARENT => Element::NOSCRIPT,
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-img/',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y��A++Qbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/PictureSource.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class PictureSource.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 */
final class PictureSource extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'picture > source';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SOURCE,
        SpecRule::SPEC_NAME => 'picture > source',
        SpecRule::MANDATORY_PARENT => Element::PICTURE,
        SpecRule::ATTRS => [
            Attribute::MEDIA => [],
            Attribute::SIZES => [],
            Attribute::SRCSET => [
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::DATA,
                        Protocol::HTTP,
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => true,
                ],
            ],
            Attribute::TYPE => [],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-img/',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y��<���Kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Polygon.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Polygon.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Polygon extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'POLYGON';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::POLYGON,
        SpecRule::ATTRS => [
            Attribute::EXTERNALRESOURCESREQUIRED => [],
            Attribute::POINTS => [],
            Attribute::SKETCH_TYPE => [],
            Attribute::TRANSFORM => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgConditionalProcessingAttributes::ID,
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y�Q�|��Lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Polyline.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Polyline.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Polyline extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'POLYLINE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::POLYLINE,
        SpecRule::ATTRS => [
            Attribute::EXTERNALRESOURCESREQUIRED => [],
            Attribute::POINTS => [],
            Attribute::SKETCH_TYPE => [],
            Attribute::TRANSFORM => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgConditionalProcessingAttributes::ID,
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y-��zzGbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Pre.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Pre.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Pre extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'PRE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::PRE,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y��,�AALbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Progress.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Progress.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $htmlFormat
 */
final class Progress extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'PROGRESS';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::PROGRESS,
        SpecRule::ATTRS => [
            Attribute::MAX => [],
            Attribute::VALUE => [],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y�5�Ebunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Q.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Q.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 */
final class Q extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'Q';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::Q,
        SpecRule::ATTR_LISTS => [
            AttributeList\CiteAttr::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y�����Rbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Radialgradient.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Radialgradient.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Radialgradient extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'RADIALGRADIENT';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::RADIALGRADIENT,
        SpecRule::ATTRS => [
            Attribute::CX => [],
            Attribute::CY => [],
            Attribute::EXTERNALRESOURCESREQUIRED => [],
            Attribute::FR => [],
            Attribute::FX => [],
            Attribute::FY => [],
            Attribute::GRADIENTTRANSFORM => [],
            Attribute::GRADIENTUNITS => [],
            Attribute::R => [],
            Attribute::SPREADMETHOD => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
            AttributeList\SvgXlinkAttributes::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y�p��yyVbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/RadialgradientStop.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class RadialgradientStop.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class RadialgradientStop extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'radialgradient > stop';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::STOP,
        SpecRule::SPEC_NAME => 'radialgradient > stop',
        SpecRule::ATTRS => [
            Attribute::OFFSET => [],
            Attribute::STOP_COLOR => [],
            Attribute::STOP_OPACITY => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::RADIALGRADIENT,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Yر�vvFbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Rb.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Rb.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Rb extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'RB';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::RB,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y��nnHbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Rect.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Rect.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Rect extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'RECT';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::RECT,
        SpecRule::ATTRS => [
            Attribute::EXTERNALRESOURCESREQUIRED => [],
            Attribute::HEIGHT => [],
            Attribute::RX => [],
            Attribute::RY => [],
            Attribute::SKETCH_TYPE => [],
            Attribute::TRANSFORM => [],
            Attribute::WIDTH => [],
            Attribute::X => [],
            Attribute::Y => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgConditionalProcessingAttributes::ID,
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y�h
5vvFbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Rp.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Rp.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Rp extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'RP';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::RP,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y�Ѿ�vvFbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Rt.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Rt.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Rt extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'RT';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::RT,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y�=8[[Gbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Rtc.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Rtc.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Rtc extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'RTC';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::RTC,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3YY�!�~~Hbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Ruby.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Ruby.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Ruby extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'RUBY';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::RUBY,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y"��rrEbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/S.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class S.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class S extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'S';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::S,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y����~~Hbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Samp.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Samp.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Samp extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SAMP';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SAMP,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y��Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmp3dGltf.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmp3dGltf.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmp3dGltf extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-3d-gltf]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-3d-gltf',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3YLMUbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmp3qPlayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmp3qPlayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmp3qPlayer extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-3q-player]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-3q-player',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3YԲE}llSbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAccess.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpAccess.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpAccess extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-access]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-access',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y���S��[bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAccessFewcents.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpAccessFewcents.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 * @property-read array<string> $requiresExtension
 */
final class ScriptAmpAccessFewcents extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-access-fewcents]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-access-fewcents',
        SpecRule::VERSION => [
            '0.1',
        ],
        SpecRule::REQUIRES_USAGE => 'NONE',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::REQUIRES_EXTENSION => [
            Extension::ACCESS,
        ],
    ];
}
PK.3Y�G�Hdd[bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAccessLaterpay.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpAccessLaterpay.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 * @property-read array<string> $requiresExtension
 */
final class ScriptAmpAccessLaterpay extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-access-laterpay]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-access-laterpay',
        SpecRule::VERSION => [
            '0.1',
            '0.2',
            'latest',
        ],
        SpecRule::REQUIRES_USAGE => 'NONE',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.2';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
        '0.2' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::REQUIRES_EXTENSION => [
            Extension::ACCESS,
        ],
    ];
}
PK.3Y�.���Xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAccessPoool.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpAccessPoool.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 * @property-read array<string> $requiresExtension
 */
final class ScriptAmpAccessPoool extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-access-poool]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-access-poool',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::REQUIRES_USAGE => 'NONE',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::REQUIRES_EXTENSION => [
            Extension::ACCESS,
        ],
    ];
}
PK.3Y8:���Ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAccessScroll.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpAccessScroll.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 * @property-read array<string> $requiresExtension
 */
final class ScriptAmpAccessScroll extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-access-scroll]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-access-scroll',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::REQUIRES_USAGE => 'NONE',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::REQUIRES_EXTENSION => [
            Extension::ACCESS,
        ],
    ];
}
PK.3Y�K``Vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAccordion.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpAccordion.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpAccordion extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-accordion]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-accordion',
        SpecRule::VERSION => [
            '1.0',
        ],
        SpecRule::VERSION_NAME => 'v1.0',
        SpecRule::BENTO_SUPPORTED_VERSION => [
            '1.0',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '1.0' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-accordion 1.0',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-accordion 0.1',
        ],
    ];
}
PK.3Yirq1��Wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAccordion2.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpAccordion2.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpAccordion2 extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-accordion] (2)';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-accordion',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
        SpecRule::VERSION_NAME => 'v0.1',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::SATISFIES => [
            'amp-accordion 0.1',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-accordion 1.0',
        ],
    ];
}
PK.3Y���WXbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpActionMacro.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpActionMacro.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpActionMacro extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-action-macro]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-action-macro',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Yk��/Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAdCustom.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpAdCustom.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpAdCustom extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-ad-custom]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-ad-custom',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3YC�4'		Tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAddthis.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpAddthis.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpAddthis extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-addthis]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-addthis',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y@'*�Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAdExit.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpAdExit.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpAdExit extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-ad-exit]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-ad-exit',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4ADS,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y����Vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAnalytics.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpAnalytics.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpAnalytics extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-analytics]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-analytics',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y�S�ӂ�Qbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAnim.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpAnim.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpAnim extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-anim]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-anim',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Yj�!//Vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAnimation.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpAnimation.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpAnimation extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-animation]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-animation',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y�N���Ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpApesterMedia.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpApesterMedia.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpApesterMedia extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-apester-media]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-apester-media',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y�H2�JJVbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAppBanner.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpAppBanner.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpAppBanner extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-app-banner]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-app-banner',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y��tB��Rbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAudio.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpAudio.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpAudio extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-audio]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-audio',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y���Tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAutoAds.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpAutoAds.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpAutoAds extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-auto-ads]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-auto-ads',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y)��jYbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAutocomplete.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpAutocomplete.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpAutocomplete extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-autocomplete]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-autocomplete',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y��}��Ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpBaseCarousel.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpBaseCarousel.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpBaseCarousel extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-base-carousel]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-base-carousel',
        SpecRule::VERSION => [
            '0.1',
            '1.0',
            'latest',
        ],
        SpecRule::BENTO_SUPPORTED_VERSION => [
            '1.0',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
        '1.0' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y���Vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpBeopinion.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpBeopinion.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpBeopinion extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-beopinion]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-beopinion',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3YZ5*GGQbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpBind.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpBind.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpBind extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-bind]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-bind',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::REQUIRES_USAGE => 'NONE',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y!��88_bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpBodymovinAnimation.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpBodymovinAnimation.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpBodymovinAnimation extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-bodymovin-animation]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-bodymovin-animation',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y�X��Wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpBridPlayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpBridPlayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpBridPlayer extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-brid-player]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-brid-player',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3YD.��ffWbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpBrightcove.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpBrightcove.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpBrightcove extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-brightcove]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-brightcove',
        SpecRule::VERSION => [
            '1.0',
        ],
        SpecRule::VERSION_NAME => 'v1.0',
        SpecRule::BENTO_SUPPORTED_VERSION => [
            '1.0',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '1.0' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-brightcove 1.0',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-brightcove 0.1',
        ],
    ];
}
PK.3Y"��ӝ�Xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpBrightcove2.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpBrightcove2.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpBrightcove2 extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-brightcove] (2)';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-brightcove',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
        SpecRule::VERSION_NAME => 'v0.1',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-brightcove 0.1',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-brightcove 1.0',
        ],
    ];
}
PK.3Yޏ�0##Zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpBysideContent.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpBysideContent.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpBysideContent extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-byside-content]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-byside-content',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y�B�&&Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpCacheUrl.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpCacheUrl.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpCacheUrl extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-cache-url]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-cache-url',
        SpecRule::VERSION => [
            '0.1',
        ],
        SpecRule::REQUIRES_USAGE => 'NONE',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Yy���PPYbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpCallTracking.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpCallTracking.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpCallTracking extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-call-tracking]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-call-tracking',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y;��Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpCarousel.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpCarousel.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpCarousel extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-carousel]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-carousel',
        SpecRule::VERSION => [
            '0.1',
            '0.2',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
        '0.2' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y�od�(([bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpConnatixPlayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpConnatixPlayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpConnatixPlayer extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-connatix-player]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-connatix-player',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3YX���		Tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpConsent.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpConsent.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpConsent extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-consent]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-consent',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y��llXbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpDailymotion.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpDailymotion.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpDailymotion extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-dailymotion]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-dailymotion',
        SpecRule::VERSION => [
            '1.0',
        ],
        SpecRule::VERSION_NAME => 'v1.0',
        SpecRule::BENTO_SUPPORTED_VERSION => [
            '1.0',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '1.0' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-dailymotion 1.0',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-dailymotion 0.1',
        ],
    ];
}
PK.3Yg����Ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpDailymotion2.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpDailymotion2.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpDailymotion2 extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-dailymotion] (2)';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-dailymotion',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
        SpecRule::VERSION_NAME => 'v0.1',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-dailymotion 0.1',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-dailymotion 1.0',
        ],
    ];
}
PK.3Y�����Zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpDateCountdown.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpDateCountdown.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpDateCountdown extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-date-countdown]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-date-countdown',
        SpecRule::VERSION => [
            '0.1',
            '1.0',
            'latest',
        ],
        SpecRule::BENTO_SUPPORTED_VERSION => [
            '1.0',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
        '1.0' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y�����Xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpDateDisplay.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpDateDisplay.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpDateDisplay extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-date-display]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-date-display',
        SpecRule::VERSION => [
            '0.1',
            '1.0',
            'latest',
        ],
        SpecRule::BENTO_SUPPORTED_VERSION => [
            '1.0',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
        '1.0' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Yh��Wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpDatePicker.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpDatePicker.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpDatePicker extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-date-picker]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-date-picker',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Yl��###Zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpDelightPlayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpDelightPlayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpDelightPlayer extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-delight-player]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-delight-player',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y@����^bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpDynamicCssClasses.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpDynamicCssClasses.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpDynamicCssClasses extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-dynamic-css-classes]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-dynamic-css-classes',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'NONE',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y����Xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpEmbedlyCard.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpEmbedlyCard.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpEmbedlyCard extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-embedly-card]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-embedly-card',
        SpecRule::VERSION => [
            '0.1',
            '1.0',
            'latest',
        ],
        SpecRule::BENTO_SUPPORTED_VERSION => [
            '1.0',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
        '1.0' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Yy���Wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpExperiment.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpExperiment.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpExperiment extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-experiment]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-experiment',
        SpecRule::VERSION => [
            '0.1',
            '1.0',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
        '1.0' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y��,��Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFacebook.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpFacebook.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpFacebook extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-facebook]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-facebook',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
        SpecRule::VERSION_NAME => 'v0.1',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-facebook 0.1',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-facebook 1.0',
        ],
    ];
}
PK.3Ynb�%%]bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFacebookComments.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpFacebookComments.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpFacebookComments extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-facebook-comments]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-facebook-comments',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-facebook-comments 0.1',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-facebook 1.0',
        ],
    ];
}
PK.3Yk�(tYbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFacebookLike.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpFacebookLike.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpFacebookLike extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-facebook-like]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-facebook-like',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-facebook-like 0.1',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-facebook 1.0',
        ],
    ];
}
PK.3Y�Js�Ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFacebookPage.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpFacebookPage.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpFacebookPage extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-facebook-page]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-facebook-page',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-facebook-page 0.1',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-facebook 1.0',
        ],
    ];
}
PK.3Y�:��XXTbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFitText.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpFitText.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpFitText extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-fit-text]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-fit-text',
        SpecRule::VERSION => [
            '1.0',
        ],
        SpecRule::VERSION_NAME => 'v1.0',
        SpecRule::BENTO_SUPPORTED_VERSION => [
            '1.0',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '1.0' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-fit-text 1.0',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-fit-text 0.1',
        ],
    ];
}
PK.3YBMY��Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFitText2.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpFitText2.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpFitText2 extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-fit-text] (2)';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-fit-text',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
        SpecRule::VERSION_NAME => 'v0.1',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::SATISFIES => [
            'amp-fit-text 0.1',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-fit-text 1.0',
        ],
    ];
}
PK.3Y���‚�Qbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFont.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpFont.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpFont extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-font]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-font',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3YUa#r��Qbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpForm.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpForm.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpForm extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-form]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-form',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3YύM�LLYbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFxCollection.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpFxCollection.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpFxCollection extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-fx-collection]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-fx-collection',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::REQUIRES_USAGE => 'NONE',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y�fs��[bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFxFlyingCarpet.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpFxFlyingCarpet.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpFxFlyingCarpet extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-fx-flying-carpet]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-fx-flying-carpet',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y���Pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpGeo.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpGeo.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpGeo extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-geo]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-geo',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y��HqmmSbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpGfycat.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpGfycat.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpGfycat extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-gfycat]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-gfycat',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y8e�>��Qbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpGist.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpGist.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpGist extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-gist]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-gist',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y2���>>`bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpGoogleDocumentEmbed.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpGoogleDocumentEmbed.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpGoogleDocumentEmbed extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-google-document-embed]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-google-document-embed',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3YSHHbbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpGoogleReadAloudPlayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpGoogleReadAloudPlayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpGoogleReadAloudPlayer extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-google-read-aloud-player]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-google-read-aloud-player',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y��Sz##Ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpGwdAnimation.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpGwdAnimation.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpGwdAnimation extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-gwd-animation]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-gwd-animation',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4ADS,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y�Pp��Qbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpHulu.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpHulu.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpHulu extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-hulu]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-hulu',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y}���NNSbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpIframe.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpIframe.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpIframe extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-iframe]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-iframe',
        SpecRule::VERSION => [
            '1.0',
        ],
        SpecRule::VERSION_NAME => 'v1.0',
        SpecRule::BENTO_SUPPORTED_VERSION => [
            '1.0',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '1.0' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-iframe 1.0',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-iframe 0.1',
        ],
    ];
}
PK.3YJ2�΅�Tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpIframe2.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpIframe2.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpIframe2 extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-iframe] (2)';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-iframe',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
        SpecRule::VERSION_NAME => 'v0.1',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-iframe 0.1',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-iframe 1.0',
        ],
    ];
}
PK.3Yx܃Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpIframely.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpIframely.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpIframely extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-iframely]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-iframely',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y&��Zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpImageLightbox.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpImageLightbox.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpImageLightbox extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-image-lightbox]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-image-lightbox',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y�}�Xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpImageSlider.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpImageSlider.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpImageSlider extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-image-slider]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-image-slider',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y߭��Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpImaVideo.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpImaVideo.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpImaVideo extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-ima-video]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-ima-video',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y��6�Rbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpImgur.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpImgur.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpImgur extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-imgur]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-imgur',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y����Zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpInlineGallery.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpInlineGallery.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpInlineGallery extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-inline-gallery]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-inline-gallery',
        SpecRule::VERSION => [
            '0.1',
            '1.0',
            'latest',
        ],
        SpecRule::BENTO_SUPPORTED_VERSION => [
            '1.0',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
        '1.0' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y�(��>>Vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpInputmask.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpInputmask.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpInputmask extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-inputmask]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-inputmask',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::REQUIRES_USAGE => 'NONE',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y�I``Vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpInstagram.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpInstagram.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpInstagram extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-instagram]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-instagram',
        SpecRule::VERSION => [
            '1.0',
        ],
        SpecRule::VERSION_NAME => 'v1.0',
        SpecRule::BENTO_SUPPORTED_VERSION => [
            '1.0',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '1.0' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-instagram 1.0',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-instagram 0.1',
        ],
    ];
}
PK.3Y��dI��Wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpInstagram2.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpInstagram2.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpInstagram2 extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-instagram] (2)';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-instagram',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
        SpecRule::VERSION_NAME => 'v0.1',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-instagram 0.1',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-instagram 1.0',
        ],
    ];
}
PK.3Y����abunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpInstallServiceworker.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpInstallServiceworker.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpInstallServiceworker extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-install-serviceworker]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-install-serviceworker',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Yq��p>>Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpIzlesene.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpIzlesene.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpIzlesene extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-izlesene]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-izlesene',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y���uuUbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpJwplayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpJwplayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpJwplayer extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-jwplayer]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-jwplayer',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y���q��Zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpKalturaPlayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpKalturaPlayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpKalturaPlayer extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-kaltura-player]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-kaltura-player',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y���ZZUbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpLightbox.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpLightbox.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpLightbox extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-lightbox]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-lightbox',
        SpecRule::VERSION => [
            '1.0',
        ],
        SpecRule::VERSION_NAME => 'v1.0',
        SpecRule::BENTO_SUPPORTED_VERSION => [
            '1.0',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '1.0' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-lightbox 1.0',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-lightbox 0.1',
        ],
    ];
}
PK.3Y����Vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpLightbox2.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpLightbox2.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpLightbox2 extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-lightbox] (2)';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-lightbox',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
        SpecRule::VERSION_NAME => 'v0.1',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-lightbox 0.1',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-lightbox 1.0',
        ],
    ];
}
PK.3YO��F\bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpLightboxGallery.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpLightboxGallery.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpLightboxGallery extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-lightbox-gallery]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-lightbox-gallery',
        SpecRule::VERSION => [
            '0.1',
            '1.0',
            'latest',
        ],
        SpecRule::REQUIRES_USAGE => 'NONE',
        SpecRule::BENTO_SUPPORTED_VERSION => [
            '1.0',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
        '1.0' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3YvL��((Ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpLinkRewriter.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpLinkRewriter.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpLinkRewriter extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-link-rewriter]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-link-rewriter',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-link-rewriter',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-skimlinks',
            'amp-smartlinks',
        ],
    ];
}
PK.3Yȑ�ddQbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpList.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpList.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpList extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-list]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-list',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y=�i��Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpLiveList.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpLiveList.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $mandatoryParent
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read bool $uniqueWarning
 * @property-read string $extensionSpec
 */
final class ScriptAmpLiveList extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-live-list]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-live-list',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::UNIQUE_WARNING => true,
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3YiRp�NNSbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpMathml.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpMathml.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpMathml extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-mathml]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-mathml',
        SpecRule::VERSION => [
            '1.0',
        ],
        SpecRule::VERSION_NAME => 'v1.0',
        SpecRule::BENTO_SUPPORTED_VERSION => [
            '1.0',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '1.0' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-mathml 1.0',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-mathml 0.1',
        ],
    ];
}
PK.3Y���^Tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpMathml2.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpMathml2.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpMathml2 extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-mathml] (2)';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-mathml',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::VERSION_NAME => 'v0.1',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-mathml 0.1',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-mathml 1.0',
        ],
    ];
}
PK.3YM�\Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpMegaMenu.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpMegaMenu.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpMegaMenu extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-mega-menu]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-mega-menu',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3YiT�-Vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpMegaphone.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpMegaphone.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpMegaphone extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-megaphone]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-megaphone',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y@�3�66^bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpMinuteMediaPlayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpMinuteMediaPlayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpMinuteMediaPlayer extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-minute-media-player]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-minute-media-player',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y'٫KVbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpMowplayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpMowplayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpMowplayer extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-mowplayer]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-mowplayer',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y��C��Rbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpMraid.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpMraid.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpMraid extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-mraid]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-mraid',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::REQUIRES_USAGE => 'NONE',
        SpecRule::EXTENSION_TYPE => 'HOST_SERVICE',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTRS => [
            Attribute::NO_FALLBACK => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4ADS,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y�l�eeUbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpMustache.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpMustache.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpMustache extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-mustache]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-mustache',
        SpecRule::VERSION => [
            '0.1',
            '0.2',
            'latest',
        ],
        SpecRule::DEPRECATED_VERSION => [
            '0.1',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
        SpecRule::EXTENSION_TYPE => 'CUSTOM_TEMPLATE',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.2';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
        '0.2' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y�a�Wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpNestedMenu.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpNestedMenu.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpNestedMenu extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-nested-menu]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-nested-menu',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y�z Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpNextPage.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpNextPage.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpNextPage extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-next-page]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-next-page',
        SpecRule::VERSION => [
            '0.1',
            '1.0',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '1.0';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
        '1.0' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3YK�2  Ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpNexxtvPlayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpNexxtvPlayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpNexxtvPlayer extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-nexxtv-player]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-nexxtv-player',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Yۋ:wwUbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpO2Player.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpO2Player.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpO2Player extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-o2-player]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-o2-player',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y��L�GGXbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpOnerrorV0Js.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class ScriptAmpOnerrorV0Js.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $cdata
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class ScriptAmpOnerrorV0Js extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'script amp-onerror (v0.js)';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'script amp-onerror (v0.js)',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::AMP_ONERROR => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    '',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
            ],
        ],
        SpecRule::CDATA => [
            SpecRule::MANDATORY_CDATA => 'document.querySelector("script[src*=\'/v0.js\']").onerror=function(){document.querySelector(\'style[amp-boilerplate]\').textContent=\'\'}',
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'script amp-onerror',
    ];
}
PK.3Yb�:���_bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpOnerrorV0JsOrV0Mjs.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class ScriptAmpOnerrorV0JsOrV0Mjs.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $cdata
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $enabledBy
 * @property-read string $descriptiveName
 */
final class ScriptAmpOnerrorV0JsOrV0Mjs extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'script amp-onerror (v0.js or v0.mjs)';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'script amp-onerror (v0.js or v0.mjs)',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::AMP_ONERROR => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    '',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
            ],
        ],
        SpecRule::CDATA => [
            SpecRule::CDATA_REGEX => '\[]\.slice\.call\(document\.querySelectorAll\("script\[src\*=\'\/v0\.js\'],script\[src\*=\'\/v0\.mjs\']"\)\)\.forEach\(function\(s\){s\.onerror=function\(\){document\.querySelector\(\'style\[amp-boilerplate]\'\)\.textContent=\'\'}}\)|document\.querySelector\("script\[src\*=\'\/v0\.js\']"\)\.onerror=function\(\){document\.querySelector\(\'style\[amp-boilerplate]\'\)\.textContent=\'\'}',
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::ENABLED_BY => [
            Attribute::TRANSFORMED,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'script amp-onerror',
    ];
}
PK.3YF79Ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpOnetapGoogle.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpOnetapGoogle.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpOnetapGoogle extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-onetap-google]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-onetap-google',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y��  Ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpOoyalaPlayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpOoyalaPlayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpOoyalaPlayer extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-ooyala-player]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-ooyala-player',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y�ִ�<<`bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpOrientationObserver.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpOrientationObserver.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpOrientationObserver extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-orientation-observer]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-orientation-observer',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3YD~լTbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpPanZoom.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpPanZoom.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpPanZoom extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-pan-zoom]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-pan-zoom',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3YX�QxxVbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpPinterest.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpPinterest.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpPinterest extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-pinterest]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-pinterest',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y��

Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpPlaybuzz.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpPlaybuzz.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpPlaybuzz extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-playbuzz]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-playbuzz',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y���MM]bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpPositionObserver.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpPositionObserver.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpPositionObserver extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-position-observer]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-position-observer',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y�ʪ(Wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpPowrPlayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpPowrPlayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpPowrPlayer extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-powr-player]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-powr-player',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y|�z��Xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpReachPlayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpReachPlayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpReachPlayer extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-reach-player]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-reach-player',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y:N�''[bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpRecaptchaInput.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpRecaptchaInput.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpRecaptchaInput extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-recaptcha-input]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-recaptcha-input',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y3¯�$$Zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpRedbullPlayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpRedbullPlayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpRedbullPlayer extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-redbull-player]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-redbull-player',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Yɔ3�==Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpReddit.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpReddit.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpReddit extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-reddit]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-reddit',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y_��Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpRender.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpRender.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpRender extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-render]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-render',
        SpecRule::VERSION => [
            '1.0',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '1.0';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '1.0' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y^'r<Wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpRiddleQuiz.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpRiddleQuiz.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpRiddleQuiz extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-riddle-quiz]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-riddle-quiz',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y��2Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpScript.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpScript.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpScript extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-script]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-script',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y��g�ZZUbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSelector.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpSelector.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpSelector extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-selector]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-selector',
        SpecRule::VERSION => [
            '1.0',
        ],
        SpecRule::VERSION_NAME => 'v1.0',
        SpecRule::BENTO_SUPPORTED_VERSION => [
            '1.0',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '1.0' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-selector 1.0',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-selector 0.1',
        ],
    ];
}
PK.3Y���vvVbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSelector2.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpSelector2.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpSelector2 extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-selector] (2)';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-selector',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
        SpecRule::VERSION_NAME => 'v0.1',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::SATISFIES => [
            'amp-selector 0.1',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-selector 1.0',
        ],
    ];
}
PK.3Y|T|TTTbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSidebar.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpSidebar.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpSidebar extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-sidebar]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-sidebar',
        SpecRule::VERSION => [
            '1.0',
        ],
        SpecRule::VERSION_NAME => 'v1.0',
        SpecRule::BENTO_SUPPORTED_VERSION => [
            '1.0',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '1.0' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-sidebar 1.0',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-sidebar 0.1',
        ],
    ];
}
PK.3Yp�i=��Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSidebar2.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpSidebar2.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpSidebar2 extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-sidebar] (2)';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-sidebar',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
        SpecRule::VERSION_NAME => 'v0.1',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-sidebar 0.1',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-sidebar 1.0',
        ],
    ];
}
PK.3Y`Vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSkimlinks.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpSkimlinks.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpSkimlinks extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-skimlinks]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-skimlinks',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-skimlinks',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-link-rewriter',
            'amp-smartlinks',
        ],
    ];
}
PK.3Y(C��SSSbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSlides.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpSlides.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read string $deprecation
 * @property-read string $deprecationUrl
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpSlides extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-slides]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-slides',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'NONE',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::DEPRECATION => 'amp-carousel',
        SpecRule::DEPRECATION_URL => 'https://www.ampproject.org/docs/reference/components/amp-carousel',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y�=zWbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSmartlinks.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpSmartlinks.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpSmartlinks extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-smartlinks]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-smartlinks',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-smartlinks',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-link-rewriter',
            'amp-skimlinks',
        ],
    ];
}
PK.3Y'�X�ppXbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSocialShare.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpSocialShare.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpSocialShare extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-social-share]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-social-share',
        SpecRule::VERSION => [
            '1.0',
        ],
        SpecRule::VERSION_NAME => 'v1.0',
        SpecRule::BENTO_SUPPORTED_VERSION => [
            '1.0',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '1.0' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-social-share 1.0',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-social-share 0.1',
        ],
    ];
}
PK.3Y��*��Ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSocialShare2.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpSocialShare2.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpSocialShare2 extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-social-share] (2)';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-social-share',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
        SpecRule::VERSION_NAME => 'v0.1',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::SATISFIES => [
            'amp-social-share 0.1',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-social-share 1.0',
        ],
    ];
}
PK.3Y�<:ZffWbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSoundcloud.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpSoundcloud.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpSoundcloud extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-soundcloud]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-soundcloud',
        SpecRule::VERSION => [
            '1.0',
        ],
        SpecRule::VERSION_NAME => 'v1.0',
        SpecRule::BENTO_SUPPORTED_VERSION => [
            '1.0',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '1.0' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-soundcloud 1.0',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-soundcloud 0.1',
        ],
    ];
}
PK.3Y:�>��Xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSoundcloud2.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpSoundcloud2.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpSoundcloud2 extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-soundcloud] (2)';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-soundcloud',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
        SpecRule::VERSION_NAME => 'v0.1',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-soundcloud 0.1',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-soundcloud 1.0',
        ],
    ];
}
PK.3Y���<��^bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSpringboardPlayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpSpringboardPlayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpSpringboardPlayer extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-springboard-player]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-springboard-player',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y����Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStickyAd.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpStickyAd.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpStickyAd extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-sticky-ad]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-sticky-ad',
        SpecRule::VERSION => [
            '0.1',
            '1.0',
            'latest',
        ],
        SpecRule::DEPRECATED_VERSION => [
            '0.1',
        ],
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '1.0';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '1.0' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y�<XRbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStory.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpStory.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpStory extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-story]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-story',
        SpecRule::VERSION => [
            '1.0',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '1.0';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '1.0' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3YLӽCUbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStory360.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpStory360.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpStory360 extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-story-360]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-story-360',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Yӆ|!!Ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStoryAutoAds.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpStoryAutoAds.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpStoryAutoAds extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-story-auto-ads]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-story-auto-ads',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y�3O�::_bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStoryAutoAnalytics.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpStoryAutoAnalytics.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpStoryAutoAnalytics extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-story-auto-analytics]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-story-auto-analytics',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y���##Zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStoryCaptions.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpStoryCaptions.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpStoryCaptions extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-story-captions]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-story-captions',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y�{!OWW]bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStoryDvhPolyfill.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class ScriptAmpStoryDvhPolyfill.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $cdata
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $enabledBy
 * @property-read string $descriptiveName
 */
final class ScriptAmpStoryDvhPolyfill extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'script amp-story-dvh-polyfill';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'script amp-story-dvh-polyfill',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::AMP_STORY_DVH_POLYFILL => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    '',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
            ],
        ],
        SpecRule::CDATA => [
            SpecRule::CDATA_REGEX => '"use strict";if\(!self\.CSS\|\|!CSS\.supports\|\|!CSS\.supports\("height:1dvh"\)\)\{function e\(\)\{document\.documentElement\.style\.setProperty\("--story-dvh",innerHeight/100\+"px","important"\)\}addEventListener\("resize",e,\{passive:!0\}\),e\(\)\}',
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::ENABLED_BY => [
            Attribute::TRANSFORMED,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'script amp-story-dvh-polyfill',
    ];
}
PK.3Y�M�y//]bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStoryInteractive.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpStoryInteractive.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpStoryInteractive extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-story-interactive]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-story-interactive',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y_i�r55^bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStoryPanningMedia.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpStoryPanningMedia.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpStoryPanningMedia extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-story-panning-media]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-story-panning-media',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3YgF���Xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStoryPlayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpStoryPlayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpStoryPlayer extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-story-player]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-story-player',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-story-player/',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y�r77SSZbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStoryShopping.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpStoryShopping.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpStoryShopping extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-story-shopping]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-story-shopping',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y[E�c!!_bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStorySubscriptions.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpStorySubscriptions.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpStorySubscriptions extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-story-subscriptions]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-story-subscriptions',
        SpecRule::VERSION => [
            '0.1',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y��Z���Zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStreamGallery.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpStreamGallery.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpStreamGallery extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-stream-gallery]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-stream-gallery',
        SpecRule::VERSION => [
            '1.0',
            'latest',
        ],
        SpecRule::BENTO_SUPPORTED_VERSION => [
            '1.0',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '1.0' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Yq��KMMZbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSubscriptions.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpSubscriptions.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpSubscriptions extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-subscriptions]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-subscriptions',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::REQUIRES_USAGE => 'NONE',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Yj��`bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSubscriptionsGoogle.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpSubscriptionsGoogle.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 * @property-read array<string> $requiresExtension
 */
final class ScriptAmpSubscriptionsGoogle extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-subscriptions-google]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-subscriptions-google',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::REQUIRES_USAGE => 'NONE',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::REQUIRES_EXTENSION => [
            Extension::SUBSCRIPTIONS,
        ],
    ];
}
PK.3Y��ujSbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpTiktok.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpTiktok.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpTiktok extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-tiktok]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-tiktok',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y=!r���Tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpTimeago.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpTimeago.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpTimeago extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-timeago]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-timeago',
        SpecRule::VERSION => [
            '0.1',
            '1.0',
            'latest',
        ],
        SpecRule::BENTO_SUPPORTED_VERSION => [
            '1.0',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
        '1.0' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3YuάdYbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpTruncateText.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpTruncateText.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpTruncateText extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-truncate-text]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-truncate-text',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Ywv�lTTTbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpTwitter.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpTwitter.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpTwitter extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-twitter]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-twitter',
        SpecRule::VERSION => [
            '1.0',
        ],
        SpecRule::VERSION_NAME => 'v1.0',
        SpecRule::BENTO_SUPPORTED_VERSION => [
            '1.0',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '1.0' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-twitter 1.0',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-twitter 0.1',
        ],
    ];
}
PK.3Y��/��Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpTwitter2.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpTwitter2.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpTwitter2 extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-twitter] (2)';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-twitter',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
        SpecRule::VERSION_NAME => 'v0.1',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-twitter 0.1',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-twitter 1.0',
        ],
    ];
}
PK.3Y:�+��]bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpUserNotification.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpUserNotification.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpUserNotification extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-user-notification]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-user-notification',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y,�›HHRbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVideo.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpVideo.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpVideo extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-video]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-video',
        SpecRule::VERSION => [
            '1.0',
        ],
        SpecRule::VERSION_NAME => 'v1.0',
        SpecRule::BENTO_SUPPORTED_VERSION => [
            '1.0',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '1.0' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-video 1.0',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-video 0.1',
        ],
    ];
}
PK.3Y���aaSbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVideo2.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpVideo2.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpVideo2 extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-video] (2)';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-video',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::REQUIRES_USAGE => 'NONE',
        SpecRule::VERSION_NAME => 'v0.1',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::SATISFIES => [
            'amp-video 0.1',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-video 1.0',
        ],
    ];
}
PK.3Y�ؚFYbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVideoDocking.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpVideoDocking.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpVideoDocking extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-video-docking]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-video-docking',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3YSba�ppXbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVideoIframe.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpVideoIframe.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpVideoIframe extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-video-iframe]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-video-iframe',
        SpecRule::VERSION => [
            '1.0',
        ],
        SpecRule::VERSION_NAME => 'v1.0',
        SpecRule::BENTO_SUPPORTED_VERSION => [
            '1.0',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '1.0' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-video-iframe 1.0',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-video-iframe 0.1',
        ],
    ];
}
PK.3Yp�@@Ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVideoIframe2.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpVideoIframe2.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpVideoIframe2 extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-video-iframe] (2)';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-video-iframe',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::VERSION_NAME => 'v0.1',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-video-iframe 0.1',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-video-iframe 1.0',
        ],
    ];
}
PK.3Y�2#��Rbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVimeo.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpVimeo.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpVimeo extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-vimeo]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-vimeo',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
        SpecRule::VERSION_NAME => 'v0.1',
        SpecRule::BENTO_SUPPORTED_VERSION => [
            '1.0',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-vimeo 0.1',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-vimeo 1.0',
        ],
    ];
}
PK.3Ye��Sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVimeo2.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpVimeo2.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpVimeo2 extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-vimeo] (2)';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-vimeo',
        SpecRule::VERSION => [
            '1.0',
        ],
        SpecRule::VERSION_NAME => 'v1.0',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '1.0' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-vimeo 1.0',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-vimeo 0.1',
        ],
    ];
}
PK.3Y'���eeQbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVine.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpVine.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpVine extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-vine]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-vine',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3YP�Xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpViqeoPlayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpViqeoPlayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpViqeoPlayer extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-viqeo-player]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-viqeo-player',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y��j���Obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVk.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpVk.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpVk extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-vk]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-vk',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y���Tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpWebPush.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpWebPush.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpWebPush extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-web-push]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-web-push',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y�a�  Ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpWistiaPlayer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpWistiaPlayer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpWistiaPlayer extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-wistia-player]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-wistia-player',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y��3t��[bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpWordpressEmbed.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpWordpressEmbed.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpWordpressEmbed extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-wordpress-embed]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-wordpress-embed',
        SpecRule::VERSION => [
            '1.0',
            'latest',
        ],
        SpecRule::BENTO_SUPPORTED_VERSION => [
            '1.0',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '1.0';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '1.0' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y�vN�yyRbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpYotpo.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpYotpo.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptAmpYotpo extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-yotpo]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-yotpo',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-yotpo/',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y����TTTbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpYoutube.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpYoutube.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpYoutube extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-youtube]';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-youtube',
        SpecRule::VERSION => [
            '1.0',
        ],
        SpecRule::VERSION_NAME => 'v1.0',
        SpecRule::BENTO_SUPPORTED_VERSION => [
            '1.0',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '1.0' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-youtube 1.0',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-youtube 0.1',
        ],
    ];
}
PK.3Y��1���Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpYoutube2.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptAmpYoutube2.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read string $extensionSpec
 * @property-read array<string> $excludes
 */
final class ScriptAmpYoutube2 extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT [amp-youtube] (2)';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-youtube',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
        SpecRule::VERSION_NAME => 'v0.1',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'amp-youtube 0.1',
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
        SpecRule::EXCLUDES => [
            'amp-youtube 1.0',
        ],
    ];
}
PK.3Ym��$$lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpAccordionAmp4email.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptCustomElementAmpAccordionAmp4email.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptCustomElementAmpAccordionAmp4email extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT[custom-element=amp-accordion] (AMP4EMAIL)';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-accordion',
        SpecRule::VERSION => [
            '0.1',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'SCRIPT[custom-element=amp-accordion] (AMP4EMAIL)',
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4EMAIL,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y,{O'��obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpAutocompleteAmp4email.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptCustomElementAmpAutocompleteAmp4email.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptCustomElementAmpAutocompleteAmp4email extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT[custom-element=amp-autocomplete] (AMP4EMAIL)';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-autocomplete',
        SpecRule::VERSION => [
            '0.1',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'SCRIPT[custom-element=amp-autocomplete] (AMP4EMAIL)',
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4EMAIL,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y�Y����gbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpBindAmp4email.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptCustomElementAmpBindAmp4email.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptCustomElementAmpBindAmp4email extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT[custom-element=amp-bind] (AMP4EMAIL)';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-bind',
        SpecRule::VERSION => [
            '0.1',
        ],
        SpecRule::REQUIRES_USAGE => 'NONE',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'SCRIPT[custom-element=amp-bind] (AMP4EMAIL)',
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4EMAIL,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y�J�((kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpCarouselAmp4email.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptCustomElementAmpCarouselAmp4email.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptCustomElementAmpCarouselAmp4email extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT[custom-element=amp-carousel] (AMP4EMAIL)';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-carousel',
        SpecRule::VERSION => [
            '0.1',
            '0.2',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
        '0.2' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'SCRIPT[custom-element=amp-carousel] (AMP4EMAIL)',
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4EMAIL,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3YK*��GGjbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpFitTextAmp4email.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptCustomElementAmpFitTextAmp4email.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptCustomElementAmpFitTextAmp4email extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT[custom-element=amp-fit-text] (AMP4EMAIL)';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-fit-text',
        SpecRule::VERSION => [
            '0.1',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
        SpecRule::VERSION_NAME => 'v0.1',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'SCRIPT[custom-element=amp-fit-text] (AMP4EMAIL)',
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4EMAIL,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y��sAgbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpFormAmp4email.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptCustomElementAmpFormAmp4email.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptCustomElementAmpFormAmp4email extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT[custom-element=amp-form] (AMP4EMAIL)';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-form',
        SpecRule::VERSION => [
            '0.1',
        ],
        SpecRule::DEPRECATED_ALLOW_DUPLICATES => true,
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'SCRIPT[custom-element=amp-form] (AMP4EMAIL)',
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4EMAIL,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y9b
�		pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpImageLightboxAmp4email.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptCustomElementAmpImageLightboxAmp4email.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read string $deprecation
 * @property-read string $deprecationUrl
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptCustomElementAmpImageLightboxAmp4email extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT[custom-element=amp-image-lightbox] (AMP4EMAIL)';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-image-lightbox',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'SCRIPT[custom-element=amp-image-lightbox] (AMP4EMAIL)',
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::DEPRECATION => 'amp-image-lightbox cannot be properly positioned in emails and will soon be invalid in AMP4EMAIL.',
        SpecRule::DEPRECATION_URL => 'https://github.com/ampproject/amphtml/issues/23170',
        SpecRule::HTML_FORMAT => [
            Format::AMP4EMAIL,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y�;d���ibunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpLightboxAmp4ads.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptCustomElementAmpLightboxAmp4ads.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptCustomElementAmpLightboxAmp4ads extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT[custom-element=amp-lightbox] (AMP4ADS)';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-lightbox',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::VERSION_NAME => 'v0.1',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'SCRIPT[custom-element=amp-lightbox] (AMP4ADS)',
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4ADS,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3YE՗"	"	kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpLightboxAmp4email.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptCustomElementAmpLightboxAmp4email.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read string $deprecation
 * @property-read string $deprecationUrl
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptCustomElementAmpLightboxAmp4email extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT[custom-element=amp-lightbox] (AMP4EMAIL)';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-lightbox',
        SpecRule::VERSION => [
            '0.1',
            'latest',
        ],
        SpecRule::VERSION_NAME => 'v0.1',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'SCRIPT[custom-element=amp-lightbox] (AMP4EMAIL)',
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::DEPRECATION => 'amp-lightbox cannot be properly positioned in emails and will soon be invalid in AMP4EMAIL.',
        SpecRule::DEPRECATION_URL => 'https://github.com/ampproject/amphtml/issues/23170',
        SpecRule::HTML_FORMAT => [
            Format::AMP4EMAIL,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Yuv���gbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpListAmp4email.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptCustomElementAmpListAmp4email.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptCustomElementAmpListAmp4email extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT[custom-element=amp-list] (AMP4EMAIL)';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-list',
        SpecRule::VERSION => [
            '0.1',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'SCRIPT[custom-element=amp-list] (AMP4EMAIL)',
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4EMAIL,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Ym̂kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpSelectorAmp4email.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptCustomElementAmpSelectorAmp4email.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptCustomElementAmpSelectorAmp4email extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT[custom-element=amp-selector] (AMP4EMAIL)';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-selector',
        SpecRule::VERSION => [
            '0.1',
        ],
        SpecRule::REQUIRES_USAGE => 'EXEMPTED',
        SpecRule::VERSION_NAME => 'v0.1',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'SCRIPT[custom-element=amp-selector] (AMP4EMAIL)',
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4EMAIL,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y��L��jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpSidebarAmp4email.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptCustomElementAmpSidebarAmp4email.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptCustomElementAmpSidebarAmp4email extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT[custom-element=amp-sidebar] (AMP4EMAIL)';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-sidebar',
        SpecRule::VERSION => [
            '0.1',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => true,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'SCRIPT[custom-element=amp-sidebar] (AMP4EMAIL)',
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4EMAIL,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3YYcK���jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpTimeagoAmp4email.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptCustomElementAmpTimeagoAmp4email.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptCustomElementAmpTimeagoAmp4email extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT[custom-element=amp-timeago] (AMP4EMAIL)';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-timeago',
        SpecRule::VERSION => [
            '0.1',
        ],
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.1';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'SCRIPT[custom-element=amp-timeago] (AMP4EMAIL)',
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4EMAIL,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y����jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomTemplateAmpMustacheAmp4ads.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptCustomTemplateAmpMustacheAmp4ads.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptCustomTemplateAmpMustacheAmp4ads extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT[custom-template=amp-mustache] (AMP4ADS)';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-mustache',
        SpecRule::VERSION => [
            '0.1',
            '0.2',
            'latest',
        ],
        SpecRule::DEPRECATED_VERSION => [
            '0.1',
        ],
        SpecRule::EXTENSION_TYPE => 'CUSTOM_TEMPLATE',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.2';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
        '0.2' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'SCRIPT[custom-template=amp-mustache] (AMP4ADS)',
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4ADS,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y�a�ʭ�lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomTemplateAmpMustacheAmp4email.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;
use AmpProject\Validator\Spec\TagWithExtensionSpec;

/**
 * Tag class ScriptCustomTemplateAmpMustacheAmp4email.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 * @property-read string $extensionSpec
 */
final class ScriptCustomTemplateAmpMustacheAmp4email extends TagWithExtensionSpec implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT[custom-template=amp-mustache] (AMP4EMAIL)';

    /**
     * Array of extension spec rules.
     *
     * @var array
     */
    const EXTENSION_SPEC = [
        SpecRule::NAME => 'amp-mustache',
        SpecRule::VERSION => [
            '0.1',
            '0.2',
        ],
        SpecRule::DEPRECATED_VERSION => [
            '0.1',
        ],
        SpecRule::EXTENSION_TYPE => 'CUSTOM_TEMPLATE',
    ];

    /**
     * Latest version of the extension.
     *
     * @var string
     */
    const LATEST_VERSION = '0.2';

    /**
     * Meta data about the specific versions.
     *
     * @var array
     */
    const VERSIONS_META = [
        '0.1' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
        '0.2' => [
            'hasCss' => false,
            'hasBento' => false,
        ],
    ];

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'SCRIPT[custom-template=amp-mustache] (AMP4EMAIL)',
        SpecRule::ATTR_LISTS => [
            AttributeList\CommonExtensionAttrs::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4EMAIL,
        ],
        SpecRule::EXTENSION_SPEC => self::EXTENSION_SPEC,
    ];
}
PK.3Y���eeRbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptIdAmpRtc.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class ScriptIdAmpRtc.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<array<string>>> $cdata
 * @property-read array<string> $htmlFormat
 */
final class ScriptIdAmpRtc extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'script id=amp-rtc';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'script id=amp-rtc',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::ID => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'amp-rtc',
                ],
            ],
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_CASEI => [
                    'application/json',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
        ],
        SpecRule::CDATA => [
            SpecRule::DISALLOWED_CDATA_REGEX => [
                [
                    SpecRule::REGEX => '<!--',
                    SpecRule::ERROR_MESSAGE => 'html comments',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3YP)��_bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptTypeApplicationLdJson.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class ScriptTypeApplicationLdJson.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<array<string>>> $cdata
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class ScriptTypeApplicationLdJson extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'script type=application/ld+json';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'script type=application/ld+json',
        SpecRule::ATTRS => [
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
                SpecRule::VALUE_CASEI => [
                    'application/ld+json',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
        ],
        SpecRule::CDATA => [
            SpecRule::DISALLOWED_CDATA_REGEX => [
                [
                    SpecRule::REGEX => '<!--',
                    SpecRule::ERROR_MESSAGE => 'html comments',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'script type=application/ld+json',
    ];
}
PK.3Y_��ooWbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptTypeTextPlain.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class ScriptTypeTextPlain.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<array<string>>> $cdata
 * @property-read array<string> $disallowedAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class ScriptTypeTextPlain extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT type=text/plain';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'SCRIPT type=text/plain',
        SpecRule::ATTRS => [
            Attribute::ID => [
                SpecRule::DISALLOWED_VALUE_REGEX => '(^|\s)(__amp_\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\S*|\$p|\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|AMP|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|i-amphtml-\S*|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\s|$)',
                SpecRule::ADD_VALUE_TO_SET => 'TEMPLATE_IDS',
            ],
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_CASEI => [
                    'text/plain',
                ],
            ],
            Attribute::TEMPLATE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'amp-mustache',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
        ],
        SpecRule::CDATA => [
            SpecRule::DISALLOWED_CDATA_REGEX => [
                [
                    SpecRule::REGEX => '<!--',
                    SpecRule::ERROR_MESSAGE => 'html comments',
                ],
            ],
        ],
        SpecRule::DISALLOWED_ANCESTOR => [
            'TEMPLATE',
            'AMP-DATE-PICKER',
            'FORM DIV [submit-success][template]',
            'FORM DIV [submit-error][template]',
            'FORM DIV [submitting][template]',
            'FORM DIV [verify-error][template]',
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::MUSTACHE,
        ],
    ];
}
PK.3Y�tA���`bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptTypeTextPlainAmp4email.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class ScriptTypeTextPlainAmp4email.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<array<array<string>>> $cdata
 * @property-read array<string> $disallowedAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class ScriptTypeTextPlainAmp4email extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SCRIPT type=text/plain (AMP4EMAIL)';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'SCRIPT type=text/plain (AMP4EMAIL)',
        SpecRule::ATTRS => [
            Attribute::ID => [
                SpecRule::DISALLOWED_VALUE_REGEX => '(^|\s)(__amp_\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\S*|\$p|\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|AMP|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|i-amphtml-\S*|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\s|$)',
                SpecRule::ADD_VALUE_TO_SET => 'TEMPLATE_IDS',
            ],
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_CASEI => [
                    'text/plain',
                ],
            ],
            Attribute::TEMPLATE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'amp-mustache',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_DISPATCH',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
        ],
        SpecRule::CDATA => [
            SpecRule::DISALLOWED_CDATA_REGEX => [
                [
                    SpecRule::REGEX => '<!--',
                    SpecRule::ERROR_MESSAGE => 'html comments',
                ],
            ],
        ],
        SpecRule::DISALLOWED_ANCESTOR => [
            'TEMPLATE (AMP4EMAIL)',
            'AMP-DATE-PICKER',
            'FORM DIV [submit-success][template]',
            'FORM DIV [submit-error][template]',
            'FORM DIV [submitting][template]',
            'FORM DIV [verify-error][template]',
            'FORM DIV [submitting]',
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4EMAIL,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::MUSTACHE,
        ],
    ];
}
PK.3YY�O3��Kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Section.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Section.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $disallowedAncestor
 * @property-read array<string> $htmlFormat
 */
final class Section extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SECTION';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SECTION,
        SpecRule::ATTR_LISTS => [
            AttributeList\PooolAccessAttrs::ID,
        ],
        SpecRule::DISALLOWED_ANCESTOR => [
            'AMP-ACCORDION',
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y��gRRTbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/SectionAmp4email.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class SectionAmp4email.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $disallowedAncestor
 * @property-read array<string> $htmlFormat
 */
final class SectionAmp4email extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'section (AMP4EMAIL)';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SECTION,
        SpecRule::SPEC_NAME => 'section (AMP4EMAIL)',
        SpecRule::DISALLOWED_ANCESTOR => [
            'AMP-ACCORDION',
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y�U��CCJbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Select.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Select.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 */
final class Select extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SELECT';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SELECT,
        SpecRule::ATTRS => [
            Attribute::AUTOFOCUS => [
                SpecRule::DISABLED_BY => [
                    Attribute::AMP4EMAIL,
                ],
            ],
            Attribute::DISABLED => [],
            Attribute::MULTIPLE => [],
            Attribute::NO_VERIFY => [
                SpecRule::VALUE => [
                    '',
                ],
                SpecRule::DISABLED_BY => [
                    Attribute::AMP4EMAIL,
                ],
            ],
            Attribute::REQUIRED => [],
            Attribute::SIZE => [],
            '[autofocus]' => [
                SpecRule::DISABLED_BY => [
                    Attribute::AMP4EMAIL,
                ],
            ],
            '[disabled]' => [],
            '[multiple]' => [],
            '[required]' => [],
            '[size]' => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NameAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-form/',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y~	�Y��Hbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Slot.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Slot.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 */
final class Slot extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SLOT';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SLOT,
        SpecRule::ATTR_LISTS => [
            AttributeList\NameAttr::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y��$Ȃ�Ibunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Small.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Small.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Small extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SMALL';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SMALL,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3YɑOWEENbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Solidcolor.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Solidcolor.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Solidcolor extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SOLIDCOLOR';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SOLIDCOLOR,
        SpecRule::ATTRS => [
            Attribute::SOLID_COLOR => [],
            Attribute::SOLID_OPACITY => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Yl~_JJJbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Spacer.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Spacer.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Spacer extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SPACER';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SPACER,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y�~~Hbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Span.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Span.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Span extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SPAN';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SPAN,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y<�Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/SpanAmpNestedMenu.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class SpanAmpNestedMenu.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class SpanAmpNestedMenu extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'span amp-nested-menu';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SPAN,
        SpecRule::SPEC_NAME => 'span amp-nested-menu',
        SpecRule::ATTR_LISTS => [
            AttributeList\AmpNestedMenuActions::ID,
        ],
        SpecRule::MANDATORY_ANCESTOR => Extension::NESTED_MENU,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3YR��4Xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/SpanSwgAmpCacheNonce.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class SpanSwgAmpCacheNonce.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array> $attrs
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read array<string> $requires
 * @property-read array<string> $requiresExtension
 */
final class SpanSwgAmpCacheNonce extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'span swg_amp_cache_nonce';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SPAN,
        SpecRule::SPEC_NAME => 'span swg_amp_cache_nonce',
        SpecRule::ATTRS => [
            Attribute::SWG_AMP_CACHE_NONCE => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_DISPATCH',
            ],
        ],
        SpecRule::MANDATORY_ANCESTOR => Element::BODY,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'span swg_amp_cache_nonce',
        ],
        SpecRule::REQUIRES => [
            'subscriptions-section content swg_amp_cache_nonce',
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::SUBSCRIPTIONS,
        ],
    ];
}
PK.3Y@�6��Qbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/StandardImage.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class StandardImage.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array<array<string>>> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<string> $disallowedAncestor
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class StandardImage extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'Standard Image';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::IMAGE,
        SpecRule::SPEC_NAME => 'Standard Image',
        SpecRule::ATTRS => [
            Attribute::DECODING => [
                SpecRule::VALUE_CASEI => [
                    'async',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ImgAttrs::ID,
            AttributeList\MandatorySrcOrSrcset::ID,
        ],
        SpecRule::DISALLOWED_ANCESTOR => [
            'AMP-IMG',
            'AMP-STORY',
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'img',
    ];
}
PK.3Y�g���Obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/StandardImg.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class StandardImg.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array<array<string>>> $attrs
 * @property-read array<string> $attrLists
 * @property-read array<string> $disallowedAncestor
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class StandardImg extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'Standard Img';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::IMG,
        SpecRule::SPEC_NAME => 'Standard Img',
        SpecRule::ATTRS => [
            Attribute::DECODING => [
                SpecRule::VALUE_CASEI => [
                    'async',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\ImgAttrs::ID,
            AttributeList\MandatorySrcOrSrcset::ID,
        ],
        SpecRule::DISALLOWED_ANCESTOR => [
            'AMP-IMG',
            'AMP-STORY',
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'img',
    ];
}
PK.3Y�S�"JJJbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Strike.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Strike.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Strike extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'STRIKE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::STRIKE,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y��Q��Jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Strong.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Strong.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Strong extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'STRONG';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::STRONG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y�	����Rbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/StyleAmpCustom.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\AtRule;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class StyleAmpCustom.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array $cdata
 * @property-read array<string> $htmlFormat
 * @property-read string $namedId
 * @property-read string $descriptiveName
 */
final class StyleAmpCustom extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'style amp-custom';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::STYLE,
        SpecRule::SPEC_NAME => 'style amp-custom',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::AMP_CUSTOM => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::TYPE => [
                SpecRule::VALUE_CASEI => [
                    'text/css',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#stylesheets',
        SpecRule::CDATA => [
            SpecRule::MAX_BYTES => 75000,
            SpecRule::MAX_BYTES_SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#maximum-size',
            SpecRule::DISALLOWED_CDATA_REGEX => [
                [
                    SpecRule::REGEX => '<!--',
                    SpecRule::ERROR_MESSAGE => 'html comments',
                ],
                [
                    SpecRule::REGEX => '(^|\W)i-amphtml-',
                    SpecRule::ERROR_MESSAGE => 'CSS i-amphtml- name prefix',
                ],
            ],
            SpecRule::CSS_SPEC => [
                SpecRule::AT_RULE_SPEC => [
                    [
                        SpecRule::NAME => AtRule::FONT_FACE,
                    ],
                    [
                        SpecRule::NAME => AtRule::KEYFRAMES,
                    ],
                    [
                        SpecRule::NAME => AtRule::MEDIA,
                        SpecRule::MEDIA_QUERY_SPEC => [
                            SpecRule::ISSUES_AS_ERROR => false,
                            SpecRule::TYPE => [
                                'all',
                                'print',
                                'screen',
                                'speech',
                                'tty',
                                'tv',
                                'projection',
                                'handheld',
                                'braille',
                                'embossesd',
                                'aural',
                                '-sass-debug-info',
                                'device-pixel-ratio',
                                'device-pixel-ratio2',
                            ],
                            SpecRule::FEATURE => [
                                'any-hover',
                                'any-pointer',
                                'aspect-ratio',
                                'color',
                                'color-gamut',
                                'color-index',
                                'device-aspect-ratio',
                                'device-height',
                                'device-width',
                                'display-mode',
                                'forced-colors',
                                'grid',
                                'height',
                                'hover',
                                'inverted-colors',
                                'light-level',
                                'max-aspect-ratio',
                                'max-color-index',
                                'max-device-aspect-ratio',
                                'max-device-height',
                                'max-device-width',
                                'max-height',
                                'max-resolution',
                                'max-width',
                                'min-aspect-ratio',
                                'min-color-index',
                                'min-device-aspect-ratio',
                                'min-device-height',
                                'min-device-width',
                                'min-height',
                                'min-resolution',
                                'min-width',
                                'monochrome',
                                'orientation',
                                'overflow-block',
                                'overflow-inline',
                                'pointer',
                                'prefers-color-scheme',
                                'prefers-contrast',
                                'prefers-reduced-motion',
                                'prefers-reduced-transparency',
                                'resolution',
                                'scan',
                                'scripting',
                                'transform-3d',
                                'update',
                                'width',
                                '--mod',
                                '--md',
                                'device-pixel-ratio',
                                'device-pixel-ratio2',
                                'high-contrast',
                                'max-device-pixel-ratio',
                                'min-device-pixel-ratio',
                                'max-device-pixel-ratio2',
                                'min-device-pixel-ratio2',
                                'min--moz-device-pixel-ratio',
                                'max--moz-device-pixel-ratio',
                            ],
                        ],
                    ],
                    [
                        SpecRule::NAME => AtRule::PAGE,
                    ],
                    [
                        SpecRule::NAME => AtRule::SUPPORTS,
                    ],
                    [
                        SpecRule::NAME => AtRule::_MOZ_DOCUMENT,
                    ],
                ],
            ],
            SpecRule::DOC_CSS_BYTES => true,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::NAMED_ID => 'STYLE_AMP_CUSTOM',
        SpecRule::DESCRIPTIVE_NAME => 'style amp-custom',
    ];
}
PK.3Y�*��Ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/StyleAmpCustomAmp4ads.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\AtRule;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class StyleAmpCustomAmp4ads.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array $cdata
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class StyleAmpCustomAmp4ads extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'style amp-custom (AMP4ADS)';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::STYLE,
        SpecRule::SPEC_NAME => 'style amp-custom (AMP4ADS)',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::AMP_CUSTOM => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::TYPE => [
                SpecRule::VALUE_CASEI => [
                    'text/css',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/a4a_spec/#css',
        SpecRule::CDATA => [
            SpecRule::MAX_BYTES => 20000,
            SpecRule::MAX_BYTES_SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#maximum-size',
            SpecRule::DISALLOWED_CDATA_REGEX => [
                [
                    SpecRule::REGEX => '<!--',
                    SpecRule::ERROR_MESSAGE => 'html comments',
                ],
                [
                    SpecRule::REGEX => '(^|\W)i-amphtml-',
                    SpecRule::ERROR_MESSAGE => 'CSS i-amphtml- name prefix',
                ],
            ],
            SpecRule::CSS_SPEC => [
                SpecRule::AT_RULE_SPEC => [
                    [
                        SpecRule::NAME => AtRule::FONT_FACE,
                    ],
                    [
                        SpecRule::NAME => AtRule::KEYFRAMES,
                    ],
                    [
                        SpecRule::NAME => AtRule::MEDIA,
                        SpecRule::MEDIA_QUERY_SPEC => [
                            SpecRule::ISSUES_AS_ERROR => false,
                            SpecRule::TYPE => [
                                'all',
                                'print',
                                'screen',
                                'speech',
                            ],
                            SpecRule::FEATURE => [
                                'width',
                                'height',
                                'aspect-ratio',
                                'orientation',
                                'resolution',
                            ],
                        ],
                    ],
                    [
                        SpecRule::NAME => AtRule::SUPPORTS,
                    ],
                ],
                SpecRule::VALIDATE_AMP4ADS => true,
            ],
            SpecRule::DOC_CSS_BYTES => true,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4ADS,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'style amp-custom',
    ];
}
PK.3Y��X=[[[bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/StyleAmpCustomAmp4email.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\AtRule;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class StyleAmpCustomAmp4email.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array $attrs
 * @property-read string $specUrl
 * @property-read array $cdata
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $disabledBy
 * @property-read string $descriptiveName
 */
final class StyleAmpCustomAmp4email extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'style amp-custom (AMP4EMAIL)';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::STYLE,
        SpecRule::SPEC_NAME => 'style amp-custom (AMP4EMAIL)',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::AMP_CUSTOM => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::TYPE => [
                SpecRule::VALUE_CASEI => [
                    'text/css',
                ],
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-css',
        SpecRule::CDATA => [
            SpecRule::MAX_BYTES => 75000,
            SpecRule::MAX_BYTES_SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#maximum-size',
            SpecRule::DISALLOWED_CDATA_REGEX => [
                [
                    SpecRule::REGEX => '<!--',
                    SpecRule::ERROR_MESSAGE => 'html comments',
                ],
                [
                    SpecRule::REGEX => '(^|\W)i-amphtml-',
                    SpecRule::ERROR_MESSAGE => 'CSS i-amphtml- name prefix',
                ],
            ],
            SpecRule::CSS_SPEC => [
                SpecRule::AT_RULE_SPEC => [
                    [
                        SpecRule::NAME => AtRule::MEDIA,
                        SpecRule::MEDIA_QUERY_SPEC => [
                            SpecRule::ISSUES_AS_ERROR => true,
                            SpecRule::TYPE => [
                                'all',
                                'screen',
                            ],
                            SpecRule::FEATURE => [
                                'device-width',
                                'hover',
                                'max-device-width',
                                'max-resolution',
                                'max-width',
                                'min-device-width',
                                'min-resolution',
                                'min-width',
                                'orientation',
                                'pointer',
                                'resolution',
                                'width',
                            ],
                        ],
                    ],
                    [
                        SpecRule::NAME => AtRule::PAGE,
                    ],
                ],
            ],
            SpecRule::DOC_CSS_BYTES => true,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4EMAIL,
        ],
        SpecRule::DISABLED_BY => [
            Attribute::DATA_CSS_STRICT,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'style amp-custom',
    ];
}
PK.3Y�ٟ�--[bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/StyleAmpCustomCssStrict.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\AtRule;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class StyleAmpCustomCssStrict.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array $attrs
 * @property-read string $specUrl
 * @property-read array $cdata
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $enabledBy
 * @property-read string $descriptiveName
 */
final class StyleAmpCustomCssStrict extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'style amp-custom (css-strict)';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::STYLE,
        SpecRule::SPEC_NAME => 'style amp-custom (css-strict)',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::AMP_CUSTOM => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    '',
                ],
            ],
            Attribute::TYPE => [
                SpecRule::VALUE_CASEI => [
                    'text/css',
                ],
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-css',
        SpecRule::CDATA => [
            SpecRule::MAX_BYTES => 75000,
            SpecRule::MAX_BYTES_SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#maximum-size',
            SpecRule::DISALLOWED_CDATA_REGEX => [
                [
                    SpecRule::REGEX => '<!--',
                    SpecRule::ERROR_MESSAGE => 'html comments',
                ],
                [
                    SpecRule::REGEX => '(^|\W)i-amphtml-',
                    SpecRule::ERROR_MESSAGE => 'CSS i-amphtml- name prefix',
                ],
            ],
            SpecRule::CSS_SPEC => [
                SpecRule::AT_RULE_SPEC => [
                    [
                        SpecRule::NAME => AtRule::MEDIA,
                        SpecRule::MEDIA_QUERY_SPEC => [
                            SpecRule::ISSUES_AS_ERROR => true,
                            SpecRule::TYPE => [
                                'all',
                                'screen',
                            ],
                            SpecRule::FEATURE => [
                                'device-width',
                                'hover',
                                'max-device-width',
                                'max-resolution',
                                'max-width',
                                'min-device-width',
                                'min-resolution',
                                'min-width',
                                'orientation',
                                'pointer',
                                'resolution',
                                'width',
                            ],
                        ],
                    ],
                ],
                SpecRule::SELECTOR_SPEC => [
                    SpecRule::ATTRIBUTE_NAME => [
                        'active',
                        'alt',
                        'autocomplete',
                        'autoexpand',
                        'checked',
                        'class',
                        'controls',
                        'dir',
                        'disabled',
                        'expanded',
                        'fallback',
                        'fetch-error',
                        'height',
                        'hidden',
                        'id',
                        'items',
                        'layout',
                        'name',
                        'noloading',
                        'novalidate',
                        'open',
                        'option',
                        'overflow',
                        'placeholder',
                        'readonly',
                        'required',
                        'role',
                        'scrollable',
                        'selected',
                        'side',
                        'sizes',
                        'submit-error',
                        'submit-success',
                        'submitting',
                        'title',
                        'type',
                        'value',
                        'width',
                    ],
                    SpecRule::PSEUDO_CLASS => [
                        'active',
                        'checked',
                        'default',
                        'disabled',
                        'empty',
                        'enabled',
                        'first-child',
                        'first-of-type',
                        'focus',
                        'focus-within',
                        'hover',
                        'in-range',
                        'indeterminate',
                        'invalid',
                        'last-child',
                        'last-of-type',
                        'not',
                        'nth-child',
                        'nth-last-child',
                        'nth-last-of-type',
                        'nth-of-type',
                        'only-child',
                        'only-of-type',
                        'optional',
                        'out-of-range',
                        'read-only',
                        'read-write',
                        'required',
                        'valid',
                    ],
                ],
            ],
            SpecRule::DOC_CSS_BYTES => true,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP4EMAIL,
        ],
        SpecRule::ENABLED_BY => [
            Attribute::DATA_CSS_STRICT,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'style amp-custom',
    ];
}
PK.3Y��FFF]bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/StyleAmpCustomLengthCheck.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class StyleAmpCustomLengthCheck.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read array<int> $cdata
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class StyleAmpCustomLengthCheck extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'style amp-custom-length-check';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::STYLE,
        SpecRule::SPEC_NAME => 'style amp-custom-length-check',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::AMP_CUSTOM_LENGTH_CHECK => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    '',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_DISPATCH',
            ],
            Attribute::TYPE => [
                SpecRule::VALUE_CASEI => [
                    'text/css',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
        ],
        SpecRule::CDATA => [
            SpecRule::MAX_BYTES => -1,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'style amp-custom-length-check',
    ];
}
PK.3Y-QrnaaUbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/StyleAmpKeyframes.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\AtRule;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class StyleAmpKeyframes.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array $cdata
 * @property-read array<string> $htmlFormat
 * @property-read bool $mandatoryLastChild
 * @property-read string $descriptiveName
 */
final class StyleAmpKeyframes extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'style[amp-keyframes]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::STYLE,
        SpecRule::SPEC_NAME => 'style[amp-keyframes]',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::BODY,
        SpecRule::ATTRS => [
            Attribute::AMP_KEYFRAMES => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    '',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_DISPATCH',
            ],
        ],
        SpecRule::CDATA => [
            SpecRule::MAX_BYTES => 500000,
            SpecRule::MAX_BYTES_SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#keyframes-stylesheet',
            SpecRule::CSS_SPEC => [
                SpecRule::AT_RULE_SPEC => [
                    [
                        SpecRule::NAME => AtRule::KEYFRAMES,
                    ],
                    [
                        SpecRule::NAME => AtRule::MEDIA,
                        SpecRule::MEDIA_QUERY_SPEC => [
                            SpecRule::ISSUES_AS_ERROR => false,
                            SpecRule::TYPE => [
                                'all',
                                'print',
                                'screen',
                                'speech',
                                'tty',
                                'tv',
                                'projection',
                                'handheld',
                                'braille',
                                'embossesd',
                                'aural',
                                '-sass-debug-info',
                                'device-pixel-ratio',
                                'device-pixel-ratio2',
                            ],
                            SpecRule::FEATURE => [
                                'any-hover',
                                'any-pointer',
                                'aspect-ratio',
                                'color',
                                'color-gamut',
                                'color-index',
                                'device-aspect-ratio',
                                'device-height',
                                'device-width',
                                'display-mode',
                                'forced-colors',
                                'grid',
                                'height',
                                'hover',
                                'inverted-colors',
                                'light-level',
                                'monochrome',
                                'max-aspect-ratio',
                                'max-color-index',
                                'max-device-aspect-ratio',
                                'max-device-height',
                                'max-device-width',
                                'max-height',
                                'max-resolution',
                                'max-width',
                                'min-aspect-ratio',
                                'min-color-index',
                                'min-device-aspect-ratio',
                                'min-device-height',
                                'min-device-width',
                                'min-height',
                                'min-resolution',
                                'min-width',
                                'orientation',
                                'overflow-block',
                                'overflow-inline',
                                'pointer',
                                'prefers-color-scheme',
                                'prefers-contrast',
                                'prefers-reduced-motion',
                                'prefers-reduced-transparency',
                                'resolution',
                                'scan',
                                'scripting',
                                'transform-3d',
                                'update',
                                'width',
                                '--mod',
                                '--md',
                                'device-pixel-ratio',
                                'device-pixel-ratio2',
                                'high-contrast',
                                'aspect-ratio',
                                'max-device-pixel-ratio',
                                'min-device-pixel-ratio',
                                'max-device-pixel-ratio2',
                                'min-device-pixel-ratio2',
                            ],
                        ],
                    ],
                    [
                        SpecRule::NAME => AtRule::SUPPORTS,
                    ],
                ],
                SpecRule::VALIDATE_KEYFRAMES => true,
                SpecRule::DECLARATION => [
                    'animation-timing-function',
                    'offset-distance',
                    'opacity',
                    'transform',
                    'visibility',
                ],
            ],
            SpecRule::DOC_CSS_BYTES => false,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::MANDATORY_LAST_CHILD => true,
        SpecRule::DESCRIPTIVE_NAME => 'style[amp-keyframes]',
    ];
}
PK.3Y�A�\..Tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/StyleAmpNoscript.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\AtRule;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class StyleAmpNoscript.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array $cdata
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 * @property-read string $descriptiveName
 */
final class StyleAmpNoscript extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'style amp-noscript';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::STYLE,
        SpecRule::SPEC_NAME => 'style amp-noscript',
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::NOSCRIPT,
        SpecRule::ATTRS => [
            Attribute::AMP_NOSCRIPT => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    '',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_DISPATCH',
            ],
            Attribute::TYPE => [
                SpecRule::VALUE_CASEI => [
                    'text/css',
                ],
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://github.com/ampproject/amphtml/issues/20609',
        SpecRule::CDATA => [
            SpecRule::MAX_BYTES => 10000,
            SpecRule::MAX_BYTES_SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#maximum-size',
            SpecRule::DISALLOWED_CDATA_REGEX => [
                [
                    SpecRule::REGEX => '<!--',
                    SpecRule::ERROR_MESSAGE => 'html comments',
                ],
                [
                    SpecRule::REGEX => '(^|\W)i-amphtml-',
                    SpecRule::ERROR_MESSAGE => 'CSS i-amphtml- name prefix',
                ],
            ],
            SpecRule::CSS_SPEC => [
                SpecRule::AT_RULE_SPEC => [
                    [
                        SpecRule::NAME => AtRule::MEDIA,
                        SpecRule::MEDIA_QUERY_SPEC => [
                            SpecRule::ISSUES_AS_ERROR => false,
                            SpecRule::TYPE => [
                                'all',
                                'print',
                                'screen',
                                'speech',
                                'tty',
                                'tv',
                                'projection',
                                'handheld',
                                'braille',
                                'embossesd',
                                'aural',
                            ],
                            SpecRule::FEATURE => [
                                'any-hover',
                                'any-pointer',
                                'aspect-ratio',
                                'color',
                                'color-gamut',
                                'color-index',
                                'device-aspect-ratio',
                                'device-height',
                                'device-width',
                                'display-mode',
                                'forced-colors',
                                'grid',
                                'height',
                                'hover',
                                'inverted-colors',
                                'light-level',
                                'max-aspect-ratio',
                                'max-color-index',
                                'max-device-aspect-ratio',
                                'max-device-height',
                                'max-device-width',
                                'max-height',
                                'max-resolution',
                                'max-width',
                                'min-aspect-ratio',
                                'min-color-index',
                                'min-device-aspect-ratio',
                                'min-device-height',
                                'min-device-width',
                                'min-height',
                                'min-resolution',
                                'min-width',
                                'monochrome',
                                'orientation',
                                'overflow-block',
                                'overflow-inline',
                                'pointer',
                                'prefers-color-scheme',
                                'prefers-contrast',
                                'prefers-reduced-motion',
                                'prefers-reduced-transparency',
                                'resolution',
                                'scan',
                                'scripting',
                                'transform-3d',
                                'update',
                                'width',
                            ],
                        ],
                    ],
                    [
                        SpecRule::NAME => AtRule::PAGE,
                    ],
                    [
                        SpecRule::NAME => AtRule::SUPPORTS,
                    ],
                    [
                        SpecRule::NAME => AtRule::_MOZ_DOCUMENT,
                    ],
                ],
                SpecRule::ALLOW_IMPORTANT => true,
            ],
            SpecRule::DOC_CSS_BYTES => true,
        ],
        SpecRule::MANDATORY_ANCESTOR => Element::HEAD,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'style amp-noscript',
    ];
}
PK.3Yf1
	
	^bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/StyleAmpRuntimeTransformed.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class StyleAmpRuntimeTransformed.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read bool $mandatory
 * @property-read bool $unique
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $enabledBy
 * @property-read string $descriptiveName
 */
final class StyleAmpRuntimeTransformed extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'style[amp-runtime] (transformed)';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::STYLE,
        SpecRule::SPEC_NAME => 'style[amp-runtime] (transformed)',
        SpecRule::MANDATORY => true,
        SpecRule::UNIQUE => true,
        SpecRule::MANDATORY_PARENT => Element::HEAD,
        SpecRule::ATTRS => [
            Attribute::AMP_RUNTIME => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    '',
                ],
                SpecRule::DISPATCH_KEY => 'NAME_VALUE_PARENT_DISPATCH',
            ],
            Attribute::I_AMPHTML_VERSION => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_REGEX => '^\d{15}|latest$',
            ],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NonceAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#stylesheets',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::ENABLED_BY => [
            Attribute::TRANSFORMED,
        ],
        SpecRule::DESCRIPTIVE_NAME => 'style[amp-runtime]',
    ];
}
PK.3Y .�*zzGbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Sub.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Sub.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Sub extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SUB';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SUB,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y�
M��abunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/SubscriptionsScriptCiphertext.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class SubscriptionsScriptCiphertext.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<array> $attrs
 * @property-read array<array<array<string>>> $cdata
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class SubscriptionsScriptCiphertext extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'subscriptions script ciphertext';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SCRIPT,
        SpecRule::SPEC_NAME => 'subscriptions script ciphertext',
        SpecRule::MANDATORY_PARENT => 'subscriptions-section content swg_amp_cache_nonce',
        SpecRule::ATTRS => [
            Attribute::CIPHERTEXT => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_DISPATCH',
            ],
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE_CASEI => [
                    'application/octet-stream',
                ],
            ],
        ],
        SpecRule::CDATA => [
            SpecRule::DISALLOWED_CDATA_REGEX => [
                [
                    SpecRule::REGEX => '<!--',
                    SpecRule::ERROR_MESSAGE => 'html comments',
                ],
            ],
        ],
        SpecRule::MANDATORY_ANCESTOR => Element::BODY,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Y._gQ��obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/SubscriptionsSectionContentSwgAmpCacheNonce.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class SubscriptionsSectionContentSwgAmpCacheNonce.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $satisfies
 * @property-read array<string> $requires
 */
final class SubscriptionsSectionContentSwgAmpCacheNonce extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'subscriptions-section content swg_amp_cache_nonce';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SECTION,
        SpecRule::SPEC_NAME => 'subscriptions-section content swg_amp_cache_nonce',
        SpecRule::ATTRS => [
            Attribute::ENCRYPTED => [
                SpecRule::MANDATORY => true,
                SpecRule::DISPATCH_KEY => 'NAME_DISPATCH',
            ],
            Attribute::SUBSCRIPTIONS_SECTION => [
                SpecRule::VALUE_CASEI => [
                    'content',
                ],
            ],
            Attribute::SWG_AMP_CACHE_NONCE => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::MANDATORY_ANCESTOR => Element::BODY,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
        SpecRule::SATISFIES => [
            'subscriptions-section content swg_amp_cache_nonce',
        ],
        SpecRule::REQUIRES => [
            'span swg_amp_cache_nonce',
        ],
    ];
}
PK.3Y��E��Kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Summary.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Summary.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $mandatoryParent
 * @property-read array<string> $htmlFormat
 */
final class Summary extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SUMMARY';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SUMMARY,
        SpecRule::MANDATORY_PARENT => Element::DETAILS,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Yn�zzGbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Sup.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Sup.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Sup extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SUP';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SUP,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y72���Gbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Svg.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Svg.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 */
final class Svg extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SVG';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SVG,
        SpecRule::ATTRS => [
            Attribute::CONTENTSCRIPTTYPE => [],
            Attribute::CONTENTSTYLETYPE => [],
            Attribute::EXTERNALRESOURCESREQUIRED => [],
            Attribute::HEIGHT => [],
            Attribute::PRESERVEASPECTRATIO => [],
            Attribute::VERSION => [
                SpecRule::VALUE => [
                    '1.0',
                    '1.1',
                ],
            ],
            Attribute::VIEWBOX => [],
            Attribute::WIDTH => [],
            Attribute::X => [],
            Attribute::Y => [],
            Attribute::ZOOMANDPAN => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgConditionalProcessingAttributes::ID,
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y�b���Lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/SvgTitle.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class SvgTitle.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class SvgTitle extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'svg title';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::TITLE,
        SpecRule::SPEC_NAME => 'svg title',
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3YIҷ�Kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Switch_.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Switch_.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Switch_ extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SWITCH';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SWITCH_,
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgConditionalProcessingAttributes::ID,
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y� g��Jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Symbol.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Symbol.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Symbol extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'SYMBOL';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SYMBOL,
        SpecRule::ATTRS => [
            Attribute::EXTERNALRESOURCESREQUIRED => [],
            Attribute::HEIGHT => [],
            Attribute::PRESERVEASPECTRATIO => [],
            Attribute::VIEWBOX => [],
            Attribute::WIDTH => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3YqTi���Ibunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Table.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Table.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $htmlFormat
 */
final class Table extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'TABLE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::TABLE,
        SpecRule::ATTRS => [
            Attribute::ALIGN => [],
            Attribute::BGCOLOR => [],
            Attribute::BORDER => [
                SpecRule::VALUE => [
                    '0',
                    '1',
                ],
            ],
            Attribute::CELLPADDING => [],
            Attribute::CELLSPACING => [],
            Attribute::SORTABLE => [
                SpecRule::DISABLED_BY => [
                    Attribute::AMP4EMAIL,
                ],
            ],
            Attribute::WIDTH => [],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y��i(��Ibunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Tbody.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Tbody.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Tbody extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'TBODY';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::TBODY,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3YT�J

Fbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Td.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Td.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $htmlFormat
 */
final class Td extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'TD';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::TD,
        SpecRule::ATTRS => [
            Attribute::ALIGN => [],
            Attribute::BGCOLOR => [],
            Attribute::COLSPAN => [],
            Attribute::HEADERS => [],
            Attribute::HEIGHT => [],
            Attribute::ROWSPAN => [],
            Attribute::VALIGN => [],
            Attribute::WIDTH => [],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y�N���Lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Template.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Template.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $disallowedAncestor
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class Template extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'TEMPLATE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::TEMPLATE,
        SpecRule::ATTRS => [
            Attribute::ID => [
                SpecRule::DISALLOWED_VALUE_REGEX => '(^|\s)(__amp_\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\S*|\$p|\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|AMP|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|i-amphtml-\S*|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\s|$)',
                SpecRule::ADD_VALUE_TO_SET => 'TEMPLATE_IDS',
            ],
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'amp-mustache',
                ],
            ],
        ],
        SpecRule::DISALLOWED_ANCESTOR => [
            'TEMPLATE',
            'AMP-DATE-PICKER',
            'AMP-STORY-AUTO-ADS',
            'FORM DIV [submit-success][template]',
            'FORM DIV [submit-error][template]',
            'FORM DIV [submitting][template]',
            'FORM DIV [verify-error][template]',
        ],
        SpecRule::MANDATORY_ANCESTOR => Element::BODY,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::MUSTACHE,
        ],
    ];
}
PK.3Y��*�Ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/TemplateAmp4email.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class TemplateAmp4email.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array $attrs
 * @property-read array<string> $disallowedAncestor
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 * @property-read array<string> $requiresExtension
 */
final class TemplateAmp4email extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'TEMPLATE (AMP4EMAIL)';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::TEMPLATE,
        SpecRule::SPEC_NAME => 'TEMPLATE (AMP4EMAIL)',
        SpecRule::ATTRS => [
            Attribute::ID => [
                SpecRule::DISALLOWED_VALUE_REGEX => '(^|\s)(__amp_\S*|__count__|__defineGetter__|__defineSetter__|__lookupGetter__|__lookupSetter__|__noSuchMethod__|__parent__|__proto__|__AMP_\S*|\$p|\$proxy|acceptCharset|addEventListener|appendChild|assignedSlot|attachShadow|AMP|baseURI|checkValidity|childElementCount|childNodes|classList|className|clientHeight|clientLeft|clientTop|clientWidth|compareDocumentPosition|computedName|computedRole|contentEditable|createShadowRoot|enqueAction|firstChild|firstElementChild|getAnimations|getAttribute|getAttributeNS|getAttributeNode|getAttributeNodeNS|getBoundingClientRect|getClientRects|getDestinationInsertionPoints|getElementsByClassName|getElementsByTagName|getElementsByTagNameNS|getRootNode|hasAttribute|hasAttributeNS|hasAttributes|hasChildNodes|hasPointerCapture|i-amphtml-\S*|innerHTML|innerText|inputMode|insertAdjacentElement|insertAdjacentHTML|insertAdjacentText|isContentEditable|isDefaultNamespace|isEqualNode|isSameNode|lastChild|lastElementChild|lookupNamespaceURI|namespaceURI|nextElementSibling|nextSibling|nodeName|nodeType|nodeValue|offsetHeight|offsetLeft|offsetParent|offsetTop|offsetWidth|outerHTML|outerText|ownerDocument|parentElement|parentNode|previousElementSibling|previousSibling|querySelector|querySelectorAll|releasePointerCapture|removeAttribute|removeAttributeNS|removeAttributeNode|removeChild|removeEventListener|replaceChild|reportValidity|requestPointerLock|scrollHeight|scrollIntoView|scrollIntoViewIfNeeded|scrollLeft|scrollWidth|setAttribute|setAttributeNS|setAttributeNode|setAttributeNodeNS|setPointerCapture|shadowRoot|styleMap|tabIndex|tagName|textContent|toString|valueOf|(webkit|ms|moz|o)dropzone|(webkit|moz|ms|o)MatchesSelector|(webkit|moz|ms|o)RequestFullScreen|(webkit|moz|ms|o)RequestFullscreen)(\s|$)',
                SpecRule::ADD_VALUE_TO_SET => 'TEMPLATE_IDS',
            ],
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
                SpecRule::VALUE => [
                    'amp-mustache',
                ],
            ],
        ],
        SpecRule::DISALLOWED_ANCESTOR => [
            'TEMPLATE (AMP4EMAIL)',
            'AMP-DATE-PICKER',
            'FORM DIV [submit-success][template]',
            'FORM DIV [submit-error][template]',
            'FORM DIV [submitting][template]',
            'FORM DIV [verify-error][template]',
            'FORM DIV [submitting]',
        ],
        SpecRule::MANDATORY_ANCESTOR => Element::BODY,
        SpecRule::HTML_FORMAT => [
            Format::AMP4EMAIL,
        ],
        SpecRule::REQUIRES_EXTENSION => [
            Extension::MUSTACHE,
        ],
    ];
}
PK.3Y�qX��Hbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Text.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Text.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Text extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'TEXT';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::TEXT,
        SpecRule::ATTRS => [
            Attribute::DX => [],
            Attribute::DY => [],
            Attribute::EXTERNALRESOURCESREQUIRED => [],
            Attribute::LENGTHADJUST => [],
            Attribute::ROTATE => [],
            Attribute::TEXT_ANCHOR => [],
            Attribute::TEXTLENGTH => [],
            Attribute::TRANSFORM => [],
            Attribute::X => [],
            Attribute::Y => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgConditionalProcessingAttributes::ID,
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y<�:Lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Textarea.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Textarea.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 */
final class Textarea extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'TEXTAREA';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::TEXTAREA,
        SpecRule::ATTRS => [
            Attribute::AUTOCOMPLETE => [],
            Attribute::AUTOEXPAND => [
                SpecRule::REQUIRES_EXTENSION => [
                    Extension::FORM,
                ],
            ],
            Attribute::AUTOFOCUS => [
                SpecRule::DISABLED_BY => [
                    Attribute::AMP4EMAIL,
                ],
            ],
            Attribute::COLS => [],
            Attribute::DISABLED => [],
            Attribute::MAXLENGTH => [],
            Attribute::MINLENGTH => [],
            Attribute::NO_VERIFY => [
                SpecRule::VALUE => [
                    '',
                ],
                SpecRule::DISABLED_BY => [
                    Attribute::AMP4EMAIL,
                ],
            ],
            Attribute::PATTERN => [],
            Attribute::PLACEHOLDER => [],
            Attribute::READONLY => [],
            Attribute::REQUIRED => [],
            Attribute::ROWS => [],
            Attribute::SELECTIONDIRECTION => [
                SpecRule::DISABLED_BY => [
                    Attribute::AMP4EMAIL,
                ],
            ],
            Attribute::SELECTIONEND => [
                SpecRule::DISABLED_BY => [
                    Attribute::AMP4EMAIL,
                ],
            ],
            Attribute::SELECTIONSTART => [
                SpecRule::DISABLED_BY => [
                    Attribute::AMP4EMAIL,
                ],
            ],
            Attribute::SPELLCHECK => [],
            Attribute::WRAP => [],
            '[autocomplete]' => [],
            '[autofocus]' => [
                SpecRule::DISABLED_BY => [
                    Attribute::AMP4EMAIL,
                ],
            ],
            '[cols]' => [],
            '[defaulttext]' => [],
            '[disabled]' => [],
            '[maxlength]' => [],
            '[minlength]' => [],
            '[pattern]' => [],
            '[placeholder]' => [],
            '[readonly]' => [],
            '[required]' => [],
            '[rows]' => [],
            '[selectiondirection]' => [
                SpecRule::DISABLED_BY => [
                    Attribute::AMP4EMAIL,
                ],
            ],
            '[selectionend]' => [
                SpecRule::DISABLED_BY => [
                    Attribute::AMP4EMAIL,
                ],
            ],
            '[selectionstart]' => [
                SpecRule::DISABLED_BY => [
                    Attribute::AMP4EMAIL,
                ],
            ],
            '[spellcheck]' => [],
            '[wrap]' => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\NameAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-form/',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y12�Lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Textpath.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Textpath.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Textpath extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'TEXTPATH';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::TEXTPATH,
        SpecRule::ATTRS => [
            Attribute::EXTERNALRESOURCESREQUIRED => [],
            Attribute::METHOD => [],
            Attribute::SPACING => [],
            Attribute::STARTOFFSET => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgConditionalProcessingAttributes::ID,
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
            AttributeList\SvgXlinkAttributes::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y����Ibunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Tfoot.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Tfoot.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Tfoot extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'TFOOT';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::TFOOT,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Yq����Fbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Th.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Th.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $htmlFormat
 */
final class Th extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'TH';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::TH,
        SpecRule::ATTRS => [
            Attribute::ABBR => [],
            Attribute::ALIGN => [],
            Attribute::BGCOLOR => [],
            Attribute::COLSPAN => [],
            Attribute::HEADERS => [],
            Attribute::HEIGHT => [],
            Attribute::ROWSPAN => [],
            Attribute::SCOPE => [],
            Attribute::SORTED => [
                SpecRule::DISABLED_BY => [
                    Attribute::AMP4EMAIL,
                ],
            ],
            Attribute::VALIGN => [],
            Attribute::WIDTH => [],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y�����Ibunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Thead.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Thead.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Thead extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'THEAD';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::THEAD,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y31����Hbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Time.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Time.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read array<string> $htmlFormat
 */
final class Time extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'TIME';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::TIME,
        SpecRule::ATTRS => [
            Attribute::DATETIME => [],
            Attribute::PUBDATE => [
                SpecRule::VALUE => [
                    '',
                ],
            ],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y_��Ibunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Title.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Title.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array> $attrs
 * @property-read array<string> $htmlFormat
 */
final class Title extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'title';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::TITLE,
        SpecRule::SPEC_NAME => 'title',
        SpecRule::ATTRS => [
            '[text]' => [],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y촛%IIRbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/TitleAmp4email.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class TitleAmp4email.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read array<array> $attrs
 * @property-read string $deprecation
 * @property-read string $deprecationUrl
 * @property-read array<string> $htmlFormat
 */
final class TitleAmp4email extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'title [AMP4EMAIL]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::TITLE,
        SpecRule::SPEC_NAME => 'title [AMP4EMAIL]',
        SpecRule::ATTRS => [
            '[text]' => [],
        ],
        SpecRule::DEPRECATION => 'Title tags in email have no meaning. This tag may become invalid in the future.',
        SpecRule::DEPRECATION_URL => 'https://github.com/ampproject/amphtml/issues/22318',
        SpecRule::HTML_FORMAT => [
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Yt�:_wwFbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Tr.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Tr.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $htmlFormat
 */
final class Tr extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'TR';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::TR,
        SpecRule::ATTRS => [
            Attribute::ALIGN => [],
            Attribute::BGCOLOR => [],
            Attribute::HEIGHT => [],
            Attribute::VALIGN => [],
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y�d!��Hbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Tref.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Tref.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Tref extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'TREF';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::TREF,
        SpecRule::ATTRS => [
            Attribute::EXTERNALRESOURCESREQUIRED => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgConditionalProcessingAttributes::ID,
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
            AttributeList\SvgXlinkAttributes::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y/�*PPIbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Tspan.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Tspan.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Tspan extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'TSPAN';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::TSPAN,
        SpecRule::ATTRS => [
            Attribute::DX => [],
            Attribute::DY => [],
            Attribute::EXTERNALRESOURCESREQUIRED => [],
            Attribute::LENGTHADJUST => [],
            Attribute::ROTATE => [],
            Attribute::TEXTLENGTH => [],
            Attribute::X => [],
            Attribute::Y => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgConditionalProcessingAttributes::ID,
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y>�Y�::Fbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Tt.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Tt.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Tt extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'TT';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::TT,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3Yiv�rrEbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/U.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class U.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class U extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'U';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::U,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y��0vvFbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Ul.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Ul.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Ul extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'UL';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::UL,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y
Pv33Hbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Use_.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Use_.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Use_ extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'USE';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::USE_,
        SpecRule::ATTRS => [
            Attribute::EXTERNALRESOURCESREQUIRED => [],
            Attribute::HEIGHT => [],
            Attribute::TRANSFORM => [],
            Attribute::WIDTH => [],
            Attribute::X => [],
            Attribute::Y => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgConditionalProcessingAttributes::ID,
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgPresentationAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
            AttributeList\SvgXlinkAttributes::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y���,}}Hbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Var_.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Var_.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Var_ extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'VAR';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::VAR_,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y+�����Ibunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Video.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Extension;
use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Video.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array $attrs
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read string $mandatoryAncestorSuggestedAlternative
 * @property-read array<string> $htmlFormat
 */
final class Video extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'VIDEO';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::VIDEO,
        SpecRule::ATTRS => [
            Attribute::AUTOPLAY => [],
            Attribute::CONTROLS => [],
            Attribute::HEIGHT => [],
            Attribute::LOOP => [],
            Attribute::MUTED => [
                SpecRule::DEPRECATION => 'autoplay',
                SpecRule::DEPRECATION_URL => 'https://amp.dev/documentation/components/amp-video/',
            ],
            Attribute::PLAYSINLINE => [],
            Attribute::POSTER => [],
            Attribute::PRELOAD => [],
            Attribute::SRC => [
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::DATA,
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => false,
                ],
            ],
            Attribute::WIDTH => [],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-video/',
        SpecRule::MANDATORY_ANCESTOR => Element::NOSCRIPT,
        SpecRule::MANDATORY_ANCESTOR_SUGGESTED_ALTERNATIVE => Extension::VIDEO,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
        ],
    ];
}
PK.3YKQ�))Obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/VideoSource.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Protocol;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class VideoSource.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array $attrs
 * @property-read string $specUrl
 * @property-read array<string> $htmlFormat
 */
final class VideoSource extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'video > source';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::SOURCE,
        SpecRule::SPEC_NAME => 'video > source',
        SpecRule::MANDATORY_PARENT => Element::VIDEO,
        SpecRule::ATTRS => [
            Attribute::MEDIA => [],
            Attribute::SRC => [
                SpecRule::MANDATORY => true,
                SpecRule::DISALLOWED_VALUE_REGEX => '__amp_source_origin',
                SpecRule::VALUE_URL => [
                    SpecRule::PROTOCOL => [
                        Protocol::HTTPS,
                    ],
                    SpecRule::ALLOW_RELATIVE => true,
                ],
            ],
            Attribute::TYPE => [
                SpecRule::MANDATORY => true,
            ],
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/components/amp-video/',
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Yk�n���Nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/VideoTrack.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class VideoTrack.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 */
final class VideoTrack extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'video > track';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::TRACK,
        SpecRule::SPEC_NAME => 'video > track',
        SpecRule::MANDATORY_PARENT => Element::VIDEO,
        SpecRule::ATTR_LISTS => [
            AttributeList\TrackAttrsNoSubtitles::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y (N[bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/VideoTrackKindSubtitles.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class VideoTrackKindSubtitles.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read string $specName
 * @property-read string $mandatoryParent
 * @property-read array<string> $attrLists
 * @property-read array<string> $htmlFormat
 */
final class VideoTrackKindSubtitles extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'video > track[kind=subtitles]';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::TRACK,
        SpecRule::SPEC_NAME => 'video > track[kind=subtitles]',
        SpecRule::MANDATORY_PARENT => Element::VIDEO,
        SpecRule::ATTR_LISTS => [
            AttributeList\TrackAttrsSubtitles::ID,
        ],
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y�i���Hbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/View.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class View.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class View extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'VIEW';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::VIEW,
        SpecRule::ATTRS => [
            Attribute::EXTERNALRESOURCESREQUIRED => [],
            Attribute::PRESERVEASPECTRATIO => [],
            Attribute::VIEWBOX => [],
            Attribute::VIEWTARGET => [],
            Attribute::ZOOMANDPAN => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y#�n�FFIbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Vkern.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Attribute;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\AttributeList;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Vkern.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<array> $attrs
 * @property-read array<string> $attrLists
 * @property-read string $specUrl
 * @property-read string $mandatoryAncestor
 * @property-read array<string> $htmlFormat
 */
final class Vkern extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'VKERN';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::VKERN,
        SpecRule::ATTRS => [
            Attribute::G1 => [],
            Attribute::G2 => [],
            Attribute::K => [],
            Attribute::U1 => [],
            Attribute::U2 => [],
        ],
        SpecRule::ATTR_LISTS => [
            AttributeList\SvgCoreAttributes::ID,
            AttributeList\SvgStyleAttr::ID,
        ],
        SpecRule::SPEC_URL => 'https://amp.dev/documentation/guides-and-tutorials/learn/spec/amphtml/#svg',
        SpecRule::MANDATORY_ANCESTOR => Element::SVG,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
        ],
    ];
}
PK.3Y���zzGbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Wbr.php<?php

/**
 * DO NOT EDIT!
 * This file was automatically generated via bin/generate-validator-spec.php.
 */

namespace AmpProject\Validator\Spec\Tag;

use AmpProject\Format;
use AmpProject\Html\Tag as Element;
use AmpProject\Validator\Spec\Identifiable;
use AmpProject\Validator\Spec\SpecRule;
use AmpProject\Validator\Spec\Tag;

/**
 * Tag class Wbr.
 *
 * @package ampproject/amp-toolbox.
 *
 * @property-read string $tagName
 * @property-read array<string> $htmlFormat
 */
final class Wbr extends Tag implements Identifiable
{
    /**
     * ID of the tag.
     *
     * @var string
     */
    const ID = 'WBR';

    /**
     * Array of spec rules.
     *
     * @var array
     */
    const SPEC = [
        SpecRule::TAG_NAME => Element::WBR,
        SpecRule::HTML_FORMAT => [
            Format::AMP,
            Format::AMP4ADS,
            Format::AMP4EMAIL,
        ],
    ];
}
PK.3Y��u����0bunyad-amp/vendor/composer/autoload_classmap.php<?php

// autoload_classmap.php @generated by Composer

$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);

return array(
    'AMP_Accessibility_Sanitizer' => $baseDir . '/includes/sanitizers/class-amp-accessibility-sanitizer.php',
    'AMP_Admin_Pointer' => $baseDir . '/includes/admin/class-amp-admin-pointer.php',
    'AMP_Admin_Pointers' => $baseDir . '/includes/admin/class-amp-admin-pointers.php',
    'AMP_Allowed_Tags_Generated' => $baseDir . '/includes/sanitizers/class-amp-allowed-tags-generated.php',
    'AMP_Audio_Sanitizer' => $baseDir . '/includes/sanitizers/class-amp-audio-sanitizer.php',
    'AMP_Auto_Lightbox_Disable_Sanitizer' => $baseDir . '/includes/sanitizers/class-amp-auto-lightbox-disable-sanitizer.php',
    'AMP_Autoloader' => $baseDir . '/includes/class-amp-autoloader.php',
    'AMP_Base_Embed_Handler' => $baseDir . '/includes/embeds/class-amp-base-embed-handler.php',
    'AMP_Base_Sanitizer' => $baseDir . '/includes/sanitizers/class-amp-base-sanitizer.php',
    'AMP_Bento_Sanitizer' => $baseDir . '/includes/sanitizers/class-amp-bento-sanitizer.php',
    'AMP_Block_Sanitizer' => $baseDir . '/includes/sanitizers/class-amp-block-sanitizer.php',
    'AMP_Block_Uniqid_Sanitizer' => $baseDir . '/includes/sanitizers/class-amp-block-uniqid-sanitizer.php',
    'AMP_Comment_Walker' => $baseDir . '/includes/class-amp-comment-walker.php',
    'AMP_Comments_Sanitizer' => $baseDir . '/includes/sanitizers/class-amp-comments-sanitizer.php',
    'AMP_Content' => $baseDir . '/includes/templates/class-amp-content.php',
    'AMP_Content_Sanitizer' => $baseDir . '/includes/templates/class-amp-content-sanitizer.php',
    'AMP_Core_Block_Handler' => $baseDir . '/includes/embeds/class-amp-core-block-handler.php',
    'AMP_Core_Theme_Sanitizer' => $baseDir . '/includes/sanitizers/class-amp-core-theme-sanitizer.php',
    'AMP_Crowdsignal_Embed_Handler' => $baseDir . '/includes/embeds/class-amp-crowdsignal-embed-handler.php',
    'AMP_Customizer_Design_Settings' => $baseDir . '/includes/settings/class-amp-customizer-design-settings.php',
    'AMP_Customizer_Settings' => $baseDir . '/includes/settings/class-amp-customizer-settings.php',
    'AMP_DOM_Utils' => $baseDir . '/includes/utils/class-amp-dom-utils.php',
    'AMP_DailyMotion_Embed_Handler' => $baseDir . '/includes/embeds/class-amp-dailymotion-embed-handler.php',
    'AMP_Dev_Mode_Sanitizer' => $baseDir . '/includes/sanitizers/class-amp-dev-mode-sanitizer.php',
    'AMP_Editor_Blocks' => $baseDir . '/includes/admin/class-amp-editor-blocks.php',
    'AMP_Embed_Sanitizer' => $baseDir . '/includes/sanitizers/class-amp-embed-sanitizer.php',
    'AMP_Facebook_Embed_Handler' => $baseDir . '/includes/embeds/class-amp-facebook-embed-handler.php',
    'AMP_Form_Sanitizer' => $baseDir . '/includes/sanitizers/class-amp-form-sanitizer.php',
    'AMP_GTag_Script_Sanitizer' => $baseDir . '/includes/sanitizers/class-amp-gtag-script-sanitizer.php',
    'AMP_Gallery_Block_Sanitizer' => $baseDir . '/includes/sanitizers/class-amp-gallery-block-sanitizer.php',
    'AMP_Gallery_Embed_Handler' => $baseDir . '/includes/embeds/class-amp-gallery-embed-handler.php',
    'AMP_HTML_Utils' => $baseDir . '/includes/utils/class-amp-html-utils.php',
    'AMP_HTTP' => $baseDir . '/includes/class-amp-http.php',
    'AMP_Iframe_Sanitizer' => $baseDir . '/includes/sanitizers/class-amp-iframe-sanitizer.php',
    'AMP_Image_Dimension_Extractor' => $baseDir . '/includes/utils/class-amp-image-dimension-extractor.php',
    'AMP_Img_Sanitizer' => $baseDir . '/includes/sanitizers/class-amp-img-sanitizer.php',
    'AMP_Imgur_Embed_Handler' => $baseDir . '/includes/embeds/class-amp-imgur-embed-handler.php',
    'AMP_Instagram_Embed_Handler' => $baseDir . '/includes/embeds/class-amp-instagram-embed-handler.php',
    'AMP_Issuu_Embed_Handler' => $baseDir . '/includes/embeds/class-amp-issuu-embed-handler.php',
    'AMP_Layout_Sanitizer' => $baseDir . '/includes/sanitizers/class-amp-layout-sanitizer.php',
    'AMP_Link_Sanitizer' => $baseDir . '/includes/sanitizers/class-amp-link-sanitizer.php',
    'AMP_Meetup_Embed_Handler' => $baseDir . '/includes/embeds/class-amp-meetup-embed-handler.php',
    'AMP_Meta_Sanitizer' => $baseDir . '/includes/sanitizers/class-amp-meta-sanitizer.php',
    'AMP_Native_Img_Attributes_Sanitizer' => $baseDir . '/includes/sanitizers/class-amp-native-img-attributes-sanitizer.php',
    'AMP_Nav_Menu_Dropdown_Sanitizer' => $baseDir . '/includes/sanitizers/class-amp-nav-menu-dropdown-sanitizer.php',
    'AMP_Nav_Menu_Toggle_Sanitizer' => $baseDir . '/includes/sanitizers/class-amp-nav-menu-toggle-sanitizer.php',
    'AMP_Noscript_Fallback' => $baseDir . '/includes/sanitizers/trait-amp-noscript-fallback.php',
    'AMP_O2_Player_Sanitizer' => $baseDir . '/includes/sanitizers/class-amp-o2-player-sanitizer.php',
    'AMP_Object_Sanitizer' => $baseDir . '/includes/sanitizers/class-amp-object-sanitizer.php',
    'AMP_Options_Manager' => $baseDir . '/includes/options/class-amp-options-manager.php',
    'AMP_PWA_Script_Sanitizer' => $baseDir . '/includes/sanitizers/class-amp-pwa-script-sanitizer.php',
    'AMP_Pinterest_Embed_Handler' => $baseDir . '/includes/embeds/class-amp-pinterest-embed-handler.php',
    'AMP_Playbuzz_Sanitizer' => $baseDir . '/includes/sanitizers/class-amp-playbuzz-sanitizer.php',
    'AMP_Playlist_Embed_Handler' => $baseDir . '/includes/embeds/class-amp-playlist-embed-handler.php',
    'AMP_Post_Meta_Box' => $baseDir . '/includes/admin/class-amp-post-meta-box.php',
    'AMP_Post_Template' => $baseDir . '/includes/templates/class-amp-post-template.php',
    'AMP_Post_Type_Support' => $baseDir . '/includes/class-amp-post-type-support.php',
    'AMP_Reader_Theme_REST_Controller' => $baseDir . '/includes/options/class-amp-reader-theme-rest-controller.php',
    'AMP_Reddit_Embed_Handler' => $baseDir . '/includes/embeds/class-amp-reddit-embed-handler.php',
    'AMP_Rule_Spec' => $baseDir . '/includes/sanitizers/class-amp-rule-spec.php',
    'AMP_Scribd_Embed_Handler' => $baseDir . '/includes/embeds/class-amp-scribd-embed-handler.php',
    'AMP_Script_Sanitizer' => $baseDir . '/includes/sanitizers/class-amp-script-sanitizer.php',
    'AMP_Service_Worker' => $baseDir . '/includes/class-amp-service-worker.php',
    'AMP_SoundCloud_Embed_Handler' => $baseDir . '/includes/embeds/class-amp-soundcloud-embed-handler.php',
    'AMP_Srcset_Sanitizer' => $baseDir . '/includes/sanitizers/class-amp-srcset-sanitizer.php',
    'AMP_String_Utils' => $baseDir . '/includes/utils/class-amp-string-utils.php',
    'AMP_Style_Sanitizer' => $baseDir . '/includes/sanitizers/class-amp-style-sanitizer.php',
    'AMP_Tag_And_Attribute_Sanitizer' => $baseDir . '/includes/sanitizers/class-amp-tag-and-attribute-sanitizer.php',
    'AMP_Template_Customizer' => $baseDir . '/includes/admin/class-amp-template-customizer.php',
    'AMP_Theme_Support' => $baseDir . '/includes/class-amp-theme-support.php',
    'AMP_TikTok_Embed_Handler' => $baseDir . '/includes/embeds/class-amp-tiktok-embed-handler.php',
    'AMP_Tumblr_Embed_Handler' => $baseDir . '/includes/embeds/class-amp-tumblr-embed-handler.php',
    'AMP_Twitter_Embed_Handler' => $baseDir . '/includes/embeds/class-amp-twitter-embed-handler.php',
    'AMP_Validated_URL_Post_Type' => $baseDir . '/includes/validation/class-amp-validated-url-post-type.php',
    'AMP_Validation_Callback_Wrapper' => $baseDir . '/includes/validation/class-amp-validation-callback-wrapper.php',
    'AMP_Validation_Error_Taxonomy' => $baseDir . '/includes/validation/class-amp-validation-error-taxonomy.php',
    'AMP_Validation_Manager' => $baseDir . '/includes/validation/class-amp-validation-manager.php',
    'AMP_Video_Sanitizer' => $baseDir . '/includes/sanitizers/class-amp-video-sanitizer.php',
    'AMP_Vimeo_Embed_Handler' => $baseDir . '/includes/embeds/class-amp-vimeo-embed-handler.php',
    'AMP_Widget_Archives' => $baseDir . '/includes/widgets/class-amp-widget-archives.php',
    'AMP_Widget_Categories' => $baseDir . '/includes/widgets/class-amp-widget-categories.php',
    'AMP_Widget_Text' => $baseDir . '/includes/widgets/class-amp-widget-text.php',
    'AMP_WordPress_Embed_Handler' => $baseDir . '/includes/embeds/class-amp-wordpress-embed-handler.php',
    'AMP_WordPress_TV_Embed_Handler' => $baseDir . '/includes/embeds/class-amp-wordpress-tv-embed-handler.php',
    'AMP_YouTube_Embed_Handler' => $baseDir . '/includes/embeds/class-amp-youtube-embed-handler.php',
    'AmpProject\\Amp' => $vendorDir . '/ampproject/amp-toolbox/src/Amp.php',
    'AmpProject\\AmpWP\\Admin\\AfterActivationSiteScan' => $baseDir . '/src/Admin/AfterActivationSiteScan.php',
    'AmpProject\\AmpWP\\Admin\\AmpPlugins' => $baseDir . '/src/Admin/AmpPlugins.php',
    'AmpProject\\AmpWP\\Admin\\AmpThemes' => $baseDir . '/src/Admin/AmpThemes.php',
    'AmpProject\\AmpWP\\Admin\\AnalyticsOptionsSubmenu' => $baseDir . '/src/Admin/AnalyticsOptionsSubmenu.php',
    'AmpProject\\AmpWP\\Admin\\GoogleFonts' => $baseDir . '/src/Admin/GoogleFonts.php',
    'AmpProject\\AmpWP\\Admin\\OnboardingWizardSubmenu' => $baseDir . '/src/Admin/OnboardingWizardSubmenu.php',
    'AmpProject\\AmpWP\\Admin\\OnboardingWizardSubmenuPage' => $baseDir . '/src/Admin/OnboardingWizardSubmenuPage.php',
    'AmpProject\\AmpWP\\Admin\\OptionsMenu' => $baseDir . '/src/Admin/OptionsMenu.php',
    'AmpProject\\AmpWP\\Admin\\PairedBrowsing' => $baseDir . '/src/Admin/PairedBrowsing.php',
    'AmpProject\\AmpWP\\Admin\\PluginActivationNotice' => $baseDir . '/src/Admin/PluginActivationNotice.php',
    'AmpProject\\AmpWP\\Admin\\PluginRowMeta' => $baseDir . '/src/Admin/PluginRowMeta.php',
    'AmpProject\\AmpWP\\Admin\\Polyfills' => $baseDir . '/src/Admin/Polyfills.php',
    'AmpProject\\AmpWP\\Admin\\RESTPreloader' => $baseDir . '/src/Admin/RESTPreloader.php',
    'AmpProject\\AmpWP\\Admin\\ReaderThemes' => $baseDir . '/src/Admin/ReaderThemes.php',
    'AmpProject\\AmpWP\\Admin\\ReenableCssTransientCachingAjaxAction' => $baseDir . '/src/Admin/ReenableCssTransientCachingAjaxAction.php',
    'AmpProject\\AmpWP\\Admin\\SiteHealth' => $baseDir . '/src/Admin/SiteHealth.php',
    'AmpProject\\AmpWP\\Admin\\SupportLink' => $baseDir . '/src/Admin/SupportLink.php',
    'AmpProject\\AmpWP\\Admin\\SupportScreen' => $baseDir . '/src/Admin/SupportScreen.php',
    'AmpProject\\AmpWP\\Admin\\UserRESTEndpointExtension' => $baseDir . '/src/Admin/UserRESTEndpointExtension.php',
    'AmpProject\\AmpWP\\Admin\\ValidationCounts' => $baseDir . '/src/Admin/ValidationCounts.php',
    'AmpProject\\AmpWP\\AmpSlugCustomizationWatcher' => $baseDir . '/src/AmpSlugCustomizationWatcher.php',
    'AmpProject\\AmpWP\\AmpWpPlugin' => $baseDir . '/src/AmpWpPlugin.php',
    'AmpProject\\AmpWP\\AmpWpPluginFactory' => $baseDir . '/src/AmpWpPluginFactory.php',
    'AmpProject\\AmpWP\\BackgroundTask\\BackgroundTaskDeactivator' => $baseDir . '/src/BackgroundTask/BackgroundTaskDeactivator.php',
    'AmpProject\\AmpWP\\BackgroundTask\\CronBasedBackgroundTask' => $baseDir . '/src/BackgroundTask/CronBasedBackgroundTask.php',
    'AmpProject\\AmpWP\\BackgroundTask\\MonitorCssTransientCaching' => $baseDir . '/src/BackgroundTask/MonitorCssTransientCaching.php',
    'AmpProject\\AmpWP\\BackgroundTask\\RecurringBackgroundTask' => $baseDir . '/src/BackgroundTask/RecurringBackgroundTask.php',
    'AmpProject\\AmpWP\\BackgroundTask\\SingleScheduledBackgroundTask' => $baseDir . '/src/BackgroundTask/SingleScheduledBackgroundTask.php',
    'AmpProject\\AmpWP\\BackgroundTask\\ValidatedUrlStylesheetDataGarbageCollection' => $baseDir . '/src/BackgroundTask/ValidatedUrlStylesheetDataGarbageCollection.php',
    'AmpProject\\AmpWP\\BackgroundTask\\ValidationDataGarbageCollection' => $baseDir . '/src/BackgroundTask/ValidationDataGarbageCollection.php',
    'AmpProject\\AmpWP\\BlockUniqidTransformer' => $baseDir . '/src/BlockUniqidTransformer.php',
    'AmpProject\\AmpWP\\Cli\\AmpCommandNamespace' => $baseDir . '/src/Cli/AmpCommandNamespace.php',
    'AmpProject\\AmpWP\\Cli\\CommandNamespaceRegistration' => $baseDir . '/src/Cli/CommandNamespaceRegistration.php',
    'AmpProject\\AmpWP\\Cli\\OptimizerCommand' => $baseDir . '/src/Cli/OptimizerCommand.php',
    'AmpProject\\AmpWP\\Cli\\OptionCommand' => $baseDir . '/src/Cli/OptionCommand.php',
    'AmpProject\\AmpWP\\Cli\\TransformerCommand' => $baseDir . '/src/Cli/TransformerCommand.php',
    'AmpProject\\AmpWP\\Cli\\ValidationCommand' => $baseDir . '/src/Cli/ValidationCommand.php',
    'AmpProject\\AmpWP\\Component\\CaptionedSlide' => $baseDir . '/src/Component/CaptionedSlide.php',
    'AmpProject\\AmpWP\\Component\\Carousel' => $baseDir . '/src/Component/Carousel.php',
    'AmpProject\\AmpWP\\Component\\HasCaption' => $baseDir . '/src/Component/HasCaption.php',
    'AmpProject\\AmpWP\\ConfigurationArgument' => $baseDir . '/src/ConfigurationArgument.php',
    'AmpProject\\AmpWP\\DependencySupport' => $baseDir . '/src/DependencySupport.php',
    'AmpProject\\AmpWP\\DevTools\\BlockSources' => $baseDir . '/src/DevTools/BlockSources.php',
    'AmpProject\\AmpWP\\DevTools\\CallbackReflection' => $baseDir . '/src/DevTools/CallbackReflection.php',
    'AmpProject\\AmpWP\\DevTools\\ErrorPage' => $baseDir . '/src/DevTools/ErrorPage.php',
    'AmpProject\\AmpWP\\DevTools\\FileReflection' => $baseDir . '/src/DevTools/FileReflection.php',
    'AmpProject\\AmpWP\\DevTools\\LikelyCulpritDetector' => $baseDir . '/src/DevTools/LikelyCulpritDetector.php',
    'AmpProject\\AmpWP\\DevTools\\UserAccess' => $baseDir . '/src/DevTools/UserAccess.php',
    'AmpProject\\AmpWP\\Dom\\ElementList' => $baseDir . '/src/Dom/ElementList.php',
    'AmpProject\\AmpWP\\Dom\\Options' => $baseDir . '/src/Dom/Options.php',
    'AmpProject\\AmpWP\\Editor\\EditorSupport' => $baseDir . '/src/Editor/EditorSupport.php',
    'AmpProject\\AmpWP\\Embed\\HandlesGalleryEmbed' => $baseDir . '/src/Embed/HandlesGalleryEmbed.php',
    'AmpProject\\AmpWP\\Exception\\AmpWpException' => $baseDir . '/src/Exception/AmpWpException.php',
    'AmpProject\\AmpWP\\Exception\\FailedToMakeInstance' => $baseDir . '/src/Exception/FailedToMakeInstance.php',
    'AmpProject\\AmpWP\\Exception\\InvalidEventProperties' => $baseDir . '/src/Exception/InvalidEventProperties.php',
    'AmpProject\\AmpWP\\Exception\\InvalidService' => $baseDir . '/src/Exception/InvalidService.php',
    'AmpProject\\AmpWP\\Exception\\InvalidStopwatchEvent' => $baseDir . '/src/Exception/InvalidStopwatchEvent.php',
    'AmpProject\\AmpWP\\ExtraThemeAndPluginHeaders' => $baseDir . '/src/ExtraThemeAndPluginHeaders.php',
    'AmpProject\\AmpWP\\Icon' => $baseDir . '/src/Icon.php',
    'AmpProject\\AmpWP\\Infrastructure\\Activateable' => $baseDir . '/src/Infrastructure/Activateable.php',
    'AmpProject\\AmpWP\\Infrastructure\\CliCommand' => $baseDir . '/src/Infrastructure/CliCommand.php',
    'AmpProject\\AmpWP\\Infrastructure\\Conditional' => $baseDir . '/src/Infrastructure/Conditional.php',
    'AmpProject\\AmpWP\\Infrastructure\\Deactivateable' => $baseDir . '/src/Infrastructure/Deactivateable.php',
    'AmpProject\\AmpWP\\Infrastructure\\Delayed' => $baseDir . '/src/Infrastructure/Delayed.php',
    'AmpProject\\AmpWP\\Infrastructure\\HasRequirements' => $baseDir . '/src/Infrastructure/HasRequirements.php',
    'AmpProject\\AmpWP\\Infrastructure\\Injector' => $baseDir . '/src/Infrastructure/Injector.php',
    'AmpProject\\AmpWP\\Infrastructure\\Injector\\FallbackInstantiator' => $baseDir . '/src/Infrastructure/Injector/FallbackInstantiator.php',
    'AmpProject\\AmpWP\\Infrastructure\\Injector\\InjectionChain' => $baseDir . '/src/Infrastructure/Injector/InjectionChain.php',
    'AmpProject\\AmpWP\\Infrastructure\\Injector\\SimpleInjector' => $baseDir . '/src/Infrastructure/Injector/SimpleInjector.php',
    'AmpProject\\AmpWP\\Infrastructure\\Instantiator' => $baseDir . '/src/Infrastructure/Instantiator.php',
    'AmpProject\\AmpWP\\Infrastructure\\Plugin' => $baseDir . '/src/Infrastructure/Plugin.php',
    'AmpProject\\AmpWP\\Infrastructure\\Registerable' => $baseDir . '/src/Infrastructure/Registerable.php',
    'AmpProject\\AmpWP\\Infrastructure\\Service' => $baseDir . '/src/Infrastructure/Service.php',
    'AmpProject\\AmpWP\\Infrastructure\\ServiceBasedPlugin' => $baseDir . '/src/Infrastructure/ServiceBasedPlugin.php',
    'AmpProject\\AmpWP\\Infrastructure\\ServiceContainer' => $baseDir . '/src/Infrastructure/ServiceContainer.php',
    'AmpProject\\AmpWP\\Infrastructure\\ServiceContainer\\LazilyInstantiatedService' => $baseDir . '/src/Infrastructure/ServiceContainer/LazilyInstantiatedService.php',
    'AmpProject\\AmpWP\\Infrastructure\\ServiceContainer\\SimpleServiceContainer' => $baseDir . '/src/Infrastructure/ServiceContainer/SimpleServiceContainer.php',
    'AmpProject\\AmpWP\\Instrumentation\\Event' => $baseDir . '/src/Instrumentation/Event.php',
    'AmpProject\\AmpWP\\Instrumentation\\EventWithDuration' => $baseDir . '/src/Instrumentation/EventWithDuration.php',
    'AmpProject\\AmpWP\\Instrumentation\\ServerTiming' => $baseDir . '/src/Instrumentation/ServerTiming.php',
    'AmpProject\\AmpWP\\Instrumentation\\StopWatch' => $baseDir . '/src/Instrumentation/StopWatch.php',
    'AmpProject\\AmpWP\\Instrumentation\\StopWatchEvent' => $baseDir . '/src/Instrumentation/StopWatchEvent.php',
    'AmpProject\\AmpWP\\LoadingError' => $baseDir . '/src/LoadingError.php',
    'AmpProject\\AmpWP\\MobileRedirection' => $baseDir . '/src/MobileRedirection.php',
    'AmpProject\\AmpWP\\ObsoleteBlockAttributeRemover' => $baseDir . '/src/ObsoleteBlockAttributeRemover.php',
    'AmpProject\\AmpWP\\Optimizer\\AmpWPConfiguration' => $baseDir . '/src/Optimizer/AmpWPConfiguration.php',
    'AmpProject\\AmpWP\\Optimizer\\HeroCandidateFiltering' => $baseDir . '/src/Optimizer/HeroCandidateFiltering.php',
    'AmpProject\\AmpWP\\Optimizer\\OptimizerService' => $baseDir . '/src/Optimizer/OptimizerService.php',
    'AmpProject\\AmpWP\\Optimizer\\Transformer\\AmpSchemaOrgMetadata' => $baseDir . '/src/Optimizer/Transformer/AmpSchemaOrgMetadata.php',
    'AmpProject\\AmpWP\\Optimizer\\Transformer\\AmpSchemaOrgMetadataConfiguration' => $baseDir . '/src/Optimizer/Transformer/AmpSchemaOrgMetadataConfiguration.php',
    'AmpProject\\AmpWP\\Optimizer\\Transformer\\DetermineHeroImages' => $baseDir . '/src/Optimizer/Transformer/DetermineHeroImages.php',
    'AmpProject\\AmpWP\\Option' => $baseDir . '/src/Option.php',
    'AmpProject\\AmpWP\\OptionsRESTController' => $baseDir . '/src/OptionsRESTController.php',
    'AmpProject\\AmpWP\\PairedRouting' => $baseDir . '/src/PairedRouting.php',
    'AmpProject\\AmpWP\\PairedUrl' => $baseDir . '/src/PairedUrl.php',
    'AmpProject\\AmpWP\\PairedUrlStructure' => $baseDir . '/src/PairedUrlStructure.php',
    'AmpProject\\AmpWP\\PairedUrlStructure\\LegacyReaderUrlStructure' => $baseDir . '/src/PairedUrlStructure/LegacyReaderUrlStructure.php',
    'AmpProject\\AmpWP\\PairedUrlStructure\\LegacyTransitionalUrlStructure' => $baseDir . '/src/PairedUrlStructure/LegacyTransitionalUrlStructure.php',
    'AmpProject\\AmpWP\\PairedUrlStructure\\PathSuffixUrlStructure' => $baseDir . '/src/PairedUrlStructure/PathSuffixUrlStructure.php',
    'AmpProject\\AmpWP\\PairedUrlStructure\\QueryVarUrlStructure' => $baseDir . '/src/PairedUrlStructure/QueryVarUrlStructure.php',
    'AmpProject\\AmpWP\\PluginRegistry' => $baseDir . '/src/PluginRegistry.php',
    'AmpProject\\AmpWP\\PluginSuppression' => $baseDir . '/src/PluginSuppression.php',
    'AmpProject\\AmpWP\\QueryVar' => $baseDir . '/src/QueryVar.php',
    'AmpProject\\AmpWP\\ReaderThemeLoader' => $baseDir . '/src/ReaderThemeLoader.php',
    'AmpProject\\AmpWP\\ReaderThemeSupportFeatures' => $baseDir . '/src/ReaderThemeSupportFeatures.php',
    'AmpProject\\AmpWP\\RemoteRequest\\CachedRemoteGetRequest' => $baseDir . '/src/RemoteRequest/CachedRemoteGetRequest.php',
    'AmpProject\\AmpWP\\RemoteRequest\\CachedResponse' => $baseDir . '/src/RemoteRequest/CachedResponse.php',
    'AmpProject\\AmpWP\\RemoteRequest\\WpHttpRemoteGetRequest' => $baseDir . '/src/RemoteRequest/WpHttpRemoteGetRequest.php',
    'AmpProject\\AmpWP\\Sandboxing' => $baseDir . '/src/Sandboxing.php',
    'AmpProject\\AmpWP\\Services' => $baseDir . '/src/Services.php',
    'AmpProject\\AmpWP\\Support\\SupportCliCommand' => $baseDir . '/src/Support/SupportCliCommand.php',
    'AmpProject\\AmpWP\\Support\\SupportData' => $baseDir . '/src/Support/SupportData.php',
    'AmpProject\\AmpWP\\Support\\SupportRESTController' => $baseDir . '/src/Support/SupportRESTController.php',
    'AmpProject\\AmpWP\\ValidationExemption' => $baseDir . '/src/ValidationExemption.php',
    'AmpProject\\AmpWP\\Validation\\ScannableURLProvider' => $baseDir . '/src/Validation/ScannableURLProvider.php',
    'AmpProject\\AmpWP\\Validation\\ScannableURLsRestController' => $baseDir . '/src/Validation/ScannableURLsRestController.php',
    'AmpProject\\AmpWP\\Validation\\URLValidationCron' => $baseDir . '/src/Validation/URLValidationCron.php',
    'AmpProject\\AmpWP\\Validation\\URLValidationProvider' => $baseDir . '/src/Validation/URLValidationProvider.php',
    'AmpProject\\AmpWP\\Validation\\URLValidationRESTController' => $baseDir . '/src/Validation/URLValidationRESTController.php',
    'AmpProject\\AmpWP\\Validation\\ValidationCountsRestController' => $baseDir . '/src/Validation/ValidationCountsRestController.php',
    'AmpProject\\Cli\\AmpExecutable' => $vendorDir . '/ampproject/amp-toolbox/src/Cli/AmpExecutable.php',
    'AmpProject\\Cli\\Colors' => $vendorDir . '/ampproject/amp-toolbox/src/Cli/Colors.php',
    'AmpProject\\Cli\\Command' => $vendorDir . '/ampproject/amp-toolbox/src/Cli/Command.php',
    'AmpProject\\Cli\\Command\\Optimize' => $vendorDir . '/ampproject/amp-toolbox/src/Cli/Command/Optimize.php',
    'AmpProject\\Cli\\Command\\Validate' => $vendorDir . '/ampproject/amp-toolbox/src/Cli/Command/Validate.php',
    'AmpProject\\Cli\\Executable' => $vendorDir . '/ampproject/amp-toolbox/src/Cli/Executable.php',
    'AmpProject\\Cli\\LogLevel' => $vendorDir . '/ampproject/amp-toolbox/src/Cli/LogLevel.php',
    'AmpProject\\Cli\\Options' => $vendorDir . '/ampproject/amp-toolbox/src/Cli/Options.php',
    'AmpProject\\Cli\\TableFormatter' => $vendorDir . '/ampproject/amp-toolbox/src/Cli/TableFormatter.php',
    'AmpProject\\CompatibilityFix' => $vendorDir . '/ampproject/amp-toolbox/src/CompatibilityFix.php',
    'AmpProject\\CompatibilityFix\\MovedClasses' => $vendorDir . '/ampproject/amp-toolbox/src/CompatibilityFix/MovedClasses.php',
    'AmpProject\\CssLength' => $vendorDir . '/ampproject/amp-toolbox/src/CssLength.php',
    'AmpProject\\DevMode' => $vendorDir . '/ampproject/amp-toolbox/src/DevMode.php',
    'AmpProject\\Dom\\Document' => $vendorDir . '/ampproject/amp-toolbox/src/Dom/Document.php',
    'AmpProject\\Dom\\Document\\AfterLoadFilter' => $vendorDir . '/ampproject/amp-toolbox/src/Dom/Document/AfterLoadFilter.php',
    'AmpProject\\Dom\\Document\\AfterSaveFilter' => $vendorDir . '/ampproject/amp-toolbox/src/Dom/Document/AfterSaveFilter.php',
    'AmpProject\\Dom\\Document\\BeforeLoadFilter' => $vendorDir . '/ampproject/amp-toolbox/src/Dom/Document/BeforeLoadFilter.php',
    'AmpProject\\Dom\\Document\\BeforeSaveFilter' => $vendorDir . '/ampproject/amp-toolbox/src/Dom/Document/BeforeSaveFilter.php',
    'AmpProject\\Dom\\Document\\Filter' => $vendorDir . '/ampproject/amp-toolbox/src/Dom/Document/Filter.php',
    'AmpProject\\Dom\\Document\\Filter\\AmpBindAttributes' => $vendorDir . '/ampproject/amp-toolbox/src/Dom/Document/Filter/AmpBindAttributes.php',
    'AmpProject\\Dom\\Document\\Filter\\AmpEmojiAttribute' => $vendorDir . '/ampproject/amp-toolbox/src/Dom/Document/Filter/AmpEmojiAttribute.php',
    'AmpProject\\Dom\\Document\\Filter\\ConvertHeadProfileToLink' => $vendorDir . '/ampproject/amp-toolbox/src/Dom/Document/Filter/ConvertHeadProfileToLink.php',
    'AmpProject\\Dom\\Document\\Filter\\DeduplicateTag' => $vendorDir . '/ampproject/amp-toolbox/src/Dom/Document/Filter/DeduplicateTag.php',
    'AmpProject\\Dom\\Document\\Filter\\DetectInvalidByteSequence' => $vendorDir . '/ampproject/amp-toolbox/src/Dom/Document/Filter/DetectInvalidByteSequence.php',
    'AmpProject\\Dom\\Document\\Filter\\DoctypeNode' => $vendorDir . '/ampproject/amp-toolbox/src/Dom/Document/Filter/DoctypeNode.php',
    'AmpProject\\Dom\\Document\\Filter\\DocumentEncoding' => $vendorDir . '/ampproject/amp-toolbox/src/Dom/Document/Filter/DocumentEncoding.php',
    'AmpProject\\Dom\\Document\\Filter\\HttpEquivCharset' => $vendorDir . '/ampproject/amp-toolbox/src/Dom/Document/Filter/HttpEquivCharset.php',
    'AmpProject\\Dom\\Document\\Filter\\LibxmlCompatibility' => $vendorDir . '/ampproject/amp-toolbox/src/Dom/Document/Filter/LibxmlCompatibility.php',
    'AmpProject\\Dom\\Document\\Filter\\MustacheScriptTemplates' => $vendorDir . '/ampproject/amp-toolbox/src/Dom/Document/Filter/MustacheScriptTemplates.php',
    'AmpProject\\Dom\\Document\\Filter\\NormalizeHtmlAttributes' => $vendorDir . '/ampproject/amp-toolbox/src/Dom/Document/Filter/NormalizeHtmlAttributes.php',
    'AmpProject\\Dom\\Document\\Filter\\NormalizeHtmlEntities' => $vendorDir . '/ampproject/amp-toolbox/src/Dom/Document/Filter/NormalizeHtmlEntities.php',
    'AmpProject\\Dom\\Document\\Filter\\NoscriptElements' => $vendorDir . '/ampproject/amp-toolbox/src/Dom/Document/Filter/NoscriptElements.php',
    'AmpProject\\Dom\\Document\\Filter\\ProtectEsiTags' => $vendorDir . '/ampproject/amp-toolbox/src/Dom/Document/Filter/ProtectEsiTags.php',
    'AmpProject\\Dom\\Document\\Filter\\SelfClosingSVGElements' => $vendorDir . '/ampproject/amp-toolbox/src/Dom/Document/Filter/SelfClosingSVGElements.php',
    'AmpProject\\Dom\\Document\\Filter\\SelfClosingTags' => $vendorDir . '/ampproject/amp-toolbox/src/Dom/Document/Filter/SelfClosingTags.php',
    'AmpProject\\Dom\\Document\\Filter\\SvgSourceAttributeEncoding' => $vendorDir . '/ampproject/amp-toolbox/src/Dom/Document/Filter/SvgSourceAttributeEncoding.php',
    'AmpProject\\Dom\\Document\\Option' => $vendorDir . '/ampproject/amp-toolbox/src/Dom/Document/Option.php',
    'AmpProject\\Dom\\Element' => $vendorDir . '/ampproject/amp-toolbox/src/Dom/Element.php',
    'AmpProject\\Dom\\ElementDump' => $vendorDir . '/ampproject/amp-toolbox/src/Dom/ElementDump.php',
    'AmpProject\\Dom\\LinkManager' => $vendorDir . '/ampproject/amp-toolbox/src/Dom/LinkManager.php',
    'AmpProject\\Dom\\NodeWalker' => $vendorDir . '/ampproject/amp-toolbox/src/Dom/NodeWalker.php',
    'AmpProject\\Dom\\Options' => $vendorDir . '/ampproject/amp-toolbox/src/Dom/Options.php',
    'AmpProject\\Dom\\UniqueIdManager' => $vendorDir . '/ampproject/amp-toolbox/src/Dom/UniqueIdManager.php',
    'AmpProject\\Encoding' => $vendorDir . '/ampproject/amp-toolbox/src/Encoding.php',
    'AmpProject\\Exception\\AmpCliException' => $vendorDir . '/ampproject/amp-toolbox/src/Exception/AmpCliException.php',
    'AmpProject\\Exception\\AmpException' => $vendorDir . '/ampproject/amp-toolbox/src/Exception/AmpException.php',
    'AmpProject\\Exception\\Cli\\InvalidArgument' => $vendorDir . '/ampproject/amp-toolbox/src/Exception/Cli/InvalidArgument.php',
    'AmpProject\\Exception\\Cli\\InvalidColor' => $vendorDir . '/ampproject/amp-toolbox/src/Exception/Cli/InvalidColor.php',
    'AmpProject\\Exception\\Cli\\InvalidColumnFormat' => $vendorDir . '/ampproject/amp-toolbox/src/Exception/Cli/InvalidColumnFormat.php',
    'AmpProject\\Exception\\Cli\\InvalidCommand' => $vendorDir . '/ampproject/amp-toolbox/src/Exception/Cli/InvalidCommand.php',
    'AmpProject\\Exception\\Cli\\InvalidOption' => $vendorDir . '/ampproject/amp-toolbox/src/Exception/Cli/InvalidOption.php',
    'AmpProject\\Exception\\Cli\\InvalidSapi' => $vendorDir . '/ampproject/amp-toolbox/src/Exception/Cli/InvalidSapi.php',
    'AmpProject\\Exception\\Cli\\MissingArgument' => $vendorDir . '/ampproject/amp-toolbox/src/Exception/Cli/MissingArgument.php',
    'AmpProject\\Exception\\FailedRemoteRequest' => $vendorDir . '/ampproject/amp-toolbox/src/Exception/FailedRemoteRequest.php',
    'AmpProject\\Exception\\FailedToCreateLink' => $vendorDir . '/ampproject/amp-toolbox/src/Exception/FailedToCreateLink.php',
    'AmpProject\\Exception\\FailedToGetCachedResponse' => $vendorDir . '/ampproject/amp-toolbox/src/Exception/FailedToGetCachedResponse.php',
    'AmpProject\\Exception\\FailedToGetFromRemoteUrl' => $vendorDir . '/ampproject/amp-toolbox/src/Exception/FailedToGetFromRemoteUrl.php',
    'AmpProject\\Exception\\FailedToParseHtml' => $vendorDir . '/ampproject/amp-toolbox/src/Exception/FailedToParseHtml.php',
    'AmpProject\\Exception\\FailedToParseUrl' => $vendorDir . '/ampproject/amp-toolbox/src/Exception/FailedToParseUrl.php',
    'AmpProject\\Exception\\FailedToRetrieveRequiredDomElement' => $vendorDir . '/ampproject/amp-toolbox/src/Exception/FailedToRetrieveRequiredDomElement.php',
    'AmpProject\\Exception\\InvalidAttributeName' => $vendorDir . '/ampproject/amp-toolbox/src/Exception/InvalidAttributeName.php',
    'AmpProject\\Exception\\InvalidByteSequence' => $vendorDir . '/ampproject/amp-toolbox/src/Exception/InvalidByteSequence.php',
    'AmpProject\\Exception\\InvalidCssRulesetName' => $vendorDir . '/ampproject/amp-toolbox/src/Exception/InvalidCssRulesetName.php',
    'AmpProject\\Exception\\InvalidDeclarationName' => $vendorDir . '/ampproject/amp-toolbox/src/Exception/InvalidDeclarationName.php',
    'AmpProject\\Exception\\InvalidDocRulesetName' => $vendorDir . '/ampproject/amp-toolbox/src/Exception/InvalidDocRulesetName.php',
    'AmpProject\\Exception\\InvalidDocumentFilter' => $vendorDir . '/ampproject/amp-toolbox/src/Exception/InvalidDocumentFilter.php',
    'AmpProject\\Exception\\InvalidErrorCode' => $vendorDir . '/ampproject/amp-toolbox/src/Exception/InvalidErrorCode.php',
    'AmpProject\\Exception\\InvalidExtension' => $vendorDir . '/ampproject/amp-toolbox/src/Exception/InvalidExtension.php',
    'AmpProject\\Exception\\InvalidFormat' => $vendorDir . '/ampproject/amp-toolbox/src/Exception/InvalidFormat.php',
    'AmpProject\\Exception\\InvalidListName' => $vendorDir . '/ampproject/amp-toolbox/src/Exception/InvalidListName.php',
    'AmpProject\\Exception\\InvalidOptionValue' => $vendorDir . '/ampproject/amp-toolbox/src/Exception/InvalidOptionValue.php',
    'AmpProject\\Exception\\InvalidSpecName' => $vendorDir . '/ampproject/amp-toolbox/src/Exception/InvalidSpecName.php',
    'AmpProject\\Exception\\InvalidSpecRuleName' => $vendorDir . '/ampproject/amp-toolbox/src/Exception/InvalidSpecRuleName.php',
    'AmpProject\\Exception\\InvalidTagId' => $vendorDir . '/ampproject/amp-toolbox/src/Exception/InvalidTagId.php',
    'AmpProject\\Exception\\InvalidTagName' => $vendorDir . '/ampproject/amp-toolbox/src/Exception/InvalidTagName.php',
    'AmpProject\\Exception\\MaxCssByteCountExceeded' => $vendorDir . '/ampproject/amp-toolbox/src/Exception/MaxCssByteCountExceeded.php',
    'AmpProject\\Extension' => $vendorDir . '/ampproject/amp-toolbox/src/Extension.php',
    'AmpProject\\FakeEnum' => $vendorDir . '/ampproject/amp-toolbox/src/FakeEnum.php',
    'AmpProject\\Format' => $vendorDir . '/ampproject/amp-toolbox/src/Format.php',
    'AmpProject\\Html\\AtRule' => $vendorDir . '/ampproject/amp-toolbox/src/Html/AtRule.php',
    'AmpProject\\Html\\Attribute' => $vendorDir . '/ampproject/amp-toolbox/src/Html/Attribute.php',
    'AmpProject\\Html\\LengthUnit' => $vendorDir . '/ampproject/amp-toolbox/src/Html/LengthUnit.php',
    'AmpProject\\Html\\LowerCaseTag' => $vendorDir . '/ampproject/amp-toolbox/src/Html/LowerCaseTag.php',
    'AmpProject\\Html\\Parser\\DocLocator' => $vendorDir . '/ampproject/amp-toolbox/src/Html/Parser/DocLocator.php',
    'AmpProject\\Html\\Parser\\EFlags' => $vendorDir . '/ampproject/amp-toolbox/src/Html/Parser/EFlags.php',
    'AmpProject\\Html\\Parser\\HtmlParser' => $vendorDir . '/ampproject/amp-toolbox/src/Html/Parser/HtmlParser.php',
    'AmpProject\\Html\\Parser\\HtmlSaxHandler' => $vendorDir . '/ampproject/amp-toolbox/src/Html/Parser/HtmlSaxHandler.php',
    'AmpProject\\Html\\Parser\\HtmlSaxHandlerWithLocation' => $vendorDir . '/ampproject/amp-toolbox/src/Html/Parser/HtmlSaxHandlerWithLocation.php',
    'AmpProject\\Html\\Parser\\ParsedAttribute' => $vendorDir . '/ampproject/amp-toolbox/src/Html/Parser/ParsedAttribute.php',
    'AmpProject\\Html\\Parser\\ParsedTag' => $vendorDir . '/ampproject/amp-toolbox/src/Html/Parser/ParsedTag.php',
    'AmpProject\\Html\\Parser\\ScriptTag' => $vendorDir . '/ampproject/amp-toolbox/src/Html/Parser/ScriptTag.php',
    'AmpProject\\Html\\Parser\\TagNameStack' => $vendorDir . '/ampproject/amp-toolbox/src/Html/Parser/TagNameStack.php',
    'AmpProject\\Html\\Parser\\TagRegion' => $vendorDir . '/ampproject/amp-toolbox/src/Html/Parser/TagRegion.php',
    'AmpProject\\Html\\RequestDestination' => $vendorDir . '/ampproject/amp-toolbox/src/Html/RequestDestination.php',
    'AmpProject\\Html\\Role' => $vendorDir . '/ampproject/amp-toolbox/src/Html/Role.php',
    'AmpProject\\Html\\Tag' => $vendorDir . '/ampproject/amp-toolbox/src/Html/Tag.php',
    'AmpProject\\Html\\UpperCaseTag' => $vendorDir . '/ampproject/amp-toolbox/src/Html/UpperCaseTag.php',
    'AmpProject\\Internal' => $vendorDir . '/ampproject/amp-toolbox/src/Internal.php',
    'AmpProject\\Layout' => $vendorDir . '/ampproject/amp-toolbox/src/Layout.php',
    'AmpProject\\Optimizer\\Configuration' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Configuration.php',
    'AmpProject\\Optimizer\\Configuration\\AmpRuntimeCssConfiguration' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Configuration/AmpRuntimeCssConfiguration.php',
    'AmpProject\\Optimizer\\Configuration\\AmpStoryCssOptimizerConfiguration' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Configuration/AmpStoryCssOptimizerConfiguration.php',
    'AmpProject\\Optimizer\\Configuration\\AutoExtensionsConfiguration' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Configuration/AutoExtensionsConfiguration.php',
    'AmpProject\\Optimizer\\Configuration\\BaseTransformerConfiguration' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Configuration/BaseTransformerConfiguration.php',
    'AmpProject\\Optimizer\\Configuration\\MinifyHtmlConfiguration' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Configuration/MinifyHtmlConfiguration.php',
    'AmpProject\\Optimizer\\Configuration\\OptimizeAmpBindConfiguration' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Configuration/OptimizeAmpBindConfiguration.php',
    'AmpProject\\Optimizer\\Configuration\\OptimizeHeroImagesConfiguration' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Configuration/OptimizeHeroImagesConfiguration.php',
    'AmpProject\\Optimizer\\Configuration\\OptimizeViewportConfiguration' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Configuration/OptimizeViewportConfiguration.php',
    'AmpProject\\Optimizer\\Configuration\\PreloadHeroImageConfiguration' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Configuration/PreloadHeroImageConfiguration.php',
    'AmpProject\\Optimizer\\Configuration\\RewriteAmpUrlsConfiguration' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Configuration/RewriteAmpUrlsConfiguration.php',
    'AmpProject\\Optimizer\\Configuration\\TransformedIdentifierConfiguration' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Configuration/TransformedIdentifierConfiguration.php',
    'AmpProject\\Optimizer\\CssRule' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/CssRule.php',
    'AmpProject\\Optimizer\\CssRules' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/CssRules.php',
    'AmpProject\\Optimizer\\DefaultConfiguration' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/DefaultConfiguration.php',
    'AmpProject\\Optimizer\\Error' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Error.php',
    'AmpProject\\Optimizer\\ErrorCollection' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/ErrorCollection.php',
    'AmpProject\\Optimizer\\Error\\CannotAdaptDocumentForSelfHosting' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Error/CannotAdaptDocumentForSelfHosting.php',
    'AmpProject\\Optimizer\\Error\\CannotInlineRuntimeCss' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Error/CannotInlineRuntimeCss.php',
    'AmpProject\\Optimizer\\Error\\CannotMinifyAmpScript' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Error/CannotMinifyAmpScript.php',
    'AmpProject\\Optimizer\\Error\\CannotParseJsonData' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Error/CannotParseJsonData.php',
    'AmpProject\\Optimizer\\Error\\CannotPerformServerSideRendering' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Error/CannotPerformServerSideRendering.php',
    'AmpProject\\Optimizer\\Error\\CannotPreloadImage' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Error/CannotPreloadImage.php',
    'AmpProject\\Optimizer\\Error\\CannotRemoveBoilerplate' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Error/CannotRemoveBoilerplate.php',
    'AmpProject\\Optimizer\\Error\\DeprecatedTransformer' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Error/DeprecatedTransformer.php',
    'AmpProject\\Optimizer\\Error\\ErrorProperties' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Error/ErrorProperties.php',
    'AmpProject\\Optimizer\\Error\\InvalidJson' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Error/InvalidJson.php',
    'AmpProject\\Optimizer\\Error\\MissingPackage' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Error/MissingPackage.php',
    'AmpProject\\Optimizer\\Error\\TooManyHeroImages' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Error/TooManyHeroImages.php',
    'AmpProject\\Optimizer\\Error\\UnknownError' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Error/UnknownError.php',
    'AmpProject\\Optimizer\\Exception\\AmpOptimizerException' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Exception/AmpOptimizerException.php',
    'AmpProject\\Optimizer\\Exception\\InvalidArgument' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Exception/InvalidArgument.php',
    'AmpProject\\Optimizer\\Exception\\InvalidConfiguration' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Exception/InvalidConfiguration.php',
    'AmpProject\\Optimizer\\Exception\\InvalidConfigurationKey' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Exception/InvalidConfigurationKey.php',
    'AmpProject\\Optimizer\\Exception\\InvalidConfigurationValue' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Exception/InvalidConfigurationValue.php',
    'AmpProject\\Optimizer\\Exception\\InvalidHtmlAttribute' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Exception/InvalidHtmlAttribute.php',
    'AmpProject\\Optimizer\\Exception\\UnknownConfigurationClass' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Exception/UnknownConfigurationClass.php',
    'AmpProject\\Optimizer\\Exception\\UnknownConfigurationKey' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Exception/UnknownConfigurationKey.php',
    'AmpProject\\Optimizer\\HeroImage' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/HeroImage.php',
    'AmpProject\\Optimizer\\ImageDimensions' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/ImageDimensions.php',
    'AmpProject\\Optimizer\\LocalFallback' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/LocalFallback.php',
    'AmpProject\\Optimizer\\TransformationEngine' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/TransformationEngine.php',
    'AmpProject\\Optimizer\\Transformer' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Transformer.php',
    'AmpProject\\Optimizer\\TransformerConfiguration' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/TransformerConfiguration.php',
    'AmpProject\\Optimizer\\Transformer\\AmpBoilerplate' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Transformer/AmpBoilerplate.php',
    'AmpProject\\Optimizer\\Transformer\\AmpBoilerplateErrorHandler' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Transformer/AmpBoilerplateErrorHandler.php',
    'AmpProject\\Optimizer\\Transformer\\AmpRuntimeCss' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Transformer/AmpRuntimeCss.php',
    'AmpProject\\Optimizer\\Transformer\\AmpRuntimePreloads' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Transformer/AmpRuntimePreloads.php',
    'AmpProject\\Optimizer\\Transformer\\AmpStoryCssOptimizer' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Transformer/AmpStoryCssOptimizer.php',
    'AmpProject\\Optimizer\\Transformer\\AutoExtensions' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Transformer/AutoExtensions.php',
    'AmpProject\\Optimizer\\Transformer\\GoogleFontsPreconnect' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Transformer/GoogleFontsPreconnect.php',
    'AmpProject\\Optimizer\\Transformer\\MinifyHtml' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Transformer/MinifyHtml.php',
    'AmpProject\\Optimizer\\Transformer\\OptimizeAmpBind' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Transformer/OptimizeAmpBind.php',
    'AmpProject\\Optimizer\\Transformer\\OptimizeHeroImages' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Transformer/OptimizeHeroImages.php',
    'AmpProject\\Optimizer\\Transformer\\OptimizeViewport' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Transformer/OptimizeViewport.php',
    'AmpProject\\Optimizer\\Transformer\\PreloadHeroImage' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Transformer/PreloadHeroImage.php',
    'AmpProject\\Optimizer\\Transformer\\ReorderHead' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Transformer/ReorderHead.php',
    'AmpProject\\Optimizer\\Transformer\\RewriteAmpUrls' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Transformer/RewriteAmpUrls.php',
    'AmpProject\\Optimizer\\Transformer\\ServerSideRendering' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Transformer/ServerSideRendering.php',
    'AmpProject\\Optimizer\\Transformer\\TransformedIdentifier' => $vendorDir . '/ampproject/amp-toolbox/src/Optimizer/Transformer/TransformedIdentifier.php',
    'AmpProject\\Protocol' => $vendorDir . '/ampproject/amp-toolbox/src/Protocol.php',
    'AmpProject\\RemoteGetRequest' => $vendorDir . '/ampproject/amp-toolbox/src/RemoteGetRequest.php',
    'AmpProject\\RemoteRequest\\CurlRemoteGetRequest' => $vendorDir . '/ampproject/amp-toolbox/src/RemoteRequest/CurlRemoteGetRequest.php',
    'AmpProject\\RemoteRequest\\FallbackRemoteGetRequest' => $vendorDir . '/ampproject/amp-toolbox/src/RemoteRequest/FallbackRemoteGetRequest.php',
    'AmpProject\\RemoteRequest\\FilesystemRemoteGetRequest' => $vendorDir . '/ampproject/amp-toolbox/src/RemoteRequest/FilesystemRemoteGetRequest.php',
    'AmpProject\\RemoteRequest\\RemoteGetRequestResponse' => $vendorDir . '/ampproject/amp-toolbox/src/RemoteRequest/RemoteGetRequestResponse.php',
    'AmpProject\\RemoteRequest\\StubbedRemoteGetRequest' => $vendorDir . '/ampproject/amp-toolbox/src/RemoteRequest/StubbedRemoteGetRequest.php',
    'AmpProject\\RemoteRequest\\TemporaryFileCachedRemoteGetRequest' => $vendorDir . '/ampproject/amp-toolbox/src/RemoteRequest/TemporaryFileCachedRemoteGetRequest.php',
    'AmpProject\\Response' => $vendorDir . '/ampproject/amp-toolbox/src/Response.php',
    'AmpProject\\RuntimeVersion' => $vendorDir . '/ampproject/amp-toolbox/src/RuntimeVersion.php',
    'AmpProject\\ScriptReleaseVersion' => $vendorDir . '/ampproject/amp-toolbox/src/ScriptReleaseVersion.php',
    'AmpProject\\Str' => $vendorDir . '/ampproject/amp-toolbox/src/Str.php',
    'AmpProject\\Url' => $vendorDir . '/ampproject/amp-toolbox/src/Url.php',
    'AmpProject\\Validator\\Context' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Context.php',
    'AmpProject\\Validator\\ErrorCode' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/ErrorCode.php',
    'AmpProject\\Validator\\ExtensionsContext' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/ExtensionsContext.php',
    'AmpProject\\Validator\\FilePosition' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/FilePosition.php',
    'AmpProject\\Validator\\Spec' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec.php',
    'AmpProject\\Validator\\Spec\\AggregateTag' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AggregateTag.php',
    'AmpProject\\Validator\\Spec\\AggregateTagWithExtensionSpec' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AggregateTagWithExtensionSpec.php',
    'AmpProject\\Validator\\Spec\\AttributeList' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\AmpAudioCommon' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpAudioCommon.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\AmpBaseCarouselCommon' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpBaseCarouselCommon.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\AmpCarouselCommon' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpCarouselCommon.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\AmpDatePickerCommonAttributes' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpDatePickerCommonAttributes.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\AmpDatePickerOverlayModeAttributes' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpDatePickerOverlayModeAttributes.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\AmpDatePickerRangeTypeAttributes' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpDatePickerRangeTypeAttributes.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\AmpDatePickerSingleTypeAttributes' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpDatePickerSingleTypeAttributes.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\AmpDatePickerStaticModeAttributes' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpDatePickerStaticModeAttributes.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\AmpFacebook' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpFacebook.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\AmpFacebookStrict' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpFacebookStrict.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\AmpInputmaskCommonAttr' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpInputmaskCommonAttr.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\AmpLayoutAttrs' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpLayoutAttrs.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\AmpMegaphoneCommon' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpMegaphoneCommon.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\AmpNestedMenuActions' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpNestedMenuActions.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\AmpStreamGalleryCommon' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpStreamGalleryCommon.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\AmpVideoCommon' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpVideoCommon.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\AmpVideoIframeCommon' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpVideoIframeCommon.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\AmphtmlEngineAttrs' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmphtmlEngineAttrs.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\AmphtmlModuleEngineAttrs' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmphtmlModuleEngineAttrs.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\AmphtmlNomoduleEngineAttrs' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmphtmlNomoduleEngineAttrs.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\CiteAttr' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/CiteAttr.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\ClickAttributions' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/ClickAttributions.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\CommonExtensionAttrs' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/CommonExtensionAttrs.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\CommonLinkAttrs' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/CommonLinkAttrs.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\ExtendedAmpGlobal' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/ExtendedAmpGlobal.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\FormNameAttr' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/FormNameAttr.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\GlobalAttrs' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/GlobalAttrs.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\ImgAttrs' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/ImgAttrs.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\InputCommonAttr' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/InputCommonAttr.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\InteractiveOptionsConfettiAttrs' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/InteractiveOptionsConfettiAttrs.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\InteractiveOptionsImgAttrs' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/InteractiveOptionsImgAttrs.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\InteractiveOptionsResultsCategoryAttrs' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/InteractiveOptionsResultsCategoryAttrs.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\InteractiveOptionsTextAttrs' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/InteractiveOptionsTextAttrs.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\InteractiveSharedConfigsAttrs' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/InteractiveSharedConfigsAttrs.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\LightboxableElements' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/LightboxableElements.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\MandatoryIdAttr' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/MandatoryIdAttr.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\MandatoryNameAttr' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/MandatoryNameAttr.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\MandatorySrcAmp4email' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/MandatorySrcAmp4email.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\MandatorySrcOrSrcset' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/MandatorySrcOrSrcset.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\NameAttr' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/NameAttr.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\NonceAttr' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/NonceAttr.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\OptionalSrcAmp4email' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/OptionalSrcAmp4email.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\PooolAccessAttrs' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/PooolAccessAttrs.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\PrivateClickMeasurementAttributes' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/PrivateClickMeasurementAttributes.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\SvgConditionalProcessingAttributes' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/SvgConditionalProcessingAttributes.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\SvgCoreAttributes' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/SvgCoreAttributes.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\SvgFilterPrimitiveAttributes' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/SvgFilterPrimitiveAttributes.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\SvgPresentationAttributes' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/SvgPresentationAttributes.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\SvgStyleAttr' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/SvgStyleAttr.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\SvgTransferFunctionAttributes' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/SvgTransferFunctionAttributes.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\SvgXlinkAttributes' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/SvgXlinkAttributes.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\TrackAttrsNoSubtitles' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/TrackAttrsNoSubtitles.php',
    'AmpProject\\Validator\\Spec\\AttributeList\\TrackAttrsSubtitles' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/TrackAttrsSubtitles.php',
    'AmpProject\\Validator\\Spec\\CssRuleset' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/CssRuleset.php',
    'AmpProject\\Validator\\Spec\\CssRuleset\\Amp4ads' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/CssRuleset/Amp4ads.php',
    'AmpProject\\Validator\\Spec\\CssRuleset\\Amp4emailDataCssStrict' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/CssRuleset/Amp4emailDataCssStrict.php',
    'AmpProject\\Validator\\Spec\\CssRuleset\\Amp4emailNoDataCssStrict' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/CssRuleset/Amp4emailNoDataCssStrict.php',
    'AmpProject\\Validator\\Spec\\CssRuleset\\AmpNoTransformed' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/CssRuleset/AmpNoTransformed.php',
    'AmpProject\\Validator\\Spec\\CssRuleset\\AmpTransformed' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/CssRuleset/AmpTransformed.php',
    'AmpProject\\Validator\\Spec\\DeclarationList' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/DeclarationList.php',
    'AmpProject\\Validator\\Spec\\DeclarationList\\BasicDeclarations' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/DeclarationList/BasicDeclarations.php',
    'AmpProject\\Validator\\Spec\\DeclarationList\\EmailSpecificDeclarations' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/DeclarationList/EmailSpecificDeclarations.php',
    'AmpProject\\Validator\\Spec\\DeclarationList\\SvgBasicDeclarations' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/DeclarationList/SvgBasicDeclarations.php',
    'AmpProject\\Validator\\Spec\\DescendantTagList' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList.php',
    'AmpProject\\Validator\\Spec\\DescendantTagList\\AmpMegaMenuAllowedDescendants' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList/AmpMegaMenuAllowedDescendants.php',
    'AmpProject\\Validator\\Spec\\DescendantTagList\\AmpNestedMenuAllowedDescendants' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList/AmpNestedMenuAllowedDescendants.php',
    'AmpProject\\Validator\\Spec\\DescendantTagList\\AmpStoryBookendAllowedDescendants' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList/AmpStoryBookendAllowedDescendants.php',
    'AmpProject\\Validator\\Spec\\DescendantTagList\\AmpStoryCtaLayerAllowedDescendants' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList/AmpStoryCtaLayerAllowedDescendants.php',
    'AmpProject\\Validator\\Spec\\DescendantTagList\\AmpStoryGridLayerAllowedDescendants' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList/AmpStoryGridLayerAllowedDescendants.php',
    'AmpProject\\Validator\\Spec\\DescendantTagList\\AmpStoryPageAttachmentAllowedDescendants' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList/AmpStoryPageAttachmentAllowedDescendants.php',
    'AmpProject\\Validator\\Spec\\DescendantTagList\\AmpStoryPlayerAllowedDescendants' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList/AmpStoryPlayerAllowedDescendants.php',
    'AmpProject\\Validator\\Spec\\DescendantTagList\\AmpStorySocialShareAllowedDescendants' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList/AmpStorySocialShareAllowedDescendants.php',
    'AmpProject\\Validator\\Spec\\DocRuleset' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/DocRuleset.php',
    'AmpProject\\Validator\\Spec\\DocRuleset\\Amp4email' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/DocRuleset/Amp4email.php',
    'AmpProject\\Validator\\Spec\\Error' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error.php',
    'AmpProject\\Validator\\Spec\\Error\\AmpEmailMissingStrictCssAttr' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/AmpEmailMissingStrictCssAttr.php',
    'AmpProject\\Validator\\Spec\\Error\\AttrDisallowedByImpliedLayout' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/AttrDisallowedByImpliedLayout.php',
    'AmpProject\\Validator\\Spec\\Error\\AttrDisallowedBySpecifiedLayout' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/AttrDisallowedBySpecifiedLayout.php',
    'AmpProject\\Validator\\Spec\\Error\\AttrMissingRequiredExtension' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/AttrMissingRequiredExtension.php',
    'AmpProject\\Validator\\Spec\\Error\\AttrRequiredButMissing' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/AttrRequiredButMissing.php',
    'AmpProject\\Validator\\Spec\\Error\\AttrValueRequiredByLayout' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/AttrValueRequiredByLayout.php',
    'AmpProject\\Validator\\Spec\\Error\\BaseTagMustPreceedAllUrls' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/BaseTagMustPreceedAllUrls.php',
    'AmpProject\\Validator\\Spec\\Error\\CdataViolatesDenylist' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CdataViolatesDenylist.php',
    'AmpProject\\Validator\\Spec\\Error\\ChildTagDoesNotSatisfyReferencePoint' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/ChildTagDoesNotSatisfyReferencePoint.php',
    'AmpProject\\Validator\\Spec\\Error\\ChildTagDoesNotSatisfyReferencePointSingular' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/ChildTagDoesNotSatisfyReferencePointSingular.php',
    'AmpProject\\Validator\\Spec\\Error\\CssExcessivelyNested' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssExcessivelyNested.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxBadUrl' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxBadUrl.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxDisallowedAttrSelector' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedAttrSelector.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxDisallowedDomain' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedDomain.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxDisallowedImportant' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedImportant.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxDisallowedKeyframeInsideKeyframe' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedKeyframeInsideKeyframe.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxDisallowedMediaFeature' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedMediaFeature.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxDisallowedMediaType' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedMediaType.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxDisallowedPropertyValue' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedPropertyValue.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxDisallowedPropertyValueWithHint' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedPropertyValueWithHint.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxDisallowedPseudoClass' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedPseudoClass.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxDisallowedPseudoElement' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedPseudoElement.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxDisallowedQualifiedRuleMustBeInsideKeyframe' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedQualifiedRuleMustBeInsideKeyframe.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxDisallowedRelativeUrl' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedRelativeUrl.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxEofInPreludeOfQualifiedRule' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxEofInPreludeOfQualifiedRule.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxErrorInPseudoSelector' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxErrorInPseudoSelector.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxIncompleteDeclaration' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxIncompleteDeclaration.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxInvalidAtRule' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxInvalidAtRule.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxInvalidAttrSelector' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxInvalidAttrSelector.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxInvalidDeclaration' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxInvalidDeclaration.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxInvalidProperty' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxInvalidProperty.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxInvalidPropertyNolist' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxInvalidPropertyNolist.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxInvalidUrl' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxInvalidUrl.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxInvalidUrlProtocol' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxInvalidUrlProtocol.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxMalformedMediaQuery' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxMalformedMediaQuery.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxMissingSelector' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxMissingSelector.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxMissingUrl' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxMissingUrl.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxNotASelectorStart' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxNotASelectorStart.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxPropertyDisallowedTogetherWith' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxPropertyDisallowedTogetherWith.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxPropertyDisallowedWithinAtRule' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxPropertyDisallowedWithinAtRule.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxPropertyRequiresQualification' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxPropertyRequiresQualification.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxQualifiedRuleHasNoDeclarations' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxQualifiedRuleHasNoDeclarations.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxStrayTrailingBackslash' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxStrayTrailingBackslash.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxUnparsedInputRemainsInSelector' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxUnparsedInputRemainsInSelector.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxUnterminatedComment' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxUnterminatedComment.php',
    'AmpProject\\Validator\\Spec\\Error\\CssSyntaxUnterminatedString' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxUnterminatedString.php',
    'AmpProject\\Validator\\Spec\\Error\\DeprecatedAttr' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DeprecatedAttr.php',
    'AmpProject\\Validator\\Spec\\Error\\DeprecatedTag' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DeprecatedTag.php',
    'AmpProject\\Validator\\Spec\\Error\\DevModeOnly' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DevModeOnly.php',
    'AmpProject\\Validator\\Spec\\Error\\DisallowedAmpDomain' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedAmpDomain.php',
    'AmpProject\\Validator\\Spec\\Error\\DisallowedAttr' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedAttr.php',
    'AmpProject\\Validator\\Spec\\Error\\DisallowedChildTagName' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedChildTagName.php',
    'AmpProject\\Validator\\Spec\\Error\\DisallowedDomain' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedDomain.php',
    'AmpProject\\Validator\\Spec\\Error\\DisallowedFirstChildTagName' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedFirstChildTagName.php',
    'AmpProject\\Validator\\Spec\\Error\\DisallowedManufacturedBody' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedManufacturedBody.php',
    'AmpProject\\Validator\\Spec\\Error\\DisallowedPropertyInAttrValue' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedPropertyInAttrValue.php',
    'AmpProject\\Validator\\Spec\\Error\\DisallowedRelativeUrl' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedRelativeUrl.php',
    'AmpProject\\Validator\\Spec\\Error\\DisallowedScriptTag' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedScriptTag.php',
    'AmpProject\\Validator\\Spec\\Error\\DisallowedStyleAttr' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedStyleAttr.php',
    'AmpProject\\Validator\\Spec\\Error\\DisallowedTag' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedTag.php',
    'AmpProject\\Validator\\Spec\\Error\\DisallowedTagAncestor' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedTagAncestor.php',
    'AmpProject\\Validator\\Spec\\Error\\DocumentSizeLimitExceeded' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DocumentSizeLimitExceeded.php',
    'AmpProject\\Validator\\Spec\\Error\\DocumentTooComplex' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DocumentTooComplex.php',
    'AmpProject\\Validator\\Spec\\Error\\DuplicateAttribute' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DuplicateAttribute.php',
    'AmpProject\\Validator\\Spec\\Error\\DuplicateDimension' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DuplicateDimension.php',
    'AmpProject\\Validator\\Spec\\Error\\DuplicateReferencePoint' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DuplicateReferencePoint.php',
    'AmpProject\\Validator\\Spec\\Error\\DuplicateUniqueTag' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DuplicateUniqueTag.php',
    'AmpProject\\Validator\\Spec\\Error\\DuplicateUniqueTagWarning' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DuplicateUniqueTagWarning.php',
    'AmpProject\\Validator\\Spec\\Error\\ExtensionUnused' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/ExtensionUnused.php',
    'AmpProject\\Validator\\Spec\\Error\\GeneralDisallowedTag' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/GeneralDisallowedTag.php',
    'AmpProject\\Validator\\Spec\\Error\\ImpliedLayoutInvalid' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/ImpliedLayoutInvalid.php',
    'AmpProject\\Validator\\Spec\\Error\\InconsistentUnitsForWidthAndHeight' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/InconsistentUnitsForWidthAndHeight.php',
    'AmpProject\\Validator\\Spec\\Error\\IncorrectMinNumChildTags' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/IncorrectMinNumChildTags.php',
    'AmpProject\\Validator\\Spec\\Error\\IncorrectNumChildTags' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/IncorrectNumChildTags.php',
    'AmpProject\\Validator\\Spec\\Error\\IncorrectScriptReleaseVersion' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/IncorrectScriptReleaseVersion.php',
    'AmpProject\\Validator\\Spec\\Error\\InlineScriptTooLong' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/InlineScriptTooLong.php',
    'AmpProject\\Validator\\Spec\\Error\\InlineStyleTooLong' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/InlineStyleTooLong.php',
    'AmpProject\\Validator\\Spec\\Error\\InvalidAttrValue' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidAttrValue.php',
    'AmpProject\\Validator\\Spec\\Error\\InvalidDoctypeHtml' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidDoctypeHtml.php',
    'AmpProject\\Validator\\Spec\\Error\\InvalidExtensionPath' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidExtensionPath.php',
    'AmpProject\\Validator\\Spec\\Error\\InvalidExtensionVersion' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidExtensionVersion.php',
    'AmpProject\\Validator\\Spec\\Error\\InvalidJsonCdata' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidJsonCdata.php',
    'AmpProject\\Validator\\Spec\\Error\\InvalidPropertyValueInAttrValue' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidPropertyValueInAttrValue.php',
    'AmpProject\\Validator\\Spec\\Error\\InvalidUrl' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidUrl.php',
    'AmpProject\\Validator\\Spec\\Error\\InvalidUrlProtocol' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidUrlProtocol.php',
    'AmpProject\\Validator\\Spec\\Error\\InvalidUtf8' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidUtf8.php',
    'AmpProject\\Validator\\Spec\\Error\\LtsScriptAfterNonLts' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/LtsScriptAfterNonLts.php',
    'AmpProject\\Validator\\Spec\\Error\\MandatoryAnyofAttrMissing' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryAnyofAttrMissing.php',
    'AmpProject\\Validator\\Spec\\Error\\MandatoryAttrMissing' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryAttrMissing.php',
    'AmpProject\\Validator\\Spec\\Error\\MandatoryCdataMissingOrIncorrect' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryCdataMissingOrIncorrect.php',
    'AmpProject\\Validator\\Spec\\Error\\MandatoryLastChildTag' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryLastChildTag.php',
    'AmpProject\\Validator\\Spec\\Error\\MandatoryOneofAttrMissing' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryOneofAttrMissing.php',
    'AmpProject\\Validator\\Spec\\Error\\MandatoryPropertyMissingFromAttrValue' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryPropertyMissingFromAttrValue.php',
    'AmpProject\\Validator\\Spec\\Error\\MandatoryReferencePointMissing' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryReferencePointMissing.php',
    'AmpProject\\Validator\\Spec\\Error\\MandatoryTagAncestor' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryTagAncestor.php',
    'AmpProject\\Validator\\Spec\\Error\\MandatoryTagAncestorWithHint' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryTagAncestorWithHint.php',
    'AmpProject\\Validator\\Spec\\Error\\MandatoryTagMissing' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryTagMissing.php',
    'AmpProject\\Validator\\Spec\\Error\\MissingLayoutAttributes' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/MissingLayoutAttributes.php',
    'AmpProject\\Validator\\Spec\\Error\\MissingRequiredExtension' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/MissingRequiredExtension.php',
    'AmpProject\\Validator\\Spec\\Error\\MissingUrl' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/MissingUrl.php',
    'AmpProject\\Validator\\Spec\\Error\\MutuallyExclusiveAttrs' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/MutuallyExclusiveAttrs.php',
    'AmpProject\\Validator\\Spec\\Error\\NonLtsScriptAfterLts' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/NonLtsScriptAfterLts.php',
    'AmpProject\\Validator\\Spec\\Error\\NonWhitespaceCdataEncountered' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/NonWhitespaceCdataEncountered.php',
    'AmpProject\\Validator\\Spec\\Error\\SpecifiedLayoutInvalid' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/SpecifiedLayoutInvalid.php',
    'AmpProject\\Validator\\Spec\\Error\\StylesheetAndInlineStyleTooLong' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/StylesheetAndInlineStyleTooLong.php',
    'AmpProject\\Validator\\Spec\\Error\\StylesheetTooLong' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/StylesheetTooLong.php',
    'AmpProject\\Validator\\Spec\\Error\\TagExcludedByTag' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/TagExcludedByTag.php',
    'AmpProject\\Validator\\Spec\\Error\\TagNotAllowedToHaveSiblings' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/TagNotAllowedToHaveSiblings.php',
    'AmpProject\\Validator\\Spec\\Error\\TagReferencePointConflict' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/TagReferencePointConflict.php',
    'AmpProject\\Validator\\Spec\\Error\\TagRequiredByMissing' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/TagRequiredByMissing.php',
    'AmpProject\\Validator\\Spec\\Error\\TemplateInAttrName' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/TemplateInAttrName.php',
    'AmpProject\\Validator\\Spec\\Error\\TemplatePartialInAttrValue' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/TemplatePartialInAttrValue.php',
    'AmpProject\\Validator\\Spec\\Error\\UnescapedTemplateInAttrValue' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/UnescapedTemplateInAttrValue.php',
    'AmpProject\\Validator\\Spec\\Error\\UnknownCode' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/UnknownCode.php',
    'AmpProject\\Validator\\Spec\\Error\\ValueSetMismatch' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/ValueSetMismatch.php',
    'AmpProject\\Validator\\Spec\\Error\\WarningExtensionDeprecatedVersion' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/WarningExtensionDeprecatedVersion.php',
    'AmpProject\\Validator\\Spec\\Error\\WarningExtensionUnused' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/WarningExtensionUnused.php',
    'AmpProject\\Validator\\Spec\\Error\\WarningTagRequiredByMissing' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/WarningTagRequiredByMissing.php',
    'AmpProject\\Validator\\Spec\\Error\\WrongParentTag' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Error/WrongParentTag.php',
    'AmpProject\\Validator\\Spec\\Identifiable' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Identifiable.php',
    'AmpProject\\Validator\\Spec\\IterableSection' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/IterableSection.php',
    'AmpProject\\Validator\\Spec\\Iteration' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Iteration.php',
    'AmpProject\\Validator\\Spec\\Section\\AttributeLists' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Section/AttributeLists.php',
    'AmpProject\\Validator\\Spec\\Section\\CssRulesets' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Section/CssRulesets.php',
    'AmpProject\\Validator\\Spec\\Section\\DeclarationLists' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Section/DeclarationLists.php',
    'AmpProject\\Validator\\Spec\\Section\\DescendantTagLists' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Section/DescendantTagLists.php',
    'AmpProject\\Validator\\Spec\\Section\\DocRulesets' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Section/DocRulesets.php',
    'AmpProject\\Validator\\Spec\\Section\\Errors' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Section/Errors.php',
    'AmpProject\\Validator\\Spec\\Section\\Tags' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Section/Tags.php',
    'AmpProject\\Validator\\Spec\\SpecRule' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/SpecRule.php',
    'AmpProject\\Validator\\Spec\\Tag' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag.php',
    'AmpProject\\Validator\\Spec\\TagWithExtensionSpec' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/TagWithExtensionSpec.php',
    'AmpProject\\Validator\\Spec\\Tag\\A' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/A.php',
    'AmpProject\\Validator\\Spec\\Tag\\AAmp4email' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AAmp4email.php',
    'AmpProject\\Validator\\Spec\\Tag\\Abbr' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Abbr.php',
    'AmpProject\\Validator\\Spec\\Tag\\Acronym' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Acronym.php',
    'AmpProject\\Validator\\Spec\\Tag\\Address' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Address.php',
    'AmpProject\\Validator\\Spec\\Tag\\Amp3dGltf' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Amp3dGltf.php',
    'AmpProject\\Validator\\Spec\\Tag\\Amp3qPlayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Amp3qPlayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\Amp4adsEngineScript' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Amp4adsEngineScript.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpAccessExtensionJsonScript' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAccessExtensionJsonScript.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpAccordion' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAccordion.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpAccordionSection' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAccordionSection.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpActionMacro' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpActionMacro.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpAd' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAd.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpAdCustom' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAdCustom.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpAdExit' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAdExit.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpAdExitConfigurationJson' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAdExitConfigurationJson.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpAdExtensionScript' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAdExtensionScript.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpAdWithDataEnableRefreshAttribute' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAdWithDataEnableRefreshAttribute.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpAdWithDataMultiSizeAttribute' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAdWithDataMultiSizeAttribute.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpAdWithTypeCustom' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAdWithTypeCustom.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpAddthis' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAddthis.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpAnalytics' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAnalytics.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpAnalyticsExtensionJsonScript' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAnalyticsExtensionJsonScript.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpAnim' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAnim.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpAnimAmp4email' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAnimAmp4email.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpAnimExtensionScriptAmp4email' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAnimExtensionScriptAmp4email.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpAnimation' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAnimation.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpAnimationExtensionJsonScript' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAnimationExtensionJsonScript.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpApesterMedia' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpApesterMedia.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpAppBanner' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAppBanner.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpAppBannerButtonOpenButton' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAppBannerButtonOpenButton.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpAudio' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAudio.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpAudioA4a' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAudioA4a.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpAudioSource' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAudioSource.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpAudioTrack' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAudioTrack.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpAudioTrackKindSubtitles' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAudioTrackKindSubtitles.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpAutoAds' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAutoAds.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpAutocomplete' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAutocomplete.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpAutocompleteAmp4email' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAutocompleteAmp4email.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpAutocompleteInput' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAutocompleteInput.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpAutocompleteJson' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAutocompleteJson.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpBaseCarousel' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBaseCarousel.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpBaseCarouselLightbox' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBaseCarouselLightbox.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpBaseCarouselLightboxChild' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBaseCarouselLightboxChild.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpBaseCarouselLightboxLightboxExclude' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBaseCarouselLightboxLightboxExclude.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpBeopinion' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBeopinion.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpBindExtensionJsonScript' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBindExtensionJsonScript.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpBindMacro' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBindMacro.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpBodymovinAnimation' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBodymovinAnimation.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpBridPlayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBridPlayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpBrightcove' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBrightcove.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpBysideContent' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBysideContent.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpCallTracking' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpCallTracking.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpCarousel' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpCarousel.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpCarouselLightbox' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpCarouselLightbox.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpCarouselLightboxChild' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpCarouselLightboxChild.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpCarouselLightboxLightboxExclude' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpCarouselLightboxLightboxExclude.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpConnatixPlayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpConnatixPlayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpConsent' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpConsent.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpConsentExtensionJsonScript' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpConsentExtensionJsonScript.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpConsentType' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpConsentType.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpDailymotion' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDailymotion.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpDateCountdown' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDateCountdown.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpDateDisplay' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDateDisplay.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpDatePickerTemplateDateTemplate' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDatePickerTemplateDateTemplate.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpDatePickerTemplateInfoTemplate' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDatePickerTemplateInfoTemplate.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpDatePickerTypeRangeModeOverlay' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDatePickerTypeRangeModeOverlay.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpDatePickerTypeRangeModeStatic' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDatePickerTypeRangeModeStatic.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpDatePickerTypeSingleModeOverlay' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDatePickerTypeSingleModeOverlay.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpDatePickerTypeSingleModeStatic' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDatePickerTypeSingleModeStatic.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpDelightPlayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDelightPlayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpEmbed' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpEmbed.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpEmbedWithDataMultiSizeAttribute' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpEmbedWithDataMultiSizeAttribute.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpEmbedlyCard' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpEmbedlyCard.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpEmbedlyKey' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpEmbedlyKey.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpExperiment' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpExperiment.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpExperimentExtensionJsonScript' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpExperimentExtensionJsonScript.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpExperimentStoryExtensionJsonScript' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpExperimentStoryExtensionJsonScript.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpFacebook' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFacebook.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpFacebook10' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFacebook10.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpFacebookComments' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFacebookComments.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpFacebookComments10' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFacebookComments10.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpFacebookLike' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFacebookLike.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpFacebookLike10' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFacebookLike10.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpFacebookPage' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFacebookPage.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpFacebookPage10' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFacebookPage10.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpFitText' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFitText.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpFont' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFont.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpFxFlyingCarpet' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFxFlyingCarpet.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpGeo' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpGeo.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpGeoExtensionJsonScript' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpGeoExtensionJsonScript.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpGfycat' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpGfycat.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpGist' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpGist.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpGoogleDocumentEmbed' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpGoogleDocumentEmbed.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpGoogleReadAloudPlayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpGoogleReadAloudPlayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpGwdAnimation' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpGwdAnimation.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpHulu' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpHulu.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpIframe' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpIframe.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpIframely' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpIframely.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpImaVideo' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImaVideo.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpImaVideoScriptTypeApplicationJson' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImaVideoScriptTypeApplicationJson.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpImaVideoSource' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImaVideoSource.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpImaVideoTrack' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImaVideoTrack.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpImaVideoTrackKindSubtitles' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImaVideoTrackKindSubtitles.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpImageLightbox' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImageLightbox.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpImageSlider' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImageSlider.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpImageSliderDivFirst' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImageSliderDivFirst.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpImageSliderDivSecond' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImageSliderDivSecond.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpImageSliderTransformed' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImageSliderTransformed.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpImg' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImg.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpImgAmp4email' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImgAmp4email.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpImgImgPlaceholderTransformed' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImgImgPlaceholderTransformed.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpImgImgTransformed' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImgImgTransformed.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpImgTransformed' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImgTransformed.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpImgur' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImgur.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpInlineGallery' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpInlineGallery.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpInlineGalleryPagination' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpInlineGalleryPagination.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpInlineGalleryPaginationInset' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpInlineGalleryPaginationInset.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpInlineGalleryThumbnails' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpInlineGalleryThumbnails.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpInstagram' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpInstagram.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpInstallServiceworker' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpInstallServiceworker.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpIzlesene' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpIzlesene.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpJwplayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpJwplayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpKalturaPlayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpKalturaPlayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpLayout' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLayout.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpLightbox' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLightbox.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpLightboxAmp4ads' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLightboxAmp4ads.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpLinkRewriter' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLinkRewriter.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpLinkRewriterExtensionJsonScript' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLinkRewriterExtensionJsonScript.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpList' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpList.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpListAmp4email' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpListAmp4email.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpListDivFetchError' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpListDivFetchError.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpListLoadMore' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpListLoadMore.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpListLoadMoreButtonLoadMoreClickable' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpListLoadMoreButtonLoadMoreClickable.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpLiveList' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLiveList.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpLiveListItems' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLiveListItems.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpLiveListItemsItem' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLiveListItemsItem.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpLiveListPagination' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLiveListPagination.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpLiveListUpdate' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLiveListUpdate.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpMathml' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMathml.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpMegaMenu' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaMenu.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpMegaMenuAmpList' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaMenuAmpList.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpMegaMenuAmpListTemplate' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaMenuAmpListTemplate.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpMegaMenuItemContent' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaMenuItemContent.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpMegaMenuItemHeading' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaMenuItemHeading.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpMegaMenuNav' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaMenuNav.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpMegaMenuNavUlOl' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaMenuNavUlOl.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpMegaMenuNavUlOlLi' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaMenuNavUlOlLi.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpMegaphoneDataEpisode' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaphoneDataEpisode.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpMegaphoneDataPlaylist' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaphoneDataPlaylist.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpMinuteMediaPlayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMinuteMediaPlayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpMowplayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMowplayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpNestedMenu' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNestedMenu.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpNextPageFooter' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNextPageFooter.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpNextPageRecommendationBox' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNextPageRecommendationBox.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpNextPageScriptTypeApplicationJson' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNextPageScriptTypeApplicationJson.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpNextPageSeparator' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNextPageSeparator.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpNextPageTypeAdsense' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNextPageTypeAdsense.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpNextPageWithInlineConfig' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNextPageWithInlineConfig.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpNextPageWithSrcAttribute' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNextPageWithSrcAttribute.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpNexxtvPlayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNexxtvPlayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpO2Player' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpO2Player.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpOnetapGoogle' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpOnetapGoogle.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpOoyalaPlayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpOoyalaPlayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpOrientationObserver' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpOrientationObserver.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpPanZoom' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpPanZoom.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpPinterest' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpPinterest.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpPixel' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpPixel.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpPlaybuzz' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpPlaybuzz.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpPositionObserver' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpPositionObserver.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpPowrPlayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpPowrPlayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpReachPlayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpReachPlayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpRecaptchaInput' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpRecaptchaInput.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpRedbullPlayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpRedbullPlayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpReddit' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpReddit.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpRender' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpRender.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpRiddleQuiz' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpRiddleQuiz.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpScript' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpScript.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpScriptExtensionLocalScript' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpScriptExtensionLocalScript.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpSelector' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSelector.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpSelectorChild' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSelectorChild.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpSelectorOption' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSelectorOption.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpSidebar' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSidebar.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpSidebarAmp4email' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSidebarAmp4email.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpSidebarNav' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSidebarNav.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpSkimlinks' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSkimlinks.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpSmartlinks' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSmartlinks.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpSocialShare' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSocialShare.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpSoundcloud' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSoundcloud.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpSpringboardPlayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSpringboardPlayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpState' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpState.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStateAmp4email' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStateAmp4email.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStickyAd' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStickyAd.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStory' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStory.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStory360' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStory360.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryAmpAudio' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAmpAudio.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryAmpSidebar' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAmpSidebar.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryAmpStoryPageAttachmentAmpVideo' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAmpStoryPageAttachmentAmpVideo.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryAmpVideo' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAmpVideo.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryAnimation' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAnimation.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryAnimationJsonScript' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAnimationJsonScript.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryAutoAds' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAutoAds.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryAutoAdsConfigScript' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAutoAdsConfigScript.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryAutoAdsTemplate' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAutoAdsTemplate.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryAutoAnalytics' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAutoAnalytics.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryBookend' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryBookend.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryBookendExtensionJsonScript' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryBookendExtensionJsonScript.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryCaptions' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryCaptions.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryConsent' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryConsent.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryConsentExtensionJsonScript' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryConsentExtensionJsonScript.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryCtaLayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryCtaLayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryCtaLayerAnimateIn' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryCtaLayerAnimateIn.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryGridLayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryGridLayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryGridLayerAnimateIn' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryGridLayerAnimateIn.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryGridLayerDefault' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryGridLayerDefault.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryInteractiveBinaryPoll' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryInteractiveBinaryPoll.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryInteractiveImgPoll' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryInteractiveImgPoll.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryInteractiveImgQuiz' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryInteractiveImgQuiz.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryInteractivePoll' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryInteractivePoll.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryInteractiveQuiz' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryInteractiveQuiz.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryInteractiveResults' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryInteractiveResults.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryPage' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryPage.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryPageAttachment' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryPageAttachment.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryPageAttachmentHref' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryPageAttachmentHref.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryPageOutlink' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryPageOutlink.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryPanningMedia' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryPanningMedia.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryPlayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryPlayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryPlayerImg' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryPlayerImg.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryShoppingAttachment' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryShoppingAttachment.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryShoppingConfig' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryShoppingConfig.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStoryShoppingTag' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryShoppingTag.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStorySocialShare' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStorySocialShare.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStorySocialShareExtensionJsonScript' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStorySocialShareExtensionJsonScript.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStorySubscriptions' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStorySubscriptions.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpStreamGallery' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStreamGallery.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpSubscriptionsExtensionJsonScript' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSubscriptionsExtensionJsonScript.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpTiktok' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpTiktok.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpTiktokBlockquote' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpTiktokBlockquote.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpTimeago' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpTimeago.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpTruncateText' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpTruncateText.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpTwitter' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpTwitter.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpUserNotification' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpUserNotification.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpVideo' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVideo.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpVideoIframe' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVideoIframe.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpVideoIframeTransformed' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVideoIframeTransformed.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpVideoSource' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVideoSource.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpVideoTrack' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVideoTrack.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpVideoTrackKindSubtitles' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVideoTrackKindSubtitles.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpVimeo' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVimeo.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpVine' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVine.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpViqeoPlayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpViqeoPlayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpVk' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVk.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpWebPush' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpWebPush.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpWebPushWidget' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpWebPushWidget.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpWistiaPlayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpWistiaPlayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpWordpressEmbed' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpWordpressEmbed.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpYotpo' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpYotpo.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmpYoutube' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpYoutube.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmphtmlEngineScript' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlEngineScript.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmphtmlEngineScriptAmp4email' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlEngineScriptAmp4email.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmphtmlEngineScriptLts' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlEngineScriptLts.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmphtmlEngineScriptLtsTransformed' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlEngineScriptLtsTransformed.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmphtmlEngineScriptTransformed' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlEngineScriptTransformed.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmphtmlModuleEngineScript' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlModuleEngineScript.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmphtmlModuleLtsEngineScript' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlModuleLtsEngineScript.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmphtmlNomoduleEngineScript' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlNomoduleEngineScript.php',
    'AmpProject\\Validator\\Spec\\Tag\\AmphtmlNomoduleLtsEngineScript' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlNomoduleLtsEngineScript.php',
    'AmpProject\\Validator\\Spec\\Tag\\Article' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Article.php',
    'AmpProject\\Validator\\Spec\\Tag\\Aside' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Aside.php',
    'AmpProject\\Validator\\Spec\\Tag\\Audio' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Audio.php',
    'AmpProject\\Validator\\Spec\\Tag\\AudioSource' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AudioSource.php',
    'AmpProject\\Validator\\Spec\\Tag\\AudioTrack' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AudioTrack.php',
    'AmpProject\\Validator\\Spec\\Tag\\AudioTrackKindSubtitles' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AudioTrackKindSubtitles.php',
    'AmpProject\\Validator\\Spec\\Tag\\B' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/B.php',
    'AmpProject\\Validator\\Spec\\Tag\\Base' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Base.php',
    'AmpProject\\Validator\\Spec\\Tag\\Bdi' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Bdi.php',
    'AmpProject\\Validator\\Spec\\Tag\\Bdo' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Bdo.php',
    'AmpProject\\Validator\\Spec\\Tag\\Big' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Big.php',
    'AmpProject\\Validator\\Spec\\Tag\\Blockquote' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Blockquote.php',
    'AmpProject\\Validator\\Spec\\Tag\\BlockquoteWithTiktok' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/BlockquoteWithTiktok.php',
    'AmpProject\\Validator\\Spec\\Tag\\Body' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Body.php',
    'AmpProject\\Validator\\Spec\\Tag\\Br' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Br.php',
    'AmpProject\\Validator\\Spec\\Tag\\Button' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Button.php',
    'AmpProject\\Validator\\Spec\\Tag\\ButtonAmpNestedMenu' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ButtonAmpNestedMenu.php',
    'AmpProject\\Validator\\Spec\\Tag\\Canvas' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Canvas.php',
    'AmpProject\\Validator\\Spec\\Tag\\Caption' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Caption.php',
    'AmpProject\\Validator\\Spec\\Tag\\Center' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Center.php',
    'AmpProject\\Validator\\Spec\\Tag\\Circle' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Circle.php',
    'AmpProject\\Validator\\Spec\\Tag\\Cite' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Cite.php',
    'AmpProject\\Validator\\Spec\\Tag\\Clippath' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Clippath.php',
    'AmpProject\\Validator\\Spec\\Tag\\Code' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Code.php',
    'AmpProject\\Validator\\Spec\\Tag\\Col' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Col.php',
    'AmpProject\\Validator\\Spec\\Tag\\Colgroup' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Colgroup.php',
    'AmpProject\\Validator\\Spec\\Tag\\CryptokeysJsonScript' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/CryptokeysJsonScript.php',
    'AmpProject\\Validator\\Spec\\Tag\\Data' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Data.php',
    'AmpProject\\Validator\\Spec\\Tag\\Datalist' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Datalist.php',
    'AmpProject\\Validator\\Spec\\Tag\\Dd' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Dd.php',
    'AmpProject\\Validator\\Spec\\Tag\\Defs' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Defs.php',
    'AmpProject\\Validator\\Spec\\Tag\\Del' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Del.php',
    'AmpProject\\Validator\\Spec\\Tag\\Desc' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Desc.php',
    'AmpProject\\Validator\\Spec\\Tag\\Details' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Details.php',
    'AmpProject\\Validator\\Spec\\Tag\\Dfn' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Dfn.php',
    'AmpProject\\Validator\\Spec\\Tag\\Dir' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Dir.php',
    'AmpProject\\Validator\\Spec\\Tag\\Div' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Div.php',
    'AmpProject\\Validator\\Spec\\Tag\\DivAmpNestedMenu' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/DivAmpNestedMenu.php',
    'AmpProject\\Validator\\Spec\\Tag\\Dl' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Dl.php',
    'AmpProject\\Validator\\Spec\\Tag\\Dt' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Dt.php',
    'AmpProject\\Validator\\Spec\\Tag\\Ellipse' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Ellipse.php',
    'AmpProject\\Validator\\Spec\\Tag\\Em' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Em.php',
    'AmpProject\\Validator\\Spec\\Tag\\Feblend' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Feblend.php',
    'AmpProject\\Validator\\Spec\\Tag\\Fecolormatrix' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fecolormatrix.php',
    'AmpProject\\Validator\\Spec\\Tag\\Fecomponenttransfer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fecomponenttransfer.php',
    'AmpProject\\Validator\\Spec\\Tag\\Fecomposite' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fecomposite.php',
    'AmpProject\\Validator\\Spec\\Tag\\Feconvolvematrix' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Feconvolvematrix.php',
    'AmpProject\\Validator\\Spec\\Tag\\Fediffuselighting' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fediffuselighting.php',
    'AmpProject\\Validator\\Spec\\Tag\\Fedisplacementmap' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fedisplacementmap.php',
    'AmpProject\\Validator\\Spec\\Tag\\Fedistantlight' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fedistantlight.php',
    'AmpProject\\Validator\\Spec\\Tag\\Fedropshadow' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fedropshadow.php',
    'AmpProject\\Validator\\Spec\\Tag\\Feflood' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Feflood.php',
    'AmpProject\\Validator\\Spec\\Tag\\Fefunca' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fefunca.php',
    'AmpProject\\Validator\\Spec\\Tag\\Fefuncb' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fefuncb.php',
    'AmpProject\\Validator\\Spec\\Tag\\Fefuncg' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fefuncg.php',
    'AmpProject\\Validator\\Spec\\Tag\\Fefuncr' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fefuncr.php',
    'AmpProject\\Validator\\Spec\\Tag\\Fegaussianblur' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fegaussianblur.php',
    'AmpProject\\Validator\\Spec\\Tag\\Femerge' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Femerge.php',
    'AmpProject\\Validator\\Spec\\Tag\\Femergenode' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Femergenode.php',
    'AmpProject\\Validator\\Spec\\Tag\\Femorphology' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Femorphology.php',
    'AmpProject\\Validator\\Spec\\Tag\\Feoffset' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Feoffset.php',
    'AmpProject\\Validator\\Spec\\Tag\\Fepointlight' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fepointlight.php',
    'AmpProject\\Validator\\Spec\\Tag\\Fespecularlighting' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fespecularlighting.php',
    'AmpProject\\Validator\\Spec\\Tag\\Fespotlight' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fespotlight.php',
    'AmpProject\\Validator\\Spec\\Tag\\Fetile' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fetile.php',
    'AmpProject\\Validator\\Spec\\Tag\\Feturbulence' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Feturbulence.php',
    'AmpProject\\Validator\\Spec\\Tag\\Fieldset' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fieldset.php',
    'AmpProject\\Validator\\Spec\\Tag\\Figcaption' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Figcaption.php',
    'AmpProject\\Validator\\Spec\\Tag\\Figure' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Figure.php',
    'AmpProject\\Validator\\Spec\\Tag\\Filter' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Filter.php',
    'AmpProject\\Validator\\Spec\\Tag\\Footer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Footer.php',
    'AmpProject\\Validator\\Spec\\Tag\\FormDivSubmitError' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormDivSubmitError.php',
    'AmpProject\\Validator\\Spec\\Tag\\FormDivSubmitErrorTemplate' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormDivSubmitErrorTemplate.php',
    'AmpProject\\Validator\\Spec\\Tag\\FormDivSubmitSuccess' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormDivSubmitSuccess.php',
    'AmpProject\\Validator\\Spec\\Tag\\FormDivSubmitSuccessTemplate' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormDivSubmitSuccessTemplate.php',
    'AmpProject\\Validator\\Spec\\Tag\\FormDivSubmitting' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormDivSubmitting.php',
    'AmpProject\\Validator\\Spec\\Tag\\FormDivSubmittingTemplate' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormDivSubmittingTemplate.php',
    'AmpProject\\Validator\\Spec\\Tag\\FormDivVerifyError' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormDivVerifyError.php',
    'AmpProject\\Validator\\Spec\\Tag\\FormDivVerifyErrorTemplate' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormDivVerifyErrorTemplate.php',
    'AmpProject\\Validator\\Spec\\Tag\\FormMethodGet' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormMethodGet.php',
    'AmpProject\\Validator\\Spec\\Tag\\FormMethodGetAmp4email' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormMethodGetAmp4email.php',
    'AmpProject\\Validator\\Spec\\Tag\\FormMethodPost' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormMethodPost.php',
    'AmpProject\\Validator\\Spec\\Tag\\FormMethodPostAmp4email' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormMethodPostAmp4email.php',
    'AmpProject\\Validator\\Spec\\Tag\\G' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/G.php',
    'AmpProject\\Validator\\Spec\\Tag\\Glyph' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Glyph.php',
    'AmpProject\\Validator\\Spec\\Tag\\Glyphref' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Glyphref.php',
    'AmpProject\\Validator\\Spec\\Tag\\H1' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/H1.php',
    'AmpProject\\Validator\\Spec\\Tag\\H2' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/H2.php',
    'AmpProject\\Validator\\Spec\\Tag\\H2AmpNestedMenu' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/H2AmpNestedMenu.php',
    'AmpProject\\Validator\\Spec\\Tag\\H3' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/H3.php',
    'AmpProject\\Validator\\Spec\\Tag\\H3AmpNestedMenu' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/H3AmpNestedMenu.php',
    'AmpProject\\Validator\\Spec\\Tag\\H4' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/H4.php',
    'AmpProject\\Validator\\Spec\\Tag\\H4AmpNestedMenu' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/H4AmpNestedMenu.php',
    'AmpProject\\Validator\\Spec\\Tag\\H5' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/H5.php',
    'AmpProject\\Validator\\Spec\\Tag\\H5AmpNestedMenu' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/H5AmpNestedMenu.php',
    'AmpProject\\Validator\\Spec\\Tag\\H6' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/H6.php',
    'AmpProject\\Validator\\Spec\\Tag\\H6AmpNestedMenu' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/H6AmpNestedMenu.php',
    'AmpProject\\Validator\\Spec\\Tag\\Head' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Head.php',
    'AmpProject\\Validator\\Spec\\Tag\\HeadStyleAmp4adsBoilerplate' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/HeadStyleAmp4adsBoilerplate.php',
    'AmpProject\\Validator\\Spec\\Tag\\HeadStyleAmp4emailBoilerplate' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/HeadStyleAmp4emailBoilerplate.php',
    'AmpProject\\Validator\\Spec\\Tag\\HeadStyleAmpBoilerplate' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/HeadStyleAmpBoilerplate.php',
    'AmpProject\\Validator\\Spec\\Tag\\Header' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Header.php',
    'AmpProject\\Validator\\Spec\\Tag\\HeroImage' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/HeroImage.php',
    'AmpProject\\Validator\\Spec\\Tag\\HeroImg' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/HeroImg.php',
    'AmpProject\\Validator\\Spec\\Tag\\Hgroup' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Hgroup.php',
    'AmpProject\\Validator\\Spec\\Tag\\Hkern' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Hkern.php',
    'AmpProject\\Validator\\Spec\\Tag\\Hr' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Hr.php',
    'AmpProject\\Validator\\Spec\\Tag\\Html' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Html.php',
    'AmpProject\\Validator\\Spec\\Tag\\HtmlDoctype' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/HtmlDoctype.php',
    'AmpProject\\Validator\\Spec\\Tag\\HtmlDoctypeAmp4ads' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/HtmlDoctypeAmp4ads.php',
    'AmpProject\\Validator\\Spec\\Tag\\HtmlTransformed' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/HtmlTransformed.php',
    'AmpProject\\Validator\\Spec\\Tag\\I' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/I.php',
    'AmpProject\\Validator\\Spec\\Tag\\IAmphtmlSizerIntrinsic' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/IAmphtmlSizerIntrinsic.php',
    'AmpProject\\Validator\\Spec\\Tag\\IAmphtmlSizerResponsive' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/IAmphtmlSizerResponsive.php',
    'AmpProject\\Validator\\Spec\\Tag\\Iframe' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Iframe.php',
    'AmpProject\\Validator\\Spec\\Tag\\Image' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Image.php',
    'AmpProject\\Validator\\Spec\\Tag\\ImageUsingSrcset' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ImageUsingSrcset.php',
    'AmpProject\\Validator\\Spec\\Tag\\ImgIAmphtmlIntrinsicSizer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ImgIAmphtmlIntrinsicSizer.php',
    'AmpProject\\Validator\\Spec\\Tag\\ImgIAmphtmlIntrinsicSizerAmpStoryPlayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ImgIAmphtmlIntrinsicSizerAmpStoryPlayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\ImgUsingSrcset' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ImgUsingSrcset.php',
    'AmpProject\\Validator\\Spec\\Tag\\Input' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Input.php',
    'AmpProject\\Validator\\Spec\\Tag\\InputMaskCustomMask' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputMaskCustomMask.php',
    'AmpProject\\Validator\\Spec\\Tag\\InputMaskDateDdMmYyyy' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputMaskDateDdMmYyyy.php',
    'AmpProject\\Validator\\Spec\\Tag\\InputMaskDateMmDdYyyy' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputMaskDateMmDdYyyy.php',
    'AmpProject\\Validator\\Spec\\Tag\\InputMaskDateMmYy' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputMaskDateMmYy.php',
    'AmpProject\\Validator\\Spec\\Tag\\InputMaskDateYyyyMmDd' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputMaskDateYyyyMmDd.php',
    'AmpProject\\Validator\\Spec\\Tag\\InputMaskPaymentCard' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputMaskPaymentCard.php',
    'AmpProject\\Validator\\Spec\\Tag\\InputTypeFile' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputTypeFile.php',
    'AmpProject\\Validator\\Spec\\Tag\\InputTypeImage' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputTypeImage.php',
    'AmpProject\\Validator\\Spec\\Tag\\InputTypePassword' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputTypePassword.php',
    'AmpProject\\Validator\\Spec\\Tag\\Ins' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Ins.php',
    'AmpProject\\Validator\\Spec\\Tag\\Kbd' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Kbd.php',
    'AmpProject\\Validator\\Spec\\Tag\\Label' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Label.php',
    'AmpProject\\Validator\\Spec\\Tag\\Legend' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Legend.php',
    'AmpProject\\Validator\\Spec\\Tag\\Li' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Li.php',
    'AmpProject\\Validator\\Spec\\Tag\\Line' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Line.php',
    'AmpProject\\Validator\\Spec\\Tag\\Lineargradient' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Lineargradient.php',
    'AmpProject\\Validator\\Spec\\Tag\\LineargradientStop' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/LineargradientStop.php',
    'AmpProject\\Validator\\Spec\\Tag\\LinkItemprop' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkItemprop.php',
    'AmpProject\\Validator\\Spec\\Tag\\LinkItempropSameas' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkItempropSameas.php',
    'AmpProject\\Validator\\Spec\\Tag\\LinkProperty' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkProperty.php',
    'AmpProject\\Validator\\Spec\\Tag\\LinkRel' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkRel.php',
    'AmpProject\\Validator\\Spec\\Tag\\LinkRelCanonical' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkRelCanonical.php',
    'AmpProject\\Validator\\Spec\\Tag\\LinkRelManifest' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkRelManifest.php',
    'AmpProject\\Validator\\Spec\\Tag\\LinkRelModulepreload' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkRelModulepreload.php',
    'AmpProject\\Validator\\Spec\\Tag\\LinkRelPreload' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkRelPreload.php',
    'AmpProject\\Validator\\Spec\\Tag\\LinkRelStylesheetForAmpStory10Css' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkRelStylesheetForAmpStory10Css.php',
    'AmpProject\\Validator\\Spec\\Tag\\LinkRelStylesheetForFonts' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkRelStylesheetForFonts.php',
    'AmpProject\\Validator\\Spec\\Tag\\Listing' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Listing.php',
    'AmpProject\\Validator\\Spec\\Tag\\Main' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Main.php',
    'AmpProject\\Validator\\Spec\\Tag\\Mark' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Mark.php',
    'AmpProject\\Validator\\Spec\\Tag\\Marker' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Marker.php',
    'AmpProject\\Validator\\Spec\\Tag\\Mask' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Mask.php',
    'AmpProject\\Validator\\Spec\\Tag\\MetaCharsetUtf8' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaCharsetUtf8.php',
    'AmpProject\\Validator\\Spec\\Tag\\MetaHttpEquivContentLanguage' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivContentLanguage.php',
    'AmpProject\\Validator\\Spec\\Tag\\MetaHttpEquivContentScriptType' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivContentScriptType.php',
    'AmpProject\\Validator\\Spec\\Tag\\MetaHttpEquivContentStyleType' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivContentStyleType.php',
    'AmpProject\\Validator\\Spec\\Tag\\MetaHttpEquivContentType' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivContentType.php',
    'AmpProject\\Validator\\Spec\\Tag\\MetaHttpEquivImagetoolbar' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivImagetoolbar.php',
    'AmpProject\\Validator\\Spec\\Tag\\MetaHttpEquivOriginTrial' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivOriginTrial.php',
    'AmpProject\\Validator\\Spec\\Tag\\MetaHttpEquivPicsLabel' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivPicsLabel.php',
    'AmpProject\\Validator\\Spec\\Tag\\MetaHttpEquivResourceType' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivResourceType.php',
    'AmpProject\\Validator\\Spec\\Tag\\MetaHttpEquivXDnsPrefetchControl' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivXDnsPrefetchControl.php',
    'AmpProject\\Validator\\Spec\\Tag\\MetaHttpEquivXUaCompatible' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivXUaCompatible.php',
    'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmp3pIframeSrc' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmp3pIframeSrc.php',
    'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmp4adsId' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmp4adsId.php',
    'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmp4adsVars' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmp4adsVars.php',
    'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmpAdDoubleclickSra' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpAdDoubleclickSra.php',
    'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmpAdEnableRefresh' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpAdEnableRefresh.php',
    'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmpConsentBlocking' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpConsentBlocking.php',
    'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmpCtaLandingPageType' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpCtaLandingPageType.php',
    'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmpCtaType' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpCtaType.php',
    'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmpCtaUrl' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpCtaUrl.php',
    'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmpExperimentToken' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpExperimentToken.php',
    'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmpExperimentsOptIn' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpExperimentsOptIn.php',
    'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmpGoogleClientidIdApi' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpGoogleClientidIdApi.php',
    'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmpLinkVariableAllowedOrigin' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpLinkVariableAllowedOrigin.php',
    'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmpListLoadMore' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpListLoadMore.php',
    'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmpRecaptchaInput' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpRecaptchaInput.php',
    'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmpScriptSrc' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpScriptSrc.php',
    'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmpStoryGeneratorName' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpStoryGeneratorName.php',
    'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmpStoryGeneratorVersion' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpStoryGeneratorVersion.php',
    'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmpToAmpNavigation' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpToAmpNavigation.php',
    'AmpProject\\Validator\\Spec\\Tag\\MetaNameAndContent' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAndContent.php',
    'AmpProject\\Validator\\Spec\\Tag\\MetaNameAppleItunesApp' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAppleItunesApp.php',
    'AmpProject\\Validator\\Spec\\Tag\\MetaNameViewport' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameViewport.php',
    'AmpProject\\Validator\\Spec\\Tag\\Metadata' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Metadata.php',
    'AmpProject\\Validator\\Spec\\Tag\\Meter' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Meter.php',
    'AmpProject\\Validator\\Spec\\Tag\\Multicol' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Multicol.php',
    'AmpProject\\Validator\\Spec\\Tag\\Nav' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Nav.php',
    'AmpProject\\Validator\\Spec\\Tag\\Nextid' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Nextid.php',
    'AmpProject\\Validator\\Spec\\Tag\\Nobr' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Nobr.php',
    'AmpProject\\Validator\\Spec\\Tag\\Noscript' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Noscript.php',
    'AmpProject\\Validator\\Spec\\Tag\\NoscriptEnclosureForAmpStyleTags' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/NoscriptEnclosureForAmpStyleTags.php',
    'AmpProject\\Validator\\Spec\\Tag\\NoscriptImg' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/NoscriptImg.php',
    'AmpProject\\Validator\\Spec\\Tag\\NoscriptStyleAmpBoilerplate' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/NoscriptStyleAmpBoilerplate.php',
    'AmpProject\\Validator\\Spec\\Tag\\OP' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/OP.php',
    'AmpProject\\Validator\\Spec\\Tag\\Ol' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Ol.php',
    'AmpProject\\Validator\\Spec\\Tag\\Optgroup' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Optgroup.php',
    'AmpProject\\Validator\\Spec\\Tag\\Option' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Option.php',
    'AmpProject\\Validator\\Spec\\Tag\\Output' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Output.php',
    'AmpProject\\Validator\\Spec\\Tag\\P' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/P.php',
    'AmpProject\\Validator\\Spec\\Tag\\Path' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Path.php',
    'AmpProject\\Validator\\Spec\\Tag\\Pattern' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Pattern.php',
    'AmpProject\\Validator\\Spec\\Tag\\Picture' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Picture.php',
    'AmpProject\\Validator\\Spec\\Tag\\PictureSource' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/PictureSource.php',
    'AmpProject\\Validator\\Spec\\Tag\\Polygon' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Polygon.php',
    'AmpProject\\Validator\\Spec\\Tag\\Polyline' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Polyline.php',
    'AmpProject\\Validator\\Spec\\Tag\\Pre' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Pre.php',
    'AmpProject\\Validator\\Spec\\Tag\\Progress' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Progress.php',
    'AmpProject\\Validator\\Spec\\Tag\\Q' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Q.php',
    'AmpProject\\Validator\\Spec\\Tag\\Radialgradient' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Radialgradient.php',
    'AmpProject\\Validator\\Spec\\Tag\\RadialgradientStop' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/RadialgradientStop.php',
    'AmpProject\\Validator\\Spec\\Tag\\Rb' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Rb.php',
    'AmpProject\\Validator\\Spec\\Tag\\Rect' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Rect.php',
    'AmpProject\\Validator\\Spec\\Tag\\Rp' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Rp.php',
    'AmpProject\\Validator\\Spec\\Tag\\Rt' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Rt.php',
    'AmpProject\\Validator\\Spec\\Tag\\Rtc' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Rtc.php',
    'AmpProject\\Validator\\Spec\\Tag\\Ruby' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Ruby.php',
    'AmpProject\\Validator\\Spec\\Tag\\S' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/S.php',
    'AmpProject\\Validator\\Spec\\Tag\\Samp' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Samp.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmp3dGltf' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmp3dGltf.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmp3qPlayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmp3qPlayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpAccess' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAccess.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpAccessFewcents' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAccessFewcents.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpAccessLaterpay' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAccessLaterpay.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpAccessPoool' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAccessPoool.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpAccessScroll' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAccessScroll.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpAccordion' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAccordion.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpAccordion2' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAccordion2.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpActionMacro' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpActionMacro.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpAdCustom' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAdCustom.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpAdExit' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAdExit.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpAddthis' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAddthis.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpAnalytics' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAnalytics.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpAnim' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAnim.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpAnimation' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAnimation.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpApesterMedia' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpApesterMedia.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpAppBanner' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAppBanner.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpAudio' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAudio.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpAutoAds' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAutoAds.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpAutocomplete' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAutocomplete.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpBaseCarousel' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpBaseCarousel.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpBeopinion' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpBeopinion.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpBind' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpBind.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpBodymovinAnimation' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpBodymovinAnimation.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpBridPlayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpBridPlayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpBrightcove' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpBrightcove.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpBrightcove2' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpBrightcove2.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpBysideContent' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpBysideContent.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpCacheUrl' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpCacheUrl.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpCallTracking' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpCallTracking.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpCarousel' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpCarousel.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpConnatixPlayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpConnatixPlayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpConsent' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpConsent.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpDailymotion' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpDailymotion.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpDailymotion2' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpDailymotion2.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpDateCountdown' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpDateCountdown.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpDateDisplay' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpDateDisplay.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpDatePicker' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpDatePicker.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpDelightPlayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpDelightPlayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpDynamicCssClasses' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpDynamicCssClasses.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpEmbedlyCard' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpEmbedlyCard.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpExperiment' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpExperiment.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpFacebook' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFacebook.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpFacebookComments' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFacebookComments.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpFacebookLike' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFacebookLike.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpFacebookPage' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFacebookPage.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpFitText' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFitText.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpFitText2' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFitText2.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpFont' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFont.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpForm' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpForm.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpFxCollection' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFxCollection.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpFxFlyingCarpet' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFxFlyingCarpet.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpGeo' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpGeo.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpGfycat' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpGfycat.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpGist' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpGist.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpGoogleDocumentEmbed' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpGoogleDocumentEmbed.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpGoogleReadAloudPlayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpGoogleReadAloudPlayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpGwdAnimation' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpGwdAnimation.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpHulu' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpHulu.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpIframe' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpIframe.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpIframe2' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpIframe2.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpIframely' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpIframely.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpImaVideo' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpImaVideo.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpImageLightbox' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpImageLightbox.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpImageSlider' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpImageSlider.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpImgur' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpImgur.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpInlineGallery' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpInlineGallery.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpInputmask' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpInputmask.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpInstagram' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpInstagram.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpInstagram2' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpInstagram2.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpInstallServiceworker' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpInstallServiceworker.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpIzlesene' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpIzlesene.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpJwplayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpJwplayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpKalturaPlayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpKalturaPlayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpLightbox' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpLightbox.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpLightbox2' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpLightbox2.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpLightboxGallery' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpLightboxGallery.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpLinkRewriter' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpLinkRewriter.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpList' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpList.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpLiveList' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpLiveList.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpMathml' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpMathml.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpMathml2' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpMathml2.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpMegaMenu' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpMegaMenu.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpMegaphone' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpMegaphone.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpMinuteMediaPlayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpMinuteMediaPlayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpMowplayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpMowplayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpMraid' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpMraid.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpMustache' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpMustache.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpNestedMenu' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpNestedMenu.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpNextPage' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpNextPage.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpNexxtvPlayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpNexxtvPlayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpO2Player' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpO2Player.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpOnerrorV0Js' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpOnerrorV0Js.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpOnerrorV0JsOrV0Mjs' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpOnerrorV0JsOrV0Mjs.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpOnetapGoogle' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpOnetapGoogle.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpOoyalaPlayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpOoyalaPlayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpOrientationObserver' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpOrientationObserver.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpPanZoom' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpPanZoom.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpPinterest' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpPinterest.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpPlaybuzz' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpPlaybuzz.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpPositionObserver' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpPositionObserver.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpPowrPlayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpPowrPlayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpReachPlayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpReachPlayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpRecaptchaInput' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpRecaptchaInput.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpRedbullPlayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpRedbullPlayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpReddit' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpReddit.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpRender' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpRender.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpRiddleQuiz' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpRiddleQuiz.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpScript' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpScript.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpSelector' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSelector.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpSelector2' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSelector2.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpSidebar' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSidebar.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpSidebar2' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSidebar2.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpSkimlinks' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSkimlinks.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpSlides' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSlides.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpSmartlinks' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSmartlinks.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpSocialShare' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSocialShare.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpSocialShare2' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSocialShare2.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpSoundcloud' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSoundcloud.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpSoundcloud2' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSoundcloud2.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpSpringboardPlayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSpringboardPlayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpStickyAd' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStickyAd.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpStory' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStory.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpStory360' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStory360.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpStoryAutoAds' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStoryAutoAds.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpStoryAutoAnalytics' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStoryAutoAnalytics.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpStoryCaptions' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStoryCaptions.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpStoryDvhPolyfill' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStoryDvhPolyfill.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpStoryInteractive' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStoryInteractive.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpStoryPanningMedia' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStoryPanningMedia.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpStoryPlayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStoryPlayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpStoryShopping' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStoryShopping.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpStorySubscriptions' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStorySubscriptions.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpStreamGallery' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStreamGallery.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpSubscriptions' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSubscriptions.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpSubscriptionsGoogle' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSubscriptionsGoogle.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpTiktok' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpTiktok.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpTimeago' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpTimeago.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpTruncateText' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpTruncateText.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpTwitter' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpTwitter.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpTwitter2' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpTwitter2.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpUserNotification' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpUserNotification.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpVideo' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVideo.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpVideo2' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVideo2.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpVideoDocking' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVideoDocking.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpVideoIframe' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVideoIframe.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpVideoIframe2' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVideoIframe2.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpVimeo' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVimeo.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpVimeo2' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVimeo2.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpVine' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVine.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpViqeoPlayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpViqeoPlayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpVk' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVk.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpWebPush' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpWebPush.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpWistiaPlayer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpWistiaPlayer.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpWordpressEmbed' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpWordpressEmbed.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpYotpo' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpYotpo.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpYoutube' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpYoutube.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpYoutube2' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpYoutube2.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptCustomElementAmpAccordionAmp4email' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpAccordionAmp4email.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptCustomElementAmpAutocompleteAmp4email' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpAutocompleteAmp4email.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptCustomElementAmpBindAmp4email' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpBindAmp4email.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptCustomElementAmpCarouselAmp4email' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpCarouselAmp4email.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptCustomElementAmpFitTextAmp4email' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpFitTextAmp4email.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptCustomElementAmpFormAmp4email' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpFormAmp4email.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptCustomElementAmpImageLightboxAmp4email' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpImageLightboxAmp4email.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptCustomElementAmpLightboxAmp4ads' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpLightboxAmp4ads.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptCustomElementAmpLightboxAmp4email' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpLightboxAmp4email.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptCustomElementAmpListAmp4email' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpListAmp4email.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptCustomElementAmpSelectorAmp4email' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpSelectorAmp4email.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptCustomElementAmpSidebarAmp4email' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpSidebarAmp4email.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptCustomElementAmpTimeagoAmp4email' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpTimeagoAmp4email.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptCustomTemplateAmpMustacheAmp4ads' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomTemplateAmpMustacheAmp4ads.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptCustomTemplateAmpMustacheAmp4email' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomTemplateAmpMustacheAmp4email.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptIdAmpRtc' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptIdAmpRtc.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptTypeApplicationLdJson' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptTypeApplicationLdJson.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptTypeTextPlain' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptTypeTextPlain.php',
    'AmpProject\\Validator\\Spec\\Tag\\ScriptTypeTextPlainAmp4email' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptTypeTextPlainAmp4email.php',
    'AmpProject\\Validator\\Spec\\Tag\\Section' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Section.php',
    'AmpProject\\Validator\\Spec\\Tag\\SectionAmp4email' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/SectionAmp4email.php',
    'AmpProject\\Validator\\Spec\\Tag\\Select' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Select.php',
    'AmpProject\\Validator\\Spec\\Tag\\Slot' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Slot.php',
    'AmpProject\\Validator\\Spec\\Tag\\Small' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Small.php',
    'AmpProject\\Validator\\Spec\\Tag\\Solidcolor' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Solidcolor.php',
    'AmpProject\\Validator\\Spec\\Tag\\Spacer' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Spacer.php',
    'AmpProject\\Validator\\Spec\\Tag\\Span' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Span.php',
    'AmpProject\\Validator\\Spec\\Tag\\SpanAmpNestedMenu' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/SpanAmpNestedMenu.php',
    'AmpProject\\Validator\\Spec\\Tag\\SpanSwgAmpCacheNonce' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/SpanSwgAmpCacheNonce.php',
    'AmpProject\\Validator\\Spec\\Tag\\StandardImage' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/StandardImage.php',
    'AmpProject\\Validator\\Spec\\Tag\\StandardImg' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/StandardImg.php',
    'AmpProject\\Validator\\Spec\\Tag\\Strike' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Strike.php',
    'AmpProject\\Validator\\Spec\\Tag\\Strong' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Strong.php',
    'AmpProject\\Validator\\Spec\\Tag\\StyleAmpCustom' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/StyleAmpCustom.php',
    'AmpProject\\Validator\\Spec\\Tag\\StyleAmpCustomAmp4ads' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/StyleAmpCustomAmp4ads.php',
    'AmpProject\\Validator\\Spec\\Tag\\StyleAmpCustomAmp4email' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/StyleAmpCustomAmp4email.php',
    'AmpProject\\Validator\\Spec\\Tag\\StyleAmpCustomCssStrict' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/StyleAmpCustomCssStrict.php',
    'AmpProject\\Validator\\Spec\\Tag\\StyleAmpCustomLengthCheck' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/StyleAmpCustomLengthCheck.php',
    'AmpProject\\Validator\\Spec\\Tag\\StyleAmpKeyframes' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/StyleAmpKeyframes.php',
    'AmpProject\\Validator\\Spec\\Tag\\StyleAmpNoscript' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/StyleAmpNoscript.php',
    'AmpProject\\Validator\\Spec\\Tag\\StyleAmpRuntimeTransformed' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/StyleAmpRuntimeTransformed.php',
    'AmpProject\\Validator\\Spec\\Tag\\Sub' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Sub.php',
    'AmpProject\\Validator\\Spec\\Tag\\SubscriptionsScriptCiphertext' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/SubscriptionsScriptCiphertext.php',
    'AmpProject\\Validator\\Spec\\Tag\\SubscriptionsSectionContentSwgAmpCacheNonce' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/SubscriptionsSectionContentSwgAmpCacheNonce.php',
    'AmpProject\\Validator\\Spec\\Tag\\Summary' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Summary.php',
    'AmpProject\\Validator\\Spec\\Tag\\Sup' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Sup.php',
    'AmpProject\\Validator\\Spec\\Tag\\Svg' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Svg.php',
    'AmpProject\\Validator\\Spec\\Tag\\SvgTitle' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/SvgTitle.php',
    'AmpProject\\Validator\\Spec\\Tag\\Switch_' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Switch_.php',
    'AmpProject\\Validator\\Spec\\Tag\\Symbol' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Symbol.php',
    'AmpProject\\Validator\\Spec\\Tag\\Table' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Table.php',
    'AmpProject\\Validator\\Spec\\Tag\\Tbody' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Tbody.php',
    'AmpProject\\Validator\\Spec\\Tag\\Td' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Td.php',
    'AmpProject\\Validator\\Spec\\Tag\\Template' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Template.php',
    'AmpProject\\Validator\\Spec\\Tag\\TemplateAmp4email' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/TemplateAmp4email.php',
    'AmpProject\\Validator\\Spec\\Tag\\Text' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Text.php',
    'AmpProject\\Validator\\Spec\\Tag\\Textarea' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Textarea.php',
    'AmpProject\\Validator\\Spec\\Tag\\Textpath' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Textpath.php',
    'AmpProject\\Validator\\Spec\\Tag\\Tfoot' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Tfoot.php',
    'AmpProject\\Validator\\Spec\\Tag\\Th' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Th.php',
    'AmpProject\\Validator\\Spec\\Tag\\Thead' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Thead.php',
    'AmpProject\\Validator\\Spec\\Tag\\Time' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Time.php',
    'AmpProject\\Validator\\Spec\\Tag\\Title' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Title.php',
    'AmpProject\\Validator\\Spec\\Tag\\TitleAmp4email' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/TitleAmp4email.php',
    'AmpProject\\Validator\\Spec\\Tag\\Tr' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Tr.php',
    'AmpProject\\Validator\\Spec\\Tag\\Tref' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Tref.php',
    'AmpProject\\Validator\\Spec\\Tag\\Tspan' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Tspan.php',
    'AmpProject\\Validator\\Spec\\Tag\\Tt' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Tt.php',
    'AmpProject\\Validator\\Spec\\Tag\\U' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/U.php',
    'AmpProject\\Validator\\Spec\\Tag\\Ul' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Ul.php',
    'AmpProject\\Validator\\Spec\\Tag\\Use_' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Use_.php',
    'AmpProject\\Validator\\Spec\\Tag\\Var_' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Var_.php',
    'AmpProject\\Validator\\Spec\\Tag\\Video' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Video.php',
    'AmpProject\\Validator\\Spec\\Tag\\VideoSource' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/VideoSource.php',
    'AmpProject\\Validator\\Spec\\Tag\\VideoTrack' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/VideoTrack.php',
    'AmpProject\\Validator\\Spec\\Tag\\VideoTrackKindSubtitles' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/VideoTrackKindSubtitles.php',
    'AmpProject\\Validator\\Spec\\Tag\\View' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/View.php',
    'AmpProject\\Validator\\Spec\\Tag\\Vkern' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Vkern.php',
    'AmpProject\\Validator\\Spec\\Tag\\Wbr' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Wbr.php',
    'AmpProject\\Validator\\ValidateTagResult' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/ValidateTagResult.php',
    'AmpProject\\Validator\\ValidationEngine' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/ValidationEngine.php',
    'AmpProject\\Validator\\ValidationError' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/ValidationError.php',
    'AmpProject\\Validator\\ValidationErrorCollection' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/ValidationErrorCollection.php',
    'AmpProject\\Validator\\ValidationHandler' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/ValidationHandler.php',
    'AmpProject\\Validator\\ValidationResult' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/ValidationResult.php',
    'AmpProject\\Validator\\ValidationSeverity' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/ValidationSeverity.php',
    'AmpProject\\Validator\\ValidationStatus' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/ValidationStatus.php',
    'AmpProject\\Validator\\ValidatorRules' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/ValidatorRules.php',
    'AmpProject\\Validator\\ValueSetProvision' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/ValueSetProvision.php',
    'AmpProject\\Validator\\ValueSetRequirement' => $vendorDir . '/ampproject/amp-toolbox/src/Validator/ValueSetRequirement.php',
    'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
    'FasterImage\\Exception\\InvalidImageException' => $vendorDir . '/fasterimage/fasterimage/src/FasterImage/Exception/InvalidImageException.php',
    'FasterImage\\ExifParser' => $vendorDir . '/fasterimage/fasterimage/src/FasterImage/ExifParser.php',
    'FasterImage\\FasterImage' => $vendorDir . '/fasterimage/fasterimage/src/FasterImage/FasterImage.php',
    'FasterImage\\ImageParser' => $vendorDir . '/fasterimage/fasterimage/src/FasterImage/ImageParser.php',
    'Sabberworm\\CSS\\CSSList\\AtRuleBlockList' => $vendorDir . '/sabberworm/php-css-parser/src/CSSList/AtRuleBlockList.php',
    'Sabberworm\\CSS\\CSSList\\CSSBlockList' => $vendorDir . '/sabberworm/php-css-parser/src/CSSList/CSSBlockList.php',
    'Sabberworm\\CSS\\CSSList\\CSSList' => $vendorDir . '/sabberworm/php-css-parser/src/CSSList/CSSList.php',
    'Sabberworm\\CSS\\CSSList\\Document' => $vendorDir . '/sabberworm/php-css-parser/src/CSSList/Document.php',
    'Sabberworm\\CSS\\CSSList\\KeyFrame' => $vendorDir . '/sabberworm/php-css-parser/src/CSSList/KeyFrame.php',
    'Sabberworm\\CSS\\Comment\\Comment' => $vendorDir . '/sabberworm/php-css-parser/src/Comment/Comment.php',
    'Sabberworm\\CSS\\Comment\\Commentable' => $vendorDir . '/sabberworm/php-css-parser/src/Comment/Commentable.php',
    'Sabberworm\\CSS\\OutputFormat' => $vendorDir . '/sabberworm/php-css-parser/src/OutputFormat.php',
    'Sabberworm\\CSS\\OutputFormatter' => $vendorDir . '/sabberworm/php-css-parser/src/OutputFormatter.php',
    'Sabberworm\\CSS\\Parser' => $vendorDir . '/sabberworm/php-css-parser/src/Parser.php',
    'Sabberworm\\CSS\\Parsing\\Anchor' => $vendorDir . '/sabberworm/php-css-parser/src/Parsing/Anchor.php',
    'Sabberworm\\CSS\\Parsing\\OutputException' => $vendorDir . '/sabberworm/php-css-parser/src/Parsing/OutputException.php',
    'Sabberworm\\CSS\\Parsing\\ParserState' => $vendorDir . '/sabberworm/php-css-parser/src/Parsing/ParserState.php',
    'Sabberworm\\CSS\\Parsing\\SourceException' => $vendorDir . '/sabberworm/php-css-parser/src/Parsing/SourceException.php',
    'Sabberworm\\CSS\\Parsing\\UnexpectedEOFException' => $vendorDir . '/sabberworm/php-css-parser/src/Parsing/UnexpectedEOFException.php',
    'Sabberworm\\CSS\\Parsing\\UnexpectedTokenException' => $vendorDir . '/sabberworm/php-css-parser/src/Parsing/UnexpectedTokenException.php',
    'Sabberworm\\CSS\\Property\\AtRule' => $vendorDir . '/sabberworm/php-css-parser/src/Property/AtRule.php',
    'Sabberworm\\CSS\\Property\\CSSNamespace' => $vendorDir . '/sabberworm/php-css-parser/src/Property/CSSNamespace.php',
    'Sabberworm\\CSS\\Property\\Charset' => $vendorDir . '/sabberworm/php-css-parser/src/Property/Charset.php',
    'Sabberworm\\CSS\\Property\\Import' => $vendorDir . '/sabberworm/php-css-parser/src/Property/Import.php',
    'Sabberworm\\CSS\\Property\\KeyframeSelector' => $vendorDir . '/sabberworm/php-css-parser/src/Property/KeyframeSelector.php',
    'Sabberworm\\CSS\\Property\\Selector' => $vendorDir . '/sabberworm/php-css-parser/src/Property/Selector.php',
    'Sabberworm\\CSS\\Renderable' => $vendorDir . '/sabberworm/php-css-parser/src/Renderable.php',
    'Sabberworm\\CSS\\RuleSet\\AtRuleSet' => $vendorDir . '/sabberworm/php-css-parser/src/RuleSet/AtRuleSet.php',
    'Sabberworm\\CSS\\RuleSet\\DeclarationBlock' => $vendorDir . '/sabberworm/php-css-parser/src/RuleSet/DeclarationBlock.php',
    'Sabberworm\\CSS\\RuleSet\\RuleSet' => $vendorDir . '/sabberworm/php-css-parser/src/RuleSet/RuleSet.php',
    'Sabberworm\\CSS\\Rule\\Rule' => $vendorDir . '/sabberworm/php-css-parser/src/Rule/Rule.php',
    'Sabberworm\\CSS\\Settings' => $vendorDir . '/sabberworm/php-css-parser/src/Settings.php',
    'Sabberworm\\CSS\\Value\\CSSFunction' => $vendorDir . '/sabberworm/php-css-parser/src/Value/CSSFunction.php',
    'Sabberworm\\CSS\\Value\\CSSString' => $vendorDir . '/sabberworm/php-css-parser/src/Value/CSSString.php',
    'Sabberworm\\CSS\\Value\\CalcFunction' => $vendorDir . '/sabberworm/php-css-parser/src/Value/CalcFunction.php',
    'Sabberworm\\CSS\\Value\\CalcRuleValueList' => $vendorDir . '/sabberworm/php-css-parser/src/Value/CalcRuleValueList.php',
    'Sabberworm\\CSS\\Value\\Color' => $vendorDir . '/sabberworm/php-css-parser/src/Value/Color.php',
    'Sabberworm\\CSS\\Value\\Expression' => $vendorDir . '/sabberworm/php-css-parser/src/Value/Expression.php',
    'Sabberworm\\CSS\\Value\\LineName' => $vendorDir . '/sabberworm/php-css-parser/src/Value/LineName.php',
    'Sabberworm\\CSS\\Value\\PrimitiveValue' => $vendorDir . '/sabberworm/php-css-parser/src/Value/PrimitiveValue.php',
    'Sabberworm\\CSS\\Value\\RuleValueList' => $vendorDir . '/sabberworm/php-css-parser/src/Value/RuleValueList.php',
    'Sabberworm\\CSS\\Value\\Size' => $vendorDir . '/sabberworm/php-css-parser/src/Value/Size.php',
    'Sabberworm\\CSS\\Value\\URL' => $vendorDir . '/sabberworm/php-css-parser/src/Value/URL.php',
    'Sabberworm\\CSS\\Value\\Value' => $vendorDir . '/sabberworm/php-css-parser/src/Value/Value.php',
    'Sabberworm\\CSS\\Value\\ValueList' => $vendorDir . '/sabberworm/php-css-parser/src/Value/ValueList.php',
    'WillWashburn\\Stream\\Exception\\StreamBufferTooSmallException' => $vendorDir . '/willwashburn/stream/src/Stream/Exception/StreamBufferTooSmallException.php',
    'WillWashburn\\Stream\\Stream' => $vendorDir . '/willwashburn/stream/src/Stream/Stream.php',
    'WillWashburn\\Stream\\StreamableInterface' => $vendorDir . '/willwashburn/stream/src/Stream/StreamableInterface.php',
);
PK.3YDHH-bunyad-amp/vendor/composer/autoload_files.php<?php

// autoload_files.php @generated by Composer

$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);

return array(
    '356506e5d3d2f49e680971cd925046fa' => $vendorDir . '/ampproject/amp-toolbox/include/compatibility-fixes.php',
    'ffc2110a578b705d2022d1f7803373a6' => $baseDir . '/includes/bootstrap.php',
);
PK.3Y�/t��2bunyad-amp/vendor/composer/autoload_namespaces.php<?php

// autoload_namespaces.php @generated by Composer

$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);

return array(
);
PK.3Y�ԍ��,bunyad-amp/vendor/composer/autoload_psr4.php<?php

// autoload_psr4.php @generated by Composer

$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);

return array(
    'WillWashburn\\' => array($vendorDir . '/willwashburn/stream/src'),
    'Sabberworm\\CSS\\' => array($vendorDir . '/sabberworm/php-css-parser/src'),
    'AmpProject\\AmpWP\\' => array($baseDir . '/src'),
    'AmpProject\\' => array($vendorDir . '/ampproject/amp-toolbox/src'),
);
PK.3Y'����,bunyad-amp/vendor/composer/autoload_real.php<?php

// autoload_real.php @generated by Composer

class ComposerAutoloaderInitfce7eaa51eae83b212188c83fb02faa9
{
    private static $loader;

    public static function loadClassLoader($class)
    {
        if ('Composer\Autoload\ClassLoader' === $class) {
            require __DIR__ . '/ClassLoader.php';
        }
    }

    /**
     * @return \Composer\Autoload\ClassLoader
     */
    public static function getLoader()
    {
        if (null !== self::$loader) {
            return self::$loader;
        }

        require __DIR__ . '/platform_check.php';

        spl_autoload_register(array('ComposerAutoloaderInitfce7eaa51eae83b212188c83fb02faa9', 'loadClassLoader'), true, true);
        self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
        spl_autoload_unregister(array('ComposerAutoloaderInitfce7eaa51eae83b212188c83fb02faa9', 'loadClassLoader'));

        require __DIR__ . '/autoload_static.php';
        call_user_func(\Composer\Autoload\ComposerStaticInitfce7eaa51eae83b212188c83fb02faa9::getInitializer($loader));

        $loader->setClassMapAuthoritative(true);
        $loader->register(true);

        $filesToLoad = \Composer\Autoload\ComposerStaticInitfce7eaa51eae83b212188c83fb02faa9::$files;
        $requireFile = \Closure::bind(static function ($fileIdentifier, $file) {
            if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
                $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;

                require $file;
            }
        }, null, null);
        foreach ($filesToLoad as $fileIdentifier => $file) {
            $requireFile($fileIdentifier, $file);
        }

        return $loader;
    }
}
PK.3Y\����%�%.bunyad-amp/vendor/composer/autoload_static.php<?php

// autoload_static.php @generated by Composer

namespace Composer\Autoload;

class ComposerStaticInitfce7eaa51eae83b212188c83fb02faa9
{
    public static $files = array (
        '356506e5d3d2f49e680971cd925046fa' => __DIR__ . '/..' . '/ampproject/amp-toolbox/include/compatibility-fixes.php',
        'ffc2110a578b705d2022d1f7803373a6' => __DIR__ . '/../..' . '/includes/bootstrap.php',
    );

    public static $prefixLengthsPsr4 = array (
        'W' => 
        array (
            'WillWashburn\\' => 13,
        ),
        'S' => 
        array (
            'Sabberworm\\CSS\\' => 15,
        ),
        'A' => 
        array (
            'AmpProject\\AmpWP\\' => 17,
            'AmpProject\\' => 11,
        ),
    );

    public static $prefixDirsPsr4 = array (
        'WillWashburn\\' => 
        array (
            0 => __DIR__ . '/..' . '/willwashburn/stream/src',
        ),
        'Sabberworm\\CSS\\' => 
        array (
            0 => __DIR__ . '/..' . '/sabberworm/php-css-parser/src',
        ),
        'AmpProject\\AmpWP\\' => 
        array (
            0 => __DIR__ . '/../..' . '/src',
        ),
        'AmpProject\\' => 
        array (
            0 => __DIR__ . '/..' . '/ampproject/amp-toolbox/src',
        ),
    );

    public static $classMap = array (
        'AMP_Accessibility_Sanitizer' => __DIR__ . '/../..' . '/includes/sanitizers/class-amp-accessibility-sanitizer.php',
        'AMP_Admin_Pointer' => __DIR__ . '/../..' . '/includes/admin/class-amp-admin-pointer.php',
        'AMP_Admin_Pointers' => __DIR__ . '/../..' . '/includes/admin/class-amp-admin-pointers.php',
        'AMP_Allowed_Tags_Generated' => __DIR__ . '/../..' . '/includes/sanitizers/class-amp-allowed-tags-generated.php',
        'AMP_Audio_Sanitizer' => __DIR__ . '/../..' . '/includes/sanitizers/class-amp-audio-sanitizer.php',
        'AMP_Auto_Lightbox_Disable_Sanitizer' => __DIR__ . '/../..' . '/includes/sanitizers/class-amp-auto-lightbox-disable-sanitizer.php',
        'AMP_Autoloader' => __DIR__ . '/../..' . '/includes/class-amp-autoloader.php',
        'AMP_Base_Embed_Handler' => __DIR__ . '/../..' . '/includes/embeds/class-amp-base-embed-handler.php',
        'AMP_Base_Sanitizer' => __DIR__ . '/../..' . '/includes/sanitizers/class-amp-base-sanitizer.php',
        'AMP_Bento_Sanitizer' => __DIR__ . '/../..' . '/includes/sanitizers/class-amp-bento-sanitizer.php',
        'AMP_Block_Sanitizer' => __DIR__ . '/../..' . '/includes/sanitizers/class-amp-block-sanitizer.php',
        'AMP_Block_Uniqid_Sanitizer' => __DIR__ . '/../..' . '/includes/sanitizers/class-amp-block-uniqid-sanitizer.php',
        'AMP_Comment_Walker' => __DIR__ . '/../..' . '/includes/class-amp-comment-walker.php',
        'AMP_Comments_Sanitizer' => __DIR__ . '/../..' . '/includes/sanitizers/class-amp-comments-sanitizer.php',
        'AMP_Content' => __DIR__ . '/../..' . '/includes/templates/class-amp-content.php',
        'AMP_Content_Sanitizer' => __DIR__ . '/../..' . '/includes/templates/class-amp-content-sanitizer.php',
        'AMP_Core_Block_Handler' => __DIR__ . '/../..' . '/includes/embeds/class-amp-core-block-handler.php',
        'AMP_Core_Theme_Sanitizer' => __DIR__ . '/../..' . '/includes/sanitizers/class-amp-core-theme-sanitizer.php',
        'AMP_Crowdsignal_Embed_Handler' => __DIR__ . '/../..' . '/includes/embeds/class-amp-crowdsignal-embed-handler.php',
        'AMP_Customizer_Design_Settings' => __DIR__ . '/../..' . '/includes/settings/class-amp-customizer-design-settings.php',
        'AMP_Customizer_Settings' => __DIR__ . '/../..' . '/includes/settings/class-amp-customizer-settings.php',
        'AMP_DOM_Utils' => __DIR__ . '/../..' . '/includes/utils/class-amp-dom-utils.php',
        'AMP_DailyMotion_Embed_Handler' => __DIR__ . '/../..' . '/includes/embeds/class-amp-dailymotion-embed-handler.php',
        'AMP_Dev_Mode_Sanitizer' => __DIR__ . '/../..' . '/includes/sanitizers/class-amp-dev-mode-sanitizer.php',
        'AMP_Editor_Blocks' => __DIR__ . '/../..' . '/includes/admin/class-amp-editor-blocks.php',
        'AMP_Embed_Sanitizer' => __DIR__ . '/../..' . '/includes/sanitizers/class-amp-embed-sanitizer.php',
        'AMP_Facebook_Embed_Handler' => __DIR__ . '/../..' . '/includes/embeds/class-amp-facebook-embed-handler.php',
        'AMP_Form_Sanitizer' => __DIR__ . '/../..' . '/includes/sanitizers/class-amp-form-sanitizer.php',
        'AMP_GTag_Script_Sanitizer' => __DIR__ . '/../..' . '/includes/sanitizers/class-amp-gtag-script-sanitizer.php',
        'AMP_Gallery_Block_Sanitizer' => __DIR__ . '/../..' . '/includes/sanitizers/class-amp-gallery-block-sanitizer.php',
        'AMP_Gallery_Embed_Handler' => __DIR__ . '/../..' . '/includes/embeds/class-amp-gallery-embed-handler.php',
        'AMP_HTML_Utils' => __DIR__ . '/../..' . '/includes/utils/class-amp-html-utils.php',
        'AMP_HTTP' => __DIR__ . '/../..' . '/includes/class-amp-http.php',
        'AMP_Iframe_Sanitizer' => __DIR__ . '/../..' . '/includes/sanitizers/class-amp-iframe-sanitizer.php',
        'AMP_Image_Dimension_Extractor' => __DIR__ . '/../..' . '/includes/utils/class-amp-image-dimension-extractor.php',
        'AMP_Img_Sanitizer' => __DIR__ . '/../..' . '/includes/sanitizers/class-amp-img-sanitizer.php',
        'AMP_Imgur_Embed_Handler' => __DIR__ . '/../..' . '/includes/embeds/class-amp-imgur-embed-handler.php',
        'AMP_Instagram_Embed_Handler' => __DIR__ . '/../..' . '/includes/embeds/class-amp-instagram-embed-handler.php',
        'AMP_Issuu_Embed_Handler' => __DIR__ . '/../..' . '/includes/embeds/class-amp-issuu-embed-handler.php',
        'AMP_Layout_Sanitizer' => __DIR__ . '/../..' . '/includes/sanitizers/class-amp-layout-sanitizer.php',
        'AMP_Link_Sanitizer' => __DIR__ . '/../..' . '/includes/sanitizers/class-amp-link-sanitizer.php',
        'AMP_Meetup_Embed_Handler' => __DIR__ . '/../..' . '/includes/embeds/class-amp-meetup-embed-handler.php',
        'AMP_Meta_Sanitizer' => __DIR__ . '/../..' . '/includes/sanitizers/class-amp-meta-sanitizer.php',
        'AMP_Native_Img_Attributes_Sanitizer' => __DIR__ . '/../..' . '/includes/sanitizers/class-amp-native-img-attributes-sanitizer.php',
        'AMP_Nav_Menu_Dropdown_Sanitizer' => __DIR__ . '/../..' . '/includes/sanitizers/class-amp-nav-menu-dropdown-sanitizer.php',
        'AMP_Nav_Menu_Toggle_Sanitizer' => __DIR__ . '/../..' . '/includes/sanitizers/class-amp-nav-menu-toggle-sanitizer.php',
        'AMP_Noscript_Fallback' => __DIR__ . '/../..' . '/includes/sanitizers/trait-amp-noscript-fallback.php',
        'AMP_O2_Player_Sanitizer' => __DIR__ . '/../..' . '/includes/sanitizers/class-amp-o2-player-sanitizer.php',
        'AMP_Object_Sanitizer' => __DIR__ . '/../..' . '/includes/sanitizers/class-amp-object-sanitizer.php',
        'AMP_Options_Manager' => __DIR__ . '/../..' . '/includes/options/class-amp-options-manager.php',
        'AMP_PWA_Script_Sanitizer' => __DIR__ . '/../..' . '/includes/sanitizers/class-amp-pwa-script-sanitizer.php',
        'AMP_Pinterest_Embed_Handler' => __DIR__ . '/../..' . '/includes/embeds/class-amp-pinterest-embed-handler.php',
        'AMP_Playbuzz_Sanitizer' => __DIR__ . '/../..' . '/includes/sanitizers/class-amp-playbuzz-sanitizer.php',
        'AMP_Playlist_Embed_Handler' => __DIR__ . '/../..' . '/includes/embeds/class-amp-playlist-embed-handler.php',
        'AMP_Post_Meta_Box' => __DIR__ . '/../..' . '/includes/admin/class-amp-post-meta-box.php',
        'AMP_Post_Template' => __DIR__ . '/../..' . '/includes/templates/class-amp-post-template.php',
        'AMP_Post_Type_Support' => __DIR__ . '/../..' . '/includes/class-amp-post-type-support.php',
        'AMP_Reader_Theme_REST_Controller' => __DIR__ . '/../..' . '/includes/options/class-amp-reader-theme-rest-controller.php',
        'AMP_Reddit_Embed_Handler' => __DIR__ . '/../..' . '/includes/embeds/class-amp-reddit-embed-handler.php',
        'AMP_Rule_Spec' => __DIR__ . '/../..' . '/includes/sanitizers/class-amp-rule-spec.php',
        'AMP_Scribd_Embed_Handler' => __DIR__ . '/../..' . '/includes/embeds/class-amp-scribd-embed-handler.php',
        'AMP_Script_Sanitizer' => __DIR__ . '/../..' . '/includes/sanitizers/class-amp-script-sanitizer.php',
        'AMP_Service_Worker' => __DIR__ . '/../..' . '/includes/class-amp-service-worker.php',
        'AMP_SoundCloud_Embed_Handler' => __DIR__ . '/../..' . '/includes/embeds/class-amp-soundcloud-embed-handler.php',
        'AMP_Srcset_Sanitizer' => __DIR__ . '/../..' . '/includes/sanitizers/class-amp-srcset-sanitizer.php',
        'AMP_String_Utils' => __DIR__ . '/../..' . '/includes/utils/class-amp-string-utils.php',
        'AMP_Style_Sanitizer' => __DIR__ . '/../..' . '/includes/sanitizers/class-amp-style-sanitizer.php',
        'AMP_Tag_And_Attribute_Sanitizer' => __DIR__ . '/../..' . '/includes/sanitizers/class-amp-tag-and-attribute-sanitizer.php',
        'AMP_Template_Customizer' => __DIR__ . '/../..' . '/includes/admin/class-amp-template-customizer.php',
        'AMP_Theme_Support' => __DIR__ . '/../..' . '/includes/class-amp-theme-support.php',
        'AMP_TikTok_Embed_Handler' => __DIR__ . '/../..' . '/includes/embeds/class-amp-tiktok-embed-handler.php',
        'AMP_Tumblr_Embed_Handler' => __DIR__ . '/../..' . '/includes/embeds/class-amp-tumblr-embed-handler.php',
        'AMP_Twitter_Embed_Handler' => __DIR__ . '/../..' . '/includes/embeds/class-amp-twitter-embed-handler.php',
        'AMP_Validated_URL_Post_Type' => __DIR__ . '/../..' . '/includes/validation/class-amp-validated-url-post-type.php',
        'AMP_Validation_Callback_Wrapper' => __DIR__ . '/../..' . '/includes/validation/class-amp-validation-callback-wrapper.php',
        'AMP_Validation_Error_Taxonomy' => __DIR__ . '/../..' . '/includes/validation/class-amp-validation-error-taxonomy.php',
        'AMP_Validation_Manager' => __DIR__ . '/../..' . '/includes/validation/class-amp-validation-manager.php',
        'AMP_Video_Sanitizer' => __DIR__ . '/../..' . '/includes/sanitizers/class-amp-video-sanitizer.php',
        'AMP_Vimeo_Embed_Handler' => __DIR__ . '/../..' . '/includes/embeds/class-amp-vimeo-embed-handler.php',
        'AMP_Widget_Archives' => __DIR__ . '/../..' . '/includes/widgets/class-amp-widget-archives.php',
        'AMP_Widget_Categories' => __DIR__ . '/../..' . '/includes/widgets/class-amp-widget-categories.php',
        'AMP_Widget_Text' => __DIR__ . '/../..' . '/includes/widgets/class-amp-widget-text.php',
        'AMP_WordPress_Embed_Handler' => __DIR__ . '/../..' . '/includes/embeds/class-amp-wordpress-embed-handler.php',
        'AMP_WordPress_TV_Embed_Handler' => __DIR__ . '/../..' . '/includes/embeds/class-amp-wordpress-tv-embed-handler.php',
        'AMP_YouTube_Embed_Handler' => __DIR__ . '/../..' . '/includes/embeds/class-amp-youtube-embed-handler.php',
        'AmpProject\\Amp' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Amp.php',
        'AmpProject\\AmpWP\\Admin\\AfterActivationSiteScan' => __DIR__ . '/../..' . '/src/Admin/AfterActivationSiteScan.php',
        'AmpProject\\AmpWP\\Admin\\AmpPlugins' => __DIR__ . '/../..' . '/src/Admin/AmpPlugins.php',
        'AmpProject\\AmpWP\\Admin\\AmpThemes' => __DIR__ . '/../..' . '/src/Admin/AmpThemes.php',
        'AmpProject\\AmpWP\\Admin\\AnalyticsOptionsSubmenu' => __DIR__ . '/../..' . '/src/Admin/AnalyticsOptionsSubmenu.php',
        'AmpProject\\AmpWP\\Admin\\GoogleFonts' => __DIR__ . '/../..' . '/src/Admin/GoogleFonts.php',
        'AmpProject\\AmpWP\\Admin\\OnboardingWizardSubmenu' => __DIR__ . '/../..' . '/src/Admin/OnboardingWizardSubmenu.php',
        'AmpProject\\AmpWP\\Admin\\OnboardingWizardSubmenuPage' => __DIR__ . '/../..' . '/src/Admin/OnboardingWizardSubmenuPage.php',
        'AmpProject\\AmpWP\\Admin\\OptionsMenu' => __DIR__ . '/../..' . '/src/Admin/OptionsMenu.php',
        'AmpProject\\AmpWP\\Admin\\PairedBrowsing' => __DIR__ . '/../..' . '/src/Admin/PairedBrowsing.php',
        'AmpProject\\AmpWP\\Admin\\PluginActivationNotice' => __DIR__ . '/../..' . '/src/Admin/PluginActivationNotice.php',
        'AmpProject\\AmpWP\\Admin\\PluginRowMeta' => __DIR__ . '/../..' . '/src/Admin/PluginRowMeta.php',
        'AmpProject\\AmpWP\\Admin\\Polyfills' => __DIR__ . '/../..' . '/src/Admin/Polyfills.php',
        'AmpProject\\AmpWP\\Admin\\RESTPreloader' => __DIR__ . '/../..' . '/src/Admin/RESTPreloader.php',
        'AmpProject\\AmpWP\\Admin\\ReaderThemes' => __DIR__ . '/../..' . '/src/Admin/ReaderThemes.php',
        'AmpProject\\AmpWP\\Admin\\ReenableCssTransientCachingAjaxAction' => __DIR__ . '/../..' . '/src/Admin/ReenableCssTransientCachingAjaxAction.php',
        'AmpProject\\AmpWP\\Admin\\SiteHealth' => __DIR__ . '/../..' . '/src/Admin/SiteHealth.php',
        'AmpProject\\AmpWP\\Admin\\SupportLink' => __DIR__ . '/../..' . '/src/Admin/SupportLink.php',
        'AmpProject\\AmpWP\\Admin\\SupportScreen' => __DIR__ . '/../..' . '/src/Admin/SupportScreen.php',
        'AmpProject\\AmpWP\\Admin\\UserRESTEndpointExtension' => __DIR__ . '/../..' . '/src/Admin/UserRESTEndpointExtension.php',
        'AmpProject\\AmpWP\\Admin\\ValidationCounts' => __DIR__ . '/../..' . '/src/Admin/ValidationCounts.php',
        'AmpProject\\AmpWP\\AmpSlugCustomizationWatcher' => __DIR__ . '/../..' . '/src/AmpSlugCustomizationWatcher.php',
        'AmpProject\\AmpWP\\AmpWpPlugin' => __DIR__ . '/../..' . '/src/AmpWpPlugin.php',
        'AmpProject\\AmpWP\\AmpWpPluginFactory' => __DIR__ . '/../..' . '/src/AmpWpPluginFactory.php',
        'AmpProject\\AmpWP\\BackgroundTask\\BackgroundTaskDeactivator' => __DIR__ . '/../..' . '/src/BackgroundTask/BackgroundTaskDeactivator.php',
        'AmpProject\\AmpWP\\BackgroundTask\\CronBasedBackgroundTask' => __DIR__ . '/../..' . '/src/BackgroundTask/CronBasedBackgroundTask.php',
        'AmpProject\\AmpWP\\BackgroundTask\\MonitorCssTransientCaching' => __DIR__ . '/../..' . '/src/BackgroundTask/MonitorCssTransientCaching.php',
        'AmpProject\\AmpWP\\BackgroundTask\\RecurringBackgroundTask' => __DIR__ . '/../..' . '/src/BackgroundTask/RecurringBackgroundTask.php',
        'AmpProject\\AmpWP\\BackgroundTask\\SingleScheduledBackgroundTask' => __DIR__ . '/../..' . '/src/BackgroundTask/SingleScheduledBackgroundTask.php',
        'AmpProject\\AmpWP\\BackgroundTask\\ValidatedUrlStylesheetDataGarbageCollection' => __DIR__ . '/../..' . '/src/BackgroundTask/ValidatedUrlStylesheetDataGarbageCollection.php',
        'AmpProject\\AmpWP\\BackgroundTask\\ValidationDataGarbageCollection' => __DIR__ . '/../..' . '/src/BackgroundTask/ValidationDataGarbageCollection.php',
        'AmpProject\\AmpWP\\BlockUniqidTransformer' => __DIR__ . '/../..' . '/src/BlockUniqidTransformer.php',
        'AmpProject\\AmpWP\\Cli\\AmpCommandNamespace' => __DIR__ . '/../..' . '/src/Cli/AmpCommandNamespace.php',
        'AmpProject\\AmpWP\\Cli\\CommandNamespaceRegistration' => __DIR__ . '/../..' . '/src/Cli/CommandNamespaceRegistration.php',
        'AmpProject\\AmpWP\\Cli\\OptimizerCommand' => __DIR__ . '/../..' . '/src/Cli/OptimizerCommand.php',
        'AmpProject\\AmpWP\\Cli\\OptionCommand' => __DIR__ . '/../..' . '/src/Cli/OptionCommand.php',
        'AmpProject\\AmpWP\\Cli\\TransformerCommand' => __DIR__ . '/../..' . '/src/Cli/TransformerCommand.php',
        'AmpProject\\AmpWP\\Cli\\ValidationCommand' => __DIR__ . '/../..' . '/src/Cli/ValidationCommand.php',
        'AmpProject\\AmpWP\\Component\\CaptionedSlide' => __DIR__ . '/../..' . '/src/Component/CaptionedSlide.php',
        'AmpProject\\AmpWP\\Component\\Carousel' => __DIR__ . '/../..' . '/src/Component/Carousel.php',
        'AmpProject\\AmpWP\\Component\\HasCaption' => __DIR__ . '/../..' . '/src/Component/HasCaption.php',
        'AmpProject\\AmpWP\\ConfigurationArgument' => __DIR__ . '/../..' . '/src/ConfigurationArgument.php',
        'AmpProject\\AmpWP\\DependencySupport' => __DIR__ . '/../..' . '/src/DependencySupport.php',
        'AmpProject\\AmpWP\\DevTools\\BlockSources' => __DIR__ . '/../..' . '/src/DevTools/BlockSources.php',
        'AmpProject\\AmpWP\\DevTools\\CallbackReflection' => __DIR__ . '/../..' . '/src/DevTools/CallbackReflection.php',
        'AmpProject\\AmpWP\\DevTools\\ErrorPage' => __DIR__ . '/../..' . '/src/DevTools/ErrorPage.php',
        'AmpProject\\AmpWP\\DevTools\\FileReflection' => __DIR__ . '/../..' . '/src/DevTools/FileReflection.php',
        'AmpProject\\AmpWP\\DevTools\\LikelyCulpritDetector' => __DIR__ . '/../..' . '/src/DevTools/LikelyCulpritDetector.php',
        'AmpProject\\AmpWP\\DevTools\\UserAccess' => __DIR__ . '/../..' . '/src/DevTools/UserAccess.php',
        'AmpProject\\AmpWP\\Dom\\ElementList' => __DIR__ . '/../..' . '/src/Dom/ElementList.php',
        'AmpProject\\AmpWP\\Dom\\Options' => __DIR__ . '/../..' . '/src/Dom/Options.php',
        'AmpProject\\AmpWP\\Editor\\EditorSupport' => __DIR__ . '/../..' . '/src/Editor/EditorSupport.php',
        'AmpProject\\AmpWP\\Embed\\HandlesGalleryEmbed' => __DIR__ . '/../..' . '/src/Embed/HandlesGalleryEmbed.php',
        'AmpProject\\AmpWP\\Exception\\AmpWpException' => __DIR__ . '/../..' . '/src/Exception/AmpWpException.php',
        'AmpProject\\AmpWP\\Exception\\FailedToMakeInstance' => __DIR__ . '/../..' . '/src/Exception/FailedToMakeInstance.php',
        'AmpProject\\AmpWP\\Exception\\InvalidEventProperties' => __DIR__ . '/../..' . '/src/Exception/InvalidEventProperties.php',
        'AmpProject\\AmpWP\\Exception\\InvalidService' => __DIR__ . '/../..' . '/src/Exception/InvalidService.php',
        'AmpProject\\AmpWP\\Exception\\InvalidStopwatchEvent' => __DIR__ . '/../..' . '/src/Exception/InvalidStopwatchEvent.php',
        'AmpProject\\AmpWP\\ExtraThemeAndPluginHeaders' => __DIR__ . '/../..' . '/src/ExtraThemeAndPluginHeaders.php',
        'AmpProject\\AmpWP\\Icon' => __DIR__ . '/../..' . '/src/Icon.php',
        'AmpProject\\AmpWP\\Infrastructure\\Activateable' => __DIR__ . '/../..' . '/src/Infrastructure/Activateable.php',
        'AmpProject\\AmpWP\\Infrastructure\\CliCommand' => __DIR__ . '/../..' . '/src/Infrastructure/CliCommand.php',
        'AmpProject\\AmpWP\\Infrastructure\\Conditional' => __DIR__ . '/../..' . '/src/Infrastructure/Conditional.php',
        'AmpProject\\AmpWP\\Infrastructure\\Deactivateable' => __DIR__ . '/../..' . '/src/Infrastructure/Deactivateable.php',
        'AmpProject\\AmpWP\\Infrastructure\\Delayed' => __DIR__ . '/../..' . '/src/Infrastructure/Delayed.php',
        'AmpProject\\AmpWP\\Infrastructure\\HasRequirements' => __DIR__ . '/../..' . '/src/Infrastructure/HasRequirements.php',
        'AmpProject\\AmpWP\\Infrastructure\\Injector' => __DIR__ . '/../..' . '/src/Infrastructure/Injector.php',
        'AmpProject\\AmpWP\\Infrastructure\\Injector\\FallbackInstantiator' => __DIR__ . '/../..' . '/src/Infrastructure/Injector/FallbackInstantiator.php',
        'AmpProject\\AmpWP\\Infrastructure\\Injector\\InjectionChain' => __DIR__ . '/../..' . '/src/Infrastructure/Injector/InjectionChain.php',
        'AmpProject\\AmpWP\\Infrastructure\\Injector\\SimpleInjector' => __DIR__ . '/../..' . '/src/Infrastructure/Injector/SimpleInjector.php',
        'AmpProject\\AmpWP\\Infrastructure\\Instantiator' => __DIR__ . '/../..' . '/src/Infrastructure/Instantiator.php',
        'AmpProject\\AmpWP\\Infrastructure\\Plugin' => __DIR__ . '/../..' . '/src/Infrastructure/Plugin.php',
        'AmpProject\\AmpWP\\Infrastructure\\Registerable' => __DIR__ . '/../..' . '/src/Infrastructure/Registerable.php',
        'AmpProject\\AmpWP\\Infrastructure\\Service' => __DIR__ . '/../..' . '/src/Infrastructure/Service.php',
        'AmpProject\\AmpWP\\Infrastructure\\ServiceBasedPlugin' => __DIR__ . '/../..' . '/src/Infrastructure/ServiceBasedPlugin.php',
        'AmpProject\\AmpWP\\Infrastructure\\ServiceContainer' => __DIR__ . '/../..' . '/src/Infrastructure/ServiceContainer.php',
        'AmpProject\\AmpWP\\Infrastructure\\ServiceContainer\\LazilyInstantiatedService' => __DIR__ . '/../..' . '/src/Infrastructure/ServiceContainer/LazilyInstantiatedService.php',
        'AmpProject\\AmpWP\\Infrastructure\\ServiceContainer\\SimpleServiceContainer' => __DIR__ . '/../..' . '/src/Infrastructure/ServiceContainer/SimpleServiceContainer.php',
        'AmpProject\\AmpWP\\Instrumentation\\Event' => __DIR__ . '/../..' . '/src/Instrumentation/Event.php',
        'AmpProject\\AmpWP\\Instrumentation\\EventWithDuration' => __DIR__ . '/../..' . '/src/Instrumentation/EventWithDuration.php',
        'AmpProject\\AmpWP\\Instrumentation\\ServerTiming' => __DIR__ . '/../..' . '/src/Instrumentation/ServerTiming.php',
        'AmpProject\\AmpWP\\Instrumentation\\StopWatch' => __DIR__ . '/../..' . '/src/Instrumentation/StopWatch.php',
        'AmpProject\\AmpWP\\Instrumentation\\StopWatchEvent' => __DIR__ . '/../..' . '/src/Instrumentation/StopWatchEvent.php',
        'AmpProject\\AmpWP\\LoadingError' => __DIR__ . '/../..' . '/src/LoadingError.php',
        'AmpProject\\AmpWP\\MobileRedirection' => __DIR__ . '/../..' . '/src/MobileRedirection.php',
        'AmpProject\\AmpWP\\ObsoleteBlockAttributeRemover' => __DIR__ . '/../..' . '/src/ObsoleteBlockAttributeRemover.php',
        'AmpProject\\AmpWP\\Optimizer\\AmpWPConfiguration' => __DIR__ . '/../..' . '/src/Optimizer/AmpWPConfiguration.php',
        'AmpProject\\AmpWP\\Optimizer\\HeroCandidateFiltering' => __DIR__ . '/../..' . '/src/Optimizer/HeroCandidateFiltering.php',
        'AmpProject\\AmpWP\\Optimizer\\OptimizerService' => __DIR__ . '/../..' . '/src/Optimizer/OptimizerService.php',
        'AmpProject\\AmpWP\\Optimizer\\Transformer\\AmpSchemaOrgMetadata' => __DIR__ . '/../..' . '/src/Optimizer/Transformer/AmpSchemaOrgMetadata.php',
        'AmpProject\\AmpWP\\Optimizer\\Transformer\\AmpSchemaOrgMetadataConfiguration' => __DIR__ . '/../..' . '/src/Optimizer/Transformer/AmpSchemaOrgMetadataConfiguration.php',
        'AmpProject\\AmpWP\\Optimizer\\Transformer\\DetermineHeroImages' => __DIR__ . '/../..' . '/src/Optimizer/Transformer/DetermineHeroImages.php',
        'AmpProject\\AmpWP\\Option' => __DIR__ . '/../..' . '/src/Option.php',
        'AmpProject\\AmpWP\\OptionsRESTController' => __DIR__ . '/../..' . '/src/OptionsRESTController.php',
        'AmpProject\\AmpWP\\PairedRouting' => __DIR__ . '/../..' . '/src/PairedRouting.php',
        'AmpProject\\AmpWP\\PairedUrl' => __DIR__ . '/../..' . '/src/PairedUrl.php',
        'AmpProject\\AmpWP\\PairedUrlStructure' => __DIR__ . '/../..' . '/src/PairedUrlStructure.php',
        'AmpProject\\AmpWP\\PairedUrlStructure\\LegacyReaderUrlStructure' => __DIR__ . '/../..' . '/src/PairedUrlStructure/LegacyReaderUrlStructure.php',
        'AmpProject\\AmpWP\\PairedUrlStructure\\LegacyTransitionalUrlStructure' => __DIR__ . '/../..' . '/src/PairedUrlStructure/LegacyTransitionalUrlStructure.php',
        'AmpProject\\AmpWP\\PairedUrlStructure\\PathSuffixUrlStructure' => __DIR__ . '/../..' . '/src/PairedUrlStructure/PathSuffixUrlStructure.php',
        'AmpProject\\AmpWP\\PairedUrlStructure\\QueryVarUrlStructure' => __DIR__ . '/../..' . '/src/PairedUrlStructure/QueryVarUrlStructure.php',
        'AmpProject\\AmpWP\\PluginRegistry' => __DIR__ . '/../..' . '/src/PluginRegistry.php',
        'AmpProject\\AmpWP\\PluginSuppression' => __DIR__ . '/../..' . '/src/PluginSuppression.php',
        'AmpProject\\AmpWP\\QueryVar' => __DIR__ . '/../..' . '/src/QueryVar.php',
        'AmpProject\\AmpWP\\ReaderThemeLoader' => __DIR__ . '/../..' . '/src/ReaderThemeLoader.php',
        'AmpProject\\AmpWP\\ReaderThemeSupportFeatures' => __DIR__ . '/../..' . '/src/ReaderThemeSupportFeatures.php',
        'AmpProject\\AmpWP\\RemoteRequest\\CachedRemoteGetRequest' => __DIR__ . '/../..' . '/src/RemoteRequest/CachedRemoteGetRequest.php',
        'AmpProject\\AmpWP\\RemoteRequest\\CachedResponse' => __DIR__ . '/../..' . '/src/RemoteRequest/CachedResponse.php',
        'AmpProject\\AmpWP\\RemoteRequest\\WpHttpRemoteGetRequest' => __DIR__ . '/../..' . '/src/RemoteRequest/WpHttpRemoteGetRequest.php',
        'AmpProject\\AmpWP\\Sandboxing' => __DIR__ . '/../..' . '/src/Sandboxing.php',
        'AmpProject\\AmpWP\\Services' => __DIR__ . '/../..' . '/src/Services.php',
        'AmpProject\\AmpWP\\Support\\SupportCliCommand' => __DIR__ . '/../..' . '/src/Support/SupportCliCommand.php',
        'AmpProject\\AmpWP\\Support\\SupportData' => __DIR__ . '/../..' . '/src/Support/SupportData.php',
        'AmpProject\\AmpWP\\Support\\SupportRESTController' => __DIR__ . '/../..' . '/src/Support/SupportRESTController.php',
        'AmpProject\\AmpWP\\ValidationExemption' => __DIR__ . '/../..' . '/src/ValidationExemption.php',
        'AmpProject\\AmpWP\\Validation\\ScannableURLProvider' => __DIR__ . '/../..' . '/src/Validation/ScannableURLProvider.php',
        'AmpProject\\AmpWP\\Validation\\ScannableURLsRestController' => __DIR__ . '/../..' . '/src/Validation/ScannableURLsRestController.php',
        'AmpProject\\AmpWP\\Validation\\URLValidationCron' => __DIR__ . '/../..' . '/src/Validation/URLValidationCron.php',
        'AmpProject\\AmpWP\\Validation\\URLValidationProvider' => __DIR__ . '/../..' . '/src/Validation/URLValidationProvider.php',
        'AmpProject\\AmpWP\\Validation\\URLValidationRESTController' => __DIR__ . '/../..' . '/src/Validation/URLValidationRESTController.php',
        'AmpProject\\AmpWP\\Validation\\ValidationCountsRestController' => __DIR__ . '/../..' . '/src/Validation/ValidationCountsRestController.php',
        'AmpProject\\Cli\\AmpExecutable' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Cli/AmpExecutable.php',
        'AmpProject\\Cli\\Colors' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Cli/Colors.php',
        'AmpProject\\Cli\\Command' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Cli/Command.php',
        'AmpProject\\Cli\\Command\\Optimize' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Cli/Command/Optimize.php',
        'AmpProject\\Cli\\Command\\Validate' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Cli/Command/Validate.php',
        'AmpProject\\Cli\\Executable' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Cli/Executable.php',
        'AmpProject\\Cli\\LogLevel' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Cli/LogLevel.php',
        'AmpProject\\Cli\\Options' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Cli/Options.php',
        'AmpProject\\Cli\\TableFormatter' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Cli/TableFormatter.php',
        'AmpProject\\CompatibilityFix' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/CompatibilityFix.php',
        'AmpProject\\CompatibilityFix\\MovedClasses' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/CompatibilityFix/MovedClasses.php',
        'AmpProject\\CssLength' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/CssLength.php',
        'AmpProject\\DevMode' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/DevMode.php',
        'AmpProject\\Dom\\Document' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Dom/Document.php',
        'AmpProject\\Dom\\Document\\AfterLoadFilter' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Dom/Document/AfterLoadFilter.php',
        'AmpProject\\Dom\\Document\\AfterSaveFilter' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Dom/Document/AfterSaveFilter.php',
        'AmpProject\\Dom\\Document\\BeforeLoadFilter' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Dom/Document/BeforeLoadFilter.php',
        'AmpProject\\Dom\\Document\\BeforeSaveFilter' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Dom/Document/BeforeSaveFilter.php',
        'AmpProject\\Dom\\Document\\Filter' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Dom/Document/Filter.php',
        'AmpProject\\Dom\\Document\\Filter\\AmpBindAttributes' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Dom/Document/Filter/AmpBindAttributes.php',
        'AmpProject\\Dom\\Document\\Filter\\AmpEmojiAttribute' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Dom/Document/Filter/AmpEmojiAttribute.php',
        'AmpProject\\Dom\\Document\\Filter\\ConvertHeadProfileToLink' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Dom/Document/Filter/ConvertHeadProfileToLink.php',
        'AmpProject\\Dom\\Document\\Filter\\DeduplicateTag' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Dom/Document/Filter/DeduplicateTag.php',
        'AmpProject\\Dom\\Document\\Filter\\DetectInvalidByteSequence' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Dom/Document/Filter/DetectInvalidByteSequence.php',
        'AmpProject\\Dom\\Document\\Filter\\DoctypeNode' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Dom/Document/Filter/DoctypeNode.php',
        'AmpProject\\Dom\\Document\\Filter\\DocumentEncoding' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Dom/Document/Filter/DocumentEncoding.php',
        'AmpProject\\Dom\\Document\\Filter\\HttpEquivCharset' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Dom/Document/Filter/HttpEquivCharset.php',
        'AmpProject\\Dom\\Document\\Filter\\LibxmlCompatibility' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Dom/Document/Filter/LibxmlCompatibility.php',
        'AmpProject\\Dom\\Document\\Filter\\MustacheScriptTemplates' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Dom/Document/Filter/MustacheScriptTemplates.php',
        'AmpProject\\Dom\\Document\\Filter\\NormalizeHtmlAttributes' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Dom/Document/Filter/NormalizeHtmlAttributes.php',
        'AmpProject\\Dom\\Document\\Filter\\NormalizeHtmlEntities' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Dom/Document/Filter/NormalizeHtmlEntities.php',
        'AmpProject\\Dom\\Document\\Filter\\NoscriptElements' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Dom/Document/Filter/NoscriptElements.php',
        'AmpProject\\Dom\\Document\\Filter\\ProtectEsiTags' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Dom/Document/Filter/ProtectEsiTags.php',
        'AmpProject\\Dom\\Document\\Filter\\SelfClosingSVGElements' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Dom/Document/Filter/SelfClosingSVGElements.php',
        'AmpProject\\Dom\\Document\\Filter\\SelfClosingTags' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Dom/Document/Filter/SelfClosingTags.php',
        'AmpProject\\Dom\\Document\\Filter\\SvgSourceAttributeEncoding' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Dom/Document/Filter/SvgSourceAttributeEncoding.php',
        'AmpProject\\Dom\\Document\\Option' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Dom/Document/Option.php',
        'AmpProject\\Dom\\Element' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Dom/Element.php',
        'AmpProject\\Dom\\ElementDump' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Dom/ElementDump.php',
        'AmpProject\\Dom\\LinkManager' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Dom/LinkManager.php',
        'AmpProject\\Dom\\NodeWalker' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Dom/NodeWalker.php',
        'AmpProject\\Dom\\Options' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Dom/Options.php',
        'AmpProject\\Dom\\UniqueIdManager' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Dom/UniqueIdManager.php',
        'AmpProject\\Encoding' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Encoding.php',
        'AmpProject\\Exception\\AmpCliException' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Exception/AmpCliException.php',
        'AmpProject\\Exception\\AmpException' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Exception/AmpException.php',
        'AmpProject\\Exception\\Cli\\InvalidArgument' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Exception/Cli/InvalidArgument.php',
        'AmpProject\\Exception\\Cli\\InvalidColor' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Exception/Cli/InvalidColor.php',
        'AmpProject\\Exception\\Cli\\InvalidColumnFormat' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Exception/Cli/InvalidColumnFormat.php',
        'AmpProject\\Exception\\Cli\\InvalidCommand' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Exception/Cli/InvalidCommand.php',
        'AmpProject\\Exception\\Cli\\InvalidOption' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Exception/Cli/InvalidOption.php',
        'AmpProject\\Exception\\Cli\\InvalidSapi' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Exception/Cli/InvalidSapi.php',
        'AmpProject\\Exception\\Cli\\MissingArgument' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Exception/Cli/MissingArgument.php',
        'AmpProject\\Exception\\FailedRemoteRequest' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Exception/FailedRemoteRequest.php',
        'AmpProject\\Exception\\FailedToCreateLink' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Exception/FailedToCreateLink.php',
        'AmpProject\\Exception\\FailedToGetCachedResponse' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Exception/FailedToGetCachedResponse.php',
        'AmpProject\\Exception\\FailedToGetFromRemoteUrl' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Exception/FailedToGetFromRemoteUrl.php',
        'AmpProject\\Exception\\FailedToParseHtml' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Exception/FailedToParseHtml.php',
        'AmpProject\\Exception\\FailedToParseUrl' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Exception/FailedToParseUrl.php',
        'AmpProject\\Exception\\FailedToRetrieveRequiredDomElement' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Exception/FailedToRetrieveRequiredDomElement.php',
        'AmpProject\\Exception\\InvalidAttributeName' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Exception/InvalidAttributeName.php',
        'AmpProject\\Exception\\InvalidByteSequence' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Exception/InvalidByteSequence.php',
        'AmpProject\\Exception\\InvalidCssRulesetName' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Exception/InvalidCssRulesetName.php',
        'AmpProject\\Exception\\InvalidDeclarationName' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Exception/InvalidDeclarationName.php',
        'AmpProject\\Exception\\InvalidDocRulesetName' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Exception/InvalidDocRulesetName.php',
        'AmpProject\\Exception\\InvalidDocumentFilter' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Exception/InvalidDocumentFilter.php',
        'AmpProject\\Exception\\InvalidErrorCode' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Exception/InvalidErrorCode.php',
        'AmpProject\\Exception\\InvalidExtension' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Exception/InvalidExtension.php',
        'AmpProject\\Exception\\InvalidFormat' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Exception/InvalidFormat.php',
        'AmpProject\\Exception\\InvalidListName' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Exception/InvalidListName.php',
        'AmpProject\\Exception\\InvalidOptionValue' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Exception/InvalidOptionValue.php',
        'AmpProject\\Exception\\InvalidSpecName' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Exception/InvalidSpecName.php',
        'AmpProject\\Exception\\InvalidSpecRuleName' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Exception/InvalidSpecRuleName.php',
        'AmpProject\\Exception\\InvalidTagId' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Exception/InvalidTagId.php',
        'AmpProject\\Exception\\InvalidTagName' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Exception/InvalidTagName.php',
        'AmpProject\\Exception\\MaxCssByteCountExceeded' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Exception/MaxCssByteCountExceeded.php',
        'AmpProject\\Extension' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Extension.php',
        'AmpProject\\FakeEnum' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/FakeEnum.php',
        'AmpProject\\Format' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Format.php',
        'AmpProject\\Html\\AtRule' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Html/AtRule.php',
        'AmpProject\\Html\\Attribute' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Html/Attribute.php',
        'AmpProject\\Html\\LengthUnit' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Html/LengthUnit.php',
        'AmpProject\\Html\\LowerCaseTag' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Html/LowerCaseTag.php',
        'AmpProject\\Html\\Parser\\DocLocator' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Html/Parser/DocLocator.php',
        'AmpProject\\Html\\Parser\\EFlags' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Html/Parser/EFlags.php',
        'AmpProject\\Html\\Parser\\HtmlParser' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Html/Parser/HtmlParser.php',
        'AmpProject\\Html\\Parser\\HtmlSaxHandler' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Html/Parser/HtmlSaxHandler.php',
        'AmpProject\\Html\\Parser\\HtmlSaxHandlerWithLocation' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Html/Parser/HtmlSaxHandlerWithLocation.php',
        'AmpProject\\Html\\Parser\\ParsedAttribute' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Html/Parser/ParsedAttribute.php',
        'AmpProject\\Html\\Parser\\ParsedTag' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Html/Parser/ParsedTag.php',
        'AmpProject\\Html\\Parser\\ScriptTag' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Html/Parser/ScriptTag.php',
        'AmpProject\\Html\\Parser\\TagNameStack' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Html/Parser/TagNameStack.php',
        'AmpProject\\Html\\Parser\\TagRegion' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Html/Parser/TagRegion.php',
        'AmpProject\\Html\\RequestDestination' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Html/RequestDestination.php',
        'AmpProject\\Html\\Role' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Html/Role.php',
        'AmpProject\\Html\\Tag' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Html/Tag.php',
        'AmpProject\\Html\\UpperCaseTag' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Html/UpperCaseTag.php',
        'AmpProject\\Internal' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Internal.php',
        'AmpProject\\Layout' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Layout.php',
        'AmpProject\\Optimizer\\Configuration' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Configuration.php',
        'AmpProject\\Optimizer\\Configuration\\AmpRuntimeCssConfiguration' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Configuration/AmpRuntimeCssConfiguration.php',
        'AmpProject\\Optimizer\\Configuration\\AmpStoryCssOptimizerConfiguration' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Configuration/AmpStoryCssOptimizerConfiguration.php',
        'AmpProject\\Optimizer\\Configuration\\AutoExtensionsConfiguration' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Configuration/AutoExtensionsConfiguration.php',
        'AmpProject\\Optimizer\\Configuration\\BaseTransformerConfiguration' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Configuration/BaseTransformerConfiguration.php',
        'AmpProject\\Optimizer\\Configuration\\MinifyHtmlConfiguration' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Configuration/MinifyHtmlConfiguration.php',
        'AmpProject\\Optimizer\\Configuration\\OptimizeAmpBindConfiguration' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Configuration/OptimizeAmpBindConfiguration.php',
        'AmpProject\\Optimizer\\Configuration\\OptimizeHeroImagesConfiguration' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Configuration/OptimizeHeroImagesConfiguration.php',
        'AmpProject\\Optimizer\\Configuration\\OptimizeViewportConfiguration' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Configuration/OptimizeViewportConfiguration.php',
        'AmpProject\\Optimizer\\Configuration\\PreloadHeroImageConfiguration' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Configuration/PreloadHeroImageConfiguration.php',
        'AmpProject\\Optimizer\\Configuration\\RewriteAmpUrlsConfiguration' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Configuration/RewriteAmpUrlsConfiguration.php',
        'AmpProject\\Optimizer\\Configuration\\TransformedIdentifierConfiguration' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Configuration/TransformedIdentifierConfiguration.php',
        'AmpProject\\Optimizer\\CssRule' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/CssRule.php',
        'AmpProject\\Optimizer\\CssRules' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/CssRules.php',
        'AmpProject\\Optimizer\\DefaultConfiguration' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/DefaultConfiguration.php',
        'AmpProject\\Optimizer\\Error' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Error.php',
        'AmpProject\\Optimizer\\ErrorCollection' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/ErrorCollection.php',
        'AmpProject\\Optimizer\\Error\\CannotAdaptDocumentForSelfHosting' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Error/CannotAdaptDocumentForSelfHosting.php',
        'AmpProject\\Optimizer\\Error\\CannotInlineRuntimeCss' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Error/CannotInlineRuntimeCss.php',
        'AmpProject\\Optimizer\\Error\\CannotMinifyAmpScript' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Error/CannotMinifyAmpScript.php',
        'AmpProject\\Optimizer\\Error\\CannotParseJsonData' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Error/CannotParseJsonData.php',
        'AmpProject\\Optimizer\\Error\\CannotPerformServerSideRendering' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Error/CannotPerformServerSideRendering.php',
        'AmpProject\\Optimizer\\Error\\CannotPreloadImage' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Error/CannotPreloadImage.php',
        'AmpProject\\Optimizer\\Error\\CannotRemoveBoilerplate' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Error/CannotRemoveBoilerplate.php',
        'AmpProject\\Optimizer\\Error\\DeprecatedTransformer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Error/DeprecatedTransformer.php',
        'AmpProject\\Optimizer\\Error\\ErrorProperties' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Error/ErrorProperties.php',
        'AmpProject\\Optimizer\\Error\\InvalidJson' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Error/InvalidJson.php',
        'AmpProject\\Optimizer\\Error\\MissingPackage' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Error/MissingPackage.php',
        'AmpProject\\Optimizer\\Error\\TooManyHeroImages' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Error/TooManyHeroImages.php',
        'AmpProject\\Optimizer\\Error\\UnknownError' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Error/UnknownError.php',
        'AmpProject\\Optimizer\\Exception\\AmpOptimizerException' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Exception/AmpOptimizerException.php',
        'AmpProject\\Optimizer\\Exception\\InvalidArgument' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Exception/InvalidArgument.php',
        'AmpProject\\Optimizer\\Exception\\InvalidConfiguration' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Exception/InvalidConfiguration.php',
        'AmpProject\\Optimizer\\Exception\\InvalidConfigurationKey' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Exception/InvalidConfigurationKey.php',
        'AmpProject\\Optimizer\\Exception\\InvalidConfigurationValue' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Exception/InvalidConfigurationValue.php',
        'AmpProject\\Optimizer\\Exception\\InvalidHtmlAttribute' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Exception/InvalidHtmlAttribute.php',
        'AmpProject\\Optimizer\\Exception\\UnknownConfigurationClass' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Exception/UnknownConfigurationClass.php',
        'AmpProject\\Optimizer\\Exception\\UnknownConfigurationKey' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Exception/UnknownConfigurationKey.php',
        'AmpProject\\Optimizer\\HeroImage' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/HeroImage.php',
        'AmpProject\\Optimizer\\ImageDimensions' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/ImageDimensions.php',
        'AmpProject\\Optimizer\\LocalFallback' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/LocalFallback.php',
        'AmpProject\\Optimizer\\TransformationEngine' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/TransformationEngine.php',
        'AmpProject\\Optimizer\\Transformer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Transformer.php',
        'AmpProject\\Optimizer\\TransformerConfiguration' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/TransformerConfiguration.php',
        'AmpProject\\Optimizer\\Transformer\\AmpBoilerplate' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Transformer/AmpBoilerplate.php',
        'AmpProject\\Optimizer\\Transformer\\AmpBoilerplateErrorHandler' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Transformer/AmpBoilerplateErrorHandler.php',
        'AmpProject\\Optimizer\\Transformer\\AmpRuntimeCss' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Transformer/AmpRuntimeCss.php',
        'AmpProject\\Optimizer\\Transformer\\AmpRuntimePreloads' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Transformer/AmpRuntimePreloads.php',
        'AmpProject\\Optimizer\\Transformer\\AmpStoryCssOptimizer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Transformer/AmpStoryCssOptimizer.php',
        'AmpProject\\Optimizer\\Transformer\\AutoExtensions' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Transformer/AutoExtensions.php',
        'AmpProject\\Optimizer\\Transformer\\GoogleFontsPreconnect' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Transformer/GoogleFontsPreconnect.php',
        'AmpProject\\Optimizer\\Transformer\\MinifyHtml' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Transformer/MinifyHtml.php',
        'AmpProject\\Optimizer\\Transformer\\OptimizeAmpBind' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Transformer/OptimizeAmpBind.php',
        'AmpProject\\Optimizer\\Transformer\\OptimizeHeroImages' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Transformer/OptimizeHeroImages.php',
        'AmpProject\\Optimizer\\Transformer\\OptimizeViewport' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Transformer/OptimizeViewport.php',
        'AmpProject\\Optimizer\\Transformer\\PreloadHeroImage' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Transformer/PreloadHeroImage.php',
        'AmpProject\\Optimizer\\Transformer\\ReorderHead' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Transformer/ReorderHead.php',
        'AmpProject\\Optimizer\\Transformer\\RewriteAmpUrls' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Transformer/RewriteAmpUrls.php',
        'AmpProject\\Optimizer\\Transformer\\ServerSideRendering' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Transformer/ServerSideRendering.php',
        'AmpProject\\Optimizer\\Transformer\\TransformedIdentifier' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Optimizer/Transformer/TransformedIdentifier.php',
        'AmpProject\\Protocol' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Protocol.php',
        'AmpProject\\RemoteGetRequest' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/RemoteGetRequest.php',
        'AmpProject\\RemoteRequest\\CurlRemoteGetRequest' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/RemoteRequest/CurlRemoteGetRequest.php',
        'AmpProject\\RemoteRequest\\FallbackRemoteGetRequest' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/RemoteRequest/FallbackRemoteGetRequest.php',
        'AmpProject\\RemoteRequest\\FilesystemRemoteGetRequest' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/RemoteRequest/FilesystemRemoteGetRequest.php',
        'AmpProject\\RemoteRequest\\RemoteGetRequestResponse' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/RemoteRequest/RemoteGetRequestResponse.php',
        'AmpProject\\RemoteRequest\\StubbedRemoteGetRequest' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/RemoteRequest/StubbedRemoteGetRequest.php',
        'AmpProject\\RemoteRequest\\TemporaryFileCachedRemoteGetRequest' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/RemoteRequest/TemporaryFileCachedRemoteGetRequest.php',
        'AmpProject\\Response' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Response.php',
        'AmpProject\\RuntimeVersion' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/RuntimeVersion.php',
        'AmpProject\\ScriptReleaseVersion' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/ScriptReleaseVersion.php',
        'AmpProject\\Str' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Str.php',
        'AmpProject\\Url' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Url.php',
        'AmpProject\\Validator\\Context' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Context.php',
        'AmpProject\\Validator\\ErrorCode' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/ErrorCode.php',
        'AmpProject\\Validator\\ExtensionsContext' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/ExtensionsContext.php',
        'AmpProject\\Validator\\FilePosition' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/FilePosition.php',
        'AmpProject\\Validator\\Spec' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec.php',
        'AmpProject\\Validator\\Spec\\AggregateTag' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AggregateTag.php',
        'AmpProject\\Validator\\Spec\\AggregateTagWithExtensionSpec' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AggregateTagWithExtensionSpec.php',
        'AmpProject\\Validator\\Spec\\AttributeList' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\AmpAudioCommon' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpAudioCommon.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\AmpBaseCarouselCommon' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpBaseCarouselCommon.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\AmpCarouselCommon' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpCarouselCommon.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\AmpDatePickerCommonAttributes' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpDatePickerCommonAttributes.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\AmpDatePickerOverlayModeAttributes' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpDatePickerOverlayModeAttributes.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\AmpDatePickerRangeTypeAttributes' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpDatePickerRangeTypeAttributes.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\AmpDatePickerSingleTypeAttributes' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpDatePickerSingleTypeAttributes.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\AmpDatePickerStaticModeAttributes' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpDatePickerStaticModeAttributes.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\AmpFacebook' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpFacebook.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\AmpFacebookStrict' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpFacebookStrict.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\AmpInputmaskCommonAttr' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpInputmaskCommonAttr.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\AmpLayoutAttrs' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpLayoutAttrs.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\AmpMegaphoneCommon' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpMegaphoneCommon.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\AmpNestedMenuActions' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpNestedMenuActions.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\AmpStreamGalleryCommon' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpStreamGalleryCommon.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\AmpVideoCommon' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpVideoCommon.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\AmpVideoIframeCommon' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpVideoIframeCommon.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\AmphtmlEngineAttrs' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmphtmlEngineAttrs.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\AmphtmlModuleEngineAttrs' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmphtmlModuleEngineAttrs.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\AmphtmlNomoduleEngineAttrs' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmphtmlNomoduleEngineAttrs.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\CiteAttr' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/CiteAttr.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\ClickAttributions' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/ClickAttributions.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\CommonExtensionAttrs' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/CommonExtensionAttrs.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\CommonLinkAttrs' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/CommonLinkAttrs.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\ExtendedAmpGlobal' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/ExtendedAmpGlobal.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\FormNameAttr' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/FormNameAttr.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\GlobalAttrs' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/GlobalAttrs.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\ImgAttrs' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/ImgAttrs.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\InputCommonAttr' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/InputCommonAttr.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\InteractiveOptionsConfettiAttrs' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/InteractiveOptionsConfettiAttrs.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\InteractiveOptionsImgAttrs' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/InteractiveOptionsImgAttrs.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\InteractiveOptionsResultsCategoryAttrs' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/InteractiveOptionsResultsCategoryAttrs.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\InteractiveOptionsTextAttrs' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/InteractiveOptionsTextAttrs.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\InteractiveSharedConfigsAttrs' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/InteractiveSharedConfigsAttrs.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\LightboxableElements' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/LightboxableElements.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\MandatoryIdAttr' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/MandatoryIdAttr.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\MandatoryNameAttr' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/MandatoryNameAttr.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\MandatorySrcAmp4email' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/MandatorySrcAmp4email.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\MandatorySrcOrSrcset' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/MandatorySrcOrSrcset.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\NameAttr' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/NameAttr.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\NonceAttr' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/NonceAttr.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\OptionalSrcAmp4email' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/OptionalSrcAmp4email.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\PooolAccessAttrs' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/PooolAccessAttrs.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\PrivateClickMeasurementAttributes' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/PrivateClickMeasurementAttributes.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\SvgConditionalProcessingAttributes' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/SvgConditionalProcessingAttributes.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\SvgCoreAttributes' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/SvgCoreAttributes.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\SvgFilterPrimitiveAttributes' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/SvgFilterPrimitiveAttributes.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\SvgPresentationAttributes' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/SvgPresentationAttributes.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\SvgStyleAttr' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/SvgStyleAttr.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\SvgTransferFunctionAttributes' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/SvgTransferFunctionAttributes.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\SvgXlinkAttributes' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/SvgXlinkAttributes.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\TrackAttrsNoSubtitles' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/TrackAttrsNoSubtitles.php',
        'AmpProject\\Validator\\Spec\\AttributeList\\TrackAttrsSubtitles' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/TrackAttrsSubtitles.php',
        'AmpProject\\Validator\\Spec\\CssRuleset' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/CssRuleset.php',
        'AmpProject\\Validator\\Spec\\CssRuleset\\Amp4ads' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/CssRuleset/Amp4ads.php',
        'AmpProject\\Validator\\Spec\\CssRuleset\\Amp4emailDataCssStrict' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/CssRuleset/Amp4emailDataCssStrict.php',
        'AmpProject\\Validator\\Spec\\CssRuleset\\Amp4emailNoDataCssStrict' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/CssRuleset/Amp4emailNoDataCssStrict.php',
        'AmpProject\\Validator\\Spec\\CssRuleset\\AmpNoTransformed' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/CssRuleset/AmpNoTransformed.php',
        'AmpProject\\Validator\\Spec\\CssRuleset\\AmpTransformed' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/CssRuleset/AmpTransformed.php',
        'AmpProject\\Validator\\Spec\\DeclarationList' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/DeclarationList.php',
        'AmpProject\\Validator\\Spec\\DeclarationList\\BasicDeclarations' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/DeclarationList/BasicDeclarations.php',
        'AmpProject\\Validator\\Spec\\DeclarationList\\EmailSpecificDeclarations' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/DeclarationList/EmailSpecificDeclarations.php',
        'AmpProject\\Validator\\Spec\\DeclarationList\\SvgBasicDeclarations' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/DeclarationList/SvgBasicDeclarations.php',
        'AmpProject\\Validator\\Spec\\DescendantTagList' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList.php',
        'AmpProject\\Validator\\Spec\\DescendantTagList\\AmpMegaMenuAllowedDescendants' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList/AmpMegaMenuAllowedDescendants.php',
        'AmpProject\\Validator\\Spec\\DescendantTagList\\AmpNestedMenuAllowedDescendants' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList/AmpNestedMenuAllowedDescendants.php',
        'AmpProject\\Validator\\Spec\\DescendantTagList\\AmpStoryBookendAllowedDescendants' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList/AmpStoryBookendAllowedDescendants.php',
        'AmpProject\\Validator\\Spec\\DescendantTagList\\AmpStoryCtaLayerAllowedDescendants' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList/AmpStoryCtaLayerAllowedDescendants.php',
        'AmpProject\\Validator\\Spec\\DescendantTagList\\AmpStoryGridLayerAllowedDescendants' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList/AmpStoryGridLayerAllowedDescendants.php',
        'AmpProject\\Validator\\Spec\\DescendantTagList\\AmpStoryPageAttachmentAllowedDescendants' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList/AmpStoryPageAttachmentAllowedDescendants.php',
        'AmpProject\\Validator\\Spec\\DescendantTagList\\AmpStoryPlayerAllowedDescendants' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList/AmpStoryPlayerAllowedDescendants.php',
        'AmpProject\\Validator\\Spec\\DescendantTagList\\AmpStorySocialShareAllowedDescendants' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList/AmpStorySocialShareAllowedDescendants.php',
        'AmpProject\\Validator\\Spec\\DocRuleset' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/DocRuleset.php',
        'AmpProject\\Validator\\Spec\\DocRuleset\\Amp4email' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/DocRuleset/Amp4email.php',
        'AmpProject\\Validator\\Spec\\Error' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error.php',
        'AmpProject\\Validator\\Spec\\Error\\AmpEmailMissingStrictCssAttr' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/AmpEmailMissingStrictCssAttr.php',
        'AmpProject\\Validator\\Spec\\Error\\AttrDisallowedByImpliedLayout' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/AttrDisallowedByImpliedLayout.php',
        'AmpProject\\Validator\\Spec\\Error\\AttrDisallowedBySpecifiedLayout' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/AttrDisallowedBySpecifiedLayout.php',
        'AmpProject\\Validator\\Spec\\Error\\AttrMissingRequiredExtension' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/AttrMissingRequiredExtension.php',
        'AmpProject\\Validator\\Spec\\Error\\AttrRequiredButMissing' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/AttrRequiredButMissing.php',
        'AmpProject\\Validator\\Spec\\Error\\AttrValueRequiredByLayout' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/AttrValueRequiredByLayout.php',
        'AmpProject\\Validator\\Spec\\Error\\BaseTagMustPreceedAllUrls' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/BaseTagMustPreceedAllUrls.php',
        'AmpProject\\Validator\\Spec\\Error\\CdataViolatesDenylist' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CdataViolatesDenylist.php',
        'AmpProject\\Validator\\Spec\\Error\\ChildTagDoesNotSatisfyReferencePoint' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/ChildTagDoesNotSatisfyReferencePoint.php',
        'AmpProject\\Validator\\Spec\\Error\\ChildTagDoesNotSatisfyReferencePointSingular' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/ChildTagDoesNotSatisfyReferencePointSingular.php',
        'AmpProject\\Validator\\Spec\\Error\\CssExcessivelyNested' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssExcessivelyNested.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxBadUrl' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxBadUrl.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxDisallowedAttrSelector' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedAttrSelector.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxDisallowedDomain' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedDomain.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxDisallowedImportant' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedImportant.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxDisallowedKeyframeInsideKeyframe' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedKeyframeInsideKeyframe.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxDisallowedMediaFeature' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedMediaFeature.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxDisallowedMediaType' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedMediaType.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxDisallowedPropertyValue' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedPropertyValue.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxDisallowedPropertyValueWithHint' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedPropertyValueWithHint.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxDisallowedPseudoClass' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedPseudoClass.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxDisallowedPseudoElement' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedPseudoElement.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxDisallowedQualifiedRuleMustBeInsideKeyframe' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedQualifiedRuleMustBeInsideKeyframe.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxDisallowedRelativeUrl' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedRelativeUrl.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxEofInPreludeOfQualifiedRule' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxEofInPreludeOfQualifiedRule.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxErrorInPseudoSelector' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxErrorInPseudoSelector.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxIncompleteDeclaration' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxIncompleteDeclaration.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxInvalidAtRule' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxInvalidAtRule.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxInvalidAttrSelector' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxInvalidAttrSelector.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxInvalidDeclaration' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxInvalidDeclaration.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxInvalidProperty' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxInvalidProperty.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxInvalidPropertyNolist' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxInvalidPropertyNolist.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxInvalidUrl' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxInvalidUrl.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxInvalidUrlProtocol' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxInvalidUrlProtocol.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxMalformedMediaQuery' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxMalformedMediaQuery.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxMissingSelector' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxMissingSelector.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxMissingUrl' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxMissingUrl.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxNotASelectorStart' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxNotASelectorStart.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxPropertyDisallowedTogetherWith' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxPropertyDisallowedTogetherWith.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxPropertyDisallowedWithinAtRule' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxPropertyDisallowedWithinAtRule.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxPropertyRequiresQualification' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxPropertyRequiresQualification.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxQualifiedRuleHasNoDeclarations' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxQualifiedRuleHasNoDeclarations.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxStrayTrailingBackslash' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxStrayTrailingBackslash.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxUnparsedInputRemainsInSelector' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxUnparsedInputRemainsInSelector.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxUnterminatedComment' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxUnterminatedComment.php',
        'AmpProject\\Validator\\Spec\\Error\\CssSyntaxUnterminatedString' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxUnterminatedString.php',
        'AmpProject\\Validator\\Spec\\Error\\DeprecatedAttr' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DeprecatedAttr.php',
        'AmpProject\\Validator\\Spec\\Error\\DeprecatedTag' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DeprecatedTag.php',
        'AmpProject\\Validator\\Spec\\Error\\DevModeOnly' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DevModeOnly.php',
        'AmpProject\\Validator\\Spec\\Error\\DisallowedAmpDomain' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedAmpDomain.php',
        'AmpProject\\Validator\\Spec\\Error\\DisallowedAttr' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedAttr.php',
        'AmpProject\\Validator\\Spec\\Error\\DisallowedChildTagName' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedChildTagName.php',
        'AmpProject\\Validator\\Spec\\Error\\DisallowedDomain' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedDomain.php',
        'AmpProject\\Validator\\Spec\\Error\\DisallowedFirstChildTagName' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedFirstChildTagName.php',
        'AmpProject\\Validator\\Spec\\Error\\DisallowedManufacturedBody' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedManufacturedBody.php',
        'AmpProject\\Validator\\Spec\\Error\\DisallowedPropertyInAttrValue' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedPropertyInAttrValue.php',
        'AmpProject\\Validator\\Spec\\Error\\DisallowedRelativeUrl' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedRelativeUrl.php',
        'AmpProject\\Validator\\Spec\\Error\\DisallowedScriptTag' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedScriptTag.php',
        'AmpProject\\Validator\\Spec\\Error\\DisallowedStyleAttr' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedStyleAttr.php',
        'AmpProject\\Validator\\Spec\\Error\\DisallowedTag' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedTag.php',
        'AmpProject\\Validator\\Spec\\Error\\DisallowedTagAncestor' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedTagAncestor.php',
        'AmpProject\\Validator\\Spec\\Error\\DocumentSizeLimitExceeded' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DocumentSizeLimitExceeded.php',
        'AmpProject\\Validator\\Spec\\Error\\DocumentTooComplex' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DocumentTooComplex.php',
        'AmpProject\\Validator\\Spec\\Error\\DuplicateAttribute' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DuplicateAttribute.php',
        'AmpProject\\Validator\\Spec\\Error\\DuplicateDimension' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DuplicateDimension.php',
        'AmpProject\\Validator\\Spec\\Error\\DuplicateReferencePoint' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DuplicateReferencePoint.php',
        'AmpProject\\Validator\\Spec\\Error\\DuplicateUniqueTag' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DuplicateUniqueTag.php',
        'AmpProject\\Validator\\Spec\\Error\\DuplicateUniqueTagWarning' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/DuplicateUniqueTagWarning.php',
        'AmpProject\\Validator\\Spec\\Error\\ExtensionUnused' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/ExtensionUnused.php',
        'AmpProject\\Validator\\Spec\\Error\\GeneralDisallowedTag' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/GeneralDisallowedTag.php',
        'AmpProject\\Validator\\Spec\\Error\\ImpliedLayoutInvalid' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/ImpliedLayoutInvalid.php',
        'AmpProject\\Validator\\Spec\\Error\\InconsistentUnitsForWidthAndHeight' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/InconsistentUnitsForWidthAndHeight.php',
        'AmpProject\\Validator\\Spec\\Error\\IncorrectMinNumChildTags' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/IncorrectMinNumChildTags.php',
        'AmpProject\\Validator\\Spec\\Error\\IncorrectNumChildTags' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/IncorrectNumChildTags.php',
        'AmpProject\\Validator\\Spec\\Error\\IncorrectScriptReleaseVersion' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/IncorrectScriptReleaseVersion.php',
        'AmpProject\\Validator\\Spec\\Error\\InlineScriptTooLong' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/InlineScriptTooLong.php',
        'AmpProject\\Validator\\Spec\\Error\\InlineStyleTooLong' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/InlineStyleTooLong.php',
        'AmpProject\\Validator\\Spec\\Error\\InvalidAttrValue' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidAttrValue.php',
        'AmpProject\\Validator\\Spec\\Error\\InvalidDoctypeHtml' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidDoctypeHtml.php',
        'AmpProject\\Validator\\Spec\\Error\\InvalidExtensionPath' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidExtensionPath.php',
        'AmpProject\\Validator\\Spec\\Error\\InvalidExtensionVersion' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidExtensionVersion.php',
        'AmpProject\\Validator\\Spec\\Error\\InvalidJsonCdata' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidJsonCdata.php',
        'AmpProject\\Validator\\Spec\\Error\\InvalidPropertyValueInAttrValue' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidPropertyValueInAttrValue.php',
        'AmpProject\\Validator\\Spec\\Error\\InvalidUrl' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidUrl.php',
        'AmpProject\\Validator\\Spec\\Error\\InvalidUrlProtocol' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidUrlProtocol.php',
        'AmpProject\\Validator\\Spec\\Error\\InvalidUtf8' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidUtf8.php',
        'AmpProject\\Validator\\Spec\\Error\\LtsScriptAfterNonLts' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/LtsScriptAfterNonLts.php',
        'AmpProject\\Validator\\Spec\\Error\\MandatoryAnyofAttrMissing' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryAnyofAttrMissing.php',
        'AmpProject\\Validator\\Spec\\Error\\MandatoryAttrMissing' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryAttrMissing.php',
        'AmpProject\\Validator\\Spec\\Error\\MandatoryCdataMissingOrIncorrect' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryCdataMissingOrIncorrect.php',
        'AmpProject\\Validator\\Spec\\Error\\MandatoryLastChildTag' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryLastChildTag.php',
        'AmpProject\\Validator\\Spec\\Error\\MandatoryOneofAttrMissing' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryOneofAttrMissing.php',
        'AmpProject\\Validator\\Spec\\Error\\MandatoryPropertyMissingFromAttrValue' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryPropertyMissingFromAttrValue.php',
        'AmpProject\\Validator\\Spec\\Error\\MandatoryReferencePointMissing' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryReferencePointMissing.php',
        'AmpProject\\Validator\\Spec\\Error\\MandatoryTagAncestor' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryTagAncestor.php',
        'AmpProject\\Validator\\Spec\\Error\\MandatoryTagAncestorWithHint' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryTagAncestorWithHint.php',
        'AmpProject\\Validator\\Spec\\Error\\MandatoryTagMissing' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryTagMissing.php',
        'AmpProject\\Validator\\Spec\\Error\\MissingLayoutAttributes' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/MissingLayoutAttributes.php',
        'AmpProject\\Validator\\Spec\\Error\\MissingRequiredExtension' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/MissingRequiredExtension.php',
        'AmpProject\\Validator\\Spec\\Error\\MissingUrl' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/MissingUrl.php',
        'AmpProject\\Validator\\Spec\\Error\\MutuallyExclusiveAttrs' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/MutuallyExclusiveAttrs.php',
        'AmpProject\\Validator\\Spec\\Error\\NonLtsScriptAfterLts' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/NonLtsScriptAfterLts.php',
        'AmpProject\\Validator\\Spec\\Error\\NonWhitespaceCdataEncountered' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/NonWhitespaceCdataEncountered.php',
        'AmpProject\\Validator\\Spec\\Error\\SpecifiedLayoutInvalid' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/SpecifiedLayoutInvalid.php',
        'AmpProject\\Validator\\Spec\\Error\\StylesheetAndInlineStyleTooLong' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/StylesheetAndInlineStyleTooLong.php',
        'AmpProject\\Validator\\Spec\\Error\\StylesheetTooLong' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/StylesheetTooLong.php',
        'AmpProject\\Validator\\Spec\\Error\\TagExcludedByTag' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/TagExcludedByTag.php',
        'AmpProject\\Validator\\Spec\\Error\\TagNotAllowedToHaveSiblings' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/TagNotAllowedToHaveSiblings.php',
        'AmpProject\\Validator\\Spec\\Error\\TagReferencePointConflict' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/TagReferencePointConflict.php',
        'AmpProject\\Validator\\Spec\\Error\\TagRequiredByMissing' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/TagRequiredByMissing.php',
        'AmpProject\\Validator\\Spec\\Error\\TemplateInAttrName' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/TemplateInAttrName.php',
        'AmpProject\\Validator\\Spec\\Error\\TemplatePartialInAttrValue' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/TemplatePartialInAttrValue.php',
        'AmpProject\\Validator\\Spec\\Error\\UnescapedTemplateInAttrValue' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/UnescapedTemplateInAttrValue.php',
        'AmpProject\\Validator\\Spec\\Error\\UnknownCode' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/UnknownCode.php',
        'AmpProject\\Validator\\Spec\\Error\\ValueSetMismatch' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/ValueSetMismatch.php',
        'AmpProject\\Validator\\Spec\\Error\\WarningExtensionDeprecatedVersion' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/WarningExtensionDeprecatedVersion.php',
        'AmpProject\\Validator\\Spec\\Error\\WarningExtensionUnused' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/WarningExtensionUnused.php',
        'AmpProject\\Validator\\Spec\\Error\\WarningTagRequiredByMissing' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/WarningTagRequiredByMissing.php',
        'AmpProject\\Validator\\Spec\\Error\\WrongParentTag' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Error/WrongParentTag.php',
        'AmpProject\\Validator\\Spec\\Identifiable' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Identifiable.php',
        'AmpProject\\Validator\\Spec\\IterableSection' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/IterableSection.php',
        'AmpProject\\Validator\\Spec\\Iteration' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Iteration.php',
        'AmpProject\\Validator\\Spec\\Section\\AttributeLists' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Section/AttributeLists.php',
        'AmpProject\\Validator\\Spec\\Section\\CssRulesets' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Section/CssRulesets.php',
        'AmpProject\\Validator\\Spec\\Section\\DeclarationLists' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Section/DeclarationLists.php',
        'AmpProject\\Validator\\Spec\\Section\\DescendantTagLists' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Section/DescendantTagLists.php',
        'AmpProject\\Validator\\Spec\\Section\\DocRulesets' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Section/DocRulesets.php',
        'AmpProject\\Validator\\Spec\\Section\\Errors' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Section/Errors.php',
        'AmpProject\\Validator\\Spec\\Section\\Tags' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Section/Tags.php',
        'AmpProject\\Validator\\Spec\\SpecRule' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/SpecRule.php',
        'AmpProject\\Validator\\Spec\\Tag' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag.php',
        'AmpProject\\Validator\\Spec\\TagWithExtensionSpec' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/TagWithExtensionSpec.php',
        'AmpProject\\Validator\\Spec\\Tag\\A' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/A.php',
        'AmpProject\\Validator\\Spec\\Tag\\AAmp4email' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AAmp4email.php',
        'AmpProject\\Validator\\Spec\\Tag\\Abbr' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Abbr.php',
        'AmpProject\\Validator\\Spec\\Tag\\Acronym' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Acronym.php',
        'AmpProject\\Validator\\Spec\\Tag\\Address' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Address.php',
        'AmpProject\\Validator\\Spec\\Tag\\Amp3dGltf' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Amp3dGltf.php',
        'AmpProject\\Validator\\Spec\\Tag\\Amp3qPlayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Amp3qPlayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\Amp4adsEngineScript' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Amp4adsEngineScript.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpAccessExtensionJsonScript' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAccessExtensionJsonScript.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpAccordion' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAccordion.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpAccordionSection' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAccordionSection.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpActionMacro' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpActionMacro.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpAd' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAd.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpAdCustom' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAdCustom.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpAdExit' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAdExit.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpAdExitConfigurationJson' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAdExitConfigurationJson.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpAdExtensionScript' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAdExtensionScript.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpAdWithDataEnableRefreshAttribute' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAdWithDataEnableRefreshAttribute.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpAdWithDataMultiSizeAttribute' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAdWithDataMultiSizeAttribute.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpAdWithTypeCustom' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAdWithTypeCustom.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpAddthis' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAddthis.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpAnalytics' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAnalytics.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpAnalyticsExtensionJsonScript' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAnalyticsExtensionJsonScript.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpAnim' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAnim.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpAnimAmp4email' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAnimAmp4email.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpAnimExtensionScriptAmp4email' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAnimExtensionScriptAmp4email.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpAnimation' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAnimation.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpAnimationExtensionJsonScript' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAnimationExtensionJsonScript.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpApesterMedia' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpApesterMedia.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpAppBanner' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAppBanner.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpAppBannerButtonOpenButton' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAppBannerButtonOpenButton.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpAudio' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAudio.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpAudioA4a' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAudioA4a.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpAudioSource' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAudioSource.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpAudioTrack' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAudioTrack.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpAudioTrackKindSubtitles' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAudioTrackKindSubtitles.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpAutoAds' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAutoAds.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpAutocomplete' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAutocomplete.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpAutocompleteAmp4email' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAutocompleteAmp4email.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpAutocompleteInput' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAutocompleteInput.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpAutocompleteJson' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAutocompleteJson.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpBaseCarousel' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBaseCarousel.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpBaseCarouselLightbox' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBaseCarouselLightbox.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpBaseCarouselLightboxChild' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBaseCarouselLightboxChild.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpBaseCarouselLightboxLightboxExclude' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBaseCarouselLightboxLightboxExclude.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpBeopinion' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBeopinion.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpBindExtensionJsonScript' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBindExtensionJsonScript.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpBindMacro' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBindMacro.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpBodymovinAnimation' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBodymovinAnimation.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpBridPlayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBridPlayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpBrightcove' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBrightcove.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpBysideContent' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBysideContent.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpCallTracking' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpCallTracking.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpCarousel' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpCarousel.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpCarouselLightbox' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpCarouselLightbox.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpCarouselLightboxChild' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpCarouselLightboxChild.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpCarouselLightboxLightboxExclude' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpCarouselLightboxLightboxExclude.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpConnatixPlayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpConnatixPlayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpConsent' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpConsent.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpConsentExtensionJsonScript' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpConsentExtensionJsonScript.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpConsentType' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpConsentType.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpDailymotion' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDailymotion.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpDateCountdown' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDateCountdown.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpDateDisplay' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDateDisplay.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpDatePickerTemplateDateTemplate' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDatePickerTemplateDateTemplate.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpDatePickerTemplateInfoTemplate' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDatePickerTemplateInfoTemplate.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpDatePickerTypeRangeModeOverlay' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDatePickerTypeRangeModeOverlay.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpDatePickerTypeRangeModeStatic' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDatePickerTypeRangeModeStatic.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpDatePickerTypeSingleModeOverlay' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDatePickerTypeSingleModeOverlay.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpDatePickerTypeSingleModeStatic' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDatePickerTypeSingleModeStatic.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpDelightPlayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDelightPlayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpEmbed' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpEmbed.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpEmbedWithDataMultiSizeAttribute' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpEmbedWithDataMultiSizeAttribute.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpEmbedlyCard' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpEmbedlyCard.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpEmbedlyKey' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpEmbedlyKey.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpExperiment' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpExperiment.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpExperimentExtensionJsonScript' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpExperimentExtensionJsonScript.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpExperimentStoryExtensionJsonScript' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpExperimentStoryExtensionJsonScript.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpFacebook' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFacebook.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpFacebook10' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFacebook10.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpFacebookComments' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFacebookComments.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpFacebookComments10' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFacebookComments10.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpFacebookLike' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFacebookLike.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpFacebookLike10' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFacebookLike10.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpFacebookPage' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFacebookPage.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpFacebookPage10' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFacebookPage10.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpFitText' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFitText.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpFont' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFont.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpFxFlyingCarpet' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFxFlyingCarpet.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpGeo' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpGeo.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpGeoExtensionJsonScript' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpGeoExtensionJsonScript.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpGfycat' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpGfycat.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpGist' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpGist.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpGoogleDocumentEmbed' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpGoogleDocumentEmbed.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpGoogleReadAloudPlayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpGoogleReadAloudPlayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpGwdAnimation' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpGwdAnimation.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpHulu' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpHulu.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpIframe' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpIframe.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpIframely' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpIframely.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpImaVideo' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImaVideo.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpImaVideoScriptTypeApplicationJson' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImaVideoScriptTypeApplicationJson.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpImaVideoSource' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImaVideoSource.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpImaVideoTrack' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImaVideoTrack.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpImaVideoTrackKindSubtitles' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImaVideoTrackKindSubtitles.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpImageLightbox' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImageLightbox.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpImageSlider' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImageSlider.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpImageSliderDivFirst' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImageSliderDivFirst.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpImageSliderDivSecond' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImageSliderDivSecond.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpImageSliderTransformed' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImageSliderTransformed.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpImg' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImg.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpImgAmp4email' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImgAmp4email.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpImgImgPlaceholderTransformed' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImgImgPlaceholderTransformed.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpImgImgTransformed' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImgImgTransformed.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpImgTransformed' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImgTransformed.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpImgur' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImgur.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpInlineGallery' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpInlineGallery.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpInlineGalleryPagination' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpInlineGalleryPagination.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpInlineGalleryPaginationInset' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpInlineGalleryPaginationInset.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpInlineGalleryThumbnails' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpInlineGalleryThumbnails.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpInstagram' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpInstagram.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpInstallServiceworker' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpInstallServiceworker.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpIzlesene' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpIzlesene.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpJwplayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpJwplayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpKalturaPlayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpKalturaPlayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpLayout' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLayout.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpLightbox' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLightbox.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpLightboxAmp4ads' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLightboxAmp4ads.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpLinkRewriter' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLinkRewriter.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpLinkRewriterExtensionJsonScript' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLinkRewriterExtensionJsonScript.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpList' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpList.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpListAmp4email' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpListAmp4email.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpListDivFetchError' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpListDivFetchError.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpListLoadMore' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpListLoadMore.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpListLoadMoreButtonLoadMoreClickable' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpListLoadMoreButtonLoadMoreClickable.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpLiveList' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLiveList.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpLiveListItems' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLiveListItems.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpLiveListItemsItem' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLiveListItemsItem.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpLiveListPagination' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLiveListPagination.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpLiveListUpdate' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLiveListUpdate.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpMathml' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMathml.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpMegaMenu' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaMenu.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpMegaMenuAmpList' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaMenuAmpList.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpMegaMenuAmpListTemplate' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaMenuAmpListTemplate.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpMegaMenuItemContent' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaMenuItemContent.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpMegaMenuItemHeading' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaMenuItemHeading.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpMegaMenuNav' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaMenuNav.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpMegaMenuNavUlOl' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaMenuNavUlOl.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpMegaMenuNavUlOlLi' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaMenuNavUlOlLi.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpMegaphoneDataEpisode' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaphoneDataEpisode.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpMegaphoneDataPlaylist' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaphoneDataPlaylist.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpMinuteMediaPlayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMinuteMediaPlayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpMowplayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMowplayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpNestedMenu' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNestedMenu.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpNextPageFooter' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNextPageFooter.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpNextPageRecommendationBox' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNextPageRecommendationBox.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpNextPageScriptTypeApplicationJson' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNextPageScriptTypeApplicationJson.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpNextPageSeparator' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNextPageSeparator.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpNextPageTypeAdsense' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNextPageTypeAdsense.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpNextPageWithInlineConfig' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNextPageWithInlineConfig.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpNextPageWithSrcAttribute' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNextPageWithSrcAttribute.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpNexxtvPlayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNexxtvPlayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpO2Player' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpO2Player.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpOnetapGoogle' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpOnetapGoogle.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpOoyalaPlayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpOoyalaPlayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpOrientationObserver' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpOrientationObserver.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpPanZoom' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpPanZoom.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpPinterest' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpPinterest.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpPixel' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpPixel.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpPlaybuzz' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpPlaybuzz.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpPositionObserver' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpPositionObserver.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpPowrPlayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpPowrPlayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpReachPlayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpReachPlayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpRecaptchaInput' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpRecaptchaInput.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpRedbullPlayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpRedbullPlayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpReddit' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpReddit.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpRender' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpRender.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpRiddleQuiz' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpRiddleQuiz.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpScript' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpScript.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpScriptExtensionLocalScript' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpScriptExtensionLocalScript.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpSelector' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSelector.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpSelectorChild' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSelectorChild.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpSelectorOption' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSelectorOption.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpSidebar' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSidebar.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpSidebarAmp4email' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSidebarAmp4email.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpSidebarNav' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSidebarNav.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpSkimlinks' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSkimlinks.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpSmartlinks' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSmartlinks.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpSocialShare' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSocialShare.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpSoundcloud' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSoundcloud.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpSpringboardPlayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSpringboardPlayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpState' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpState.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStateAmp4email' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStateAmp4email.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStickyAd' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStickyAd.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStory' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStory.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStory360' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStory360.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryAmpAudio' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAmpAudio.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryAmpSidebar' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAmpSidebar.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryAmpStoryPageAttachmentAmpVideo' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAmpStoryPageAttachmentAmpVideo.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryAmpVideo' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAmpVideo.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryAnimation' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAnimation.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryAnimationJsonScript' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAnimationJsonScript.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryAutoAds' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAutoAds.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryAutoAdsConfigScript' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAutoAdsConfigScript.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryAutoAdsTemplate' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAutoAdsTemplate.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryAutoAnalytics' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAutoAnalytics.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryBookend' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryBookend.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryBookendExtensionJsonScript' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryBookendExtensionJsonScript.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryCaptions' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryCaptions.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryConsent' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryConsent.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryConsentExtensionJsonScript' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryConsentExtensionJsonScript.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryCtaLayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryCtaLayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryCtaLayerAnimateIn' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryCtaLayerAnimateIn.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryGridLayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryGridLayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryGridLayerAnimateIn' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryGridLayerAnimateIn.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryGridLayerDefault' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryGridLayerDefault.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryInteractiveBinaryPoll' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryInteractiveBinaryPoll.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryInteractiveImgPoll' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryInteractiveImgPoll.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryInteractiveImgQuiz' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryInteractiveImgQuiz.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryInteractivePoll' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryInteractivePoll.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryInteractiveQuiz' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryInteractiveQuiz.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryInteractiveResults' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryInteractiveResults.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryPage' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryPage.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryPageAttachment' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryPageAttachment.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryPageAttachmentHref' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryPageAttachmentHref.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryPageOutlink' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryPageOutlink.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryPanningMedia' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryPanningMedia.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryPlayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryPlayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryPlayerImg' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryPlayerImg.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryShoppingAttachment' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryShoppingAttachment.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryShoppingConfig' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryShoppingConfig.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStoryShoppingTag' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryShoppingTag.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStorySocialShare' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStorySocialShare.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStorySocialShareExtensionJsonScript' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStorySocialShareExtensionJsonScript.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStorySubscriptions' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStorySubscriptions.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpStreamGallery' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStreamGallery.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpSubscriptionsExtensionJsonScript' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSubscriptionsExtensionJsonScript.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpTiktok' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpTiktok.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpTiktokBlockquote' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpTiktokBlockquote.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpTimeago' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpTimeago.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpTruncateText' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpTruncateText.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpTwitter' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpTwitter.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpUserNotification' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpUserNotification.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpVideo' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVideo.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpVideoIframe' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVideoIframe.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpVideoIframeTransformed' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVideoIframeTransformed.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpVideoSource' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVideoSource.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpVideoTrack' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVideoTrack.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpVideoTrackKindSubtitles' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVideoTrackKindSubtitles.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpVimeo' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVimeo.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpVine' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVine.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpViqeoPlayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpViqeoPlayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpVk' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVk.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpWebPush' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpWebPush.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpWebPushWidget' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpWebPushWidget.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpWistiaPlayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpWistiaPlayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpWordpressEmbed' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpWordpressEmbed.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpYotpo' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpYotpo.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmpYoutube' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpYoutube.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmphtmlEngineScript' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlEngineScript.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmphtmlEngineScriptAmp4email' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlEngineScriptAmp4email.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmphtmlEngineScriptLts' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlEngineScriptLts.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmphtmlEngineScriptLtsTransformed' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlEngineScriptLtsTransformed.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmphtmlEngineScriptTransformed' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlEngineScriptTransformed.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmphtmlModuleEngineScript' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlModuleEngineScript.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmphtmlModuleLtsEngineScript' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlModuleLtsEngineScript.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmphtmlNomoduleEngineScript' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlNomoduleEngineScript.php',
        'AmpProject\\Validator\\Spec\\Tag\\AmphtmlNomoduleLtsEngineScript' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlNomoduleLtsEngineScript.php',
        'AmpProject\\Validator\\Spec\\Tag\\Article' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Article.php',
        'AmpProject\\Validator\\Spec\\Tag\\Aside' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Aside.php',
        'AmpProject\\Validator\\Spec\\Tag\\Audio' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Audio.php',
        'AmpProject\\Validator\\Spec\\Tag\\AudioSource' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AudioSource.php',
        'AmpProject\\Validator\\Spec\\Tag\\AudioTrack' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AudioTrack.php',
        'AmpProject\\Validator\\Spec\\Tag\\AudioTrackKindSubtitles' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/AudioTrackKindSubtitles.php',
        'AmpProject\\Validator\\Spec\\Tag\\B' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/B.php',
        'AmpProject\\Validator\\Spec\\Tag\\Base' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Base.php',
        'AmpProject\\Validator\\Spec\\Tag\\Bdi' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Bdi.php',
        'AmpProject\\Validator\\Spec\\Tag\\Bdo' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Bdo.php',
        'AmpProject\\Validator\\Spec\\Tag\\Big' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Big.php',
        'AmpProject\\Validator\\Spec\\Tag\\Blockquote' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Blockquote.php',
        'AmpProject\\Validator\\Spec\\Tag\\BlockquoteWithTiktok' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/BlockquoteWithTiktok.php',
        'AmpProject\\Validator\\Spec\\Tag\\Body' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Body.php',
        'AmpProject\\Validator\\Spec\\Tag\\Br' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Br.php',
        'AmpProject\\Validator\\Spec\\Tag\\Button' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Button.php',
        'AmpProject\\Validator\\Spec\\Tag\\ButtonAmpNestedMenu' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ButtonAmpNestedMenu.php',
        'AmpProject\\Validator\\Spec\\Tag\\Canvas' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Canvas.php',
        'AmpProject\\Validator\\Spec\\Tag\\Caption' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Caption.php',
        'AmpProject\\Validator\\Spec\\Tag\\Center' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Center.php',
        'AmpProject\\Validator\\Spec\\Tag\\Circle' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Circle.php',
        'AmpProject\\Validator\\Spec\\Tag\\Cite' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Cite.php',
        'AmpProject\\Validator\\Spec\\Tag\\Clippath' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Clippath.php',
        'AmpProject\\Validator\\Spec\\Tag\\Code' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Code.php',
        'AmpProject\\Validator\\Spec\\Tag\\Col' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Col.php',
        'AmpProject\\Validator\\Spec\\Tag\\Colgroup' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Colgroup.php',
        'AmpProject\\Validator\\Spec\\Tag\\CryptokeysJsonScript' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/CryptokeysJsonScript.php',
        'AmpProject\\Validator\\Spec\\Tag\\Data' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Data.php',
        'AmpProject\\Validator\\Spec\\Tag\\Datalist' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Datalist.php',
        'AmpProject\\Validator\\Spec\\Tag\\Dd' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Dd.php',
        'AmpProject\\Validator\\Spec\\Tag\\Defs' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Defs.php',
        'AmpProject\\Validator\\Spec\\Tag\\Del' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Del.php',
        'AmpProject\\Validator\\Spec\\Tag\\Desc' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Desc.php',
        'AmpProject\\Validator\\Spec\\Tag\\Details' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Details.php',
        'AmpProject\\Validator\\Spec\\Tag\\Dfn' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Dfn.php',
        'AmpProject\\Validator\\Spec\\Tag\\Dir' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Dir.php',
        'AmpProject\\Validator\\Spec\\Tag\\Div' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Div.php',
        'AmpProject\\Validator\\Spec\\Tag\\DivAmpNestedMenu' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/DivAmpNestedMenu.php',
        'AmpProject\\Validator\\Spec\\Tag\\Dl' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Dl.php',
        'AmpProject\\Validator\\Spec\\Tag\\Dt' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Dt.php',
        'AmpProject\\Validator\\Spec\\Tag\\Ellipse' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Ellipse.php',
        'AmpProject\\Validator\\Spec\\Tag\\Em' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Em.php',
        'AmpProject\\Validator\\Spec\\Tag\\Feblend' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Feblend.php',
        'AmpProject\\Validator\\Spec\\Tag\\Fecolormatrix' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fecolormatrix.php',
        'AmpProject\\Validator\\Spec\\Tag\\Fecomponenttransfer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fecomponenttransfer.php',
        'AmpProject\\Validator\\Spec\\Tag\\Fecomposite' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fecomposite.php',
        'AmpProject\\Validator\\Spec\\Tag\\Feconvolvematrix' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Feconvolvematrix.php',
        'AmpProject\\Validator\\Spec\\Tag\\Fediffuselighting' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fediffuselighting.php',
        'AmpProject\\Validator\\Spec\\Tag\\Fedisplacementmap' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fedisplacementmap.php',
        'AmpProject\\Validator\\Spec\\Tag\\Fedistantlight' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fedistantlight.php',
        'AmpProject\\Validator\\Spec\\Tag\\Fedropshadow' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fedropshadow.php',
        'AmpProject\\Validator\\Spec\\Tag\\Feflood' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Feflood.php',
        'AmpProject\\Validator\\Spec\\Tag\\Fefunca' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fefunca.php',
        'AmpProject\\Validator\\Spec\\Tag\\Fefuncb' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fefuncb.php',
        'AmpProject\\Validator\\Spec\\Tag\\Fefuncg' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fefuncg.php',
        'AmpProject\\Validator\\Spec\\Tag\\Fefuncr' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fefuncr.php',
        'AmpProject\\Validator\\Spec\\Tag\\Fegaussianblur' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fegaussianblur.php',
        'AmpProject\\Validator\\Spec\\Tag\\Femerge' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Femerge.php',
        'AmpProject\\Validator\\Spec\\Tag\\Femergenode' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Femergenode.php',
        'AmpProject\\Validator\\Spec\\Tag\\Femorphology' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Femorphology.php',
        'AmpProject\\Validator\\Spec\\Tag\\Feoffset' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Feoffset.php',
        'AmpProject\\Validator\\Spec\\Tag\\Fepointlight' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fepointlight.php',
        'AmpProject\\Validator\\Spec\\Tag\\Fespecularlighting' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fespecularlighting.php',
        'AmpProject\\Validator\\Spec\\Tag\\Fespotlight' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fespotlight.php',
        'AmpProject\\Validator\\Spec\\Tag\\Fetile' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fetile.php',
        'AmpProject\\Validator\\Spec\\Tag\\Feturbulence' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Feturbulence.php',
        'AmpProject\\Validator\\Spec\\Tag\\Fieldset' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fieldset.php',
        'AmpProject\\Validator\\Spec\\Tag\\Figcaption' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Figcaption.php',
        'AmpProject\\Validator\\Spec\\Tag\\Figure' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Figure.php',
        'AmpProject\\Validator\\Spec\\Tag\\Filter' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Filter.php',
        'AmpProject\\Validator\\Spec\\Tag\\Footer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Footer.php',
        'AmpProject\\Validator\\Spec\\Tag\\FormDivSubmitError' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormDivSubmitError.php',
        'AmpProject\\Validator\\Spec\\Tag\\FormDivSubmitErrorTemplate' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormDivSubmitErrorTemplate.php',
        'AmpProject\\Validator\\Spec\\Tag\\FormDivSubmitSuccess' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormDivSubmitSuccess.php',
        'AmpProject\\Validator\\Spec\\Tag\\FormDivSubmitSuccessTemplate' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormDivSubmitSuccessTemplate.php',
        'AmpProject\\Validator\\Spec\\Tag\\FormDivSubmitting' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormDivSubmitting.php',
        'AmpProject\\Validator\\Spec\\Tag\\FormDivSubmittingTemplate' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormDivSubmittingTemplate.php',
        'AmpProject\\Validator\\Spec\\Tag\\FormDivVerifyError' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormDivVerifyError.php',
        'AmpProject\\Validator\\Spec\\Tag\\FormDivVerifyErrorTemplate' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormDivVerifyErrorTemplate.php',
        'AmpProject\\Validator\\Spec\\Tag\\FormMethodGet' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormMethodGet.php',
        'AmpProject\\Validator\\Spec\\Tag\\FormMethodGetAmp4email' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormMethodGetAmp4email.php',
        'AmpProject\\Validator\\Spec\\Tag\\FormMethodPost' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormMethodPost.php',
        'AmpProject\\Validator\\Spec\\Tag\\FormMethodPostAmp4email' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormMethodPostAmp4email.php',
        'AmpProject\\Validator\\Spec\\Tag\\G' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/G.php',
        'AmpProject\\Validator\\Spec\\Tag\\Glyph' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Glyph.php',
        'AmpProject\\Validator\\Spec\\Tag\\Glyphref' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Glyphref.php',
        'AmpProject\\Validator\\Spec\\Tag\\H1' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/H1.php',
        'AmpProject\\Validator\\Spec\\Tag\\H2' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/H2.php',
        'AmpProject\\Validator\\Spec\\Tag\\H2AmpNestedMenu' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/H2AmpNestedMenu.php',
        'AmpProject\\Validator\\Spec\\Tag\\H3' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/H3.php',
        'AmpProject\\Validator\\Spec\\Tag\\H3AmpNestedMenu' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/H3AmpNestedMenu.php',
        'AmpProject\\Validator\\Spec\\Tag\\H4' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/H4.php',
        'AmpProject\\Validator\\Spec\\Tag\\H4AmpNestedMenu' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/H4AmpNestedMenu.php',
        'AmpProject\\Validator\\Spec\\Tag\\H5' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/H5.php',
        'AmpProject\\Validator\\Spec\\Tag\\H5AmpNestedMenu' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/H5AmpNestedMenu.php',
        'AmpProject\\Validator\\Spec\\Tag\\H6' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/H6.php',
        'AmpProject\\Validator\\Spec\\Tag\\H6AmpNestedMenu' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/H6AmpNestedMenu.php',
        'AmpProject\\Validator\\Spec\\Tag\\Head' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Head.php',
        'AmpProject\\Validator\\Spec\\Tag\\HeadStyleAmp4adsBoilerplate' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/HeadStyleAmp4adsBoilerplate.php',
        'AmpProject\\Validator\\Spec\\Tag\\HeadStyleAmp4emailBoilerplate' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/HeadStyleAmp4emailBoilerplate.php',
        'AmpProject\\Validator\\Spec\\Tag\\HeadStyleAmpBoilerplate' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/HeadStyleAmpBoilerplate.php',
        'AmpProject\\Validator\\Spec\\Tag\\Header' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Header.php',
        'AmpProject\\Validator\\Spec\\Tag\\HeroImage' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/HeroImage.php',
        'AmpProject\\Validator\\Spec\\Tag\\HeroImg' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/HeroImg.php',
        'AmpProject\\Validator\\Spec\\Tag\\Hgroup' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Hgroup.php',
        'AmpProject\\Validator\\Spec\\Tag\\Hkern' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Hkern.php',
        'AmpProject\\Validator\\Spec\\Tag\\Hr' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Hr.php',
        'AmpProject\\Validator\\Spec\\Tag\\Html' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Html.php',
        'AmpProject\\Validator\\Spec\\Tag\\HtmlDoctype' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/HtmlDoctype.php',
        'AmpProject\\Validator\\Spec\\Tag\\HtmlDoctypeAmp4ads' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/HtmlDoctypeAmp4ads.php',
        'AmpProject\\Validator\\Spec\\Tag\\HtmlTransformed' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/HtmlTransformed.php',
        'AmpProject\\Validator\\Spec\\Tag\\I' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/I.php',
        'AmpProject\\Validator\\Spec\\Tag\\IAmphtmlSizerIntrinsic' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/IAmphtmlSizerIntrinsic.php',
        'AmpProject\\Validator\\Spec\\Tag\\IAmphtmlSizerResponsive' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/IAmphtmlSizerResponsive.php',
        'AmpProject\\Validator\\Spec\\Tag\\Iframe' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Iframe.php',
        'AmpProject\\Validator\\Spec\\Tag\\Image' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Image.php',
        'AmpProject\\Validator\\Spec\\Tag\\ImageUsingSrcset' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ImageUsingSrcset.php',
        'AmpProject\\Validator\\Spec\\Tag\\ImgIAmphtmlIntrinsicSizer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ImgIAmphtmlIntrinsicSizer.php',
        'AmpProject\\Validator\\Spec\\Tag\\ImgIAmphtmlIntrinsicSizerAmpStoryPlayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ImgIAmphtmlIntrinsicSizerAmpStoryPlayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\ImgUsingSrcset' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ImgUsingSrcset.php',
        'AmpProject\\Validator\\Spec\\Tag\\Input' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Input.php',
        'AmpProject\\Validator\\Spec\\Tag\\InputMaskCustomMask' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputMaskCustomMask.php',
        'AmpProject\\Validator\\Spec\\Tag\\InputMaskDateDdMmYyyy' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputMaskDateDdMmYyyy.php',
        'AmpProject\\Validator\\Spec\\Tag\\InputMaskDateMmDdYyyy' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputMaskDateMmDdYyyy.php',
        'AmpProject\\Validator\\Spec\\Tag\\InputMaskDateMmYy' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputMaskDateMmYy.php',
        'AmpProject\\Validator\\Spec\\Tag\\InputMaskDateYyyyMmDd' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputMaskDateYyyyMmDd.php',
        'AmpProject\\Validator\\Spec\\Tag\\InputMaskPaymentCard' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputMaskPaymentCard.php',
        'AmpProject\\Validator\\Spec\\Tag\\InputTypeFile' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputTypeFile.php',
        'AmpProject\\Validator\\Spec\\Tag\\InputTypeImage' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputTypeImage.php',
        'AmpProject\\Validator\\Spec\\Tag\\InputTypePassword' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputTypePassword.php',
        'AmpProject\\Validator\\Spec\\Tag\\Ins' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Ins.php',
        'AmpProject\\Validator\\Spec\\Tag\\Kbd' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Kbd.php',
        'AmpProject\\Validator\\Spec\\Tag\\Label' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Label.php',
        'AmpProject\\Validator\\Spec\\Tag\\Legend' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Legend.php',
        'AmpProject\\Validator\\Spec\\Tag\\Li' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Li.php',
        'AmpProject\\Validator\\Spec\\Tag\\Line' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Line.php',
        'AmpProject\\Validator\\Spec\\Tag\\Lineargradient' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Lineargradient.php',
        'AmpProject\\Validator\\Spec\\Tag\\LineargradientStop' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/LineargradientStop.php',
        'AmpProject\\Validator\\Spec\\Tag\\LinkItemprop' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkItemprop.php',
        'AmpProject\\Validator\\Spec\\Tag\\LinkItempropSameas' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkItempropSameas.php',
        'AmpProject\\Validator\\Spec\\Tag\\LinkProperty' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkProperty.php',
        'AmpProject\\Validator\\Spec\\Tag\\LinkRel' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkRel.php',
        'AmpProject\\Validator\\Spec\\Tag\\LinkRelCanonical' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkRelCanonical.php',
        'AmpProject\\Validator\\Spec\\Tag\\LinkRelManifest' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkRelManifest.php',
        'AmpProject\\Validator\\Spec\\Tag\\LinkRelModulepreload' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkRelModulepreload.php',
        'AmpProject\\Validator\\Spec\\Tag\\LinkRelPreload' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkRelPreload.php',
        'AmpProject\\Validator\\Spec\\Tag\\LinkRelStylesheetForAmpStory10Css' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkRelStylesheetForAmpStory10Css.php',
        'AmpProject\\Validator\\Spec\\Tag\\LinkRelStylesheetForFonts' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkRelStylesheetForFonts.php',
        'AmpProject\\Validator\\Spec\\Tag\\Listing' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Listing.php',
        'AmpProject\\Validator\\Spec\\Tag\\Main' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Main.php',
        'AmpProject\\Validator\\Spec\\Tag\\Mark' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Mark.php',
        'AmpProject\\Validator\\Spec\\Tag\\Marker' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Marker.php',
        'AmpProject\\Validator\\Spec\\Tag\\Mask' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Mask.php',
        'AmpProject\\Validator\\Spec\\Tag\\MetaCharsetUtf8' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaCharsetUtf8.php',
        'AmpProject\\Validator\\Spec\\Tag\\MetaHttpEquivContentLanguage' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivContentLanguage.php',
        'AmpProject\\Validator\\Spec\\Tag\\MetaHttpEquivContentScriptType' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivContentScriptType.php',
        'AmpProject\\Validator\\Spec\\Tag\\MetaHttpEquivContentStyleType' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivContentStyleType.php',
        'AmpProject\\Validator\\Spec\\Tag\\MetaHttpEquivContentType' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivContentType.php',
        'AmpProject\\Validator\\Spec\\Tag\\MetaHttpEquivImagetoolbar' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivImagetoolbar.php',
        'AmpProject\\Validator\\Spec\\Tag\\MetaHttpEquivOriginTrial' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivOriginTrial.php',
        'AmpProject\\Validator\\Spec\\Tag\\MetaHttpEquivPicsLabel' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivPicsLabel.php',
        'AmpProject\\Validator\\Spec\\Tag\\MetaHttpEquivResourceType' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivResourceType.php',
        'AmpProject\\Validator\\Spec\\Tag\\MetaHttpEquivXDnsPrefetchControl' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivXDnsPrefetchControl.php',
        'AmpProject\\Validator\\Spec\\Tag\\MetaHttpEquivXUaCompatible' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivXUaCompatible.php',
        'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmp3pIframeSrc' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmp3pIframeSrc.php',
        'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmp4adsId' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmp4adsId.php',
        'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmp4adsVars' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmp4adsVars.php',
        'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmpAdDoubleclickSra' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpAdDoubleclickSra.php',
        'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmpAdEnableRefresh' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpAdEnableRefresh.php',
        'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmpConsentBlocking' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpConsentBlocking.php',
        'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmpCtaLandingPageType' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpCtaLandingPageType.php',
        'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmpCtaType' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpCtaType.php',
        'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmpCtaUrl' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpCtaUrl.php',
        'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmpExperimentToken' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpExperimentToken.php',
        'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmpExperimentsOptIn' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpExperimentsOptIn.php',
        'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmpGoogleClientidIdApi' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpGoogleClientidIdApi.php',
        'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmpLinkVariableAllowedOrigin' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpLinkVariableAllowedOrigin.php',
        'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmpListLoadMore' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpListLoadMore.php',
        'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmpRecaptchaInput' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpRecaptchaInput.php',
        'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmpScriptSrc' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpScriptSrc.php',
        'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmpStoryGeneratorName' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpStoryGeneratorName.php',
        'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmpStoryGeneratorVersion' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpStoryGeneratorVersion.php',
        'AmpProject\\Validator\\Spec\\Tag\\MetaNameAmpToAmpNavigation' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpToAmpNavigation.php',
        'AmpProject\\Validator\\Spec\\Tag\\MetaNameAndContent' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAndContent.php',
        'AmpProject\\Validator\\Spec\\Tag\\MetaNameAppleItunesApp' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAppleItunesApp.php',
        'AmpProject\\Validator\\Spec\\Tag\\MetaNameViewport' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameViewport.php',
        'AmpProject\\Validator\\Spec\\Tag\\Metadata' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Metadata.php',
        'AmpProject\\Validator\\Spec\\Tag\\Meter' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Meter.php',
        'AmpProject\\Validator\\Spec\\Tag\\Multicol' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Multicol.php',
        'AmpProject\\Validator\\Spec\\Tag\\Nav' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Nav.php',
        'AmpProject\\Validator\\Spec\\Tag\\Nextid' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Nextid.php',
        'AmpProject\\Validator\\Spec\\Tag\\Nobr' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Nobr.php',
        'AmpProject\\Validator\\Spec\\Tag\\Noscript' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Noscript.php',
        'AmpProject\\Validator\\Spec\\Tag\\NoscriptEnclosureForAmpStyleTags' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/NoscriptEnclosureForAmpStyleTags.php',
        'AmpProject\\Validator\\Spec\\Tag\\NoscriptImg' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/NoscriptImg.php',
        'AmpProject\\Validator\\Spec\\Tag\\NoscriptStyleAmpBoilerplate' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/NoscriptStyleAmpBoilerplate.php',
        'AmpProject\\Validator\\Spec\\Tag\\OP' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/OP.php',
        'AmpProject\\Validator\\Spec\\Tag\\Ol' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Ol.php',
        'AmpProject\\Validator\\Spec\\Tag\\Optgroup' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Optgroup.php',
        'AmpProject\\Validator\\Spec\\Tag\\Option' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Option.php',
        'AmpProject\\Validator\\Spec\\Tag\\Output' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Output.php',
        'AmpProject\\Validator\\Spec\\Tag\\P' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/P.php',
        'AmpProject\\Validator\\Spec\\Tag\\Path' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Path.php',
        'AmpProject\\Validator\\Spec\\Tag\\Pattern' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Pattern.php',
        'AmpProject\\Validator\\Spec\\Tag\\Picture' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Picture.php',
        'AmpProject\\Validator\\Spec\\Tag\\PictureSource' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/PictureSource.php',
        'AmpProject\\Validator\\Spec\\Tag\\Polygon' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Polygon.php',
        'AmpProject\\Validator\\Spec\\Tag\\Polyline' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Polyline.php',
        'AmpProject\\Validator\\Spec\\Tag\\Pre' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Pre.php',
        'AmpProject\\Validator\\Spec\\Tag\\Progress' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Progress.php',
        'AmpProject\\Validator\\Spec\\Tag\\Q' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Q.php',
        'AmpProject\\Validator\\Spec\\Tag\\Radialgradient' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Radialgradient.php',
        'AmpProject\\Validator\\Spec\\Tag\\RadialgradientStop' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/RadialgradientStop.php',
        'AmpProject\\Validator\\Spec\\Tag\\Rb' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Rb.php',
        'AmpProject\\Validator\\Spec\\Tag\\Rect' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Rect.php',
        'AmpProject\\Validator\\Spec\\Tag\\Rp' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Rp.php',
        'AmpProject\\Validator\\Spec\\Tag\\Rt' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Rt.php',
        'AmpProject\\Validator\\Spec\\Tag\\Rtc' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Rtc.php',
        'AmpProject\\Validator\\Spec\\Tag\\Ruby' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Ruby.php',
        'AmpProject\\Validator\\Spec\\Tag\\S' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/S.php',
        'AmpProject\\Validator\\Spec\\Tag\\Samp' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Samp.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmp3dGltf' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmp3dGltf.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmp3qPlayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmp3qPlayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpAccess' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAccess.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpAccessFewcents' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAccessFewcents.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpAccessLaterpay' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAccessLaterpay.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpAccessPoool' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAccessPoool.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpAccessScroll' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAccessScroll.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpAccordion' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAccordion.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpAccordion2' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAccordion2.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpActionMacro' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpActionMacro.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpAdCustom' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAdCustom.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpAdExit' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAdExit.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpAddthis' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAddthis.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpAnalytics' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAnalytics.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpAnim' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAnim.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpAnimation' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAnimation.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpApesterMedia' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpApesterMedia.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpAppBanner' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAppBanner.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpAudio' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAudio.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpAutoAds' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAutoAds.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpAutocomplete' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAutocomplete.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpBaseCarousel' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpBaseCarousel.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpBeopinion' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpBeopinion.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpBind' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpBind.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpBodymovinAnimation' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpBodymovinAnimation.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpBridPlayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpBridPlayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpBrightcove' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpBrightcove.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpBrightcove2' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpBrightcove2.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpBysideContent' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpBysideContent.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpCacheUrl' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpCacheUrl.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpCallTracking' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpCallTracking.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpCarousel' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpCarousel.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpConnatixPlayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpConnatixPlayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpConsent' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpConsent.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpDailymotion' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpDailymotion.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpDailymotion2' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpDailymotion2.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpDateCountdown' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpDateCountdown.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpDateDisplay' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpDateDisplay.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpDatePicker' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpDatePicker.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpDelightPlayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpDelightPlayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpDynamicCssClasses' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpDynamicCssClasses.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpEmbedlyCard' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpEmbedlyCard.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpExperiment' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpExperiment.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpFacebook' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFacebook.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpFacebookComments' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFacebookComments.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpFacebookLike' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFacebookLike.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpFacebookPage' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFacebookPage.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpFitText' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFitText.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpFitText2' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFitText2.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpFont' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFont.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpForm' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpForm.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpFxCollection' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFxCollection.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpFxFlyingCarpet' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFxFlyingCarpet.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpGeo' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpGeo.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpGfycat' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpGfycat.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpGist' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpGist.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpGoogleDocumentEmbed' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpGoogleDocumentEmbed.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpGoogleReadAloudPlayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpGoogleReadAloudPlayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpGwdAnimation' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpGwdAnimation.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpHulu' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpHulu.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpIframe' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpIframe.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpIframe2' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpIframe2.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpIframely' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpIframely.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpImaVideo' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpImaVideo.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpImageLightbox' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpImageLightbox.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpImageSlider' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpImageSlider.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpImgur' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpImgur.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpInlineGallery' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpInlineGallery.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpInputmask' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpInputmask.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpInstagram' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpInstagram.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpInstagram2' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpInstagram2.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpInstallServiceworker' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpInstallServiceworker.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpIzlesene' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpIzlesene.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpJwplayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpJwplayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpKalturaPlayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpKalturaPlayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpLightbox' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpLightbox.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpLightbox2' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpLightbox2.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpLightboxGallery' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpLightboxGallery.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpLinkRewriter' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpLinkRewriter.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpList' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpList.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpLiveList' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpLiveList.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpMathml' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpMathml.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpMathml2' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpMathml2.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpMegaMenu' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpMegaMenu.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpMegaphone' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpMegaphone.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpMinuteMediaPlayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpMinuteMediaPlayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpMowplayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpMowplayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpMraid' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpMraid.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpMustache' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpMustache.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpNestedMenu' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpNestedMenu.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpNextPage' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpNextPage.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpNexxtvPlayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpNexxtvPlayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpO2Player' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpO2Player.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpOnerrorV0Js' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpOnerrorV0Js.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpOnerrorV0JsOrV0Mjs' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpOnerrorV0JsOrV0Mjs.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpOnetapGoogle' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpOnetapGoogle.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpOoyalaPlayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpOoyalaPlayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpOrientationObserver' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpOrientationObserver.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpPanZoom' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpPanZoom.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpPinterest' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpPinterest.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpPlaybuzz' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpPlaybuzz.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpPositionObserver' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpPositionObserver.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpPowrPlayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpPowrPlayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpReachPlayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpReachPlayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpRecaptchaInput' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpRecaptchaInput.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpRedbullPlayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpRedbullPlayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpReddit' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpReddit.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpRender' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpRender.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpRiddleQuiz' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpRiddleQuiz.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpScript' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpScript.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpSelector' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSelector.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpSelector2' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSelector2.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpSidebar' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSidebar.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpSidebar2' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSidebar2.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpSkimlinks' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSkimlinks.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpSlides' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSlides.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpSmartlinks' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSmartlinks.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpSocialShare' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSocialShare.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpSocialShare2' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSocialShare2.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpSoundcloud' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSoundcloud.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpSoundcloud2' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSoundcloud2.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpSpringboardPlayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSpringboardPlayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpStickyAd' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStickyAd.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpStory' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStory.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpStory360' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStory360.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpStoryAutoAds' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStoryAutoAds.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpStoryAutoAnalytics' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStoryAutoAnalytics.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpStoryCaptions' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStoryCaptions.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpStoryDvhPolyfill' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStoryDvhPolyfill.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpStoryInteractive' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStoryInteractive.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpStoryPanningMedia' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStoryPanningMedia.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpStoryPlayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStoryPlayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpStoryShopping' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStoryShopping.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpStorySubscriptions' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStorySubscriptions.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpStreamGallery' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStreamGallery.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpSubscriptions' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSubscriptions.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpSubscriptionsGoogle' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSubscriptionsGoogle.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpTiktok' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpTiktok.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpTimeago' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpTimeago.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpTruncateText' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpTruncateText.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpTwitter' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpTwitter.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpTwitter2' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpTwitter2.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpUserNotification' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpUserNotification.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpVideo' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVideo.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpVideo2' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVideo2.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpVideoDocking' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVideoDocking.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpVideoIframe' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVideoIframe.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpVideoIframe2' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVideoIframe2.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpVimeo' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVimeo.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpVimeo2' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVimeo2.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpVine' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVine.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpViqeoPlayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpViqeoPlayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpVk' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVk.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpWebPush' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpWebPush.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpWistiaPlayer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpWistiaPlayer.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpWordpressEmbed' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpWordpressEmbed.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpYotpo' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpYotpo.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpYoutube' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpYoutube.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptAmpYoutube2' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpYoutube2.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptCustomElementAmpAccordionAmp4email' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpAccordionAmp4email.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptCustomElementAmpAutocompleteAmp4email' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpAutocompleteAmp4email.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptCustomElementAmpBindAmp4email' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpBindAmp4email.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptCustomElementAmpCarouselAmp4email' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpCarouselAmp4email.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptCustomElementAmpFitTextAmp4email' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpFitTextAmp4email.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptCustomElementAmpFormAmp4email' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpFormAmp4email.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptCustomElementAmpImageLightboxAmp4email' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpImageLightboxAmp4email.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptCustomElementAmpLightboxAmp4ads' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpLightboxAmp4ads.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptCustomElementAmpLightboxAmp4email' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpLightboxAmp4email.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptCustomElementAmpListAmp4email' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpListAmp4email.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptCustomElementAmpSelectorAmp4email' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpSelectorAmp4email.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptCustomElementAmpSidebarAmp4email' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpSidebarAmp4email.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptCustomElementAmpTimeagoAmp4email' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpTimeagoAmp4email.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptCustomTemplateAmpMustacheAmp4ads' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomTemplateAmpMustacheAmp4ads.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptCustomTemplateAmpMustacheAmp4email' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomTemplateAmpMustacheAmp4email.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptIdAmpRtc' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptIdAmpRtc.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptTypeApplicationLdJson' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptTypeApplicationLdJson.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptTypeTextPlain' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptTypeTextPlain.php',
        'AmpProject\\Validator\\Spec\\Tag\\ScriptTypeTextPlainAmp4email' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptTypeTextPlainAmp4email.php',
        'AmpProject\\Validator\\Spec\\Tag\\Section' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Section.php',
        'AmpProject\\Validator\\Spec\\Tag\\SectionAmp4email' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/SectionAmp4email.php',
        'AmpProject\\Validator\\Spec\\Tag\\Select' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Select.php',
        'AmpProject\\Validator\\Spec\\Tag\\Slot' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Slot.php',
        'AmpProject\\Validator\\Spec\\Tag\\Small' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Small.php',
        'AmpProject\\Validator\\Spec\\Tag\\Solidcolor' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Solidcolor.php',
        'AmpProject\\Validator\\Spec\\Tag\\Spacer' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Spacer.php',
        'AmpProject\\Validator\\Spec\\Tag\\Span' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Span.php',
        'AmpProject\\Validator\\Spec\\Tag\\SpanAmpNestedMenu' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/SpanAmpNestedMenu.php',
        'AmpProject\\Validator\\Spec\\Tag\\SpanSwgAmpCacheNonce' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/SpanSwgAmpCacheNonce.php',
        'AmpProject\\Validator\\Spec\\Tag\\StandardImage' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/StandardImage.php',
        'AmpProject\\Validator\\Spec\\Tag\\StandardImg' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/StandardImg.php',
        'AmpProject\\Validator\\Spec\\Tag\\Strike' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Strike.php',
        'AmpProject\\Validator\\Spec\\Tag\\Strong' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Strong.php',
        'AmpProject\\Validator\\Spec\\Tag\\StyleAmpCustom' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/StyleAmpCustom.php',
        'AmpProject\\Validator\\Spec\\Tag\\StyleAmpCustomAmp4ads' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/StyleAmpCustomAmp4ads.php',
        'AmpProject\\Validator\\Spec\\Tag\\StyleAmpCustomAmp4email' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/StyleAmpCustomAmp4email.php',
        'AmpProject\\Validator\\Spec\\Tag\\StyleAmpCustomCssStrict' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/StyleAmpCustomCssStrict.php',
        'AmpProject\\Validator\\Spec\\Tag\\StyleAmpCustomLengthCheck' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/StyleAmpCustomLengthCheck.php',
        'AmpProject\\Validator\\Spec\\Tag\\StyleAmpKeyframes' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/StyleAmpKeyframes.php',
        'AmpProject\\Validator\\Spec\\Tag\\StyleAmpNoscript' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/StyleAmpNoscript.php',
        'AmpProject\\Validator\\Spec\\Tag\\StyleAmpRuntimeTransformed' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/StyleAmpRuntimeTransformed.php',
        'AmpProject\\Validator\\Spec\\Tag\\Sub' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Sub.php',
        'AmpProject\\Validator\\Spec\\Tag\\SubscriptionsScriptCiphertext' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/SubscriptionsScriptCiphertext.php',
        'AmpProject\\Validator\\Spec\\Tag\\SubscriptionsSectionContentSwgAmpCacheNonce' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/SubscriptionsSectionContentSwgAmpCacheNonce.php',
        'AmpProject\\Validator\\Spec\\Tag\\Summary' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Summary.php',
        'AmpProject\\Validator\\Spec\\Tag\\Sup' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Sup.php',
        'AmpProject\\Validator\\Spec\\Tag\\Svg' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Svg.php',
        'AmpProject\\Validator\\Spec\\Tag\\SvgTitle' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/SvgTitle.php',
        'AmpProject\\Validator\\Spec\\Tag\\Switch_' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Switch_.php',
        'AmpProject\\Validator\\Spec\\Tag\\Symbol' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Symbol.php',
        'AmpProject\\Validator\\Spec\\Tag\\Table' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Table.php',
        'AmpProject\\Validator\\Spec\\Tag\\Tbody' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Tbody.php',
        'AmpProject\\Validator\\Spec\\Tag\\Td' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Td.php',
        'AmpProject\\Validator\\Spec\\Tag\\Template' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Template.php',
        'AmpProject\\Validator\\Spec\\Tag\\TemplateAmp4email' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/TemplateAmp4email.php',
        'AmpProject\\Validator\\Spec\\Tag\\Text' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Text.php',
        'AmpProject\\Validator\\Spec\\Tag\\Textarea' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Textarea.php',
        'AmpProject\\Validator\\Spec\\Tag\\Textpath' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Textpath.php',
        'AmpProject\\Validator\\Spec\\Tag\\Tfoot' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Tfoot.php',
        'AmpProject\\Validator\\Spec\\Tag\\Th' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Th.php',
        'AmpProject\\Validator\\Spec\\Tag\\Thead' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Thead.php',
        'AmpProject\\Validator\\Spec\\Tag\\Time' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Time.php',
        'AmpProject\\Validator\\Spec\\Tag\\Title' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Title.php',
        'AmpProject\\Validator\\Spec\\Tag\\TitleAmp4email' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/TitleAmp4email.php',
        'AmpProject\\Validator\\Spec\\Tag\\Tr' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Tr.php',
        'AmpProject\\Validator\\Spec\\Tag\\Tref' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Tref.php',
        'AmpProject\\Validator\\Spec\\Tag\\Tspan' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Tspan.php',
        'AmpProject\\Validator\\Spec\\Tag\\Tt' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Tt.php',
        'AmpProject\\Validator\\Spec\\Tag\\U' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/U.php',
        'AmpProject\\Validator\\Spec\\Tag\\Ul' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Ul.php',
        'AmpProject\\Validator\\Spec\\Tag\\Use_' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Use_.php',
        'AmpProject\\Validator\\Spec\\Tag\\Var_' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Var_.php',
        'AmpProject\\Validator\\Spec\\Tag\\Video' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Video.php',
        'AmpProject\\Validator\\Spec\\Tag\\VideoSource' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/VideoSource.php',
        'AmpProject\\Validator\\Spec\\Tag\\VideoTrack' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/VideoTrack.php',
        'AmpProject\\Validator\\Spec\\Tag\\VideoTrackKindSubtitles' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/VideoTrackKindSubtitles.php',
        'AmpProject\\Validator\\Spec\\Tag\\View' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/View.php',
        'AmpProject\\Validator\\Spec\\Tag\\Vkern' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Vkern.php',
        'AmpProject\\Validator\\Spec\\Tag\\Wbr' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/Spec/Tag/Wbr.php',
        'AmpProject\\Validator\\ValidateTagResult' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/ValidateTagResult.php',
        'AmpProject\\Validator\\ValidationEngine' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/ValidationEngine.php',
        'AmpProject\\Validator\\ValidationError' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/ValidationError.php',
        'AmpProject\\Validator\\ValidationErrorCollection' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/ValidationErrorCollection.php',
        'AmpProject\\Validator\\ValidationHandler' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/ValidationHandler.php',
        'AmpProject\\Validator\\ValidationResult' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/ValidationResult.php',
        'AmpProject\\Validator\\ValidationSeverity' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/ValidationSeverity.php',
        'AmpProject\\Validator\\ValidationStatus' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/ValidationStatus.php',
        'AmpProject\\Validator\\ValidatorRules' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/ValidatorRules.php',
        'AmpProject\\Validator\\ValueSetProvision' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/ValueSetProvision.php',
        'AmpProject\\Validator\\ValueSetRequirement' => __DIR__ . '/..' . '/ampproject/amp-toolbox/src/Validator/ValueSetRequirement.php',
        'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
        'FasterImage\\Exception\\InvalidImageException' => __DIR__ . '/..' . '/fasterimage/fasterimage/src/FasterImage/Exception/InvalidImageException.php',
        'FasterImage\\ExifParser' => __DIR__ . '/..' . '/fasterimage/fasterimage/src/FasterImage/ExifParser.php',
        'FasterImage\\FasterImage' => __DIR__ . '/..' . '/fasterimage/fasterimage/src/FasterImage/FasterImage.php',
        'FasterImage\\ImageParser' => __DIR__ . '/..' . '/fasterimage/fasterimage/src/FasterImage/ImageParser.php',
        'Sabberworm\\CSS\\CSSList\\AtRuleBlockList' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/CSSList/AtRuleBlockList.php',
        'Sabberworm\\CSS\\CSSList\\CSSBlockList' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/CSSList/CSSBlockList.php',
        'Sabberworm\\CSS\\CSSList\\CSSList' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/CSSList/CSSList.php',
        'Sabberworm\\CSS\\CSSList\\Document' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/CSSList/Document.php',
        'Sabberworm\\CSS\\CSSList\\KeyFrame' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/CSSList/KeyFrame.php',
        'Sabberworm\\CSS\\Comment\\Comment' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/Comment/Comment.php',
        'Sabberworm\\CSS\\Comment\\Commentable' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/Comment/Commentable.php',
        'Sabberworm\\CSS\\OutputFormat' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/OutputFormat.php',
        'Sabberworm\\CSS\\OutputFormatter' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/OutputFormatter.php',
        'Sabberworm\\CSS\\Parser' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/Parser.php',
        'Sabberworm\\CSS\\Parsing\\Anchor' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/Parsing/Anchor.php',
        'Sabberworm\\CSS\\Parsing\\OutputException' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/Parsing/OutputException.php',
        'Sabberworm\\CSS\\Parsing\\ParserState' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/Parsing/ParserState.php',
        'Sabberworm\\CSS\\Parsing\\SourceException' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/Parsing/SourceException.php',
        'Sabberworm\\CSS\\Parsing\\UnexpectedEOFException' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/Parsing/UnexpectedEOFException.php',
        'Sabberworm\\CSS\\Parsing\\UnexpectedTokenException' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/Parsing/UnexpectedTokenException.php',
        'Sabberworm\\CSS\\Property\\AtRule' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/Property/AtRule.php',
        'Sabberworm\\CSS\\Property\\CSSNamespace' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/Property/CSSNamespace.php',
        'Sabberworm\\CSS\\Property\\Charset' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/Property/Charset.php',
        'Sabberworm\\CSS\\Property\\Import' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/Property/Import.php',
        'Sabberworm\\CSS\\Property\\KeyframeSelector' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/Property/KeyframeSelector.php',
        'Sabberworm\\CSS\\Property\\Selector' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/Property/Selector.php',
        'Sabberworm\\CSS\\Renderable' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/Renderable.php',
        'Sabberworm\\CSS\\RuleSet\\AtRuleSet' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/RuleSet/AtRuleSet.php',
        'Sabberworm\\CSS\\RuleSet\\DeclarationBlock' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/RuleSet/DeclarationBlock.php',
        'Sabberworm\\CSS\\RuleSet\\RuleSet' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/RuleSet/RuleSet.php',
        'Sabberworm\\CSS\\Rule\\Rule' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/Rule/Rule.php',
        'Sabberworm\\CSS\\Settings' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/Settings.php',
        'Sabberworm\\CSS\\Value\\CSSFunction' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/Value/CSSFunction.php',
        'Sabberworm\\CSS\\Value\\CSSString' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/Value/CSSString.php',
        'Sabberworm\\CSS\\Value\\CalcFunction' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/Value/CalcFunction.php',
        'Sabberworm\\CSS\\Value\\CalcRuleValueList' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/Value/CalcRuleValueList.php',
        'Sabberworm\\CSS\\Value\\Color' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/Value/Color.php',
        'Sabberworm\\CSS\\Value\\Expression' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/Value/Expression.php',
        'Sabberworm\\CSS\\Value\\LineName' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/Value/LineName.php',
        'Sabberworm\\CSS\\Value\\PrimitiveValue' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/Value/PrimitiveValue.php',
        'Sabberworm\\CSS\\Value\\RuleValueList' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/Value/RuleValueList.php',
        'Sabberworm\\CSS\\Value\\Size' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/Value/Size.php',
        'Sabberworm\\CSS\\Value\\URL' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/Value/URL.php',
        'Sabberworm\\CSS\\Value\\Value' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/Value/Value.php',
        'Sabberworm\\CSS\\Value\\ValueList' => __DIR__ . '/..' . '/sabberworm/php-css-parser/src/Value/ValueList.php',
        'WillWashburn\\Stream\\Exception\\StreamBufferTooSmallException' => __DIR__ . '/..' . '/willwashburn/stream/src/Stream/Exception/StreamBufferTooSmallException.php',
        'WillWashburn\\Stream\\Stream' => __DIR__ . '/..' . '/willwashburn/stream/src/Stream/Stream.php',
        'WillWashburn\\Stream\\StreamableInterface' => __DIR__ . '/..' . '/willwashburn/stream/src/Stream/StreamableInterface.php',
    );

    public static function getInitializer(ClassLoader $loader)
    {
        return \Closure::bind(function () use ($loader) {
            $loader->prefixLengthsPsr4 = ComposerStaticInitfce7eaa51eae83b212188c83fb02faa9::$prefixLengthsPsr4;
            $loader->prefixDirsPsr4 = ComposerStaticInitfce7eaa51eae83b212188c83fb02faa9::$prefixDirsPsr4;
            $loader->classMap = ComposerStaticInitfce7eaa51eae83b212188c83fb02faa9::$classMap;

        }, null, ClassLoader::class);
    }
}
PK.3Y2@u�?�?*bunyad-amp/vendor/composer/ClassLoader.php<?php

/*
 * This file is part of Composer.
 *
 * (c) Nils Adermann <[email protected]>
 *     Jordi Boggiano <[email protected]>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Composer\Autoload;

/**
 * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
 *
 *     $loader = new \Composer\Autoload\ClassLoader();
 *
 *     // register classes with namespaces
 *     $loader->add('Symfony\Component', __DIR__.'/component');
 *     $loader->add('Symfony',           __DIR__.'/framework');
 *
 *     // activate the autoloader
 *     $loader->register();
 *
 *     // to enable searching the include path (eg. for PEAR packages)
 *     $loader->setUseIncludePath(true);
 *
 * In this example, if you try to use a class in the Symfony\Component
 * namespace or one of its children (Symfony\Component\Console for instance),
 * the autoloader will first look for the class under the component/
 * directory, and it will then fallback to the framework/ directory if not
 * found before giving up.
 *
 * This class is loosely based on the Symfony UniversalClassLoader.
 *
 * @author Fabien Potencier <[email protected]>
 * @author Jordi Boggiano <[email protected]>
 * @see    https://www.php-fig.org/psr/psr-0/
 * @see    https://www.php-fig.org/psr/psr-4/
 */
class ClassLoader
{
    /** @var \Closure(string):void */
    private static $includeFile;

    /** @var string|null */
    private $vendorDir;

    // PSR-4
    /**
     * @var array<string, array<string, int>>
     */
    private $prefixLengthsPsr4 = array();
    /**
     * @var array<string, list<string>>
     */
    private $prefixDirsPsr4 = array();
    /**
     * @var list<string>
     */
    private $fallbackDirsPsr4 = array();

    // PSR-0
    /**
     * List of PSR-0 prefixes
     *
     * Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2')))
     *
     * @var array<string, array<string, list<string>>>
     */
    private $prefixesPsr0 = array();
    /**
     * @var list<string>
     */
    private $fallbackDirsPsr0 = array();

    /** @var bool */
    private $useIncludePath = false;

    /**
     * @var array<string, string>
     */
    private $classMap = array();

    /** @var bool */
    private $classMapAuthoritative = false;

    /**
     * @var array<string, bool>
     */
    private $missingClasses = array();

    /** @var string|null */
    private $apcuPrefix;

    /**
     * @var array<string, self>
     */
    private static $registeredLoaders = array();

    /**
     * @param string|null $vendorDir
     */
    public function __construct($vendorDir = null)
    {
        $this->vendorDir = $vendorDir;
        self::initializeIncludeClosure();
    }

    /**
     * @return array<string, list<string>>
     */
    public function getPrefixes()
    {
        if (!empty($this->prefixesPsr0)) {
            return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
        }

        return array();
    }

    /**
     * @return array<string, list<string>>
     */
    public function getPrefixesPsr4()
    {
        return $this->prefixDirsPsr4;
    }

    /**
     * @return list<string>
     */
    public function getFallbackDirs()
    {
        return $this->fallbackDirsPsr0;
    }

    /**
     * @return list<string>
     */
    public function getFallbackDirsPsr4()
    {
        return $this->fallbackDirsPsr4;
    }

    /**
     * @return array<string, string> Array of classname => path
     */
    public function getClassMap()
    {
        return $this->classMap;
    }

    /**
     * @param array<string, string> $classMap Class to filename map
     *
     * @return void
     */
    public function addClassMap(array $classMap)
    {
        if ($this->classMap) {
            $this->classMap = array_merge($this->classMap, $classMap);
        } else {
            $this->classMap = $classMap;
        }
    }

    /**
     * Registers a set of PSR-0 directories for a given prefix, either
     * appending or prepending to the ones previously set for this prefix.
     *
     * @param string              $prefix  The prefix
     * @param list<string>|string $paths   The PSR-0 root directories
     * @param bool                $prepend Whether to prepend the directories
     *
     * @return void
     */
    public function add($prefix, $paths, $prepend = false)
    {
        $paths = (array) $paths;
        if (!$prefix) {
            if ($prepend) {
                $this->fallbackDirsPsr0 = array_merge(
                    $paths,
                    $this->fallbackDirsPsr0
                );
            } else {
                $this->fallbackDirsPsr0 = array_merge(
                    $this->fallbackDirsPsr0,
                    $paths
                );
            }

            return;
        }

        $first = $prefix[0];
        if (!isset($this->prefixesPsr0[$first][$prefix])) {
            $this->prefixesPsr0[$first][$prefix] = $paths;

            return;
        }
        if ($prepend) {
            $this->prefixesPsr0[$first][$prefix] = array_merge(
                $paths,
                $this->prefixesPsr0[$first][$prefix]
            );
        } else {
            $this->prefixesPsr0[$first][$prefix] = array_merge(
                $this->prefixesPsr0[$first][$prefix],
                $paths
            );
        }
    }

    /**
     * Registers a set of PSR-4 directories for a given namespace, either
     * appending or prepending to the ones previously set for this namespace.
     *
     * @param string              $prefix  The prefix/namespace, with trailing '\\'
     * @param list<string>|string $paths   The PSR-4 base directories
     * @param bool                $prepend Whether to prepend the directories
     *
     * @throws \InvalidArgumentException
     *
     * @return void
     */
    public function addPsr4($prefix, $paths, $prepend = false)
    {
        $paths = (array) $paths;
        if (!$prefix) {
            // Register directories for the root namespace.
            if ($prepend) {
                $this->fallbackDirsPsr4 = array_merge(
                    $paths,
                    $this->fallbackDirsPsr4
                );
            } else {
                $this->fallbackDirsPsr4 = array_merge(
                    $this->fallbackDirsPsr4,
                    $paths
                );
            }
        } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
            // Register directories for a new namespace.
            $length = strlen($prefix);
            if ('\\' !== $prefix[$length - 1]) {
                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
            }
            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
            $this->prefixDirsPsr4[$prefix] = $paths;
        } elseif ($prepend) {
            // Prepend directories for an already registered namespace.
            $this->prefixDirsPsr4[$prefix] = array_merge(
                $paths,
                $this->prefixDirsPsr4[$prefix]
            );
        } else {
            // Append directories for an already registered namespace.
            $this->prefixDirsPsr4[$prefix] = array_merge(
                $this->prefixDirsPsr4[$prefix],
                $paths
            );
        }
    }

    /**
     * Registers a set of PSR-0 directories for a given prefix,
     * replacing any others previously set for this prefix.
     *
     * @param string              $prefix The prefix
     * @param list<string>|string $paths  The PSR-0 base directories
     *
     * @return void
     */
    public function set($prefix, $paths)
    {
        if (!$prefix) {
            $this->fallbackDirsPsr0 = (array) $paths;
        } else {
            $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
        }
    }

    /**
     * Registers a set of PSR-4 directories for a given namespace,
     * replacing any others previously set for this namespace.
     *
     * @param string              $prefix The prefix/namespace, with trailing '\\'
     * @param list<string>|string $paths  The PSR-4 base directories
     *
     * @throws \InvalidArgumentException
     *
     * @return void
     */
    public function setPsr4($prefix, $paths)
    {
        if (!$prefix) {
            $this->fallbackDirsPsr4 = (array) $paths;
        } else {
            $length = strlen($prefix);
            if ('\\' !== $prefix[$length - 1]) {
                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
            }
            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
            $this->prefixDirsPsr4[$prefix] = (array) $paths;
        }
    }

    /**
     * Turns on searching the include path for class files.
     *
     * @param bool $useIncludePath
     *
     * @return void
     */
    public function setUseIncludePath($useIncludePath)
    {
        $this->useIncludePath = $useIncludePath;
    }

    /**
     * Can be used to check if the autoloader uses the include path to check
     * for classes.
     *
     * @return bool
     */
    public function getUseIncludePath()
    {
        return $this->useIncludePath;
    }

    /**
     * Turns off searching the prefix and fallback directories for classes
     * that have not been registered with the class map.
     *
     * @param bool $classMapAuthoritative
     *
     * @return void
     */
    public function setClassMapAuthoritative($classMapAuthoritative)
    {
        $this->classMapAuthoritative = $classMapAuthoritative;
    }

    /**
     * Should class lookup fail if not found in the current class map?
     *
     * @return bool
     */
    public function isClassMapAuthoritative()
    {
        return $this->classMapAuthoritative;
    }

    /**
     * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
     *
     * @param string|null $apcuPrefix
     *
     * @return void
     */
    public function setApcuPrefix($apcuPrefix)
    {
        $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
    }

    /**
     * The APCu prefix in use, or null if APCu caching is not enabled.
     *
     * @return string|null
     */
    public function getApcuPrefix()
    {
        return $this->apcuPrefix;
    }

    /**
     * Registers this instance as an autoloader.
     *
     * @param bool $prepend Whether to prepend the autoloader or not
     *
     * @return void
     */
    public function register($prepend = false)
    {
        spl_autoload_register(array($this, 'loadClass'), true, $prepend);

        if (null === $this->vendorDir) {
            return;
        }

        if ($prepend) {
            self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
        } else {
            unset(self::$registeredLoaders[$this->vendorDir]);
            self::$registeredLoaders[$this->vendorDir] = $this;
        }
    }

    /**
     * Unregisters this instance as an autoloader.
     *
     * @return void
     */
    public function unregister()
    {
        spl_autoload_unregister(array($this, 'loadClass'));

        if (null !== $this->vendorDir) {
            unset(self::$registeredLoaders[$this->vendorDir]);
        }
    }

    /**
     * Loads the given class or interface.
     *
     * @param  string    $class The name of the class
     * @return true|null True if loaded, null otherwise
     */
    public function loadClass($class)
    {
        if ($file = $this->findFile($class)) {
            $includeFile = self::$includeFile;
            $includeFile($file);

            return true;
        }

        return null;
    }

    /**
     * Finds the path to the file where the class is defined.
     *
     * @param string $class The name of the class
     *
     * @return string|false The path if found, false otherwise
     */
    public function findFile($class)
    {
        // class map lookup
        if (isset($this->classMap[$class])) {
            return $this->classMap[$class];
        }
        if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
            return false;
        }
        if (null !== $this->apcuPrefix) {
            $file = apcu_fetch($this->apcuPrefix.$class, $hit);
            if ($hit) {
                return $file;
            }
        }

        $file = $this->findFileWithExtension($class, '.php');

        // Search for Hack files if we are running on HHVM
        if (false === $file && defined('HHVM_VERSION')) {
            $file = $this->findFileWithExtension($class, '.hh');
        }

        if (null !== $this->apcuPrefix) {
            apcu_add($this->apcuPrefix.$class, $file);
        }

        if (false === $file) {
            // Remember that this class does not exist.
            $this->missingClasses[$class] = true;
        }

        return $file;
    }

    /**
     * Returns the currently registered loaders keyed by their corresponding vendor directories.
     *
     * @return array<string, self>
     */
    public static function getRegisteredLoaders()
    {
        return self::$registeredLoaders;
    }

    /**
     * @param  string       $class
     * @param  string       $ext
     * @return string|false
     */
    private function findFileWithExtension($class, $ext)
    {
        // PSR-4 lookup
        $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;

        $first = $class[0];
        if (isset($this->prefixLengthsPsr4[$first])) {
            $subPath = $class;
            while (false !== $lastPos = strrpos($subPath, '\\')) {
                $subPath = substr($subPath, 0, $lastPos);
                $search = $subPath . '\\';
                if (isset($this->prefixDirsPsr4[$search])) {
                    $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
                    foreach ($this->prefixDirsPsr4[$search] as $dir) {
                        if (file_exists($file = $dir . $pathEnd)) {
                            return $file;
                        }
                    }
                }
            }
        }

        // PSR-4 fallback dirs
        foreach ($this->fallbackDirsPsr4 as $dir) {
            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
                return $file;
            }
        }

        // PSR-0 lookup
        if (false !== $pos = strrpos($class, '\\')) {
            // namespaced class name
            $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
                . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
        } else {
            // PEAR-like class name
            $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
        }

        if (isset($this->prefixesPsr0[$first])) {
            foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
                if (0 === strpos($class, $prefix)) {
                    foreach ($dirs as $dir) {
                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
                            return $file;
                        }
                    }
                }
            }
        }

        // PSR-0 fallback dirs
        foreach ($this->fallbackDirsPsr0 as $dir) {
            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
                return $file;
            }
        }

        // PSR-0 include paths.
        if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
            return $file;
        }

        return false;
    }

    /**
     * @return void
     */
    private static function initializeIncludeClosure()
    {
        if (self::$includeFile !== null) {
            return;
        }

        /**
         * Scope isolated include.
         *
         * Prevents access to $this/self from included files.
         *
         * @param  string $file
         * @return void
         */
        self::$includeFile = \Closure::bind(static function($file) {
            include $file;
        }, null, null);
    }
}
PK.3Y4�V�e)e))bunyad-amp/vendor/composer/installed.json{
    "packages": [
        {
            "name": "ampproject/amp-toolbox",
            "version": "0.11.4",
            "version_normalized": "0.11.4.0",
            "source": {
                "type": "git",
                "url": "https://github.com/ampproject/amp-toolbox-php.git",
                "reference": "c79a0fe558a3c042aee4789bbf33376cca7a733d"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/ampproject/amp-toolbox-php/zipball/c79a0fe558a3c042aee4789bbf33376cca7a733d",
                "reference": "c79a0fe558a3c042aee4789bbf33376cca7a733d",
                "shasum": ""
            },
            "require": {
                "ext-dom": "*",
                "ext-filter": "*",
                "ext-iconv": "*",
                "ext-json": "*",
                "ext-libxml": "*",
                "php": "^5.6 || ^7.0 || ^8.0"
            },
            "require-dev": {
                "civicrm/composer-downloads-plugin": "^2.1 || ^3.0",
                "dealerdirect/phpcodesniffer-composer-installer": "^0.7.1 || ^1.0.0",
                "ext-zip": "*",
                "mikey179/vfsstream": "^1.6",
                "php-parallel-lint/php-parallel-lint": "^1.2",
                "phpcompatibility/php-compatibility": "^9",
                "phpunit/phpunit": "^5 || ^6 || ^7 || ^8 || ^9",
                "roave/security-advisories": "dev-master",
                "sirbrillig/phpcs-variable-analysis": "^2.11.2",
                "squizlabs/php_codesniffer": "^3",
                "wp-coding-standards/wpcs": "^2.3",
                "yoast/phpunit-polyfills": "^0.2.0 || ^1.0.0"
            },
            "suggest": {
                "ext-json": "Provides native implementation of json_encode()/json_decode().",
                "ext-mbstring": "Used by Dom\\Document to convert encoding to UTF-8 if needed.",
                "mck89/peast": "Needed to minify the AMP script.",
                "nette/php-generator": "Needed to generate the validator spec PHP classes and interfaces."
            },
            "time": "2023-10-24T22:47:58+00:00",
            "bin": [
                "bin/amp"
            ],
            "type": "library",
            "extra": {
                "downloads": {
                    "phpstan": {
                        "url": "https://github.com/phpstan/phpstan/releases/latest/download/phpstan.phar",
                        "path": "vendor/bin/phpstan",
                        "type": "phar"
                    }
                }
            },
            "installation-source": "dist",
            "autoload": {
                "files": [
                    "include/compatibility-fixes.php"
                ],
                "psr-4": {
                    "AmpProject\\": "src/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "Apache-2.0"
            ],
            "description": "A collection of AMP tools making it easier to publish and host AMP pages with PHP.",
            "support": {
                "issues": "https://github.com/ampproject/amp-toolbox-php/issues",
                "source": "https://github.com/ampproject/amp-toolbox-php/tree/0.11.4"
            },
            "install-path": "../ampproject/amp-toolbox"
        },
        {
            "name": "fasterimage/fasterimage",
            "version": "v1.5.0",
            "version_normalized": "1.5.0.0",
            "source": {
                "type": "git",
                "url": "https://github.com/willwashburn/fasterimage.git",
                "reference": "42d125a15dc124520aff2157bbed9a4b2d4f310a"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/willwashburn/fasterimage/zipball/42d125a15dc124520aff2157bbed9a4b2d4f310a",
                "reference": "42d125a15dc124520aff2157bbed9a4b2d4f310a",
                "shasum": ""
            },
            "require": {
                "php": ">=5.4.0",
                "willwashburn/stream": ">=1.0"
            },
            "require-dev": {
                "php-coveralls/php-coveralls": "^2.1",
                "php-mock/php-mock-phpunit": "^2.3",
                "phpunit/phpunit": "~6.0"
            },
            "time": "2019-05-25T14:33:33+00:00",
            "type": "library",
            "installation-source": "dist",
            "autoload": {
                "classmap": [
                    "src"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Will Washburn",
                    "email": "[email protected]"
                },
                {
                    "name": "Weston Ruter"
                }
            ],
            "description": "FasterImage finds the size or type of a set of images given their uris by fetching as little as needed, in parallel. Originally ported by Tom Moor.",
            "homepage": "https://github.com/willwashburn/fasterimage",
            "keywords": [
                "fast image",
                "faster image",
                "fasterimage",
                "fastimage",
                "getimagesize",
                "image size",
                "parallel"
            ],
            "support": {
                "issues": "https://github.com/willwashburn/fasterimage/issues",
                "source": "https://github.com/willwashburn/fasterimage/tree/master"
            },
            "install-path": "../fasterimage/fasterimage"
        },
        {
            "name": "sabberworm/php-css-parser",
            "version": "dev-master",
            "version_normalized": "dev-master",
            "source": {
                "type": "git",
                "url": "https://github.com/sabberworm/PHP-CSS-Parser.git",
                "reference": "cc791ad"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/cc791ad",
                "reference": "cc791ad",
                "shasum": ""
            },
            "require": {
                "ext-iconv": "*",
                "php": ">=5.6.20"
            },
            "require-dev": {
                "codacy/coverage": "^1.4.3",
                "phpunit/phpunit": "^5.7.27"
            },
            "suggest": {
                "ext-mbstring": "for parsing UTF-8 CSS"
            },
            "time": "2023-01-25T01:20:01+00:00",
            "default-branch": true,
            "type": "library",
            "extra": {
                "patches_applied": {
                    "1. Validate name-start code points for identifier <https://github.com/westonruter/PHP-CSS-Parser/pull/2>": "https://github.com/sabberworm/PHP-CSS-Parser/compare/cc791ad...westonruter:PHP-CSS-Parser:fix/malformed-identifier-without-tests.diff",
                    "2. Fix parsing CSS selectors which contain commas <https://github.com/westonruter/PHP-CSS-Parser/pull/1>": "https://github.com/sabberworm/PHP-CSS-Parser/compare/cc791ad...westonruter:PHP-CSS-Parser:fix/selector-comma-parsing-without-tests.diff",
                    "3. Parse simple expressions <https://github.com/sabberworm/PHP-CSS-Parser/pull/389>": "https://github.com/sabberworm/PHP-CSS-Parser/compare/cc791ad...westonruter:PHP-CSS-Parser:fix/expression-parsing-without-tests.diff"
                }
            },
            "installation-source": "dist",
            "autoload": {
                "psr-4": {
                    "Sabberworm\\CSS\\": "src/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Raphael Schweikert"
                }
            ],
            "description": "Parser for CSS Files written in PHP",
            "homepage": "https://www.sabberworm.com/blog/2010/6/10/php-css-parser",
            "keywords": [
                "css",
                "parser",
                "stylesheet"
            ],
            "support": {
                "issues": "https://github.com/sabberworm/PHP-CSS-Parser/issues",
                "source": "https://github.com/sabberworm/PHP-CSS-Parser/tree/master"
            },
            "install-path": "../sabberworm/php-css-parser"
        },
        {
            "name": "willwashburn/stream",
            "version": "v1.0.0",
            "version_normalized": "1.0.0.0",
            "source": {
                "type": "git",
                "url": "https://github.com/willwashburn/stream.git",
                "reference": "345b3062493e3899d987dbdd1fec1c13ee28c903"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/willwashburn/stream/zipball/345b3062493e3899d987dbdd1fec1c13ee28c903",
                "reference": "345b3062493e3899d987dbdd1fec1c13ee28c903",
                "shasum": ""
            },
            "require": {
                "php": ">=5.4.0"
            },
            "require-dev": {
                "mockery/mockery": "~0.9",
                "phpunit/phpunit": "~4.0"
            },
            "time": "2016-03-15T10:54:35+00:00",
            "type": "library",
            "installation-source": "dist",
            "autoload": {
                "psr-4": {
                    "WillWashburn\\": "src/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Will Washburn",
                    "email": "[email protected]"
                }
            ],
            "description": "model a sequence of data elements made available over time ",
            "homepage": "https://github.com/willwashburn/stream",
            "keywords": [
                "peek",
                "read",
                "stream",
                "streamable"
            ],
            "support": {
                "issues": "https://github.com/willwashburn/stream/issues",
                "source": "https://github.com/willwashburn/stream/tree/master"
            },
            "install-path": "../willwashburn/stream"
        }
    ],
    "dev": false,
    "dev-package-names": []
}
PK.3Y��*		(bunyad-amp/vendor/composer/installed.php<?php return array(
    'root' => array(
        'name' => 'ampproject/amp-wp',
        'pretty_version' => 'dev-develop',
        'version' => 'dev-develop',
        'reference' => '716c4188a9ee39e76222c2e20e16a748d93e4775',
        'type' => 'wordpress-plugin',
        'install_path' => __DIR__ . '/../../',
        'aliases' => array(),
        'dev' => false,
    ),
    'versions' => array(
        'ampproject/amp-toolbox' => array(
            'pretty_version' => '0.11.4',
            'version' => '0.11.4.0',
            'reference' => 'c79a0fe558a3c042aee4789bbf33376cca7a733d',
            'type' => 'library',
            'install_path' => __DIR__ . '/../ampproject/amp-toolbox',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'ampproject/amp-wp' => array(
            'pretty_version' => 'dev-develop',
            'version' => 'dev-develop',
            'reference' => '716c4188a9ee39e76222c2e20e16a748d93e4775',
            'type' => 'wordpress-plugin',
            'install_path' => __DIR__ . '/../../',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'fasterimage/fasterimage' => array(
            'pretty_version' => 'v1.5.0',
            'version' => '1.5.0.0',
            'reference' => '42d125a15dc124520aff2157bbed9a4b2d4f310a',
            'type' => 'library',
            'install_path' => __DIR__ . '/../fasterimage/fasterimage',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'sabberworm/php-css-parser' => array(
            'pretty_version' => 'dev-master',
            'version' => 'dev-master',
            'reference' => 'cc791ad',
            'type' => 'library',
            'install_path' => __DIR__ . '/../sabberworm/php-css-parser',
            'aliases' => array(
                0 => '9999999-dev',
            ),
            'dev_requirement' => false,
        ),
        'willwashburn/stream' => array(
            'pretty_version' => 'v1.0.0',
            'version' => '1.0.0.0',
            'reference' => '345b3062493e3899d987dbdd1fec1c13ee28c903',
            'type' => 'library',
            'install_path' => __DIR__ . '/../willwashburn/stream',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
    ),
);
PK.3Y 2��??0bunyad-amp/vendor/composer/InstalledVersions.php<?php

/*
 * This file is part of Composer.
 *
 * (c) Nils Adermann <[email protected]>
 *     Jordi Boggiano <[email protected]>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Composer;

use Composer\Autoload\ClassLoader;
use Composer\Semver\VersionParser;

/**
 * This class is copied in every Composer installed project and available to all
 *
 * See also https://getcomposer.org/doc/07-runtime.md#installed-versions
 *
 * To require its presence, you can require `composer-runtime-api ^2.0`
 *
 * @final
 */
class InstalledVersions
{
    /**
     * @var mixed[]|null
     * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
     */
    private static $installed;

    /**
     * @var bool|null
     */
    private static $canGetVendors;

    /**
     * @var array[]
     * @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
     */
    private static $installedByVendor = array();

    /**
     * Returns a list of all package names which are present, either by being installed, replaced or provided
     *
     * @return string[]
     * @psalm-return list<string>
     */
    public static function getInstalledPackages()
    {
        $packages = array();
        foreach (self::getInstalled() as $installed) {
            $packages[] = array_keys($installed['versions']);
        }

        if (1 === \count($packages)) {
            return $packages[0];
        }

        return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
    }

    /**
     * Returns a list of all package names with a specific type e.g. 'library'
     *
     * @param  string   $type
     * @return string[]
     * @psalm-return list<string>
     */
    public static function getInstalledPackagesByType($type)
    {
        $packagesByType = array();

        foreach (self::getInstalled() as $installed) {
            foreach ($installed['versions'] as $name => $package) {
                if (isset($package['type']) && $package['type'] === $type) {
                    $packagesByType[] = $name;
                }
            }
        }

        return $packagesByType;
    }

    /**
     * Checks whether the given package is installed
     *
     * This also returns true if the package name is provided or replaced by another package
     *
     * @param  string $packageName
     * @param  bool   $includeDevRequirements
     * @return bool
     */
    public static function isInstalled($packageName, $includeDevRequirements = true)
    {
        foreach (self::getInstalled() as $installed) {
            if (isset($installed['versions'][$packageName])) {
                return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false;
            }
        }

        return false;
    }

    /**
     * Checks whether the given package satisfies a version constraint
     *
     * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
     *
     *   Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
     *
     * @param  VersionParser $parser      Install composer/semver to have access to this class and functionality
     * @param  string        $packageName
     * @param  string|null   $constraint  A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
     * @return bool
     */
    public static function satisfies(VersionParser $parser, $packageName, $constraint)
    {
        $constraint = $parser->parseConstraints((string) $constraint);
        $provided = $parser->parseConstraints(self::getVersionRanges($packageName));

        return $provided->matches($constraint);
    }

    /**
     * Returns a version constraint representing all the range(s) which are installed for a given package
     *
     * It is easier to use this via isInstalled() with the $constraint argument if you need to check
     * whether a given version of a package is installed, and not just whether it exists
     *
     * @param  string $packageName
     * @return string Version constraint usable with composer/semver
     */
    public static function getVersionRanges($packageName)
    {
        foreach (self::getInstalled() as $installed) {
            if (!isset($installed['versions'][$packageName])) {
                continue;
            }

            $ranges = array();
            if (isset($installed['versions'][$packageName]['pretty_version'])) {
                $ranges[] = $installed['versions'][$packageName]['pretty_version'];
            }
            if (array_key_exists('aliases', $installed['versions'][$packageName])) {
                $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
            }
            if (array_key_exists('replaced', $installed['versions'][$packageName])) {
                $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
            }
            if (array_key_exists('provided', $installed['versions'][$packageName])) {
                $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
            }

            return implode(' || ', $ranges);
        }

        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
    }

    /**
     * @param  string      $packageName
     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
     */
    public static function getVersion($packageName)
    {
        foreach (self::getInstalled() as $installed) {
            if (!isset($installed['versions'][$packageName])) {
                continue;
            }

            if (!isset($installed['versions'][$packageName]['version'])) {
                return null;
            }

            return $installed['versions'][$packageName]['version'];
        }

        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
    }

    /**
     * @param  string      $packageName
     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
     */
    public static function getPrettyVersion($packageName)
    {
        foreach (self::getInstalled() as $installed) {
            if (!isset($installed['versions'][$packageName])) {
                continue;
            }

            if (!isset($installed['versions'][$packageName]['pretty_version'])) {
                return null;
            }

            return $installed['versions'][$packageName]['pretty_version'];
        }

        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
    }

    /**
     * @param  string      $packageName
     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
     */
    public static function getReference($packageName)
    {
        foreach (self::getInstalled() as $installed) {
            if (!isset($installed['versions'][$packageName])) {
                continue;
            }

            if (!isset($installed['versions'][$packageName]['reference'])) {
                return null;
            }

            return $installed['versions'][$packageName]['reference'];
        }

        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
    }

    /**
     * @param  string      $packageName
     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
     */
    public static function getInstallPath($packageName)
    {
        foreach (self::getInstalled() as $installed) {
            if (!isset($installed['versions'][$packageName])) {
                continue;
            }

            return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
        }

        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
    }

    /**
     * @return array
     * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}
     */
    public static function getRootPackage()
    {
        $installed = self::getInstalled();

        return $installed[0]['root'];
    }

    /**
     * Returns the raw installed.php data for custom implementations
     *
     * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
     * @return array[]
     * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}
     */
    public static function getRawData()
    {
        @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);

        if (null === self::$installed) {
            // only require the installed.php file if this file is loaded from its dumped location,
            // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
            if (substr(__DIR__, -8, 1) !== 'C') {
                self::$installed = include __DIR__ . '/installed.php';
            } else {
                self::$installed = array();
            }
        }

        return self::$installed;
    }

    /**
     * Returns the raw data of all installed.php which are currently loaded for custom implementations
     *
     * @return array[]
     * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
     */
    public static function getAllRawData()
    {
        return self::getInstalled();
    }

    /**
     * Lets you reload the static array from another file
     *
     * This is only useful for complex integrations in which a project needs to use
     * this class but then also needs to execute another project's autoloader in process,
     * and wants to ensure both projects have access to their version of installed.php.
     *
     * A typical case would be PHPUnit, where it would need to make sure it reads all
     * the data it needs from this class, then call reload() with
     * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
     * the project in which it runs can then also use this class safely, without
     * interference between PHPUnit's dependencies and the project's dependencies.
     *
     * @param  array[] $data A vendor/composer/installed.php data set
     * @return void
     *
     * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data
     */
    public static function reload($data)
    {
        self::$installed = $data;
        self::$installedByVendor = array();
    }

    /**
     * @return array[]
     * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
     */
    private static function getInstalled()
    {
        if (null === self::$canGetVendors) {
            self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
        }

        $installed = array();

        if (self::$canGetVendors) {
            foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
                if (isset(self::$installedByVendor[$vendorDir])) {
                    $installed[] = self::$installedByVendor[$vendorDir];
                } elseif (is_file($vendorDir.'/composer/installed.php')) {
                    /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
                    $required = require $vendorDir.'/composer/installed.php';
                    $installed[] = self::$installedByVendor[$vendorDir] = $required;
                    if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
                        self::$installed = $installed[count($installed) - 1];
                    }
                }
            }
        }

        if (null === self::$installed) {
            // only require the installed.php file if this file is loaded from its dumped location,
            // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
            if (substr(__DIR__, -8, 1) !== 'C') {
                /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
                $required = require __DIR__ . '/installed.php';
                self::$installed = $required;
            } else {
                self::$installed = array();
            }
        }

        if (self::$installed !== array()) {
            $installed[] = self::$installed;
        }

        return $installed;
    }
}
PK.3Y �.."bunyad-amp/vendor/composer/LICENSE
Copyright (c) Nils Adermann, Jordi Boggiano

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.

PK.3Y>��L��-bunyad-amp/vendor/composer/platform_check.php<?php

// platform_check.php @generated by Composer

$issues = array();

if (!(PHP_VERSION_ID >= 70400)) {
    $issues[] = 'Your Composer dependencies require a PHP version ">= 7.4.0". You are running ' . PHP_VERSION . '.';
}

if ($issues) {
    if (!headers_sent()) {
        header('HTTP/1.1 500 Internal Server Error');
    }
    if (!ini_get('display_errors')) {
        if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
            fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
        } elseif (!headers_sent()) {
            echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
        }
    }
    trigger_error(
        'Composer detected issues in your platform: ' . implode(' ', $issues),
        E_USER_ERROR
    );
}
PK.3Y��q�
�
Hbunyad-amp/vendor/fasterimage/fasterimage/src/FasterImage/ExifParser.php<?php namespace FasterImage;

use FasterImage\Exception\InvalidImageException;
use WillWashburn\Stream\StreamableInterface;

/**
 * Class ExifParser
 *
 * @package FasterImage
 */
class ExifParser
{
    /**
     * @var int
     */
    protected $width;
    /**
     * @var  int
     */
    protected $height;

    /**
     * @var
     */
    protected $short;

    /**
     * @var
     */
    protected $long;

    /**
     * @var  StreamableInterface
     */
    protected $stream;

    /**
     * @var int
     */
    protected $orientation;

    /**
     * ExifParser constructor.
     *
     * @param StreamableInterface $stream
     */
    public function __construct(StreamableInterface $stream)
    {
        $this->stream = $stream;
        $this->parseExifIfd();
    }

    /**
     * @return int
     */
    public function getHeight()
    {
        return $this->height;
    }

    /**
     * @return int
     */
    public function getWidth()
    {
        return $this->width;
    }

    /**
     * @return bool
     */
    public function isRotated()
    {
        return (! empty($this->orientation) && $this->orientation >= 5 && $this->orientation <= 8);
    }

    /**
     * @return bool
     * @throws \FasterImage\Exception\InvalidImageException
     */
    protected function parseExifIfd()
    {
        $byte_order = $this->stream->read(2);

        switch ( $byte_order ) {
            case 'II':
                $this->short = 'v';
                $this->long  = 'V';
                break;
            case 'MM':
                $this->short = 'n';
                $this->long  = 'N';
                break;
            default:
                throw new InvalidImageException;
                break;
        }

        $this->stream->read(2);

        $offset = current(unpack($this->long, $this->stream->read(4)));

        $this->stream->read($offset - 8);

        $tag_count = current(unpack($this->short, $this->stream->read(2)));

        for ( $i = $tag_count; $i > 0; $i-- ) {

            $type = current(unpack($this->short, $this->stream->read(2)));
            $this->stream->read(6);
            $data = current(unpack($this->short, $this->stream->read(2)));

            switch ( $type ) {
                case 0x0100:
                    $this->width = $data;
                    break;
                case 0x0101:
                    $this->height = $data;
                    break;
                case 0x0112:
                    $this->orientation = $data;
                    break;
            }

            if ( isset($this->width) && isset($this->height) && isset($this->orientation) ) {
                return true;
            }

            $this->stream->read(2);
        }

        return false;
    }
}
PK.3Y^��+'+'Ibunyad-amp/vendor/fasterimage/fasterimage/src/FasterImage/FasterImage.php<?php namespace FasterImage;

use FasterImage\Exception\InvalidImageException;
use WillWashburn\Stream\Exception\StreamBufferTooSmallException;
use WillWashburn\Stream\Stream;

/**
 * FasterImage - Because sometimes you just want the size, and you want them in
 * parallel!
 *
 * Based on the PHP stream implementation by Tom Moor (http://tommoor.com)
 * which was based on the original Ruby Implementation by Steven Sykes
 * (https://github.com/sdsykes/fastimage)
 *
 * MIT Licensed
 */
class FasterImage
{
    /**
     * The default timeout.
     *
     * @var int
     */
    protected $timeout = 10;

    /**
     * The default buffer size.
     *
     * @var int
     */
    protected $bufferSize = 256;

    /**
     * The default for whether to verify SSL peer.
     *
     * @var bool
     */
    protected $sslVerifyPeer = false;

    /**
     * The default for whether to verify SSL host.
     *
     * @var bool
     */
    protected $sslVerifyHost = false;

    /**
     * If the content length should be included in the result set.
     *
     * @var bool
     */
    protected $includeContentLength = false;

    /**
     * The default user agent to set for requests.
     *
     * @var string
     */
    protected $userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36';

    /**
     * Get the size of each of the urls in a list
     *
     * @param string[] $urls URLs to fetch.
     *
     * @return array Results.
     * @throws \Exception When the cURL write callback fails to amend the $results.
     */
    public function batch(array $urls)
    {
        // @codeCoverageIgnoreStart
        /**
         * It turns out that even when cURL is installed, the `curl_multi_init()
         * function may be disabled on some hosts who are seeking to guard against
         * DDoS attacks.
         *
         * @see https://github.com/ampproject/amp-wp/pull/2183#issuecomment-491506514
         *
         * If it is disabled, we will batch these synchronously (with a significant
         * performance hit).
         */
        $has_curl_multi = (
            function_exists( 'curl_multi_init' )
            &&
            function_exists( 'curl_multi_exec' )
            &&
            function_exists( 'curl_multi_add_handle' )
            &&
            function_exists( 'curl_multi_select' )
            &&
            defined( 'CURLM_OK' )
            &&
            defined( 'CURLM_CALL_MULTI_PERFORM' )
        );
        if ( ! $has_curl_multi ) {
            return $this->batchSynchronously($urls);
        }
        // @codeCoverageIgnoreEnd

        $multi   = curl_multi_init();
        $results = array();

        // Create the curl handles and add them to the multi_request
        foreach ( array_values($urls) as $count => $uri ) {

            $results[$uri] = [];

            $$count = $this->handle($uri, $results[$uri]);

            $code = curl_multi_add_handle($multi, $$count);

            if ( $code != CURLM_OK ) {
                throw new \Exception("Curl handle for $uri could not be added");
            }
        }

        // Perform the requests
        do {
            while ( ($mrc = curl_multi_exec($multi, $active)) == CURLM_CALL_MULTI_PERFORM ) ;
            if ( $mrc != CURLM_OK && $mrc != CURLM_CALL_MULTI_PERFORM ) {
                throw new \Exception("Curl error code: $mrc");
            }

            if ( $active && curl_multi_select($multi) === -1 ) {
                // Perform a usleep if a select returns -1.
                // See: https://bugs.php.net/bug.php?id=61141
                usleep(250);
            }
        } while ( $active );

        // Figure out why individual requests may have failed
        foreach ( array_values($urls) as $count => $uri ) {
            $error = curl_error($$count);

            if ( $error ) {
                $results[$uri]['failure_reason'] = $error;
            }
        }

        return $results;
    }

    /**
     * Get the size of each of the urls in a list, using synchronous method
     *
     * @param string[] $urls URLs to fetch.
     *
     * @return array Results.
     * @throws \Exception When the cURL write callback fails to amend the $results.
     * @codeCoverageIgnore
     */
    protected function batchSynchronously(array $urls) {
        $results = [];
        foreach ( array_values($urls) as $count => $uri ) {
            $results[$uri] = [];

            $ch = $this->handle($uri, $results[$uri]);

            curl_exec($ch);

            // We can't check return value because the buffer size is too small and curl_error() will always be "Failed writing body".
            if ( empty($results[$uri]) ) {
                throw new \Exception("Curl handle for $uri could not be executed");
            }

            curl_close($ch);
        }
        return $results;
    }

    /**
     * @param int $seconds
     */
    public function setTimeout($seconds)
    {
        $this->timeout = (int) $seconds;
    }

    /**
     * @param int $bufferSize
     */
    public function setBufferSize($bufferSize)
    {
        $this->bufferSize = (int) $bufferSize;
    }

    /**
     * @param bool $sslVerifyPeer
     */
    public function setSslVerifyPeer($sslVerifyPeer)
    {
        $this->sslVerifyPeer = (bool) $sslVerifyPeer;
    }

    /**
     * @param bool $sslVerifyHost
     */
    public function setSslVerifyHost($sslVerifyHost)
    {
        $this->sslVerifyHost = (bool) $sslVerifyHost;
    }

    /**
     * @param bool $bool
     */
    public function setIncludeContentLength($bool)
    {
        $this->includeContentLength = (bool) $bool;
    }

    /**
     * @param string $userAgent
     */
    public function setUserAgent($userAgent)
    {
        $this->userAgent = $userAgent;
    }

    /**
     * Create the handle for the curl request
     *
     * @param $url
     * @param $result
     *
     * @return resource
     */
    protected function handle($url, & $result)
    {
        $stream           = new Stream();
        $parser           = new ImageParser($stream);
        $result['rounds'] = 0;
        $result['bytes']  = 0;
        $result['size']   = 'failed';

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_BUFFERSIZE, $this->bufferSize);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $this->sslVerifyPeer ? 1 : 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, $this->sslVerifyHost ? 2 : 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->timeout);
        curl_setopt($ch, CURLOPT_TIMEOUT, $this->timeout);

        #  Some web servers require the useragent to be not a bot. So we are liars.
        curl_setopt($ch, CURLOPT_USERAGENT, $this->userAgent);
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            "Accept: image/webp,image/*,*/*;q=0.8",
            "Cache-Control: max-age=0",
            "Connection: keep-alive",
            "Keep-Alive: 300",
            "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7",
            "Accept-Language: en-us,en;q=0.5",
            "Pragma: ", // browsers keep this blank.
        ]);
        curl_setopt($ch, CURLOPT_ENCODING, "");


        /*
         * We parse the headers to find the content-length. This is added to the
         * result array and can be useful to determine the overall image filesize.
         */
        if ($this->includeContentLength) {

            curl_setopt($ch, CURLOPT_HEADERFUNCTION, function ($curl, $header) use (&$result) {

                $len    = strlen($header);
                $header = explode(':', $header, 2);

                if ( strtolower($header[0]) === 'content-length' ) {
                    $result['content-length'] = trim($header[1]);
                }

                return $len;
            });
        }

        curl_setopt($ch, CURLOPT_WRITEFUNCTION, function ($ch, $str) use (& $result, & $parser, & $stream, $url) {

            $result['rounds']++;
            $result['bytes'] += strlen($str);

            $stream->write($str);

            try {
                // store the type in the result array by looking at the bits
                $result['type'] = $parser->parseType();

                /*
                 * We try here to parse the buffer of characters we already have
                 * for the size.
                 */
                $result['size'] = $parser->parseSize() ?: 'failed';
            }
            catch (StreamBufferTooSmallException $e) {
                /*
                 * If this exception is thrown, we don't have enough of the stream buffered
                 * so in order to tell curl to keep streaming we need to return the number
                 * of bytes we have already handled
                 *
                 * We set the 'size' to 'failed' in the case that we've done
                 * the entire image and we couldn't figure it out. Otherwise
                 * it'll get overwritten with the next round.
                 */
                $result['size'] = 'failed';

                return strlen($str);
            }
            catch (InvalidImageException $e) {

                /*
                 * This means we've determined that we're lost and don't know
                 * how to parse this image.
                 *
                 * We set the size to invalid and move on
                 */
                $result['size'] = 'invalid';

                return -1;
            }


            /*
             * We return -1 to abort the transfer when we have enough buffered
             * to find the size
             */
            //
            // hey curl! this is an error. But really we just are stopping cause
            // we already have what we want
            return -1;
        });

        return $ch;
    }
}
PK.3Y�+�1/1/Ibunyad-amp/vendor/fasterimage/fasterimage/src/FasterImage/ImageParser.php<?php namespace FasterImage;

use WillWashburn\Stream\Exception\StreamBufferTooSmallException;
use WillWashburn\Stream\Stream;
use WillWashburn\Stream\StreamableInterface;

/**
 * Parses the stream of the image and determines the size and type of the image
 *
 * @package FasterImage
 */
class ImageParser
{
    /**
     * The type of image we've determined this is
     *
     * @var string
     */
    protected $type;
    /**
     * @var StreamableInterface $stream
     */
    private $stream;

    /**
     * ImageParser constructor.
     *
     * @param StreamableInterface $stream
     */
    public function __construct(StreamableInterface & $stream)
    {
        $this->stream = $stream;
    }

    /**
     * @return array|bool|null
     */
    public function parseSize()
    {
        $this->stream->resetPointer();

        switch ( $this->type ) {
            case 'png':
                return $this->parseSizeForPNG();
            case 'ico':
            case 'cur':
                return $this->parseSizeForIco();
            case 'gif':
                return $this->parseSizeForGIF();
            case 'bmp':
                return $this->parseSizeForBMP();
            case 'jpeg':
                return $this->parseSizeForJPEG();
            case 'tiff':
                return $this->parseSizeForTiff();
            case 'psd':
                return $this->parseSizeForPSD();
            case 'webp':
                return $this->parseSizeForWebp();
            case 'svg':
                return $this->parseSizeForSvg();
        }

        return null;
    }

    /**
     * @return array
     */
    public function parseSizeForIco()
    {
        $this->stream->read(6);

        $b1 = $this->getByte();
        $b2 = $this->getByte();

        return [
            $b1 == 0 ? 256 : $b1,
            $b2 == 0 ? 256 : $b2
        ];
    }

    /**
     * @return array
     */
    protected function parseSizeForPSD() {

        $this->stream->read(14);
        $sizes = unpack("N*",$this->stream->read(12));

        return [
            $sizes[2],
            $sizes[1]
        ];
    }

    /**
     * Reads and returns the type of the image
     *
     * @return bool|string
     */
    public function parseType()
    {
        if ( ! $this->type ) {
            $this->stream->resetPointer();

            switch ( $this->stream->read(2) ) {
                case "BM":
                    return $this->type = 'bmp';
                case "GI":
                    return $this->type = 'gif';
                case chr(0xFF) . chr(0xd8):
                    return $this->type = 'jpeg';
                case "\0\0":
                    switch ( $this->readByte($this->stream->peek(1)) ) {
                        case 1:
                            return $this->type = 'ico';
                        case 2:
                            return $this->type = 'cur';
                    }

                    return false;

                case chr(0x89) . 'P':
                    return $this->type = 'png';
                case "RI":
                    if ( substr($this->stream->read(10), 6, 4) == 'WEBP' ) {
                        return $this->type = 'webp';
                    }

                    return false;
                case'8B':
                    return $this->type = 'psd';
                case "II":
                case "MM":
                    return $this->type = 'tiff';
                default:
                    $this->stream->resetPointer();

                    // Keep reading bytes until we find '<svg'.
                    while ( true ) {
                        $byte = $this->stream->read( 1 );
                        if ( '<' === $byte && 'svg' === $this->stream->peek( 3 ) ) {
                            $this->type = 'svg';
                            return $this->type;
                        }
                    }
                    return false;
            }
        }

        return $this->type;
    }

    /**
     * @return array
     */
    protected function parseSizeForBMP()
    {
        $chars = $this->stream->read(29);
        $chars = substr($chars, 14, 14);
        $type  = unpack('C', $chars);

        $size = (reset($type) == 40) ? unpack('l*', substr($chars, 4)) : unpack('l*', substr($chars, 4, 8));

        return [
            current($size),
            abs(next($size))
        ];
    }

    /**
     * @return array
     */
    protected function parseSizeForGIF()
    {
        $chars = $this->stream->read(11);

        $size = unpack("S*", substr($chars, 6, 4));

        return [
            current($size),
            next($size)
        ];
    }

    /**
     * @return array|bool
     */
    protected function parseSizeForJPEG()
    {
        $state = null;

        while ( true ) {
            switch ( $state ) {
                default:
                    $this->stream->read(2);
                    $state = 'started';
                    break;

                case 'started':
                    $b = $this->getByte();
                    if ( $b === false ) return false;

                    $state = $b == 0xFF ? 'sof' : 'started';
                    break;

                case 'sof':
                    $b = $this->getByte();

                    if ( $b === 0xe1 ) {
                        $data = $this->stream->read($this->readInt($this->stream->read(2)) - 2);

                        $stream = new Stream;
                        $stream->write($data);

                        if ( $stream->read(4) === 'Exif' ) {

                            $stream->read(2);

                            // Some Exif data is broken/wrong so we'll ignore
                            // any exceptions here
                            try {
                                $exif = new ExifParser($stream);
                            } catch (\Exception $e) {}

                        }

                        break;
                    }

                    if ( in_array($b, range(0xe0, 0xef)) ) {
                        $state = 'skipframe';
                        break;
                    }

                    if ( in_array($b, array_merge(range(0xC0, 0xC3), range(0xC5, 0xC7), range(0xC9, 0xCB), range(0xCD, 0xCF))) ) {
                        $state = 'readsize';
                        break;
                    }
                    if ( $b == 0xFF ) {
                        $state = 'sof';
                        break;
                    }

                    $state = 'skipframe';
                    break;

                case 'skipframe':
                    $skip = $this->readInt($this->stream->read(2)) - 2;
                    $this->stream->read($skip);
                    $state = 'started';
                    break;

                case 'readsize':
                    $c = $this->stream->read(7);

                    $size = array($this->readInt(substr($c, 5, 2)), $this->readInt(substr($c, 3, 2)));

                    if ( isset($exif) && $exif->isRotated() ) {
                        return array_reverse($size);
                    }

                    return $size;
            }
        }

        return false;
    }

    /**
     * @return array
     */
    protected function parseSizeForPNG()
    {
        $chars = $this->stream->read(25);

        $size = unpack("N*", substr($chars, 16, 8));

        return [
            current($size),
            next($size)
        ];

    }

    /**
     * @return array|bool
     * @throws \FasterImage\Exception\InvalidImageException
     * @throws StreamBufferTooSmallException
     */
    protected function parseSizeForTiff()
    {
        $exif = new ExifParser($this->stream);

        if ( $exif->isRotated() ) {
            return [$exif->getHeight(), $exif->getWidth()];
        }

        return [$exif->getWidth(), $exif->getHeight()];
    }

    /**
     * @return null
     * @throws StreamBufferTooSmallException
     */
    protected function parseSizeForWebp()
    {
        $vp8 = substr($this->stream->read(16), 12, 4);
        $len = unpack("V", $this->stream->read(4));

        switch ( trim($vp8) ) {

            case 'VP8':
                $this->stream->read(6);

                $width  = current(unpack("v", $this->stream->read(2)));
                $height = current(unpack("v", $this->stream->read(2)));

                return [
                    $width & 0x3fff,
                    $height & 0x3fff
                ];

            case 'VP8L':
                $this->stream->read(1);

                $b1 = $this->getByte();
                $b2 = $this->getByte();
                $b3 = $this->getByte();
                $b4 = $this->getByte();

                $width  = 1 + ((($b2 & 0x3f) << 8) | $b1);
                $height = 1 + ((($b4 & 0xf) << 10) | ($b3 << 2) | (($b2 & 0xc0) >> 6));

                return [$width, $height];

            case 'VP8X':

                $flags = current(unpack("C", $this->stream->read(4)));

                $b1 = $this->getByte();
                $b2 = $this->getByte();
                $b3 = $this->getByte();
                $b4 = $this->getByte();
                $b5 = $this->getByte();
                $b6 = $this->getByte();

                $width = 1 + $b1 + ($b2 << 8) + ($b3 << 16);

                $height = 1 + $b4 + ($b5 << 8) + ($b6 << 16);

                return [$width, $height];
            default:
                return null;
        }

    }

    /**
     * Parse size for SVG.
     *
     * @return array|null Size or null.
     */
    protected function parseSizeForSvg()
    {
        $this->stream->resetPointer();

        // Keep reading bytes until we find the complete <svg> start tag.
        $inside = false;
        $markup = '';
        while ( true ) {
            $byte = $this->stream->read(1);

            // Open a tag if not in a tag and the byte is '<'.
            if ( ! $inside && '<' === $byte ) {
                $inside = true;
                $markup .= $byte;
            }
            // Close the current tag if the tag is open, the byte is '>', and the last characters weren't a comment token.
            elseif ( $inside && '>' === $byte && '--' !== substr( $markup, -2 ) ) {

                $inside = false;
                $markup .= $byte;

                // Break the loop if this tag started with '<svg', as we have now found the SVG start tag.
                if ( '<svg' === strtolower( substr( $markup, 0, 4 ) ) ) {
                    break;
                }

                // Clear out the markup since we consumed the end of the tag/comment.
                $markup = '';
            }
            // Append the bte to the current tag if the tag is open.
            elseif ( $inside ) {
                $markup .= $byte;
            }
        }

        $width = null;
        $height = null;
        if ( preg_match( '/\swidth=([\'"])(\d+(\.\d+)?)(px)?\1/', $markup, $matches ) ) {
            $width = floatval( $matches[2] );
        }
        if ( preg_match( '/\sheight=([\'"])(\d+(\.\d+)?)(px)?\1/', $markup, $matches ) ) {
            $height = floatval( $matches[2] );
        }
        if ( $width && $height ) {
            return [ $width, $height ];
        }
        if ( preg_match( '/\sviewBox=([\'"])[^\1]*(?:,|\s)+(?P<width>\d+(?:\.\d+)?)(?:px)?(?:,|\s)+(?P<height>\d+(?:\.\d+)?)(?:px)?\s*\1/', $markup, $matches ) ) {
            return [
                floatval( $matches['width'] ),
                floatval( $matches['height'] )
            ];
        }
        return null;
    }

    /**
     * @return mixed
     */
    private function getByte()
    {
        return $this->readByte($this->stream->read(1));
    }

    /**
     * @param $string
     *
     * @return mixed
     */
    private function readByte($string)
    {
        return current(unpack("C", $string));
    }

    /**
     * @param $str
     *
     * @return int
     */
    private function readInt($str)
    {
        $size = unpack("C*", $str);

        return ($size[1] << 8) + $size[2];
    }
}
PK.3Ya��A��]bunyad-amp/vendor/fasterimage/fasterimage/src/FasterImage/Exception/InvalidImageException.php<?php namespace FasterImage\Exception;

/**
 * Class InvalidImageException
 *
 * @package FasterImage\Exception
 */
class InvalidImageException extends \Exception {}PK.3Ymgx��@bunyad-amp/vendor/sabberworm/php-css-parser/src/OutputFormat.php<?php

namespace Sabberworm\CSS;

/**
 * Class OutputFormat
 *
 * @method OutputFormat setSemicolonAfterLastRule(bool $bSemicolonAfterLastRule) Set whether semicolons are added after
 *     last rule.
 */
class OutputFormat
{
    /**
     * Value format: `"` means double-quote, `'` means single-quote
     *
     * @var string
     */
    public $sStringQuotingType = '"';

    /**
     * Output RGB colors in hash notation if possible
     *
     * @var string
     */
    public $bRGBHashNotation = true;

    /**
     * Declaration format
     *
     * Semicolon after the last rule of a declaration block can be omitted. To do that, set this false.
     *
     * @var bool
     */
    public $bSemicolonAfterLastRule = true;

    /**
     * Spacing
     * Note that these strings are not sanity-checked: the value should only consist of whitespace
     * Any newline character will be indented according to the current level.
     * The triples (After, Before, Between) can be set using a wildcard (e.g. `$oFormat->set('Space*Rules', "\n");`)
     */
    public $sSpaceAfterRuleName = ' ';

    /**
     * @var string
     */
    public $sSpaceBeforeRules = '';

    /**
     * @var string
     */
    public $sSpaceAfterRules = '';

    /**
     * @var string
     */
    public $sSpaceBetweenRules = '';

    /**
     * @var string
     */
    public $sSpaceBeforeBlocks = '';

    /**
     * @var string
     */
    public $sSpaceAfterBlocks = '';

    /**
     * @var string
     */
    public $sSpaceBetweenBlocks = "\n";

    /**
     * Content injected in and around at-rule blocks.
     *
     * @var string
     */
    public $sBeforeAtRuleBlock = '';

    /**
     * @var string
     */
    public $sAfterAtRuleBlock = '';

    /**
     * This is what’s printed before and after the comma if a declaration block contains multiple selectors.
     *
     * @var string
     */
    public $sSpaceBeforeSelectorSeparator = '';

    /**
     * @var string
     */
    public $sSpaceAfterSelectorSeparator = ' ';

    /**
     * This is what’s printed after the comma of value lists
     *
     * @var string
     */
    public $sSpaceBeforeListArgumentSeparator = '';

    /**
     * @var string
     */
    public $sSpaceAfterListArgumentSeparator = '';

    /**
     * @var string
     */
    public $sSpaceBeforeOpeningBrace = ' ';

    /**
     * Content injected in and around declaration blocks.
     *
     * @var string
     */
    public $sBeforeDeclarationBlock = '';

    /**
     * @var string
     */
    public $sAfterDeclarationBlockSelectors = '';

    /**
     * @var string
     */
    public $sAfterDeclarationBlock = '';

    /**
     * Indentation character(s) per level. Only applicable if newlines are used in any of the spacing settings.
     *
     * @var string
     */
    public $sIndentation = "\t";

    /**
     * Output exceptions.
     *
     * @var bool
     */
    public $bIgnoreExceptions = false;

    /**
     * Render comments for lists and RuleSets
     *
     * @var bool
     */
    public $bRenderComments = false;

    /**
     * @var OutputFormatter|null
     */
    private $oFormatter = null;

    /**
     * @var OutputFormat|null
     */
    private $oNextLevelFormat = null;

    /**
     * @var int
     */
    private $iIndentationLevel = 0;

    public function __construct()
    {
    }

    /**
     * @param string $sName
     *
     * @return string|null
     */
    public function get($sName)
    {
        $aVarPrefixes = ['a', 's', 'm', 'b', 'f', 'o', 'c', 'i'];
        foreach ($aVarPrefixes as $sPrefix) {
            $sFieldName = $sPrefix . ucfirst($sName);
            if (isset($this->$sFieldName)) {
                return $this->$sFieldName;
            }
        }
        return null;
    }

    /**
     * @param array<array-key, string>|string $aNames
     * @param mixed $mValue
     *
     * @return self|false
     */
    public function set($aNames, $mValue)
    {
        $aVarPrefixes = ['a', 's', 'm', 'b', 'f', 'o', 'c', 'i'];
        if (is_string($aNames) && strpos($aNames, '*') !== false) {
            $aNames =
                [
                    str_replace('*', 'Before', $aNames),
                    str_replace('*', 'Between', $aNames),
                    str_replace('*', 'After', $aNames),
                ];
        } elseif (!is_array($aNames)) {
            $aNames = [$aNames];
        }
        foreach ($aVarPrefixes as $sPrefix) {
            $bDidReplace = false;
            foreach ($aNames as $sName) {
                $sFieldName = $sPrefix . ucfirst($sName);
                if (isset($this->$sFieldName)) {
                    $this->$sFieldName = $mValue;
                    $bDidReplace = true;
                }
            }
            if ($bDidReplace) {
                return $this;
            }
        }
        // Break the chain so the user knows this option is invalid
        return false;
    }

    /**
     * @param string $sMethodName
     * @param array<array-key, mixed> $aArguments
     *
     * @return mixed
     *
     * @throws \Exception
     */
    public function __call($sMethodName, array $aArguments)
    {
        if (strpos($sMethodName, 'set') === 0) {
            return $this->set(substr($sMethodName, 3), $aArguments[0]);
        } elseif (strpos($sMethodName, 'get') === 0) {
            return $this->get(substr($sMethodName, 3));
        } elseif (method_exists(OutputFormatter::class, $sMethodName)) {
            return call_user_func_array([$this->getFormatter(), $sMethodName], $aArguments);
        } else {
            throw new \Exception('Unknown OutputFormat method called: ' . $sMethodName);
        }
    }

    /**
     * @param int $iNumber
     *
     * @return self
     */
    public function indentWithTabs($iNumber = 1)
    {
        return $this->setIndentation(str_repeat("\t", $iNumber));
    }

    /**
     * @param int $iNumber
     *
     * @return self
     */
    public function indentWithSpaces($iNumber = 2)
    {
        return $this->setIndentation(str_repeat(" ", $iNumber));
    }

    /**
     * @return OutputFormat
     */
    public function nextLevel()
    {
        if ($this->oNextLevelFormat === null) {
            $this->oNextLevelFormat = clone $this;
            $this->oNextLevelFormat->iIndentationLevel++;
            $this->oNextLevelFormat->oFormatter = null;
        }
        return $this->oNextLevelFormat;
    }

    /**
     * @return void
     */
    public function beLenient()
    {
        $this->bIgnoreExceptions = true;
    }

    /**
     * @return OutputFormatter
     */
    public function getFormatter()
    {
        if ($this->oFormatter === null) {
            $this->oFormatter = new OutputFormatter($this);
        }
        return $this->oFormatter;
    }

    /**
     * @return int
     */
    public function level()
    {
        return $this->iIndentationLevel;
    }

    /**
     * Creates an instance of this class without any particular formatting settings.
     *
     * @return self
     */
    public static function create()
    {
        return new OutputFormat();
    }

    /**
     * Creates an instance of this class with a preset for compact formatting.
     *
     * @return self
     */
    public static function createCompact()
    {
        $format = self::create();
        $format->set('Space*Rules', "")
            ->set('Space*Blocks', "")
            ->setSpaceAfterRuleName('')
            ->setSpaceBeforeOpeningBrace('')
            ->setSpaceAfterSelectorSeparator('')
            ->setRenderComments(false);
        return $format;
    }

    /**
     * Creates an instance of this class with a preset for pretty formatting.
     *
     * @return self
     */
    public static function createPretty()
    {
        $format = self::create();
        $format->set('Space*Rules', "\n")
            ->set('Space*Blocks', "\n")
            ->setSpaceBetweenBlocks("\n\n")
            ->set('SpaceAfterListArgumentSeparator', ['default' => '', ',' => ' '])
            ->setRenderComments(true);
        return $format;
    }
}
PK.3Y2rrCbunyad-amp/vendor/sabberworm/php-css-parser/src/OutputFormatter.php<?php

namespace Sabberworm\CSS;

use Sabberworm\CSS\Comment\Commentable;
use Sabberworm\CSS\Parsing\OutputException;

class OutputFormatter
{
    /**
     * @var OutputFormat
     */
    private $oFormat;

    public function __construct(OutputFormat $oFormat)
    {
        $this->oFormat = $oFormat;
    }

    /**
     * @param string $sName
     * @param string|null $sType
     *
     * @return string
     */
    public function space($sName, $sType = null)
    {
        $sSpaceString = $this->oFormat->get("Space$sName");
        // If $sSpaceString is an array, we have multiple values configured
        // depending on the type of object the space applies to
        if (is_array($sSpaceString)) {
            if ($sType !== null && isset($sSpaceString[$sType])) {
                $sSpaceString = $sSpaceString[$sType];
            } else {
                $sSpaceString = reset($sSpaceString);
            }
        }
        return $this->prepareSpace($sSpaceString);
    }

    /**
     * @return string
     */
    public function spaceAfterRuleName()
    {
        return $this->space('AfterRuleName');
    }

    /**
     * @return string
     */
    public function spaceBeforeRules()
    {
        return $this->space('BeforeRules');
    }

    /**
     * @return string
     */
    public function spaceAfterRules()
    {
        return $this->space('AfterRules');
    }

    /**
     * @return string
     */
    public function spaceBetweenRules()
    {
        return $this->space('BetweenRules');
    }

    /**
     * @return string
     */
    public function spaceBeforeBlocks()
    {
        return $this->space('BeforeBlocks');
    }

    /**
     * @return string
     */
    public function spaceAfterBlocks()
    {
        return $this->space('AfterBlocks');
    }

    /**
     * @return string
     */
    public function spaceBetweenBlocks()
    {
        return $this->space('BetweenBlocks');
    }

    /**
     * @return string
     */
    public function spaceBeforeSelectorSeparator()
    {
        return $this->space('BeforeSelectorSeparator');
    }

    /**
     * @return string
     */
    public function spaceAfterSelectorSeparator()
    {
        return $this->space('AfterSelectorSeparator');
    }

    /**
     * @param string $sSeparator
     *
     * @return string
     */
    public function spaceBeforeListArgumentSeparator($sSeparator)
    {
        return $this->space('BeforeListArgumentSeparator', $sSeparator);
    }

    /**
     * @param string $sSeparator
     *
     * @return string
     */
    public function spaceAfterListArgumentSeparator($sSeparator)
    {
        return $this->space('AfterListArgumentSeparator', $sSeparator);
    }

    /**
     * @return string
     */
    public function spaceBeforeOpeningBrace()
    {
        return $this->space('BeforeOpeningBrace');
    }

    /**
     * Runs the given code, either swallowing or passing exceptions, depending on the `bIgnoreExceptions` setting.
     *
     * @param string $cCode the name of the function to call
     *
     * @return string|null
     */
    public function safely($cCode)
    {
        if ($this->oFormat->get('IgnoreExceptions')) {
            // If output exceptions are ignored, run the code with exception guards
            try {
                return $cCode();
            } catch (OutputException $e) {
                return null;
            } // Do nothing
        } else {
            // Run the code as-is
            return $cCode();
        }
    }

    /**
     * Clone of the `implode` function, but calls `render` with the current output format instead of `__toString()`.
     *
     * @param string $sSeparator
     * @param array<array-key, Renderable|string> $aValues
     * @param bool $bIncreaseLevel
     *
     * @return string
     */
    public function implode($sSeparator, array $aValues, $bIncreaseLevel = false)
    {
        $sResult = '';
        $oFormat = $this->oFormat;
        if ($bIncreaseLevel) {
            $oFormat = $oFormat->nextLevel();
        }
        $bIsFirst = true;
        foreach ($aValues as $mValue) {
            if ($bIsFirst) {
                $bIsFirst = false;
            } else {
                $sResult .= $sSeparator;
            }
            if ($mValue instanceof Renderable) {
                $sResult .= $mValue->render($oFormat);
            } else {
                $sResult .= $mValue;
            }
        }
        return $sResult;
    }

    /**
     * @param string $sString
     *
     * @return string
     */
    public function removeLastSemicolon($sString)
    {
        if ($this->oFormat->get('SemicolonAfterLastRule')) {
            return $sString;
        }
        $sString = explode(';', $sString);
        if (count($sString) < 2) {
            return $sString[0];
        }
        $sLast = array_pop($sString);
        $sNextToLast = array_pop($sString);
        array_push($sString, $sNextToLast . $sLast);
        return implode(';', $sString);
    }

    /**
     *
     * @param array<Commentable> $aComments
     * @return string
     */
    public function comments(Commentable $oCommentable)
    {
        if (!$this->oFormat->bRenderComments) {
            return '';
        }

        $sResult = '';
        $aComments = $oCommentable->getComments();
        $iLastCommentIndex = count($aComments) - 1;

        foreach ($aComments as $i => $oComment) {
            $sResult .= $oComment->render($this->oFormat);
            $sResult .= $i === $iLastCommentIndex ? $this->spaceAfterBlocks() : $this->spaceBetweenBlocks();
        }
        return $sResult;
    }

    /**
     * @param string $sSpaceString
     *
     * @return string
     */
    private function prepareSpace($sSpaceString)
    {
        return str_replace("\n", "\n" . $this->indent(), $sSpaceString);
    }

    /**
     * @return string
     */
    private function indent()
    {
        return str_repeat($this->oFormat->sIndentation, $this->oFormat->level());
    }
}
PK.3Y��U���:bunyad-amp/vendor/sabberworm/php-css-parser/src/Parser.php<?php

namespace Sabberworm\CSS;

use Sabberworm\CSS\CSSList\Document;
use Sabberworm\CSS\Parsing\ParserState;
use Sabberworm\CSS\Parsing\SourceException;

/**
 * This class parses CSS from text into a data structure.
 */
class Parser
{
    /**
     * @var ParserState
     */
    private $oParserState;

    /**
     * @param string $sText the complete CSS as text (i.e., usually the contents of a CSS file)
     * @param Settings|null $oParserSettings
     * @param int $iLineNo the line number (starting from 1, not from 0)
     */
    public function __construct($sText, Settings $oParserSettings = null, $iLineNo = 1)
    {
        if ($oParserSettings === null) {
            $oParserSettings = Settings::create();
        }
        $this->oParserState = new ParserState($sText, $oParserSettings, $iLineNo);
    }

    /**
     * Sets the charset to be used if the CSS does not contain an `@charset` declaration.
     *
     * @param string $sCharset
     *
     * @return void
     */
    public function setCharset($sCharset)
    {
        $this->oParserState->setCharset($sCharset);
    }

    /**
     * Returns the charset that is used if the CSS does not contain an `@charset` declaration.
     *
     * @return void
     */
    public function getCharset()
    {
        // Note: The `return` statement is missing here. This is a bug that needs to be fixed.
        $this->oParserState->getCharset();
    }

    /**
     * Parses the CSS provided to the constructor and creates a `Document` from it.
     *
     * @return Document
     *
     * @throws SourceException
     */
    public function parse()
    {
        return Document::parse($this->oParserState);
    }
}
PK.3YL�((>bunyad-amp/vendor/sabberworm/php-css-parser/src/Renderable.php<?php

namespace Sabberworm\CSS;

interface Renderable
{
    /**
     * @return string
     */
    public function __toString();

    /**
     * @return string
     */
    public function render(OutputFormat $oOutputFormat);

    /**
     * @return int
     */
    public function getLineNo();
}
PK.3Y.�k��	�	<bunyad-amp/vendor/sabberworm/php-css-parser/src/Settings.php<?php

namespace Sabberworm\CSS;

/**
 * Parser settings class.
 *
 * Configure parser behaviour here.
 */
class Settings
{
    /**
     * Multi-byte string support.
     *
     * If `true` (`mbstring` extension must be enabled), will use (slower) `mb_strlen`, `mb_convert_case`, `mb_substr`
     * and `mb_strpos` functions. Otherwise, the normal (ASCII-Only) functions will be used.
     *
     * @var bool
     */
    public $bMultibyteSupport;

    /**
     * The default charset for the CSS if no `@charset` declaration is found. Defaults to utf-8.
     *
     * @var string
     */
    public $sDefaultCharset = 'utf-8';

    /**
     * Whether the parser silently ignore invalid rules instead of choking on them.
     *
     * @var bool
     */
    public $bLenientParsing = true;

    private function __construct()
    {
        $this->bMultibyteSupport = extension_loaded('mbstring');
    }

    /**
     * @return self new instance
     */
    public static function create()
    {
        return new Settings();
    }

    /**
     * Enables/disables multi-byte string support.
     *
     * If `true` (`mbstring` extension must be enabled), will use (slower) `mb_strlen`, `mb_convert_case`, `mb_substr`
     * and `mb_strpos` functions. Otherwise, the normal (ASCII-Only) functions will be used.
     *
     * @param bool $bMultibyteSupport
     *
     * @return self fluent interface
     */
    public function withMultibyteSupport($bMultibyteSupport = true)
    {
        $this->bMultibyteSupport = $bMultibyteSupport;
        return $this;
    }

    /**
     * Sets the charset to be used if the CSS does not contain an `@charset` declaration.
     *
     * @param string $sDefaultCharset
     *
     * @return self fluent interface
     */
    public function withDefaultCharset($sDefaultCharset)
    {
        $this->sDefaultCharset = $sDefaultCharset;
        return $this;
    }

    /**
     * Configures whether the parser should silently ignore invalid rules.
     *
     * @param bool $bLenientParsing
     *
     * @return self fluent interface
     */
    public function withLenientParsing($bLenientParsing = true)
    {
        $this->bLenientParsing = $bLenientParsing;
        return $this;
    }

    /**
     * Configures the parser to choke on invalid rules.
     *
     * @return self fluent interface
     */
    public function beStrict()
    {
        return $this->withLenientParsing(false);
    }
}
PK.3YQK���Cbunyad-amp/vendor/sabberworm/php-css-parser/src/Comment/Comment.php<?php

namespace Sabberworm\CSS\Comment;

use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Renderable;

class Comment implements Renderable
{
    /**
     * @var int
     */
    protected $iLineNo;

    /**
     * @var string
     */
    protected $sComment;

    /**
     * @param string $sComment
     * @param int $iLineNo
     */
    public function __construct($sComment = '', $iLineNo = 0)
    {
        $this->sComment = $sComment;
        $this->iLineNo = $iLineNo;
    }

    /**
     * @return string
     */
    public function getComment()
    {
        return $this->sComment;
    }

    /**
     * @return int
     */
    public function getLineNo()
    {
        return $this->iLineNo;
    }

    /**
     * @param string $sComment
     *
     * @return void
     */
    public function setComment($sComment)
    {
        $this->sComment = $sComment;
    }

    /**
     * @return string
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @return string
     */
    public function render(OutputFormat $oOutputFormat)
    {
        return '/*' . $this->sComment . '*/';
    }
}
PK.3YC!G���Gbunyad-amp/vendor/sabberworm/php-css-parser/src/Comment/Commentable.php<?php

namespace Sabberworm\CSS\Comment;

interface Commentable
{
    /**
     * @param array<array-key, Comment> $aComments
     *
     * @return void
     */
    public function addComments(array $aComments);

    /**
     * @return array<array-key, Comment>
     */
    public function getComments();

    /**
     * @param array<array-key, Comment> $aComments
     *
     * @return void
     */
    public function setComments(array $aComments);
}
PK.3Y��*���Kbunyad-amp/vendor/sabberworm/php-css-parser/src/CSSList/AtRuleBlockList.php<?php

namespace Sabberworm\CSS\CSSList;

use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Property\AtRule;

/**
 * A `BlockList` constructed by an unknown at-rule. `@media` rules are rendered into `AtRuleBlockList` objects.
 */
class AtRuleBlockList extends CSSBlockList implements AtRule
{
    /**
     * @var string
     */
    private $sType;

    /**
     * @var string
     */
    private $sArgs;

    /**
     * @param string $sType
     * @param string $sArgs
     * @param int $iLineNo
     */
    public function __construct($sType, $sArgs = '', $iLineNo = 0)
    {
        parent::__construct($iLineNo);
        $this->sType = $sType;
        $this->sArgs = $sArgs;
    }

    /**
     * @return string
     */
    public function atRuleName()
    {
        return $this->sType;
    }

    /**
     * @return string
     */
    public function atRuleArgs()
    {
        return $this->sArgs;
    }

    /**
     * @return string
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @return string
     */
    public function render(OutputFormat $oOutputFormat)
    {
        $sResult = $oOutputFormat->comments($this);
        $sResult .= $oOutputFormat->sBeforeAtRuleBlock;
        $sArgs = $this->sArgs;
        if ($sArgs) {
            $sArgs = ' ' . $sArgs;
        }
        $sResult .= "@{$this->sType}$sArgs{$oOutputFormat->spaceBeforeOpeningBrace()}{";
        $sResult .= $this->renderListContents($oOutputFormat);
        $sResult .= '}';
        $sResult .= $oOutputFormat->sAfterAtRuleBlock;
        return $sResult;
    }

    /**
     * @return bool
     */
    public function isRootList()
    {
        return false;
    }
}
PK.3YeH�ettHbunyad-amp/vendor/sabberworm/php-css-parser/src/CSSList/CSSBlockList.php<?php

namespace Sabberworm\CSS\CSSList;

use Sabberworm\CSS\Property\Selector;
use Sabberworm\CSS\Rule\Rule;
use Sabberworm\CSS\RuleSet\DeclarationBlock;
use Sabberworm\CSS\RuleSet\RuleSet;
use Sabberworm\CSS\Value\CSSFunction;
use Sabberworm\CSS\Value\Value;
use Sabberworm\CSS\Value\ValueList;

/**
 * A `CSSBlockList` is a `CSSList` whose `DeclarationBlock`s are guaranteed to contain valid declaration blocks or
 * at-rules.
 *
 * Most `CSSList`s conform to this category but some at-rules (such as `@keyframes`) do not.
 */
abstract class CSSBlockList extends CSSList
{
    /**
     * @param int $iLineNo
     */
    public function __construct($iLineNo = 0)
    {
        parent::__construct($iLineNo);
    }

    /**
     * @param array<int, DeclarationBlock> $aResult
     *
     * @return void
     */
    protected function allDeclarationBlocks(array &$aResult)
    {
        foreach ($this->aContents as $mContent) {
            if ($mContent instanceof DeclarationBlock) {
                $aResult[] = $mContent;
            } elseif ($mContent instanceof CSSBlockList) {
                $mContent->allDeclarationBlocks($aResult);
            }
        }
    }

    /**
     * @param array<int, RuleSet> $aResult
     *
     * @return void
     */
    protected function allRuleSets(array &$aResult)
    {
        foreach ($this->aContents as $mContent) {
            if ($mContent instanceof RuleSet) {
                $aResult[] = $mContent;
            } elseif ($mContent instanceof CSSBlockList) {
                $mContent->allRuleSets($aResult);
            }
        }
    }

    /**
     * @param CSSList|Rule|RuleSet|Value $oElement
     * @param array<int, Value> $aResult
     * @param string|null $sSearchString
     * @param bool $bSearchInFunctionArguments
     *
     * @return void
     */
    protected function allValues($oElement, array &$aResult, $sSearchString = null, $bSearchInFunctionArguments = false)
    {
        if ($oElement instanceof CSSBlockList) {
            foreach ($oElement->getContents() as $oContent) {
                $this->allValues($oContent, $aResult, $sSearchString, $bSearchInFunctionArguments);
            }
        } elseif ($oElement instanceof RuleSet) {
            foreach ($oElement->getRules($sSearchString) as $oRule) {
                $this->allValues($oRule, $aResult, $sSearchString, $bSearchInFunctionArguments);
            }
        } elseif ($oElement instanceof Rule) {
            $this->allValues($oElement->getValue(), $aResult, $sSearchString, $bSearchInFunctionArguments);
        } elseif ($oElement instanceof ValueList) {
            if ($bSearchInFunctionArguments || !($oElement instanceof CSSFunction)) {
                foreach ($oElement->getListComponents() as $mComponent) {
                    $this->allValues($mComponent, $aResult, $sSearchString, $bSearchInFunctionArguments);
                }
            }
        } else {
            // Non-List `Value` or `CSSString` (CSS identifier)
            $aResult[] = $oElement;
        }
    }

    /**
     * @param array<int, Selector> $aResult
     * @param string|null $sSpecificitySearch
     *
     * @return void
     */
    protected function allSelectors(array &$aResult, $sSpecificitySearch = null)
    {
        /** @var array<int, DeclarationBlock> $aDeclarationBlocks */
        $aDeclarationBlocks = [];
        $this->allDeclarationBlocks($aDeclarationBlocks);
        foreach ($aDeclarationBlocks as $oBlock) {
            foreach ($oBlock->getSelectors() as $oSelector) {
                if ($sSpecificitySearch === null) {
                    $aResult[] = $oSelector;
                } else {
                    $sComparator = '===';
                    $aSpecificitySearch = explode(' ', $sSpecificitySearch);
                    $iTargetSpecificity = $aSpecificitySearch[0];
                    if (count($aSpecificitySearch) > 1) {
                        $sComparator = $aSpecificitySearch[0];
                        $iTargetSpecificity = $aSpecificitySearch[1];
                    }
                    $iTargetSpecificity = (int)$iTargetSpecificity;
                    $iSelectorSpecificity = $oSelector->getSpecificity();
                    $bMatches = false;
                    switch ($sComparator) {
                        case '<=':
                            $bMatches = $iSelectorSpecificity <= $iTargetSpecificity;
                            break;
                        case '<':
                            $bMatches = $iSelectorSpecificity < $iTargetSpecificity;
                            break;
                        case '>=':
                            $bMatches = $iSelectorSpecificity >= $iTargetSpecificity;
                            break;
                        case '>':
                            $bMatches = $iSelectorSpecificity > $iTargetSpecificity;
                            break;
                        default:
                            $bMatches = $iSelectorSpecificity === $iTargetSpecificity;
                            break;
                    }
                    if ($bMatches) {
                        $aResult[] = $oSelector;
                    }
                }
            }
        }
    }
}
PK.3YA���=�=Cbunyad-amp/vendor/sabberworm/php-css-parser/src/CSSList/CSSList.php<?php

namespace Sabberworm\CSS\CSSList;

use Sabberworm\CSS\Comment\Comment;
use Sabberworm\CSS\Comment\Commentable;
use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Parsing\ParserState;
use Sabberworm\CSS\Parsing\SourceException;
use Sabberworm\CSS\Parsing\UnexpectedEOFException;
use Sabberworm\CSS\Parsing\UnexpectedTokenException;
use Sabberworm\CSS\Property\AtRule;
use Sabberworm\CSS\Property\Charset;
use Sabberworm\CSS\Property\CSSNamespace;
use Sabberworm\CSS\Property\Import;
use Sabberworm\CSS\Property\Selector;
use Sabberworm\CSS\Renderable;
use Sabberworm\CSS\RuleSet\AtRuleSet;
use Sabberworm\CSS\RuleSet\DeclarationBlock;
use Sabberworm\CSS\RuleSet\RuleSet;
use Sabberworm\CSS\Settings;
use Sabberworm\CSS\Value\CSSString;
use Sabberworm\CSS\Value\URL;
use Sabberworm\CSS\Value\Value;

/**
 * This is the most generic container available. It can contain `DeclarationBlock`s (rule sets with a selector),
 * `RuleSet`s as well as other `CSSList` objects.
 *
 * It can also contain `Import` and `Charset` objects stemming from at-rules.
 */
abstract class CSSList implements Renderable, Commentable
{
    /**
     * @var array<array-key, Comment>
     */
    protected $aComments;

    /**
     * @var array<int, RuleSet|CSSList|Import|Charset>
     */
    protected $aContents;

    /**
     * @var int
     */
    protected $iLineNo;

    /**
     * @param int $iLineNo
     */
    public function __construct($iLineNo = 0)
    {
        $this->aComments = [];
        $this->aContents = [];
        $this->iLineNo = $iLineNo;
    }

    /**
     * @return void
     *
     * @throws UnexpectedTokenException
     * @throws SourceException
     */
    public static function parseList(ParserState $oParserState, CSSList $oList)
    {
        $bIsRoot = $oList instanceof Document;
        if (is_string($oParserState)) {
            $oParserState = new ParserState($oParserState, Settings::create());
        }
        $bLenientParsing = $oParserState->getSettings()->bLenientParsing;
        $aComments = [];
        while (!$oParserState->isEnd()) {
            $aComments = array_merge($aComments, $oParserState->consumeWhiteSpace());
            $oListItem = null;
            if ($bLenientParsing) {
                try {
                    $oListItem = self::parseListItem($oParserState, $oList);
                } catch (UnexpectedTokenException $e) {
                    $oListItem = false;
                }
            } else {
                $oListItem = self::parseListItem($oParserState, $oList);
            }
            if ($oListItem === null) {
                // List parsing finished
                return;
            }
            if ($oListItem) {
                $oListItem->addComments($aComments);
                $oList->append($oListItem);
            }
            $aComments = $oParserState->consumeWhiteSpace();
        }
        $oList->addComments($aComments);
        if (!$bIsRoot && !$bLenientParsing) {
            throw new SourceException("Unexpected end of document", $oParserState->currentLine());
        }
    }

    /**
     * @return AtRuleBlockList|KeyFrame|Charset|CSSNamespace|Import|AtRuleSet|DeclarationBlock|null|false
     *
     * @throws SourceException
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     */
    private static function parseListItem(ParserState $oParserState, CSSList $oList)
    {
        $bIsRoot = $oList instanceof Document;
        if ($oParserState->comes('@')) {
            $oAtRule = self::parseAtRule($oParserState);
            if ($oAtRule instanceof Charset) {
                if (!$bIsRoot) {
                    throw new UnexpectedTokenException(
                        '@charset may only occur in root document',
                        '',
                        'custom',
                        $oParserState->currentLine()
                    );
                }
                if (count($oList->getContents()) > 0) {
                    throw new UnexpectedTokenException(
                        '@charset must be the first parseable token in a document',
                        '',
                        'custom',
                        $oParserState->currentLine()
                    );
                }
                $oParserState->setCharset($oAtRule->getCharset());
            }
            return $oAtRule;
        } elseif ($oParserState->comes('}')) {
            if (!$oParserState->getSettings()->bLenientParsing) {
                throw new UnexpectedTokenException('CSS selector', '}', 'identifier', $oParserState->currentLine());
            } else {
                if ($bIsRoot) {
                    if ($oParserState->getSettings()->bLenientParsing) {
                        return DeclarationBlock::parse($oParserState);
                    } else {
                        throw new SourceException("Unopened {", $oParserState->currentLine());
                    }
                } else {
                    return null;
                }
            }
        } else {
            return DeclarationBlock::parse($oParserState, $oList);
        }
    }

    /**
     * @param ParserState $oParserState
     *
     * @return AtRuleBlockList|KeyFrame|Charset|CSSNamespace|Import|AtRuleSet|null
     *
     * @throws SourceException
     * @throws UnexpectedTokenException
     * @throws UnexpectedEOFException
     */
    private static function parseAtRule(ParserState $oParserState)
    {
        $oParserState->consume('@');
        $sIdentifier = $oParserState->parseIdentifier();
        $iIdentifierLineNum = $oParserState->currentLine();
        $oParserState->consumeWhiteSpace();
        if ($sIdentifier === 'import') {
            $oLocation = URL::parse($oParserState);
            $oParserState->consumeWhiteSpace();
            $sMediaQuery = null;
            if (!$oParserState->comes(';')) {
                $sMediaQuery = trim($oParserState->consumeUntil([';', ParserState::EOF]));
            }
            $oParserState->consumeUntil([';', ParserState::EOF], true, true);
            return new Import($oLocation, $sMediaQuery ?: null, $iIdentifierLineNum);
        } elseif ($sIdentifier === 'charset') {
            $oCharsetString = CSSString::parse($oParserState);
            $oParserState->consumeWhiteSpace();
            $oParserState->consumeUntil([';', ParserState::EOF], true, true);
            return new Charset($oCharsetString, $iIdentifierLineNum);
        } elseif (self::identifierIs($sIdentifier, 'keyframes')) {
            $oResult = new KeyFrame($iIdentifierLineNum);
            $oResult->setVendorKeyFrame($sIdentifier);
            $oResult->setAnimationName(trim($oParserState->consumeUntil('{', false, true)));
            CSSList::parseList($oParserState, $oResult);
            if ($oParserState->comes('}')) {
                $oParserState->consume('}');
            }
            return $oResult;
        } elseif ($sIdentifier === 'namespace') {
            $sPrefix = null;
            $mUrl = Value::parsePrimitiveValue($oParserState);
            if (!$oParserState->comes(';')) {
                $sPrefix = $mUrl;
                $mUrl = Value::parsePrimitiveValue($oParserState);
            }
            $oParserState->consumeUntil([';', ParserState::EOF], true, true);
            if ($sPrefix !== null && !is_string($sPrefix)) {
                throw new UnexpectedTokenException('Wrong namespace prefix', $sPrefix, 'custom', $iIdentifierLineNum);
            }
            if (!($mUrl instanceof CSSString || $mUrl instanceof URL)) {
                throw new UnexpectedTokenException(
                    'Wrong namespace url of invalid type',
                    $mUrl,
                    'custom',
                    $iIdentifierLineNum
                );
            }
            return new CSSNamespace($mUrl, $sPrefix, $iIdentifierLineNum);
        } else {
            // Unknown other at rule (font-face or such)
            $sArgs = trim($oParserState->consumeUntil('{', false, true));
            if (substr_count($sArgs, "(") != substr_count($sArgs, ")")) {
                if ($oParserState->getSettings()->bLenientParsing) {
                    return null;
                } else {
                    throw new SourceException("Unmatched brace count in media query", $oParserState->currentLine());
                }
            }
            $bUseRuleSet = true;
            foreach (explode('/', AtRule::BLOCK_RULES) as $sBlockRuleName) {
                if (self::identifierIs($sIdentifier, $sBlockRuleName)) {
                    $bUseRuleSet = false;
                    break;
                }
            }
            if ($bUseRuleSet) {
                $oAtRule = new AtRuleSet($sIdentifier, $sArgs, $iIdentifierLineNum);
                RuleSet::parseRuleSet($oParserState, $oAtRule);
            } else {
                $oAtRule = new AtRuleBlockList($sIdentifier, $sArgs, $iIdentifierLineNum);
                CSSList::parseList($oParserState, $oAtRule);
                if ($oParserState->comes('}')) {
                    $oParserState->consume('}');
                }
            }
            return $oAtRule;
        }
    }

    /**
     * Tests an identifier for a given value. Since identifiers are all keywords, they can be vendor-prefixed.
     * We need to check for these versions too.
     *
     * @param string $sIdentifier
     * @param string $sMatch
     *
     * @return bool
     */
    private static function identifierIs($sIdentifier, $sMatch)
    {
        return (strcasecmp($sIdentifier, $sMatch) === 0)
            ?: preg_match("/^(-\\w+-)?$sMatch$/i", $sIdentifier) === 1;
    }

    /**
     * @return int
     */
    public function getLineNo()
    {
        return $this->iLineNo;
    }

    /**
     * Prepends an item to the list of contents.
     *
     * @param RuleSet|CSSList|Import|Charset $oItem
     *
     * @return void
     */
    public function prepend($oItem)
    {
        array_unshift($this->aContents, $oItem);
    }

    /**
     * Appends an item to the list of contents.
     *
     * @param RuleSet|CSSList|Import|Charset $oItem
     *
     * @return void
     */
    public function append($oItem)
    {
        $this->aContents[] = $oItem;
    }

    /**
     * Splices the list of contents.
     *
     * @param int $iOffset
     * @param int $iLength
     * @param array<int, RuleSet|CSSList|Import|Charset> $mReplacement
     *
     * @return void
     */
    public function splice($iOffset, $iLength = null, $mReplacement = null)
    {
        array_splice($this->aContents, $iOffset, $iLength, $mReplacement);
    }

    /**
     * Removes an item from the CSS list.
     *
     * @param RuleSet|Import|Charset|CSSList $oItemToRemove
     *        May be a RuleSet (most likely a DeclarationBlock), a Import,
     *        a Charset or another CSSList (most likely a MediaQuery)
     *
     * @return bool whether the item was removed
     */
    public function remove($oItemToRemove)
    {
        $iKey = array_search($oItemToRemove, $this->aContents, true);
        if ($iKey !== false) {
            unset($this->aContents[$iKey]);
            return true;
        }
        return false;
    }

    /**
     * Replaces an item from the CSS list.
     *
     * @param RuleSet|Import|Charset|CSSList $oOldItem
     *        May be a `RuleSet` (most likely a `DeclarationBlock`), an `Import`, a `Charset`
     *        or another `CSSList` (most likely a `MediaQuery`)
     *
     * @return bool
     */
    public function replace($oOldItem, $mNewItem)
    {
        $iKey = array_search($oOldItem, $this->aContents, true);
        if ($iKey !== false) {
            if (is_array($mNewItem)) {
                array_splice($this->aContents, $iKey, 1, $mNewItem);
            } else {
                array_splice($this->aContents, $iKey, 1, [$mNewItem]);
            }
            return true;
        }
        return false;
    }

    /**
     * @param array<int, RuleSet|Import|Charset|CSSList> $aContents
     */
    public function setContents(array $aContents)
    {
        $this->aContents = [];
        foreach ($aContents as $content) {
            $this->append($content);
        }
    }

    /**
     * Removes a declaration block from the CSS list if it matches all given selectors.
     *
     * @param DeclarationBlock|array<array-key, Selector>|string $mSelector the selectors to match
     * @param bool $bRemoveAll whether to stop at the first declaration block found or remove all blocks
     *
     * @return void
     */
    public function removeDeclarationBlockBySelector($mSelector, $bRemoveAll = false)
    {
        if ($mSelector instanceof DeclarationBlock) {
            $mSelector = $mSelector->getSelectors();
        }
        if (!is_array($mSelector)) {
            $mSelector = explode(',', $mSelector);
        }
        foreach ($mSelector as $iKey => &$mSel) {
            if (!($mSel instanceof Selector)) {
                if (!Selector::isValid($mSel)) {
                    throw new UnexpectedTokenException(
                        "Selector did not match '" . Selector::SELECTOR_VALIDATION_RX . "'.",
                        $mSel,
                        "custom"
                    );
                }
                $mSel = new Selector($mSel);
            }
        }
        foreach ($this->aContents as $iKey => $mItem) {
            if (!($mItem instanceof DeclarationBlock)) {
                continue;
            }
            if ($mItem->getSelectors() == $mSelector) {
                unset($this->aContents[$iKey]);
                if (!$bRemoveAll) {
                    return;
                }
            }
        }
    }

    /**
     * @return string
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @return string
     */
    protected function renderListContents(OutputFormat $oOutputFormat)
    {
        $sResult = '';
        $bIsFirst = true;
        $oNextLevel = $oOutputFormat;
        if (!$this->isRootList()) {
            $oNextLevel = $oOutputFormat->nextLevel();
        }
        foreach ($this->aContents as $oContent) {
            $sRendered = $oOutputFormat->safely(function () use ($oNextLevel, $oContent) {
                return $oContent->render($oNextLevel);
            });
            if ($sRendered === null) {
                continue;
            }
            if ($bIsFirst) {
                $bIsFirst = false;
                $sResult .= $oNextLevel->spaceBeforeBlocks();
            } else {
                $sResult .= $oNextLevel->spaceBetweenBlocks();
            }
            $sResult .= $sRendered;
        }

        if (!$bIsFirst) {
            // Had some output
            $sResult .= $oOutputFormat->spaceAfterBlocks();
        }

        return $sResult;
    }

    /**
     * Return true if the list can not be further outdented. Only important when rendering.
     *
     * @return bool
     */
    abstract public function isRootList();

    /**
     * Returns the stored items.
     *
     * @return array<int, RuleSet|Import|Charset|CSSList>
     */
    public function getContents()
    {
        return $this->aContents;
    }

    /**
     * @param array<array-key, Comment> $aComments
     *
     * @return void
     */
    public function addComments(array $aComments)
    {
        $this->aComments = array_merge($this->aComments, $aComments);
    }

    /**
     * @return array<array-key, Comment>
     */
    public function getComments()
    {
        return $this->aComments;
    }

    /**
     * @param array<array-key, Comment> $aComments
     *
     * @return void
     */
    public function setComments(array $aComments)
    {
        $this->aComments = $aComments;
    }
}
PK.3Y3���Dbunyad-amp/vendor/sabberworm/php-css-parser/src/CSSList/Document.php<?php

namespace Sabberworm\CSS\CSSList;

use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Parsing\ParserState;
use Sabberworm\CSS\Parsing\SourceException;
use Sabberworm\CSS\Property\Selector;
use Sabberworm\CSS\RuleSet\DeclarationBlock;
use Sabberworm\CSS\RuleSet\RuleSet;
use Sabberworm\CSS\Value\Value;

/**
 * This class represents the root of a parsed CSS file. It contains all top-level CSS contents: mostly declaration
 * blocks, but also any at-rules encountered (`Import` and `Charset`).
 */
class Document extends CSSBlockList
{
    /**
     * @param int $iLineNo
     */
    public function __construct($iLineNo = 0)
    {
        parent::__construct($iLineNo);
    }

    /**
     * @return Document
     *
     * @throws SourceException
     */
    public static function parse(ParserState $oParserState)
    {
        $oDocument = new Document($oParserState->currentLine());
        CSSList::parseList($oParserState, $oDocument);
        return $oDocument;
    }

    /**
     * Gets all `DeclarationBlock` objects recursively, no matter how deeply nested the selectors are.
     * Aliased as `getAllSelectors()`.
     *
     * @return array<int, DeclarationBlock>
     */
    public function getAllDeclarationBlocks()
    {
        /** @var array<int, DeclarationBlock> $aResult */
        $aResult = [];
        $this->allDeclarationBlocks($aResult);
        return $aResult;
    }

    /**
     * Gets all `DeclarationBlock` objects recursively.
     *
     * @return array<int, DeclarationBlock>
     *
     * @deprecated will be removed in version 9.0; use `getAllDeclarationBlocks()` instead
     */
    public function getAllSelectors()
    {
        return $this->getAllDeclarationBlocks();
    }

    /**
     * Returns all `RuleSet` objects recursively found in the tree, no matter how deeply nested the rule sets are.
     *
     * @return array<int, RuleSet>
     */
    public function getAllRuleSets()
    {
        /** @var array<int, RuleSet> $aResult */
        $aResult = [];
        $this->allRuleSets($aResult);
        return $aResult;
    }

    /**
     * Returns all `Value` objects found recursively in `Rule`s in the tree.
     *
     * @param CSSList|RuleSet|string $mElement
     *        the `CSSList` or `RuleSet` to start the search from (defaults to the whole document).
     *        If a string is given, it is used as rule name filter.
     * @param bool $bSearchInFunctionArguments whether to also return Value objects used as Function arguments.
     *
     * @return array<int, Value>
     *
     * @see RuleSet->getRules()
     */
    public function getAllValues($mElement = null, $bSearchInFunctionArguments = false)
    {
        $sSearchString = null;
        if ($mElement === null) {
            $mElement = $this;
        } elseif (is_string($mElement)) {
            $sSearchString = $mElement;
            $mElement = $this;
        }
        /** @var array<int, Value> $aResult */
        $aResult = [];
        $this->allValues($mElement, $aResult, $sSearchString, $bSearchInFunctionArguments);
        return $aResult;
    }

    /**
     * Returns all `Selector` objects with the requested specificity found recursively in the tree.
     *
     * Note that this does not yield the full `DeclarationBlock` that the selector belongs to
     * (and, currently, there is no way to get to that).
     *
     * @param string|null $sSpecificitySearch
     *        An optional filter by specificity.
     *        May contain a comparison operator and a number or just a number (defaults to "==").
     *
     * @return array<int, Selector>
     * @example `getSelectorsBySpecificity('>= 100')`
     *
     */
    public function getSelectorsBySpecificity($sSpecificitySearch = null)
    {
        /** @var array<int, Selector> $aResult */
        $aResult = [];
        $this->allSelectors($aResult, $sSpecificitySearch);
        return $aResult;
    }

    /**
     * Expands all shorthand properties to their long value.
     *
     * @return void
     */
    public function expandShorthands()
    {
        foreach ($this->getAllDeclarationBlocks() as $oDeclaration) {
            $oDeclaration->expandShorthands();
        }
    }

    /**
     * Create shorthands properties whenever possible.
     *
     * @return void
     */
    public function createShorthands()
    {
        foreach ($this->getAllDeclarationBlocks() as $oDeclaration) {
            $oDeclaration->createShorthands();
        }
    }

    /**
     * Overrides `render()` to make format argument optional.
     *
     * @param OutputFormat|null $oOutputFormat
     *
     * @return string
     */
    public function render(OutputFormat $oOutputFormat = null)
    {
        if ($oOutputFormat === null) {
            $oOutputFormat = new OutputFormat();
        }
        return $oOutputFormat->comments($this) . $this->renderListContents($oOutputFormat);
    }

    /**
     * @return bool
     */
    public function isRootList()
    {
        return true;
    }
}
PK.3Y&����Dbunyad-amp/vendor/sabberworm/php-css-parser/src/CSSList/KeyFrame.php<?php

namespace Sabberworm\CSS\CSSList;

use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Property\AtRule;

class KeyFrame extends CSSList implements AtRule
{
    /**
     * @var string|null
     */
    private $vendorKeyFrame;

    /**
     * @var string|null
     */
    private $animationName;

    /**
     * @param int $iLineNo
     */
    public function __construct($iLineNo = 0)
    {
        parent::__construct($iLineNo);
        $this->vendorKeyFrame = null;
        $this->animationName = null;
    }

    /**
     * @param string $vendorKeyFrame
     */
    public function setVendorKeyFrame($vendorKeyFrame)
    {
        $this->vendorKeyFrame = $vendorKeyFrame;
    }

    /**
     * @return string|null
     */
    public function getVendorKeyFrame()
    {
        return $this->vendorKeyFrame;
    }

    /**
     * @param string $animationName
     */
    public function setAnimationName($animationName)
    {
        $this->animationName = $animationName;
    }

    /**
     * @return string|null
     */
    public function getAnimationName()
    {
        return $this->animationName;
    }

    /**
     * @return string
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @return string
     */
    public function render(OutputFormat $oOutputFormat)
    {
        $sResult = $oOutputFormat->comments($this);
        $sResult .= "@{$this->vendorKeyFrame} {$this->animationName}{$oOutputFormat->spaceBeforeOpeningBrace()}{";
        $sResult .= $this->renderListContents($oOutputFormat);
        $sResult .= '}';
        return $sResult;
    }

    /**
     * @return bool
     */
    public function isRootList()
    {
        return false;
    }

    /**
     * @return string|null
     */
    public function atRuleName()
    {
        return $this->vendorKeyFrame;
    }

    /**
     * @return string|null
     */
    public function atRuleArgs()
    {
        return $this->animationName;
    }
}
PK.3Yl6\�qqBbunyad-amp/vendor/sabberworm/php-css-parser/src/Parsing/Anchor.php<?php

namespace Sabberworm\CSS\Parsing;

class Anchor
{
    /**
     * @var int
     */
    private $iPosition;

    /**
     * @var \Sabberworm\CSS\Parsing\ParserState
     */
    private $oParserState;

    /**
     * @param int $iPosition
     * @param \Sabberworm\CSS\Parsing\ParserState $oParserState
     */
    public function __construct($iPosition, ParserState $oParserState)
    {
        $this->iPosition = $iPosition;
        $this->oParserState = $oParserState;
    }

    /**
     * @return void
     */
    public function backtrack()
    {
        $this->oParserState->setPosition($this->iPosition);
    }
}
PK.3Yj�yBffKbunyad-amp/vendor/sabberworm/php-css-parser/src/Parsing/OutputException.php<?php

namespace Sabberworm\CSS\Parsing;

/**
 * Thrown if the CSS parser attempts to print something invalid.
 */
class OutputException extends SourceException
{
    /**
     * @param string $sMessage
     * @param int $iLineNo
     */
    public function __construct($sMessage, $iLineNo = 0)
    {
        parent::__construct($sMessage, $iLineNo);
    }
}
PK.3YI��
�;�;Gbunyad-amp/vendor/sabberworm/php-css-parser/src/Parsing/ParserState.php<?php

namespace Sabberworm\CSS\Parsing;

use Sabberworm\CSS\Comment\Comment;
use Sabberworm\CSS\Settings;

class ParserState
{
    /**
     * @var null
     */
    const EOF = null;

    /**
     * @var Settings
     */
    private $oParserSettings;

    /**
     * @var string
     */
    private $sText;

    /**
     * @var array<int, string>
     */
    private $aText;

    /**
     * @var int
     */
    private $iCurrentPosition;

    /**
     * will only be used if the CSS does not contain an `@charset` declaration
     *
     * @var string
     */
    private $sCharset;

    /**
     * @var int
     */
    private $iLength;

    /**
     * @var int
     */
    private $iLineNo;

    /**
     * @param string $sText the complete CSS as text (i.e., usually the contents of a CSS file)
     * @param int $iLineNo
     */
    public function __construct($sText, Settings $oParserSettings, $iLineNo = 1)
    {
        $this->oParserSettings = $oParserSettings;
        $this->sText = $sText;
        $this->iCurrentPosition = 0;
        $this->iLineNo = $iLineNo;
        $this->setCharset($this->oParserSettings->sDefaultCharset);
    }

    /**
     * Sets the charset to be used if the CSS does not contain an `@charset` declaration.
     *
     * @param string $sCharset
     *
     * @return void
     */
    public function setCharset($sCharset)
    {
        $this->sCharset = $sCharset;
        $this->aText = $this->strsplit($this->sText);
        if (is_array($this->aText)) {
            $this->iLength = count($this->aText);
        }
    }

    /**
     * Returns the charset that is used if the CSS does not contain an `@charset` declaration.
     *
     * @return string
     */
    public function getCharset()
    {
        return $this->sCharset;
    }

    /**
     * @return int
     */
    public function currentLine()
    {
        return $this->iLineNo;
    }

    /**
     * @return int
     */
    public function currentColumn()
    {
        return $this->iCurrentPosition;
    }

    /**
     * @return Settings
     */
    public function getSettings()
    {
        return $this->oParserSettings;
    }

    /**
     * @return \Sabberworm\CSS\Parsing\Anchor
     */
    public function anchor()
    {
        return new Anchor($this->iCurrentPosition, $this);
    }

    /**
     * @param int $iPosition
     *
     * @return void
     */
    public function setPosition($iPosition)
    {
        $this->iCurrentPosition = $iPosition;
    }

    /**
     * @param bool $bIgnoreCase
     *
     * @return string
     *
     * @throws UnexpectedTokenException
     */
    public function parseIdentifier($bIgnoreCase = true, $bNameStartCodePoint = true)
    {
        if ($this->isEnd()) {
            throw new UnexpectedEOFException('', '', 'identifier', $this->iLineNo);
        }

        $sResult = null;
        $bCanParseCharacter = true;

        if ($bNameStartCodePoint) {
            // Check if 3 code points would start an identifier.
            // See <https://drafts.csswg.org/css-syntax-3/#would-start-an-identifier>.
            $sNameStartCodePoint = '[a-zA-Z_]|[\x80-\xFF]';
            $sEscapeCode = '\\[^\r\n\f]';

            if (
                ! (
                    preg_match("/^-([-{$sNameStartCodePoint}]|{$sEscapeCode})/isSu", $this->peek(3)) ||
                    preg_match("/^{$sNameStartCodePoint}/isSu", $this->peek()) ||
                    preg_match("/^{$sEscapeCode}/isS", $this->peek(2))
                )
            ) {
                $bCanParseCharacter = false;
            }
        }

        if ($bCanParseCharacter) {
            $sResult = $this->parseCharacter(true);
        }

        if ($sResult === null) {
            throw new UnexpectedTokenException($sResult, $this->peek(5), 'identifier', $this->iLineNo);
        }
        $sCharacter = null;
        while (!$this->isEnd() && ($sCharacter = $this->parseCharacter(true)) !== null) {
            if (preg_match('/[a-zA-Z0-9\x{00A0}-\x{FFFF}_-]/Sux', $sCharacter)) {
                $sResult .= $sCharacter;
            } else {
                $sResult .= '\\' . $sCharacter;
            }
        }
        if ($bIgnoreCase) {
            $sResult = $this->strtolower($sResult);
        }
        return $sResult;
    }

    /**
     * @param bool $bIsForIdentifier
     *
     * @return string|null
     *
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     */
    public function parseCharacter($bIsForIdentifier)
    {
        if ($this->peek() === '\\') {
            if (
                $bIsForIdentifier && $this->oParserSettings->bLenientParsing
                && ($this->comes('\0') || $this->comes('\9'))
            ) {
                // Non-strings can contain \0 or \9 which is an IE hack supported in lenient parsing.
                return null;
            }
            $this->consume('\\');
            if ($this->comes('\n') || $this->comes('\r')) {
                return '';
            }
            if (preg_match('/[0-9a-fA-F]/Su', $this->peek()) === 0) {
                return $this->consume(1);
            }
            $sUnicode = $this->consumeExpression('/^[0-9a-fA-F]{1,6}/u', 6);
            if ($this->strlen($sUnicode) < 6) {
                // Consume whitespace after incomplete unicode escape
                if (preg_match('/\\s/isSu', $this->peek())) {
                    if ($this->comes('\r\n')) {
                        $this->consume(2);
                    } else {
                        $this->consume(1);
                    }
                }
            }
            $iUnicode = intval($sUnicode, 16);
            $sUtf32 = "";
            for ($i = 0; $i < 4; ++$i) {
                $sUtf32 .= chr($iUnicode & 0xff);
                $iUnicode = $iUnicode >> 8;
            }
            return iconv('utf-32le', $this->sCharset, $sUtf32);
        }
        if ($bIsForIdentifier) {
            $peek = ord($this->peek());
            $peek = ord($this->peek());
            // Matches a name code point. See <https://drafts.csswg.org/css-syntax-3/#name-code-point>.
            if (
                ($peek >= 97 && $peek <= 122) ||
                ($peek >= 65 && $peek <= 90) ||
                ($peek >= 48 && $peek <= 57) ||
                ($peek === 45) ||
                ($peek === 95) ||
                ($peek > 0x81)
            ) {
                return $this->consume(1);
            }
        } else {
            return $this->consume(1);
        }
        return null;
    }

    /**
     * @return array<int, Comment>|void
     *
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     */
    public function consumeWhiteSpace()
    {
        $aComments = [];
        do {
            while (preg_match('/\\s/isSu', $this->peek()) === 1) {
                $this->consume(1);
            }
            if ($this->oParserSettings->bLenientParsing) {
                try {
                    $oComment = $this->consumeComment();
                } catch (UnexpectedEOFException $e) {
                    $this->iCurrentPosition = $this->iLength;
                    return $aComments;
                }
            } else {
                $oComment = $this->consumeComment();
            }
            if ($oComment !== false) {
                $aComments[] = $oComment;
            }
        } while ($oComment !== false);
        return $aComments;
    }

    /**
     * @param string $sString
     * @param bool $bCaseInsensitive
     *
     * @return bool
     */
    public function comes($sString, $bCaseInsensitive = false)
    {
        $sPeek = $this->peek(strlen($sString));
        return ($sPeek == '')
            ? false
            : $this->streql($sPeek, $sString, $bCaseInsensitive);
    }

    /**
     * @param int $iLength
     * @param int $iOffset
     *
     * @return string
     */
    public function peek($iLength = 1, $iOffset = 0)
    {
        $iOffset += $this->iCurrentPosition;
        if ($iOffset >= $this->iLength) {
            return '';
        }
        return $this->substr($iOffset, $iLength);
    }

    /**
     * @param int $mValue
     *
     * @return string
     *
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     */
    public function consume($mValue = 1)
    {
        if (is_string($mValue)) {
            $iLineCount = substr_count($mValue, "\n");
            $iLength = $this->strlen($mValue);
            if (!$this->streql($this->substr($this->iCurrentPosition, $iLength), $mValue)) {
                throw new UnexpectedTokenException($mValue, $this->peek(max($iLength, 5)), $this->iLineNo);
            }
            $this->iLineNo += $iLineCount;
            $this->iCurrentPosition += $this->strlen($mValue);
            return $mValue;
        } else {
            if ($this->iCurrentPosition + $mValue > $this->iLength) {
                throw new UnexpectedEOFException($mValue, $this->peek(5), 'count', $this->iLineNo);
            }
            $sResult = $this->substr($this->iCurrentPosition, $mValue);
            $iLineCount = substr_count($sResult, "\n");
            $this->iLineNo += $iLineCount;
            $this->iCurrentPosition += $mValue;
            return $sResult;
        }
    }

    /**
     * @param string $mExpression
     * @param int|null $iMaxLength
     *
     * @return string
     *
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     */
    public function consumeExpression($mExpression, $iMaxLength = null)
    {
        $aMatches = null;
        $sInput = $iMaxLength !== null ? $this->peek($iMaxLength) : $this->inputLeft();
        if (preg_match($mExpression, $sInput, $aMatches, PREG_OFFSET_CAPTURE) === 1) {
            return $this->consume($aMatches[0][0]);
        }
        throw new UnexpectedTokenException($mExpression, $this->peek(5), 'expression', $this->iLineNo);
    }

    /**
     * @return Comment|false
     */
    public function consumeComment()
    {
        $mComment = false;
        if ($this->comes('/*')) {
            $iLineNo = $this->iLineNo;
            $this->consume(1);
            $mComment = '';
            while (($char = $this->consume(1)) !== '') {
                $mComment .= $char;
                if ($this->comes('*/')) {
                    $this->consume(2);
                    break;
                }
            }
        }

        if ($mComment !== false) {
            // We skip the * which was included in the comment.
            return new Comment(substr($mComment, 1), $iLineNo);
        }

        return $mComment;
    }

    /**
     * @return bool
     */
    public function isEnd()
    {
        return $this->iCurrentPosition >= $this->iLength;
    }

    /**
     * @param array<array-key, string>|string $aEnd
     * @param string $bIncludeEnd
     * @param string $consumeEnd
     * @param array<int, Comment> $comments
     *
     * @return string
     *
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     */
    public function consumeUntil($aEnd, $bIncludeEnd = false, $consumeEnd = false, array &$comments = [])
    {
        $aEnd = is_array($aEnd) ? $aEnd : [$aEnd];
        $out = '';
        $start = $this->iCurrentPosition;

        while (!$this->isEnd()) {
            $char = $this->consume(1);
            if (in_array($char, $aEnd)) {
                if ($bIncludeEnd) {
                    $out .= $char;
                } elseif (!$consumeEnd) {
                    $this->iCurrentPosition -= $this->strlen($char);
                }
                return $out;
            }
            $out .= $char;
            if ($comment = $this->consumeComment()) {
                $comments[] = $comment;
            }
        }

        if (in_array(self::EOF, $aEnd)) {
            return $out;
        }

        $this->iCurrentPosition = $start;
        throw new UnexpectedEOFException(
            'One of ("' . implode('","', $aEnd) . '")',
            $this->peek(5),
            'search',
            $this->iLineNo
        );
    }

    /**
     * @return string
     */
    private function inputLeft()
    {
        return $this->substr($this->iCurrentPosition, -1);
    }

    /**
     * @param string $sString1
     * @param string $sString2
     * @param bool $bCaseInsensitive
     *
     * @return bool
     */
    public function streql($sString1, $sString2, $bCaseInsensitive = true)
    {
        if ($bCaseInsensitive) {
            return $this->strtolower($sString1) === $this->strtolower($sString2);
        } else {
            return $sString1 === $sString2;
        }
    }

    /**
     * @param int $iAmount
     *
     * @return void
     */
    public function backtrack($iAmount)
    {
        $this->iCurrentPosition -= $iAmount;
    }

    /**
     * @param string $sString
     *
     * @return int
     */
    public function strlen($sString)
    {
        if ($this->oParserSettings->bMultibyteSupport) {
            return mb_strlen($sString, $this->sCharset);
        } else {
            return strlen($sString);
        }
    }

    /**
     * @param int $iStart
     * @param int $iLength
     *
     * @return string
     */
    private function substr($iStart, $iLength)
    {
        if ($iLength < 0) {
            $iLength = $this->iLength - $iStart + $iLength;
        }
        if ($iStart + $iLength > $this->iLength) {
            $iLength = $this->iLength - $iStart;
        }
        $sResult = '';
        while ($iLength > 0) {
            $sResult .= $this->aText[$iStart];
            $iStart++;
            $iLength--;
        }
        return $sResult;
    }

    /**
     * @param string $sString
     *
     * @return string
     */
    private function strtolower($sString)
    {
        if ($this->oParserSettings->bMultibyteSupport) {
            return mb_strtolower($sString, $this->sCharset);
        } else {
            return strtolower($sString);
        }
    }

    /**
     * @param string $sString
     *
     * @return array<int, string>
     */
    private function strsplit($sString)
    {
        if ($this->oParserSettings->bMultibyteSupport) {
            if ($this->streql($this->sCharset, 'utf-8')) {
                return preg_split('//u', $sString, -1, PREG_SPLIT_NO_EMPTY);
            } else {
                $iLength = mb_strlen($sString, $this->sCharset);
                $aResult = [];
                for ($i = 0; $i < $iLength; ++$i) {
                    $aResult[] = mb_substr($sString, $i, 1, $this->sCharset);
                }
                return $aResult;
            }
        } else {
            if ($sString === '') {
                return [];
            } else {
                return str_split($sString);
            }
        }
    }

    /**
     * @param string $sString
     * @param string $sNeedle
     * @param int $iOffset
     *
     * @return int|false
     */
    private function strpos($sString, $sNeedle, $iOffset)
    {
        if ($this->oParserSettings->bMultibyteSupport) {
            return mb_strpos($sString, $sNeedle, $iOffset, $this->sCharset);
        } else {
            return strpos($sString, $sNeedle, $iOffset);
        }
    }
}
PK.3Ycܚ�22Kbunyad-amp/vendor/sabberworm/php-css-parser/src/Parsing/SourceException.php<?php

namespace Sabberworm\CSS\Parsing;

class SourceException extends \Exception
{
    /**
     * @var int
     */
    private $iLineNo;

    /**
     * @param string $sMessage
     * @param int $iLineNo
     */
    public function __construct($sMessage, $iLineNo = 0)
    {
        $this->iLineNo = $iLineNo;
        if (!empty($iLineNo)) {
            $sMessage .= " [line no: $iLineNo]";
        }
        parent::__construct($sMessage);
    }

    /**
     * @return int
     */
    public function getLineNo()
    {
        return $this->iLineNo;
    }
}
PK.3Yq��Rbunyad-amp/vendor/sabberworm/php-css-parser/src/Parsing/UnexpectedEOFException.php<?php

namespace Sabberworm\CSS\Parsing;

/**
 * Thrown if the CSS parser encounters end of file it did not expect.
 *
 * Extends `UnexpectedTokenException` in order to preserve backwards compatibility.
 */
class UnexpectedEOFException extends UnexpectedTokenException
{
}
PK.3YyW'���Tbunyad-amp/vendor/sabberworm/php-css-parser/src/Parsing/UnexpectedTokenException.php<?php

namespace Sabberworm\CSS\Parsing;

/**
 * Thrown if the CSS parser encounters a token it did not expect.
 */
class UnexpectedTokenException extends SourceException
{
    /**
     * @var string
     */
    private $sExpected;

    /**
     * @var string
     */
    private $sFound;

    /**
     * Possible values: literal, identifier, count, expression, search
     *
     * @var string
     */
    private $sMatchType;

    /**
     * @param string $sExpected
     * @param string $sFound
     * @param string $sMatchType
     * @param int $iLineNo
     */
    public function __construct($sExpected, $sFound, $sMatchType = 'literal', $iLineNo = 0)
    {
        $this->sExpected = $sExpected;
        $this->sFound = $sFound;
        $this->sMatchType = $sMatchType;
        $sMessage = "Token “{$sExpected}” ({$sMatchType}) not found. Got “{$sFound}”.";
        if ($this->sMatchType === 'search') {
            $sMessage = "Search for “{$sExpected}” returned no results. Context: “{$sFound}”.";
        } elseif ($this->sMatchType === 'count') {
            $sMessage = "Next token was expected to have {$sExpected} chars. Context: “{$sFound}”.";
        } elseif ($this->sMatchType === 'identifier') {
            $sMessage = "Identifier expected. Got “{$sFound}”";
        } elseif ($this->sMatchType === 'custom') {
            $sMessage = trim("$sExpected $sFound");
        }

        parent::__construct($sMessage, $iLineNo);
    }
}
PK.3Y� EJ!!Cbunyad-amp/vendor/sabberworm/php-css-parser/src/Property/AtRule.php<?php

namespace Sabberworm\CSS\Property;

use Sabberworm\CSS\Comment\Commentable;
use Sabberworm\CSS\Renderable;

interface AtRule extends Renderable, Commentable
{
    /**
     * Since there are more set rules than block rules,
     * we’re whitelisting the block rules and have anything else be treated as a set rule.
     *
     * @var string
     */
    const BLOCK_RULES = 'media/document/supports/region-style/font-feature-values';

    /**
     * … and more font-specific ones (to be used inside font-feature-values)
     *
     * @var string
     */
    const SET_RULES = 'font-face/counter-style/page/swash/styleset/annotation';

    /**
     * @return string|null
     */
    public function atRuleName();

    /**
     * @return string|null
     */
    public function atRuleArgs();
}
PK.3Y5�Y�	�	Dbunyad-amp/vendor/sabberworm/php-css-parser/src/Property/Charset.php<?php

namespace Sabberworm\CSS\Property;

use Sabberworm\CSS\Comment\Comment;
use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Value\CSSString;

/**
 * Class representing an `@charset` rule.
 *
 * The following restrictions apply:
 * - May not be found in any CSSList other than the Document.
 * - May only appear at the very top of a Document’s contents.
 * - Must not appear more than once.
 */
class Charset implements AtRule
{
    /**
     * @var CSSString
     */
    private $oCharset;

    /**
     * @var int
     */
    protected $iLineNo;

    /**
     * @var array<array-key, Comment>
     */
    protected $aComments;

    /**
     * @param CSSString $oCharset
     * @param int $iLineNo
     */
    public function __construct(CSSString $oCharset, $iLineNo = 0)
    {
        $this->oCharset = $oCharset;
        $this->iLineNo = $iLineNo;
        $this->aComments = [];
    }

    /**
     * @return int
     */
    public function getLineNo()
    {
        return $this->iLineNo;
    }

    /**
     * @param string|CSSString $oCharset
     *
     * @return void
     */
    public function setCharset($sCharset)
    {
        $sCharset = $sCharset instanceof CSSString ? $sCharset : new CSSString($sCharset);
        $this->oCharset = $sCharset;
    }

    /**
     * @return string
     */
    public function getCharset()
    {
        return $this->oCharset->getString();
    }

    /**
     * @return string
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @return string
     */
    public function render(OutputFormat $oOutputFormat)
    {
        return "{$oOutputFormat->comments($this)}@charset {$this->oCharset->render($oOutputFormat)};";
    }

    /**
     * @return string
     */
    public function atRuleName()
    {
        return 'charset';
    }

    /**
     * @return string
     */
    public function atRuleArgs()
    {
        return $this->oCharset;
    }

    /**
     * @param array<array-key, Comment> $aComments
     *
     * @return void
     */
    public function addComments(array $aComments)
    {
        $this->aComments = array_merge($this->aComments, $aComments);
    }

    /**
     * @return array<array-key, Comment>
     */
    public function getComments()
    {
        return $this->aComments;
    }

    /**
     * @param array<array-key, Comment> $aComments
     *
     * @return void
     */
    public function setComments(array $aComments)
    {
        $this->aComments = $aComments;
    }
}
PK.3Y�0�
�
Ibunyad-amp/vendor/sabberworm/php-css-parser/src/Property/CSSNamespace.php<?php

namespace Sabberworm\CSS\Property;

use Sabberworm\CSS\Comment\Comment;
use Sabberworm\CSS\OutputFormat;

/**
 * `CSSNamespace` represents an `@namespace` rule.
 */
class CSSNamespace implements AtRule
{
    /**
     * @var string
     */
    private $mUrl;

    /**
     * @var string
     */
    private $sPrefix;

    /**
     * @var int
     */
    private $iLineNo;

    /**
     * @var array<array-key, Comment>
     */
    protected $aComments;

    /**
     * @param string $mUrl
     * @param string|null $sPrefix
     * @param int $iLineNo
     */
    public function __construct($mUrl, $sPrefix = null, $iLineNo = 0)
    {
        $this->mUrl = $mUrl;
        $this->sPrefix = $sPrefix;
        $this->iLineNo = $iLineNo;
        $this->aComments = [];
    }

    /**
     * @return int
     */
    public function getLineNo()
    {
        return $this->iLineNo;
    }

    /**
     * @return string
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @return string
     */
    public function render(OutputFormat $oOutputFormat)
    {
        return '@namespace ' . ($this->sPrefix === null ? '' : $this->sPrefix . ' ')
            . $this->mUrl->render($oOutputFormat) . ';';
    }

    /**
     * @return string
     */
    public function getUrl()
    {
        return $this->mUrl;
    }

    /**
     * @return string|null
     */
    public function getPrefix()
    {
        return $this->sPrefix;
    }

    /**
     * @param string $mUrl
     *
     * @return void
     */
    public function setUrl($mUrl)
    {
        $this->mUrl = $mUrl;
    }

    /**
     * @param string $sPrefix
     *
     * @return void
     */
    public function setPrefix($sPrefix)
    {
        $this->sPrefix = $sPrefix;
    }

    /**
     * @return string
     */
    public function atRuleName()
    {
        return 'namespace';
    }

    /**
     * @return array<int, string>
     */
    public function atRuleArgs()
    {
        $aResult = [$this->mUrl];
        if ($this->sPrefix) {
            array_unshift($aResult, $this->sPrefix);
        }
        return $aResult;
    }

    /**
     * @param array<array-key, Comment> $aComments
     *
     * @return void
     */
    public function addComments(array $aComments)
    {
        $this->aComments = array_merge($this->aComments, $aComments);
    }

    /**
     * @return array<array-key, Comment>
     */
    public function getComments()
    {
        return $this->aComments;
    }

    /**
     * @param array<array-key, Comment> $aComments
     *
     * @return void
     */
    public function setComments(array $aComments)
    {
        $this->aComments = $aComments;
    }
}
PK.3Y����
�
Cbunyad-amp/vendor/sabberworm/php-css-parser/src/Property/Import.php<?php

namespace Sabberworm\CSS\Property;

use Sabberworm\CSS\Comment\Comment;
use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Value\URL;

/**
 * Class representing an `@import` rule.
 */
class Import implements AtRule
{
    /**
     * @var URL
     */
    private $oLocation;

    /**
     * @var string
     */
    private $sMediaQuery;

    /**
     * @var int
     */
    protected $iLineNo;

    /**
     * @var array<array-key, Comment>
     */
    protected $aComments;

    /**
     * @param URL $oLocation
     * @param string $sMediaQuery
     * @param int $iLineNo
     */
    public function __construct(URL $oLocation, $sMediaQuery, $iLineNo = 0)
    {
        $this->oLocation = $oLocation;
        $this->sMediaQuery = $sMediaQuery;
        $this->iLineNo = $iLineNo;
        $this->aComments = [];
    }

    /**
     * @return int
     */
    public function getLineNo()
    {
        return $this->iLineNo;
    }

    /**
     * @param URL $oLocation
     *
     * @return void
     */
    public function setLocation($oLocation)
    {
        $this->oLocation = $oLocation;
    }

    /**
     * @return URL
     */
    public function getLocation()
    {
        return $this->oLocation;
    }

    /**
     * @return string
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @return string
     */
    public function render(OutputFormat $oOutputFormat)
    {
        return $oOutputFormat->comments($this) . "@import " . $this->oLocation->render($oOutputFormat)
            . ($this->sMediaQuery === null ? '' : ' ' . $this->sMediaQuery) . ';';
    }

    /**
     * @return string
     */
    public function atRuleName()
    {
        return 'import';
    }

    /**
     * @return array<int, URL|string>
     */
    public function atRuleArgs()
    {
        $aResult = [$this->oLocation];
        if ($this->sMediaQuery) {
            array_push($aResult, $this->sMediaQuery);
        }
        return $aResult;
    }

    /**
     * @param array<array-key, Comment> $aComments
     *
     * @return void
     */
    public function addComments(array $aComments)
    {
        $this->aComments = array_merge($this->aComments, $aComments);
    }

    /**
     * @return array<array-key, Comment>
     */
    public function getComments()
    {
        return $this->aComments;
    }

    /**
     * @param array<array-key, Comment> $aComments
     *
     * @return void
     */
    public function setComments(array $aComments)
    {
        $this->aComments = $aComments;
    }

    /**
     * @return string
     */
    public function getMediaQuery()
    {
        return $this->sMediaQuery;
    }
}
PK.3Y����Mbunyad-amp/vendor/sabberworm/php-css-parser/src/Property/KeyframeSelector.php<?php

namespace Sabberworm\CSS\Property;

class KeyframeSelector extends Selector
{
    /**
     * regexp for specificity calculations
     *
     * @var string
     */
    const SELECTOR_VALIDATION_RX = '/
    ^(
        (?:
            [a-zA-Z0-9\x{00A0}-\x{FFFF}_^$|*="\'~\[\]()\-\s\.:#+>]* # any sequence of valid unescaped characters
            (?:\\\\.)?                                              # a single escaped character
            (?:([\'"]).*?(?<!\\\\)\2)?                              # a quoted text like [id="example"]
        )*
    )|
    (\d+%)                                                          # keyframe animation progress percentage (e.g. 50%)
    $
    /ux';
}
PK.3Y݀���
�
Ebunyad-amp/vendor/sabberworm/php-css-parser/src/Property/Selector.php<?php

namespace Sabberworm\CSS\Property;

/**
 * Class representing a single CSS selector. Selectors have to be split by the comma prior to being passed into this
 * class.
 */
class Selector
{
    /**
     * regexp for specificity calculations
     *
     * @var string
     */
    const NON_ID_ATTRIBUTES_AND_PSEUDO_CLASSES_RX = '/
        (\.[\w]+)                   # classes
        |
        \[(\w+)                     # attributes
        |
        (\:(                        # pseudo classes
            link|visited|active
            |hover|focus
            |lang
            |target
            |enabled|disabled|checked|indeterminate
            |root
            |nth-child|nth-last-child|nth-of-type|nth-last-of-type
            |first-child|last-child|first-of-type|last-of-type
            |only-child|only-of-type
            |empty|contains
        ))
        /ix';

    /**
     * regexp for specificity calculations
     *
     * @var string
     */
    const ELEMENTS_AND_PSEUDO_ELEMENTS_RX = '/
        ((^|[\s\+\>\~]+)[\w]+   # elements
        |
        \:{1,2}(                # pseudo-elements
            after|before|first-letter|first-line|selection
        ))
        /ix';

    /**
     * regexp for specificity calculations
     *
     * @var string
     */
    const SELECTOR_VALIDATION_RX = '/
        ^(
            (?:
                [a-zA-Z0-9\x{00A0}-\x{FFFF}_^$|*="\'~\[\]()\-\s\.:#+>]* # any sequence of valid unescaped characters
                (?:\\\\.)?                                              # a single escaped character
                (?:([\'"]).*?(?<!\\\\)\2)?                              # a quoted text like [id="example"]
                (?:\(.*?\))?                                            # an argument for pseudo selector like :not(a,b)
            )*
        )$
        /ux';

    /**
     * @var string
     */
    private $sSelector;

    /**
     * @var int|null
     */
    private $iSpecificity;

    /**
     * @param string $sSelector
     *
     * @return bool
     */
    public static function isValid($sSelector)
    {
        return preg_match(static::SELECTOR_VALIDATION_RX, $sSelector);
    }

    /**
     * @param string $sSelector
     * @param bool $bCalculateSpecificity
     */
    public function __construct($sSelector, $bCalculateSpecificity = false)
    {
        $this->setSelector($sSelector);
        if ($bCalculateSpecificity) {
            $this->getSpecificity();
        }
    }

    /**
     * @return string
     */
    public function getSelector()
    {
        return $this->sSelector;
    }

    /**
     * @param string $sSelector
     *
     * @return void
     */
    public function setSelector($sSelector)
    {
        $this->sSelector = trim($sSelector);
        $this->iSpecificity = null;
    }

    /**
     * @return string
     */
    public function __toString()
    {
        return $this->getSelector();
    }

    /**
     * @return int
     */
    public function getSpecificity()
    {
        if ($this->iSpecificity === null) {
            $a = 0;
            /// @todo should exclude \# as well as "#"
            $aMatches = null;
            $b = substr_count($this->sSelector, '#');
            $c = preg_match_all(self::NON_ID_ATTRIBUTES_AND_PSEUDO_CLASSES_RX, $this->sSelector, $aMatches);
            $d = preg_match_all(self::ELEMENTS_AND_PSEUDO_ELEMENTS_RX, $this->sSelector, $aMatches);
            $this->iSpecificity = ($a * 1000) + ($b * 100) + ($c * 10) + $d;
        }
        return $this->iSpecificity;
    }
}
PK.3Y��M=�'�'=bunyad-amp/vendor/sabberworm/php-css-parser/src/Rule/Rule.php<?php

namespace Sabberworm\CSS\Rule;

use Sabberworm\CSS\Comment\Comment;
use Sabberworm\CSS\Comment\Commentable;
use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Parsing\ParserState;
use Sabberworm\CSS\Parsing\UnexpectedEOFException;
use Sabberworm\CSS\Parsing\UnexpectedTokenException;
use Sabberworm\CSS\Renderable;
use Sabberworm\CSS\Value\RuleValueList;
use Sabberworm\CSS\Value\Value;

/**
 * `Rule`s just have a string key (the rule) and a 'Value'.
 *
 * In CSS, `Rule`s are expressed as follows: “key: value[0][0] value[0][1], value[1][0] value[1][1];”
 */
class Rule implements Renderable, Commentable
{
    /**
     * @var string
     */
    private $sRule;

    /**
     * @var RuleValueList|string|null
     */
    private $mValue;

    /**
     * @var bool
     */
    private $bIsImportant;

    /**
     * @var array<int, int>
     */
    private $aIeHack;

    /**
     * @var int
     */
    protected $iLineNo;

    /**
     * @var int
     */
    protected $iColNo;

    /**
     * @var array<array-key, Comment>
     */
    protected $aComments;

    /**
     * @param string $sRule
     * @param int $iLineNo
     * @param int $iColNo
     */
    public function __construct($sRule, $iLineNo = 0, $iColNo = 0)
    {
        $this->sRule = $sRule;
        $this->mValue = null;
        $this->bIsImportant = false;
        $this->aIeHack = [];
        $this->iLineNo = $iLineNo;
        $this->iColNo = $iColNo;
        $this->aComments = [];
    }

    /**
     * @return Rule
     *
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     */
    public static function parse(ParserState $oParserState)
    {
        $aComments = $oParserState->consumeWhiteSpace();
        $oRule = new Rule(
            $oParserState->parseIdentifier(!$oParserState->comes("--")),
            $oParserState->currentLine(),
            $oParserState->currentColumn()
        );
        $oRule->setComments($aComments);
        $oRule->addComments($oParserState->consumeWhiteSpace());
        $oParserState->consume(':');
        $oValue = Value::parseValue($oParserState, self::listDelimiterForRule($oRule->getRule()));
        $oRule->setValue($oValue);
        if ($oParserState->getSettings()->bLenientParsing) {
            while ($oParserState->comes('\\')) {
                $oParserState->consume('\\');
                $oRule->addIeHack($oParserState->consume());
                $oParserState->consumeWhiteSpace();
            }
        }
        $oParserState->consumeWhiteSpace();
        if ($oParserState->comes('!')) {
            $oParserState->consume('!');
            $oParserState->consumeWhiteSpace();
            $oParserState->consume('important');
            $oRule->setIsImportant(true);
        }
        $oParserState->consumeWhiteSpace();
        while ($oParserState->comes(';')) {
            $oParserState->consume(';');
        }
        $oParserState->consumeWhiteSpace();

        return $oRule;
    }

    /**
     * @param string $sRule
     *
     * @return array<int, string>
     */
    private static function listDelimiterForRule($sRule)
    {
        if (preg_match('/^font($|-)/', $sRule)) {
            return [',', '/', ' '];
        }
        return [',', ' ', '/'];
    }

    /**
     * @return int
     */
    public function getLineNo()
    {
        return $this->iLineNo;
    }

    /**
     * @return int
     */
    public function getColNo()
    {
        return $this->iColNo;
    }

    /**
     * @param int $iLine
     * @param int $iColumn
     *
     * @return void
     */
    public function setPosition($iLine, $iColumn)
    {
        $this->iColNo = $iColumn;
        $this->iLineNo = $iLine;
    }

    /**
     * @param string $sRule
     *
     * @return void
     */
    public function setRule($sRule)
    {
        $this->sRule = $sRule;
    }

    /**
     * @return string
     */
    public function getRule()
    {
        return $this->sRule;
    }

    /**
     * @return RuleValueList|string|null
     */
    public function getValue()
    {
        return $this->mValue;
    }

    /**
     * @param RuleValueList|string|null $mValue
     *
     * @return void
     */
    public function setValue($mValue)
    {
        $this->mValue = $mValue;
    }

    /**
     * @param array<array-key, array<array-key, RuleValueList>> $aSpaceSeparatedValues
     *
     * @return RuleValueList
     *
     * @deprecated will be removed in version 9.0
     *             Old-Style 2-dimensional array given. Retained for (some) backwards-compatibility.
     *             Use `setValue()` instead and wrap the value inside a RuleValueList if necessary.
     */
    public function setValues(array $aSpaceSeparatedValues)
    {
        $oSpaceSeparatedList = null;
        if (count($aSpaceSeparatedValues) > 1) {
            $oSpaceSeparatedList = new RuleValueList(' ', $this->iLineNo);
        }
        foreach ($aSpaceSeparatedValues as $aCommaSeparatedValues) {
            $oCommaSeparatedList = null;
            if (count($aCommaSeparatedValues) > 1) {
                $oCommaSeparatedList = new RuleValueList(',', $this->iLineNo);
            }
            foreach ($aCommaSeparatedValues as $mValue) {
                if (!$oSpaceSeparatedList && !$oCommaSeparatedList) {
                    $this->mValue = $mValue;
                    return $mValue;
                }
                if ($oCommaSeparatedList) {
                    $oCommaSeparatedList->addListComponent($mValue);
                } else {
                    $oSpaceSeparatedList->addListComponent($mValue);
                }
            }
            if (!$oSpaceSeparatedList) {
                $this->mValue = $oCommaSeparatedList;
                return $oCommaSeparatedList;
            } else {
                $oSpaceSeparatedList->addListComponent($oCommaSeparatedList);
            }
        }
        $this->mValue = $oSpaceSeparatedList;
        return $oSpaceSeparatedList;
    }

    /**
     * @return array<int, array<int, RuleValueList>>
     *
     * @deprecated will be removed in version 9.0
     *             Old-Style 2-dimensional array returned. Retained for (some) backwards-compatibility.
     *             Use `getValue()` instead and check for the existence of a (nested set of) ValueList object(s).
     */
    public function getValues()
    {
        if (!$this->mValue instanceof RuleValueList) {
            return [[$this->mValue]];
        }
        if ($this->mValue->getListSeparator() === ',') {
            return [$this->mValue->getListComponents()];
        }
        $aResult = [];
        foreach ($this->mValue->getListComponents() as $mValue) {
            if (!$mValue instanceof RuleValueList || $mValue->getListSeparator() !== ',') {
                $aResult[] = [$mValue];
                continue;
            }
            if ($this->mValue->getListSeparator() === ' ' || count($aResult) === 0) {
                $aResult[] = [];
            }
            foreach ($mValue->getListComponents() as $mValue) {
                $aResult[count($aResult) - 1][] = $mValue;
            }
        }
        return $aResult;
    }

    /**
     * Adds a value to the existing value. Value will be appended if a `RuleValueList` exists of the given type.
     * Otherwise, the existing value will be wrapped by one.
     *
     * @param RuleValueList|array<int, RuleValueList> $mValue
     * @param string $sType
     *
     * @return void
     */
    public function addValue($mValue, $sType = ' ')
    {
        if (!is_array($mValue)) {
            $mValue = [$mValue];
        }
        if (!$this->mValue instanceof RuleValueList || $this->mValue->getListSeparator() !== $sType) {
            $mCurrentValue = $this->mValue;
            $this->mValue = new RuleValueList($sType, $this->iLineNo);
            if ($mCurrentValue) {
                $this->mValue->addListComponent($mCurrentValue);
            }
        }
        foreach ($mValue as $mValueItem) {
            $this->mValue->addListComponent($mValueItem);
        }
    }

    /**
     * @param int $iModifier
     *
     * @return void
     */
    public function addIeHack($iModifier)
    {
        $this->aIeHack[] = $iModifier;
    }

    /**
     * @param array<int, int> $aModifiers
     *
     * @return void
     */
    public function setIeHack(array $aModifiers)
    {
        $this->aIeHack = $aModifiers;
    }

    /**
     * @return array<int, int>
     */
    public function getIeHack()
    {
        return $this->aIeHack;
    }

    /**
     * @param bool $bIsImportant
     *
     * @return void
     */
    public function setIsImportant($bIsImportant)
    {
        $this->bIsImportant = $bIsImportant;
    }

    /**
     * @return bool
     */
    public function getIsImportant()
    {
        return $this->bIsImportant;
    }

    /**
     * @return string
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @return string
     */
    public function render(OutputFormat $oOutputFormat)
    {
        $sResult = "{$oOutputFormat->comments($this)}{$this->sRule}:{$oOutputFormat->spaceAfterRuleName()}";
        if ($this->mValue instanceof Value) { // Can also be a ValueList
            $sResult .= $this->mValue->render($oOutputFormat);
        } else {
            $sResult .= $this->mValue;
        }
        if (!empty($this->aIeHack)) {
            $sResult .= ' \\' . implode('\\', $this->aIeHack);
        }
        if ($this->bIsImportant) {
            $sResult .= ' !important';
        }
        $sResult .= ';';
        return $sResult;
    }

    /**
     * @param array<array-key, Comment> $aComments
     *
     * @return void
     */
    public function addComments(array $aComments)
    {
        $this->aComments = array_merge($this->aComments, $aComments);
    }

    /**
     * @return array<array-key, Comment>
     */
    public function getComments()
    {
        return $this->aComments;
    }

    /**
     * @param array<array-key, Comment> $aComments
     *
     * @return void
     */
    public function setComments(array $aComments)
    {
        $this->aComments = $aComments;
    }
}
PK.3Y�492%%Ebunyad-amp/vendor/sabberworm/php-css-parser/src/RuleSet/AtRuleSet.php<?php

namespace Sabberworm\CSS\RuleSet;

use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Property\AtRule;

/**
 * This class represents rule sets for generic at-rules which are not covered by specific classes, i.e., not
 * `@import`, `@charset` or `@media`.
 *
 * A common example for this is `@font-face`.
 */
class AtRuleSet extends RuleSet implements AtRule
{
    /**
     * @var string
     */
    private $sType;

    /**
     * @var string
     */
    private $sArgs;

    /**
     * @param string $sType
     * @param string $sArgs
     * @param int $iLineNo
     */
    public function __construct($sType, $sArgs = '', $iLineNo = 0)
    {
        parent::__construct($iLineNo);
        $this->sType = $sType;
        $this->sArgs = $sArgs;
    }

    /**
     * @return string
     */
    public function atRuleName()
    {
        return $this->sType;
    }

    /**
     * @return string
     */
    public function atRuleArgs()
    {
        return $this->sArgs;
    }

    /**
     * @return string
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @return string
     */
    public function render(OutputFormat $oOutputFormat)
    {
        $sResult = $oOutputFormat->comments($this);
        $sArgs = $this->sArgs;
        if ($sArgs) {
            $sArgs = ' ' . $sArgs;
        }
        $sResult .= "@{$this->sType}$sArgs{$oOutputFormat->spaceBeforeOpeningBrace()}{";
        $sResult .= $this->renderRules($oOutputFormat);
        $sResult .= '}';
        return $sResult;
    }
}
PK.3YY8`DV�V�Lbunyad-amp/vendor/sabberworm/php-css-parser/src/RuleSet/DeclarationBlock.php<?php

namespace Sabberworm\CSS\RuleSet;

use Sabberworm\CSS\CSSList\CSSList;
use Sabberworm\CSS\CSSList\KeyFrame;
use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Parsing\OutputException;
use Sabberworm\CSS\Parsing\ParserState;
use Sabberworm\CSS\Parsing\UnexpectedEOFException;
use Sabberworm\CSS\Parsing\UnexpectedTokenException;
use Sabberworm\CSS\Property\KeyframeSelector;
use Sabberworm\CSS\Property\Selector;
use Sabberworm\CSS\Rule\Rule;
use Sabberworm\CSS\Value\Color;
use Sabberworm\CSS\Value\RuleValueList;
use Sabberworm\CSS\Value\Size;
use Sabberworm\CSS\Value\URL;
use Sabberworm\CSS\Value\Value;

/**
 * This class represents a `RuleSet` constrained by a `Selector`.
 *
 * It contains an array of selector objects (comma-separated in the CSS) as well as the rules to be applied to the
 * matching elements.
 *
 * Declaration blocks usually appear directly inside a `Document` or another `CSSList` (mostly a `MediaQuery`).
 */
class DeclarationBlock extends RuleSet
{
    /**
     * @var array<int, Selector|string>
     */
    private $aSelectors;

    /**
     * @param int $iLineNo
     */
    public function __construct($iLineNo = 0)
    {
        parent::__construct($iLineNo);
        $this->aSelectors = [];
    }

    /**
     * @param CSSList|null $oList
     *
     * @return DeclarationBlock|false
     *
     * @throws UnexpectedTokenException
     * @throws UnexpectedEOFException
     */
    public static function parse(ParserState $oParserState, $oList = null)
    {
        $aComments = [];
        $oResult = new DeclarationBlock($oParserState->currentLine());
        try {
            $aSelectorParts = [];
            $sStringWrapperChar = false;
            do {
                $aSelectorParts[] = $oParserState->consume(1)
                    . $oParserState->consumeUntil(['{', '}', '\'', '"'], false, false, $aComments);
                if (in_array($oParserState->peek(), ['\'', '"']) && substr(end($aSelectorParts), -1) != "\\") {
                    if ($sStringWrapperChar === false) {
                        $sStringWrapperChar = $oParserState->peek();
                    } elseif ($sStringWrapperChar == $oParserState->peek()) {
                        $sStringWrapperChar = false;
                    }
                }
            } while (!in_array($oParserState->peek(), ['{', '}']) || $sStringWrapperChar !== false);
            $oResult->setSelectors(implode('', $aSelectorParts), $oList);
            if ($oParserState->comes('{')) {
                $oParserState->consume(1);
            }
        } catch (UnexpectedTokenException $e) {
            if ($oParserState->getSettings()->bLenientParsing) {
                if (!$oParserState->comes('}')) {
                    $oParserState->consumeUntil('}', false, true);
                }
                return false;
            } else {
                throw $e;
            }
        }
        $oResult->setComments($aComments);
        RuleSet::parseRuleSet($oParserState, $oResult);
        return $oResult;
    }

    /**
     * @param array<int, Selector|string>|string $mSelector
     * @param CSSList|null $oList
     *
     * @throws UnexpectedTokenException
     */
    public function setSelectors($mSelector, $oList = null)
    {
        if (is_array($mSelector)) {
            $this->aSelectors = $mSelector;
        } else {
            list($sSelectors, $aPlaceholders) = $this->addSelectorExpressionPlaceholders($mSelector);
            if (empty($aPlaceholders)) {
                $this->aSelectors = explode(',', $sSelectors);
            } else {
                $aSearches = array_keys($aPlaceholders);
                $aReplaces = array_values($aPlaceholders);
                $this->aSelectors = array_map(
                    static function ($sSelector) use ($aSearches, $aReplaces) {
                        return str_replace($aSearches, $aReplaces, $sSelector);
                    },
                    explode(',', $sSelectors)
                );
            }
        }
        foreach ($this->aSelectors as $iKey => $mSelector) {
            if (!($mSelector instanceof Selector)) {
                if ($oList === null || !($oList instanceof KeyFrame)) {
                    if (!Selector::isValid($mSelector)) {
                        throw new UnexpectedTokenException(
                            "Selector did not match '" . Selector::SELECTOR_VALIDATION_RX . "'.",
                            $mSelector,
                            "custom"
                        );
                    }
                    $this->aSelectors[$iKey] = new Selector($mSelector);
                } else {
                    if (!KeyframeSelector::isValid($mSelector)) {
                        throw new UnexpectedTokenException(
                            "Selector did not match '" . KeyframeSelector::SELECTOR_VALIDATION_RX . "'.",
                            $mSelector,
                            "custom"
                        );
                    }
                    $this->aSelectors[$iKey] = new KeyframeSelector($mSelector);
                }
            }
        }
    }

    /**
     * Add placeholders for parenthetical expressions in selectors which may contain commas that break exploding.
     *
     * This prevents a single selector like `.widget:not(.foo, .bar)` from erroneously getting parsed in setSelectors as
     * two selectors `.widget:not(.foo` and `.bar)`.
     *
     * @param string $sSelectors Selectors.
     * @return array First array value is the selectors with placeholders, and second value is the array of placeholders
     *               mapped to the original expressions.
     */
    private function addSelectorExpressionPlaceholders($sSelectors)
    {
        $iOffset = 0;
        $aPlaceholders = [];

        while (preg_match('/\(|\[/', $sSelectors, $aMatches, PREG_OFFSET_CAPTURE, $iOffset)) {
            $sMatchString = $aMatches[0][0];
            $iMatchOffset = $aMatches[0][1];
            $iStyleLength = strlen($sSelectors);
            $iOpenParens  = 1;
            $iStartOffset = $iMatchOffset + strlen($sMatchString);
            $iFinalOffset = $iStartOffset;
            for (; $iFinalOffset < $iStyleLength; $iFinalOffset++) {
                if ('(' === $sSelectors[ $iFinalOffset ] || '[' === $sSelectors[ $iFinalOffset ]) {
                    $iOpenParens++;
                } elseif (')' === $sSelectors[ $iFinalOffset ] || ']' === $sSelectors[ $iFinalOffset ]) {
                    $iOpenParens--;
                }

                // Found the end of the expression, so replace it with a placeholder.
                if (0 === $iOpenParens) {
                    $sMatchedExpr = substr($sSelectors, $iMatchOffset, $iFinalOffset - $iMatchOffset + 1);
                    $sPlaceholder = sprintf('{placeholder:%d}', count($aPlaceholders) + 1);
                    $aPlaceholders[ $sPlaceholder ] = $sMatchedExpr;

                    // Update the CSS to replace the matched calc() with the placeholder function.
                    $sSelectors = substr($sSelectors, 0, $iMatchOffset)
                                . $sPlaceholder
                                . substr($sSelectors, $iFinalOffset + 1);
                    // Update offset based on difference of length of placeholder vs original matched calc().
                    $iFinalOffset += strlen($sPlaceholder) - strlen($sMatchedExpr);
                    break;
                }
            }
            // Start matching at the next byte after the match.
            $iOffset = $iFinalOffset + 1;
        }
        return [ $sSelectors, $aPlaceholders ];
    }

    /**
     * Remove one of the selectors of the block.
     *
     * @param Selector|string $mSelector
     *
     * @return bool
     */
    public function removeSelector($mSelector)
    {
        if ($mSelector instanceof Selector) {
            $mSelector = $mSelector->getSelector();
        }
        foreach ($this->aSelectors as $iKey => $oSelector) {
            if ($oSelector->getSelector() === $mSelector) {
                unset($this->aSelectors[$iKey]);
                return true;
            }
        }
        return false;
    }

    /**
     * @return array<int, Selector|string>
     *
     * @deprecated will be removed in version 9.0; use `getSelectors()` instead
     */
    public function getSelector()
    {
        return $this->getSelectors();
    }

    /**
     * @param Selector|string $mSelector
     * @param CSSList|null $oList
     *
     * @return void
     *
     * @deprecated will be removed in version 9.0; use `setSelectors()` instead
     */
    public function setSelector($mSelector, $oList = null)
    {
        $this->setSelectors($mSelector, $oList);
    }

    /**
     * @return array<int, Selector|string>
     */
    public function getSelectors()
    {
        return $this->aSelectors;
    }

    /**
     * Splits shorthand declarations (e.g. `margin` or `font`) into their constituent parts.
     *
     * @return void
     */
    public function expandShorthands()
    {
        // border must be expanded before dimensions
        $this->expandBorderShorthand();
        $this->expandDimensionsShorthand();
        $this->expandFontShorthand();
        $this->expandBackgroundShorthand();
        $this->expandListStyleShorthand();
    }

    /**
     * Creates shorthand declarations (e.g. `margin` or `font`) whenever possible.
     *
     * @return void
     */
    public function createShorthands()
    {
        $this->createBackgroundShorthand();
        $this->createDimensionsShorthand();
        // border must be shortened after dimensions
        $this->createBorderShorthand();
        $this->createFontShorthand();
        $this->createListStyleShorthand();
    }

    /**
     * Splits shorthand border declarations (e.g. `border: 1px red;`).
     *
     * Additional splitting happens in expandDimensionsShorthand.
     *
     * Multiple borders are not yet supported as of 3.
     *
     * @return void
     */
    public function expandBorderShorthand()
    {
        $aBorderRules = [
            'border',
            'border-left',
            'border-right',
            'border-top',
            'border-bottom',
        ];
        $aBorderSizes = [
            'thin',
            'medium',
            'thick',
        ];
        $aRules = $this->getRulesAssoc();
        foreach ($aBorderRules as $sBorderRule) {
            if (!isset($aRules[$sBorderRule])) {
                continue;
            }
            $oRule = $aRules[$sBorderRule];
            $mRuleValue = $oRule->getValue();
            $aValues = [];
            if (!$mRuleValue instanceof RuleValueList) {
                $aValues[] = $mRuleValue;
            } else {
                $aValues = $mRuleValue->getListComponents();
            }
            foreach ($aValues as $mValue) {
                if ($mValue instanceof Value) {
                    $mNewValue = clone $mValue;
                } else {
                    $mNewValue = $mValue;
                }
                if ($mValue instanceof Size) {
                    $sNewRuleName = $sBorderRule . "-width";
                } elseif ($mValue instanceof Color) {
                    $sNewRuleName = $sBorderRule . "-color";
                } else {
                    if (in_array($mValue, $aBorderSizes)) {
                        $sNewRuleName = $sBorderRule . "-width";
                    } else {
                        $sNewRuleName = $sBorderRule . "-style";
                    }
                }
                $oNewRule = new Rule($sNewRuleName, $oRule->getLineNo(), $oRule->getColNo());
                $oNewRule->setIsImportant($oRule->getIsImportant());
                $oNewRule->addValue([$mNewValue]);
                $this->addRule($oNewRule);
            }
            $this->removeRule($sBorderRule);
        }
    }

    /**
     * Splits shorthand dimensional declarations (e.g. `margin: 0px auto;`)
     * into their constituent parts.
     *
     * Handles `margin`, `padding`, `border-color`, `border-style` and `border-width`.
     *
     * @return void
     */
    public function expandDimensionsShorthand()
    {
        $aExpansions = [
            'margin' => 'margin-%s',
            'padding' => 'padding-%s',
            'border-color' => 'border-%s-color',
            'border-style' => 'border-%s-style',
            'border-width' => 'border-%s-width',
        ];
        $aRules = $this->getRulesAssoc();
        foreach ($aExpansions as $sProperty => $sExpanded) {
            if (!isset($aRules[$sProperty])) {
                continue;
            }
            $oRule = $aRules[$sProperty];
            $mRuleValue = $oRule->getValue();
            $aValues = [];
            if (!$mRuleValue instanceof RuleValueList) {
                $aValues[] = $mRuleValue;
            } else {
                $aValues = $mRuleValue->getListComponents();
            }
            $top = $right = $bottom = $left = null;
            switch (count($aValues)) {
                case 1:
                    $top = $right = $bottom = $left = $aValues[0];
                    break;
                case 2:
                    $top = $bottom = $aValues[0];
                    $left = $right = $aValues[1];
                    break;
                case 3:
                    $top = $aValues[0];
                    $left = $right = $aValues[1];
                    $bottom = $aValues[2];
                    break;
                case 4:
                    $top = $aValues[0];
                    $right = $aValues[1];
                    $bottom = $aValues[2];
                    $left = $aValues[3];
                    break;
            }
            foreach (['top', 'right', 'bottom', 'left'] as $sPosition) {
                $oNewRule = new Rule(sprintf($sExpanded, $sPosition), $oRule->getLineNo(), $oRule->getColNo());
                $oNewRule->setIsImportant($oRule->getIsImportant());
                $oNewRule->addValue(${$sPosition});
                $this->addRule($oNewRule);
            }
            $this->removeRule($sProperty);
        }
    }

    /**
     * Converts shorthand font declarations
     * (e.g. `font: 300 italic 11px/14px verdana, helvetica, sans-serif;`)
     * into their constituent parts.
     *
     * @return void
     */
    public function expandFontShorthand()
    {
        $aRules = $this->getRulesAssoc();
        if (!isset($aRules['font'])) {
            return;
        }
        $oRule = $aRules['font'];
        // reset properties to 'normal' per http://www.w3.org/TR/21/fonts.html#font-shorthand
        $aFontProperties = [
            'font-style' => 'normal',
            'font-variant' => 'normal',
            'font-weight' => 'normal',
            'font-size' => 'normal',
            'line-height' => 'normal',
        ];
        $mRuleValue = $oRule->getValue();
        $aValues = [];
        if (!$mRuleValue instanceof RuleValueList) {
            $aValues[] = $mRuleValue;
        } else {
            $aValues = $mRuleValue->getListComponents();
        }
        foreach ($aValues as $mValue) {
            if (!$mValue instanceof Value) {
                $mValue = mb_strtolower($mValue);
            }
            if (in_array($mValue, ['normal', 'inherit'])) {
                foreach (['font-style', 'font-weight', 'font-variant'] as $sProperty) {
                    if (!isset($aFontProperties[$sProperty])) {
                        $aFontProperties[$sProperty] = $mValue;
                    }
                }
            } elseif (in_array($mValue, ['italic', 'oblique'])) {
                $aFontProperties['font-style'] = $mValue;
            } elseif ($mValue == 'small-caps') {
                $aFontProperties['font-variant'] = $mValue;
            } elseif (
                in_array($mValue, ['bold', 'bolder', 'lighter'])
                || ($mValue instanceof Size
                    && in_array($mValue->getSize(), range(100, 900, 100)))
            ) {
                $aFontProperties['font-weight'] = $mValue;
            } elseif ($mValue instanceof RuleValueList && $mValue->getListSeparator() == '/') {
                list($oSize, $oHeight) = $mValue->getListComponents();
                $aFontProperties['font-size'] = $oSize;
                $aFontProperties['line-height'] = $oHeight;
            } elseif ($mValue instanceof Size && $mValue->getUnit() !== null) {
                $aFontProperties['font-size'] = $mValue;
            } else {
                $aFontProperties['font-family'] = $mValue;
            }
        }
        foreach ($aFontProperties as $sProperty => $mValue) {
            $oNewRule = new Rule($sProperty, $oRule->getLineNo(), $oRule->getColNo());
            $oNewRule->addValue($mValue);
            $oNewRule->setIsImportant($oRule->getIsImportant());
            $this->addRule($oNewRule);
        }
        $this->removeRule('font');
    }

    /**
     * Converts shorthand background declarations
     * (e.g. `background: url("chess.png") gray 50% repeat fixed;`)
     * into their constituent parts.
     *
     * @see http://www.w3.org/TR/21/colors.html#propdef-background
     *
     * @return void
     */
    public function expandBackgroundShorthand()
    {
        $aRules = $this->getRulesAssoc();
        if (!isset($aRules['background'])) {
            return;
        }
        $oRule = $aRules['background'];
        $aBgProperties = [
            'background-color' => ['transparent'],
            'background-image' => ['none'],
            'background-repeat' => ['repeat'],
            'background-attachment' => ['scroll'],
            'background-position' => [
                new Size(0, '%', null, false, $this->iLineNo),
                new Size(0, '%', null, false, $this->iLineNo),
            ],
        ];
        $mRuleValue = $oRule->getValue();
        $aValues = [];
        if (!$mRuleValue instanceof RuleValueList) {
            $aValues[] = $mRuleValue;
        } else {
            $aValues = $mRuleValue->getListComponents();
        }
        if (count($aValues) == 1 && $aValues[0] == 'inherit') {
            foreach ($aBgProperties as $sProperty => $mValue) {
                $oNewRule = new Rule($sProperty, $oRule->getLineNo(), $oRule->getColNo());
                $oNewRule->addValue('inherit');
                $oNewRule->setIsImportant($oRule->getIsImportant());
                $this->addRule($oNewRule);
            }
            $this->removeRule('background');
            return;
        }
        $iNumBgPos = 0;
        foreach ($aValues as $mValue) {
            if (!$mValue instanceof Value) {
                $mValue = mb_strtolower($mValue);
            }
            if ($mValue instanceof URL) {
                $aBgProperties['background-image'] = $mValue;
            } elseif ($mValue instanceof Color) {
                $aBgProperties['background-color'] = $mValue;
            } elseif (in_array($mValue, ['scroll', 'fixed'])) {
                $aBgProperties['background-attachment'] = $mValue;
            } elseif (in_array($mValue, ['repeat', 'no-repeat', 'repeat-x', 'repeat-y'])) {
                $aBgProperties['background-repeat'] = $mValue;
            } elseif (
                in_array($mValue, ['left', 'center', 'right', 'top', 'bottom'])
                || $mValue instanceof Size
            ) {
                if ($iNumBgPos == 0) {
                    $aBgProperties['background-position'][0] = $mValue;
                    $aBgProperties['background-position'][1] = 'center';
                } else {
                    $aBgProperties['background-position'][$iNumBgPos] = $mValue;
                }
                $iNumBgPos++;
            }
        }
        foreach ($aBgProperties as $sProperty => $mValue) {
            $oNewRule = new Rule($sProperty, $oRule->getLineNo(), $oRule->getColNo());
            $oNewRule->setIsImportant($oRule->getIsImportant());
            $oNewRule->addValue($mValue);
            $this->addRule($oNewRule);
        }
        $this->removeRule('background');
    }

    /**
     * @return void
     */
    public function expandListStyleShorthand()
    {
        $aListProperties = [
            'list-style-type' => 'disc',
            'list-style-position' => 'outside',
            'list-style-image' => 'none',
        ];
        $aListStyleTypes = [
            'none',
            'disc',
            'circle',
            'square',
            'decimal-leading-zero',
            'decimal',
            'lower-roman',
            'upper-roman',
            'lower-greek',
            'lower-alpha',
            'lower-latin',
            'upper-alpha',
            'upper-latin',
            'hebrew',
            'armenian',
            'georgian',
            'cjk-ideographic',
            'hiragana',
            'hira-gana-iroha',
            'katakana-iroha',
            'katakana',
        ];
        $aListStylePositions = [
            'inside',
            'outside',
        ];
        $aRules = $this->getRulesAssoc();
        if (!isset($aRules['list-style'])) {
            return;
        }
        $oRule = $aRules['list-style'];
        $mRuleValue = $oRule->getValue();
        $aValues = [];
        if (!$mRuleValue instanceof RuleValueList) {
            $aValues[] = $mRuleValue;
        } else {
            $aValues = $mRuleValue->getListComponents();
        }
        if (count($aValues) == 1 && $aValues[0] == 'inherit') {
            foreach ($aListProperties as $sProperty => $mValue) {
                $oNewRule = new Rule($sProperty, $oRule->getLineNo(), $oRule->getColNo());
                $oNewRule->addValue('inherit');
                $oNewRule->setIsImportant($oRule->getIsImportant());
                $this->addRule($oNewRule);
            }
            $this->removeRule('list-style');
            return;
        }
        foreach ($aValues as $mValue) {
            if (!$mValue instanceof Value) {
                $mValue = mb_strtolower($mValue);
            }
            if ($mValue instanceof Url) {
                $aListProperties['list-style-image'] = $mValue;
            } elseif (in_array($mValue, $aListStyleTypes)) {
                $aListProperties['list-style-types'] = $mValue;
            } elseif (in_array($mValue, $aListStylePositions)) {
                $aListProperties['list-style-position'] = $mValue;
            }
        }
        foreach ($aListProperties as $sProperty => $mValue) {
            $oNewRule = new Rule($sProperty, $oRule->getLineNo(), $oRule->getColNo());
            $oNewRule->setIsImportant($oRule->getIsImportant());
            $oNewRule->addValue($mValue);
            $this->addRule($oNewRule);
        }
        $this->removeRule('list-style');
    }

    /**
     * @param array<array-key, string> $aProperties
     * @param string $sShorthand
     *
     * @return void
     */
    public function createShorthandProperties(array $aProperties, $sShorthand)
    {
        $aRules = $this->getRulesAssoc();
        $aNewValues = [];
        foreach ($aProperties as $sProperty) {
            if (!isset($aRules[$sProperty])) {
                continue;
            }
            $oRule = $aRules[$sProperty];
            if (!$oRule->getIsImportant()) {
                $mRuleValue = $oRule->getValue();
                $aValues = [];
                if (!$mRuleValue instanceof RuleValueList) {
                    $aValues[] = $mRuleValue;
                } else {
                    $aValues = $mRuleValue->getListComponents();
                }
                foreach ($aValues as $mValue) {
                    $aNewValues[] = $mValue;
                }
                $this->removeRule($sProperty);
            }
        }
        if (count($aNewValues)) {
            $oNewRule = new Rule($sShorthand, $oRule->getLineNo(), $oRule->getColNo());
            foreach ($aNewValues as $mValue) {
                $oNewRule->addValue($mValue);
            }
            $this->addRule($oNewRule);
        }
    }

    /**
     * @return void
     */
    public function createBackgroundShorthand()
    {
        $aProperties = [
            'background-color',
            'background-image',
            'background-repeat',
            'background-position',
            'background-attachment',
        ];
        $this->createShorthandProperties($aProperties, 'background');
    }

    /**
     * @return void
     */
    public function createListStyleShorthand()
    {
        $aProperties = [
            'list-style-type',
            'list-style-position',
            'list-style-image',
        ];
        $this->createShorthandProperties($aProperties, 'list-style');
    }

    /**
     * Combines `border-color`, `border-style` and `border-width` into `border`.
     *
     * Should be run after `create_dimensions_shorthand`!
     *
     * @return void
     */
    public function createBorderShorthand()
    {
        $aProperties = [
            'border-width',
            'border-style',
            'border-color',
        ];
        $this->createShorthandProperties($aProperties, 'border');
    }

    /**
     * Looks for long format CSS dimensional properties
     * (margin, padding, border-color, border-style and border-width)
     * and converts them into shorthand CSS properties.
     *
     * @return void
     */
    public function createDimensionsShorthand()
    {
        $aPositions = ['top', 'right', 'bottom', 'left'];
        $aExpansions = [
            'margin' => 'margin-%s',
            'padding' => 'padding-%s',
            'border-color' => 'border-%s-color',
            'border-style' => 'border-%s-style',
            'border-width' => 'border-%s-width',
        ];
        $aRules = $this->getRulesAssoc();
        foreach ($aExpansions as $sProperty => $sExpanded) {
            $aFoldable = [];
            foreach ($aRules as $sRuleName => $oRule) {
                foreach ($aPositions as $sPosition) {
                    if ($sRuleName == sprintf($sExpanded, $sPosition)) {
                        $aFoldable[$sRuleName] = $oRule;
                    }
                }
            }
            // All four dimensions must be present
            if (count($aFoldable) == 4) {
                $aValues = [];
                foreach ($aPositions as $sPosition) {
                    $oRule = $aRules[sprintf($sExpanded, $sPosition)];
                    $mRuleValue = $oRule->getValue();
                    $aRuleValues = [];
                    if (!$mRuleValue instanceof RuleValueList) {
                        $aRuleValues[] = $mRuleValue;
                    } else {
                        $aRuleValues = $mRuleValue->getListComponents();
                    }
                    $aValues[$sPosition] = $aRuleValues;
                }
                $oNewRule = new Rule($sProperty, $oRule->getLineNo(), $oRule->getColNo());
                if ((string)$aValues['left'][0] == (string)$aValues['right'][0]) {
                    if ((string)$aValues['top'][0] == (string)$aValues['bottom'][0]) {
                        if ((string)$aValues['top'][0] == (string)$aValues['left'][0]) {
                            // All 4 sides are equal
                            $oNewRule->addValue($aValues['top']);
                        } else {
                            // Top and bottom are equal, left and right are equal
                            $oNewRule->addValue($aValues['top']);
                            $oNewRule->addValue($aValues['left']);
                        }
                    } else {
                        // Only left and right are equal
                        $oNewRule->addValue($aValues['top']);
                        $oNewRule->addValue($aValues['left']);
                        $oNewRule->addValue($aValues['bottom']);
                    }
                } else {
                    // No sides are equal
                    $oNewRule->addValue($aValues['top']);
                    $oNewRule->addValue($aValues['left']);
                    $oNewRule->addValue($aValues['bottom']);
                    $oNewRule->addValue($aValues['right']);
                }
                $this->addRule($oNewRule);
                foreach ($aPositions as $sPosition) {
                    $this->removeRule(sprintf($sExpanded, $sPosition));
                }
            }
        }
    }

    /**
     * Looks for long format CSS font properties (e.g. `font-weight`) and
     * tries to convert them into a shorthand CSS `font` property.
     *
     * At least `font-size` AND `font-family` must be present in order to create a shorthand declaration.
     *
     * @return void
     */
    public function createFontShorthand()
    {
        $aFontProperties = [
            'font-style',
            'font-variant',
            'font-weight',
            'font-size',
            'line-height',
            'font-family',
        ];
        $aRules = $this->getRulesAssoc();
        if (!isset($aRules['font-size']) || !isset($aRules['font-family'])) {
            return;
        }
        $oOldRule = isset($aRules['font-size']) ? $aRules['font-size'] : $aRules['font-family'];
        $oNewRule = new Rule('font', $oOldRule->getLineNo(), $oOldRule->getColNo());
        unset($oOldRule);
        foreach (['font-style', 'font-variant', 'font-weight'] as $sProperty) {
            if (isset($aRules[$sProperty])) {
                $oRule = $aRules[$sProperty];
                $mRuleValue = $oRule->getValue();
                $aValues = [];
                if (!$mRuleValue instanceof RuleValueList) {
                    $aValues[] = $mRuleValue;
                } else {
                    $aValues = $mRuleValue->getListComponents();
                }
                if ($aValues[0] !== 'normal') {
                    $oNewRule->addValue($aValues[0]);
                }
            }
        }
        // Get the font-size value
        $oRule = $aRules['font-size'];
        $mRuleValue = $oRule->getValue();
        $aFSValues = [];
        if (!$mRuleValue instanceof RuleValueList) {
            $aFSValues[] = $mRuleValue;
        } else {
            $aFSValues = $mRuleValue->getListComponents();
        }
        // But wait to know if we have line-height to add it
        if (isset($aRules['line-height'])) {
            $oRule = $aRules['line-height'];
            $mRuleValue = $oRule->getValue();
            $aLHValues = [];
            if (!$mRuleValue instanceof RuleValueList) {
                $aLHValues[] = $mRuleValue;
            } else {
                $aLHValues = $mRuleValue->getListComponents();
            }
            if ($aLHValues[0] !== 'normal') {
                $val = new RuleValueList('/', $this->iLineNo);
                $val->addListComponent($aFSValues[0]);
                $val->addListComponent($aLHValues[0]);
                $oNewRule->addValue($val);
            }
        } else {
            $oNewRule->addValue($aFSValues[0]);
        }
        $oRule = $aRules['font-family'];
        $mRuleValue = $oRule->getValue();
        $aFFValues = [];
        if (!$mRuleValue instanceof RuleValueList) {
            $aFFValues[] = $mRuleValue;
        } else {
            $aFFValues = $mRuleValue->getListComponents();
        }
        $oFFValue = new RuleValueList(',', $this->iLineNo);
        $oFFValue->setListComponents($aFFValues);
        $oNewRule->addValue($oFFValue);

        $this->addRule($oNewRule);
        foreach ($aFontProperties as $sProperty) {
            $this->removeRule($sProperty);
        }
    }

    /**
     * @return string
     *
     * @throws OutputException
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @return string
     *
     * @throws OutputException
     */
    public function render(OutputFormat $oOutputFormat)
    {
        $sResult = $oOutputFormat->comments($this);
        if (count($this->aSelectors) === 0) {
            // If all the selectors have been removed, this declaration block becomes invalid
            throw new OutputException("Attempt to print declaration block with missing selector", $this->iLineNo);
        }
        $sResult .= $oOutputFormat->sBeforeDeclarationBlock;
        $sResult .= $oOutputFormat->implode(
            $oOutputFormat->spaceBeforeSelectorSeparator() . ',' . $oOutputFormat->spaceAfterSelectorSeparator(),
            $this->aSelectors
        );
        $sResult .= $oOutputFormat->sAfterDeclarationBlockSelectors;
        $sResult .= $oOutputFormat->spaceBeforeOpeningBrace() . '{';
        $sResult .= $this->renderRules($oOutputFormat);
        $sResult .= '}';
        $sResult .= $oOutputFormat->sAfterDeclarationBlock;
        return $sResult;
    }
}
PK.3Y^]��+�+Cbunyad-amp/vendor/sabberworm/php-css-parser/src/RuleSet/RuleSet.php<?php

namespace Sabberworm\CSS\RuleSet;

use Sabberworm\CSS\Comment\Comment;
use Sabberworm\CSS\Comment\Commentable;
use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Parsing\ParserState;
use Sabberworm\CSS\Parsing\UnexpectedEOFException;
use Sabberworm\CSS\Parsing\UnexpectedTokenException;
use Sabberworm\CSS\Renderable;
use Sabberworm\CSS\Rule\Rule;

/**
 * This class is a container for individual 'Rule's.
 *
 * The most common form of a rule set is one constrained by a selector, i.e., a `DeclarationBlock`.
 * However, unknown `AtRule`s (like `@font-face`) are rule sets as well.
 *
 * If you want to manipulate a `RuleSet`, use the methods `addRule(Rule $rule)`, `getRules()` and `removeRule($rule)`
 * (which accepts either a `Rule` or a rule name; optionally suffixed by a dash to remove all related rules).
 */
abstract class RuleSet implements Renderable, Commentable
{
    /**
     * @var array<string, Rule>
     */
    private $aRules;

    /**
     * @var int
     */
    protected $iLineNo;

    /**
     * @var array<array-key, Comment>
     */
    protected $aComments;

    /**
     * @param int $iLineNo
     */
    public function __construct($iLineNo = 0)
    {
        $this->aRules = [];
        $this->iLineNo = $iLineNo;
        $this->aComments = [];
    }

    /**
     * @return void
     *
     * @throws UnexpectedTokenException
     * @throws UnexpectedEOFException
     */
    public static function parseRuleSet(ParserState $oParserState, RuleSet $oRuleSet)
    {
        while ($oParserState->comes(';')) {
            $oParserState->consume(';');
        }
        while (!$oParserState->comes('}')) {
            $oRule = null;
            if ($oParserState->getSettings()->bLenientParsing) {
                try {
                    $oRule = Rule::parse($oParserState);
                } catch (UnexpectedTokenException $e) {
                    try {
                        $sConsume = $oParserState->consumeUntil(["\n", ";", '}'], true);
                        // We need to “unfind” the matches to the end of the ruleSet as this will be matched later
                        if ($oParserState->streql(substr($sConsume, -1), '}')) {
                            $oParserState->backtrack(1);
                        } else {
                            while ($oParserState->comes(';')) {
                                $oParserState->consume(';');
                            }
                        }
                    } catch (UnexpectedTokenException $e) {
                        // We’ve reached the end of the document. Just close the RuleSet.
                        return;
                    }
                }
            } else {
                $oRule = Rule::parse($oParserState);
            }
            if ($oRule) {
                $oRuleSet->addRule($oRule);
            }
        }
        $oParserState->consume('}');
    }

    /**
     * @return int
     */
    public function getLineNo()
    {
        return $this->iLineNo;
    }

    /**
     * @param Rule|null $oSibling
     *
     * @return void
     */
    public function addRule(Rule $oRule, Rule $oSibling = null)
    {
        $sRule = $oRule->getRule();
        if (!isset($this->aRules[$sRule])) {
            $this->aRules[$sRule] = [];
        }

        $iPosition = count($this->aRules[$sRule]);

        if ($oSibling !== null) {
            $iSiblingPos = array_search($oSibling, $this->aRules[$sRule], true);
            if ($iSiblingPos !== false) {
                $iPosition = $iSiblingPos;
                $oRule->setPosition($oSibling->getLineNo(), $oSibling->getColNo() - 1);
            }
        }
        if ($oRule->getLineNo() === 0 && $oRule->getColNo() === 0) {
            //this node is added manually, give it the next best line
            $rules = $this->getRules();
            $pos = count($rules);
            if ($pos > 0) {
                $last = $rules[$pos - 1];
                $oRule->setPosition($last->getLineNo() + 1, 0);
            }
        }

        array_splice($this->aRules[$sRule], $iPosition, 0, [$oRule]);
    }

    /**
     * Returns all rules matching the given rule name
     *
     * @example $oRuleSet->getRules('font') // returns array(0 => $oRule, …) or array().
     *
     * @example $oRuleSet->getRules('font-')
     *          //returns an array of all rules either beginning with font- or matching font.
     *
     * @param Rule|string|null $mRule
     *        Pattern to search for. If null, returns all rules.
     *        If the pattern ends with a dash, all rules starting with the pattern are returned
     *        as well as one matching the pattern with the dash excluded.
     *        Passing a Rule behaves like calling `getRules($mRule->getRule())`.
     *
     * @return array<int, Rule>
     */
    public function getRules($mRule = null)
    {
        if ($mRule instanceof Rule) {
            $mRule = $mRule->getRule();
        }
        /** @var array<int, Rule> $aResult */
        $aResult = [];
        foreach ($this->aRules as $sName => $aRules) {
            // Either no search rule is given or the search rule matches the found rule exactly
            // or the search rule ends in “-” and the found rule starts with the search rule.
            if (
                !$mRule || $sName === $mRule
                || (
                    strrpos($mRule, '-') === strlen($mRule) - strlen('-')
                    && (strpos($sName, $mRule) === 0 || $sName === substr($mRule, 0, -1))
                )
            ) {
                $aResult = array_merge($aResult, $aRules);
            }
        }
        usort($aResult, function (Rule $first, Rule $second) {
            if ($first->getLineNo() === $second->getLineNo()) {
                return $first->getColNo() - $second->getColNo();
            }
            return $first->getLineNo() - $second->getLineNo();
        });
        return $aResult;
    }

    /**
     * Overrides all the rules of this set.
     *
     * @param array<array-key, Rule> $aRules The rules to override with.
     *
     * @return void
     */
    public function setRules(array $aRules)
    {
        $this->aRules = [];
        foreach ($aRules as $rule) {
            $this->addRule($rule);
        }
    }

    /**
     * Returns all rules matching the given pattern and returns them in an associative array with the rule’s name
     * as keys. This method exists mainly for backwards-compatibility and is really only partially useful.
     *
     * Note: This method loses some information: Calling this (with an argument of `background-`) on a declaration block
     * like `{ background-color: green; background-color; rgba(0, 127, 0, 0.7); }` will only yield an associative array
     * containing the rgba-valued rule while `getRules()` would yield an indexed array containing both.
     *
     * @param Rule|string|null $mRule $mRule
     *        Pattern to search for. If null, returns all rules. If the pattern ends with a dash,
     *        all rules starting with the pattern are returned as well as one matching the pattern with the dash
     *        excluded. Passing a Rule behaves like calling `getRules($mRule->getRule())`.
     *
     * @return array<string, Rule>
     */
    public function getRulesAssoc($mRule = null)
    {
        /** @var array<string, Rule> $aResult */
        $aResult = [];
        foreach ($this->getRules($mRule) as $oRule) {
            $aResult[$oRule->getRule()] = $oRule;
        }
        return $aResult;
    }

    /**
     * Removes a rule from this RuleSet. This accepts all the possible values that `getRules()` accepts.
     *
     * If given a Rule, it will only remove this particular rule (by identity).
     * If given a name, it will remove all rules by that name.
     *
     * Note: this is different from pre-v.2.0 behaviour of PHP-CSS-Parser, where passing a Rule instance would
     * remove all rules with the same name. To get the old behaviour, use `removeRule($oRule->getRule())`.
     *
     * @param Rule|string|null $mRule
     *        pattern to remove. If $mRule is null, all rules are removed. If the pattern ends in a dash,
     *        all rules starting with the pattern are removed as well as one matching the pattern with the dash
     *        excluded. Passing a Rule behaves matches by identity.
     *
     * @return void
     */
    public function removeRule($mRule)
    {
        if ($mRule instanceof Rule) {
            $sRule = $mRule->getRule();
            if (!isset($this->aRules[$sRule])) {
                return;
            }
            foreach ($this->aRules[$sRule] as $iKey => $oRule) {
                if ($oRule === $mRule) {
                    unset($this->aRules[$sRule][$iKey]);
                }
            }
        } else {
            foreach ($this->aRules as $sName => $aRules) {
                // Either no search rule is given or the search rule matches the found rule exactly
                // or the search rule ends in “-” and the found rule starts with the search rule or equals it
                // (without the trailing dash).
                if (
                    !$mRule || $sName === $mRule
                    || (strrpos($mRule, '-') === strlen($mRule) - strlen('-')
                        && (strpos($sName, $mRule) === 0 || $sName === substr($mRule, 0, -1)))
                ) {
                    unset($this->aRules[$sName]);
                }
            }
        }
    }

    /**
     * @return string
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @return string
     */
    protected function renderRules(OutputFormat $oOutputFormat)
    {
        $sResult = '';
        $bIsFirst = true;
        $oNextLevel = $oOutputFormat->nextLevel();
        foreach ($this->aRules as $aRules) {
            foreach ($aRules as $oRule) {
                $sRendered = $oNextLevel->safely(function () use ($oRule, $oNextLevel) {
                    return $oRule->render($oNextLevel);
                });
                if ($sRendered === null) {
                    continue;
                }
                if ($bIsFirst) {
                    $bIsFirst = false;
                    $sResult .= $oNextLevel->spaceBeforeRules();
                } else {
                    $sResult .= $oNextLevel->spaceBetweenRules();
                }
                $sResult .= $sRendered;
            }
        }

        if (!$bIsFirst) {
            // Had some output
            $sResult .= $oOutputFormat->spaceAfterRules();
        }

        return $oOutputFormat->removeLastSemicolon($sResult);
    }

    /**
     * @param array<string, Comment> $aComments
     *
     * @return void
     */
    public function addComments(array $aComments)
    {
        $this->aComments = array_merge($this->aComments, $aComments);
    }

    /**
     * @return array<string, Comment>
     */
    public function getComments()
    {
        return $this->aComments;
    }

    /**
     * @param array<string, Comment> $aComments
     *
     * @return void
     */
    public function setComments(array $aComments)
    {
        $this->aComments = $aComments;
    }
}
PK.3Y�3�NNFbunyad-amp/vendor/sabberworm/php-css-parser/src/Value/CalcFunction.php<?php

namespace Sabberworm\CSS\Value;

use Sabberworm\CSS\Parsing\ParserState;
use Sabberworm\CSS\Parsing\UnexpectedEOFException;
use Sabberworm\CSS\Parsing\UnexpectedTokenException;

class CalcFunction extends CSSFunction
{
    /**
     * @var int
     */
    const T_OPERAND = 1;

    /**
     * @var int
     */
    const T_OPERATOR = 2;

    /**
     * @param ParserState $oParserState
     * @param bool $bIgnoreCase
     *
     * @return CalcFunction
     *
     * @throws UnexpectedTokenException
     * @throws UnexpectedEOFException
     */
    public static function parse(ParserState $oParserState, $bIgnoreCase = false)
    {
        $aOperators = ['+', '-', '*', '/'];
        $sFunction = $oParserState->parseIdentifier();
        if ($oParserState->peek() != '(') {
            // Found ; or end of line before an opening bracket
            throw new UnexpectedTokenException('(', $oParserState->peek(), 'literal', $oParserState->currentLine());
        } elseif (!in_array($sFunction, ['calc', '-moz-calc', '-webkit-calc'])) {
            // Found invalid calc definition. Example calc (...
            throw new UnexpectedTokenException('calc', $sFunction, 'literal', $oParserState->currentLine());
        }
        $oParserState->consume('(');
        $oCalcList = new CalcRuleValueList($oParserState->currentLine());
        $oList = new RuleValueList(',', $oParserState->currentLine());
        $iNestingLevel = 0;
        $iLastComponentType = null;
        while (!$oParserState->comes(')') || $iNestingLevel > 0) {
            if ($oParserState->isEnd() && $iNestingLevel === 0) {
                break;
            }

            $oParserState->consumeWhiteSpace();
            if ($oParserState->comes('(')) {
                $iNestingLevel++;
                $oCalcList->addListComponent($oParserState->consume(1));
                $oParserState->consumeWhiteSpace();
                continue;
            } elseif ($oParserState->comes(')')) {
                $iNestingLevel--;
                $oCalcList->addListComponent($oParserState->consume(1));
                $oParserState->consumeWhiteSpace();
                continue;
            }
            if ($iLastComponentType != CalcFunction::T_OPERAND) {
                $oVal = Value::parsePrimitiveValue($oParserState);
                $oCalcList->addListComponent($oVal);
                $iLastComponentType = CalcFunction::T_OPERAND;
            } else {
                if (in_array($oParserState->peek(), $aOperators)) {
                    if (($oParserState->comes('-') || $oParserState->comes('+'))) {
                        if (
                            $oParserState->peek(1, -1) != ' '
                            || !($oParserState->comes('- ')
                                || $oParserState->comes('+ '))
                        ) {
                            throw new UnexpectedTokenException(
                                " {$oParserState->peek()} ",
                                $oParserState->peek(1, -1) . $oParserState->peek(2),
                                'literal',
                                $oParserState->currentLine()
                            );
                        }
                    }
                    $oCalcList->addListComponent($oParserState->consume(1));
                    $iLastComponentType = CalcFunction::T_OPERATOR;
                } else {
                    throw new UnexpectedTokenException(
                        sprintf(
                            'Next token was expected to be an operand of type %s. Instead "%s" was found.',
                            implode(', ', $aOperators),
                            $oVal
                        ),
                        '',
                        'custom',
                        $oParserState->currentLine()
                    );
                }
            }
            $oParserState->consumeWhiteSpace();
        }
        $oList->addListComponent($oCalcList);
        if (!$oParserState->isEnd()) {
            $oParserState->consume(')');
        }
        return new CalcFunction($sFunction, $oList, ',', $oParserState->currentLine());
    }
}
PK.3Y>�em��Kbunyad-amp/vendor/sabberworm/php-css-parser/src/Value/CalcRuleValueList.php<?php

namespace Sabberworm\CSS\Value;

use Sabberworm\CSS\OutputFormat;

class CalcRuleValueList extends RuleValueList
{
    /**
     * @param int $iLineNo
     */
    public function __construct($iLineNo = 0)
    {
        parent::__construct(',', $iLineNo);
    }

    /**
     * @return string
     */
    public function render(OutputFormat $oOutputFormat)
    {
        return $oOutputFormat->implode(' ', $this->aComponents);
    }
}
PK.3Y��#��?bunyad-amp/vendor/sabberworm/php-css-parser/src/Value/Color.php<?php

namespace Sabberworm\CSS\Value;

use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Parsing\ParserState;
use Sabberworm\CSS\Parsing\UnexpectedEOFException;
use Sabberworm\CSS\Parsing\UnexpectedTokenException;

/**
 * `Color's can be input in the form #rrggbb, #rgb or schema(val1, val2, …) but are always stored as an array of
 * ('s' => val1, 'c' => val2, 'h' => val3, …) and output in the second form.
 */
class Color extends CSSFunction
{
    /**
     * @param array<int, RuleValueList|CSSFunction|CSSString|LineName|Size|URL|string> $aColor
     * @param int $iLineNo
     */
    public function __construct(array $aColor, $iLineNo = 0)
    {
        parent::__construct(implode('', array_keys($aColor)), $aColor, ',', $iLineNo);
    }

    /**
     * @param ParserState $oParserState
     * @param bool $bIgnoreCase
     *
     * @return Color|CSSFunction
     *
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     */
    public static function parse(ParserState $oParserState, $bIgnoreCase = false)
    {
        $aColor = [];
        if ($oParserState->comes('#')) {
            $oParserState->consume('#');
            $sValue = $oParserState->parseIdentifier(false, false);
            if ($oParserState->strlen($sValue) === 3) {
                $sValue = $sValue[0] . $sValue[0] . $sValue[1] . $sValue[1] . $sValue[2] . $sValue[2];
            } elseif ($oParserState->strlen($sValue) === 4) {
                $sValue = $sValue[0] . $sValue[0] . $sValue[1] . $sValue[1] . $sValue[2] . $sValue[2] . $sValue[3]
                    . $sValue[3];
            }

            if ($oParserState->strlen($sValue) === 8) {
                $aColor = [
                    'r' => new Size(intval($sValue[0] . $sValue[1], 16), null, true, $oParserState->currentLine()),
                    'g' => new Size(intval($sValue[2] . $sValue[3], 16), null, true, $oParserState->currentLine()),
                    'b' => new Size(intval($sValue[4] . $sValue[5], 16), null, true, $oParserState->currentLine()),
                    'a' => new Size(
                        round(self::mapRange(intval($sValue[6] . $sValue[7], 16), 0, 255, 0, 1), 2),
                        null,
                        true,
                        $oParserState->currentLine()
                    ),
                ];
            } else {
                $aColor = [
                    'r' => new Size(intval($sValue[0] . $sValue[1], 16), null, true, $oParserState->currentLine()),
                    'g' => new Size(intval($sValue[2] . $sValue[3], 16), null, true, $oParserState->currentLine()),
                    'b' => new Size(intval($sValue[4] . $sValue[5], 16), null, true, $oParserState->currentLine()),
                ];
            }
        } else {
            $sColorMode = $oParserState->parseIdentifier(true);
            $oParserState->consumeWhiteSpace();
            $oParserState->consume('(');

            $bContainsVar = false;
            $iLength = $oParserState->strlen($sColorMode);
            for ($i = 0; $i < $iLength; ++$i) {
                $oParserState->consumeWhiteSpace();
                if ($oParserState->comes('var')) {
                    $aColor[$sColorMode[$i]] = CSSFunction::parseIdentifierOrFunction($oParserState);
                    $bContainsVar = true;
                } else {
                    $aColor[$sColorMode[$i]] = Size::parse($oParserState, true);
                }

                if ($bContainsVar && $oParserState->comes(')')) {
                    // With a var argument the function can have fewer arguments
                    break;
                }

                $oParserState->consumeWhiteSpace();
                if ($i < ($iLength - 1)) {
                    $oParserState->consume(',');
                }
            }
            $oParserState->consume(')');

            if ($bContainsVar) {
                return new CSSFunction($sColorMode, array_values($aColor), ',', $oParserState->currentLine());
            }
        }
        return new Color($aColor, $oParserState->currentLine());
    }

    /**
     * @param float $fVal
     * @param float $fFromMin
     * @param float $fFromMax
     * @param float $fToMin
     * @param float $fToMax
     *
     * @return float
     */
    private static function mapRange($fVal, $fFromMin, $fFromMax, $fToMin, $fToMax)
    {
        $fFromRange = $fFromMax - $fFromMin;
        $fToRange = $fToMax - $fToMin;
        $fMultiplier = $fToRange / $fFromRange;
        $fNewVal = $fVal - $fFromMin;
        $fNewVal *= $fMultiplier;
        return $fNewVal + $fToMin;
    }

    /**
     * @return array<int, RuleValueList|CSSFunction|CSSString|LineName|Size|URL|string>
     */
    public function getColor()
    {
        return $this->aComponents;
    }

    /**
     * @param array<int, RuleValueList|CSSFunction|CSSString|LineName|Size|URL|string> $aColor
     *
     * @return void
     */
    public function setColor(array $aColor)
    {
        $this->setName(implode('', array_keys($aColor)));
        $this->aComponents = $aColor;
    }

    /**
     * @return string
     */
    public function getColorDescription()
    {
        return $this->getName();
    }

    /**
     * @return string
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @return string
     */
    public function render(OutputFormat $oOutputFormat)
    {
        // Shorthand RGB color values
        if ($oOutputFormat->getRGBHashNotation() && implode('', array_keys($this->aComponents)) === 'rgb') {
            $sResult = sprintf(
                '%02x%02x%02x',
                $this->aComponents['r']->getSize(),
                $this->aComponents['g']->getSize(),
                $this->aComponents['b']->getSize()
            );
            return '#' . (($sResult[0] == $sResult[1]) && ($sResult[2] == $sResult[3]) && ($sResult[4] == $sResult[5])
                    ? "$sResult[0]$sResult[2]$sResult[4]" : $sResult);
        }
        return parent::render($oOutputFormat);
    }
}
PK.3Y��3���Ebunyad-amp/vendor/sabberworm/php-css-parser/src/Value/CSSFunction.php<?php

namespace Sabberworm\CSS\Value;

use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Parsing\ParserState;

/**
 * A `CSSFunction` represents a special kind of value that also contains a function name and where the values are the
 * function’s arguments. It also handles equals-sign-separated argument lists like `filter: alpha(opacity=90);`.
 */
class CSSFunction extends ValueList
{
    /**
     * @var string
     */
    protected $sName;

    /**
     * @param string $sName
     * @param RuleValueList|array<int, RuleValueList|CSSFunction|CSSString|LineName|Size|URL|string> $aArguments
     * @param string $sSeparator
     * @param int $iLineNo
     */
    public function __construct($sName, $aArguments, $sSeparator = ',', $iLineNo = 0)
    {
        if ($aArguments instanceof RuleValueList) {
            $sSeparator = $aArguments->getListSeparator();
            $aArguments = $aArguments->getListComponents();
        }
        $this->sName = $sName;
        $this->iLineNo = $iLineNo;
        parent::__construct($aArguments, $sSeparator, $iLineNo);
    }

    /**
     * @param ParserState $oParserState
     * @param bool $bIgnoreCase
     *
     * @return string
     *
     * @throws SourceException
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     */
    public static function parseName(ParserState $oParserState, $bIgnoreCase = false)
    {
        return $oParserState->parseIdentifier($bIgnoreCase);
    }

    /**
     * @param ParserState $oParserState
     *
     * @return array
     *
     * @throws SourceException
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     */
    public static function parseArgs(ParserState $oParserState)
    {
        return Value::parseValue($oParserState, ['=', ' ', ',']);
    }

    /**
     * @param ParserState $oParserState
     * @param bool $bIgnoreCase
     *
     * @return CSSFunction
     *
     * @throws SourceException
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     */
    public static function parse(ParserState $oParserState, $bIgnoreCase = false)
    {
        $mResult = self::parseName($oParserState, $bIgnoreCase);
        $oParserState->consume('(');
        $aArguments = self::parseArgs($oParserState);
        $mResult = new CSSFunction($mResult, $aArguments, ',', $oParserState->currentLine());
        $oParserState->consume(')');
        return $mResult;
    }

    /**
     * @return string
     */
    public function getName()
    {
        return $this->sName;
    }

    /**
     * @param string $sName
     *
     * @return void
     */
    public function setName($sName)
    {
        $this->sName = $sName;
    }

    /**
     * @return array<int, RuleValueList|CSSFunction|CSSString|LineName|Size|URL|string>
     */
    public function getArguments()
    {
        return $this->aComponents;
    }

    /**
     * @return string
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @return string
     */
    public function render(OutputFormat $oOutputFormat)
    {
        $aArguments = parent::render($oOutputFormat);
        return "{$this->sName}({$aArguments})";
    }
}
PK.3Y8�_�55Cbunyad-amp/vendor/sabberworm/php-css-parser/src/Value/CSSString.php<?php

namespace Sabberworm\CSS\Value;

use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Parsing\ParserState;
use Sabberworm\CSS\Parsing\SourceException;
use Sabberworm\CSS\Parsing\UnexpectedEOFException;
use Sabberworm\CSS\Parsing\UnexpectedTokenException;

/**
 * This class is a wrapper for quoted strings to distinguish them from keywords.
 *
 * `CSSString`s always output with double quotes.
 */
class CSSString extends PrimitiveValue
{
    /**
     * @var string
     */
    private $sString;

    /**
     * @param string $sString
     * @param int $iLineNo
     */
    public function __construct($sString, $iLineNo = 0)
    {
        $this->sString = $sString;
        parent::__construct($iLineNo);
    }

    /**
     * @return CSSString
     *
     * @throws SourceException
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     */
    public static function parse(ParserState $oParserState)
    {
        $sBegin = $oParserState->peek();
        $sQuote = null;
        if ($sBegin === "'") {
            $sQuote = "'";
        } elseif ($sBegin === '"') {
            $sQuote = '"';
        }
        if ($sQuote !== null) {
            $oParserState->consume($sQuote);
        }
        $sResult = "";
        $sContent = null;
        if ($sQuote === null) {
            // Unquoted strings end in whitespace or with braces, brackets, parentheses
            while (!preg_match('/[\\s{}()<>\\[\\]]/isu', $oParserState->peek())) {
                $sResult .= $oParserState->parseCharacter(false);
            }
        } else {
            while (!$oParserState->comes($sQuote)) {
                $sContent = $oParserState->parseCharacter(false);
                if ($sContent === null) {
                    throw new SourceException(
                        "Non-well-formed quoted string {$oParserState->peek(3)}",
                        $oParserState->currentLine()
                    );
                }
                $sResult .= $sContent;
            }
            $oParserState->consume($sQuote);
        }
        return new CSSString($sResult, $oParserState->currentLine());
    }

    /**
     * @param string $sString
     *
     * @return void
     */
    public function setString($sString)
    {
        $this->sString = $sString;
    }

    /**
     * @return string
     */
    public function getString()
    {
        return $this->sString;
    }

    /**
     * @return string
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @return string
     */
    public function render(OutputFormat $oOutputFormat)
    {
        $sString = addslashes($this->sString);
        $sString = str_replace("\n", '\A', $sString);
        return $oOutputFormat->getStringQuotingType() . $sString . $oOutputFormat->getStringQuotingType();
    }
}
PK.3YSv�wuuDbunyad-amp/vendor/sabberworm/php-css-parser/src/Value/Expression.php<?php

namespace Sabberworm\CSS\Value;

use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Parsing\ParserState;

/**
 * An `Expression` represents a special kind of value that is comprised of multiple components wrapped in parenthesis.
 * Examle `height: (vh - 10);`.
 */
class Expression extends CSSFunction
{
    /**
     * @param ParserState $oParserState
     * @param bool $bIgnoreCase
     *
     * @return Expression
     *
     * @throws SourceException
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     */
    public static function parse(ParserState $oParserState, $bIgnoreCase = false)
    {
        $oParserState->consume('(');
        $aArguments = self::parseArgs($oParserState);
        $mResult = new Expression("", $aArguments, ',', $oParserState->currentLine());
        $oParserState->consume(')');
        return $mResult;
    }
}
PK.3Yԙ��		Bbunyad-amp/vendor/sabberworm/php-css-parser/src/Value/LineName.php<?php

namespace Sabberworm\CSS\Value;

use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Parsing\ParserState;
use Sabberworm\CSS\Parsing\UnexpectedEOFException;
use Sabberworm\CSS\Parsing\UnexpectedTokenException;

class LineName extends ValueList
{
    /**
     * @param array<int, RuleValueList|CSSFunction|CSSString|LineName|Size|URL|string> $aComponents
     * @param int $iLineNo
     */
    public function __construct(array $aComponents = [], $iLineNo = 0)
    {
        parent::__construct($aComponents, ' ', $iLineNo);
    }

    /**
     * @return LineName
     *
     * @throws UnexpectedTokenException
     * @throws UnexpectedEOFException
     */
    public static function parse(ParserState $oParserState)
    {
        $oParserState->consume('[');
        $oParserState->consumeWhiteSpace();
        $aNames = [];
        do {
            if ($oParserState->getSettings()->bLenientParsing) {
                try {
                    $aNames[] = $oParserState->parseIdentifier();
                } catch (UnexpectedTokenException $e) {
                    if (!$oParserState->comes(']')) {
                        throw $e;
                    }
                }
            } else {
                $aNames[] = $oParserState->parseIdentifier();
            }
            $oParserState->consumeWhiteSpace();
        } while (!$oParserState->comes(']'));
        $oParserState->consume(']');
        return new LineName($aNames, $oParserState->currentLine());
    }

    /**
     * @return string
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @return string
     */
    public function render(OutputFormat $oOutputFormat)
    {
        return '[' . parent::render(OutputFormat::createCompact()) . ']';
    }
}
PK.3Ys3����Hbunyad-amp/vendor/sabberworm/php-css-parser/src/Value/PrimitiveValue.php<?php

namespace Sabberworm\CSS\Value;

abstract class PrimitiveValue extends Value
{
    /**
     * @param int $iLineNo
     */
    public function __construct($iLineNo = 0)
    {
        parent::__construct($iLineNo);
    }
}
PK.3Y�(:�,,Gbunyad-amp/vendor/sabberworm/php-css-parser/src/Value/RuleValueList.php<?php

namespace Sabberworm\CSS\Value;

/**
 * This class is used to represent all multivalued rules like `font: bold 12px/3 Helvetica, Verdana, sans-serif;`
 * (where the value would be a whitespace-separated list of the primitive value `bold`, a slash-separated list
 * and a comma-separated list).
 */
class RuleValueList extends ValueList
{
    /**
     * @param string $sSeparator
     * @param int $iLineNo
     */
    public function __construct($sSeparator = ',', $iLineNo = 0)
    {
        parent::__construct([], $sSeparator, $iLineNo);
    }
}
PK.3Y�+׋��>bunyad-amp/vendor/sabberworm/php-css-parser/src/Value/Size.php<?php

namespace Sabberworm\CSS\Value;

use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Parsing\ParserState;
use Sabberworm\CSS\Parsing\UnexpectedEOFException;
use Sabberworm\CSS\Parsing\UnexpectedTokenException;

/**
 * A `Size` consists of a numeric `size` value and a unit.
 */
class Size extends PrimitiveValue
{
    /**
     * vh/vw/vm(ax)/vmin/rem are absolute insofar as they don’t scale to the immediate parent (only the viewport)
     *
     * @var array<int, string>
     */
    const ABSOLUTE_SIZE_UNITS = ['px', 'cm', 'mm', 'mozmm', 'in', 'pt', 'pc', 'vh', 'vw', 'vmin', 'vmax', 'rem'];

    /**
     * @var array<int, string>
     */
    const RELATIVE_SIZE_UNITS = ['%', 'em', 'ex', 'ch', 'fr'];

    /**
     * @var array<int, string>
     */
    const NON_SIZE_UNITS = ['deg', 'grad', 'rad', 's', 'ms', 'turn', 'Hz', 'kHz'];

    /**
     * @var array<int, array<string, string>>|null
     */
    private static $SIZE_UNITS = null;

    /**
     * @var float
     */
    private $fSize;

    /**
     * @var string|null
     */
    private $sUnit;

    /**
     * @var bool
     */
    private $bIsColorComponent;

    /**
     * @param float|int|string $fSize
     * @param string|null $sUnit
     * @param bool $bIsColorComponent
     * @param int $iLineNo
     */
    public function __construct($fSize, $sUnit = null, $bIsColorComponent = false, $iLineNo = 0)
    {
        parent::__construct($iLineNo);
        $this->fSize = (float)$fSize;
        $this->sUnit = $sUnit;
        $this->bIsColorComponent = $bIsColorComponent;
    }

    /**
     * @param bool $bIsColorComponent
     *
     * @return Size
     *
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     */
    public static function parse(ParserState $oParserState, $bIsColorComponent = false)
    {
        $sSize = '';
        if ($oParserState->comes('-')) {
            $sSize .= $oParserState->consume('-');
        }
        while (is_numeric($oParserState->peek()) || $oParserState->comes('.') || $oParserState->comes('e', true)) {
            if ($oParserState->comes('.')) {
                $sSize .= $oParserState->consume('.');
            } elseif ($oParserState->comes('e', true)) {
                $sLookahead = $oParserState->peek(1, 1);
                if (is_numeric($sLookahead) || $sLookahead === '+' || $sLookahead === '-') {
                    $sSize .= $oParserState->consume(2);
                } else {
                    break; // Reached the unit part of the number like "em" or "ex"
                }
            } else {
                $sSize .= $oParserState->consume(1);
            }
        }

        $sUnit = null;
        $aSizeUnits = self::getSizeUnits();
        foreach ($aSizeUnits as $iLength => &$aValues) {
            $sKey = strtolower($oParserState->peek($iLength));
            if (array_key_exists($sKey, $aValues)) {
                if (($sUnit = $aValues[$sKey]) !== null) {
                    $oParserState->consume($iLength);
                    break;
                }
            }
        }
        return new Size((float)$sSize, $sUnit, $bIsColorComponent, $oParserState->currentLine());
    }

    /**
     * @return array<int, array<string, string>>
     */
    private static function getSizeUnits()
    {
        if (!is_array(self::$SIZE_UNITS)) {
            self::$SIZE_UNITS = [];
            foreach (array_merge(self::ABSOLUTE_SIZE_UNITS, self::RELATIVE_SIZE_UNITS, self::NON_SIZE_UNITS) as $val) {
                $iSize = strlen($val);
                if (!isset(self::$SIZE_UNITS[$iSize])) {
                    self::$SIZE_UNITS[$iSize] = [];
                }
                self::$SIZE_UNITS[$iSize][strtolower($val)] = $val;
            }

            krsort(self::$SIZE_UNITS, SORT_NUMERIC);
        }

        return self::$SIZE_UNITS;
    }

    /**
     * @param string $sUnit
     *
     * @return void
     */
    public function setUnit($sUnit)
    {
        $this->sUnit = $sUnit;
    }

    /**
     * @return string|null
     */
    public function getUnit()
    {
        return $this->sUnit;
    }

    /**
     * @param float|int|string $fSize
     */
    public function setSize($fSize)
    {
        $this->fSize = (float)$fSize;
    }

    /**
     * @return float
     */
    public function getSize()
    {
        return $this->fSize;
    }

    /**
     * @return bool
     */
    public function isColorComponent()
    {
        return $this->bIsColorComponent;
    }

    /**
     * Returns whether the number stored in this Size really represents a size (as in a length of something on screen).
     *
     * @return false if the unit an angle, a duration, a frequency or the number is a component in a Color object.
     */
    public function isSize()
    {
        if (in_array($this->sUnit, self::NON_SIZE_UNITS, true)) {
            return false;
        }
        return !$this->isColorComponent();
    }

    /**
     * @return bool
     */
    public function isRelative()
    {
        if (in_array($this->sUnit, self::RELATIVE_SIZE_UNITS, true)) {
            return true;
        }
        if ($this->sUnit === null && $this->fSize != 0) {
            return true;
        }
        return false;
    }

    /**
     * @return string
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @return string
     */
    public function render(OutputFormat $oOutputFormat)
    {
        $l = localeconv();
        $sPoint = preg_quote($l['decimal_point'], '/');
        $sSize = preg_match("/[\d\.]+e[+-]?\d+/i", (string)$this->fSize)
            ? preg_replace("/$sPoint?0+$/", "", sprintf("%f", $this->fSize)) : $this->fSize;
        return preg_replace(["/$sPoint/", "/^(-?)0\./"], ['.', '$1.'], $sSize)
            . ($this->sUnit === null ? '' : $this->sUnit);
    }
}
PK.3YZ/f���=bunyad-amp/vendor/sabberworm/php-css-parser/src/Value/URL.php<?php

namespace Sabberworm\CSS\Value;

use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Parsing\ParserState;
use Sabberworm\CSS\Parsing\SourceException;
use Sabberworm\CSS\Parsing\UnexpectedEOFException;
use Sabberworm\CSS\Parsing\UnexpectedTokenException;

/**
 * This class represents URLs in CSS. `URL`s always output in `URL("")` notation.
 */
class URL extends PrimitiveValue
{
    /**
     * @var CSSString
     */
    private $oURL;

    /**
     * @param int $iLineNo
     */
    public function __construct(CSSString $oURL, $iLineNo = 0)
    {
        parent::__construct($iLineNo);
        $this->oURL = $oURL;
    }

    /**
     * @return URL
     *
     * @throws SourceException
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     */
    public static function parse(ParserState $oParserState)
    {
        $oAnchor = $oParserState->anchor();
        $sIdentifier = '';
        for ($i = 0; $i < 3; $i++) {
            $sChar = $oParserState->parseCharacter(true);
            if ($sChar === null) {
                break;
            }
            $sIdentifier .= $sChar;
        }
        $bUseUrl = $oParserState->streql($sIdentifier, 'url');
        if ($bUseUrl) {
            $oParserState->consumeWhiteSpace();
            $oParserState->consume('(');
        } else {
            $oAnchor->backtrack();
        }
        $oParserState->consumeWhiteSpace();
        $oResult = new URL(CSSString::parse($oParserState), $oParserState->currentLine());
        if ($bUseUrl) {
            $oParserState->consumeWhiteSpace();
            $oParserState->consume(')');
        }
        return $oResult;
    }

    /**
     * @return void
     */
    public function setURL(CSSString $oURL)
    {
        $this->oURL = $oURL;
    }

    /**
     * @return CSSString
     */
    public function getURL()
    {
        return $this->oURL;
    }

    /**
     * @return string
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @return string
     */
    public function render(OutputFormat $oOutputFormat)
    {
        return "url({$this->oURL->render($oOutputFormat)})";
    }
}
PK.3Y�����?bunyad-amp/vendor/sabberworm/php-css-parser/src/Value/Value.php<?php

namespace Sabberworm\CSS\Value;

use Sabberworm\CSS\Parsing\ParserState;
use Sabberworm\CSS\Parsing\SourceException;
use Sabberworm\CSS\Parsing\UnexpectedEOFException;
use Sabberworm\CSS\Parsing\UnexpectedTokenException;
use Sabberworm\CSS\Renderable;

/**
 * Abstract base class for specific classes of CSS values: `Size`, `Color`, `CSSString` and `URL`, and another
 * abstract subclass `ValueList`.
 */
abstract class Value implements Renderable
{
    /**
     * @var int
     */
    protected $iLineNo;

    /**
     * @param int $iLineNo
     */
    public function __construct($iLineNo = 0)
    {
        $this->iLineNo = $iLineNo;
    }

    /**
     * @param array<array-key, string> $aListDelimiters
     *
     * @return RuleValueList|CSSFunction|CSSString|LineName|Size|URL|string
     *
     * @throws UnexpectedTokenException
     * @throws UnexpectedEOFException
     */
    public static function parseValue(ParserState $oParserState, array $aListDelimiters = [])
    {
        /** @var array<int, RuleValueList|CSSFunction|CSSString|LineName|Size|URL|string> $aStack */
        $aStack = [];
        $oParserState->consumeWhiteSpace();
        //Build a list of delimiters and parsed values
        while (
            !($oParserState->comes('}') || $oParserState->comes(';') || $oParserState->comes('!')
            || $oParserState->comes(')')
            || $oParserState->comes('\\')
            || $oParserState->isEnd())
        ) {
            if (count($aStack) > 0) {
                $bFoundDelimiter = false;
                foreach ($aListDelimiters as $sDelimiter) {
                    if ($oParserState->comes($sDelimiter)) {
                        array_push($aStack, $oParserState->consume($sDelimiter));
                        $oParserState->consumeWhiteSpace();
                        $bFoundDelimiter = true;
                        break;
                    }
                }
                if (!$bFoundDelimiter) {
                    //Whitespace was the list delimiter
                    array_push($aStack, ' ');
                }
            }
            array_push($aStack, self::parsePrimitiveValue($oParserState));
            $oParserState->consumeWhiteSpace();
        }
        // Convert the list to list objects
        foreach ($aListDelimiters as $sDelimiter) {
            if (count($aStack) === 1) {
                return $aStack[0];
            }
            $iStartPosition = null;
            while (($iStartPosition = array_search($sDelimiter, $aStack, true)) !== false) {
                $iLength = 2; //Number of elements to be joined
                for ($i = $iStartPosition + 2; $i < count($aStack); $i += 2, ++$iLength) {
                    if ($sDelimiter !== $aStack[$i]) {
                        break;
                    }
                }
                $oList = new RuleValueList($sDelimiter, $oParserState->currentLine());
                for ($i = $iStartPosition - 1; $i - $iStartPosition + 1 < $iLength * 2; $i += 2) {
                    $oList->addListComponent($aStack[$i]);
                }
                array_splice($aStack, $iStartPosition - 1, $iLength * 2 - 1, [$oList]);
            }
        }
        if (!isset($aStack[0])) {
            throw new UnexpectedTokenException(
                " {$oParserState->peek()} ",
                $oParserState->peek(1, -1) . $oParserState->peek(2),
                'literal',
                $oParserState->currentLine()
            );
        }
        return $aStack[0];
    }

    /**
     * @param bool $bIgnoreCase
     *
     * @return CSSFunction|string
     *
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     */
    public static function parseIdentifierOrFunction(ParserState $oParserState, $bIgnoreCase = false)
    {
        $oAnchor = $oParserState->anchor();
        $mResult = $oParserState->parseIdentifier($bIgnoreCase);

        if ($oParserState->comes('(')) {
            $oAnchor->backtrack();
            if ($oParserState->streql('url', $mResult)) {
                $mResult = URL::parse($oParserState);
            } elseif (
                $oParserState->streql('calc', $mResult)
                || $oParserState->streql('-webkit-calc', $mResult)
                || $oParserState->streql('-moz-calc', $mResult)
            ) {
                $mResult = CalcFunction::parse($oParserState);
            } else {
                $mResult = CSSFunction::parse($oParserState, $bIgnoreCase);
            }
        }

        return $mResult;
    }

    /**
     * @return CSSFunction|CSSString|LineName|Size|URL|string
     *
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     * @throws SourceException
     */
    public static function parsePrimitiveValue(ParserState $oParserState)
    {
        $oValue = null;
        $oParserState->consumeWhiteSpace();
        if (
            is_numeric($oParserState->peek())
            || ($oParserState->comes('-.')
                && is_numeric($oParserState->peek(1, 2)))
            || (($oParserState->comes('-') || $oParserState->comes('.')) && is_numeric($oParserState->peek(1, 1)))
        ) {
            $oValue = Size::parse($oParserState);
        } elseif ($oParserState->comes('#') || $oParserState->comes('rgb', true) || $oParserState->comes('hsl', true)) {
            $oValue = Color::parse($oParserState);
        } elseif ($oParserState->comes("'") || $oParserState->comes('"')) {
            $oValue = CSSString::parse($oParserState);
        } elseif ($oParserState->comes("progid:") && $oParserState->getSettings()->bLenientParsing) {
            $oValue = self::parseMicrosoftFilter($oParserState);
        } elseif ($oParserState->comes("[")) {
            $oValue = LineName::parse($oParserState);
        } elseif ($oParserState->comes("U+")) {
            $oValue = self::parseUnicodeRangeValue($oParserState);
        } elseif ($oParserState->comes("(")) {
            $oValue = Expression::parse($oParserState);
        } else {
            $sNextChar = $oParserState->peek(1);
            try {
                $oValue = self::parseIdentifierOrFunction($oParserState);
            } catch (UnexpectedTokenException $e) {
                if (in_array($sNextChar, ['+', '-', '*', '/'])) {
                    $oValue = $oParserState->consume(1);
                } else {
                    throw $e;
                }
            }
        }
        $oParserState->consumeWhiteSpace();
        return $oValue;
    }

    /**
     * @return CSSFunction
     *
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     */
    private static function parseMicrosoftFilter(ParserState $oParserState)
    {
        $sFunction = $oParserState->consumeUntil('(', false, true);
        $aArguments = Value::parseValue($oParserState, [',', '=']);
        return new CSSFunction($sFunction, $aArguments, ',', $oParserState->currentLine());
    }

    /**
     * @return string
     *
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     */
    private static function parseUnicodeRangeValue(ParserState $oParserState)
    {
        $iCodepointMaxLength = 6; // Code points outside BMP can use up to six digits
        $sRange = "";
        $oParserState->consume("U+");
        do {
            if ($oParserState->comes('-')) {
                $iCodepointMaxLength = 13; // Max length is 2 six digit code points + the dash(-) between them
            }
            $sRange .= $oParserState->consume(1);
        } while (strlen($sRange) < $iCodepointMaxLength && preg_match("/[A-Fa-f0-9\?-]/", $oParserState->peek()));
        return "U+{$sRange}";
    }

    /**
     * @return int
     */
    public function getLineNo()
    {
        return $this->iLineNo;
    }
}
PK.3Y�8��0
0
Cbunyad-amp/vendor/sabberworm/php-css-parser/src/Value/ValueList.php<?php

namespace Sabberworm\CSS\Value;

use Sabberworm\CSS\OutputFormat;

/**
 * A `ValueList` represents a lists of `Value`s, separated by some separation character
 * (mostly `,`, whitespace, or `/`).
 *
 * There are two types of `ValueList`s: `RuleValueList` and `CSSFunction`
 */
abstract class ValueList extends Value
{
    /**
     * @var array<int, RuleValueList|CSSFunction|CSSString|LineName|Size|URL|string>
     */
    protected $aComponents;

    /**
     * @var string
     */
    protected $sSeparator;

    /**
     * phpcs:ignore Generic.Files.LineLength
     * @param array<int, RuleValueList|CSSFunction|CSSString|LineName|Size|URL|string>|RuleValueList|CSSFunction|CSSString|LineName|Size|URL|string $aComponents
     * @param string $sSeparator
     * @param int $iLineNo
     */
    public function __construct($aComponents = [], $sSeparator = ',', $iLineNo = 0)
    {
        parent::__construct($iLineNo);
        if (!is_array($aComponents)) {
            $aComponents = [$aComponents];
        }
        $this->aComponents = $aComponents;
        $this->sSeparator = $sSeparator;
    }

    /**
     * @param RuleValueList|CSSFunction|CSSString|LineName|Size|URL|string $mComponent
     *
     * @return void
     */
    public function addListComponent($mComponent)
    {
        $this->aComponents[] = $mComponent;
    }

    /**
     * @return array<int, RuleValueList|CSSFunction|CSSString|LineName|Size|URL|string>
     */
    public function getListComponents()
    {
        return $this->aComponents;
    }

    /**
     * @param array<int, RuleValueList|CSSFunction|CSSString|LineName|Size|URL|string> $aComponents
     *
     * @return void
     */
    public function setListComponents(array $aComponents)
    {
        $this->aComponents = $aComponents;
    }

    /**
     * @return string
     */
    public function getListSeparator()
    {
        return $this->sSeparator;
    }

    /**
     * @param string $sSeparator
     *
     * @return void
     */
    public function setListSeparator($sSeparator)
    {
        $this->sSeparator = $sSeparator;
    }

    /**
     * @return string
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @return string
     */
    public function render(OutputFormat $oOutputFormat)
    {
        return $oOutputFormat->implode(
            $oOutputFormat->spaceBeforeListArgumentSeparator($this->sSeparator) . $this->sSeparator
            . $oOutputFormat->spaceAfterListArgumentSeparator($this->sSeparator),
            $this->aComponents
        );
    }
}
PK.3Y�r

;bunyad-amp/vendor/willwashburn/stream/src/Stream/Stream.php<?php namespace WillWashburn\Stream;

use WillWashburn\Stream\Exception\StreamBufferTooSmallException;


/**
 * Class Stream
 *
 * @package FasterImage
 */
class Stream implements StreamableInterface
{
    /**
     * The string that we have downloaded so far
     */
    protected $stream_string = '';

    /**
     * The pointer in the string
     *
     * @var int
     */
    protected $strpos = 0;

    /**
     * Get characters from the string but don't move the pointer
     *
     * @param $characters
     *
     * @return string
     * @throws StreamBufferTooSmallException
     */
    public function peek($characters)
    {
        if ( strlen($this->stream_string) < $this->strpos + $characters ) {
            throw new StreamBufferTooSmallException('Not enough of the stream available.');
        }

        return substr($this->stream_string, $this->strpos, $characters);
    }

    /**
     * Get Characters from the string
     *
     * @param $characters
     *
     * @return string
     * @throws StreamBufferTooSmallException
     */
    public function read($characters)
    {
        $result = $this->peek($characters);

        $this->strpos += $characters;

        return $result;
    }

    /**
     * Resets the pointer to the 0 position
     *
     * @return mixed
     */
    public function resetPointer()
    {
        $this->strpos = 0;
    }

    /**
     * Append to the stream string
     *
     * @param $string
     */
    public function write($string)
    {
        $this->stream_string .= $string;
    }
}PK.3Y�g>���Hbunyad-amp/vendor/willwashburn/stream/src/Stream/StreamableInterface.php<?php namespace WillWashburn\Stream;

/**
 * Interface StreamableInterface
 *
 * @package FasterImage
 */
interface StreamableInterface {

    /**
     * Append to the stream string
     *
     * @param $string
     */
    public function write($string);

    /**
     * Get Characters from the string
     *
     * @param $characters
     */
    public function read($characters);

    /**
     * Get characters from the string but don't move the pointer
     *
     * @param $characters
     *
     * @return mixed
     */
    public function peek($characters);

    /**
     * Resets the pointer to the 0 position
     * @return mixed
     */
    public function resetPointer();

}PK.3Y@T�M��\bunyad-amp/vendor/willwashburn/stream/src/Stream/Exception/StreamBufferTooSmallException.php<?php namespace WillWashburn\Stream\Exception;

/**
 * Class StreamBufferTooSmallException
 *
 * @package WillWashburn\Stream\Exception
 */
class StreamBufferTooSmallException extends \Exception {}PK.3Y5{���bunyad-amp/amp.phpPK.3Y1��u&
&
��Kbunyad-amp/bunyad-amp.phpPK.3Y)�m�FF���%bunyad-amp/LICENSEPK.3Y��@�,�,��Wlbunyad-amp/readme.txtPK.3Yߜ�����%�bunyad-amp/uninstall.phpPK.3Y�Sn��*��C�bunyad-amp/assets/css/admin-tables-rtl.cssPK.3YS4���&��V�bunyad-amp/assets/css/admin-tables.cssPK.3Y�hk�yy'��d�bunyad-amp/assets/css/amp-admin-rtl.cssPK.3YwGC�xx#��"�bunyad-amp/assets/css/amp-admin.cssPK.3Y�-O�pp.��ۯbunyad-amp/assets/css/amp-block-editor-rtl.cssPK.3YwюDoo*����bunyad-amp/assets/css/amp-block-editor.cssPK.3Y&-y,,2��N�bunyad-amp/assets/css/amp-block-validation-rtl.cssPK.3Y$^((.����bunyad-amp/assets/css/amp-block-validation.cssPK.3Y�8�~~3��>�bunyad-amp/assets/css/amp-customizer-legacy-rtl.cssPK.3Y�҃�ww/��
�bunyad-amp/assets/css/amp-customizer-legacy.cssPK.3Yx榔ss,����bunyad-amp/assets/css/amp-customizer-rtl.cssPK.3Yl�P(ss(����bunyad-amp/assets/css/amp-customizer.cssPK.3Y9D�Y  )��G�bunyad-amp/assets/css/amp-default-rtl.cssPK.3Y9D�Y  %���bunyad-amp/assets/css/amp-default.cssPK.3Yԙɱ��'��bunyad-amp/assets/css/amp-icons-rtl.cssPK.3Yм_٩�#��bunyad-amp/assets/css/amp-icons.cssPK.3Y5�2�::9���bunyad-amp/assets/css/amp-mobile-version-switcher-rtl.cssPK.3Y��Ǝ995��{bunyad-amp/assets/css/amp-mobile-version-switcher.cssPK.3Yj ��QqQq3��bunyad-amp/assets/css/amp-onboarding-wizard-rtl.cssPK.3Y�cv�GqGq/����bunyad-amp/assets/css/amp-onboarding-wizard.cssPK.3Y��b �	�	5��=bunyad-amp/assets/css/amp-paired-browsing-app-rtl.cssPK.3Yl#��	�	1���
bunyad-amp/assets/css/amp-paired-browsing-app.cssPK.3Y�����4���bunyad-amp/assets/css/amp-playlist-shortcode-rtl.cssPK.3Y�!ĝ�0���bunyad-amp/assets/css/amp-playlist-shortcode.cssPK.3Y��Hp��/���bunyad-amp/assets/css/amp-post-meta-box-rtl.cssPK.3Y�0X���+���bunyad-amp/assets/css/amp-post-meta-box.cssPK.3Y
� ~~*��|bunyad-amp/assets/css/amp-settings-rtl.cssPK.3Y
�l\�}�}&��Ĝbunyad-amp/assets/css/amp-settings.cssPK.3Y=��2���bunyad-amp/assets/css/amp-site-scan-notice-rtl.cssPK.3Y���U��.���#bunyad-amp/assets/css/amp-site-scan-notice.cssPK.3Yb�]�+(+()���,bunyad-amp/assets/css/amp-support-rtl.cssPK.3Y��Ӹ,(,(%��2Ubunyad-amp/assets/css/amp-support.cssPK.3Y����3���}bunyad-amp/assets/css/amp-validation-counts-rtl.cssPK.3Y�?��/���bunyad-amp/assets/css/amp-validation-counts.cssPK.3Y
�MP�"�";���bunyad-amp/assets/css/amp-validation-error-taxonomy-rtl.cssPK.3Ye���"�"7��!�bunyad-amp/assets/css/amp-validation-error-taxonomy.cssPK.3Y6�f=��P�bunyad-amp/assets/css/amp-validation-single-error-url-rtl.cssPK.3Y��`9����bunyad-amp/assets/css/amp-validation-single-error-url.cssPK.3Y=g�]]5��0�bunyad-amp/assets/css/amp-validation-tooltips-rtl.cssPK.3Y=g�]]1����bunyad-amp/assets/css/amp-validation-tooltips.cssPK.3Y�/}��[�[+����bunyad-amp/assets/css/wp-components-rtl.cssPK.3YBP]�[�['��\6bunyad-amp/assets/css/wp-components.cssPK.3Y�\��6�6'��H�bunyad-amp/assets/fonts/genericons.woffPK.3Y�'Ч��5��1�bunyad-amp/assets/fonts/nonbreakingspaceoverride.woffPK.3YFQ���6��@�bunyad-amp/assets/fonts/nonbreakingspaceoverride.woff2PK.3Y��vu__&����bunyad-amp/assets/images/amp-alert.svgPK.3Y��߾��+��3�bunyad-amp/assets/images/amp-black-icon.svgPK.3Y(���/��5�bunyad-amp/assets/images/amp-css-error-icon.svgPK.3YN~�oo'��;�bunyad-amp/assets/images/amp-delete.svgPK.3Y�݄�YY0����bunyad-amp/assets/images/amp-html-error-icon.svgPK.3Y/B�}��-����bunyad-amp/assets/images/amp-icon-toolbar.svgPK.3Y��3��%��c�bunyad-amp/assets/images/amp-icon.svgPK.3Yd����.����bunyad-amp/assets/images/amp-js-error-icon.svgPK.3Y�sI}��*��N�bunyad-amp/assets/images/amp-logo-gray.svgPK.3Y%%*��2�bunyad-amp/assets/images/amp-logo-icon.svgPK.3Yb���n�nG����bunyad-amp/assets/images/amp-page-fallback-wordpress-publisher-logo.pngPK.3Y<
%	��4���_bunyad-amp/assets/images/amp-toolbar-icon-broken.svgPK.3Yׁ=PP&���dbunyad-amp/assets/images/amp-valid.svgPK.3Yv�K�gg7��wfbunyad-amp/assets/images/amp-validation-errors-kept.svgPK.3Y�����2��3mbunyad-amp/assets/images/amp-validation-errors.svgPK.3Y!$ kk+��}bunyad-amp/assets/images/amp-white-icon.svgPK.3Y����55&��ǁbunyad-amp/assets/images/bell-icon.svgPK.3Y���ٖ�*��@�bunyad-amp/assets/images/down-triangle.svgPK.3Y'�\��-���bunyad-amp/assets/images/placeholder-icon.pngPK.3Y��2�vivi1��\�bunyad-amp/assets/images/reader-themes/legacy.jpgPK.3Yq	9�D�D7��!�bunyad-amp/assets/images/reader-themes/twentyeleven.jpgPK.3Yz��d�d8��S4bunyad-amp/assets/images/reader-themes/twentyfifteen.jpgPK.3Y��|�k�k9����bunyad-amp/assets/images/reader-themes/twentyfourteen.jpgPK.3Y��U��1�19���	bunyad-amp/assets/images/reader-themes/twentynineteen.jpgPK.3Y\=��:�::���7	bunyad-amp/assets/images/reader-themes/twentyseventeen.jpgPK.3Y]���M�M8���r	bunyad-amp/assets/images/reader-themes/twentysixteen.jpgPK.3Y�@:W}B}B9���	bunyad-amp/assets/images/reader-themes/twentythirteen.jpgPK.3Y�t~�`�`7���
bunyad-amp/assets/images/reader-themes/twentytwelve.jpgPK.3Y���r(r(7��e
bunyad-amp/assets/images/reader-themes/twentytwenty.jpgPK.3Y�Q�<J<J:���
bunyad-amp/assets/images/reader-themes/twentytwentyone.jpgPK.3Y�`p�		/��y�
bunyad-amp/assets/js/amp-block-editor.asset.phpPK.3Y�OC����(����
bunyad-amp/assets/js/amp-block-editor.jsPK.3Y=xS���3��ņbunyad-amp/assets/js/amp-block-validation.asset.phpPK.3Y����͇͇,���bunyad-amp/assets/js/amp-block-validation.jsPK.3Y���D]]<��,bunyad-amp/assets/js/amp-customize-controls-legacy.asset.phpPK.3YV�'225���bunyad-amp/assets/js/amp-customize-controls-legacy.jsPK.3Y�.!gg5��h$bunyad-amp/assets/js/amp-customize-controls.asset.phpPK.3Ye�^�66.��"%bunyad-amp/assets/js/amp-customize-controls.jsPK.3Y��$TT;���<bunyad-amp/assets/js/amp-customize-preview-legacy.asset.phpPK.3Y�ij��4��Q=bunyad-amp/assets/js/amp-customize-preview-legacy.jsPK.3Y!�u�TTC��l>bunyad-amp/assets/js/amp-customizer-design-preview-legacy.asset.phpPK.3Y pKd��<��!?bunyad-amp/assets/js/amp-customizer-design-preview-legacy.jsPK.3YYb��4��*Ebunyad-amp/assets/js/amp-onboarding-wizard.asset.phpPK.3YC�D��A�A-��Fbunyad-amp/assets/js/amp-onboarding-wizard.jsPK.3YH��Q\\6��C�bunyad-amp/assets/js/amp-paired-browsing-app.asset.phpPK.3Y��c&��/���bunyad-amp/assets/js/amp-paired-browsing-app.jsPK.3Y�X,bb9��Ġbunyad-amp/assets/js/amp-paired-browsing-client.asset.phpPK.3Y��Ǜ��2��}�bunyad-amp/assets/js/amp-paired-browsing-client.jsPK.3Y-c��ww1��s�bunyad-amp/assets/js/amp-plugin-install.asset.phpPK.3YM�U		*��9�bunyad-amp/assets/js/amp-plugin-install.jsPK.3Y�5TT0����bunyad-amp/assets/js/amp-post-meta-box.asset.phpPK.3YW0_K)��,�bunyad-amp/assets/js/amp-post-meta-box.jsPK.3Y�y/��=����bunyad-amp/assets/js/amp-service-worker-runtime-precaching.jsPK.3Y�ZZ�ww+����bunyad-amp/assets/js/amp-settings.asset.phpPK.3Y5����1�1$��C�bunyad-amp/assets/js/amp-settings.jsPK.3YP�v���3���)bunyad-amp/assets/js/amp-site-scan-notice.asset.phpPK.3Y��_�I�I,���)bunyad-amp/assets/js/amp-site-scan-notice.jsPK.3YA.:�bb*���7*bunyad-amp/assets/js/amp-support.asset.phpPK.3Yڸ��Z<Z<#���8*bunyad-amp/assets/js/amp-support.jsPK.3Y���Jmm0��>u.bunyad-amp/assets/js/amp-theme-install.asset.phpPK.3Y(V�|�	�	)���u.bunyad-amp/assets/js/amp-theme-install.jsPK.3Y�P0mmA���.bunyad-amp/assets/js/amp-validated-url-post-edit-screen.asset.phpPK.3Y��\7�=�=:��݀.bunyad-amp/assets/js/amp-validated-url-post-edit-screen.jsPK.3Y�P�q}}4��ھ.bunyad-amp/assets/js/amp-validation-counts.asset.phpPK.3YP��$��-����.bunyad-amp/assets/js/amp-validation-counts.jsPK.3Y�x;mm;����.bunyad-amp/assets/js/amp-validation-detail-toggle.asset.phpPK.3Yq�t��4��^�.bunyad-amp/assets/js/amp-validation-detail-toggle.jsPK.3YQ59�bbF��y�.bunyad-amp/assets/js/amp-validation-single-error-url-details.asset.phpPK.3YX:eL&	&	?��?�.bunyad-amp/assets/js/amp-validation-single-error-url-details.jsPK.3Yd� �pp6����.bunyad-amp/assets/js/amp-validation-tooltips.asset.phpPK.3Y��ք==/����.bunyad-amp/assets/js/amp-validation-tooltips.jsPK.3Y�;�hTT1���.bunyad-amp/assets/js/mobile-redirection.asset.phpPK.3Y����gg*����.bunyad-amp/assets/js/mobile-redirection.jsPK.3Y��|d]]+��b�.bunyad-amp/assets/js/wp-api-fetch.asset.phpPK.3Y��;�;$���.bunyad-amp/assets/js/wp-api-fetch.jsPK.3YB`�FTT+��/bunyad-amp/assets/js/wp-dom-ready.asset.phpPK.3Y�~���$���/bunyad-amp/assets/js/wp-dom-ready.jsPK.3Y-G	�TT'��� /bunyad-amp/assets/js/wp-hooks.asset.phpPK.3Y~4C��� ��)!/bunyad-amp/assets/js/wp-hooks.jsPK.3Y��/�TT/���1/bunyad-amp/assets/js/wp-html-entities.asset.phpPK.3YOD�H��(���2/bunyad-amp/assets/js/wp-html-entities.jsPK.3Yd:��TT&���5/bunyad-amp/assets/js/wp-i18n.asset.phpPK.3Y|?
�-1-1��_6/bunyad-amp/assets/js/wp-i18n.jsPK.3Y�(
yTT*���g/bunyad-amp/assets/js/wp-polyfill.asset.phpPK.3Y�m	I�I�#��eh/bunyad-amp/assets/js/wp-polyfill.jsPK.3Y�3�TT%���/1bunyad-amp/assets/js/wp-url.asset.phpPK.3YW��������01bunyad-amp/assets/js/wp-url.jsPK.3YͿ�/oo%���P1bunyad-amp/assets/js/vendor/lodash.jsPK.3Y��h���&��gd2bunyad-amp/back-compat/back-compat.phpPK.3Y�����4���i2bunyad-amp/back-compat/templates-v0-3/header-bar.phpPK.3YU\1���5���k2bunyad-amp/back-compat/templates-v0-3/meta-author.phpPK.3Y!DM**7��n2bunyad-amp/back-compat/templates-v0-3/meta-taxonomy.phpPK.3Y�
^(��3���q2bunyad-amp/back-compat/templates-v0-3/meta-time.phpPK.3Y�z��0���s2bunyad-amp/back-compat/templates-v0-3/single.phpPK.3Y��sQ

/���y2bunyad-amp/back-compat/templates-v0-3/style.phpPK.3Y�T,����2bunyad-amp/includes/amp-frontend-actions.phpPK.3Y��&��,��M�2bunyad-amp/includes/amp-helper-functions.phpPK.3YK�Ԩ��3��M�3bunyad-amp/includes/amp-post-template-functions.phpPK.3Yu$��88!��J�3bunyad-amp/includes/bootstrap.phpPK.3Y{���,����3bunyad-amp/includes/class-amp-autoloader.phpPK.3Ys��0���3bunyad-amp/includes/class-amp-comment-walker.phpPK.3Y��+��I�I&��s�3bunyad-amp/includes/class-amp-http.phpPK.3Y
����3��w#4bunyad-amp/includes/class-amp-post-type-support.phpPK.3Y���^�0�00���74bunyad-amp/includes/class-amp-service-worker.phpPK.3Yq�s
�B�B/���h4bunyad-amp/includes/class-amp-theme-support.phpPK.3Y���)�)"����5bunyad-amp/includes/deprecated.phpPK.3Y5���+��j�5bunyad-amp/includes/uninstall-functions.phpPK.3Y�Q���5����5bunyad-amp/includes/admin/class-amp-admin-pointer.phpPK.3Y,����6���6bunyad-amp/includes/admin/class-amp-admin-pointers.phpPK.3Y���ii5���6bunyad-amp/includes/admin/class-amp-editor-blocks.phpPK.3Yҟ��,F,F5���6bunyad-amp/includes/admin/class-amp-post-meta-box.phpPK.3YX��f�f;��7`6bunyad-amp/includes/admin/class-amp-template-customizer.phpPK.3Y�$�'��p�6bunyad-amp/includes/admin/functions.phpPK.3Y�w�6F F 8����6bunyad-amp/includes/ecosystem-data/analytics-vendors.phpPK.3Y��}����.��h�6bunyad-amp/includes/ecosystem-data/plugins.phpPK.3Y+��k����-��L�7bunyad-amp/includes/ecosystem-data/themes.phpPK.3Y{Td���;���g8bunyad-amp/includes/embeds/class-amp-base-embed-handler.phpPK.3Y�IF�Q�Q;���8bunyad-amp/includes/embeds/class-amp-core-block-handler.phpPK.3Y��''B����8bunyad-amp/includes/embeds/class-amp-crowdsignal-embed-handler.phpPK.3Y��d��
�
B��j�8bunyad-amp/includes/embeds/class-amp-dailymotion-embed-handler.phpPK.3Y�C�9��?��]�8bunyad-amp/includes/embeds/class-amp-facebook-embed-handler.phpPK.3Y�����>����8bunyad-amp/includes/embeds/class-amp-gallery-embed-handler.phpPK.3Y1K��<���9bunyad-amp/includes/embeds/class-amp-imgur-embed-handler.phpPK.3Y��X��@��"9bunyad-amp/includes/embeds/class-amp-instagram-embed-handler.phpPK.3Y�o���<�� :9bunyad-amp/includes/embeds/class-amp-issuu-embed-handler.phpPK.3Y���K=��p@9bunyad-amp/includes/embeds/class-amp-meetup-embed-handler.phpPK.3Y
��Q��@���D9bunyad-amp/includes/embeds/class-amp-pinterest-embed-handler.phpPK.3Y��/)2'2'?���K9bunyad-amp/includes/embeds/class-amp-playlist-embed-handler.phpPK.3YR=��=��Ws9bunyad-amp/includes/embeds/class-amp-reddit-embed-handler.phpPK.3Y4e���=��Uy9bunyad-amp/includes/embeds/class-amp-scribd-embed-handler.phpPK.3Y�zN��A��A�9bunyad-amp/includes/embeds/class-amp-soundcloud-embed-handler.phpPK.3Y9��
''=��9�9bunyad-amp/includes/embeds/class-amp-tiktok-embed-handler.phpPK.3Y���;�
�
=����9bunyad-amp/includes/embeds/class-amp-tumblr-embed-handler.phpPK.3Y�Et((>����9bunyad-amp/includes/embeds/class-amp-twitter-embed-handler.phpPK.3Y��u��<��!�9bunyad-amp/includes/embeds/class-amp-vimeo-embed-handler.phpPK.3Y A���@��p�9bunyad-amp/includes/embeds/class-amp-wordpress-embed-handler.phpPK.3Y�r��C����9bunyad-amp/includes/embeds/class-amp-wordpress-tv-embed-handler.phpPK.3Y�o0=6=6>��(�9bunyad-amp/includes/embeds/class-amp-youtube-embed-handler.phpPK.3Y���E�E9���*:bunyad-amp/includes/options/class-amp-options-manager.phpPK.3Y�q�N	N	F���p:bunyad-amp/includes/options/class-amp-reader-theme-rest-controller.phpPK.3YO�,::D���z:bunyad-amp/includes/sanitizers/class-amp-accessibility-sanitizer.phpPK.3YP��%	�%	C��*�:bunyad-amp/includes/sanitizers/class-amp-allowed-tags-generated.phpPK.3Y�*���<��$�Cbunyad-amp/includes/sanitizers/class-amp-audio-sanitizer.phpPK.3Y�Ϯ��L��C�Cbunyad-amp/includes/sanitizers/class-amp-auto-lightbox-disable-sanitizer.phpPK.3Y�+��|�|;����Cbunyad-amp/includes/sanitizers/class-amp-base-sanitizer.phpPK.3Yo 1 1<���KDbunyad-amp/includes/sanitizers/class-amp-bento-sanitizer.phpPK.3Y���X00<��
}Dbunyad-amp/includes/sanitizers/class-amp-block-sanitizer.phpPK.3Yie*�NNC����Dbunyad-amp/includes/sanitizers/class-amp-block-uniqid-sanitizer.phpPK.3Y���^+^+?��C�Dbunyad-amp/includes/sanitizers/class-amp-comments-sanitizer.phpPK.3YG�9�F\F\A����Dbunyad-amp/includes/sanitizers/class-amp-core-theme-sanitizer.phpPK.3Y�c�**?���,Fbunyad-amp/includes/sanitizers/class-amp-dev-mode-sanitizer.phpPK.3Y�mJU<��*1Fbunyad-amp/includes/sanitizers/class-amp-embed-sanitizer.phpPK.3YUt��44;���5Fbunyad-amp/includes/sanitizers/class-amp-form-sanitizer.phpPK.3Y�
~66D���iFbunyad-amp/includes/sanitizers/class-amp-gallery-block-sanitizer.phpPK.3Yfk(��B��vzFbunyad-amp/includes/sanitizers/class-amp-gtag-script-sanitizer.phpPK.3Y�?��k<k<=����Fbunyad-amp/includes/sanitizers/class-amp-iframe-sanitizer.phpPK.3Y�a4�{K{K:����Fbunyad-amp/includes/sanitizers/class-amp-img-sanitizer.phpPK.3Y۱[�k
k
=��VGbunyad-amp/includes/sanitizers/class-amp-layout-sanitizer.phpPK.3Y��G}�&�&;��Gbunyad-amp/includes/sanitizers/class-amp-link-sanitizer.phpPK.3Y�5&	+	+;��#AGbunyad-amp/includes/sanitizers/class-amp-meta-sanitizer.phpPK.3Y>����L���lGbunyad-amp/includes/sanitizers/class-amp-native-img-attributes-sanitizer.phpPK.3Y��؏�H���uGbunyad-amp/includes/sanitizers/class-amp-nav-menu-dropdown-sanitizer.phpPK.3Y�a����F��̈Gbunyad-amp/includes/sanitizers/class-amp-nav-menu-toggle-sanitizer.phpPK.3Y�Cx�
�
@��)�Gbunyad-amp/includes/sanitizers/class-amp-o2-player-sanitizer.phpPK.3Y9	`�A
A
=��i�Gbunyad-amp/includes/sanitizers/class-amp-object-sanitizer.phpPK.3Y9eNN?���Gbunyad-amp/includes/sanitizers/class-amp-playbuzz-sanitizer.phpPK.3Yk$�@@A����Gbunyad-amp/includes/sanitizers/class-amp-pwa-script-sanitizer.phpPK.3Y'v6��O�Gbunyad-amp/includes/sanitizers/class-amp-rule-spec.phpPK.3Y�[��T.T.=����Gbunyad-amp/includes/sanitizers/class-amp-script-sanitizer.phpPK.3Y„z�aa=��lHbunyad-amp/includes/sanitizers/class-amp-srcset-sanitizer.phpPK.3Yı�j$$<��(Hbunyad-amp/includes/sanitizers/class-amp-style-sanitizer.phpPK.3Y��"�����H���8Jbunyad-amp/includes/sanitizers/class-amp-tag-and-attribute-sanitizer.phpPK.3Y�FRݖ/�/<����Kbunyad-amp/includes/sanitizers/class-amp-video-sanitizer.phpPK.3YlH.�
�
>����Kbunyad-amp/includes/sanitizers/trait-amp-noscript-fallback.phpPK.3Y��ӣ#�#E���Lbunyad-amp/includes/settings/class-amp-customizer-design-settings.phpPK.3Y�,K�__>���0Lbunyad-amp/includes/settings/class-amp-customizer-settings.phpPK.3YB���C��r4Lbunyad-amp/includes/templates/amp-enabled-classic-editor-toggle.phpPK.3Y%�O555���@Lbunyad-amp/includes/templates/amp-paired-browsing.phpPK.3Y�2��22=��LLbunyad-amp/includes/templates/class-amp-content-sanitizer.phpPK.3Y�����3���`Lbunyad-amp/includes/templates/class-amp-content.phpPK.3Y���0�09���tLbunyad-amp/includes/templates/class-amp-post-template.phpPK.3Y�l;�==8����Lbunyad-amp/includes/templates/reader-template-loader.phpPK.3Y��T�551��9�Lbunyad-amp/includes/utils/class-amp-dom-utils.phpPK.3Y�Q��2����Lbunyad-amp/includes/utils/class-amp-html-utils.phpPK.3YN
�m�5�5A���Lbunyad-amp/includes/utils/class-amp-image-dimension-extractor.phpPK.3Yi�|JJ4��NMbunyad-amp/includes/utils/class-amp-string-utils.phpPK.3Y �c_����D���Mbunyad-amp/includes/validation/class-amp-validated-url-post-type.phpPK.3Y�xB�0�0H����Nbunyad-amp/includes/validation/class-amp-validation-callback-wrapper.phpPK.3Y�#6IF�F�F��"Obunyad-amp/includes/validation/class-amp-validation-error-taxonomy.phpPK.3Y$��$`$`?���Qbunyad-amp/includes/validation/class-amp-validation-manager.phpPK.3Y�/��9��:~Rbunyad-amp/includes/widgets/class-amp-widget-archives.phpPK.3Y$�2]BB;��-�Rbunyad-amp/includes/widgets/class-amp-widget-categories.phpPK.3Y�;�t335��ȗRbunyad-amp/includes/widgets/class-amp-widget-text.phpPK.3Y��re

.��N�Rbunyad-amp/src/AmpSlugCustomizationWatcher.phpPK.3Y�ԇ�))����Rbunyad-amp/src/AmpWpPlugin.phpPK.3Y:ji���%����Rbunyad-amp/src/AmpWpPluginFactory.phpPK.3Y{�����)����Rbunyad-amp/src/BlockUniqidTransformer.phpPK.3Y_��-��(����Rbunyad-amp/src/ConfigurationArgument.phpPK.3Y�z���$����Rbunyad-amp/src/DependencySupport.phpPK.3Y^C�HFF-����Rbunyad-amp/src/ExtraThemeAndPluginHeaders.phpPK.3Y�kn�	�	��|�Rbunyad-amp/src/Icon.phpPK.3Y��������[�Rbunyad-amp/src/LoadingError.phpPK.3Y�jB�]�]$���Sbunyad-amp/src/MobileRedirection.phpPK.3Y��l9BB0���dSbunyad-amp/src/ObsoleteBlockAttributeRemover.phpPK.3Y��:�����(tSbunyad-amp/src/Option.phpPK.3Y+�b�++(��?�Sbunyad-amp/src/OptionsRESTController.phpPK.3Yu���� ����Sbunyad-amp/src/PairedRouting.phpPK.3Y]]�����LTbunyad-amp/src/PairedUrl.phpPK.3Yp���%��[Tbunyad-amp/src/PairedUrlStructure.phpPK.3Y�Cp��!���_Tbunyad-amp/src/PluginRegistry.phpPK.3Y
9�C�C$���pTbunyad-amp/src/PluginSuppression.phpPK.3Y�I��$$����Tbunyad-amp/src/QueryVar.phpPK.3Y�+�k�0�0$���Tbunyad-amp/src/ReaderThemeLoader.phpPK.3Y6�ie;U;U-����Tbunyad-amp/src/ReaderThemeSupportFeatures.phpPK.3YG�W?�"�"��fFUbunyad-amp/src/Sandboxing.phpPK.3Y.?&�����iUbunyad-amp/src/Services.phpPK.3Y�r��&��[rUbunyad-amp/src/ValidationExemption.phpPK.3Y�n��hh0��F�Ubunyad-amp/src/Admin/AfterActivationSiteScan.phpPK.3Y��c�%�%#����Ubunyad-amp/src/Admin/AmpPlugins.phpPK.3Y���4uu"���Ubunyad-amp/src/Admin/AmpThemes.phpPK.3Ysv��..0����Ubunyad-amp/src/Admin/AnalyticsOptionsSubmenu.phpPK.3Y��`$��F�Ubunyad-amp/src/Admin/GoogleFonts.phpPK.3Y�����0����Ubunyad-amp/src/Admin/OnboardingWizardSubmenu.phpPK.3YK� E{&{&4���Ubunyad-amp/src/Admin/OnboardingWizardSubmenuPage.phpPK.3YL�m�,�,$���Vbunyad-amp/src/Admin/OptionsMenu.phpPK.3Y�V{�$�$'��hLVbunyad-amp/src/Admin/PairedBrowsing.phpPK.3YI��Zvv/���qVbunyad-amp/src/Admin/PluginActivationNotice.phpPK.3Y�_���&��f�Vbunyad-amp/src/Admin/PluginRowMeta.phpPK.3Yi��P� � "����Vbunyad-amp/src/Admin/Polyfills.phpPK.3Y7�"�5�5%��W�Vbunyad-amp/src/Admin/ReaderThemes.phpPK.3Y:kF��>��=�Vbunyad-amp/src/Admin/ReenableCssTransientCachingAjaxAction.phpPK.3Y�w��BB&��g�Vbunyad-amp/src/Admin/RESTPreloader.phpPK.3YeaU'�'�#����Vbunyad-amp/src/Admin/SiteHealth.phpPK.3YYE8�$��U�Wbunyad-amp/src/Admin/SupportLink.phpPK.3YL�iZZ&����Wbunyad-amp/src/Admin/SupportScreen.phpPK.3YJ��MZZ2��R�Wbunyad-amp/src/Admin/UserRESTEndpointExtension.phpPK.3Y�Җ�7
7
)����Wbunyad-amp/src/Admin/ValidationCounts.phpPK.3Y�>����;��z�Wbunyad-amp/src/BackgroundTask/BackgroundTaskDeactivator.phpPK.3Ya�L%9���Xbunyad-amp/src/BackgroundTask/CronBasedBackgroundTask.phpPK.3Y�tu+u+<��
Xbunyad-amp/src/BackgroundTask/MonitorCssTransientCaching.phpPK.3Y�ښh339���5Xbunyad-amp/src/BackgroundTask/RecurringBackgroundTask.phpPK.3Y�V\9��?��]EXbunyad-amp/src/BackgroundTask/SingleScheduledBackgroundTask.phpPK.3Y�N**M���LXbunyad-amp/src/BackgroundTask/ValidatedUrlStylesheetDataGarbageCollection.phpPK.3Y�a�~~A��%TXbunyad-amp/src/BackgroundTask/ValidationDataGarbageCollection.phpPK.3Y쁋a��*��`Xbunyad-amp/src/Cli/AmpCommandNamespace.phpPK.3Y�;���3���aXbunyad-amp/src/Cli/CommandNamespaceRegistration.phpPK.3YH��Cpp'���eXbunyad-amp/src/Cli/OptimizerCommand.phpPK.3Y��P�n*n*$���qXbunyad-amp/src/Cli/OptionCommand.phpPK.3Yp�e\B&B&)��a�Xbunyad-amp/src/Cli/TransformerCommand.phpPK.3Yc<��.�.(����Xbunyad-amp/src/Cli/ValidationCommand.phpPK.3Y���***+����Xbunyad-amp/src/Component/CaptionedSlide.phpPK.3Yz�nD99%��+�Xbunyad-amp/src/Component/Carousel.phpPK.3Y��I8AA'���Ybunyad-amp/src/Component/HasCaption.phpPK.3Y{��{\\(��-
Ybunyad-amp/src/DevTools/BlockSources.phpPK.3Y�X.���Ybunyad-amp/src/DevTools/CallbackReflection.phpPK.3Y7q귵0�0%��/2Ybunyad-amp/src/DevTools/ErrorPage.phpPK.3YX�y�'�'*��'cYbunyad-amp/src/DevTools/FileReflection.phpPK.3Y˴"�
�
1��S�Ybunyad-amp/src/DevTools/LikelyCulpritDetector.phpPK.3Yz�B���&��f�Ybunyad-amp/src/DevTools/UserAccess.phpPK.3Y
���"����Ybunyad-amp/src/Dom/ElementList.phpPK.3Y��	KK��ҼYbunyad-amp/src/Dom/Options.phpPK.3Yj!�&&'��Y�Ybunyad-amp/src/Editor/EditorSupport.phpPK.3Y`�ɡ�
�
,����Ybunyad-amp/src/Embed/HandlesGalleryEmbed.phpPK.3YdF���+����Ybunyad-amp/src/Exception/AmpWpException.phpPK.3YϺ�1����Ybunyad-amp/src/Exception/FailedToMakeInstance.phpPK.3Y�>�((3��H�Ybunyad-amp/src/Exception/InvalidEventProperties.phpPK.3YB��"+����Ybunyad-amp/src/Exception/InvalidService.phpPK.3Y�TӚ2���Ybunyad-amp/src/Exception/InvalidStopwatchEvent.phpPK.3Y
M�J��.����Ybunyad-amp/src/Infrastructure/Activateable.phpPK.3Y`me�,��{�Ybunyad-amp/src/Infrastructure/CliCommand.phpPK.3Y������-���Ybunyad-amp/src/Infrastructure/Conditional.phpPK.3Y�2���0���Zbunyad-amp/src/Infrastructure/Deactivateable.phpPK.3Y�6��)��Zbunyad-amp/src/Infrastructure/Delayed.phpPK.3YhO��TT1��Zbunyad-amp/src/Infrastructure/HasRequirements.phpPK.3Y�?_���*���
Zbunyad-amp/src/Infrastructure/Injector.phpPK.3Y�#���.���Zbunyad-amp/src/Infrastructure/Instantiator.phpPK.3Y�X����(���Zbunyad-amp/src/Infrastructure/Plugin.phpPK.3Y����.���Zbunyad-amp/src/Infrastructure/Registerable.phpPK.3Y�Ss��)��� Zbunyad-amp/src/Infrastructure/Service.phpPK.3YY�;BMBM4���"Zbunyad-amp/src/Infrastructure/ServiceBasedPlugin.phpPK.3Y��g��2��GpZbunyad-amp/src/Infrastructure/ServiceContainer.phpPK.3Y�D����?��WvZbunyad-amp/src/Infrastructure/Injector/FallbackInstantiator.phpPK.3YN���F	F	9��vyZbunyad-amp/src/Infrastructure/Injector/InjectionChain.phpPK.3Y���4�49���Zbunyad-amp/src/Infrastructure/Injector/SimpleInjector.phpPK.3Y�!]��L��!�Zbunyad-amp/src/Infrastructure/ServiceContainer/LazilyInstantiatedService.phpPK.3YηԾI��f�Zbunyad-amp/src/Infrastructure/ServiceContainer/SimpleServiceContainer.phpPK.3Yv�88(����Zbunyad-amp/src/Instrumentation/Event.phpPK.3YV��yy4��Z�Zbunyad-amp/src/Instrumentation/EventWithDuration.phpPK.3Y��qE55/��%�Zbunyad-amp/src/Instrumentation/ServerTiming.phpPK.3Y���N,����Zbunyad-amp/src/Instrumentation/StopWatch.phpPK.3Yo��1��	�Zbunyad-amp/src/Instrumentation/StopWatchEvent.phpPK.3Yu�R�J
J
/��\�Zbunyad-amp/src/Optimizer/AmpWPConfiguration.phpPK.3Y�.AA3���Zbunyad-amp/src/Optimizer/HeroCandidateFiltering.phpPK.3Yօ6��-���
[bunyad-amp/src/Optimizer/OptimizerService.phpPK.3YTs��bb=��f[bunyad-amp/src/Optimizer/Transformer/AmpSchemaOrgMetadata.phpPK.3Y�w��zzJ��#[bunyad-amp/src/Optimizer/Transformer/AmpSchemaOrgMetadataConfiguration.phpPK.3Y,jOMM<��%[bunyad-amp/src/Optimizer/Transformer/DetermineHeroImages.phpPK.3Yf�~m��>���@[bunyad-amp/src/PairedUrlStructure/LegacyReaderUrlStructure.phpPK.3Y�0+��D���R[bunyad-amp/src/PairedUrlStructure/LegacyTransitionalUrlStructure.phpPK.3YX9<���W[bunyad-amp/src/PairedUrlStructure/PathSuffixUrlStructure.phpPK.3Y�,�$ww:��:][bunyad-amp/src/PairedUrlStructure/QueryVarUrlStructure.phpPK.3YmqC���7��	c[bunyad-amp/src/RemoteRequest/CachedRemoteGetRequest.phpPK.3Yf�{{		/��~[bunyad-amp/src/RemoteRequest/CachedResponse.phpPK.3Y�v�hh7��j�[bunyad-amp/src/RemoteRequest/WpHttpRemoteGetRequest.phpPK.3Y�����,��'�[bunyad-amp/src/Support/SupportCliCommand.phpPK.3Y��6�PwPw&���[bunyad-amp/src/Support/SupportData.phpPK.3Y����880���#\bunyad-amp/src/Support/SupportRESTController.phpPK.3Y�l�J0J02��
/\bunyad-amp/src/Validation/ScannableURLProvider.phpPK.3Yӧ���9���_\bunyad-amp/src/Validation/ScannableURLsRestController.phpPK.3Yɐ�oU
U
/���\bunyad-amp/src/Validation/URLValidationCron.phpPK.3Y�n��3����\bunyad-amp/src/Validation/URLValidationProvider.phpPK.3Y�"�%�%9��g�\bunyad-amp/src/Validation/URLValidationRESTController.phpPK.3Y��?�||<��?�\bunyad-amp/src/Validation/ValidationCountsRestController.phpPK.3Y�����'���\bunyad-amp/templates/featured-image.phpPK.3Y��e����L�\bunyad-amp/templates/footer.phpPK.3Y�n�88#��|�\bunyad-amp/templates/header-bar.phpPK.3Yv�wl;;����\bunyad-amp/templates/header.phpPK.3Yv'�t��!��m�\bunyad-amp/templates/html-end.phpPK.3Y�~0���#����\bunyad-amp/templates/html-start.phpPK.3Y�@hnn$����\bunyad-amp/templates/meta-author.phpPK.3Y���+��3�\bunyad-amp/templates/meta-comments-link.phpPK.3Y���zz&����\bunyad-amp/templates/meta-taxonomy.phpPK.3Y���č�"����\bunyad-amp/templates/meta-time.phpPK.3Y���W������\bunyad-amp/templates/page.phpPK.3Y��~f����F]bunyad-amp/templates/single.phpPK.3Y�0w)�)�)��|]bunyad-amp/templates/style.phpPK.3Y�U��R5]bunyad-amp/vendor/autoload.phpPK.3Y�H���8]bunyad-amp/vendor/ampproject/amp-toolbox/include/compatibility-fixes.phpPK.3YTq�?)()(H���9]bunyad-amp/vendor/ampproject/amp-toolbox/resources/local_fallback/v0.cssPK.3Y�S&vkkN���b]bunyad-amp/vendor/ampproject/amp-toolbox/resources/local_fallback/rtv/metadataPK.3Y��o)o)4��ed]bunyad-amp/vendor/ampproject/amp-toolbox/src/Amp.phpPK.3Y�l2A��&�]bunyad-amp/vendor/ampproject/amp-toolbox/src/CompatibilityFix.phpPK.3Y
�Q:����]bunyad-amp/vendor/ampproject/amp-toolbox/src/CssLength.phpPK.3Y����8���]bunyad-amp/vendor/ampproject/amp-toolbox/src/DevMode.phpPK.3Y�4T�II9���]bunyad-amp/vendor/ampproject/amp-toolbox/src/Encoding.phpPK.3YA��11:����]bunyad-amp/vendor/ampproject/amp-toolbox/src/Extension.phpPK.3YKn���$�$9��&�]bunyad-amp/vendor/ampproject/amp-toolbox/src/FakeEnum.phpPK.3Y,!���7��
^bunyad-amp/vendor/ampproject/amp-toolbox/src/Format.phpPK.3Y�|
���9��8^bunyad-amp/vendor/ampproject/amp-toolbox/src/Internal.phpPK.3Y�iJ`��7���^bunyad-amp/vendor/ampproject/amp-toolbox/src/Layout.phpPK.3Yc�;;9���^bunyad-amp/vendor/ampproject/amp-toolbox/src/Protocol.phpPK.3Yo��A��Y^bunyad-amp/vendor/ampproject/amp-toolbox/src/RemoteGetRequest.phpPK.3Y�P��9���^bunyad-amp/vendor/ampproject/amp-toolbox/src/Response.phpPK.3YAr�

?���-^bunyad-amp/vendor/ampproject/amp-toolbox/src/RuntimeVersion.phpPK.3Y�Q���E���:^bunyad-amp/vendor/ampproject/amp-toolbox/src/ScriptReleaseVersion.phpPK.3Y�ؓ��!�!4��>^bunyad-amp/vendor/ampproject/amp-toolbox/src/Str.phpPK.3Yq�\4���_^bunyad-amp/vendor/ampproject/amp-toolbox/src/Url.phpPK.3Y@KR���B��5~^bunyad-amp/vendor/ampproject/amp-toolbox/src/Cli/AmpExecutable.phpPK.3Y|+J�bb;��j�^bunyad-amp/vendor/ampproject/amp-toolbox/src/Cli/Colors.phpPK.3Y�|�<��%�^bunyad-amp/vendor/ampproject/amp-toolbox/src/Cli/Command.phpPK.3YoRƲ�/�/?����^bunyad-amp/vendor/ampproject/amp-toolbox/src/Cli/Executable.phpPK.3Y�]�	�	=����^bunyad-amp/vendor/ampproject/amp-toolbox/src/Cli/LogLevel.phpPK.3Yt�b�G�G<����^bunyad-amp/vendor/ampproject/amp-toolbox/src/Cli/Options.phpPK.3Y�l�pEpEC��� _bunyad-amp/vendor/ampproject/amp-toolbox/src/Cli/TableFormatter.phpPK.3Yb��e��E���f_bunyad-amp/vendor/ampproject/amp-toolbox/src/Cli/Command/Optimize.phpPK.3Y��.x�
�
E���n_bunyad-amp/vendor/ampproject/amp-toolbox/src/Cli/Command/Validate.phpPK.3Yź����N���y_bunyad-amp/vendor/ampproject/amp-toolbox/src/CompatibilityFix/MovedClasses.phpPK.3Y<8����=��؀_bunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document.phpPK.3YFx.2�+�+<��!,`bunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Element.phpPK.3Y��~���@��VX`bunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/ElementDump.phpPK.3Y��l�&�&@��ca`bunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/LinkManager.phpPK.3YE%m��?��^�`bunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/NodeWalker.phpPK.3YVg1				<��X�`bunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Options.phpPK.3Y�h�uffD����`bunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/UniqueIdManager.phpPK.3Yo/�y��M����`bunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/AfterLoadFilter.phpPK.3Y�aV���M����`bunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/AfterSaveFilter.phpPK.3Y{����N����`bunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/BeforeLoadFilter.phpPK.3Y���~��N���`bunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/BeforeSaveFilter.phpPK.3Y<�e�D���`bunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter.phpPK.3Yu�E
�
�
D��e�`bunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Option.phpPK.3Y�&7V'V'V��]�`bunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter/AmpBindAttributes.phpPK.3Y�}���V��'�`bunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter/AmpEmojiAttribute.phpPK.3YZ��h��]��5�`bunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter/ConvertHeadProfileToLink.phpPK.3Y:й+�	�	S����`bunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter/DeduplicateTag.phpPK.3Y]n�g11^����`bunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter/DetectInvalidByteSequence.phpPK.3Ynӈ��
�
P��P�`bunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter/DoctypeNode.phpPK.3Y��	U���abunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter/DocumentEncoding.phpPK.3Y��b��U��!%abunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter/HttpEquivCharset.phpPK.3Y��_��X��H?abunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter/LibxmlCompatibility.phpPK.3Y��]]��\���Habunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter/MustacheScriptTemplates.phpPK.3Y;�3��\���gabunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter/NormalizeHtmlAttributes.phpPK.3Y"$�::Z���mabunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter/NormalizeHtmlEntities.phpPK.3YN}�$$U���yabunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter/NoscriptElements.phpPK.3Y�O]��S��;�abunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter/ProtectEsiTags.phpPK.3Y�����[��h�abunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter/SelfClosingSVGElements.phpPK.3Y�IA��T����abunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter/SelfClosingTags.phpPK.3Y�3��T	T	_��ܣabunyad-amp/vendor/ampproject/amp-toolbox/src/Dom/Document/Filter/SvgSourceAttributeEncoding.phpPK.3Y�Q�;��J����abunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/AmpCliException.phpPK.3Y���}��G����abunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/AmpException.phpPK.3Yu�[��N��вabunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/FailedRemoteRequest.phpPK.3YP0rn��M��%�abunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/FailedToCreateLink.phpPK.3Y�ڠ!��T����abunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/FailedToGetCachedResponse.phpPK.3Yf�.�)	)	S����abunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/FailedToGetFromRemoteUrl.phpPK.3YE�E��L��8�abunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/FailedToParseHtml.phpPK.3Y�e�JJK����abunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/FailedToParseUrl.phpPK.3Y0&�`��]��E�abunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/FailedToRetrieveRequiredDomElement.phpPK.3Y�iK���O����abunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/InvalidAttributeName.phpPK.3Y=����N����abunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/InvalidByteSequence.phpPK.3Y��t\��P����abunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/InvalidCssRulesetName.phpPK.3Y�Ųm��Q��P�abunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/InvalidDeclarationName.phpPK.3Y�o�P����abunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/InvalidDocRulesetName.phpPK.3Y������P���abunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/InvalidDocumentFilter.phpPK.3Y��	���K��S�abunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/InvalidErrorCode.phpPK.3YoUrf��K��O�abunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/InvalidExtension.phpPK.3Yb;Ή�H��q�abunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/InvalidFormat.phpPK.3Y�#dP��J��`�abunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/InvalidListName.phpPK.3Y�u���M����abunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/InvalidOptionValue.phpPK.3Y��ڨ�J��t�abunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/InvalidSpecName.phpPK.3Y�H���N����abunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/InvalidSpecRuleName.phpPK.3Y�[���G���bbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/InvalidTagId.phpPK.3Y^ƒ���I���bbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/InvalidTagName.phpPK.3Y�#>R���bbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/MaxCssByteCountExceeded.phpPK.3Y�"J]]N��B
bbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/Cli/InvalidArgument.phpPK.3Y������K��bbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/Cli/InvalidColor.phpPK.3Yl��R��&bbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/Cli/InvalidColumnFormat.phpPK.3Yl���M���bbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/Cli/InvalidCommand.phpPK.3Y����L��� bbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/Cli/InvalidOption.phpPK.3YnJ�B��J���#bbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/Cli/InvalidSapi.phpPK.3Yo]
N��	'bbunyad-amp/vendor/ampproject/amp-toolbox/src/Exception/Cli/MissingArgument.phpPK.3Yr��<���+bbunyad-amp/vendor/ampproject/amp-toolbox/src/Html/AtRule.phpPK.3Y�[���
�
?���.bbunyad-amp/vendor/ampproject/amp-toolbox/src/Html/Attribute.phpPK.3Y�����@��?=cbunyad-amp/vendor/ampproject/amp-toolbox/src/Html/LengthUnit.phpPK.3Y�����B���Mcbunyad-amp/vendor/ampproject/amp-toolbox/src/Html/LowerCaseTag.phpPK.3Y{=EEH���Ncbunyad-amp/vendor/ampproject/amp-toolbox/src/Html/RequestDestination.phpPK.3Yօ�r0r0:��[Vcbunyad-amp/vendor/ampproject/amp-toolbox/src/Html/Role.phpPK.3Y��[([(9��%�cbunyad-amp/vendor/ampproject/amp-toolbox/src/Html/Tag.phpPK.3YQ��d(d(B��ׯcbunyad-amp/vendor/ampproject/amp-toolbox/src/Html/UpperCaseTag.phpPK.3YE�?LLG����cbunyad-amp/vendor/ampproject/amp-toolbox/src/Html/Parser/DocLocator.phpPK.3Y��+n��C��L�cbunyad-amp/vendor/ampproject/amp-toolbox/src/Html/Parser/EFlags.phpPK.3Yt?�B�G�GG��7�cbunyad-amp/vendor/ampproject/amp-toolbox/src/Html/Parser/HtmlParser.phpPK.3YN�G��K��v3dbunyad-amp/vendor/ampproject/amp-toolbox/src/Html/Parser/HtmlSaxHandler.phpPK.3YE�F]]W��n<dbunyad-amp/vendor/ampproject/amp-toolbox/src/Html/Parser/HtmlSaxHandlerWithLocation.phpPK.3Y�Qoc��L��@?dbunyad-amp/vendor/ampproject/amp-toolbox/src/Html/Parser/ParsedAttribute.phpPK.3Y�w�ooF���Cdbunyad-amp/vendor/ampproject/amp-toolbox/src/Html/Parser/ParsedTag.phpPK.3Y�s��WWF��``dbunyad-amp/vendor/ampproject/amp-toolbox/src/Html/Parser/ScriptTag.phpPK.3Y���J<J<I��dbunyad-amp/vendor/ampproject/amp-toolbox/src/Html/Parser/TagNameStack.phpPK.3Y��&&F��̻dbunyad-amp/vendor/ampproject/amp-toolbox/src/Html/Parser/TagRegion.phpPK.3Y#��X
X
H��V�dbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Configuration.phpPK.3Y��2��&�&B���dbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/CssRule.phpPK.3Y�EtY[[C����dbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/CssRules.phpPK.3Y~�\&O����dbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/DefaultConfiguration.phpPK.3YPf�,��@��)ebunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Error.phpPK.3Y��G{{J��/ebunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/ErrorCollection.phpPK.3Y�H�D��!ebunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/HeroImage.phpPK.3Y����//J���)ebunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/ImageDimensions.phpPK.3Y:nnH���Xebunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/LocalFallback.phpPK.3Y�VcO���]ebunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/TransformationEngine.phpPK.3Y�O�+BBF��Wuebunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Transformer.phpPK.3Y!�T��S���webunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/TransformerConfiguration.phpPK.3YZ�3
3
c��C|ebunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Configuration/AmpRuntimeCssConfiguration.phpPK.3Y�� �		j����ebunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Configuration/AmpStoryCssOptimizerConfiguration.phpPK.3YSB%??d����ebunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Configuration/AutoExtensionsConfiguration.phpPK.3Y�����e��I�ebunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Configuration/BaseTransformerConfiguration.phpPK.3Y|�H�`����ebunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Configuration/MinifyHtmlConfiguration.phpPK.3Y޿r���e���ebunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Configuration/OptimizeAmpBindConfiguration.phpPK.3Y����cch��%�ebunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Configuration/OptimizeHeroImagesConfiguration.phpPK.3Y�����f���ebunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Configuration/OptimizeViewportConfiguration.phpPK.3Y5����f��E�ebunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Configuration/PreloadHeroImageConfiguration.phpPK.3Y-�h'��d����ebunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Configuration/RewriteAmpUrlsConfiguration.phpPK.3Ytz�RRk���fbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Configuration/TransformedIdentifierConfiguration.phpPK.3Y��D�++b��x"fbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Error/CannotAdaptDocumentForSelfHosting.phpPK.3Y��>6W��#(fbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Error/CannotInlineRuntimeCss.phpPK.3Y������V���/fbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Error/CannotMinifyAmpScript.phpPK.3Y<����T���2fbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Error/CannotParseJsonData.phpPK.3Y�MU�:
:
a��7fbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Error/CannotPerformServerSideRendering.phpPK.3Y���okkS���Afbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Error/CannotPreloadImage.phpPK.3Y�
�Z��X���Ffbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Error/CannotRemoveBoilerplate.phpPK.3Y�g��V���Rfbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Error/DeprecatedTransformer.phpPK.3Y��%/nnP��mXfbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Error/ErrorProperties.phpPK.3Y���B22L��I\fbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Error/InvalidJson.phpPK.3Y�8W(O���_fbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Error/MissingPackage.phpPK.3Y�T�WR��Zbfbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Error/TooManyHeroImages.phpPK.3Yq��;M���efbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Error/UnknownError.phpPK.3Y�-�4Z��@gfbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Exception/AmpOptimizerException.phpPK.3Y��M�T���hfbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Exception/InvalidArgument.phpPK.3YTF|@@Y��Wlfbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Exception/InvalidConfiguration.phpPK.3Y=b����\��pfbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Exception/InvalidConfigurationKey.phpPK.3Y��
	
	^��Kufbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Exception/InvalidConfigurationValue.phpPK.3Y���FFY���~fbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Exception/InvalidHtmlAttribute.phpPK.3Y{�5a��^����fbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Exception/UnknownConfigurationClass.phpPK.3Yn�#��\��݅fbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Exception/UnknownConfigurationKey.phpPK.3Y�K��U��P�fbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Transformer/AmpBoilerplate.phpPK.3Y�0a'��a��o�fbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Transformer/AmpBoilerplateErrorHandler.phpPK.3Yf�9��T��y�fbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Transformer/AmpRuntimeCss.phpPK.3Y�s�wj
j
Y����fbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Transformer/AmpRuntimePreloads.phpPK.3YSj�o��[����fbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Transformer/AmpStoryCssOptimizer.phpPK.3Y�����a�aU����fbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Transformer/AutoExtensions.phpPK.3Y�Rmm\���Xgbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Transformer/GoogleFontsPreconnect.phpPK.3Y�'�WV0V0Q���`gbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Transformer/MinifyHtml.phpPK.3YK$q�n
n
V����gbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Transformer/OptimizeAmpBind.phpPK.3YJ&�ececY��w�gbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Transformer/OptimizeHeroImages.phpPK.3Y
ڱ���W��Shbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Transformer/OptimizeViewport.phpPK.3Y*�D�--W���hbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Transformer/PreloadHeroImage.phpPK.3Y�T�1�-�-R��O+hbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Transformer/ReorderHead.phpPK.3Y����V2V2U��fYhbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Transformer/RewriteAmpUrls.phpPK.3Y�����Z��/�hbunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Transformer/ServerSideRendering.phpPK.3YsyHH\���)ibunyad-amp/vendor/ampproject/amp-toolbox/src/Optimizer/Transformer/TransformedIdentifier.phpPK.3Y$�IS���6ibunyad-amp/vendor/ampproject/amp-toolbox/src/RemoteRequest/CurlRemoteGetRequest.phpPK.3Yv���W��
Kibunyad-amp/vendor/ampproject/amp-toolbox/src/RemoteRequest/FallbackRemoteGetRequest.phpPK.3Y����Y���Vibunyad-amp/vendor/ampproject/amp-toolbox/src/RemoteRequest/FilesystemRemoteGetRequest.phpPK.3Y��^W���_ibunyad-amp/vendor/ampproject/amp-toolbox/src/RemoteRequest/RemoteGetRequestResponse.phpPK.3Y�H�$V��{vibunyad-amp/vendor/ampproject/amp-toolbox/src/RemoteRequest/StubbedRemoteGetRequest.phpPK.3Y��h�hhb���|ibunyad-amp/vendor/ampproject/amp-toolbox/src/RemoteRequest/TemporaryFileCachedRemoteGetRequest.phpPK.3Y*C�llB��ܘibunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Context.phpPK.3Y�
h\"\"D����ibunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/ErrorCode.phpPK.3Yrΰ1��L��f�ibunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/ExtensionsContext.phpPK.3Y��>OG����ibunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/FilePosition.phpPK.3Y�el�``?��:�ibunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec.phpPK.3Y��#N��L���jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/ValidateTagResult.phpPK.3Y
'�EEK��*jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/ValidationEngine.phpPK.3Y�g�~J���jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/ValidationError.phpPK.3Y-�ǧ
�
T��Vjbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/ValidationErrorCollection.phpPK.3Y
o\�N�NL��o,jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/ValidationHandler.phpPK.3YO�O�K��t{jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/ValidationResult.phpPK.3Y!xC�JJM���jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/ValidationSeverity.phpPK.3Y��{{K����jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/ValidationStatus.phpPK.3Y�L}lJlJI����jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/ValidatorRules.phpPK.3Y+�l��L��]�jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/ValueSetProvision.phpPK.3Y@�x��N��a�jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/ValueSetRequirement.phpPK.3Y�g<		L��k�jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AggregateTag.phpPK.3Y$�:��]����jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AggregateTagWithExtensionSpec.phpPK.3Y��a�	�	M����jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList.phpPK.3YA?�
�
J���kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/CssRuleset.phpPK.3Yv�|A		O�� kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/DeclarationList.phpPK.3Y���
wwQ���kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList.phpPK.3Y��0�	�	J���#kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/DocRuleset.phpPK.3Y�d���E���-kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error.phpPK.3Y�p�k��L���6kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Identifiable.phpPK.3Y�Ɓ���O��9kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/IterableSection.phpPK.3YaӻZZI��=kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Iteration.phpPK.3Yy�y���H���Hkbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/SpecRule.phpPK.3YhLW?��C���\kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag.phpPK.3Y���T��okbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/TagWithExtensionSpec.phpPK.3Y��,���\���vkbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpAudioCommon.phpPK.3Yi�=���c���kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpBaseCarouselCommon.phpPK.3Y�S�_����kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpCarouselCommon.phpPK.3Y�X(�yyk����kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpDatePickerCommonAttributes.phpPK.3Y<����p����kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpDatePickerOverlayModeAttributes.phpPK.3Y&2�[\\n���kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpDatePickerRangeTypeAttributes.phpPK.3Y�M&�ffo��̰kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpDatePickerSingleTypeAttributes.phpPK.3Y�>HX��o����kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpDatePickerStaticModeAttributes.phpPK.3Y�t�99Y���kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpFacebook.phpPK.3Y���JJ_����kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpFacebookStrict.phpPK.3Y�ۭ���`��i�kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmphtmlEngineAttrs.phpPK.3Y��|�__f����kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmphtmlModuleEngineAttrs.phpPK.3Yh����h����kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmphtmlNomoduleEngineAttrs.phpPK.3Y����d����kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpInputmaskCommonAttr.phpPK.3Y~��\��]�kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpLayoutAttrs.phpPK.3Y��`����kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpMegaphoneCommon.phpPK.3Y,�Eb��0�kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpNestedMenuActions.phpPK.3Y��(a
a
d����kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpStreamGalleryCommon.phpPK.3Ys.l�__\����kbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpVideoCommon.phpPK.3YrF}	
	
b��nlbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/AmpVideoIframeCommon.phpPK.3YȾd\??V���lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/CiteAttr.phpPK.3Y�m���_���lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/ClickAttributions.phpPK.3Y�*!���b���lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/CommonExtensionAttrs.phpPK.3YA~�==]��"lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/CommonLinkAttrs.phpPK.3Y^^gf��_���'lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/ExtendedAmpGlobal.phpPK.3Y��Z��Z���-lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/FormNameAttr.phpPK.3Y���BBY��$Elbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/GlobalAttrs.phpPK.3Y�xN

V����lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/ImgAttrs.phpPK.3Y�˜W��]��6�lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/InputCommonAttr.phpPK.3Y�<hF%%m��z�lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/InteractiveOptionsConfettiAttrs.phpPK.3YW=�K��h��*�lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/InteractiveOptionsImgAttrs.phpPK.3Y	�N/;;t��F�lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/InteractiveOptionsResultsCategoryAttrs.phpPK.3Ya��1UUi���lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/InteractiveOptionsTextAttrs.phpPK.3YL2=Ǭ�k����lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/InteractiveSharedConfigsAttrs.phpPK.3Yj����b��$�lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/LightboxableElements.phpPK.3Y��ڿ<
<
]��l�lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/MandatoryIdAttr.phpPK.3Y��v4
4
_��#�lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/MandatoryNameAttr.phpPK.3Yw(h���c����lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/MandatorySrcAmp4email.phpPK.3Y�6��b���lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/MandatorySrcOrSrcset.phpPK.3Ya��	�	V��h�lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/NameAttr.phpPK.3Y�GkVhhW���lbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/NonceAttr.phpPK.3Y{��n��b���mbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/OptionalSrcAmp4email.phpPK.3Y`m�-��^���mbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/PooolAccessAttrs.phpPK.3Y�Vo���mbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/PrivateClickMeasurementAttributes.phpPK.3YsW�p��p��Ymbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/SvgConditionalProcessingAttributes.phpPK.3Ys�k���_���mbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/SvgCoreAttributes.phpPK.3Y���?��j���mbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/SvgFilterPrimitiveAttributes.phpPK.3YR�z�g��xmbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/SvgPresentationAttributes.phpPK.3Y��>>Z��5mbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/SvgStyleAttr.phpPK.3Y�u^���k���8mbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/SvgTransferFunctionAttributes.phpPK.3Yx,EE`��)>mbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/SvgXlinkAttributes.phpPK.3Y��ۊ�c���Dmbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/TrackAttrsNoSubtitles.phpPK.3Yq4i��a���Kmbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/AttributeList/TrackAttrsSubtitles.phpPK.3Y[���R���Rmbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/CssRuleset/Amp4ads.phpPK.3YB�c�,	,	a���Zmbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/CssRuleset/Amp4emailDataCssStrict.phpPK.3Y'��	�	c���dmbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/CssRuleset/Amp4emailNoDataCssStrict.phpPK.3Y]��W	W	[���nmbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/CssRuleset/AmpNoTransformed.phpPK.3Y؅�P	P	Y���xmbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/CssRuleset/AmpTransformed.phpPK.3Y���g�I�Ia��m�mbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/DeclarationList/BasicDeclarations.phpPK.3Y�^Y�lMlMi����mbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/DeclarationList/EmailSpecificDeclarations.phpPK.3Y�NV�%%d���nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/DeclarationList/SvgBasicDeclarations.phpPK.3Y�6�!��o��.)nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList/AmpMegaMenuAllowedDescendants.phpPK.3Y:	X-��q��s1nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList/AmpNestedMenuAllowedDescendants.phpPK.3Y�)B�s���9nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList/AmpStoryBookendAllowedDescendants.phpPK.3YR�V��
�
t���=nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList/AmpStoryCtaLayerAllowedDescendants.phpPK.3Y~2�		u���Knbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList/AmpStoryGridLayerAllowedDescendants.phpPK.3Y�|��CCz��u^nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList/AmpStoryPageAttachmentAllowedDescendants.phpPK.3Y�~]Fkkr��Pvnbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList/AmpStoryPlayerAllowedDescendants.phpPK.3Y.�c�!!w��Kznbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/DescendantTagList/AmpStorySocialShareAllowedDescendants.phpPK.3Y�@��		T��~nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/DocRuleset/Amp4email.phpPK.3Y�[8vvb��|�nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/AmpEmailMissingStrictCssAttr.phpPK.3YJd��SSc��r�nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/AttrDisallowedByImpliedLayout.phpPK.3Y�M{�[[e��F�nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/AttrDisallowedBySpecifiedLayout.phpPK.3YVK^MMb��$�nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/AttrMissingRequiredExtension.phpPK.3Y�
�PP\���nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/AttrRequiredButMissing.phpPK.3Y�C�ss_����nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/AttrValueRequiredByLayout.phpPK.3Y<\[[_����nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/BaseTagMustPreceedAllUrls.phpPK.3YU��C..[����nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CdataViolatesDenylist.phpPK.3Yu[����j��*�nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/ChildTagDoesNotSatisfyReferencePoint.phpPK.3YET���r��5�nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/ChildTagDoesNotSatisfyReferencePointSingular.phpPK.3YV���Z��Q�nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssExcessivelyNested.phpPK.3Y~Ķ�U��۬nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxBadUrl.phpPK.3Y���OOe��U�nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedAttrSelector.phpPK.3Ym���33_��'�nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedDomain.phpPK.3Y�g�;;b��׷nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedImportant.phpPK.3Y�!�fxxo����nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedKeyframeInsideKeyframe.phpPK.3Y�Q�QQe����nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedMediaFeature.phpPK.3Yd�EEb��k�nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedMediaType.phpPK.3Y���mmf��0�nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedPropertyValue.phpPK.3Y8�Y��n��!�nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedPropertyValueWithHint.phpPK.3YN�j�FFd��H�nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedPseudoClass.phpPK.3Y�E>�NNf���nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedPseudoElement.phpPK.3Y"9�+��z����nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedQualifiedRuleMustBeInsideKeyframe.phpPK.3Y٫LLd��)�nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxDisallowedRelativeUrl.phpPK.3Y)V?sj����nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxEofInPreludeOfQualifiedRule.phpPK.3Y���.FFd����nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxErrorInPseudoSelector.phpPK.3YRx�mCCd����nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxIncompleteDeclaration.phpPK.3Y�‚11\����nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxInvalidAtRule.phpPK.3Y\�BBb��6�nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxInvalidAttrSelector.phpPK.3YzV�]77a����nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxInvalidDeclaration.phpPK.3Y	b'7[[^����nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxInvalidProperty.phpPK.3Y.��FFd����nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxInvalidPropertyNolist.phpPK.3Y�,5Y��M�nbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxInvalidUrl.phpPK.3YW�AAa���obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxInvalidUrlProtocol.phpPK.3Y�M��>>b���obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxMalformedMediaQuery.phpPK.3YYq�;++^��`obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxMissingSelector.phpPK.3Y��Q�Y��obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxMissingUrl.phpPK.3Yg���77`���obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxNotASelectorStart.phpPK.3Y&����m��Jobunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxPropertyDisallowedTogetherWith.phpPK.3Y�1ᨏ�m��mobunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxPropertyDisallowedWithinAtRule.phpPK.3Y��$B��l���obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxPropertyRequiresQualification.phpPK.3Y@^I�uum���obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxQualifiedRuleHasNoDeclarations.phpPK.3Y���[IIe���#obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxStrayTrailingBackslash.phpPK.3Yx��mmm���'obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxUnparsedInputRemainsInSelector.phpPK.3Y˯|;;b���+obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxUnterminatedComment.phpPK.3Yc�"77a��;/obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/CssSyntaxUnterminatedString.phpPK.3Y}�h�  T���2obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DeprecatedAttr.phpPK.3Y��Q		S���6obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DeprecatedTag.phpPK.3Y��6VVQ���9obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DevModeOnly.phpPK.3Yt:��,,Y���=obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedAmpDomain.phpPK.3Y��
�T��eAobunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedAttr.phpPK.3Yc��@@\���Dobunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedChildTagName.phpPK.3Y(�D""V���Hobunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedDomain.phpPK.3Y���\\a��2Lobunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedFirstChildTagName.phpPK.3Y�f�<[[`��
Pobunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedManufacturedBody.phpPK.3YQ]�bMMc���Sobunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedPropertyInAttrValue.phpPK.3Y3+�(88[���Wobunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedRelativeUrl.phpPK.3Y�$eY��e[obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedScriptTag.phpPK.3YyqVNNY���^obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedStyleAttr.phpPK.3Ys�%P��S���bobunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedTag.phpPK.3Y��**[��fobunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DisallowedTagAncestor.phpPK.3Y���44_���iobunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DocumentSizeLimitExceeded.phpPK.3Y7[PX��dmobunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DocumentTooComplex.phpPK.3Yա�V**X���pobunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DuplicateAttribute.phpPK.3Y�7`LLX��}tobunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DuplicateDimension.phpPK.3Y
S�2JJ]��?xobunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DuplicateReferencePoint.phpPK.3Y�O�X��|obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DuplicateUniqueTag.phpPK.3Y��NN_���obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/DuplicateUniqueTagWarning.phpPK.3Y�X�55U��a�obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/ExtensionUnused.phpPK.3Y`9��##Z��	�obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/GeneralDisallowedTag.phpPK.3Y���[%%Z����obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/ImpliedLayoutInvalid.phpPK.3Y�G����h��A�obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/InconsistentUnitsForWidthAndHeight.phpPK.3Y��_�??^��[�obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/IncorrectMinNumChildTags.phpPK.3Ym*�''[���obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/IncorrectNumChildTags.phpPK.3Y'Y!�~~c����obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/IncorrectScriptReleaseVersion.phpPK.3YQ_*�--Y����obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/InlineScriptTooLong.phpPK.3Y3��QQX��Y�obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/InlineStyleTooLong.phpPK.3Y�7�"&&V�� �obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidAttrValue.phpPK.3Y">=�++X����obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidDoctypeHtml.phpPK.3YK�TPPZ��[�obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidExtensionPath.phpPK.3Yf$�}tt]��#�obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidExtensionVersion.phpPK.3Y�|�V���obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidJsonCdata.phpPK.3Y�v�iie����obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidPropertyValueInAttrValue.phpPK.3YC�0�P����obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidUrl.phpPK.3Y�J��&&X����obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidUrlProtocol.phpPK.3YZE���Q����obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/InvalidUtf8.phpPK.3Y׭{ZZZ����obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/LtsScriptAfterNonLts.phpPK.3Y�
�FF_����obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryAnyofAttrMissing.phpPK.3YJӚ$$Z����obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryAttrMissing.phpPK.3Y�2�NNf��/�obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryCdataMissingOrIncorrect.phpPK.3Y-�..[���obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryLastChildTag.phpPK.3Y���==_����obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryOneofAttrMissing.phpPK.3Y�6p�eek��b�obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryPropertyMissingFromAttrValue.phpPK.3Y��FFd��P�obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryReferencePointMissing.phpPK.3Yӂ29((Z���obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryTagAncestor.phpPK.3Y��$OWWb����obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryTagAncestorWithHint.phpPK.3Y���Y����obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/MandatoryTagMissing.phpPK.3Y��cee]���obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/MissingLayoutAttributes.phpPK.3Y�=;H::^����obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/MissingRequiredExtension.phpPK.3Y�Қ��P����obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/MissingUrl.phpPK.3Y�[�s;;\���obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/MutuallyExclusiveAttrs.phpPK.3Y�z�	NNZ���obunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/NonLtsScriptAfterLts.phpPK.3Y���99c���pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/NonWhitespaceCdataEncountered.phpPK.3Y�--\��Tpbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/SpecifiedLayoutInvalid.phpPK.3Y<��ų�e���pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/StylesheetAndInlineStyleTooLong.phpPK.3Y��n^XXW��1
pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/StylesheetTooLong.phpPK.3Yˢ* &&V���pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/TagExcludedByTag.phpPK.3Ywq�6ZZa���pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/TagNotAllowedToHaveSiblings.phpPK.3Y~��VV_��qpbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/TagReferencePointConflict.phpPK.3Y��L�,,Z��Dpbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/TagRequiredByMissing.phpPK.3Y��A0''X���pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/TemplateInAttrName.phpPK.3Y�|�```���#pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/TemplatePartialInAttrValue.phpPK.3Y�Nmmb��c'pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/UnescapedTemplateInAttrValue.phpPK.3YB����Q��P+pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/UnknownCode.phpPK.3Y�U�d@@V���.pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/ValueSetMismatch.phpPK.3Yb�׾��g��P2pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/WarningExtensionDeprecatedVersion.phpPK.3Y����jj\���6pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/WarningExtensionUnused.phpPK.3Y�Ǥ^^a��|:pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/WarningTagRequiredByMissing.phpPK.3Y�yVOT��Y>pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Error/WrongParentTag.phpPK.3YA����V���Apbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Section/AttributeLists.phpPK.3YP�R��S���`pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Section/CssRulesets.phpPK.3Y��d��X��Cspbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Section/DeclarationLists.phpPK.3Y��7^��Z��^�pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Section/DescendantTagLists.phpPK.3Y��e���S����pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Section/DocRulesets.phpPK.3Y&:l[�2�2N���pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Section/Errors.phpPK.3Y�Lw�DtDtL��@�pbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Section/Tags.phpPK.3YחؼE���Hsbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/A.phpPK.3Y|��0��N��eYsbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AAmp4email.phpPK.3Yp"��~~H��Xbsbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Abbr.phpPK.3Yh1PNNK��<fsbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Acronym.phpPK.3Y�﯀��K���isbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Address.phpPK.3Y�ْ?�
�
M���msbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Amp3dGltf.phpPK.3Y�L!�O���xsbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Amp3qPlayer.phpPK.3Y��ML
L
W��{�sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Amp4adsEngineScript.phpPK.3Y�z>�?	?	`��<�sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAccessExtensionJsonScript.phpPK.3Yl~ g	g	P����sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAccordion.phpPK.3Yk3����W��Ξsbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAccordionSection.phpPK.3Y���*R��6�sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpActionMacro.phpPK.3Yh*f`I����sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAd.phpPK.3Y��"���O��!�sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAdCustom.phpPK.3Y,���||N��y�sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAddthis.phpPK.3Y!X�K��M��a�sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAdExit.phpPK.3YF��^��]�sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAdExitConfigurationJson.phpPK.3Y�L�0��X����sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAdExtensionScript.phpPK.3Yqe�8QQg��8�sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAdWithDataEnableRefreshAttribute.phpPK.3YDփ��c���sbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAdWithDataMultiSizeAttribute.phpPK.3YNN�W���tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAdWithTypeCustom.phpPK.3Y�Q���P��tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAnalytics.phpPK.3Y���rv	v	c��/tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAnalyticsExtensionJsonScript.phpPK.3Y'��`��K��& tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAnim.phpPK.3Y��f��T���(tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAnimAmp4email.phpPK.3Y��WD��P���0tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAnimation.phpPK.3YFRS		c��A9tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAnimationExtensionJsonScript.phpPK.3Y�JG��c���Btbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAnimExtensionScriptAmp4email.phpPK.3Y�J�}|	|	S���Jtbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpApesterMedia.phpPK.3YmH�ڐ�P���Ttbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAppBanner.phpPK.3Y�����`���\tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAppBannerButtonOpenButton.phpPK.3YC;?v��L��
etbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAudio.phpPK.3Y|�`wO��bntbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAudioA4a.phpPK.3Y+Z܂**R���utbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAudioSource.phpPK.3Y-"e��Q��m}tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAudioTrack.phpPK.3Y�L{���^����tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAudioTrackKindSubtitles.phpPK.3Y[�$aaN���tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAutoAds.phpPK.3Y�<8�
�
S����tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAutocomplete.phpPK.3YPL�Okk\����tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAutocompleteAmp4email.phpPK.3Yݯ��DDX����tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAutocompleteInput.phpPK.3Y�֐66W��]�tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpAutocompleteJson.phpPK.3Y�|M�S���tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBaseCarousel.phpPK.3YY��"�	�	[��y�tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBaseCarouselLightbox.phpPK.3Y2���UU`����tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBaseCarouselLightboxChild.phpPK.3Y��0�]]j����tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBaseCarouselLightboxLightboxExclude.phpPK.3Y�>sS��P��v�tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBeopinion.phpPK.3Y���w	w	^��l�tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBindExtensionJsonScript.phpPK.3Y¬6�P��_�tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBindMacro.phpPK.3Y�Ln��	�	Y����tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBodymovinAnimation.phpPK.3Y�"~v��Q���tbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBridPlayer.phpPK.3Y��(
�	�	Q��R
ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBrightcove.phpPK.3Y��4HllT��Lubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpBysideContent.phpPK.3Y�}?�	�	S��*ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpCallTracking.phpPK.3Y
�� nnO��+&ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpCarousel.phpPK.3Yw���	�	W��.ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpCarouselLightbox.phpPK.3Y!gC�GG\��8ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpCarouselLightboxChild.phpPK.3Y�2�BOOf���=ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpCarouselLightboxLightboxExclude.phpPK.3YH~��U���Cubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpConnatixPlayer.phpPK.3Y�b���N���Kubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpConsent.phpPK.3Yr�(($	$	a���Rubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpConsentExtensionJsonScript.phpPK.3YJ��		R��Z\ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpConsentType.phpPK.3YV�����R���dubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDailymotion.phpPK.3Y]=�rT���qubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDateCountdown.phpPK.3Y�?R��C�ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDateDisplay.phpPK.3Y�#ڃ�e����ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDatePickerTemplateDateTemplate.phpPK.3Y�o���e��Řubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDatePickerTemplateInfoTemplate.phpPK.3Y�B�c(	(	e��0�ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDatePickerTypeRangeModeOverlay.phpPK.3Y�yW	W	d��۩ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDatePickerTypeRangeModeStatic.phpPK.3Y�����f����ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDatePickerTypeSingleModeOverlay.phpPK.3Y����F	F	e��2�ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDatePickerTypeSingleModeStatic.phpPK.3Y� ��T����ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpDelightPlayer.phpPK.3Y�����
�
L���ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpEmbed.phpPK.3Y��<��R��H�ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpEmbedlyCard.phpPK.3Y�	o���Q��w�ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpEmbedlyKey.phpPK.3Y�w��

f����ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpEmbedWithDataMultiSizeAttribute.phpPK.3Y3X&���Q��A�ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpExperiment.phpPK.3YP��)��d��T�ubunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpExperimentExtensionJsonScript.phpPK.3Y���e��i���vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpExperimentStoryExtensionJsonScript.phpPK.3Y��Q==O��Avbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFacebook.phpPK.3Y�l
�		Q���vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFacebook10.phpPK.3YG�N��W��pvbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFacebookComments.phpPK.3Yj;;Y���%vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFacebookComments10.phpPK.3Y~�]���S��}-vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFacebookLike.phpPK.3Y���--U���4vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFacebookLike10.phpPK.3Y�Z���S��b<vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFacebookPage.phpPK.3YV�?<--U���Cvbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFacebookPage10.phpPK.3Y�"sC44N��GKvbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFitText.phpPK.3Yg�{S��K���Rvbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFont.phpPK.3Yî&���U��7[vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpFxFlyingCarpet.phpPK.3Y5l�NNJ��3avbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpGeo.phpPK.3YI�����]���gvbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpGeoExtensionJsonScript.phpPK.3Y�!S��M��qvbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpGfycat.phpPK.3Y��*1��K��2yvbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpGist.phpPK.3YV=Ő=	=	Z��?�vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpGoogleDocumentEmbed.phpPK.3Y�ez�
�
\���vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpGoogleReadAloudPlayer.phpPK.3Y��)�$$S��Z�vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpGwdAnimation.phpPK.3Y���(�
�
W���vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlEngineScript.phpPK.3Y ���p
p
`���vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlEngineScriptAmp4email.phpPK.3Y�xu3�
�
Z����vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlEngineScriptLts.phpPK.3Y�r,3B
B
e��0�vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlEngineScriptLtsTransformed.phpPK.3YW�cm,
,
b����vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlEngineScriptTransformed.phpPK.3Y��l#
#
]����vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlModuleEngineScript.phpPK.3Y�V��A
A
`��?�vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlModuleLtsEngineScript.phpPK.3Y�n��.
.
_����vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlNomoduleEngineScript.phpPK.3Yh��K
K
b����vbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmphtmlNomoduleLtsEngineScript.phpPK.3Y/})�%%K��twbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpHulu.phpPK.3Y�gE`��M��wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpIframe.phpPK.3Y̑���O��"wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpIframely.phpPK.3YO�ڽ77T��#wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImageLightbox.phpPK.3Y�`��l	l	R���)wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImageSlider.phpPK.3Y�q���Z���3wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImageSliderDivFirst.phpPK.3Yv��,��[���9wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImageSliderDivSecond.phpPK.3Y��:�

]��@wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImageSliderTransformed.phpPK.3Y@���??O���Jwbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImaVideo.phpPK.3YvdY��h��>Vwbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImaVideoScriptTypeApplicationJson.phpPK.3Y/mOOU���^wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImaVideoSource.phpPK.3Y����T��Cfwbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImaVideoTrack.phpPK.3Y��GSYYa��[lwbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImaVideoTrackKindSubtitles.phpPK.3Y����	�	J��3swbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImg.phpPK.3Y3�ggS��|}wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImgAmp4email.phpPK.3Yn\���c��T�wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImgImgPlaceholderTransformed.phpPK.3Yڥ�R
R
X����wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImgImgTransformed.phpPK.3Y�B�p66U����wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImgTransformed.phpPK.3Yo�����L��,�wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpImgur.phpPK.3Y��iT��r�wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpInlineGallery.phpPK.3Y��Se��^���wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpInlineGalleryPagination.phpPK.3Y��!��c��1�wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpInlineGalleryPaginationInset.phpPK.3Y,���,,^����wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpInlineGalleryThumbnails.phpPK.3Y;a��P��E�wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpInstagram.phpPK.3Y5�5�``[����wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpInstallServiceworker.phpPK.3Y�����O����wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpIzlesene.phpPK.3Y��tbE
E
O����wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpJwplayer.phpPK.3Y�E�aT����wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpKalturaPlayer.phpPK.3Yı��M���wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLayout.phpPK.3Y�tA		O���xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLightbox.phpPK.3Y�DA���V��xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLightboxAmp4ads.phpPK.3Y�2��S��Fxbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLinkRewriter.phpPK.3YD6�S||f���xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLinkRewriterExtensionJsonScript.phpPK.3YF<�'K���#xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpList.phpPK.3Y`��
		T��5xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpListAmp4email.phpPK.3Y�eJ��X���Axbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpListDivFetchError.phpPK.3Y�㍵�
�
S���Gxbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpListLoadMore.phpPK.3Yq"���j���Rxbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpListLoadMoreButtonLoadMoreClickable.phpPK.3Yj^�w
w
O��<\xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLiveList.phpPK.3Y����99T�� gxbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLiveListItems.phpPK.3YF�t��X���mxbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLiveListItemsItem.phpPK.3Y�ʓ���Y���txbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLiveListPagination.phpPK.3Y�WνooU���zxbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpLiveListUpdate.phpPK.3Y�z�_NNM����xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMathml.phpPK.3Y�!����O��m�xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaMenu.phpPK.3Y�
����V����xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaMenuAmpList.phpPK.3Y�.�oo^����xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaMenuAmpListTemplate.phpPK.3Y�g�KKZ����xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaMenuItemContent.phpPK.3Ys�m�--Z��n�xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaMenuItemHeading.phpPK.3Y�A��  R���xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaMenuNav.phpPK.3Y6s$8UUV����xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaMenuNavUlOl.phpPK.3YЌQ��X��l�xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaMenuNavUlOlLi.phpPK.3Y�f��zz[��o�xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaphoneDataEpisode.phpPK.3Yy�4���\��b�xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMegaphoneDataPlaylist.phpPK.3Y��~��
�
X����xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMinuteMediaPlayer.phpPK.3YX%��		P����xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpMowplayer.phpPK.3Y׈++Q��_�xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNestedMenu.phpPK.3Y���qqU����xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNextPageFooter.phpPK.3Y�$���`����xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNextPageRecommendationBox.phpPK.3Y�	�vh���xbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNextPageScriptTypeApplicationJson.phpPK.3Yҧm��X���ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNextPageSeparator.phpPK.3Y_��

Z���ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNextPageTypeAdsense.phpPK.3Y|'���_��;ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNextPageWithInlineConfig.phpPK.3Y��.�}
}
_���ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNextPageWithSrcAttribute.phpPK.3YJ�t�
�
S���%ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpNexxtvPlayer.phpPK.3Y���KKO���0ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpO2Player.phpPK.3Y�[�qOOS��`8ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpOnetapGoogle.phpPK.3Y�oz��S�� @ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpOoyalaPlayer.phpPK.3Yr�r>��Z��Hybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpOrientationObserver.phpPK.3Y��o�		N��dPybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpPanZoom.phpPK.3Y��tzzP���Yybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpPinterest.phpPK.3Y���a	a	L���aybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpPixel.phpPK.3YP��	�	O���kybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpPlaybuzz.phpPK.3Y�?�1W���uybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpPositionObserver.phpPK.3Y��^a
a
Q��~ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpPowrPlayer.phpPK.3Yf|!�R��ֈybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpReachPlayer.phpPK.3Y��*iiU��Q�ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpRecaptchaInput.phpPK.3Y&_<i++T��-�ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpRedbullPlayer.phpPK.3Y�1��		M��ʟybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpReddit.phpPK.3Y��t��M��H�ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpRender.phpPK.3Y����Q����ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpRiddleQuiz.phpPK.3YZR�	F
F
M���ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpScript.phpPK.3Y�M3�jja����ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpScriptExtensionLocalScript.phpPK.3YOȎ��
�
O����ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSelector.phpPK.3Y����kkT����ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSelectorChild.phpPK.3Y6�1��U����ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSelectorOption.phpPK.3Y�w墇�N���ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSidebar.phpPK.3Y
`DzzW����ybunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSidebarAmp4email.phpPK.3Y�[���Q���zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSidebarNav.phpPK.3Y+/w�++P���
zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSkimlinks.phpPK.3Y���]��Q��Xzbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSmartlinks.phpPK.3Y��
ddR��qzbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSocialShare.phpPK.3Yr0�]
]
Q��E*zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSoundcloud.phpPK.3Y�a���	�	X��5zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSpringboardPlayer.phpPK.3YWwL�QQL��-?zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpState.phpPK.3YfvU���Gzbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStateAmp4email.phpPK.3Y�N�O��_Ozbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStickyAd.phpPK.3Y�h��L���Vzbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStory.phpPK.3Y9���zzO���izbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStory360.phpPK.3Y7P���T���xzbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAmpAudio.phpPK.3Y;�C5��V��M�zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAmpSidebar.phpPK.3Y�~lM		j��u�zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAmpStoryPageAttachmentAmpVideo.phpPK.3Y�w����T���zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAmpVideo.phpPK.3Y;��U��(�zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAnimation.phpPK.3YeR�.VV_��9�zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAnimationJsonScript.phpPK.3YU��S���zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAutoAds.phpPK.3Y�\r��_����zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAutoAdsConfigScript.phpPK.3Y���cc[���zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAutoAdsTemplate.phpPK.3Y� ��$$Y����zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryAutoAnalytics.phpPK.3Y��S��k�zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryBookend.phpPK.3Ym�j88f����zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryBookendExtensionJsonScript.phpPK.3Y�+����T����zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryCaptions.phpPK.3Y.
ddS���zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryConsent.phpPK.3Y?��d	d	f����zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryConsentExtensionJsonScript.phpPK.3Yq�wu��T���zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryCtaLayer.phpPK.3YU���]����zbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryCtaLayerAnimateIn.phpPK.3Y���	�	U��{bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryGridLayer.phpPK.3Y�Pi�		^��y{bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryGridLayerAnimateIn.phpPK.3Y;��TT\���${bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryGridLayerDefault.phpPK.3Y���a���9{bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryInteractiveBinaryPoll.phpPK.3Y�S�
�
^��DA{bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryInteractiveImgPoll.phpPK.3Y\��^���L{bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryInteractiveImgQuiz.phpPK.3Y���

[���Y{bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryInteractivePoll.phpPK.3Y<.R֧�[��]`{bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryInteractiveQuiz.phpPK.3Y�����^��}m{bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryInteractiveResults.phpPK.3YI�	�T	T	P���~{bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryPage.phpPK.3Y�zٟ	�	Z����{bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryPageAttachment.phpPK.3YZ�QN��^����{bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryPageAttachmentHref.phpPK.3Y-��"R	R	W����{bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryPageOutlink.phpPK.3Y��+��X��w�{bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryPanningMedia.phpPK.3Yx��a��R���{bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryPlayer.phpPK.3Y�
��	�	U���{bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryPlayerImg.phpPK.3YGa��..^��A�{bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryShoppingAttachment.phpPK.3Y]}�Z����{bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryShoppingConfig.phpPK.3Y�&�,��W����{bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStoryShoppingTag.phpPK.3Y2���22W��y�{bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStorySocialShare.phpPK.3Y��qOOj�� �{bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStorySocialShareExtensionJsonScript.phpPK.3Yt�z��Y����{bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStorySubscriptions.phpPK.3Y��a00T���{bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpStreamGallery.phpPK.3Yq+�Ti	i	g����{bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpSubscriptionsExtensionJsonScript.phpPK.3Yz���M����{bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpTiktok.phpPK.3Y��	�W��|bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpTiktokBlockquote.phpPK.3Y�g(�MMN���
|bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpTimeago.phpPK.3Y�`�S��F|bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpTruncateText.phpPK.3YMx���N���|bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpTwitter.phpPK.3YK��BV	V	W���3|bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpUserNotification.phpPK.3YPx��11L���=|bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVideo.phpPK.3Y��h��R��>F|bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVideoIframe.phpPK.3Ypݦ�PP]��xN|bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVideoIframeTransformed.phpPK.3Yl���**R��CW|bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVideoSource.phpPK.3Y'k���Q���^|bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVideoTrack.phpPK.3Y?Hw��^���d|bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVideoTrackKindSubtitles.phpPK.3YiL(ebbL��bk|bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVimeo.phpPK.3Yb�ߑ��K��.s|bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVine.phpPK.3Y �Ԑ�R��lz|bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpViqeoPlayer.phpPK.3Y@�̲ggI��l�|bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpVk.phpPK.3Y��-9��N��:�|bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpWebPush.phpPK.3Y��	ccT����|bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpWebPushWidget.phpPK.3YU��5��S��Y�|bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpWistiaPlayer.phpPK.3Y�}mܝ�U��l�|bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpWordpressEmbed.phpPK.3Y�Aq��L��|�|bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpYotpo.phpPK.3Y��6*�
�
N����|bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AmpYoutube.phpPK.3Y>ݸ��K����|bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Article.phpPK.3Y�愂�I����|bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Aside.phpPK.3YE�>͐�I��x�|bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Audio.phpPK.3YS�� ))O��o�|bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AudioSource.phpPK.3Y������N���|bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AudioTrack.phpPK.3Y��/�[��S�|bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/AudioTrackKindSubtitles.phpPK.3Y�YjrrE����|bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/B.phpPK.3Y5cֶ��H����|bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Base.phpPK.3Y+�
[[G����|bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Bdi.phpPK.3Y��=G		G����|bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Bdo.phpPK.3Y�T�>>G���|bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Big.phpPK.3Y�����N����|bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Blockquote.phpPK.3Y���z��X����|bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/BlockquoteWithTiktok.phpPK.3YE�{���H���}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Body.phpPK.3YX�BvvF��Q
}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Br.phpPK.3Y�����J��+}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Button.phpPK.3Y�{?W���}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ButtonAmpNestedMenu.phpPK.3Yc�V��J��}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Canvas.phpPK.3Y
�0��K��	!}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Caption.phpPK.3Y�Z�JJJ���$}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Center.phpPK.3Yb�K

J���(}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Circle.phpPK.3Yi
/E~~H��#0}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Cite.phpPK.3YL%JY��L��4}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Clippath.phpPK.3Ys�~~H��&;}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Code.phpPK.3Y��v�

G��
?}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Col.phpPK.3Y��L��yC}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Colgroup.phpPK.3Y+l����X��H}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/CryptokeysJsonScript.phpPK.3YѺ�i~~H��P}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Data.phpPK.3YƖ!�L���S}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Datalist.phpPK.3Y4��kvvF��gX}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Dd.phpPK.3Y����yyH��A\}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Defs.phpPK.3Y10X��G�� c}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Del.phpPK.3Y��Z11H��@h}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Desc.phpPK.3Yc��z��K���m}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Details.phpPK.3Y܉��zzG���r}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Dfn.phpPK.3Y�F�>>G���v}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Dir.phpPK.3Y�x3�G��Nz}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Div.phpPK.3Yz�{�	�	T���~}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/DivAmpNestedMenu.phpPK.3Y�掭vvF���}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Dl.phpPK.3Y[}�<vvF���}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Dt.phpPK.3Y��L%33K��Ȑ}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Ellipse.phpPK.3Y	!UvvF��d�}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Em.phpPK.3Y�d�`��K��>�}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Feblend.phpPK.3Y�"i��Q��,�}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fecolormatrix.phpPK.3Y��	��W��;�}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fecomponenttransfer.phpPK.3Y�m�1O����}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fecomposite.phpPK.3Y���^��T���}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Feconvolvematrix.phpPK.3Y1e���U��X�}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fediffuselighting.phpPK.3YX�ӎU����}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fedisplacementmap.phpPK.3YCJ��R��:�}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fedistantlight.phpPK.3Y�4<�P����}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fedropshadow.phpPK.3Y�}�P��K���}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Feflood.phpPK.3Y�eؼ�K���}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fefunca.phpPK.3Y���K��A�}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fefuncb.phpPK.3Y�;���K��f�}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fefuncg.phpPK.3Y^�ü�K����}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fefuncr.phpPK.3Y�9Y{��R����}bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fegaussianblur.phpPK.3Y8�޲�K���~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Femerge.phpPK.3YWF����O���~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Femergenode.phpPK.3Y��O��P��1~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Femorphology.phpPK.3Yg���L��?~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Feoffset.phpPK.3Ye~rI��P��/~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fepointlight.phpPK.3Y3y$$V���#~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fespecularlighting.phpPK.3Y�]|��O��'+~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fespotlight.phpPK.3Y��&�<<J��Y2~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fetile.phpPK.3Yh�N���P���8~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Feturbulence.phpPK.3Y��g���L��c@~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Fieldset.phpPK.3Y�c��N���E~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Figcaption.phpPK.3Y�
��J���I~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Figure.phpPK.3Y���QQJ���M~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Filter.phpPK.3Y�{���J��eU~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Footer.phpPK.3Y�ie=[[V��SY~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormDivSubmitError.phpPK.3Y���^��"_~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormDivSubmitErrorTemplate.phpPK.3Y�߭�eeX��~e~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormDivSubmitSuccess.phpPK.3Y0"���`��Yk~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormDivSubmitSuccessTemplate.phpPK.3Y��cSSU���q~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormDivSubmitting.phpPK.3YV�-��]���w~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormDivSubmittingTemplate.phpPK.3Y@�<<V���}~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormDivVerifyError.phpPK.3YZ�_��^��k�~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormDivVerifyErrorTemplate.phpPK.3Y��÷I
I
Q����~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormMethodGet.phpPK.3Y�		Z��`�~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormMethodGetAmp4email.phpPK.3Y$Z�@@R���~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormMethodPost.phpPK.3Y����	�	[����~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/FormMethodPostAmp4email.phpPK.3Y�	�=mmE����~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/G.phpPK.3Y��u}III����~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Glyph.phpPK.3Yv���L��=�~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Glyphref.phpPK.3Y"���F����~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/H1.phpPK.3Y��SF����~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/H2.phpPK.3YU;5��S��d�~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/H2AmpNestedMenu.phpPK.3Y��F����~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/H3.phpPK.3Y����S��;�~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/H3AmpNestedMenu.phpPK.3Y�/t�F����~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/H4.phpPK.3Y4*2@��S���~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/H4AmpNestedMenu.phpPK.3Y��=bF��~�~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/H5.phpPK.3Y{ы���S����~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/H5AmpNestedMenu.phpPK.3Y=���F��U�~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/H6.phpPK.3Y��08��S����~bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/H6AmpNestedMenu.phpPK.3Y��8��H��,bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Head.phpPK.3Y��׆�J���bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Header.phpPK.3Y���		_��bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/HeadStyleAmp4adsBoilerplate.phpPK.3Ya�bA��a��bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/HeadStyleAmp4emailBoilerplate.phpPK.3Y���݁�[��bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/HeadStyleAmpBoilerplate.phpPK.3Y��++M��,bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/HeroImage.phpPK.3Yo��g!!K���3bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/HeroImg.phpPK.3Y�}}JJJ��.;bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Hgroup.phpPK.3YTՕ�FFI���>bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Hkern.phpPK.3Y_�ԬvvF���Ebunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Hr.phpPK.3YFF	��H��gIbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Html.phpPK.3Y�n�V��O��mObunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/HtmlDoctype.phpPK.3Y0�����V���Wbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/HtmlDoctypeAmp4ads.phpPK.3Y'�u�[[S���^bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/HtmlTransformed.phpPK.3Y�@�rrE���fbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/I.phpPK.3Y*߯<""Z���jbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/IAmphtmlSizerIntrinsic.phpPK.3Y��m��[��,rbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/IAmphtmlSizerResponsive.phpPK.3YɦfMMJ��?{bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Iframe.phpPK.3Y��Yk
k
I���bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Image.phpPK.3Ym#�	��T��Ƒbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ImageUsingSrcset.phpPK.3Y����

]���bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ImgIAmphtmlIntrinsicSizer.phpPK.3Y�g�}WWk��s�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ImgIAmphtmlIntrinsicSizerAmpStoryPlayer.phpPK.3Y��L��R��S�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ImgUsingSrcset.phpPK.3Y���aBBI��e�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Input.phpPK.3YT�=�W���bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputMaskCustomMask.phpPK.3YTTzzY����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputMaskDateDdMmYyyy.phpPK.3Yʕ$�zzY����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputMaskDateMmDdYyyy.phpPK.3YZV��ccU��s�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputMaskDateMmYy.phpPK.3Yn�zzY��I�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputMaskDateYyyyMmDd.phpPK.3Y6[JooX��:�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputMaskPaymentCard.phpPK.3Yu\y�<	<	Q���bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputTypeFile.phpPK.3Y�\�!	!	R���bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputTypeImage.phpPK.3Y��8xxU��[�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/InputTypePassword.phpPK.3Y���1��G��F	�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Ins.phpPK.3Ym�5�zzG��f�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Kbd.phpPK.3Y�dm��I��E�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Label.phpPK.3Y�P|��J��4�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Legend.phpPK.3Yx�y�OOF��"�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Li.phpPK.3YI��''H����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Line.phpPK.3Yo�<ttR��b'�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Lineargradient.phpPK.3Y��)yyV��F/�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/LineargradientStop.phpPK.3Y��\��P��36�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkItemprop.phpPK.3Y��~VVVV��I=�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkItempropSameas.phpPK.3Y��0��P��E�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkProperty.phpPK.3Y7v?]K��)L�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkRel.phpPK.3Y�Ҙ�U	U	T���S�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkRelCanonical.phpPK.3Y�h�b7	7	S��m]�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkRelManifest.phpPK.3Y�`\(��X��g�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkRelModulepreload.phpPK.3Y@Y<]C	C	R��&p�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkRelPreload.phpPK.3Yyi
i
e���y�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkRelStylesheetForAmpStory10Css.phpPK.3Y���]��ń�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/LinkRelStylesheetForFonts.phpPK.3Y���<NNK����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Listing.phpPK.3Y]N�~~H��͔�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Main.phpPK.3Y��~~H�����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Mark.phpPK.3YҬ7>��J�����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Marker.phpPK.3Y�!�11H��~��bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Mask.phpPK.3YKaLDDS����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaCharsetUtf8.phpPK.3YG���AAL��ʳ�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Metadata.phpPK.3YΨ��`��u��bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivContentLanguage.phpPK.3YZh�QQb����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivContentScriptType.phpPK.3Y�T�hEEa���Ȁbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivContentStyleType.phpPK.3Y���R99\��`Ѐbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivContentType.phpPK.3YoWZu��]��؀bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivImagetoolbar.phpPK.3Yw�t���\��T߀bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivOriginTrial.phpPK.3YL
,��Z����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivPicsLabel.phpPK.3Yh�#���]����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivResourceType.phpPK.3YoglOOd����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivXDnsPrefetchControl.phpPK.3Y��		^����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaHttpEquivXUaCompatible.phpPK.3Yă�DDZ��i�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmp3pIframeSrc.phpPK.3Y?�q��U��%�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmp4adsId.phpPK.3Y�@��W����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmp4adsVars.phpPK.3Y���-��_����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpAdDoubleclickSra.phpPK.3Y�b�==^��� �bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpAdEnableRefresh.phpPK.3YiA�T��^���'�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpConsentBlocking.phpPK.3Y;� Oa���.�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpCtaLandingPageType.phpPK.3Y�}N�66V��t6�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpCtaType.phpPK.3Y=&٩11U��=�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpCtaUrl.phpPK.3YX7��>>_���C�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpExperimentsOptIn.phpPK.3Y���^��}J�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpExperimentToken.phpPK.3Y�n��11b��Q�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpGoogleClientidIdApi.phpPK.3Y����QQh���W�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpLinkVariableAllowedOrigin.phpPK.3Y�@0�

[���^�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpListLoadMore.phpPK.3Y��/]�� e�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpRecaptchaInput.phpPK.3Y�G���X���k�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpScriptSrc.phpPK.3Y�4�i++a�� r�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpStoryGeneratorName.phpPK.3Y�.*�::d���x�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpStoryGeneratorVersion.phpPK.3Y�Σ�]]^����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAmpToAmpNavigation.phpPK.3Y35�}��V��_��bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAndContent.phpPK.3Y�7�vvZ��Ì�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameAppleItunesApp.phpPK.3Yx8�iT�����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/MetaNameViewport.phpPK.3Y2f����I��:��bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Meter.phpPK.3Y���RRL��c��bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Multicol.phpPK.3Y�X�{zzG����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Nav.phpPK.3Y��JJJ�����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Nextid.phpPK.3Y���BBH�����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Nobr.phpPK.3Yu�J77L��X��bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Noscript.phpPK.3Yy�R	��d�����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/NoscriptEnclosureForAmpStyleTags.phpPK.3Y��"mO��g��bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/NoscriptImg.phpPK.3Y��G�	�	_���ȁbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/NoscriptStyleAmpBoilerplate.phpPK.3Y�%��((F��-Ӂbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Ol.phpPK.3YK}<<F���؁bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/OP.phpPK.3Y2�MZZL��Y܁bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Optgroup.phpPK.3Y9�RyyJ���bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Option.phpPK.3Yo
m@��J����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Output.phpPK.3Y���EE��L�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/P.phpPK.3Y�<I��H����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Path.phpPK.3Ys2*Z��K����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Pattern.phpPK.3Y+d3&&K��i�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Picture.phpPK.3Y��A++Q����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/PictureSource.phpPK.3Y��<���K���
�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Polygon.phpPK.3Y�Q�|��L����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Polyline.phpPK.3Y-��zzG���bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Pre.phpPK.3Y��,�AAL����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Progress.phpPK.3Y�5�E���$�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Q.phpPK.3Y�����R��)�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Radialgradient.phpPK.3Y�p��yyV��B1�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/RadialgradientStop.phpPK.3Yر�vvF��/8�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Rb.phpPK.3Y��nnH��	<�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Rect.phpPK.3Y�h
5vvF���C�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Rp.phpPK.3Y�Ѿ�vvF���G�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Rt.phpPK.3Y�=8[[G���K�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Rtc.phpPK.3YY�!�~~H��QO�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Ruby.phpPK.3Y"��rrE��5S�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/S.phpPK.3Y����~~H��
W�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Samp.phpPK.3Y��S���Z�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmp3dGltf.phpPK.3YLMU��gb�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmp3qPlayer.phpPK.3YԲE}llS���i�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAccess.phpPK.3Y���S��[���q�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAccessFewcents.phpPK.3Y�G�Hdd[��z�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAccessLaterpay.phpPK.3Y�.���X�����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAccessPoool.phpPK.3Y8:���Y��Z��bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAccessScroll.phpPK.3Y�K``V�����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAccordion.phpPK.3Yirq1��W�����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAccordion2.phpPK.3Y���WX�����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpActionMacro.phpPK.3Yk��/U��K��bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAdCustom.phpPK.3YC�4'		T��δ�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAddthis.phpPK.3Y@'*�S��I��bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAdExit.phpPK.3Y����V���Âbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAnalytics.phpPK.3Y�S�ӂ�Q���˂bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAnim.phpPK.3Yj�!//V���ӂbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAnimation.phpPK.3Y�N���Y��dۂbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpApesterMedia.phpPK.3Y�H2�JJV��a�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAppBanner.phpPK.3Y��tB��R���bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAudio.phpPK.3Y���T���bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAutoAds.phpPK.3Y)��jY�����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpAutocomplete.phpPK.3Y��}��Y��'�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpBaseCarousel.phpPK.3Y���V��z
�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpBeopinion.phpPK.3YZ5*GGQ���bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpBind.phpPK.3Y!��88_����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpBodymovinAnimation.phpPK.3Y�X��W��k!�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpBridPlayer.phpPK.3YD.��ffW��_)�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpBrightcove.phpPK.3Y"��ӝ�X��:2�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpBrightcove2.phpPK.3Yޏ�0##Z��M;�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpBysideContent.phpPK.3Y�B�&&U���B�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpCacheUrl.phpPK.3Yy���PPY���J�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpCallTracking.phpPK.3Y;��U��HR�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpCarousel.phpPK.3Y�od�(([���Z�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpConnatixPlayer.phpPK.3YX���		T��]b�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpConsent.phpPK.3Y��llX���i�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpDailymotion.phpPK.3Yg����Y���r�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpDailymotion2.phpPK.3Y�����Z���{�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpDateCountdown.phpPK.3Y�����X��-��bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpDateDisplay.phpPK.3Yh��W��|��bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpDatePicker.phpPK.3Yl��###Z����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpDelightPlayer.phpPK.3Y@����^�����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpDynamicCssClasses.phpPK.3Y����X�����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpEmbedlyCard.phpPK.3Yy���W����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpExperiment.phpPK.3Y��,��U��j��bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFacebook.phpPK.3Ynb�%%]��h��bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFacebookComments.phpPK.3Yk�(tY��ƃbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFacebookLike.phpPK.3Y�Js�Y���΃bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFacebookPage.phpPK.3Y�:��XXT��׃bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFitText.phpPK.3YBMY��U���߃bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFitText2.phpPK.3Y���‚�Q���bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFont.phpPK.3YUa#r��Q����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpForm.phpPK.3YύM�LLY���bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFxCollection.phpPK.3Y�fs��[����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpFxFlyingCarpet.phpPK.3Y��μ��P����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpGeo.phpPK.3Y��HqmmS���bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpGfycat.phpPK.3Y8e�>��Q����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpGist.phpPK.3Y2���>>`��`�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpGoogleDocumentEmbed.phpPK.3YSHHb��'�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpGoogleReadAloudPlayer.phpPK.3Y��Sz##Y���.�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpGwdAnimation.phpPK.3Y�Pp��Q��~6�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpHulu.phpPK.3Y}���NNS���=�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpIframe.phpPK.3YJ2�΅�T���F�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpIframe2.phpPK.3Yx܃U���O�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpIframely.phpPK.3Y&�Š�Z��"W�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpImageLightbox.phpPK.3Y�}�X��$_�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpImageSlider.phpPK.3Y߭��U���f�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpImaVideo.phpPK.3Y��6�R��8n�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpImgur.phpPK.3Y����Z���u�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpInlineGallery.phpPK.3Y�(��>>V��~�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpInputmask.phpPK.3Y�I``V�����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpInstagram.phpPK.3Y��dI��W�����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpInstagram2.phpPK.3Y����a�����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpInstallServiceworker.phpPK.3Yq��p>>U�����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpIzlesene.phpPK.3Y���uuU��j��bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpJwplayer.phpPK.3Y���q��Z��R��bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpKalturaPlayer.phpPK.3Y���ZZU��U��bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpLightbox.phpPK.3Y���Đ�V��"��bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpLightbox2.phpPK.3YO��F\��&Ʉbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpLightboxGallery.phpPK.3YvL��((Y���фbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpLinkRewriter.phpPK.3Yȑ�ddQ��Sڄbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpList.phpPK.3Y=�i��U��&�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpLiveList.phpPK.3YiRp�NNS����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpMathml.phpPK.3Y���^T��F�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpMathml2.phpPK.3YM�\U����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpMegaMenu.phpPK.3YiT�-V��W�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpMegaphone.phpPK.3Y@�3�66^���
�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpMinuteMediaPlayer.phpPK.3Y'٫KV����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpMowplayer.phpPK.3Y��C��R���bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpMraid.phpPK.3Y�l�eeU���"�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpMustache.phpPK.3Y�a�W��Z+�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpNestedMenu.phpPK.3Y�z U���2�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpNextPage.phpPK.3YK�2  Y���:�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpNexxtvPlayer.phpPK.3Yۋ:wwU��oB�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpO2Player.phpPK.3Y��L�GGX��YJ�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpOnerrorV0Js.phpPK.3Yb�:���_��R�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpOnerrorV0JsOrV0Mjs.phpPK.3YF79Y��m[�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpOnetapGoogle.phpPK.3Y��  Y��c�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpOoyalaPlayer.phpPK.3Y�ִ�<<`���j�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpOrientationObserver.phpPK.3YD~լT��Tr�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpPanZoom.phpPK.3YX�QxxV���y�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpPinterest.phpPK.3Y��

U�����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpPlaybuzz.phpPK.3Y���MM]��=��bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpPositionObserver.phpPK.3Y�ʪ(W����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpPowrPlayer.phpPK.3Y|�z��X�����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpReachPlayer.phpPK.3Y:N�''[�����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpRecaptchaInput.phpPK.3Y3¯�$$Z��+��bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpRedbullPlayer.phpPK.3Yɔ3�==S��ǯ�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpReddit.phpPK.3Y_��S��u��bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpRender.phpPK.3Y^'r<W��쾅bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpRiddleQuiz.phpPK.3Y��2S��yƅbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpScript.phpPK.3Y��g�ZZU���ͅbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSelector.phpPK.3Y���vvV���օbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSelector2.phpPK.3Y|T|TTT���߅bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSidebar.phpPK.3Yp�i=��U��l�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSidebar2.phpPK.3Y`V��i�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSkimlinks.phpPK.3Y(C��SSS�����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSlides.phpPK.3Y�=zW����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSmartlinks.phpPK.3Y'�X�ppX��N�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSocialShare.phpPK.3Y��*��Y��4�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSocialShare2.phpPK.3Y�<:ZffW��n�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSoundcloud.phpPK.3Y:�>��X��I&�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSoundcloud2.phpPK.3Y���<��^��\/�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSpringboardPlayer.phpPK.3Y����U��s7�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStickyAd.phpPK.3Y�<XR���?�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStory.phpPK.3YLӽCU���F�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStory360.phpPK.3Yӆ|!!Y��sN�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStoryAutoAds.phpPK.3Y�3O�::_��V�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStoryAutoAnalytics.phpPK.3Y���##Z���]�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStoryCaptions.phpPK.3Y�{!OWW]��]e�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStoryDvhPolyfill.phpPK.3Y�M�y//]��/n�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStoryInteractive.phpPK.3Y_i�r55^���u�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStoryPanningMedia.phpPK.3YgF���X���}�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStoryPlayer.phpPK.3Y�r77SSZ�����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStoryShopping.phpPK.3Y[E�c!!_��d��bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStorySubscriptions.phpPK.3Y��Z���Z����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpStreamGallery.phpPK.3Yq��KMMZ����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSubscriptions.phpPK.3Yj��`��Ť�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpSubscriptionsGoogle.phpPK.3Y��ujS��R��bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpTiktok.phpPK.3Y=!r���T��ȴ�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpTimeago.phpPK.3YuάdY����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpTruncateText.phpPK.3Ywv�lTTT���Ćbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpTwitter.phpPK.3Y��/��U��]͆bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpTwitter2.phpPK.3Y:�+��]��[ֆbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpUserNotification.phpPK.3Y,�›HHR��lކbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVideo.phpPK.3Y���aaS��$�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVideo2.phpPK.3Y�ؚFY����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVideoDocking.phpPK.3YSba�ppX�����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVideoIframe.phpPK.3Yp�@@Y��r�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVideoIframe2.phpPK.3Y�2#��R��)	�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVimeo.phpPK.3Ye��S��_�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVimeo2.phpPK.3Y'���eeQ����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVine.phpPK.3YP�X���"�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpViqeoPlayer.phpPK.3Y��j���O��7*�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpVk.phpPK.3Y���T���1�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpWebPush.phpPK.3Y�a�  Y��9�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpWistiaPlayer.phpPK.3Y��3t��[���@�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpWordpressEmbed.phpPK.3Y�vN�yyR���H�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpYotpo.phpPK.3Y����TTT���P�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpYoutube.phpPK.3Y��1���U��`Y�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptAmpYoutube2.phpPK.3Ym��$$l��^b�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpAccordionAmp4email.phpPK.3Y,{O'��o��k�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpAutocompleteAmp4email.phpPK.3Y�Y����g��es�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpBindAmp4email.phpPK.3Y�J�((k���{�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpCarouselAmp4email.phpPK.3YK*��GGj��l��bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpFitTextAmp4email.phpPK.3Y��sAg��;��bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpFormAmp4email.phpPK.3Y9b
�		p��˕�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpImageLightboxAmp4email.phpPK.3Y�;d���i��s��bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpLightboxAmp4ads.phpPK.3YE՗"	"	k��觇bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpLightboxAmp4email.phpPK.3Yuv���g�����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpListAmp4email.phpPK.3Ym̂k�����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpSelectorAmp4email.phpPK.3Y��L��j��W‡bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpSidebarAmp4email.phpPK.3YYcK���j���ʇbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomElementAmpTimeagoAmp4email.phpPK.3Y����j���҇bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomTemplateAmpMustacheAmp4ads.phpPK.3Y�a�ʭ�l��܇bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptCustomTemplateAmpMustacheAmp4email.phpPK.3Y���eeR��F�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptIdAmpRtc.phpPK.3YP)��_���bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptTypeApplicationLdJson.phpPK.3Y_��ooW�����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptTypeTextPlain.phpPK.3Y�tA���`��q�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/ScriptTypeTextPlainAmp4email.phpPK.3YY�O3��K����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Section.phpPK.3Y��gRRT����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/SectionAmp4email.phpPK.3Y�U��CCJ��v$�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Select.phpPK.3Y~	�Y��H��!-�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Slot.phpPK.3Y��$Ȃ�I��v1�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Small.phpPK.3YɑOWEEN��_5�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Solidcolor.phpPK.3Yl~_JJJ��<�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Spacer.phpPK.3Y�~~H���?�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Span.phpPK.3Y<�U���C�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/SpanAmpNestedMenu.phpPK.3YR��4X��I�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/SpanSwgAmpCacheNonce.phpPK.3Y@�6��Q���P�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/StandardImage.phpPK.3Y�g���O���W�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/StandardImg.phpPK.3Y�S�"JJJ���^�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Strike.phpPK.3Y��Q��J��@b�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Strong.phpPK.3Y�	����R��.f�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/StyleAmpCustom.phpPK.3Y�*��Y��+��bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/StyleAmpCustomAmp4ads.phpPK.3Y��X=[[[��$��bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/StyleAmpCustomAmp4email.phpPK.3Y�ٟ�--[�����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/StyleAmpCustomCssStrict.phpPK.3Y��FFF]�����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/StyleAmpCustomLengthCheck.phpPK.3Y-QrnaaU��_ňbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/StyleAmpKeyframes.phpPK.3Y�A�\..T��3߈bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/StyleAmpNoscript.phpPK.3Yf1
	
	^����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/StyleAmpRuntimeTransformed.phpPK.3Y .�*zzG��\�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Sub.phpPK.3Y�
M��a��;�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/SubscriptionsScriptCiphertext.phpPK.3Y._gQ��o����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/SubscriptionsSectionContentSwgAmpCacheNonce.phpPK.3Y��E��K����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Summary.phpPK.3Yn�zzG��>�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Sup.phpPK.3Y72���G���bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Svg.phpPK.3Y�b���L��p'�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/SvgTitle.phpPK.3YIҷ�K��h-�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Switch_.phpPK.3Y� g��J���3�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Symbol.phpPK.3YqTi���I���:�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Table.phpPK.3Y��i(��I���@�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Tbody.phpPK.3YT�J

F���D�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Td.phpPK.3Y�N���L��KJ�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Template.phpPK.3Y��*�U��IY�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/TemplateAmp4email.phpPK.3Y�qX��H���h�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Text.phpPK.3Y<�:L���p�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Textarea.phpPK.3Y12�L��M��bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Textpath.phpPK.3Y����I�����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Tfoot.phpPK.3Yq����F�����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Th.phpPK.3Y�����I���bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Thead.phpPK.3Y31����H��ܕ�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Time.phpPK.3Y_��I��К�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Title.phpPK.3Y촛%IIR��O��bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/TitleAmp4email.phpPK.3Yt�:_wwF����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Tr.phpPK.3Y�d!��H��㩉bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Tref.phpPK.3Y/�*PPI��̰�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Tspan.phpPK.3Y>�Y�::F�����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Tt.phpPK.3Yiv�rrE��!��bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/U.phpPK.3Y��0vvF�����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Ul.phpPK.3Y
Pv33H���Ébunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Use_.phpPK.3Y���,}}H��iˉbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Var_.phpPK.3Y+�����I��Lωbunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Video.phpPK.3YKQ�))O��z؉bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/VideoSource.phpPK.3Yk�n���N���bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/VideoTrack.phpPK.3Y (N[��^�bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/VideoTrackKindSubtitles.phpPK.3Y�i���H����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/View.phpPK.3Y#�n�FFI����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Vkern.phpPK.3Y���zzG�����bunyad-amp/vendor/ampproject/amp-toolbox/src/Validator/Spec/Tag/Wbr.phpPK.3Y��u����0��c��bunyad-amp/vendor/composer/autoload_classmap.phpPK.3YDHH-����bunyad-amp/vendor/composer/autoload_files.phpPK.3Y�/t��2��;�bunyad-amp/vendor/composer/autoload_namespaces.phpPK.3Y�ԍ��,���bunyad-amp/vendor/composer/autoload_psr4.phpPK.3Y'����,����bunyad-amp/vendor/composer/autoload_real.phpPK.3Y\����%�%.���bunyad-amp/vendor/composer/autoload_static.phpPK.3Y2@u�?�?*��=�bunyad-amp/vendor/composer/ClassLoader.phpPK.3Y4�V�e)e))��Y�bunyad-amp/vendor/composer/installed.jsonPK.3Y��*		(��+��bunyad-amp/vendor/composer/installed.phpPK.3Y 2��??0�����bunyad-amp/vendor/composer/InstalledVersions.phpPK.3Y �.."���ːbunyad-amp/vendor/composer/LICENSEPK.3Y>��L��-��SАbunyad-amp/vendor/composer/platform_check.phpPK.3Y��q�
�
H��;Ԑbunyad-amp/vendor/fasterimage/fasterimage/src/FasterImage/ExifParser.phpPK.3Y^��+'+'I��kߐbunyad-amp/vendor/fasterimage/fasterimage/src/FasterImage/FasterImage.phpPK.3Y�+�1/1/I����bunyad-amp/vendor/fasterimage/fasterimage/src/FasterImage/ImageParser.phpPK.3Ya��A��]���6�bunyad-amp/vendor/fasterimage/fasterimage/src/FasterImage/Exception/InvalidImageException.phpPK.3Ymgx��@���7�bunyad-amp/vendor/sabberworm/php-css-parser/src/OutputFormat.phpPK.3Y2rrC���W�bunyad-amp/vendor/sabberworm/php-css-parser/src/OutputFormatter.phpPK.3Y��U���:���o�bunyad-amp/vendor/sabberworm/php-css-parser/src/Parser.phpPK.3YL�((>��xv�bunyad-amp/vendor/sabberworm/php-css-parser/src/Renderable.phpPK.3Y.�k��	�	<���w�bunyad-amp/vendor/sabberworm/php-css-parser/src/Settings.phpPK.3YQK���C��ށ�bunyad-amp/vendor/sabberworm/php-css-parser/src/Comment/Comment.phpPK.3YC!G���G��̆�bunyad-amp/vendor/sabberworm/php-css-parser/src/Comment/Commentable.phpPK.3Y��*���K�����bunyad-amp/vendor/sabberworm/php-css-parser/src/CSSList/AtRuleBlockList.phpPK.3YeH�ettH����bunyad-amp/vendor/sabberworm/php-css-parser/src/CSSList/CSSBlockList.phpPK.3YA���=�=C���bunyad-amp/vendor/sabberworm/php-css-parser/src/CSSList/CSSList.phpPK.3Y3���D��%�bunyad-amp/vendor/sabberworm/php-css-parser/src/CSSList/Document.phpPK.3Y&����D����bunyad-amp/vendor/sabberworm/php-css-parser/src/CSSList/KeyFrame.phpPK.3Yl6\�qqB��H��bunyad-amp/vendor/sabberworm/php-css-parser/src/Parsing/Anchor.phpPK.3Yj�yBffK���bunyad-amp/vendor/sabberworm/php-css-parser/src/Parsing/OutputException.phpPK.3YI��
�;�;G����bunyad-amp/vendor/sabberworm/php-css-parser/src/Parsing/ParserState.phpPK.3Ycܚ�22K���?�bunyad-amp/vendor/sabberworm/php-css-parser/src/Parsing/SourceException.phpPK.3Yq��R��jB�bunyad-amp/vendor/sabberworm/php-css-parser/src/Parsing/UnexpectedEOFException.phpPK.3YyW'���T���C�bunyad-amp/vendor/sabberworm/php-css-parser/src/Parsing/UnexpectedTokenException.phpPK.3Y� EJ!!C��!J�bunyad-amp/vendor/sabberworm/php-css-parser/src/Property/AtRule.phpPK.3Y5�Y�	�	D���M�bunyad-amp/vendor/sabberworm/php-css-parser/src/Property/Charset.phpPK.3Y�0�
�
I���W�bunyad-amp/vendor/sabberworm/php-css-parser/src/Property/CSSNamespace.phpPK.3Y����
�
C���b�bunyad-amp/vendor/sabberworm/php-css-parser/src/Property/Import.phpPK.3Y����M���m�bunyad-amp/vendor/sabberworm/php-css-parser/src/Property/KeyframeSelector.phpPK.3Y݀���
�
E��q�bunyad-amp/vendor/sabberworm/php-css-parser/src/Property/Selector.phpPK.3Y��M=�'�'=��R�bunyad-amp/vendor/sabberworm/php-css-parser/src/Rule/Rule.phpPK.3Y�492%%E�����bunyad-amp/vendor/sabberworm/php-css-parser/src/RuleSet/AtRuleSet.phpPK.3YY8`DV�V�L����bunyad-amp/vendor/sabberworm/php-css-parser/src/RuleSet/DeclarationBlock.phpPK.3Y^]��+�+C���.�bunyad-amp/vendor/sabberworm/php-css-parser/src/RuleSet/RuleSet.phpPK.3Y�3�NNF��+[�bunyad-amp/vendor/sabberworm/php-css-parser/src/Value/CalcFunction.phpPK.3Y>�em��K���k�bunyad-amp/vendor/sabberworm/php-css-parser/src/Value/CalcRuleValueList.phpPK.3Y��#��?���m�bunyad-amp/vendor/sabberworm/php-css-parser/src/Value/Color.phpPK.3Y��3���E��*��bunyad-amp/vendor/sabberworm/php-css-parser/src/Value/CSSFunction.phpPK.3Y8�_�55C��A��bunyad-amp/vendor/sabberworm/php-css-parser/src/Value/CSSString.phpPK.3YSv�wuuD��מ�bunyad-amp/vendor/sabberworm/php-css-parser/src/Value/Expression.phpPK.3Yԙ��		B�����bunyad-amp/vendor/sabberworm/php-css-parser/src/Value/LineName.phpPK.3Ys3����H����bunyad-amp/vendor/sabberworm/php-css-parser/src/Value/PrimitiveValue.phpPK.3Y�(:�,,G��a��bunyad-amp/vendor/sabberworm/php-css-parser/src/Value/RuleValueList.phpPK.3Y�+׋��>���bunyad-amp/vendor/sabberworm/php-css-parser/src/Value/Size.phpPK.3YZ/f���=��:œbunyad-amp/vendor/sabberworm/php-css-parser/src/Value/URL.phpPK.3Y�����?��*Γbunyad-amp/vendor/sabberworm/php-css-parser/src/Value/Value.phpPK.3Y�8��0
0
C���bunyad-amp/vendor/sabberworm/php-css-parser/src/Value/ValueList.phpPK.3Y�r

;�����bunyad-amp/vendor/willwashburn/stream/src/Stream/Stream.phpPK.3Y�g>���H����bunyad-amp/vendor/willwashburn/stream/src/Stream/StreamableInterface.phpPK.3Y@T�M��\���bunyad-amp/vendor/willwashburn/stream/src/Stream/Exception/StreamBufferTooSmallException.phpPK��Y�Downloaded From GPLAstra.com

Youez - 2016 - github.com/yon3zu
LinuXploit